2 * PROJECT: ReactOS Kernel
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: ntoskrnl/ke/gate.c
5 * PURPOSE: Implements Guarded Mutex
6 * PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org)
7 * Filip Navara (navaraf@reactos.org)
10 /* INCLUDES ******************************************************************/
16 /* Undefine some macros we implement here */
17 #undef KeInitializeGuardedMutex
18 #undef KeAcquireGuardedMutex
19 #undef KeReleaseGuardedMutex
20 #undef KeAcquireGuardedMutexUnsafe
21 #undef KeReleaseGuardedMutexUnsafe
22 #undef KeTryToAcquireGuardedMutex
24 /* PUBLIC FUNCTIONS **********************************************************/
31 KeInitializeGuardedMutex(OUT PKGUARDED_MUTEX GuardedMutex
)
34 _KeInitializeGuardedMutex(GuardedMutex
);
42 KeAcquireGuardedMutex(IN PKGUARDED_MUTEX GuardedMutex
)
45 _KeAcquireGuardedMutex(GuardedMutex
);
53 KeReleaseGuardedMutex(IN OUT PKGUARDED_MUTEX GuardedMutex
)
56 _KeReleaseGuardedMutex(GuardedMutex
);
64 KeAcquireGuardedMutexUnsafe(IN OUT PKGUARDED_MUTEX GuardedMutex
)
67 _KeAcquireGuardedMutexUnsafe(GuardedMutex
);
75 KeReleaseGuardedMutexUnsafe(IN OUT PKGUARDED_MUTEX GuardedMutex
)
78 _KeReleaseGuardedMutexUnsafe(GuardedMutex
);
86 KeTryToAcquireGuardedMutex(IN OUT PKGUARDED_MUTEX GuardedMutex
)
89 return _KeTryToAcquireGuardedMutex(GuardedMutex
);
93 * @name KeEnterGuardedRegion
95 * Enters a guarded region. This causes all (incl. special kernel) APCs
100 _KeEnterGuardedRegion(VOID
)
102 /* Use the inlined version */
103 KeEnterGuardedRegion();
107 * @name KeLeaveGuardedRegion
109 * Leaves a guarded region and delivers pending APCs if possible.
113 _KeLeaveGuardedRegion(VOID
)
115 /* Use the inlined version */
116 KeLeaveGuardedRegion();