[英]Reading 64bit registry from 32bit c++ program?
我正在嘗試從我的 c++ 程序中讀取注冊表,當我在 64 位模式下運行它時它工作正常,但是當我切換到 32 位模式時它不會。 現在我了解到注冊表有 2 個獨立的部分,即 64 位和 32 位部分。 我讀到我應該使用 KEY_WOW64_64KEY 但我不知道如何。 以下代碼是我所擁有的:
char value[255];
DWORD BufferSize = BUFFER;
RegGetValue(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Cryptography", "MachineGuid", RRF_RT_ANY, NULL, (PVOID)&value, &BufferSize);
std::wcout << value << std::endl;
system("pause");
它工作正常,但是當我切換到 32 位時,它就不行了。 所以我嘗試了以下方法:將 RRF_RT_ANY 替換為 RRF_RT_ANY | KEY_WOW64_32KEY
char value[255];
DWORD BufferSize = BUFFER;
RegGetValue(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Cryptography", "MachineGuid", RRF_RT_ANY | KEY_WOW64_32KEY, NULL, (PVOID)&value, &BufferSize);
std::wcout << value << std::endl;
system("pause");
但這也不起作用,應用它的正確方法是什么?
It returns a value of "ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ"
根據文檔:
RRF_SUBKEY_WOW6464KEY
如果 lpSubKey 不是 NULL,則使用 KEY_WOW64_64KEY 訪問權限打開 lpSubKey 指定的子密鑰。
因此,您可以將代碼修改為:
RegGetValue(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Cryptography",L"MachineGuid", RRF_RT_ANY | RRF_SUBKEY_WOW6464KEY, NULL, (PVOID)&value, &BufferSize);
然后它對我有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.