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

DispatchPnp

IRP_MN_WAIT_WAKE

IoAcquireRemoveLock

IoDeleteDevice

IoDetachDevice

IoInitializeRemoveLock

IoReleaseRemoveLock