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 結構的指標,其中包含要開啟的索引鍵名稱。 金鑰名稱可以包含路徑資訊。 如果 ParentKeyNULL,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
STATUS_INVALID_DEVICE_REQUEST

在 IRQL = PASSIVE_LEVEL 未呼叫 WdfRegistryCreateKey

STATUS_INVALID_PARAMETER
指定了無效的參數。
STATUS_INSUFFICIENT_RESOURCES
無法設定登錄機碼物件。
STATUS_ACCESS_DENIED
系統拒絕指定的訪問許可權。
STATUS_OBJECT_NAME_NOT_FOUND
指定的登錄機碼不存在。
 

如需 WdfRegistryCreateKey 方法可能會傳回的其他傳回值清單,請參閱 Framework 物件建立錯誤

這個方法也可能傳回其他 NTSTATUS值

備註

若要取得代表父機碼的登錄機碼物件的句柄,您的驅動程式可以呼叫 WdfDriverOpenParametersRegistryKeyWdfDeviceOpenRegistryKeyWdfFdoInitOpenRegistryKey

根據預設,新的登錄機碼物件的父系是 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)

另請參閱

ACCESS_MASK

RtlInitUnicodeString

UNICODE_STRING

WDF_OBJECT_ATTRIBUTES

WdfDeviceOpenRegistryKey

WdfDriverCreate

WdfDriverOpenParametersRegistryKey

WdfFdoInitOpenRegistryKey

WdfRegistryOpenKey

ZwCreateKey