キーの下にあるすべての CLSID キーを取得したいと考えていHKEY_CLASSES_ROOT\\SOFTWARE\\Classes\\CLSID
ます。
HKEY_LOCAL_MACHINE\\SOFTWARE\\Classes\\CLSID
そのキーはマージされたキーのミラーであることを知っていHKEY_CURRENT_USER\\SOFTWARE\\Classes\\CLSID
ます。
これまでのところ、すべてHKEY_CLASSES_ROOT\\SOFTWARE\\Classes\\CLSID
(HKEY_LOCAL_MACHINE\\...
およびHKEY_CURRENT_USER\\...
同様) を列挙し、そのキーの名前を に取得できますstd::wstring[]
。しかし、そのキーを開こうとすると:
//CLSID = e.g. L"{CAFEEFAC-0013-0001-0001-ABCDEFFEDCBB}"
firstKey = HKEY_LOCAL_MACHINE;
keysPath = L"\\SOFTWARE\\Classes\\CLSID\\"+CLSID;
if(x64System)
regsam = KEY_ALL_ACCESS|KEY_WOW64_64KEY; //on my system
else
regsam = KEY_ALL_ACCESS;
result = RegOpenKeyEx(firstKey, keysPath.c_str(), 0, regsam, &outputKey);
を返すため、 に対してのみ機能します。プログラムを管理者として実行した場合でも( regedit.exeでは、キーの名前が適切であることがわかります。エラー メッセージが見つからない場合は、いずれにせよ)。HKEY_CURRENT_USER
HKEY_LOCAL_MACHINE
ERROR_ACCESS_DENIED
ERROR_ACCESS_DENIED
では、そのキーにアクセスするにはどうすればよいでしょうか? 一部のプログラムがそのキーにアクセスできると確信しています。または、少なくともデフォルト値を取得する方法はありますか (それだけで十分です)。
私のプログラムでは、名前をリストすることしかRegQueryInfoKey
できませんが、それらにアクセスすることはできませんRegOpenKeyEx
。