1 #ifndef _WIN32K_OBJECT_H
2 #define _WIN32K_OBJECT_H
4 #include <win32k/gdiobj.h>
5 #include <win32k/bitmaps.h>
6 #include <win32k/pen.h>
8 #define FIRST_USER_HANDLE 0x0020 /* first possible value for low word of user handle */
9 #define LAST_USER_HANDLE 0xffef /* last possible value for low word of user handle */
12 #define USER_HEADER_TO_BODY(ObjectHeader) \
13 ((PVOID)(((PUSER_OBJECT_HEADER)ObjectHeader) + 1))
15 #define USER_BODY_TO_HEADER(ObjectBody) \
16 ((PUSER_OBJECT_HEADER)(((PUSER_OBJECT_HEADER)ObjectBody) - 1))
20 typedef struct _USER_HANDLE_ENTRY
22 void *ptr
; /* pointer to object */
23 unsigned short type
; /* object type (0 if free) */
24 unsigned short generation
; /* generation counter */
25 } USER_HANDLE_ENTRY
, * PUSER_HANDLE_ENTRY
;
29 typedef struct _USER_HANDLE_TABLE
31 PUSER_HANDLE_ENTRY handles
;
32 PUSER_HANDLE_ENTRY freelist
;
34 int allocated_handles
;
35 } USER_HANDLE_TABLE
, * PUSER_HANDLE_TABLE
;
39 typedef enum _USER_OBJECT_TYPE
48 otClass
//fixme: remove
53 typedef struct _USER_OBJECT_HEADER
55 * Header for user object
58 // USER_OBJECT_TYPE Type;
63 } USER_OBJECT_HEADER
, *PUSER_OBJECT_HEADER
;
66 typedef struct _USER_REFERENCE_ENTRY
68 SINGLE_LIST_ENTRY Entry
;
70 } USER_REFERENCE_ENTRY
, *PUSER_REFERENCE_ENTRY
;
76 #define ASSERT_LAST_REF(_obj_) \
79 PSINGLE_LIST_ENTRY e; \
80 PUSER_REFERENCE_ENTRY ref; \
83 t = PsGetWin32Thread(); \
85 e = t->ReferencesList.Next; \
87 ref = CONTAINING_RECORD(e, USER_REFERENCE_ENTRY, Entry); \
90 ASSERT(_obj_ == ref->obj); \
93 #define UserRefObjectCo(_obj_, _ref_) \
98 t = PsGetWin32Thread(); \
101 (_ref_)->obj = _obj_; \
102 ObmReferenceObject(_obj_); \
104 PushEntryList(&t->ReferencesList, &(_ref_)->Entry); \
109 #define UserDerefObjectCo(_obj_) \
112 PSINGLE_LIST_ENTRY e; \
113 PUSER_REFERENCE_ENTRY ref; \
116 t = PsGetWin32Thread(); \
118 e = PopEntryList(&t->ReferencesList); \
120 ref = CONTAINING_RECORD(e, USER_REFERENCE_ENTRY, Entry); \
123 ASSERT(_obj_ == ref->obj); \
124 ObmDereferenceObject(_obj_); \
128 VOID INTERNAL_CALL
InitGdiObjectHandleTable (VOID
);
130 VOID FASTCALL
CreateStockObjects (VOID
);
131 VOID FASTCALL
CreateSysColorObjects (VOID
);
133 PPOINT FASTCALL
GDI_Bezier (const POINT
*Points
, INT count
, PINT nPtsOut
);
135 #endif /* _WIN32K_OBJECT_H */