WIn32API リモートPCのレジストリにアクセスする

リモートPCのレジストリにアクセスするには、RegConnectRegistry関数を用いる


RegConnectRegistryプロトタイプ

LONG RegConnectRegistry(
  LPCTSTR lpMachineName, // コンピュータ名
  HKEY hKey,             // 定義済みのレジストリハンドル
  PHKEY phkResult        // リモートレジストリのキーハンドルが格納されるバッファ
);


リモートPCのレジストリを操作するためには、リモートレジストリサービスが起動していることが必要である。


  • リモートPCのレジストリに接続し、HKEY_LOCAL_MACHINE直下のキーを列挙するコード
  • #include <windows.h>
    #include <stdio.h>
    
    int main()
    {
        HKEY hKey;
        LONG lRet;
        TCHAR szSubKeyName[256];
        DWORD dwSubKeyNameSize;
        FILETIME ftLastWriteTime;
        DWORD i;
        LPCTSTR lpszComputerName = TEXT("\\\\PCNAME");//リモートPC名を指定する(「\\computer_name」の形式)
    
        lRet = RegConnectRegistry(lpszComputerName, HKEY_LOCAL_MACHINE, &hKey);
        if (lRet != ERROR_SUCCESS) {
            return 1;
        }
    
    
        i = 0;
        while (true) {
        
            dwSubKeyNameSize = sizeof(szSubKeyName)/sizeof(szSubKeyName[0]);
    
            lRet = RegEnumKeyEx(hKey,
                i++,
                szSubKeyName,
                &dwSubKeyNameSize,
                NULL,
                NULL,
                NULL,
                &ftLastWriteTime);
            
            if (lRet != ERROR_SUCCESS) {
                break;
            }
    
            _tprintf(TEXT("%s\n"), szSubKeyName);
    
        }
    
        RegCloseKey(hKey);
    
        return 0;
    }




  • 実行結果(リモートPCではなく、lpszComputerNameにこのプログラムを実行しているPC名を指定した場合の結果)
  • BCD00000000
    HARDWARE
    SAM
    SECURITY
    SOFTWARE
    SYSTEM


  • 参考

  • http://msdn.microsoft.com/ja-jp/library/cc429900.aspx