共用方式為


SHRegGetValueA 函式 (shlwapi.h)

[SHRegGetValue 可能會在後續版本的作業系統或產品中變更或無法使用。 使用 RegGetValue 在其位置。]

擷取登錄值。

語法

LSTATUS SHRegGetValueA(
  [in]      HKEY   hkey,
  [in]      LPCSTR pszSubKey,
  [in]      LPCSTR pszValue,
  [in]      SRRF   srrfFlags,
  [in, out] DWORD  *pdwType,
  [out]     void   *pvData,
  [in, out] DWORD  *pcbData
);

參數

[in] hkey

類型:HKEY

目前開啟之索引鍵的句柄,或下列任何預先定義的值。

HKEY_CLASSES_ROOT

HKEY_CURRENT_CONFIG

HKEY_CURRENT_USER

HKEY_LOCAL_MACHINE

HKEY_PERFORMANCE_DATA

HKEY_USERS

[in] pszSubKey

類型:LPCTSTR

null-terminated 字串的指標,指定從 hkey 到子機碼的相對路徑,以從中擷取值。 此參數可以 NULL 或空字串,在此情況下,會從 hkey 位置擷取數據。

[in] pszValue

類型:LPCTSTR

包含值名稱之 null終止字串的指標。 此參數可以 NULL 或空字串,在此情況下,會從預設值擷取數據。

[in] srrfFlags

類型:SRRF

限制擷取數據的一或多個 SRRF 旗標。 至少必須指定一個類型限制 (SRRF_RT) 值。

[in, out] pdwType

類型:LPDWORD

DWORD 的指標,這個指標會接收儲存在所擷取值中的數據類型。 使用預設值時,pdwType 是預設值的類型。 如需可能的值,請參閱 登錄資料類型。 如果未設定SRRF_NOEXPAND旗標,REG_EXPAND_SZ類型會自動展開並傳回為REG_SZ。 如果不需要類型資訊,則可以 NULL

[out] pvData

類型:LPVOID

接收值數據之緩衝區的指標。 如果不需要數據,此參數可以 NULL。 例如,如果您只測試某個值是否存在,則特定值數據會是多餘的。

[in, out] pcbData

類型:LPDWORD

DWORD 的指標,在專案上,會以位元組為單位包含目的地數據緩衝區的大小,pvData。 只有在 pvDataNULL時,這個值才能 NULL。 結束時, 指向下列其中一個值。

pvData 傳回值 pcaData
NULL ERROR_SUCCESS 大小,以位元組為單位,足以保存登錄數據。 請注意,這不保證是精確的大小,但只有足夠的大小。
NULL ERROR_SUCCESS 寫入 pvData的確切位元組數目。
NULL ERROR_MORE_DATA 保留整個數據所需的位元組大小。 請注意,這不保證是精確的大小,但只有足夠的大小。

傳回值

類型:LSTATUS

如果成功,則傳回 ERROR_SUCCESS,否則會傳回 Winerror.h 中定義的非零錯誤碼。 您可以使用 FormatMessage 函式搭配 FORMAT_MESSAGE_FROM_SYSTEM 旗標來擷取錯誤的泛型描述。

言論

SHRegGetValue 提供數據類型檢查、開機模式檢查、自動擴充REG_EXPAND_SZ數據,以及保證 null終止REG_SZ、REG_EXPAND_SZ和REG_MULTI_SZ數據。

hkey 所識別的金鑰必須已開啟 KEY_QUERY_VALUE 安全性存取。 如果 pszSubKey 不是 NULL 或空字串 ,該索引鍵也必須能夠在目前呼叫內容中以 KEY_QUERY_VALUE 安全性存取開啟。

如果數據類型是REG_SZ、REG_EXPAND_SZ或REG_MULTI_SZ,則任何傳回的數據都會包含或考慮字串 null-termination。 例如,如果 pvDataNULL,則在該緩衝區中傳回的數據 null-terminated。 如果 NULL,則它指向的緩衝區大小會包含保留終止 null 字元所需的位元組。

除非設定SRRF_NOEXPAND旗標,否則REG_EXPAND_SZ類型的字串數據會在傳回之前自動展開。 展開的字串類型會在 pdwType 中回報為 REG_SZ, 參數會指向為展開字元串寫入的位元組數,而 pvData 所指向的緩衝區 會保留字符串的擴充版本。

效能注意事項

如果 pszSubKey 不是 NULL 或空字串,則每次存取此函式時,該索引鍵都會開啟並關閉。 如果您的應用程式必須從相同的子機碼擷取一系列值,在呼叫 SHRegGetValue之前,先使用 RegOpenKeyEx 開啟密鑰,以取得更好的效能。 使用 RegOpenKeyExphkResult 參數中傳回的索引鍵作為函式中的 hkey 參數 ,並將 pszSubKey 設定為 NULL

當數據類型REG_EXPAND_SZ且尚未設定SRRF_NOEXPAND旗標時,可能會有其他呼叫登錄來讀取或重新讀取數據。 下列條件會導致該額外的呼叫。

  • pvData NULL 不會 NULL。 雖然未擷取數據,但必須讀取登錄以取得字元串,並展開該字串以判斷數據緩衝區的必要大小。
  • pvData 不是 NULL,而是太小而無法保存數據。 系統會重新讀取數據以取得完整字串、展開字串,並決定所需的大小總計。

注意

shlwapi.h 標頭會將SHRegGetValue定義為別名,根據UNICODE預處理器常數的定義,自動選取此函式的ANSI或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱函式原型的 慣例。

要求

要求 價值
最低支援的用戶端 Windows XP with SP2 [僅限傳統型應用程式]
支援的最低伺服器 Windows Server 2003 [僅限傳統型應用程式]
目標平臺 窗戶
標頭 shlwapi.h
連結庫 Shlwapi.lib
DLL Shlwapi.dll (6.0 版或更新版本)

另請參閱

RegQueryValueEx