IoGetDeviceInterfaces 函式 (wdm.h)
IoGetDeviceInterfaces 例程會傳回特定裝置介面類別的裝置介面實例清單(例如支援 HID 介面的系統上的所有裝置)。
語法
NTSTATUS IoGetDeviceInterfaces(
[in] const GUID *InterfaceClassGuid,
[in, optional] PDEVICE_OBJECT PhysicalDeviceObject,
[in] ULONG Flags,
[out] PZZWSTR *SymbolicLinkList
);
參數
[in] InterfaceClassGuid
指定裝置介面類別之類別 GUID 的指標。 類別的 GUID 應該位於裝置特定的頭檔中。
[in, optional] PhysicalDeviceObject
選擇性 PDO 的指標,將搜尋範圍縮小為 PDO 所代表之裝置的裝置介面實例。
[in] Flags
指定修改裝置介面搜尋的旗標。 目前只定義一個旗標,如下表所述。
旗 | 意義 |
---|---|
DEVICE_INTERFACE_INCLUDE_NONACTIVE | 除了已啟用的介面實例之外,還傳回已停用的裝置介面實例。 |
搜尋支援特定介面類別的裝置時,呼叫端需要啟用的介面實例,因此不會設定DEVICE_INTERFACE_INCLUDE_NONACTIVE旗標。
驅動程式通常會設定DEVICE_INTERFACE_INCLUDE_NONACTIVE旗標,以找出驅動程式必須啟用的已停用介面實例。 例如,裝置的類別安裝程式可能已由 INF 檔案導向,以註冊裝置的一或多個介面實例。 介面實例會註冊,但在驅動程式啟用它們之前無法使用(使用 IoSetDeviceInterfaceState)。 若要縮小只傳回給指定裝置所公開的介面實例清單,驅動程式可以指定 PhysicalDeviceObject。
[out] SymbolicLinkList
如果成功,例程所指向之寬字元指標的指標,會寫入包含 Unicode 字串清單之緩衝區的基位址。 這些字串是符號連結名稱,可識別符合搜尋準則的裝置介面實例。 清單中的每個 Unicode 字串都會以 Null 終止;整個清單的結尾會以額外的 Null 字元標示。 例程會從分頁系統記憶體配置這些字串的緩衝區。 呼叫端負責釋放緩衝區(藉由在不再需要時呼叫 ExFreePool 例程)。
如果沒有符合搜尋準則的裝置介面實例,此例程會傳回STATUS_SUCCESS,而且字串包含單一 NULL 字元。
傳回值
如果呼叫成功,IoGetDeviceInterfaces 會傳回STATUS_SUCCESS。 可能的錯誤傳回值包括下列專案。
傳回碼 | 描述 |
---|---|
|
可能表示 PhysicalDeviceObject 不是有效的 PDO 指標。 |
言論
IoGetDeviceInterfaces 會傳回符合搜尋準則的裝置介面實例清單。 核心模式元件通常會呼叫此例程,以取得特定裝置介面類別所有已啟用裝置介面實例的清單。 這類元件可以呼叫 IoGetDeviceObjectPointer 或 ZwCreateFile 例程,以取得介面的檔案物件和/ 或裝置物件的指標。 IoGetDeviceObjectPointer 所傳回的裝置物件指標, 指向裝置的裝置堆疊頂端,而且可用於呼叫 IoCallDriver 例程。
如果要求之裝置介面類別有預設介面,則會先列在 SymbolicLinkList中。 默認介面可由使用者模式設定,但不能由核心模式設定。
符號連結名稱的格式不透明;呼叫端不應該嘗試剖析符號連結名稱。
裝置介面實例的符號連結可以跨系統開機使用。
若要在系統上啟用特定類別的其他裝置介面實例時收到通知,請呼叫 IoRegisterPlugPlayNotification 例程來註冊裝置類別變更的通知。
IoGetDeviceInterfaces 的呼叫端必須在系統線程的內容中於 IRQL = PASSIVE_LEVEL執行。
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | 從 Windows 2000 開始提供。 |
目標平臺 | 普遍 |
標頭 | wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h) |
連結庫 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL (請參閱一節) |
DDI 合規性規則 | HwStorPortProhibitedDIs(storport),MarkPower(wdm),MarkPowerDown(wdm),MarkQueryRelations(wdm),MarkStartDevice(wdm),PowerIrpDDis(wdm) |