キーの下にあるすべての 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_USERHKEY_LOCAL_MACHINEERROR_ACCESS_DENIEDERROR_ACCESS_DENIED
では、そのキーにアクセスするにはどうすればよいでしょうか? 一部のプログラムがそのキーにアクセスできると確信しています。または、少なくともデフォルト値を取得する方法はありますか (それだけで十分です)。
私のプログラムでは、名前をリストすることしかRegQueryInfoKeyできませんが、それらにアクセスすることはできませんRegOpenKeyEx。