Função KeReleaseMutex (wdm.h)
A rotina KeReleaseMutex libera um objeto mutex e especifica se o chamador deve chamar uma das rotinas KeWaitXxx assim que KeReleaseMutex retornar o controle.
Sintaxe
LONG KeReleaseMutex(
[in, out] PRKMUTEX Mutex,
[in] BOOLEAN Wait
);
Parâmetros
[in, out] Mutex
Um ponteiro para um objeto mutex inicializado para o qual o chamador fornece o armazenamento.
[in] Wait
Especifica se a chamada para KeReleaseMutex deve ser seguida imediatamente por uma chamada para uma das rotinas KeWaitXxx . Se TRUE, a chamada KeReleaseMutex deverá ser seguida por uma chamada para KeWaitForMultipleObjects, KeWaitForMutexObject ou KeWaitForSingleObject. Para obter mais informações, consulte a seção Comentários a seguir.
Retornar valor
Se o valor retornado for zero, o objeto mutex foi liberado e alcançou um estado de sinalizado.
Comentários
Para melhorar o desempenho, use mutexes rápidos ou mutexes protegidos. Para obter mais informações, consulte Alternativas a objetos Mutex.
Se o objeto mutex atingir um estado sinalizado, será feita uma tentativa de atender a uma espera pelo objeto mutex.
Um objeto mutex só pode ser liberado pelo thread que contém o mutex no momento. Se for feita uma tentativa de liberar um mutex que o thread não contém ou se um mutex tiver sido adquirido em IRQL = DISPATCH_LEVEL e o thread não estiver em execução no DISPATCH_LEVEL (e vice-versa), a rotina gerará uma exceção de STATUS_ABANDONED ou STATUS_MUTEX_NOT_OWNED.
Quando um objeto mutex atinge um estado sinalizado, ele é removido da lista de mutexes que são mantidos por esse thread. Se essa lista não contiver mais entradas, a prioridade original para o thread será restaurada.
A rotina KeReleaseMutex pode gerar temporariamente o IRQL. Se o parâmetro Wait for FALSE, a rotina, antes de retornar, restaurará o IRQL para o valor original que ele tinha no início da chamada.
Se Wait = TRUE, a rotina retornará sem reduzir o IRQL. Nesse caso, a chamada KeReleaseMutex deve ser seguida imediatamente por uma chamada KeWaitXxx . Ao definir Wait = TRUE, o chamador pode impedir que uma opção de contexto desnecessária ocorra entre a chamada KeReleaseMutex e a chamada KeWaitXxx . A rotina KeWaitXxx , antes de retornar, restaura o IRQL para seu valor original no início da chamada KeReleaseMutex . Embora o IRQL desabilite as opções de contexto entre as duas chamadas, essas chamadas não podem ser usadas de forma confiável como o início e o fim de uma operação atômica. Por exemplo, entre essas duas chamadas, um thread que está sendo executado ao mesmo tempo em outro processador pode alterar o estado do objeto de evento ou do destino da espera.
Se o chamador estiver em execução em IRQL = DISPATCH_LEVEL ou em um contexto de thread arbitrário, o parâmetro Timeout para KeWaitXxx deverá ser zero.
Se um mutex for adquirido recursivamente, o thread de retenção deverá chamar KeReleaseMutex tantas vezes quanto adquiriu o mutex para defini-lo para o estado sinalizado.
Para obter mais informações sobre objetos mutex, consulte Objetos Mutex.
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Disponível a partir do Windows 2000. |
Plataforma de Destino | Universal |
Cabeçalho | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
Biblioteca | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL |
Regras de conformidade da DDI | HwStorPortProhibitedDIs(storport), IrqlKeDispatchLte(wdm) |