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

未在 IRQL = PASSIVE_LEVEL呼叫 WdfRegistryOpenKey

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

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

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

備註

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

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)

另請參閱

ACCESS_MASK

RtlInitUnicodeString

UNICODE_STRING

WDF_OBJECT_ATTRIBUTES

WdfDeviceOpenRegistryKey

WdfDriverOpenParametersRegistryKey

WdfFdoInitOpenRegistryKey

WdfRegistryClose

WdfRegistryCreateKey