共用方式為


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\DriverInterfaceResourceList 參數中所指定之第一個總線 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)

另請參閱

IRP_MN_QUERY_DEVICE_RELATIONS

IoReportResourceForDetection