Поделиться через


Обработка запросов перечисления

Диспетчер PnP может запросить драйвера шины перечислить свои дочерние элементы в любое время. (Если вы знакомы с интерфейсами WDM, запросы перечисления IRP_MN_QUERY_DEVICE_RELATIONS имеют тип отношения BusRelations.) Драйверы, основанные на фреймворке, не видят эти запросы. Вместо этого платформа обрабатывает запросы с помощью сведений, хранящихся в дочернем списке устройства. Драйвер отвечает за поддержание актуальности списка дочерних объектов up-to, чтобы фреймворк мог предоставить правильные сведения, когда диспетчер PnP запрашивает перечисление.

Драйверы шины на основе фреймворка, поддерживающие динамическое перечисление, могут получать запрос на повторное перечисление определенного дочернего устройства. Такой запрос может отправляться драйвером функции дочернего устройства после того, как драйвер обнаруживает сбой устройства. (Платформа поддерживает этот тип запроса путем реализации интерфейса REENUMERATE_SELF_INTERFACE_STANDARD, который является стандартным определяемым драйвером интерфейсом, определенным в wdm.h.)

Драйверы шины на основе фреймворка, поддерживающие динамическое перечисление, могут предоставлять функцию обратного вызова EvtChildListDeviceReenumerated, которая вызывается фреймворком при получении запроса на повторное перечисление от драйвера дочернего устройства. Если эта функция обратного вызова возвращает TRUE или не существует, фреймворк помечает дочернее устройство как отсутствующее и сообщает диспетчеру PnP о том, что список дочерних устройств шины изменился. В результате диспетчер PnP запрашивает повторное перечисление, и фреймворк вызывает функцию обратного вызова драйвера EvtChildListCreateDevice, которая создает новое PDO для дочернего устройства.