Функция 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:

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

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

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

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

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

    Если предыдущие шаги выполнены успешно, диспетчер PnP уведомляет зарегистрированные драйверы и приложения о том, что устройство и связанные с ним устройства удаляются программным обеспечением. Затем диспетчер PnP отправляет IRP_MN_REMOVE_DEVICE IRP в драйверы для устройства и связанных с ним устройств. Драйверы функций и фильтров отсоединяются от стека устройств и удаляют свои объекты устройства для устройств. Водители автобуса сохраняют 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 (включая 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