2013-10-28 81 views
1

看起來順序在閱讀註冊表中的某些鍵時很重要,這讓我感到驚訝。 我通過Regedit創建了fake_entry閱讀Windows註冊表時可以排序嗎?

enter image description here

當我到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++。

+2

對於如何將兩個連續調用的一個變量'size'用作輸入輸出參數,有些奇怪。這可能會導致接收'ERROR_MORE_DATA' – Anton

+0

@安頓,是的,你是對的。就是這樣。把它寫成答案,以便我可以獎勵積分。 – kmort

+0

另外**不要使用ASCII字符編碼**。決不。永遠。在爲Windows編程時總是使用UNICODE,除非由於某種原因您的目標是Windows 98或ME ... https://en.wikipedia.org/wiki/Windows_98。 – Ben

回答

2

對於如何將兩個連續調用的一個變量size用作輸入輸出參數,有些奇怪。這可能會導致接收ERROR_MORE_DATA