WdfRegistryCreateKey 函式 (wdfregistry.h)
[適用於 KMDF 和 UMDF]
WdfRegistryCreateKey 方法會建立並開啟指定的登錄機碼,或只開啟已經存在的機碼,並建立代表登錄機碼的架構登錄機碼物件。
語法
NTSTATUS WdfRegistryCreateKey(
[in, optional] WDFKEY ParentKey,
[in] PCUNICODE_STRING KeyName,
[in] ACCESS_MASK DesiredAccess,
[in] ULONG CreateOptions,
[out, optional] PULONG CreateDisposition,
[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] CreateOptions
一或多個旗標。 如需這些旗標的相關信息,請參閱 CreateOptions 參數或 ZwCreateKey。
[out, optional] CreateDisposition
如果 REG_OPENED_EXISTING_KEY已建立新的索引鍵,或開啟現有索引鍵,則為接收REG_CREATED_NEW_KEY位置的指標。 這些值定義於 Wdm.h 中。 此指標是選擇性的,而且可以是 NULL。
[in, optional] KeyAttributes
WDF_OBJECT_ATTRIBUTES 結構的指標,其中包含新登錄機碼對象的驅動程式提供屬性。 這個參數是選擇性的,而且可以WDF_NO_OBJECT_ATTRIBUTES。
[out] Key
接收新登錄機碼物件句柄之位置的指標。
傳回值
如果作業成功,WdfRegistryCreateKey 會傳回STATUS_SUCCESS。 否則,方法可能會傳回下列其中一個值:
傳回碼 | Description |
---|---|
|
在 IRQL = PASSIVE_LEVEL 未呼叫 WdfRegistryCreateKey。 |
|
指定了無效的參數。 |
|
無法設定登錄機碼物件。 |
|
系統拒絕指定的訪問許可權。 |
|
指定的登錄機碼不存在。 |
如需 WdfRegistryCreateKey 方法可能會傳回的其他傳回值清單,請參閱 Framework 物件建立錯誤。
這個方法也可能傳回其他 NTSTATUS值。
備註
若要取得代表父機碼的登錄機碼物件的句柄,您的驅動程式可以呼叫 WdfDriverOpenParametersRegistryKey、 WdfDeviceOpenRegistryKey 或 WdfFdoInitOpenRegistryKey。
根據預設,新的登錄機碼物件的父系是 WdfDriverCreate 方法所建立的架構驅動程序物件。 您可以使用 WDF_OBJECT_ATTRIBUTES 結構的 ParentObject 成員來指定不同的父代。 架構會在刪除父物件時刪除登錄機碼物件。 如果您的驅動程式未變更預設父代,則驅動程式應該在使用 物件完成時刪除登錄機碼物件;否則,登錄機碼物件會保留下來,直到 I/O 管理員卸除您的驅動程序為止。
如果您的驅動程式未變更預設父代,驅動程式應該在使用 物件完成時呼叫 WdfRegistryClose ;否則,登錄機碼物件會保留下來,直到 I/O 管理員卸除您的驅動程序為止。 或者,驅動程式可以呼叫 WdfObjectDelete 來刪除登錄機碼物件。
如需登錄機碼對象的詳細資訊,請參閱 在 Framework-Based Drivers 中使用登錄。
範例
下列程式代碼範例會開啟驅動程式的軟體密鑰,然後建立並開啟位於驅動程式軟體機碼底下的 myKeyStr 登錄機碼。
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"myKeyStr"
);
status = WdfRegistryCreateKey(
hKey,
&myKeyStr,
KEY_READ,
REG_OPTION_NON_VOLATILE,
NULL,
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) |