簡體   English   中英

在C ++中讀取Windows注冊表項REG_BINARY

[英]Reading Windows Registry Key REG_BINARY in c++

我正在嘗試讀取C ++中的注冊表項,這是我的功能:

    DWORD regkey()
{
    HKEY hKey;
    DWORD dwDisp = REG_BINARY;
    DWORD dwSize = sizeof(dwDisp);
    DWORD dwValue = 0;
    DWORD dwReturn;
    DWORD dwBufSize = sizeof(dwDisp);

    if( RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"HERE\\IS\\THE\\REGKEY",0, KEY_ALL_ACCESS, &hKey) == ERROR_SUCCESS)
    {
        DWORD error = RegQueryValueEx(hKey,L"key",0,0, (LPBYTE)&dwReturn, &dwBufSize);
        if(error == ERROR_SUCCESS)
        {
            return dwReturn;
        }
    }

    RegCloseKey(hKey);

    return 0;
}

但它什么也沒返回...請幫助我。

注冊表函數將返回有意義的錯誤代碼,它可以幫助您診斷問題。 嘗試保留該代碼:

{
    HKEY hKey;
    DWORD dwDisp = REG_BINARY;
    DWORD dwSize = sizeof(dwDisp);
    DWORD dwValue = 0;
    DWORD dwReturn;
    DWORD dwBufSize = sizeof(dwReturn);

    DWORD dwError = RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"HERE\\IS\\THE\\REGKEY",0, KEY_READ, &hKey) ;
    if( dwError == ERROR_SUCCESS)
    {
        dwError = RegQueryValueEx(hKey,L"key",0,0, (LPBYTE)&dwReturn, &dwBufSize);
        if(error == ERROR_SUCCESS)
        {
            // it worked!
        }
        else
        {
            // it failed to read, check dwError for the error code
            dwResult = 0;
        }

        RegCloseKey(hKey);
    }
    else
    {
        // it failed to open, check dwError for the error code
        dwResult = 0;
    }


    return 0;
}

如果使用的是Visual Studio,則可以中斷任何故障點並在監視窗口中評估dwError,hr ,hr格式說明符使調試器為您查找錯誤代碼,並提供描述問題的有意義的字符串。 那應該使您了解出了什么問題。

如果您可以告訴我們哪個功能失敗了,以及您從該功能找回了哪些代碼,我們也許可以提供更詳細的幫助。 就目前而言,您已經向我們展示了一些猜謎游戲。 也許您拼錯了注冊表項名稱或給出了錯誤的路徑。 您的代碼似乎暗示您正在傳遞注冊表項RegQueryValueEx() ,但您要向該函數傳遞值名稱,而不是鍵名稱。 可能您的訪問權限有問題,因為您正在查看注冊表的受保護部分,而沒有作為具有足夠權限讀取該密鑰的帳戶運行。 (因此,您應該傳遞KEY_READ而不是KEY_ALL_ACCESS 。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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