Window stations and desktops
[reactos.git] / reactos / 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
24 typedef struct _USER_HANDLE
25 {
26 PVOID ObjectBody;
27 } USER_HANDLE, *PUSER_HANDLE;
28
29 #define HANDLE_BLOCK_ENTRIES ((PAGESIZE-sizeof(LIST_ENTRY))/sizeof(USER_HANDLE))
30
31 typedef struct _USER_HANDLE_BLOCK
32 {
33 LIST_ENTRY ListEntry;
34 USER_HANDLE Handles[HANDLE_BLOCK_ENTRIES];
35 } USER_HANDLE_BLOCK, *PUSER_HANDLE_BLOCK;
36
37 typedef struct _USER_HANDLE_TABLE
38 {
39 LIST_ENTRY ListHead;
40 PFAST_MUTEX ListLock;
41 } USER_HANDLE_TABLE, *PUSER_HANDLE_TABLE;
42
43
44 ULONG
45 ObmGetReferenceCount(
46 PVOID ObjectBody);
47
48 ULONG
49 ObmGetHandleCount(
50 PVOID ObjectBody);
51
52 VOID
53 ObmReferenceObject(
54 PVOID ObjectBody);
55
56 VOID
57 ObmDereferenceObject(
58 PVOID ObjectBody);
59
60 NTSTATUS
61 ObmReferenceObjectByPointer(
62 PVOID ObjectBody,
63 USER_OBJECT_TYPE ObjectType);
64
65 PVOID
66 ObmCreateObject(
67 PUSER_HANDLE_TABLE HandleTable,
68 PHANDLE Handle,
69 USER_OBJECT_TYPE ObjectType,
70 ULONG ObjectSize);
71
72 NTSTATUS
73 ObmCreateHandle(
74 PUSER_HANDLE_TABLE HandleTable,
75 PVOID ObjectBody,
76 PHANDLE HandleReturn);
77
78 NTSTATUS
79 ObmReferenceObjectByHandle(
80 PUSER_HANDLE_TABLE HandleTable,
81 HANDLE Handle,
82 USER_OBJECT_TYPE ObjectType,
83 PVOID* Object);
84
85 NTSTATUS
86 ObmCloseHandle(
87 PUSER_HANDLE_TABLE HandleTable,
88 HANDLE Handle);
89
90 VOID
91 ObmInitializeHandleTable(
92 PUSER_HANDLE_TABLE HandleTable);
93
94 VOID
95 ObmFreeHandleTable(
96 PUSER_HANDLE_TABLE HandleTable);
97
98 PUSER_HANDLE_TABLE
99 ObmCreateHandleTable(VOID);
100
101 VOID
102 ObmDestroyHandleTable(
103 PUSER_HANDLE_TABLE HandleTable);
104
105 #endif /* __WIN32K_OBJECT_H */
106
107 /* EOF */