32bitアプリから 64bit レジストリにアクセスする方法と 2000での注意

32bit アプリから レジストリにアクセスすると、 Wow6432Node のようなへんてこな名前のノードにアクセスすることになります。

WOW64 におけるレジストリのリダイレクトの例 (Windows)

しかし、REGSAM パラメータに KEY_WOW64_32KEY やKEY_WOW64_64KEY を指定することで、 32bitレジストリか 64bit レジストリかを 指定してアクセスすることがRegCreateKeyEx や RegOpenKeyEx できます。

Windows 2000では これらのオプションはサポートされていませんが、指定して実行すると、ERROR 5 (ERROR_ACCESS_DENIED/アクセス拒否)になります。

対応 32bit OS で実行するとどちらも、同じ32bitノードへのアクセスになり、エラーにはなりません。

#define KEY_WOW64_64KEY 0x100
#define KEY_WOW64_32KEY 0x200

HKEY hKey;
if(RegOpenKeyExA(HKEY_LOCAL_MACHINE,
    "software\\Microsoft\\Windows NT\\CurrentVersion", 0,
    KEY_ALL_ACCESS | KEY_WOW64_64KEY,
    &hKey)==ERROR_SUCCESS){
  RegSetValueExA(hKey,"test",0,REG_SZ,"test345",7);
  RegCloseKey(hKey);
}

ちなみに両方指定(KEY_WOW64_32KEY|KEY_WOW64_64KEY) すると、対応している場合は 87(ERROR_INVALID_PARAMETER/パラメータエラー) が、非対応の場合は 5 が帰ってくるので判定に使えるかも ?

Registry Key Security and Access Rightsregistryregistry, security (Windows)

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です