看起來順序在閱讀註冊表中的某些鍵時很重要,這讓我感到驚訝。 我通過Regedit
創建了fake_entry
。閱讀Windows註冊表時可以排序嗎?
當我到RegOpenKeyEx()
一個電話後立即讀取fake_entry
,它的工作原理。如果我在fake_entry
之前讀取其他任何內容,則讀取到fake_entry
失敗。
例失敗:
openResult=RegOpenKeyEx(HKEY_LOCAL_MACHINE, _TEXT("SOFTWARE\\Microsoft\\NET Framework Setup\\NDP\\v4\\Full"), 0, KEY_READ|KEY_WOW64_64KEY, &root);
readResult1=RegQueryValueEx(root, _TEXT("InstallPath"), NULL, NULL, data1, &size);
readResult2=RegQueryValueEx(root, _TEXT("fake_entry"), NULL, NULL, data2, &size);
在上述中,InstallPath
閱讀作品和fake_entry
讀取失敗了 「錯誤2,ERROR_FILE_NOT_FOUND
」。
實施例,工程:
openResult=RegOpenKeyEx(HKEY_LOCAL_MACHINE, _TEXT("SOFTWARE\\Microsoft\\NET Framework Setup\\NDP\\v4\\Full"), 0, KEY_READ|KEY_WOW64_64KEY, &root);
readResult2=RegQueryValueEx(root, _TEXT("fake_entry"), NULL, NULL, data2, &size);
readResult1=RegQueryValueEx(root, _TEXT("InstallPath"), NULL, NULL, data1, &size);
在上面,兩個讀取工作。
爲什麼一個工作,另一個失敗?它真的可以是訂單嗎?每撥打一次電話ReqQueryValueEx()
,我需要撥打RegOpenKeyEx()
嗎?除此之外,我在互聯網上看到的東西似乎顯示出來。
是的,我知道這不是我應該改變的註冊表位置。我偶然發現了這個,因爲我was learning aboutKEY_WOW64_64KEY
,我很好奇爲什麼秩序似乎很重要。
使用ASCII字符編碼在Visual Studio 2010中運行Windows 7,64位C++。
對於如何將兩個連續調用的一個變量'size'用作輸入輸出參數,有些奇怪。這可能會導致接收'ERROR_MORE_DATA' – Anton
@安頓,是的,你是對的。就是這樣。把它寫成答案,以便我可以獎勵積分。 – kmort
另外**不要使用ASCII字符編碼**。決不。永遠。在爲Windows編程時總是使用UNICODE,除非由於某種原因您的目標是Windows 98或ME ... https://en.wikipedia.org/wiki/Windows_98。 – Ben