Функция 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 для обнаруженного устройства.
Значение NULL , если вызывающий объект не имеет PDO для устройства, как правило. Если 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 к PDO, возвращенной в DeviceObject. После того как вызывающий объект присоединяет FDO, вызывающий объект является драйвером функции для устройства, по крайней мере временно. Отсутствуют драйверы фильтров. Менеджер PnP владеет PDO.
Диспетчер PnP считает устройство запущенным и поэтому не вызывает процедуру AddDevice драйвера и не отправляет запрос IRP_MN_START_DEVICE . Однако драйвер должен быть готов к обработке всех остальных PnP IRP.
IoReportDetectedDevice помечает устройство как устройство с корневым перечислением, и эта идентификация сохраняется при загрузке системы. Во время последующих загрузок системы диспетчер PnP "обнаруживает" устройство в корневом списке и настраивает его как устройство PnP: диспетчер PnP запрашивает сведения об устройстве, определяет соответствующие драйверы и вызывает их подпрограммы AddDevice и отправляет все соответствующие PnP IRP.
Система создает две совместимые строки идентификатора для устройства в формате DETECTEDInterface\Driver и DETECTED\Driver. Интерфейс — это строковое имя INTERFACE_TYPE первой шины, указанной в параметре ResourceList . Если шина не указана, для интерфейса задано значение "Внутренний". Driver — это имя службы драйвера. Драйвер может предоставить дополнительные идентификаторы оборудования или совместимые идентификаторы, обрабатывая запрос 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) |