IoOpenDeviceRegistryKey 函式 (wdm.h)
IoOpenDeviceRegistryKey 例程會傳回特定裝置實例登錄狀態位置的句柄。
語法
NTSTATUS IoOpenDeviceRegistryKey(
[in] PDEVICE_OBJECT DeviceObject,
[in] ULONG DevInstKeyType,
[in] ACCESS_MASK DesiredAccess,
[out] PHANDLE DeviceRegKey
);
參數
[in] DeviceObject
要開啟登錄狀態位置之裝置實例的 實體裝置物件 (PDO) 指標。
[in] DevInstKeyType
指定旗標,指出是否要開啟裝置特定的硬體密鑰或驅動程式特定的軟體密鑰。 旗標也會指出金鑰是否相對於目前的硬體配置檔。 如需硬體和軟體金鑰的詳細資訊,請參閱 驅動程式登入機碼簡介。
旗標的定義如下:
PLUGPLAY_REGKEY_DEVICE
開啟裝置的硬體密鑰,這是包含裝置相關信息的裝置特定登錄狀態位置。 無法使用 PLUGPLAY_REGKEY_DRIVER 指定此旗標。
PLUGPLAY_REGKEY_DRIVER
開啟裝置的軟體密鑰,這是儲存驅動程式特定資訊的裝置特定登錄狀態位置。 無法使用 PLUGPLAY_REGKEY_DEVICE 指定此旗標。
PLUGPLAY_REGKEY_CURRENT_HWPROFILE
硬體配置檔已被取代,且狀態不應與硬體配置檔相對儲存。
針對裝置或驅動程式資訊,開啟相對於目前硬體配置檔的金鑰。 這可讓驅動程式存取硬體配置檔特定的組態資訊。 呼叫端必須使用這個旗標來指定PLUGPLAY_REGKEY_DEVICE或PLUGPLAY_REGKEY_DRIVER。
[in] DesiredAccess
指定 ACCESS_MASK 值,表示呼叫端對索引鍵所需的存取。 如需每個 KEY_XXX 訪問許可權的描述,請參閱 ZwCreateKey 例程。
[out] DeviceRegKey
呼叫端配置的緩衝區指標,在成功傳回時,包含所要求登錄狀態位置的句柄。
傳回值
如果呼叫成功,IoOpenDeviceRegistryKey 會傳回STATUS_SUCCESS。 可能的錯誤傳回值包括下列專案:
傳回碼 | 描述 |
---|---|
STATUS_INVALID_PARAMETER | 可能表示呼叫端指定了一組不合法的 DevInstKeyType 旗標,或提供不是有效 PDO 的 DeviceObject。 |
言論
驅動程式必須呼叫 ZwClose,才能在不再需要存取時關閉從這個例程傳回的句柄。
這個例程所開啟的登錄機碼為非volatile。
使用者模式設定應用程式可以使用 CM_Open_DevNode_Key 或 裝置資訊功能來存取這些登錄機碼, 例如 SetupDiOpenDevRegKey 或 SetupDiCreateDevRegKey。
若要在驅動程式套件安裝期間預先填入這些登錄狀態位置的狀態,請在 INF 檔案中使用 INF AddReg 指示詞。
IoOpenDeviceRegistryKey 的呼叫者 必須在系統線程的內容中於 IRQL = PASSIVE_LEVEL執行。
要求
要求 | 價值 |
---|---|
目標平臺 | 普遍 |
標頭 | wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h) |
連結庫 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL (請參閱一節) |
DDI 合規性規則 | HwStorPortProhibitedDIs(storport),PowerIrpDDis(wdm) |