Função IoRequestDeviceEject (wdm.h)

A rotina IoRequestDeviceEject notifica o gerenciador PnP de que o botão de ejeção do dispositivo foi pressionado.

Sintaxe

void IoRequestDeviceEject(
  [in] PDEVICE_OBJECT PhysicalDeviceObject
);

Parâmetros

[in] PhysicalDeviceObject

Ponteiro para o PDO do dispositivo.

Retornar valor

Nenhum

Comentários

Observe que essa rotina relata uma solicitação de ejeção de dispositivo, não ejeção de mídia.

Normalmente, um motorista de barramento PnP chama IoRequestDeviceEject para notificar o gerente PnP de que um usuário pressionou o botão de ejeção do dispositivo em um de seus dispositivos filho.

Um driver chama essa rotina, em vez de enviar uma solicitação IRP_MN_EJECT , pois essa rotina permite que o gerenciador PnP coordene ações adicionais para a ejeção além de enviar o IRP. Por exemplo, o gerenciador PnP notifica os componentes do modo de usuário e do modo kernel registrados para notificação de alterações no dispositivo.

O gerenciador PnP direciona um desligamento ordenado do dispositivo. O gerenciador PnP:

  1. Cria uma lista de outros dispositivos afetados por esse dispositivo que está sendo ejetado.

    O gerente PnP consulta as relações de remoção do dispositivo, as relações de ejeção e as relações de barramento (dispositivos filho).

  2. Determina se o dispositivo e seus dispositivos relacionados podem ser removidos pelo software.

    O gerenciador de PnP envia IRP_MN_QUERY_REMOVE_DEVICE IRPs para os drivers do dispositivo e seus dispositivos relacionados. O gerenciador PnP também envia notificações para todos os componentes do modo de usuário e do modo kernel registrados para notificação de alteração de dispositivo no dispositivo ou em qualquer um de seus dispositivos relacionados. Se algum dos drivers ou componentes do modo de usuário falhar na remoção da consulta, o gerenciador PnP abrirá uma caixa de diálogo para notificar o usuário de que a ejeção falhou.

  3. O software remove o dispositivo e seus dispositivos relacionados.

    Se as etapas anteriores forem bem-sucedidas, o gerenciador PnP notificará os drivers e aplicativos registrados de que o dispositivo e seus dispositivos relacionados estão sendo removidos pelo software. Em seguida, o gerenciador PnP envia IRP_MN_REMOVE_DEVICE IRPs para os drivers do dispositivo e seus dispositivos relacionados. Os drivers de função e filtro desanexam da pilha do dispositivo e excluem seus objetos de dispositivo para os dispositivos. Os motoristas de ônibus retêm os PDO(s) para os dispositivos, a menos que um dispositivo tenha desaparecido fisicamente e o motorista do ônibus omitiu o dispositivo em sua resposta mais recente a IRP_MN_QUERY_DEVICE_RELATIONS/BusRelations para o barramento pai do dispositivo.

  4. Direciona o motorista do ônibus para ejetar o dispositivo (se possível).

    O gerenciador PnP executa etapas diferentes, dependendo dos recursos de ejeção do dispositivo:

    • Há suporte para ejeto quente.

      Se a funcionalidade EjectSupported estiver definida para o dispositivo, o dispositivo poderá ser ejetado quando o sistema estiver em execução (está no estado PowerSystemWorking ). O gerenciador PnP envia uma solicitação IRP_MN_EJECT para o motorista do ônibus para o dispositivo. Qualquer função e drivers de filtro desanexados anteriormente da pilha em resposta ao IRP de remoção, de modo que o motorista do ônibus manipula o IRP de ejeção. Quando o driver de barramento conclui o IRP, o gerenciador PnP espera que o dispositivo esteja fisicamente ausente do sistema.

    • Não há suporte para ejeto quente.

      Nesse caso, o dispositivo é Removível , mas não dá suporte à ejeção. O gerenciador PnP marca o dispositivo como não presente/não funcionando corretamente. O gerenciador PnP não reiniciará o dispositivo até que um usuário o remova fisicamente e o reinsera. Nesse caso, o gerenciador PnP não envia uma IRP_MN_EJECT.

    O driver de barramento pai de um dispositivo define os recursos de um dispositivo, incluindo suas funcionalidades de ejeção, em resposta a uma solicitação de IRP_MN_QUERY_CAPABILITIES . Opcionalmente, um driver de função ou filtro pode especificar recursos.
Quando um dispositivo é ejetado, seus dispositivos filho são fisicamente removidos do sistema junto com ele.

Um aplicativo no modo de usuário pode iniciar uma ejeção de dispositivo. Nesse caso, nenhum driver chama essa rotina, mas o sistema operacional chama o gerenciador PnP para iniciar as etapas listadas acima.

Os chamadores de IoRequestDeviceEject devem estar em execução em IRQL <= DISPATCH_LEVEL. O gerenciador PnP executa a maioria de suas tarefas de ejeção de dispositivo listadas acima em IRQL = PASSIVE_LEVEL.

Requisitos

Requisito Valor
Cliente mínimo com suporte Disponível a partir do Windows 2000.
Plataforma de Destino Universal
Cabeçalho wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Biblioteca NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL (consulte a seção Comentários)

Confira também

IRP_MN_EJECT

IRP_MN_QUERY_DEVICE_RELATIONS

IRP_MN_QUERY_REMOVE_DEVICE

IRP_MN_REMOVE_DEVICE