IoReportDetectedDevice 函式 (ntddk.h)
IoReportDetectedDevice 例程會將非 PnP 裝置回報給 PnP 管理員。
語法
NTSTATUS IoReportDetectedDevice(
[in] PDRIVER_OBJECT DriverObject,
[in] INTERFACE_TYPE LegacyBusType,
[in] ULONG BusNumber,
[in] ULONG SlotNumber,
[in, optional] PCM_RESOURCE_LIST ResourceList,
[in, optional] PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements,
[in] BOOLEAN ResourceAssigned,
[in, out] PDEVICE_OBJECT *DeviceObject
);
參數
[in] DriverObject
偵測到裝置之驅動程式的驅動程式物件的指標。
[in] LegacyBusType
指定裝置所在的總線類型。 如果 PnP 管理員存在,PnP 管理員會使用此資訊來比對回報的裝置與其 PnP 列舉實例。
PCIBus 之類的介面類型定義於 Wdm.h 中。 如果驅動程式不知道裝置的 LegacyBusType ,驅動程式會提供此參數的 InterfaceTypeUndefined 值。
[in] BusNumber
指定裝置的總線號碼。 如果 PnP 管理員存在,PnP 管理員會使用此資訊來比對回報的裝置與其 PnP 列舉實例。
公交車號碼會區分裝置所在的總線與計算機上相同類型的其他公交車。 總線編號配置是總線專用的。 如果驅動程式不知道裝置的 BusNumber ,驅動程式會提供此參數的值 -1。
[in] SlotNumber
指定裝置的邏輯插槽編號。 如果 PnP 管理員存在,PnP 管理員會使用此資訊來比對回報的裝置與其 PnP 列舉實例。
如果驅動程式不知道裝置的 SlotNumber ,驅動程式會提供此參數的值 -1。
[in, optional] ResourceList
用來偵測裝置之驅動程序的資源清單指標。 此清單中的資源是未經處理、未轉譯的格式。
[in, optional] ResourceRequirements
選擇性地指向偵測到裝置的資源需求清單。 如果呼叫端沒有裝置的這項資訊,則為 NULL。
[in] ResourceAssigned
指定裝置的資源是否已向 PnP 管理員回報。 如果 ResourceAssigned 為 TRUE,表示資源已回報,可能是使用 IoReportResourceForDetection,而 PnP 管理員將不會嘗試代表裝置宣告資源。 如果 為 TRUE,當裝置在後續開機時,PnP 管理員也不會宣告資源。
[in, out] DeviceObject
選擇性地指向偵測到裝置的 PDO。
如果呼叫端沒有裝置的 PDO,則為 NULL,這通常是這種情況。 如果 DeviceObject 為 NULL,PnP 管理員會為裝置建立 PDO,並傳回呼叫端的指標。
如果呼叫端提供 PDO,則 PnP 管理員不會建立新的 PDO。 在這個例程的指定呼叫中, DeviceObject 參數可以是 IN 或 OUT 參數,但不是兩者。
傳回值
IoReportDetectedDevice 會在成功時傳回STATUS_SUCCESS,或在失敗時傳回適當的錯誤碼。
備註
舊版裝置的驅動程式會使用 IoReportDetectedDevice 向系統報告其裝置。 驅動程序應該只呼叫 IoReportDetectedDevice 來報告舊版的非 PnP 裝置。 應回報 PnP 裝置以回應 IRP_MN_QUERY_DEVICE_RELATIONS 要求。
驅動程式只需要在第一次載入 IoReportDetectedDevice 時呼叫,因為 PnP 管理員會快取報告的資訊。 使用此例程的驅動程式應該將旗標儲存在登錄中,以指出是否已完成裝置偵測。
驅動程式通常會從 其 DriverEntry 例程呼叫此例程。 一些驅動程式,例如某些 NDIS 或 EISA 驅動程式,可能會從 AddDevice 例程呼叫此例程。
在 IoReportDetectedDevice 成功完成時,呼叫端應該將 FDO 附加至 DeviceObject 傳回的 PDO。 呼叫端附加其 FDO 之後,呼叫端至少是裝置的函式驅動程式。 沒有篩選驅動程式。 PnP 管理員擁有 PDO。
PnP 管理員會將裝置視為已啟動,因此不會呼叫驅動程式的 AddDevice 例程,也不會傳送 IRP_MN_START_DEVICE 要求。 不過,驅動程式必須準備好處理所有其他 PnP IRP。
IoReportDetectedDevice 會將裝置標示為根列舉裝置,而且此識別會在系統開機時持續存在。 在後續的系統開機期間,PnP 管理員會「偵測」根列舉清單中的裝置,並將其設定為 PnP 裝置:PnP 管理員會查詢裝置資訊、識別適當的驅動程式並呼叫其 AddDevice 例程,並傳送所有適當的 PnP IRP。
系統會為裝置產生兩個相容的標識符字串,格式為 DETECTEDInterface\Driver 和 DETECTED\Driver。 介面是 ResourceList 參數中所指定第一個總線INTERFACE_TYPE的字串名稱。 如果未指定總線,介面會設定為 「Internal」。。 驅動程式 是驅動程式的服務名稱。 驅動程式可以藉由處理 IRP_MN_QUERY_ID 要求來提供額外的硬體標識碼或相容的標識碼。
驅動程式寫入器必須提供符合任何指定硬體標識碼或相容標識碼的 INF 檔案。 INF 檔案應該指定稱為 IoReportDetectedDevice 的原始驅動程式作為要載入這些標識碼的驅動程式。 系統會使用這項資訊來重建裝置的驅動程式堆疊,例如重新啟動時。 IoReportDetectedDevice 的呼叫端必須在 IRQL = PASSIVE_LEVEL系統線程的內容中執行。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | 從 Windows 2000 開始提供。 |
目標平台 | Universal |
標頭 | ntddk.h (包含 Ntddk.h) |
程式庫 | NtosKrnl.lib |
Dll | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL (请参阅一节) |
DDI 合規性規則 | HwStorPortProhibitedDIS (storport) 、 PowerIrpDDis (wdm) |