Macro IoReleaseRemoveLockAndWait (wdm.h)
A rotina 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 deve especificar a mesma Marca ao liberar o bloqueio.
Se a chamada para IoAcquireRemoveLock não especificar uma Tag, esse parâmetro será NULL.
Retornar valor
Nenhum
Comentários
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 IoDetachDevice ou chamar IoDeleteDevice. A rotina IoReleaseRemoveLockAndWait aguarda 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 IoAcquireRemoveLock no início de sua rotina DispatchPnp , antes da instrução switch. Como resultado, o bloqueio é adquirido para cada operação PnP, incluindo a aquisição necessária antes de chamar IoReleaseRemoveLockAndWait no código que manipula IRP_MN_REMOVE_DEVICE.
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 retorna até que todas as aquisições pendentes do bloqueio de remoção tenham sido liberadas.
Depois que IoReleaseRemoveLockAndWait retornar, 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 Verificador de Driver resultará em um bug marcar.
Para obter mais informações, consulte Usando Remover Bloqueios.
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Disponível a partir do Windows 2000. |
Plataforma de Destino | Área de Trabalho |
Cabeçalho | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
Biblioteca | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
Regras de conformidade da DDI | IoReleaseRemoveLockAndWaitOutsideRemoveDevice(wdm), RemoveLock(wdm), RemoveLockCheck(wdm), RemoveLockMnRemove(wdm), RemoveLockMnRemove2(wdm), RemoveLockReleaseCleanup(wdm), RemoveLockReleaseClose(wdm), RemoveLockReleaseCreate(wdm), RemoveLockReleaseDeviceControl(wdm), RemoveLockReleaseInternalDeviceControl(wdm), RemoveLockReleasePower(wdm), RemoveLockReleaseRead(wdm), RemoveLockReleaseShutdown(wdm), RemoveLockReleaseSystemControl(wdm), RemoveLockReleaseWrite(wdm) |
Confira também
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de