Macro IoReleaseRemoveLockAndWait (wdm.h)
O IoReleaseRemoveLockAndWait libera um bloqueio de remoção que o driver adquiriu em uma chamada anterior para IoAcquireRemoveLock e aguarda até que todas as aquisições do bloqueio sejam liberadas.
Sintaxe
void IoReleaseRemoveLockAndWait(
[in] RemoveLock,
[in] Tag
);
Parâmetros
[in] RemoveLock
Ponteiro para uma estrutura IO_REMOVE_LOCK que o chamador passou em uma chamada anterior para IoAcquireRemoveLock .
[in] Tag
Ponteiro para uma marca fornecida pelo chamador que foi passada em uma chamada anterior para IoAcquireRemoveLock.
Se um driver especificou uma marca quando adquiriu o bloqueio, o driver deverá especificar o mesmo Marca ao liberar o bloqueio.
Se a chamada para
Valor de retorno
Nenhum
Observações
Um driver normalmente chama essa rotina em seu código de expedição para uma solicitação de IRP_MN_REMOVE_DEVICE. Para permitir que as solicitações de E/S enfileiradas sejam concluídas, cada driver deve chamar IoReleaseRemoveLockAndWaitdepois de passar o IRP de remoção para o driver mais baixo e antes de liberar memória, chamar IoDetachDeviceou chamar IoDeleteDevice. O IoReleaseRemoveLockAndWait espera que o motorista do ônibus cancele todos os IRPs que possam estar pendentes (por exemplo, um IRP IRP_MN_WAIT_WAKE).
Um driver deve adquirir o bloqueio de remoção antes de chamar IoReleaseRemoveLockAndWait. Normalmente, um driver chama
Para liberar um bloqueio do código diferente do código de expedição IRP_MN_REMOVE_DEVICE, use IoReleaseRemoveLock.
Depois que IoReleaseRemoveLockAndWait tiver sido chamado para um bloqueio de remoção específico, as chamadas subsequentes para IoAcquireRemoveLock para o mesmo bloqueio de remoção falharão. IoReleaseRemoveLockAndWait não retornará até que todas as aquisições pendentes do bloqueio de remoção tenham sido liberadas.
Depois que IoReleaseRemoveLockAndWait retorna, o driver deve considerar que o dispositivo está em um estado no qual ele está pronto para ser removido e não pode executar operações de E/S. Portanto, o driver não deve chamar a rotina IoInitializeRemoveLock para inicializar novamente o bloqueio de remoção. A violação dessa regra enquanto o driver está sendo verificado pelo Driver Verifier resultará em uma verificação de bug.
Para obter mais informações, consulte Usando Remover Bloqueios.
Requisitos
Requisito | Valor |
---|---|
de cliente com suporte mínimo | Disponível a partir do Windows 2000. |
da Plataforma de Destino |
Área de trabalho |
cabeçalho | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
biblioteca | NtosKrnl.lib |
de DLL |
NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
regras de conformidade de DDI |