2009-11-03 89 views
3

我第一次以編程方式玩註冊表,但它不能很好地工作(但至少我沒有銷燬我的電腦)。特別是,我不斷收到來自RegCreateKeyEx和RegSetValueEx的錯誤5(訪問被拒絕)。對我來說最奇怪的是,當HKEY_CURRENT_USER\Software\dir1\Sub Directory已經存在時,RegCreateKeyEx會以錯誤5失敗,但是當它不存在時,它會成功創建它;然後在RegSetValueEx上失敗。訪問被拒絕註冊表

我在這段代碼中做了什麼錯誤?

BOOL MyDialog::SaveLocationsToRegistry() 
{ 
    HKEY hkey; 
    DWORD dwDisposition; 
    DWORD dwType, dwSize; 
    LONG result = RegCreateKeyEx(HKEY_CURRENT_USER, TEXT("Software\\dir1\\Sub Directory"), 
           0, NULL, 0, 0, NULL, &hkey, &dwDisposition); 
    if(result == ERROR_SUCCESS) 
    { 
     LPCTSTR szLastFolder = "C:\\Documents and Settings\\user\\My Documents\\Copy of item\0"; 
     dwType = REG_SZ; 
     dwSize = strlen(szLastFolder)+1; 
     LONG setResult = RegSetValueEx(hkey, TEXT("LastFolder"), 0, dwType, 
     (PBYTE)&szLastFolder, dwSize); 
     RegCloseKey(hkey); 
     return setResult == ERROR_SUCCESS; 
    } 
    else 
    { 
     return false; 
    } 
} 

注:絕對路徑是唯一有暫時的。嬰兒的步驟;-)

+0

您正在以管理員身份運行嗎?或與一些受限訪問? – Naveen 2009-11-03 06:33:13

回答

15

你不是要求任何訪問權限。您可能要爲第6個參數(samDesired)指定KEY_WRITE(或其他)。

LONG result = RegCreateKeyEx(HKEY_CURRENT_USER, TEXT("Software\\dir1\\Sub Directory"), 
       0, NULL, 0, KEY_WRITE, NULL, &hkey, &dwDisposition); 
+0

謝謝!我現在得到的亂碼保存到我的註冊表中......但它是:-) – Smashery 2009-11-03 06:45:30

+0

亂碼竟然是一個不正確的間接水平或類似的東西。再次感謝你的幫助! – Smashery 2009-11-03 06:51:52

+1

'KEY_WRITE'包含多個訪問權限。如果它們中的任何一個未被授予調用用戶,則'RegCreateKeyEx()'將失敗。由於代碼只是想調用'RegSetValueEx()',所以我會自己指定'KEY_SET_VALUE'。 – 2012-08-10 17:22:29