簡體   English   中英

從 32 位 c++ 程序讀取 64 位注冊表?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM