Win32 SDK登錄檔操作——RegQueryValueEx (轉)

gugu99發表於2007-11-08
Win32 SDK登錄檔操作——RegQueryValueEx (轉)[@more@]

_regqueryvalueex>RegQueryValueEx

(更多請見sl.126.com">)

RegQueryValueEx找回所開啟登錄檔鍵所關聯的一個給定值的型別和資料。

LONG RegQueryValueEx( HKEY hKey, // 要查詢鍵的控制程式碼 LPTSTR lpValueName, // 要查詢值的名字的地址 LPD lpReserved, // 保留 LPDWORD lpType, // 值型別快取地址 LPBYTE lpData, // 資料快取地址 LPDWORD lpcbData // 資料快取大小地址 );


引數

hKey
一個當前已開啟鍵的控制程式碼或下列已確定的保留控制程式碼值:

HKEY_CLASSES_
HKEY_CURRENT_CONFIG
HKEY_CURRENT_USER
HKEY_LOCAL_MACHINE
HKEY_USERS
NT:
HKEY_PERFORMANCE_DATA
Windows 95和: HKEY_DYN_DATA

lpValueName
指向要查詢值的名字的字串(以空字元結束)。

如果lpValueName是NULL或一個空字串(""),這個找回這個鍵的未命名或預設值的型別和資料。

Windows 95和Windows 98: 每個鍵有一個預設值(最初的不包含資料)。在Windows 95,這人預設值型別總是REG_SZ。在Windows 98,預設鍵的型別最初是REG_SZ,但可以透過RegSetValueEx指定一個預設值為不同的型別。

: 鍵不能自動擁有一個未命名或預設的值,未命名的值可以是任何型別。

lpReserved
保留,必須是NULL.
lpType
指向與給定值相關聯資料的型別的變數。這個值將透過這個引數返回,將是下面之一: 值含意 REG_BINARY 二進位制資料。 REG_DWORD 一個32位數字。 REG_DWORD_LITTLE_ENDIAN 一個little-endian格式的32位數字。這相當於REG_DWORD。

little-endian格式,是一個多位元組值在中被從低位元組到高位元組存貯。如,值 0x12345678在little-endian格式中被存貯為(0x78 0x56 0x34 0x12)。

Windows NT, Windows 95,和Windows 98是有意執行在little-endian體系上的。例如像一些,一個必須連線到big-endian體系的計算機上。

REG_DWORD_BIG_ENDIAN 一個big-endian格式的32位數字。

big-endian格式,一個多位元組值在記憶體職被從高位元組到低位元組存貯。如,值0x12345678在big-endian格式中被存貯為(0x12 0x34 0x56 0x78)。

REG_EXPAND_SZ 一個包含未被引用的環境變數的以空字元結束的字串(如,"%PATH%")。它是Unicode字串還是ANSI字串將依賴你所使用的是Unicode函式還是ANSI函式。擴充套件環境變數引用,使用 < classid=clsid:a880a6-d8ff-11cf-9377-00aa003b7a11 id=alink_1 type=application/x-oleobject>

script:alink_1.Click()">ExpandEnvironmentStrings函式。 REG_LINK 一個Unicode符號連線。 REG_MULTI_SZ 一個以空字元結束的字串陣列,被兩個null字元結束。 REG_NONE 未定義值型別。 REG_RE_LIST 一個裝置資源列表。 REG_SZ 一個以空字元結束的字串。它是 Unicode字串還是 ANSI字串將依賴你所使用的是 Unicode函式還是 ANSI函式。

如果不需要型別lpType引數可以為空(NULL)。

lpData
指定接收值資料的快取區。如果資料是不需要的這個引數可以為空。
lpcbData
以位元組為單位,指向lpData引數所指定地快取區大小的變數。函式返回複製到lpData的資料大小的變數。

如果資料是REG_SZ、REG_MULTI_SZ或REG_EXPAND_SZ型別,那麼lpcbData還將包括以空字元結束的大小。

如果lpData是NULL,lpcbData引數可以是NULL。

如果被lpData引數指定的快取不夠大,這個函式返回ERROR_MORE_DATA值,並取回被lpcbData指定的變數快取的大小(以位元組為單位)。

如果lpData是NULL,lpcbData不是NULL,這個函式返回ERROR_SUCCESS,並取回被lpcbData指定的變數快取的大小(以位元組為單位)。這個為值的資料快取分配最好的途徑。

Window NT: 如果hKey指定為HKEY_PERFORMANCE_DATA,並且lpData快取太小,RegQueryValueEx返回ERROR_MORE_DATA,但是lpcbData不能返回必需的快取大小。這是因為運用資料的大小可以在的下一步被改變。在這種情形下,你必須增加快取的大小並重新呼叫RegQueryValueEx透過lpcbData 引數快取大小。重複直到函式成功。 你需要維護一個單獨的變數去留意快取的大小。因為被lpcbData返回的值是可不預知的。

返回值

如果這個函式成功,返回ERROR_SUCCESS。

如果調有失敗,返回一個非零錯誤碼(定義在WINERROR.H)。你可以使用帶有FORMAT_MESSAGE_FROM_SYSTEM標記的語言/VISUAL%20MSDN/登錄檔操作/strings_0sdh.htm">FormatMessage函式獲得錯誤的普通描述資訊。

注意

hKey確定的鍵必須是被帶有KEY_QUERY_VALUE標記開啟的。開啟鍵,使用_1woo.htm">RegCreateKeyEx函式或函式。

如果值資料是REG_SZ、REG_MULTI_SZ或REG_EXPAND_SZ型別,這個函式的ANSI版本將被使用(明確的呼叫RegQueryValueExA或在包含WINDOWS.H前不定義UNICODE),這個函式在複製它到lpData指定的快取中以前,轉換存貯地Unicode字串為ANSI字串。

Window NT: 當呼叫RegQueryValueEx函式並hKey被設定成HKEY_PERFORMANCE_DATA控制程式碼,給定的值字串時,返回資料結構往往是未定義的物件。不要感到驚訝;這是正常的。當調RegQueryValueEx函式時,you should always expect to walk the returned data structure to look for the requested object.

資訊

 Windows NT: 需要3.1或更高版本。
 Windows: 需要Windows 95或更高版本。
 Windows CE: 需要1.0或更高版本。
 標頭檔案: winreg.h。
 輸入庫: advapi32.lib。
 Unicode: 在Windows NT中作為Unicode或ANSI。

參見

, ,

:alink_2.Click()">ExpandEnvironmentStrings, , , , , , ,


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-981331/,如需轉載,請註明出處,否則將追究法律責任。

相關文章