c8762c9bd61fcf2683894ffbb7a53c87cb00f269
[reactos.git] / subsys / win32k / include / object.h
1 #ifndef __WIN32K_OBJECT_H
2 #define __WIN32K_OBJECT_H
3
4 #include <windows.h>
5
6 typedef enum {
7   otUnknown = 0,
8   otClass,
9   otWindow
10 } USER_OBJECT_TYPE;
11
12 typedef struct _USER_OBJECT_HEADER
13 /*
14  * Header for user object
15  */
16 {
17   USER_OBJECT_TYPE Type;
18   LONG HandleCount;
19   LONG RefCount;
20   CSHORT Size;
21 } USER_OBJECT_HEADER, *PUSER_OBJECT_HEADER;
22
23 typedef struct _USER_HANDLE
24 {
25   PVOID ObjectBody;
26 } USER_HANDLE, *PUSER_HANDLE;
27
28 #define HANDLE_BLOCK_ENTRIES ((PAGE_SIZE-sizeof(LIST_ENTRY))/sizeof(USER_HANDLE))
29
30 typedef struct _USER_HANDLE_BLOCK
31 {
32   LIST_ENTRY ListEntry;
33   USER_HANDLE Handles[HANDLE_BLOCK_ENTRIES];
34 } USER_HANDLE_BLOCK, *PUSER_HANDLE_BLOCK;
35
36 typedef struct _USER_HANDLE_TABLE
37 {
38    LIST_ENTRY ListHead;
39    FAST_MUTEX ListLock;
40 } USER_HANDLE_TABLE, *PUSER_HANDLE_TABLE;
41
42
43 ULONG
44 ObmGetReferenceCount(
45   PVOID ObjectBody);
46
47 ULONG
48 ObmGetHandleCount(
49   PVOID ObjectBody);
50
51 VOID
52 ObmReferenceObject(
53   PVOID ObjectBody);
54
55 VOID
56 ObmDereferenceObject(
57   PVOID ObjectBody);
58
59 NTSTATUS
60 ObmReferenceObjectByPointer(
61   PVOID ObjectBody,
62   USER_OBJECT_TYPE ObjectType);
63
64 PVOID
65 ObmCreateObject(
66   PUSER_HANDLE_TABLE HandleTable,
67   PHANDLE Handle,
68         USER_OBJECT_TYPE ObjectType,
69   ULONG ObjectSize);
70
71 NTSTATUS
72 ObmCreateHandle(
73   PUSER_HANDLE_TABLE HandleTable,
74   PVOID ObjectBody,
75         PHANDLE HandleReturn);
76
77 NTSTATUS
78 ObmReferenceObjectByHandle(
79   PUSER_HANDLE_TABLE HandleTable,
80   HANDLE Handle,
81         USER_OBJECT_TYPE ObjectType,
82         PVOID* Object);
83
84 NTSTATUS
85 ObmCloseHandle(
86   PUSER_HANDLE_TABLE HandleTable,
87   HANDLE Handle);
88
89 VOID
90 ObmInitializeHandleTable(
91   PUSER_HANDLE_TABLE HandleTable);
92
93 VOID
94 ObmFreeHandleTable(
95   PUSER_HANDLE_TABLE HandleTable);
96
97 PUSER_HANDLE_TABLE
98 ObmCreateHandleTable(VOID);
99
100 VOID
101 ObmDestroyHandleTable(
102   PUSER_HANDLE_TABLE HandleTable);
103
104 ULONG CreateGDIHandle(ULONG InternalSize, ULONG UserSize);
105 VOID FreeGDIHandle(ULONG Handle);
106
107 PVOID AccessUserObject(ULONG Handle);
108 PVOID AccessInternalObject(ULONG Handle);
109
110 PVOID AccessInternalObjectFromUserObject(PVOID UserObject);
111 ULONG AccessHandleFromUserObject(PVOID UserObject);
112
113 VOID InitEngHandleTable( void );
114
115 #endif /* __WIN32K_OBJECT_H */
116
117 /* EOF */