Функция IoRequestDeviceEject (wdm.h)
Подпрограмма IoRequestDeviceEject уведомляет диспетчер PnP о том, что нажата кнопка извлечения устройства.
Синтаксис
void IoRequestDeviceEject(
[in] PDEVICE_OBJECT PhysicalDeviceObject
);
Параметры
[in] PhysicalDeviceObject
Указатель на PDO для устройства.
Возвращаемое значение
None
Remarks
Обратите внимание, что эта подпрограмма сообщает о запросе на извлечение устройства, а не на извлечение мультимедиа.
Как правило, водитель шины PnP вызывает IoRequestDeviceEject , чтобы уведомить диспетчера PnP о том, что пользователь нажал кнопку извлечения устройства на одном из его дочерних устройств.
Драйвер вызывает эту подпрограмму, а не отправляет запрос IRP_MN_EJECT , так как она позволяет диспетчеру PnP координировать дополнительные действия для извлечения, помимо отправки IRP. Например, диспетчер PnP уведомляет компоненты пользовательского режима и режима ядра, зарегистрированные для уведомления об изменениях на устройстве.
Диспетчер PnP направляет упорядоченное завершение работы устройства. Диспетчер PnP:
-
Создает список других устройств, затронутых извлечением этого устройства.
Диспетчер PnP запрашивает отношения удаления, выброса и связи шины (дочерние устройства).
-
Определяет, можно ли удалить устройство и связанные с ним устройства программным обеспечением.
Диспетчер PnP отправляет IRP_MN_QUERY_REMOVE_DEVICE irP драйверам для устройства и связанных с ним устройств. Диспетчер PnP также отправляет уведомления всем компонентам пользовательского режима и режима ядра, зарегистрированным для уведомления об изменении устройства на устройстве или любом из связанных с ним устройств. Если какой-либо из драйверов или компонентов пользовательского режима завершается сбоем при удалении запроса, диспетчер PnP открывает диалоговое окно, уведомляющее пользователя о том, что произошел сбой извлечения.
-
Программное обеспечение удаляет устройство и связанные с ним устройства.
Если предыдущие шаги выполнены успешно, диспетчер PnP уведомляет зарегистрированные драйверы и приложения о том, что устройство и связанные с ним устройства удаляются программным обеспечением. Затем диспетчер PnP отправляет IRP_MN_REMOVE_DEVICE IRP в драйверы для устройства и связанных с ним устройств. Драйверы функций и фильтров отсоединяются от стека устройств и удаляют свои объекты устройства для устройств. Водители автобуса сохраняют PDO для устройств, если только устройство физически не исчезло и водитель автобуса не опустил устройство в своем последнем ответе на IRP_MN_QUERY_DEVICE_RELATIONS/BusRelations для родительской шины устройства.
-
Направляет водителя автобуса на извлечение устройства (если это возможно).
Диспетчер PnP выполняет различные действия в зависимости от возможностей извлечения устройства:
-
Поддерживается горячее извлечение.
Если для устройства задана возможность EjectSupported , устройство можно извлечь, когда система работает (находится в состоянии PowerSystemWorking ). Диспетчер PnP отправляет IRP_MN_EJECT запрос водителю автобуса для устройства. Все функции и драйверы фильтров, отсоединяемые ранее от стека в ответ на удаление IRP, поэтому водитель автобуса обрабатывает IRP извлечения. Когда водитель автобуса завершает IRP, менеджер PnP ожидает физического отсутствия устройства в системе.
-
Горячий выброс не поддерживается.
В этом случае устройство является съемным , но не поддерживает извлечение. Диспетчер PnP помечает устройство как несутство или не работает должным образом. Диспетчер PnP не перезапустит устройство до тех пор, пока пользователь физически не удалит его и повторно вдаст. В этом случае диспетчер PnP не отправляет IRP_MN_EJECT.
-
Поддерживается горячее извлечение.
Приложение в пользовательском режиме может инициировать извлечение устройства. В этом случае ни драйвер не вызывает эту подпрограмму, но операционная система вызывает диспетчер PnP для запуска описанных выше действий.
Вызывающие объект IoRequestDeviceEject должны выполняться в IRQL <= DISPATCH_LEVEL. Диспетчер PnP выполняет большинство задач извлечения устройств, перечисленных выше в разделе IRQL = PASSIVE_LEVEL.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Доступно начиная с Windows 2000. |
Целевая платформа | Универсальное |
Верхняя часть | wdm.h (включая Wdm.h, Ntddk.h, Ntifs.h) |
Библиотека | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL (см. раздел "Примечания") |