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 管理器。 如果 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。
系统为设备生成两个兼容的 ID 字符串,格式为 DETECTED接口\驱动程序 和 DETECTED\Driver。 Interface 是在 ResourceList 参数中指定的第一个总线的INTERFACE_TYPE的字符串名称。 如果未指定总线,则接口设置为“内部”。 驱动程序 是驱动程序的服务名称。 驱动程序可以通过处理 IRP_MN_QUERY_ID 请求来提供其他硬件 ID 或兼容 ID。
驱动程序编写器必须提供与任何指定的硬件 ID 或兼容 ID 匹配的 INF 文件。 INF 文件应指定调用 IoReportDetectedDevice 的原始驱动程序作为要为这些 ID 加载的驱动程序。 系统使用此信息重新生成设备的驱动程序堆栈,例如重启时。 IoReportDetectedDevice 的调用方必须在系统线程上下文中的 IRQL = PASSIVE_LEVEL 运行。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 从 Windows 2000 开始可用。 |
目标平台 | 通用 |
标头 | ntddk.h (包括 Ntddk.h) |
Library | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL (请参阅“备注”部分) |
DDI 符合性规则 | HwStorPortProhibitedDDI (storport) , PowerIrpDDis (wdm) |