39 assert((isValid) == 1,
"MUTEX Pointer given to function isn't paged in.");
47 assert((mut->ownerTid) == 0,
"Mutex must not be owned already in initialization.");
55 mut->ownerThread = NULL;
63 mut->SynchEvent.signaled =
false;
64 mut->SynchEvent.waitingQueue.head = mut->SynchEvent.waitingQueue.tail = NULL;
112 mut->ownerTid = currThread->
TID;
113 mut->ownerThread = currThread;
116 gop_printf(
COLOR_RED,
"[MUTEX-DEBUG] Mutex successfully acquired by: %p. MUT: %p\n", currThread, mut);
162 assert((mut->ownerTid) != 0,
"Attempted release of mutex when it has no owner.");
163 if (!mut->ownerTid) {
171 mut->ownerThread = NULL;
MTSTATUS MsWaitForEvent(IN PEVENT event)
MTSTATUS MsSetEvent(IN PEVENT event)
void gop_printf(uint32_t color, const char *fmt,...)
bool MmIsAddressPresent(IN uintptr_t VirtualAddress)
FORCEINLINE IRQL MeGetCurrentIrql(void)
#define COLOR_RED
Colors definitions for easier access.
#define MT_MUTEX_ALREADY_OWNED
#define MT_INVALID_ADDRESS
#define MT_MUTEX_NOT_OWNED
MTSTATUS MsReleaseMutexObject(IN PMUTEX mut)
MTSTATUS MsInitializeMutexObject(IN PMUTEX mut)
MTSTATUS MsAcquireMutexObject(IN PMUTEX mut)
void MsAcquireSpinlock(IN PSPINLOCK lock, IN PIRQL OldIrql)
void MsReleaseSpinlock(IN PSPINLOCK lock, IN IRQL OldIrql)
PETHREAD PsGetCurrentThread(void)