1 /* $Id: userobj.c,v 1.1 2001/07/06 00:05:05 rex Exp $
3 * COPYRIGHT: See COPYING in the top level directory
4 * PROJECT: ReactOS kernel
5 * PURPOSE: USER Object manager interface definition
6 * FILE: subsys/win32k/ntuser/userobj.c
7 * PROGRAMER: Rex Jolliff (rex@lvcablemodem.com)
11 #undef WIN32_LEAN_AND_MEAN
15 #include <ddk/ntddk.h>
16 #include <win32k/userobj.h>
18 static LIST_ENTRY UserObjectList
;
20 PUSER_OBJECT
USEROBJ_AllocObject (WORD size
, WORD magic
)
22 PUSER_OBJECT_HEADER newObject
;
24 newObject
= ExAllocatePoolWithTag(PagedPool
,
25 size
+ sizeof (USER_OBJECT_HEADER
),
31 RtlZeroMemory(newObject
, size
+ sizeof (USER_OBJECT_HEADER
));
33 newObject
->magic
= magic
;
34 ExInitializeFastMutex (&newObject
->mutex
);
35 InsertTailList (&UserObjectList
, &newObject
->listEntry
);
37 return UserObjectHeaderToBody (newObject
);
40 BOOL
USEROBJ_FreeObject (PUSER_OBJECT object
, WORD magic
)
42 PUSER_OBJECT_HEADER objectHeader
;
48 objectHeader
= UserObjectBodyToHeader (object
);
49 if (objectHeader
->magic
!= magic
)
53 RemoveEntryList (&objectHeader
->listEntry
);
54 ExFreePool (objectHeader
);
59 HUSEROBJ
USEROBJ_PtrToHandle (PUSER_OBJECT object
, WORD magic
)
61 PUSER_OBJECT_HEADER objectHeader
;
67 objectHeader
= UserObjectBodyToHeader (object
);
68 if (objectHeader
->magic
!= magic
)
73 return UserObjectHeaderToHandle(objectHeader
);
76 PUSER_OBJECT
USEROBJ_HandleToPtr (HUSEROBJ handle
, WORD magic
)
78 PUSER_OBJECT_HEADER objectHeader
;
84 objectHeader
= UserObjectHandleToHeader (handle
);
85 if ((objectHeader
->magic
!= magic
) &&
86 (magic
!= UO_MAGIC_DONTCARE
))
91 return UserObjectHeaderToBody (objectHeader
);
94 BOOL
USEROBJ_LockObject (HUSEROBJ objectHandle
)
96 PUSER_OBJECT_HEADER objectHeader
;
98 if (objectHandle
== 0)
102 objectHeader
= UserObjectHandleToHeader (objectHandle
);
104 ExAcquireFastMutexUnsafe (&objectHeader
->mutex
);
109 BOOL
USEROBJ_UnlockObject (HUSEROBJ objectHandle
)
111 PUSER_OBJECT_HEADER objectHeader
;
113 if (objectHandle
== 0)
117 objectHeader
= UserObjectHandleToHeader (objectHandle
);
119 ExReleaseFastMutexUnsafe (&objectHeader
->mutex
);