39ec620422a9674756ea63aa911b60e72d97d000
[reactos.git] / subsys / win32k / include / object.h
1 #ifndef __WIN32K_OBJECT_H
2 #define __WIN32K_OBJECT_H
3
4 #include <windows.h>
5 #include <win32k/gdiobj.h>
6 #include <win32k/bitmaps.h>
7 #include <win32k/pen.h>
8
9 typedef enum {
10   otUnknown = 0,
11   otClass,
12   otWindow,
13   otMenu
14 } USER_OBJECT_TYPE;
15
16 typedef struct _USER_OBJECT_HEADER
17 /*
18  * Header for user object
19  */
20 {
21   USER_OBJECT_TYPE Type;
22   LONG HandleCount;
23   LONG RefCount;
24   CSHORT Size;
25 } USER_OBJECT_HEADER, *PUSER_OBJECT_HEADER;
26
27 typedef struct _USER_HANDLE
28 {
29   PVOID ObjectBody;
30 } USER_HANDLE, *PUSER_HANDLE;
31
32 #define HANDLE_BLOCK_ENTRIES ((PAGE_SIZE-sizeof(LIST_ENTRY))/sizeof(USER_HANDLE))
33
34 typedef struct _USER_HANDLE_BLOCK
35 {
36   LIST_ENTRY ListEntry;
37   USER_HANDLE Handles[HANDLE_BLOCK_ENTRIES];
38 } USER_HANDLE_BLOCK, *PUSER_HANDLE_BLOCK;
39
40 typedef struct _USER_HANDLE_TABLE
41 {
42    LIST_ENTRY ListHead;
43    FAST_MUTEX ListLock;
44 } USER_HANDLE_TABLE, *PUSER_HANDLE_TABLE;
45
46
47 ULONG FASTCALL
48 ObmGetReferenceCount(
49   PVOID ObjectBody);
50
51 ULONG FASTCALL
52 ObmGetHandleCount(
53   PVOID ObjectBody);
54
55 VOID FASTCALL
56 ObmReferenceObject(
57   PVOID ObjectBody);
58
59 VOID FASTCALL
60 ObmDereferenceObject(
61   PVOID ObjectBody);
62
63 NTSTATUS FASTCALL
64 ObmReferenceObjectByPointer(
65   PVOID ObjectBody,
66   USER_OBJECT_TYPE ObjectType);
67
68 PVOID FASTCALL
69 ObmCreateObject(
70   PUSER_HANDLE_TABLE HandleTable,
71   PHANDLE Handle,
72         USER_OBJECT_TYPE ObjectType,
73   ULONG ObjectSize);
74
75 NTSTATUS FASTCALL
76 ObmCreateHandle(
77   PUSER_HANDLE_TABLE HandleTable,
78   PVOID ObjectBody,
79         PHANDLE HandleReturn);
80
81 NTSTATUS FASTCALL
82 ObmReferenceObjectByHandle(
83   PUSER_HANDLE_TABLE HandleTable,
84   HANDLE Handle,
85         USER_OBJECT_TYPE ObjectType,
86         PVOID* Object);
87
88 NTSTATUS FASTCALL
89 ObmCloseHandle(
90   PUSER_HANDLE_TABLE HandleTable,
91   HANDLE Handle);
92
93 VOID FASTCALL
94 ObmInitializeHandleTable(
95   PUSER_HANDLE_TABLE HandleTable);
96
97 VOID FASTCALL
98 ObmFreeHandleTable(
99   PUSER_HANDLE_TABLE HandleTable);
100
101 PUSER_HANDLE_TABLE FASTCALL
102 ObmCreateHandleTable(VOID);
103
104 VOID  FASTCALL ObmDestroyHandleTable (PUSER_HANDLE_TABLE HandleTable);
105
106 ULONG FASTCALL CreateGDIHandle (ULONG InternalSize, ULONG UserSize);
107 VOID  FASTCALL FreeGDIHandle (ULONG Handle);
108
109 PVOID FASTCALL AccessUserObject (ULONG Handle);
110 PVOID FASTCALL AccessInternalObject (ULONG Handle);
111
112 PVOID FASTCALL AccessInternalObjectFromUserObject (PVOID UserObject);
113 ULONG FASTCALL AccessHandleFromUserObject (PVOID UserObject);
114
115 VOID  FASTCALL InitEngHandleTable (VOID);
116 VOID  FASTCALL InitGdiObjectHandleTable (VOID);
117
118 VOID  FASTCALL CreateStockObjects (VOID);
119
120 BOOL  FASTCALL CleanupForProcess (struct _EPROCESS *Process, INT Pid);
121
122 VOID  FASTCALL GDIOBJ_MarkObjectGlobal (HGDIOBJ ObjectHandle);
123 VOID  FASTCALL GDIOBJ_UnmarkObjectGlobal (HGDIOBJ ObjectHandle);
124 BOOL  FASTCALL GDIOBJ_LockMultipleObj (PGDIMULTILOCK pList, INT nObj);
125
126 PPOINT FASTCALL GDI_Bezier (const POINT *Points, INT count, PINT nPtsOut);
127
128 /* objects/objconv.c */
129
130 BRUSHOBJ*
131 FASTCALL
132 PenToBrushObj(BRUSHOBJ *brush, PENOBJ *pen);
133
134 BRUSHOBJ*
135 FASTCALL
136 HPenToBrushObj ( BRUSHOBJ *brush, HPEN hpen );
137
138 HBITMAP
139 FASTCALL
140 BitmapToSurf ( PBITMAPOBJ BitmapObj );
141
142 #endif /* __WIN32K_OBJECT_H */
143
144 /* EOF */