7c32140fb56d93b00ebd63e5e06bc01a50f6b7d5
[reactos.git] / reactos / include / ndk / extypes.h
1 /*
2 * PROJECT: ReactOS Native Headers
3 * FILE: include/ndk/extypes.h
4 * PURPOSE: Definitions for exported Executive Functions not defined in DDK/IFS
5 * PROGRAMMER: Alex Ionescu (alex@relsoft.net)
6 * UPDATE HISTORY:
7 * Created 06/10/04
8 */
9
10 #ifndef _EXTYPES_H
11 #define _EXTYPES_H
12
13 /* DEPENDENCIES **************************************************************/
14 #include "ketypes.h"
15
16 /* EXPORTED DATA *************************************************************/
17 extern POBJECT_TYPE NTOSAPI ExIoCompletionType;
18 extern NTOSAPI POBJECT_TYPE ExMutantObjectType;
19 extern NTOSAPI POBJECT_TYPE ExTimerType;
20
21 /* CONSTANTS *****************************************************************/
22
23 /* FIXME: Win32k uses windows.h! */
24 #ifndef __WIN32K__
25 #define INVALID_HANDLE_VALUE (HANDLE)-1
26 #endif
27
28 /* Callback Object Access Rights */
29 #define CALLBACK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x0001)
30 #define CALLBACK_EXECUTE (STANDARD_RIGHTS_EXECUTE|SYNCHRONIZE|0x0001)
31 #define CALLBACK_WRITE (STANDARD_RIGHTS_WRITE|SYNCHRONIZE|0x0001)
32 #define CALLBACK_READ (STANDARD_RIGHTS_READ|SYNCHRONIZE|0x0001)
33
34 /* ENUMERATIONS **************************************************************/
35
36 /* TYPES *********************************************************************/
37
38 /* You'll need the IFS for this, so use an equivalent version */
39 #ifndef _NTIFS_
40 typedef PVOID EX_RUNDOWN_REF;
41 #endif
42
43 /* You'll need the IFS for these, so let's not force everyone to have it */
44 #ifdef _NTIFS_
45 typedef struct _EX_QUEUE_WORKER_INFO
46 {
47 UCHAR QueueDisabled:1;
48 UCHAR MakeThreadsAsNecessary:1;
49 UCHAR WaitMode:1;
50 ULONG WorkerCount:29;
51 } EX_QUEUE_WORKER_INFO, *PEX_QUEUE_WORKER_INFO;
52
53 typedef struct _EX_WORK_QUEUE
54 {
55 KQUEUE WorkerQueue;
56 ULONG DynamicThreadCount;
57 ULONG WorkItemsProcessed;
58 ULONG WorkItemsProcessedLastPass;
59 ULONG QueueDepthLastPass;
60 EX_QUEUE_WORKER_INFO Info;
61 } EX_WORK_QUEUE, *PEX_WORK_QUEUE;
62 #endif
63
64 typedef struct _EX_FAST_REF
65 {
66 union
67 {
68 PVOID Object;
69 ULONG RefCnt:3;
70 ULONG Value;
71 };
72 } EX_FAST_REF, *PEX_FAST_REF;
73
74 typedef struct _EX_PUSH_LOCK
75 {
76 union
77 {
78 struct
79 {
80 ULONG Waiting:1;
81 ULONG Exclusive:1;
82 ULONG Shared:30;
83 };
84 ULONG Value;
85 PVOID Ptr;
86 };
87 } EX_PUSH_LOCK, *PEX_PUSH_LOCK;
88
89 typedef struct _HANDLE_TABLE_ENTRY_INFO
90 {
91 ULONG AuditMask;
92 } HANDLE_TABLE_ENTRY_INFO, *PHANDLE_TABLE_ENTRY_INFO;
93
94 typedef struct _RUNDOWN_DESCRIPTOR
95 {
96 ULONG_PTR References;
97 KEVENT RundownEvent;
98 } RUNDOWN_DESCRIPTOR, *PRUNDOWN_DESCRIPTOR;
99
100 typedef struct _CALLBACK_OBJECT
101 {
102 ULONG Name;
103 KSPIN_LOCK Lock;
104 LIST_ENTRY RegisteredCallbacks;
105 ULONG AllowMultipleCallbacks;
106 } CALLBACK_OBJECT , *PCALLBACK_OBJECT;
107
108 typedef struct _HANDLE_TABLE_ENTRY
109 {
110 union
111 {
112 PVOID Object;
113 ULONG_PTR ObAttributes;
114 PHANDLE_TABLE_ENTRY_INFO InfoTable;
115 ULONG_PTR Value;
116 } u1;
117 union
118 {
119 ULONG GrantedAccess;
120 USHORT GrantedAccessIndex;
121 LONG NextFreeTableEntry;
122 } u2;
123 } HANDLE_TABLE_ENTRY, *PHANDLE_TABLE_ENTRY;
124
125 typedef struct _HANDLE_TABLE
126 {
127 ULONG Flags;
128 LONG HandleCount;
129 PHANDLE_TABLE_ENTRY **Table;
130 PEPROCESS QuotaProcess;
131 HANDLE UniqueProcessId;
132 LONG FirstFreeTableEntry;
133 LONG NextIndexNeedingPool;
134 ERESOURCE HandleTableLock;
135 LIST_ENTRY HandleTableList;
136 KEVENT HandleContentionEvent;
137 } HANDLE_TABLE, *PHANDLE_TABLE;
138
139 #endif
140