KeReleaseMutex, fonction (wdm.h)
La routine KeReleaseMutex libère un objet mutex et spécifie si l’appelant doit appeler l’une des routines KeWaitXxx dès que KeReleaseMutex retourne le contrôle.
Syntaxe
LONG KeReleaseMutex(
[in, out] PRKMUTEX Mutex,
[in] BOOLEAN Wait
);
Paramètres
[in, out] Mutex
Pointeur vers un objet mutex initialisé pour lequel l’appelant fournit le stockage.
[in] Wait
Spécifie si l’appel à KeReleaseMutex doit être immédiatement suivi d’un appel à l’une des routines KeWaitXxx . Si la valeur est TRUE, l’appel KeReleaseMutex doit être suivi d’un appel à KeWaitForMultipleObjects, KeWaitForMutexObject ou KeWaitForSingleObject. Pour plus d'informations, consultez la section Notes qui suit.
Valeur retournée
Si la valeur de retour est zéro, l’objet mutex a été libéré et a atteint un état de signal.
Remarques
Pour de meilleures performances, utilisez des mutex rapides ou des mutex surveillés. Pour plus d’informations, consultez Alternatives aux objets Mutex.
Si l’objet mutex atteint un état signalé, une tentative est effectuée pour satisfaire une attente pour l’objet mutex.
Un objet mutex peut être libéré uniquement par le thread qui contient actuellement le mutex. Si une tentative est effectuée pour libérer un mutex que le thread ne contient pas ou si un mutex a été acquis à IRQL = DISPATCH_LEVEL et que le thread ne s’exécute pas à DISPATCH_LEVEL (et vice versa), la routine déclenche une exception STATUS_ABANDONED ou STATUS_MUTEX_NOT_OWNED.
Lorsqu’un objet mutex atteint un état signalé, il est supprimé de la liste des mutex qui sont conservés par ce thread. Si cette liste ne contient plus d’entrées, la priorité d’origine pour le thread est restaurée.
La routine KeReleaseMutex peut déclencher temporairement l’IRQL. Si le paramètre Wait a la valeur FALSE, la routine, avant de retourner, restaure l’IRQL à la valeur d’origine qu’elle avait au début de l’appel.
Si l’argument Wait = TRUE est attendu, la routine retourne sans abaisser l’IRQL. Dans ce cas, l’appel KeReleaseMutex doit être immédiatement suivi d’un appel KeWaitXxx . En définissant Wait = TRUE, l’appelant peut empêcher un changement de contexte inutile entre l’appel KeReleaseMutex et l’appel KeWaitXxx . La routine KeWaitXxx , avant de retourner, restaure l’IRQL à sa valeur d’origine au début de l’appel KeReleaseMutex . Bien que l’IRQL désactive les commutateurs de contexte entre les deux appels, ces appels ne peuvent pas être utilisés de manière fiable comme début et fin d’une opération atomique. Par exemple, entre ces deux appels, un thread qui s’exécute en même temps sur un autre processeur peut modifier l’état de l’objet d’événement ou de la cible de l’attente.
Si l’appelant s’exécute à IRQL = DISPATCH_LEVEL ou dans un contexte de thread arbitraire, le paramètre Timeout de KeWaitXxx doit être égal à zéro.
Si un mutex est acquis de manière récursive, le thread de conservation doit appeler KeReleaseMutex autant de fois qu’il a acquis le mutex pour le définir à l’état signalé.
Pour plus d’informations sur les objets mutex, consultez Objets Mutex.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Disponible à partir de Windows 2000. |
Plateforme cible | Universal |
En-tête | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
Bibliothèque | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL |
Règles de conformité DDI | HwStorPortProhibitedDDIs(storport), IrqlKeDispatchLte(wdm) |