WdfFdoInitOpenRegistryKey 函式 (wdffdo.h)
[適用於 KMDF 和 UMDF]
WdfFdoInitOpenRegistryKey 方法會在登錄中開啟裝置的硬體機碼或驅動程式的軟體機碼,並建立架構登錄機碼物件,代表登錄機碼。
語法
NTSTATUS WdfFdoInitOpenRegistryKey(
[in] PWDFDEVICE_INIT DeviceInit,
[in] ULONG DeviceInstanceKeyType,
[in] ACCESS_MASK DesiredAccess,
[in, optional] PWDF_OBJECT_ATTRIBUTES KeyAttributes,
[out] WDFKEY *Key
);
參數
[in] DeviceInit
驅動程式從其 EvtDriverDeviceAdd 回呼函式取得之WDFDEVICE_INIT結構的指標。
[in] DeviceInstanceKeyType
指定要開啟的索引鍵或子機碼。
注意
UMDF 不支援建立子機碼。
這是下列旗標的位 OR, (定義於 Wdm.h) 。
DeviceInstanceKeyType 旗標 | 意義 | 架構 |
---|---|---|
PLUGPLAY_REGKEY_DEVICE | 開啟裝置的硬體金鑰。 | KMDF/UMDF |
PLUGPLAY_REGKEY_DRIVER | 開啟驅動程式的軟體金鑰。 設定此旗標的 UMDF 驅動程式也必須將 DesiredAccess 設定為 KEY_READ。 否則,這個方法會傳回 STATUS_ACCESS_DENIED。 | KMDF/UMDF |
PLUGPLAY_REGKEY_CURRENT_HWPROFILE | KMDF 驅動程式會使用此旗標來開啟目前硬體配置檔中的硬體或軟體密鑰複本。 | KMDF |
PLUGPLAY_REGKEY_DRIVER |WDF_REGKEY_DRIVER_SUBKEY | UMDF 驅動程式會使用這些旗標來開啟驅動程式軟體密鑰的 ServiceName 子機碼,以進行讀取/寫入存取。 | UMDF |
PLUGPLAY_REGKEY_DEVICE |WDF_REGKEY_DEVICE_SUBKEY | 同樣地,UMDF 驅動程式會使用這些旗標來開啟裝置硬體密鑰的 ServiceName 子機碼,以進行讀取/寫入存取。 | UMDF |
[in] DesiredAccess
ACCESS_MASK型別值,指定驅動程式針對指定登錄機碼所要求的訪問許可權。
KMDF 驅動程式通常會要求 KEY_READ、 KEY_WRITE或 KEY_READ |KEY_WRITE。
如果您要撰寫 UMDF 驅動程式,請使用下表。
DeviceInstanceKeyType | DesiredAccess |
---|---|
PLUGPLAY_REGKEY_DEVICE | KEY_READ |
PLUGPLAY_REGKEY_DEVICE |WDF_REGKEY_DEVICE_SUBKEY | KEY_READ 或 KEY_READ |KEY_SET_VALUE |
PLUGPLAY_REGKEY_DRIVER | KEY_READ |
PLUGPLAY_REGKEY_DRIVER |WDF_REGKEY_DRIVER_SUBKEY | KEY_READ 或 KEY_READ |KEY_SET_VALUE |
最佳做法是只要求驅動程式所需的存取類型。
[in, optional] KeyAttributes
WDF_OBJECT_ATTRIBUTES 結構的指標,其中包含新登錄機碼對象的驅動程式提供屬性。 此參數是選擇性的,而且可以WDF_NO_OBJECT_ATTRIBUTES。
[out] Key
接收新登錄機碼物件句柄的位置指標。
傳回值
如果作業成功,WdfFdoInitOpenRegistryKey 會傳回STATUS_SUCCESS。 否則,方法可能會傳回下列其中一個值:
傳回碼 | Description |
---|---|
|
WdfFdoInitOpenRegistryKey 未在 IRQL = PASSIVE_LEVEL呼叫。 |
|
指定了無效的參數,或驅動程式未從其 EvtDriverDeviceAdd 回呼函式取得WDFDEVICE_INIT結構。 針對UMDF,此傳回值可能表示訪問許可權不足。 |
|
無法設定登錄機碼物件。 |
|
指定的登錄機碼不存在。 |
如需 WdfFdoInitOpenRegistryKey 方法可能會傳回的其他傳回值清單,請參閱 Framework 物件建立錯誤。
方法也可能傳回其他 NTSTATUS值。
備註
驅動程式必須先呼叫 WdfFdoInitOpenRegistryKey ,才能呼叫 WdfDeviceCreate。 如需呼叫 WdfDeviceCreate 的詳細資訊,請參閱 建立 Framework 裝置物件。
如需 WdfFdoInitOpenRegistryKey 方法的詳細資訊,請參閱 在函式驅動程式中建立裝置物件。
或登錄、硬體和軟體機碼和登錄物件的詳細資訊,請參閱 在 Framework-Based 驅動程式中使用登錄。
範例
下列程式代碼範例會開啟具有讀取許可權的裝置硬體密鑰。
WDFKEY key;
NTSTATUS status;
status = WdfFdoInitOpenRegistryKey(
DeviceInit,
PLUGPLAY_REGKEY_DEVICE,
GENERIC_READ,
WDF_NO_OBJECT_ATTRIBUTES,
&key
);
if (!NT_SUCCESS(status)) {
return status;
}
規格需求
需求 | 值 |
---|---|
目標平台 | Universal |
最小 KMDF 版本 | 1.0 |
最低UMDF版本 | 2.0 |
標頭 | wdffdo.h (包含 Wdf.h) |
程式庫 | Wdf01000.sys (KMDF) ;WUDFx02000.dll (UMDF) |
IRQL | PASSIVE_LEVEL |
DDI 合規性規則 | DeviceInitAPI (kmdf) 、 DriverCreate (kmdf) 、 KmdfIrql (kmdf ) 、 KmdfIrql2 (kmdf) 、 KmdfIrqlExplicit (kmdf) |