RegQueryValueEx 淺析

RegQueryValueEx,是VC語言中的一種。
功能:檢索一個已打開的註冊表句柄中,指定的註冊表鍵的類型和設置值。

//函數原型:
LSTATUS RegQueryValueExA(
  HKEY    hKey,
  LPCSTR  lpValueName,
  LPDWORD lpReserved,
  LPDWORD lpType,
  LPBYTE  lpData,
  LPDWORD lpcbData
);

返回值
Long,零(ERROR_SUCCESS)表示成功。其他任何值都代表一個錯誤代碼

參數表
參數 類型及說明

  • HKEY hKey,//一個已打開項的句柄,或者指定一個標準項名
  • LPCTSTR lpValueName,//要查詢註冊表鍵值的名字字符串,註冊表鍵的名字,以空字符結束。
  • LPDWORD lpReserved,//未用,設爲零
  • LPDWORD lpType,//用於裝載取回數據類型的一個變量
  • LPBYTE lpData,//用於裝載指定值的一個緩衝區
  • LPDWORD lpcbData,//用於裝載lpData緩衝區長度的一個變量.//一旦返回,它會設爲實際裝載到緩衝區的字節數

hKey

打開的註冊表項的句柄。該密鑰必須已使用KEY_QUERY_VALUE訪問權限打開。

此句柄由 RegCreateKeyEx,RegCreateKeyTransacted,RegOpenKeyEx或 RegOpenKeyTransacted函數返回。它也可以是以下 預定義的鍵之一:

HKEY_CLASSES_ROOT
HKEY_CURRENT_CONFIG
HKEY_CURRENT_USER
HKEY_LOCAL_MACHINE
HKEY_PERFORMANCE_DATA
HKEY_PERFORMANCE_NLSTEXT
HKEY_PERFORMANCE_TEXT
HKEY_USERS

lpValueName

註冊表值的名稱。

如果lpValueName爲NULL或空字符串“”,則該函數將檢索鍵的未命名或默認值(如果有)的類型和數據。

如果lpValueName指定的值不在註冊表中,則該函數返回ERROR_FILE_NOT_FOUND。

鍵不會自動具有未命名或默認值。未命名的值可以是任何類型。

lpReserved

此參數是保留參數,必須爲NULL。

lpType

指向變量的指針,該變量接收一個代碼,該代碼指示存儲在指定值中的數據類型。所述lpType參數可以是NULL如果不需要的類型編碼。

lpData

指向接收值數據的緩衝區的指針。如果不需要數據,則此參數可以爲NULL。

lpcbData

指向變量的指針,該變量指定lpData參數指向的緩衝區的大小(以字節爲單位)。函數返回時,此變量包含複製到lpData的數據的大小。

該參數lpcbData參數可以是NULL只有當lpData是NULL的時候。

如果數據具有REG_SZ,REG_MULTI_SZ或REG_EXPAND_SZ類型,則該大小包括任何一個或多個終止的空字符,除非數據不包含它們而存儲。有關更多信息,請參見備註。

如果lpData參數指定的緩衝區不足以容納數據,則該函數返回ERROR_MORE_DATA並將所需的緩衝區大小存儲在lpcbData指向的變量中。在這種情況下,lpData緩衝區的內容未定義。

如果lpData爲NULL,而lpcbData爲非NULL,則該函數返回ERROR_SUCCESS並將數據的大小(以字節爲單位)存儲在lpcbData指向的變量中。這使應用程序可以確定爲值的數據分配緩衝區的最佳方法。

如果的hKey指定HKEY_PERFORMANCE_DATA和的lpData緩衝區不夠大,無法容納所有返回的數據, 函數RegQueryValueEx返回ERROR_MORE_DATA,並通過返回的值參數lpcbData參數是不明確的。這是因爲性能數據的大小可以從一個調用更改爲下一個調用。在這種情況下,您必須增加緩衝區大小,然後再次調用 RegQueryValueEx並在lpcbData參數中傳遞更新的緩衝區大小。重複此操作,直到功能成功。您需要維護一個單獨的變量來跟蹤緩衝區大小,因爲lpcbData返回的值是不可預測的。

如果lpValueName註冊表值不存在,則RegQueryValueEx返回ERROR_FILE_NOT_FOUND,並且通過lpcbData參數返回的值是不確定的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章