#ifndef _WIN32K_NTUSER_H
#define _WIN32K_NTUSER_H
-
-extern char* _file;
-extern DWORD _line;
-extern DWORD _locked;
-
-extern FAST_MUTEX UserLock;
-
#define DECLARE_RETURN(type) type _ret_
#define RETURN(value) { _ret_ = value; goto _cleanup_; }
#define CLEANUP /*unreachable*/ ASSERT(FALSE); _cleanup_
#define END_CLEANUP return _ret_;
-#define UserEnterCo() UserEnterExclusive()
-#define UserLeaveCo() UserLeave()
-
-#define UserEnterShared() UserEnterExclusive()
-
-#define UserEnterExclusive() \
-{ \
- /* DPRINT1("try xlock, %s, %i (%i)\n",__FILE__,__LINE__, _locked);*/ \
- if (UserLock.Owner == KeGetCurrentThread()){ \
- DPRINT1("file %s, line %i\n",_file, _line); \
- ASSERT(FALSE); \
- } \
- UUserEnterExclusive(); \
- ASSERT(InterlockedIncrement((PLONG)(&_locked)) == 1 /*> 0*/); \
- _file = __FILE__; _line = __LINE__; \
- /* DPRINT("got lock, %s, %i (%i)\n",__FILE__,__LINE__, _locked);*/ \
-}
-
-#define UserLeave() \
-{ \
- ASSERT(InterlockedDecrement((PLONG)(&_locked)) == 0/*>= 0*/); \
- /*DPRINT("unlock, %s, %i (%i)\n",__FILE__,__LINE__, _locked);*/ \
- if (UserLock.Owner != KeGetCurrentThread()) { \
- DPRINT1("file %s, line %i\n",_file, _line); \
- ASSERT(FALSE); \
- } \
- _file = __FILE__; _line = __LINE__; \
- UUserLeave(); \
-}
-
+#define UserEnterCo UserEnterExclusive
+#define UserLeaveCo UserLeave
NTSTATUS FASTCALL InitUserImpl(VOID);
-VOID FASTCALL UninitUser(VOID);
-VOID FASTCALL UUserEnterShared(VOID);
-VOID FASTCALL UUserEnterExclusive(VOID);
-VOID FASTCALL UUserLeave(VOID);
+VOID FASTCALL CleanupUserImpl(VOID);
+VOID FASTCALL UserEnterShared(VOID);
+VOID FASTCALL UserEnterExclusive(VOID);
+VOID FASTCALL UserLeave(VOID);
BOOL FASTCALL UserIsEntered();
-
+BOOL FASTCALL UserIsEnteredExclusive();
#endif /* _WIN32K_NTUSER_H */
#define NDEBUG
#include <debug.h>
-
-FAST_MUTEX UserLock;
-
-char* _file;
-DWORD _line;
-DWORD _locked=0;
+ERESOURCE UserLock;
/* FUNCTIONS **********************************************************/
NTSTATUS FASTCALL InitUserImpl(VOID)
{
- //PVOID mem;
NTSTATUS Status;
- // DPRINT("Enter InitUserImpl\n");
- // ExInitializeResourceLite(&UserLock);
-
- ExInitializeFastMutex(&UserLock);
+ ExInitializeResourceLite(&UserLock);
if (!ObmCreateHandleTable())
{
*/
BOOL FASTCALL UserIsEntered()
{
- return (UserLock.Owner == KeGetCurrentThread());
+ return ExIsResourceAcquiredExclusiveLite(&UserLock)
+ || ExIsResourceAcquiredSharedLite(&UserLock);
}
+BOOL FASTCALL UserIsEnteredExclusive()
+{
+ return ExIsResourceAcquiredExclusiveLite(&UserLock);
+}
-VOID FASTCALL CleanupUser(VOID)
+VOID FASTCALL CleanupUserImpl(VOID)
{
- // ExDeleteResourceLite(&UserLock);
+ ExDeleteResourceLite(&UserLock);
}
-VOID FASTCALL UUserEnterShared(VOID)
+VOID FASTCALL UserEnterShared(VOID)
{
- // DPRINT("Enter IntLockUserShared\n");
- // KeDumpStackFrames((PULONG)__builtin_frame_address(0));
- //DPRINT("%x\n",__builtin_return_address(0));
- // KeEnterCriticalRegion();
- // ExAcquireResourceSharedLite(&UserLock, TRUE);
- ExEnterCriticalRegionAndAcquireFastMutexUnsafe(&UserLock);
+ ExAcquireResourceSharedLite(&UserLock, TRUE);
}
-VOID FASTCALL UUserEnterExclusive(VOID)
+VOID FASTCALL UserEnterExclusive(VOID)
{
- // DPRINT("Enter UserEnterExclusive\n");
- // KeDumpStackFrames((PULONG)__builtin_frame_address(0));
- //DPRINT("%x\n",__builtin_return_address(0));
- // KeEnterCriticalRegion();
- // ExAcquireResourceExclusiveLite(&UserLock, TRUE);
- ExEnterCriticalRegionAndAcquireFastMutexUnsafe(&UserLock);
+ ExAcquireResourceExclusiveLite(&UserLock, TRUE);
}
-VOID FASTCALL UUserLeave(VOID)
+VOID FASTCALL UserLeave(VOID)
{
- // DPRINT("Enter UserLeave\n");
- // KeDumpStackFrames((PULONG)__builtin_frame_address(0));
- //DPRINT("%x\n",__builtin_return_address(0));
- // ExReleaseResourceLite(&UserLock);
- // KeLeaveCriticalRegion();
- ExReleaseFastMutexUnsafeAndLeaveCriticalRegion(&UserLock);
+ ExReleaseResourceLite(&UserLock);
}