RegQueryValueEx 找回所打開(kāi)注冊(cè)表鍵所關(guān)聯(lián)的一個(gè)給定值的類型和數(shù)據(jù)。
LONG RegQueryValueEx( HKEY hKey , // 要查詢鍵的句柄 LPTSTR lpValueName , // 要查詢值的名字的地址 LPDWORD lpReserved , // 保留 LPDWORD lpType , // 值類型緩存地址 LPBYTE lpData , // 數(shù)據(jù)緩存地址 LPDWORD lpcbData // 數(shù)據(jù)緩存大小地址);
參數(shù)
hKey
一個(gè)當(dāng)前已打開(kāi)鍵的句柄或下列已確定的保留句柄值:
HKEY_CLASSES_ROOT HKEY_CURRENT_CONFIG HKEY_CURRENT_USER HKEY_LOCAL_MACHINE HKEY_USERS Windows NT: HKEY_PERFORMANCE_DATA Windows 95和Windows 98: HKEY_DYN_DATA
lpValueName
指向要查詢值的名字的字符串(以空字符結(jié)束)。
如果lpValueName 是NULL或一個(gè)空字符串(""),這個(gè)函數(shù)找回這個(gè)鍵的未命名或默認(rèn)值的類型和數(shù)據(jù)。
Windows 95和Windows 98: 每個(gè)鍵有一個(gè)默認(rèn)值(最初的不包含數(shù)據(jù))。在Windows 95,這人默認(rèn)值類型總是REG_SZ。在Windows 98,默認(rèn)鍵的類型最初是REG_SZ,但可以通過(guò)RegSetValueEx 指定一個(gè)默認(rèn)值為不同的類型。
Windows NT: 鍵不能自動(dòng)擁有一個(gè)未命名或默認(rèn)的值,未命名的值可以是任何類型。
lpReserved
保留,必須是NULL.
lpType
指向與給定值相關(guān)聯(lián)數(shù)據(jù)的類型的變量。這個(gè)值將通過(guò)這個(gè)參數(shù)返回,將是下面之一:
值
含意
REG_BINARY
二進(jìn)制數(shù)據(jù)。
REG_DWORD
一個(gè)32位數(shù)字。
REG_DWORD_LITTLE_ENDIAN
一個(gè)little-endian格式的32位數(shù)字。這相當(dāng)于REG_DWORD。
little-endian格式,是一個(gè)多字節(jié)值在內(nèi)存中被從低字節(jié)到高字節(jié)存貯。如,值 0x12345678在little-endian格式中被存貯為(0x78 0x56 0x34 0x12)。
Windows NT, Windows 95,和Windows 98是有意運(yùn)行在little-endian計(jì)算機(jī)體系上的。例如像一些UNIX系統(tǒng),一個(gè)用戶必須連接到big-endian體系的計(jì)算機(jī)上。
REG_DWORD_BIG_ENDIAN
一個(gè)big-endian格式的32位數(shù)字。
big-endian格式,一個(gè)多字節(jié)值在內(nèi)存職被從高字節(jié)到低字節(jié)存貯。如,值0x12345678在big-endian格式中被存貯為(0x12 0x34 0x56 0x78)。
REG_EXPAND_SZ
一個(gè)包含未被引用的環(huán)境變量的以空字符結(jié)束的字符串(如,"%PATH%")。它是Unicode字符串還是ANSI字符串將依賴你所使用的是Unicode函數(shù)還是ANSI函數(shù)。擴(kuò)展環(huán)境變量引用,使用
ExpandEnvironmentStrings 函數(shù)。
REG_LINK
一個(gè)Unicode符號(hào)連接。
REG_MULTI_SZ
一個(gè)以空字符結(jié)束的字符串?dāng)?shù)組,被兩個(gè)null字符結(jié)束。
REG_NONE
未定義值類型。
REG_RESOURCE_LIST
一個(gè)設(shè)備驅(qū)動(dòng)資源列表。
REG_SZ
一個(gè)以空字符結(jié)束的字符串。它是 Unicode字符串還是 ANSI字符串將依賴你所使用的是 Unicode函數(shù)還是 ANSI函數(shù)。
如果不需要類型lpType 參數(shù)可以為空(NULL)。
lpData
指定接收值數(shù)據(jù)的緩存區(qū)。如果數(shù)據(jù)是不需要的這個(gè)參數(shù)可以為空。
lpcbData
以字節(jié)為單位,指向lpData 參數(shù)所指定地緩存區(qū)大小的變量。函數(shù)返回復(fù)制到lpData 的數(shù)據(jù)大小的變量。
如果數(shù)據(jù)是REG_SZ、REG_MULTI_SZ或REG_EXPAND_SZ類型,那么lpcbData 還將包括以空字符結(jié)束的大小。
如果lpData 是NULL,lpcbData 參數(shù)可以是NULL。
如果被lpData 參數(shù)指定的緩存不夠大,這個(gè)函數(shù)返回ERROR_MORE_DATA值,并取回被lpcbData 指定的變量緩存的大?。ㄒ宰止?jié)為單位)。
如果lpData 是NULL,lpcbData 不是NULL,這個(gè)函數(shù)返回ERROR_SUCCESS,并取回被lpcbData 指定的變量緩存的大?。ㄒ宰止?jié)為單位)。這個(gè)為值的數(shù)據(jù)緩存分配最好的途徑。
Window NT: 如果hKey 指定為HKEY_PERFORMANCE_DATA, 并且lpData 緩存太小,RegQueryValueEx 返回ERROR_MORE_DATA,但是lpcbData 不能返回必需的緩存大小。這是因?yàn)檫\(yùn)用數(shù)據(jù)的大小可以在調(diào)用的下一步被改變。在這種情形下,你必須增加緩存的大小并重新調(diào)用RegQueryValueEx 通過(guò)lpcbData 參數(shù)更新緩存大小。重復(fù)直到函數(shù)成功。 你需要維護(hù)一個(gè)單獨(dú)的變量去留意緩存的大小。因?yàn)楸?em>lpcbData返回的值是可不預(yù)知的。
返回值
如果這個(gè)函數(shù)成功,返回ERROR_SUCCESS。
如果調(diào)有失敗,返回一個(gè)非零錯(cuò)誤碼(定義在WINERROR.H)。你可以使用帶有FORMAT_MESSAGE_FROM_SYSTEM標(biāo)記的FormatMessage 函數(shù)獲得錯(cuò)誤的普通描述信息。
注意
被hKey 確定的鍵必須是被帶有KEY_QUERY_VALUE標(biāo)記打開(kāi)的。打開(kāi)鍵,使用RegCreateKeyEx 函數(shù)或RegOpenKeyEx 函數(shù)。
如果值數(shù)據(jù)是REG_SZ、REG_MULTI_SZ或REG_EXPAND_SZ類型,這個(gè)函數(shù)的ANSI版本將被使用(明確的調(diào)用RegQueryValueExA 或在包含WINDOWS.H文件前不定義UNICODE),這個(gè)函數(shù)在復(fù)制它到lpData 指定的緩存中以前,轉(zhuǎn)換存貯地Unicode字符串為ANSI字符串。
Window NT: 當(dāng)調(diào)用RegQueryValueEx 函數(shù)并hKey 被設(shè)置成HKEY_PERFORMANCE_DATA句柄,給定對(duì)象的值字符串時(shí),返回?cái)?shù)據(jù)結(jié)構(gòu)往往是未定義的對(duì)象。不要感到驚訝;這是正常的。當(dāng)調(diào)RegQueryValueEx 函數(shù)時(shí),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。 輸入庫(kù): advapi32.lib。 Unicode: 在Windows NT中作為Unicode或ANSI執(zhí)行。
參見(jiàn)
Registry Overview , Registry Functions ,
ExpandEnvironmentStrings , RegCreateKeyEx , RegEnumKey , RegEnumKeyEx , RegEnumValue , RegOpenKeyEx , RegQueryInfoKey , RegQueryValue