33 Mutant->OwnerThread = CurrentThread;
40 &Mutant->MutantListEntry);
48 Mutant->OwnerThread =
NULL;
58 Mutant->Abandoned =
FALSE;
59 Mutant->ApcDisable = 0;
73 Mutex->Header.SignalState = 1;
79 Mutex->ApcDisable = 1;
90 return Mutant->Header.SignalState;
117 if (Abandon ==
FALSE)
120 if (Mutant->OwnerThread != CurrentThread)
131 Mutant->Header.SignalState++;
136 Mutant->Header.SignalState = 1;
137 Mutant->Abandoned =
TRUE;
141 if (Mutant->Header.SignalState == 1)
150 EnableApc = Mutant->ApcDisable;
154 Mutant->OwnerThread =
NULL;
#define ASSERT_IRQL_LESS_OR_EQUAL(x)
_In_ WDFDPC _In_ BOOLEAN Wait
VOID NTAPI KeInitializeMutant(IN PKMUTANT Mutant, IN BOOLEAN InitialOwner)
VOID FASTCALL KiWaitTest(PVOID Object, KPRIORITY Increment)
_IRQL_requires_same_ typedef _In_ ULONG _In_ UCHAR Level
#define InsertTailList(ListHead, Entry)
LONG NTAPI KeReleaseMutex(IN PKMUTEX Mutex, IN BOOLEAN Wait)
_Must_inspect_result_ FORCEINLINE BOOLEAN IsListEmpty(_In_ const LIST_ENTRY *ListHead)
#define STATUS_MUTANT_NOT_OWNED
FORCEINLINE BOOLEAN RemoveEntryList(_In_ PLIST_ENTRY Entry)
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
LONG NTAPI KeReleaseMutant(IN PKMUTANT Mutant, IN KPRIORITY Increment, IN BOOLEAN Abandon, IN BOOLEAN Wait)
#define ASSERT_MUTANT(Object)
VOID NTAPI KeInitializeMutex(IN PKMUTEX Mutex, IN ULONG Level)
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
LONG NTAPI KeReadStateMutant(IN PKMUTANT Mutant)
#define KeLeaveCriticalRegion()
FORCEINLINE VOID KiReleaseDispatcherLock(IN KIRQL OldIrql)
FORCEINLINE KIRQL KiAcquireDispatcherLock(VOID)
#define InitializeListHead(ListHead)
#define KeGetCurrentThread
IN OUT PLONG IN OUT PLONG Addend IN OUT PLONG IN LONG Increment
_In_ BOOLEAN InitialOwner
_In_ WDF_POWER_DEVICE_STATE PreviousState
LIST_ENTRY MutantListHead