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 列舉實例。
介面類型,例如 PCIBus,定義於 Wdm.h 中。 如果驅動程式不知道裝置的 LegacyBusType,驅動程式會提供此參數 InterfaceTypeUndefined 值。
[in] BusNumber
指定裝置的總線號碼。 如果已存在,PnP 管理員會使用此資訊來比對回報的裝置與其 PnP 列舉實例。
總線號碼會區分裝置所在的總線,以及計算機上相同類型的其他總線。 總線編號配置是總線特定的。 如果驅動程式不知道裝置的 BusNumber,驅動程式會提供此參數的值 -1。
[in] SlotNumber
指定裝置的邏輯位置編號。 如果已存在,PnP 管理員會使用此資訊來比對回報的裝置與其 PnP 列舉實例。
如果驅動程式不知道裝置的 SlotNumber,驅動程式會提供此參數的值 -1。
[in, optional] ResourceList
用來偵測裝置的資源清單指標。 此清單中的資源格式為未經轉譯的原始表單。
[in, optional] ResourceRequirements
選擇性地指向偵測到裝置的資源需求清單。 如果呼叫端沒有裝置的這項資訊,NULL。
[in] ResourceAssigned
指定裝置的資源是否已回報給 PnP 管理員。 如果 ResourceAssignedTRUE,則資源已回報,可能 IoReportResourceForDetection,而 PnP 管理員不會嘗試代表裝置宣告這些資源。 如果 TRUE,則當裝置在後續開機時,PnP 管理員也不會宣告資源。
[in, out] DeviceObject
選擇性地指向偵測到裝置的 PDO。
如果呼叫端沒有裝置的 PDO,NULL,通常是這種情況。 如果 DeviceObjectNULL,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。 Interface 是 ResourceList 參數中所指定之第一個總線 INTERFACE_TYPE 的字串名稱。 如果未指定任何總線,介面 會設定為 「內部」。 驅動程式 是驅動程式的服務名稱。 驅動程式可以藉由處理 IRP_MN_QUERY_ID 要求來提供額外的硬體識別碼或相容的標識碼。
驅動程式寫入器必須提供符合任何指定硬體標識碼或相容標識碼的 INF 檔案。 INF 檔案應該指定名為 IoReportDetectedDevice 的原始驅動程式, 為這些標識碼載入的驅動程式。 系統會使用這項資訊來重建裝置的驅動程式堆疊,例如重新啟動時。 IoReportDetectedDevice 的呼叫端必須在系統線程的內容中於 IRQL = PASSIVE_LEVEL執行。
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | 從 Windows 2000 開始提供。 |
目標平臺 | 普遍 |
標頭 | ntddk.h (包括 Ntddk.h) |
連結庫 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL (請參閱一節) |
DDI 合規性規則 | HwStorPortProhibitedDIs(storport),PowerIrpDDis(wdm) |