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:
-
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).
-
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.
-
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.
-
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.
-
Há suporte para ejeto quente.
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) |