WdfRegistryOpenKey 函式 (wdfregistry.h)
[適用於 KMDF 和 UMDF]
WdfRegistryOpenKey 方法會開啟指定的登錄機碼,並建立代表登錄機碼的架構登錄機碼物件。
語法
NTSTATUS WdfRegistryOpenKey(
[in, optional] WDFKEY ParentKey,
[in] PCUNICODE_STRING KeyName,
[in] ACCESS_MASK DesiredAccess,
[in, optional] PWDF_OBJECT_ATTRIBUTES KeyAttributes,
[out] WDFKEY *Key
);
參數
[in, optional] ParentKey
架構登錄機碼物件的句柄。 這個物件代表驅動程式已開啟的父登錄機碼。 此參數是選擇性的,可以是 NULL。 如果 參數不是 NULL,KeyName 指定的機碼必須位於登錄中的這個父機碼之下。 如需此父金鑰的詳細資訊,請參閱一節。
[in] KeyName
包含要開啟之索引鍵名稱 之UNICODE_STRING 結構的指標。 索引鍵名稱可以包含路徑資訊。 如果 ParentKey 為 NULL,KeyName 必須指定登錄機碼的完整路徑。 如需範例,請參閱一節。
[in] DesiredAccess
ACCESS_MASK型別值,指定驅動程式針對指定登錄機碼所要求的訪問許可權。 如需驅動程式通常用於登錄機碼的訪問許可權清單,請參閱 開啟 Registry-Key 物件的句柄。 您的驅動程序必須只要求所需的存取類型。 例如,如果驅動程式只會讀取登錄機碼,則驅動程式不得要求KEY_ALL_ACCESS。
[in, optional] KeyAttributes
WDF_OBJECT_ATTRIBUTES 結構的指標,其中包含新登錄機碼對象的驅動程式提供屬性。 此參數是選擇性的,而且可以WDF_NO_OBJECT_ATTRIBUTES。
[out] Key
接收新登錄機碼物件句柄的位置指標。
傳回值
如果作業成功,WdfRegistryOpenKey 會傳回STATUS_SUCCESS。 否則,方法可能會傳回下列其中一個值:
傳回碼 | Description |
---|---|
|
未在 IRQL = PASSIVE_LEVEL呼叫 WdfRegistryOpenKey。 |
|
指定了無效的參數。 |
|
無法設定登錄機碼物件。 |
|
系統拒絕指定的訪問許可權。 |
|
指定的登錄機碼不存在。 |
如需 WdfRegistryOpenKey 方法可能傳回的其他傳回值清單,請參閱 Framework 物件建立錯誤。
這個方法也可能傳回其他 NTSTATUS值。
備註
若要取得代表父機碼的登錄機碼物件的句柄,您的驅動程式可以呼叫 WdfDriverOpenParametersRegistryKey、 WdfDeviceOpenRegistryKey 或 WdfFdoInitOpenRegistryKey。
KeyName 參數中指定的字串格式取決於呼叫端是 KMDF 驅動程式還是 UMDF 驅動程式。 例如,若要開啟下列路徑:
HKLM\System\CurrentControlSet\Control
您的驅動程式可能會使用此條件式邏輯:
#ifdef _KERNEL_MODE
#define CONTROL_KEY_FULL_PATH L"\\Registry\\Machine\\System\\CurrentControlSet\\Control "
#else
#define CONTROL_KEY_FULL_PATH L"System\\CurrentControlSet\\Control\\"
#endif
當驅動程式使用 以 WdfRegistryOpenKey 開啟的登錄機碼完成時,驅動程式必須呼叫 WdfRegistryClose。
如需登錄機碼對象的詳細資訊,請參閱 在 Framework-Based Drivers 中使用登錄。
範例
下列程式代碼範例會開啟驅動程式的軟體密鑰,然後開啟位於驅動程式軟體機碼下的 MySubKey 登錄機碼。
WDFKEY hKey, subkey;
NTSTATUS status;
UNICODE_STRING myKeyStr;
status = WdfDeviceOpenRegistryKey(
device,
PLUGPLAY_REGKEY_DRIVER,
KEY_READ,
WDF_NO_OBJECT_ATTRIBUTES,
&hKey
);
if (NT_SUCCESS(status)){
RtlInitUnicodeString(
&myKeyStr,
L"MySubKey"
);
status = WdfRegistryOpenKey(
hKey,
&myKeyStr,
KEY_READ,
WDF_NO_OBJECT_ATTRIBUTES,
&subkey
);
}
規格需求
需求 | 值 |
---|---|
目標平台 | Universal |
最小 KMDF 版本 | 1.0 |
最低UMDF版本 | 2.0 |
標頭 | wdfregistry.h (包含 Wdf.h) |
程式庫 | Wdf01000.sys (KMDF) ;WUDFx02000.dll (UMDF) |
IRQL | PASSIVE_LEVEL |
DDI 合規性規則 | DriverCreate (kmdf) 、 KmdfIrql (kmdf) 、 KmdfIrql2 (kmdf) 、 KmdfIrqlExplicit (kmdf) |