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


Функция IoRequestDeviceEject (wdm.h)

Программа IoRequestDeviceEject уведомляет диспетчера PnP о нажатии кнопки извлечения устройства.

Синтаксис

void IoRequestDeviceEject(
  [in] PDEVICE_OBJECT PhysicalDeviceObject
);

Параметры

[in] PhysicalDeviceObject

Указатель на PDO для устройства.

Возвращаемое значение

Никакой

Замечания

Обратите внимание, что эта подпрограмма сообщает запрос на извлечение устройства, а не извлечение мультимедиа.

Как правило, драйвер PnP вызывает IoRequestDeviceEject, чтобы уведомить диспетчера PnP о том, что пользователь нажимал кнопку извлечения устройства на одном из дочерних устройств.

Драйвер вызывает эту подпрограмму, а не отправляет запрос IRP_MN_EJECT, так как эта подпрограмма позволяет диспетчеру PnP координировать дополнительные действия для извлечения, помимо отправки IRP. Например, диспетчер PnP уведомляет компоненты пользовательского режима и режима ядра, зарегистрированные для уведомления об изменениях на устройстве.

Диспетчер PnP направляет упорядоченное завершение работы устройства. Диспетчер PnP:

  1. Создает список других устройств, затронутых удалением этого устройства.

    Диспетчер PnP запрашивает отношения удаления устройства, отношения удаления и связи с шиной (дочерние устройства).

  2. Определяет, можно ли удалить устройство и связанные с ним устройства.

    Диспетчер PnP отправляет IRP_MN_QUERY_REMOVE_DEVICE IRP драйверам для устройства и связанных с ним устройств. Диспетчер PnP также отправляет уведомления любым компонентам пользовательского режима и режима ядра, зарегистрированным для уведомления об изменении устройства на устройстве или на любом из связанных устройств. Если любой из драйверов или компонентов пользовательского режима не удается удалить запрос, диспетчер PnP появится диалоговое окно, чтобы уведомить пользователя о сбое удаления.

  3. Программное обеспечение удаляет устройство и связанные с ним устройства.

    Если предыдущие шаги выполняются успешно, диспетчер PnP уведомляет зарегистрированных драйверов и приложений о том, что устройство и связанные с ним устройства удаляются программным обеспечением. Затем диспетчер PnP отправляет IRP_MN_REMOVE_DEVICE IRPs драйверам для устройства и связанных с ним устройств. Драйверы функций и фильтров отсоединяются от стека устройств и удаляют объекты устройств для устройств. Водители шины сохраняют PDO-адреса для устройств, если устройство физически не исчезло, а водитель шины опустил устройство в своем последнем ответе на IRP_MN_QUERY_DEVICE_RELATIONS/BusRelations родительской шины устройства.

  4. Направляет водителя шины на удаление устройства (если это возможно).

    Диспетчер PnP выполняет различные действия в зависимости от возможностей извлечения устройства:

    • Горячая извлечение поддерживается.

      Если для устройства задана возможность EjectSupported, устройство можно извлечь при запуске системы (находится в состоянии PowerSystemWorking). Диспетчер PnP отправляет IRP_MN_EJECT запрос водителю шины на устройство. Все драйверы функций и фильтров, отсоединяемые ранее от стека в ответ на удаление IRP, поэтому водитель шины обрабатывает исходящий IRP. Когда водитель шины завершает IRP, диспетчер PnP ожидает, что устройство физически отсутствует в системе.

    • Горячий извлечение не поддерживается.

      В этом случае устройство съемных, но не поддерживает удаление. Диспетчер PnP помечает устройство как нерабочее или нерабочее. Диспетчер PnP не перезагрузит устройство, пока пользователь физически не удаляет его и повторно выводит его. В этом случае диспетчер PnP не отправляет IRP_MN_EJECT.

    Родительский драйвер шины устройства задает возможности для устройства, включая его возможности извлечения, в ответ на запрос IRP_MN_QUERY_CAPABILITIES. Функция или драйвер фильтра могут дополнительно указать возможности.
При извлечении устройства его дочерние устройства физически удаляются из системы вместе с ней.

Приложение в пользовательском режиме может инициировать удаление устройства. В этом случае драйвер не вызывает эту подпрограмму, но операционная система вызывает диспетчер PnP, чтобы инициировать описанные выше действия.

Вызывающие IoRequestDeviceEject должны работать в IRQL <= DISPATCH_LEVEL. Диспетчер PnP выполняет большинство задач извлечения устройств, перечисленных выше в IRQL = PASSIVE_LEVEL.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Доступно начиная с Windows 2000.
целевая платформа Всеобщий
заголовка wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
библиотеки NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL (см. раздел "Примечания")

См. также

IRP_MN_EJECT

IRP_MN_QUERY_DEVICE_RELATIONS

IRP_MN_QUERY_REMOVE_DEVICE

IRP_MN_REMOVE_DEVICE