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.
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.