Compartilhar via


Macro IoReleaseRemoveLock (wdm.h)

A rotina IoReleaseRemoveLock libera um bloqueio de remoção adquirido com uma chamada anterior para IoAcquireRemoveLock.

Sintaxe

void IoReleaseRemoveLock(
  [in]  RemoveLock,
  [in]  Tag
);

Parâmetros

[in] RemoveLock

Ponteiro para uma estrutura IO_REMOVE_LOCK que o chamador passou para uma chamada anterior para IoAcquireRemoveLock.

[in] Tag

Ponteiro para uma marca fornecida pelo chamador que foi passada para uma chamada anterior para IoAcquireRemoveLock.

Se um driver especificou uma Marca quando adquiriu o bloqueio, o driver deverá especificar a mesma Marca ao liberar o bloqueio.

Se a chamada para IoAcquireRemoveLock não especificar uma Marca, esse parâmetro será NULL.

Retornar valor

Nenhum

Comentários

Um driver chama IoReleaseRemoveLock quando conclui a operação de E/S para a qual chamou IoAcquireRemoveLock.

  • Para operações de E/S (incluindo IRPs de energia e PnP) que definem uma rotina IoCompletion , um driver deve chamar IoReleaseRemoveLock na rotina IoCompletion , depois de chamar IoCompleteRequest.
  • Para operações de E/S que não definem uma rotina de IoCompletion , um driver deve chamar IoReleaseRemoveLock depois de passar o IRP atual para o driver mais baixo, mas antes de sair da rotina de expedição.
Cada chamada para IoAcquireRemoveLock deve ter uma chamada correspondente para IoReleaseRemoveLock.

IoReleaseRemoveLock diminui a contagem de aquisições pendentes do bloqueio de remoção. Se a contagem for zero e o driver tiver recebido uma solicitação de IRP_MN_REMOVE_DEVICE , IoReleaseRemoveLock definirá um evento interno. Quando um driver está pronto para excluir um objeto de dispositivo, ele chama uma rotina semelhante, IoReleaseRemoveLockAndWait. O driver faz essa chamada somente em seu código de expedição para uma solicitação de IRP_MN_REMOVE_DEVICE . A rotina IoReleaseRemoveLockAndWait não retorna até que IoReleaseRemoveLock defina o evento que indica que a contagem de aquisições é zero. Depois que IoReleaseRemoveLockAndWait retornar, o driver poderá desanexar e excluir o objeto do dispositivo com segurança.

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 <= DISPATCH_LEVEL
Regras de conformidade de DDI RemoveLock(wdm), RemoveLockCheck(wdm), RemoveLockForward(wdm), RemoveLockForward2(wdm), RemoveLockForwardDeviceControl(wdm), RemoveLockForwardDeviceControl2(wdm), RemoveLockForwardDeviceControlInternal(wdm), RemoveLockForwardDeviceControlInternal2(wdm), RemoveLockForwardRead(wdm), RemoveLockForwardRead2(wdm), RemoveLockForwardWrite(wdm), RemoveLockForwardWrite2(wdm), RemoveLockMnRemove(wdm), RemoveLockMnRemove2(wdm), RemoveLockMnSurpriseRemove(wdm), RemoveLockQueryMnRemove(wdm), RemoveLockRelease2(wdm), RemoveLockReleaseCleanup(wdm), RemoveLockReleaseClose(wdm), RemoveLockReleaseCreate(wdm), RemoveLockReleaseDeviceControl(wdm), RemoveLockReleaseInternalDeviceControl(wdm), RemoveLockReleasePnp(wdm), RemoveLockReleasePower(wdm), RemoveLockReleaseRead(wdm), RemoveLockReleaseShutdown(wdm), RemoveLockReleaseSystemControl(wdm), RemoveLockReleaseWrite(wdm)

Confira também

IoAcquireRemoveLock

IoInitializeRemoveLock

IoReleaseRemoveLockAndWait