Add NDK 1.00-pre. Needs some TLC in umtypes.h and a lot of fixes. Not used anywhere...
[reactos.git] / reactos / include / ndk / umtypes.h
1 /*
2 * PROJECT: ReactOS Native Headers
3 * FILE: include/ndk/umtypes.h
4 * PURPOSE: Definitions needed for Native Headers if target is not Kernel-Mode.
5 * PROGRAMMER: Alex Ionescu (alex@relsoft.net)
6 * UPDATE HISTORY:
7 * Created 06/10/04
8 */
9
10 #ifndef _UMTYPES_H
11 #define _UMTYPES_H
12
13 /*FIXME: REORGANIZE!!!*/
14
15 #define NTAPI __stdcall
16 #define OBJ_INHERIT 2L
17 #define OBJ_PERMANENT 16L
18 #define OBJ_EXCLUSIVE 32L
19 #define OBJ_CASE_INSENSITIVE 64L
20 #define OBJ_OPENIF 128L
21 #define OBJ_OPENLINK 256L
22 #define OBJ_VALID_ATTRIBUTES 498L
23 #define InitializeObjectAttributes(p,n,a,r,s) { \
24 (p)->Length = sizeof(OBJECT_ATTRIBUTES); \
25 (p)->RootDirectory = (r); \
26 (p)->Attributes = (a); \
27 (p)->ObjectName = (n); \
28 (p)->SecurityDescriptor = (s); \
29 (p)->SecurityQualityOfService = NULL; \
30 }
31 #ifndef NT_SUCCESS
32 #define NT_SUCCESS(x) ((x)>=0)
33 #define STATUS_SUCCESS ((NTSTATUS)0)
34 #endif
35 #define NT_WARNING(x) ((ULONG)(x)>>30==2)
36 #define NT_ERROR(x) ((ULONG)(x)>>30==3)
37 #define PAGE_SIZE 0x1000
38 #define PAGE_SHIFT 12L
39 #define SharedUserData ((KUSER_SHARED_DATA * CONST) KI_USER_SHARED_DATA)
40 #include <ddk/ntstatus.h>
41 typedef struct _OBJECT_TYPE *POBJECT_TYPE;
42
43 #ifdef DBG
44
45 #define ASSERT(exp) \
46 ((!(exp)) ? \
47 (RtlAssert( #exp, __FILE__, __LINE__, NULL ), FALSE) : TRUE)
48
49 #define ASSERTMSG(msg, exp) \
50 ((!(exp)) ? \
51 (RtlAssert( #exp, __FILE__, __LINE__, msg ), FALSE) : TRUE)
52
53 #define RTL_SOFT_ASSERT(exp) \
54 ((!(_exp)) ? \
55 (DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n", __FILE__, __LINE__, #exp), FALSE) : TRUE)
56
57 #define RTL_SOFT_ASSERTMSG(msg, exp) \
58 ((!(exp)) ? \
59 (DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n Message: %s\n", __FILE__, __LINE__, #exp, (msg)), FALSE) : TRUE)
60
61 #define RTL_VERIFY(exp) ASSERT(exp)
62 #define RTL_VERIFYMSG(msg, exp) ASSERT(msg, exp)
63
64 #define RTL_SOFT_VERIFY(exp) RTL_SOFT_ASSERT(exp)
65 #define RTL_SOFT_VERIFYMSG(msg, exp) RTL_SOFT_ASSERTMSG(msg, exp)
66
67 #else /* !DBG */
68
69 #define ASSERT(exp) ((VOID) 0)
70 #define ASSERTMSG(msg, exp) ((VOID) 0)
71
72 #define RTL_SOFT_ASSERT(exp) ((VOID) 0)
73 #define RTL_SOFT_ASSERTMSG(msg, exp) ((VOID) 0)
74
75 #define RTL_VERIFY(exp) ((exp) ? TRUE : FALSE)
76 #define RTL_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE)
77
78 #define RTL_SOFT_VERIFY(exp) ((exp) ? TRUE : FALSE)
79 #define RTL_SOFT_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE)
80
81 #endif /* DBG */
82
83 #define FILE_ANY_ACCESS 0
84 #define FILE_SPECIAL_ACCESS FILE_ANY_ACCESS
85 #define FILE_READ_ACCESS 1
86 #define FILE_WRITE_ACCESS 2
87
88 #define METHOD_BUFFERED 0
89 #define METHOD_IN_DIRECT 1
90 #define METHOD_OUT_DIRECT 2
91 #define METHOD_NEITHER 3
92
93 #define DEVICE_TYPE ULONG
94
95 #define FILE_DEVICE_BEEP 0x00000001
96 #define FILE_DEVICE_CD_ROM 0x00000002
97 #define FILE_DEVICE_CD_ROM_FILE_SYSTEM 0x00000003
98 #define FILE_DEVICE_CONTROLLER 0x00000004
99 #define FILE_DEVICE_DATALINK 0x00000005
100 #define FILE_DEVICE_DFS 0x00000006
101 #define FILE_DEVICE_DISK 0x00000007
102 #define FILE_DEVICE_DISK_FILE_SYSTEM 0x00000008
103 #define FILE_DEVICE_FILE_SYSTEM 0x00000009
104 #define FILE_DEVICE_INPORT_PORT 0x0000000a
105 #define FILE_DEVICE_KEYBOARD 0x0000000b
106 #define FILE_DEVICE_MAILSLOT 0x0000000c
107 #define FILE_DEVICE_MIDI_IN 0x0000000d
108 #define FILE_DEVICE_MIDI_OUT 0x0000000e
109 #define FILE_DEVICE_MOUSE 0x0000000f
110 #define FILE_DEVICE_MULTI_UNC_PROVIDER 0x00000010
111 #define FILE_DEVICE_NAMED_PIPE 0x00000011
112 #define FILE_DEVICE_NETWORK 0x00000012
113 #define FILE_DEVICE_NETWORK_BROWSER 0x00000013
114 #define FILE_DEVICE_NETWORK_FILE_SYSTEM 0x00000014
115 #define FILE_DEVICE_NULL 0x00000015
116 #define FILE_DEVICE_PARALLEL_PORT 0x00000016
117 #define FILE_DEVICE_PHYSICAL_NETCARD 0x00000017
118 #define FILE_DEVICE_PRINTER 0x00000018
119 #define FILE_DEVICE_SCANNER 0x00000019
120 #define FILE_DEVICE_SERIAL_MOUSE_PORT 0x0000001a
121 #define FILE_DEVICE_SERIAL_PORT 0x0000001b
122 #define FILE_DEVICE_SCREEN 0x0000001c
123 #define FILE_DEVICE_SOUND 0x0000001d
124 #define FILE_DEVICE_STREAMS 0x0000001e
125 #define FILE_DEVICE_TAPE 0x0000001f
126 #define FILE_DEVICE_TAPE_FILE_SYSTEM 0x00000020
127 #define FILE_DEVICE_TRANSPORT 0x00000021
128 #define FILE_DEVICE_UNKNOWN 0x00000022
129 #define FILE_DEVICE_VIDEO 0x00000023
130 #define FILE_DEVICE_VIRTUAL_DISK 0x00000024
131 #define FILE_DEVICE_WAVE_IN 0x00000025
132 #define FILE_DEVICE_WAVE_OUT 0x00000026
133 #define FILE_DEVICE_8042_PORT 0x00000027
134 #define FILE_DEVICE_NETWORK_REDIRECTOR 0x00000028
135 #define FILE_DEVICE_BATTERY 0x00000029
136 #define FILE_DEVICE_BUS_EXTENDER 0x0000002a
137 #define FILE_DEVICE_MODEM 0x0000002b
138 #define FILE_DEVICE_VDM 0x0000002c
139 #define FILE_DEVICE_MASS_STORAGE 0x0000002d
140 #define FILE_DEVICE_SMB 0x0000002e
141 #define FILE_DEVICE_KS 0x0000002f
142 #define FILE_DEVICE_CHANGER 0x00000030
143 #define FILE_DEVICE_SMARTCARD 0x00000031
144 #define FILE_DEVICE_ACPI 0x00000032
145 #define FILE_DEVICE_DVD 0x00000033
146 #define FILE_DEVICE_FULLSCREEN_VIDEO 0x00000034
147 #define FILE_DEVICE_DFS_FILE_SYSTEM 0x00000035
148 #define FILE_DEVICE_DFS_VOLUME 0x00000036
149 #define FILE_DEVICE_SERENUM 0x00000037
150 #define FILE_DEVICE_TERMSRV 0x00000038
151 #define FILE_DEVICE_KSEC 0x00000039
152 #define FILE_DEVICE_FIPS 0x0000003a
153 #define CTL_CODE(DeviceType, Function, Method, Access)( \
154 ((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method))
155 #define FSCTL_REQUEST_OPLOCK_LEVEL_1 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
156 #define FSCTL_REQUEST_OPLOCK_LEVEL_2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
157 #define FSCTL_REQUEST_BATCH_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
158 #define FSCTL_OPLOCK_BREAK_ACKNOWLEDGE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 3, METHOD_BUFFERED, FILE_ANY_ACCESS)
159 #define FSCTL_OPBATCH_ACK_CLOSE_PENDING CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
160 #define FSCTL_OPLOCK_BREAK_NOTIFY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 5, METHOD_BUFFERED, FILE_ANY_ACCESS)
161 #define FSCTL_LOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
162 #define FSCTL_UNLOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
163 #define FSCTL_DISMOUNT_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
164
165 #define FSCTL_IS_VOLUME_MOUNTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 10, METHOD_BUFFERED, FILE_ANY_ACCESS)
166 #define FSCTL_IS_PATHNAME_VALID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 11, METHOD_BUFFERED, FILE_ANY_ACCESS)
167 #define FSCTL_MARK_VOLUME_DIRTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 12, METHOD_BUFFERED, FILE_ANY_ACCESS)
168
169 #define FSCTL_QUERY_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 14, METHOD_NEITHER, FILE_ANY_ACCESS)
170 #define FSCTL_GET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 15, METHOD_BUFFERED, FILE_ANY_ACCESS)
171 #define FSCTL_SET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 16, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
172
173
174 #define FSCTL_MARK_AS_SYSTEM_HIVE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 19, METHOD_NEITHER, FILE_ANY_ACCESS)
175 #define FSCTL_OPLOCK_BREAK_ACK_NO_2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 20, METHOD_BUFFERED, FILE_ANY_ACCESS)
176 #define FSCTL_INVALIDATE_VOLUMES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 21, METHOD_BUFFERED, FILE_ANY_ACCESS)
177 #define FSCTL_QUERY_FAT_BPB CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 22, METHOD_BUFFERED, FILE_ANY_ACCESS)
178 #define FSCTL_REQUEST_FILTER_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 23, METHOD_BUFFERED, FILE_ANY_ACCESS)
179 #define FSCTL_FILESYSTEM_GET_STATISTICS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 24, METHOD_BUFFERED, FILE_ANY_ACCESS)
180 #define FSCTL_GET_NTFS_VOLUME_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 25, METHOD_BUFFERED, FILE_ANY_ACCESS)
181 #define FSCTL_GET_NTFS_FILE_RECORD CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 26, METHOD_BUFFERED, FILE_ANY_ACCESS)
182 #define FSCTL_GET_VOLUME_BITMAP CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 27, METHOD_NEITHER, FILE_ANY_ACCESS)
183 #define FSCTL_GET_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 28, METHOD_NEITHER, FILE_ANY_ACCESS)
184 #define FSCTL_MOVE_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 29, METHOD_BUFFERED, FILE_ANY_ACCESS)
185 #define FSCTL_IS_VOLUME_DIRTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 30, METHOD_BUFFERED, FILE_ANY_ACCESS)
186 #define FSCTL_GET_HFS_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 31, METHOD_BUFFERED, FILE_ANY_ACCESS)
187 #define FSCTL_ALLOW_EXTENDED_DASD_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 32, METHOD_NEITHER, FILE_ANY_ACCESS)
188 #define FSCTL_READ_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 33, METHOD_NEITHER, FILE_ANY_ACCESS)
189 #define FSCTL_WRITE_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 34, METHOD_NEITHER, FILE_ANY_ACCESS)
190 #define FSCTL_FIND_FILES_BY_SID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 35, METHOD_NEITHER, FILE_ANY_ACCESS)
191 #define FSCTL_DUMP_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 37, METHOD_NEITHER, FILE_ANY_ACCESS)
192 #define FSCTL_SET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 38, METHOD_BUFFERED, FILE_WRITE_DATA)
193 #define FSCTL_GET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 39, METHOD_BUFFERED, FILE_ANY_ACCESS)
194 #define FSCTL_DELETE_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 40, METHOD_BUFFERED, FILE_WRITE_DATA)
195 #define FSCTL_SET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 41, METHOD_BUFFERED, FILE_WRITE_DATA)
196 #define FSCTL_GET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 42, METHOD_BUFFERED, FILE_ANY_ACCESS)
197 #define FSCTL_DELETE_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 43, METHOD_BUFFERED, FILE_WRITE_DATA)
198 #define FSCTL_ENUM_USN_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 44, METHOD_NEITHER, FILE_READ_DATA)
199 #define FSCTL_SECURITY_ID_CHECK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 45, METHOD_NEITHER, FILE_READ_DATA)
200 #define FSCTL_READ_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 46, METHOD_NEITHER, FILE_READ_DATA)
201 #define FSCTL_SET_OBJECT_ID_EXTENDED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 47, METHOD_BUFFERED, FILE_WRITE_DATA)
202 #define FSCTL_CREATE_OR_GET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 48, METHOD_BUFFERED, FILE_ANY_ACCESS)
203 #define FSCTL_SET_SPARSE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 49, METHOD_BUFFERED, FILE_WRITE_DATA)
204 #define FSCTL_SET_ZERO_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 50, METHOD_BUFFERED, FILE_WRITE_DATA)
205 #define FSCTL_QUERY_ALLOCATED_RANGES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 51, METHOD_NEITHER, FILE_READ_DATA)
206 #define FSCTL_ENABLE_UPGRADE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 52, METHOD_BUFFERED, FILE_WRITE_DATA)
207 #define FSCTL_SET_ENCRYPTION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 53, METHOD_BUFFERED, FILE_ANY_ACCESS)
208 #define FSCTL_ENCRYPTION_FSCTL_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 54, METHOD_NEITHER, FILE_ANY_ACCESS)
209 #define FSCTL_WRITE_RAW_ENCRYPTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 55, METHOD_NEITHER, FILE_ANY_ACCESS)
210 #define FSCTL_READ_RAW_ENCRYPTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 56, METHOD_NEITHER, FILE_ANY_ACCESS)
211 #define FSCTL_CREATE_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 57, METHOD_NEITHER, FILE_READ_DATA)
212 #define FSCTL_READ_FILE_USN_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 58, METHOD_NEITHER, FILE_READ_DATA)
213 #define FSCTL_WRITE_USN_CLOSE_RECORD CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 59, METHOD_NEITHER, FILE_READ_DATA)
214 #define FSCTL_EXTEND_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 60, METHOD_BUFFERED, FILE_ANY_ACCESS)
215 #define FSCTL_QUERY_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 61, METHOD_BUFFERED, FILE_ANY_ACCESS)
216 #define FSCTL_DELETE_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 62, METHOD_BUFFERED, FILE_ANY_ACCESS)
217 #define FSCTL_MARK_HANDLE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 63, METHOD_BUFFERED, FILE_ANY_ACCESS)
218 #define FSCTL_SIS_COPYFILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 64, METHOD_BUFFERED, FILE_ANY_ACCESS)
219 #define FSCTL_SIS_LINK_FILES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 65, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
220 #define FSCTL_HSM_MSG CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 66, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
221 #define FSCTL_NSS_CONTROL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 67, METHOD_BUFFERED, FILE_WRITE_DATA)
222 #define FSCTL_HSM_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 68, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
223 #define FSCTL_RECALL_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 69, METHOD_NEITHER, FILE_ANY_ACCESS)
224 #define FSCTL_NSS_RCONTROL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 70, METHOD_BUFFERED, FILE_READ_DATA)
225 #define FSCTL_READ_FROM_PLEX CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 71, METHOD_OUT_DIRECT, FILE_READ_DATA)
226 #define FSCTL_FILE_PREFETCH CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 72, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
227
228
229 #define FSCTL_MAILSLOT_PEEK CTL_CODE(FILE_DEVICE_MAILSLOT, 0, METHOD_NEITHER, FILE_READ_DATA)
230
231 #define FSCTL_NETWORK_SET_CONFIGURATION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 102, METHOD_IN_DIRECT, FILE_ANY_ACCESS)
232 #define FSCTL_NETWORK_GET_CONFIGURATION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 103, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
233 #define FSCTL_NETWORK_GET_CONNECTION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 104, METHOD_NEITHER, FILE_ANY_ACCESS)
234 #define FSCTL_NETWORK_ENUMERATE_CONNECTIONS CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 105, METHOD_NEITHER, FILE_ANY_ACCESS)
235 #define FSCTL_NETWORK_DELETE_CONNECTION CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 107, METHOD_BUFFERED, FILE_ANY_ACCESS)
236 #define FSCTL_NETWORK_GET_STATISTICS CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 116, METHOD_BUFFERED, FILE_ANY_ACCESS)
237 #define FSCTL_NETWORK_SET_DOMAIN_NAME CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 120, METHOD_BUFFERED, FILE_ANY_ACCESS)
238 #define FSCTL_NETWORK_REMOTE_BOOT_INIT_SCRT CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 250, METHOD_BUFFERED, FILE_ANY_ACCESS)
239
240 #define FSCTL_PIPE_ASSIGN_EVENT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
241 #define FSCTL_PIPE_DISCONNECT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
242 #define FSCTL_PIPE_LISTEN CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
243 #define FSCTL_PIPE_PEEK CTL_CODE(FILE_DEVICE_NAMED_PIPE, 3, METHOD_BUFFERED, FILE_READ_DATA)
244 #define FSCTL_PIPE_QUERY_EVENT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
245 #define FSCTL_PIPE_TRANSCEIVE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 5, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
246 #define FSCTL_PIPE_WAIT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
247 #define FSCTL_PIPE_IMPERSONATE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
248 #define FSCTL_PIPE_SET_CLIENT_PROCESS CTL_CODE(FILE_DEVICE_NAMED_PIPE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
249 #define FSCTL_PIPE_QUERY_CLIENT_PROCESS CTL_CODE(FILE_DEVICE_NAMED_PIPE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
250 #define FSCTL_PIPE_INTERNAL_READ CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2045, METHOD_BUFFERED, FILE_READ_DATA)
251 #define FSCTL_PIPE_INTERNAL_WRITE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2046, METHOD_BUFFERED, FILE_WRITE_DATA)
252 #define FSCTL_PIPE_INTERNAL_TRANSCEIVE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2047, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
253 #define FSCTL_PIPE_INTERNAL_READ_OVFLOW CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2048, METHOD_BUFFERED, FILE_READ_DATA)
254
255 #define IOCTL_REDIR_QUERY_PATH CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 99, METHOD_NEITHER, FILE_ANY_ACCESS)
256
257 #define IOCTL_DISK_BASE FILE_DEVICE_DISK
258 #define IOCTL_DISK_GET_DRIVE_GEOMETRY \
259 CTL_CODE(IOCTL_DISK_BASE, 0x0000, METHOD_BUFFERED, FILE_ANY_ACCESS)
260
261 #define IOCTL_DISK_GET_PARTITION_INFO \
262 CTL_CODE(IOCTL_DISK_BASE, 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS)
263
264 #define NtCurrentProcess() ( (HANDLE)(LONG_PTR) -1 )
265 #define ZwCurrentProcess() NtCurrentProcess()
266 #define NtCurrentThread() ( (HANDLE)(LONG_PTR) -2 )
267 #define ZwCurrentThread() NtCurrentThread()
268
269 typedef struct _KTHREAD *PKTHREAD, *PRKTHREAD;
270
271 typedef CONST int CINT;
272 typedef LONG KPRIORITY;
273 typedef LONG NTSTATUS, *PNTSTATUS;
274 typedef UCHAR KIRQL, *PKIRQL;
275 typedef ULONG_PTR KSPIN_LOCK, *PKSPIN_LOCK;
276 typedef ULONG WAIT_TYPE;
277 typedef struct _PEB *PPEB;
278 typedef CONST char *PCSZ;
279 typedef ULONG KPROCESSOR_MODE;
280 typedef PVOID PTHREAD_START_ROUTINE;
281 typedef short CSHORT;
282 typedef CSHORT *PCSHORT;
283 #define STATIC static
284
285 typedef enum _MODE
286 {
287 KernelMode,
288 UserMode,
289 MaximumMode
290 } MODE;
291
292 typedef struct _UNICODE_STRING {
293 USHORT Length;
294 USHORT MaximumLength;
295 PWSTR Buffer;
296 } UNICODE_STRING, *PUNICODE_STRING;
297
298 typedef const UNICODE_STRING* PCUNICODE_STRING;
299
300 typedef struct _STRING {
301 USHORT Length;
302 USHORT MaximumLength;
303 PCHAR Buffer;
304 } STRING, *PSTRING;
305
306 typedef STRING ANSI_STRING;
307 typedef PSTRING PANSI_STRING;
308 typedef STRING OEM_STRING;
309 typedef PSTRING POEM_STRING;
310 typedef LARGE_INTEGER PHYSICAL_ADDRESS, *PPHYSICAL_ADDRESS;
311
312 typedef enum _SECTION_INHERIT {
313 ViewShare = 1,
314 ViewUnmap = 2
315 } SECTION_INHERIT;
316
317 typedef struct _OBJECT_ATTRIBUTES {
318 ULONG Length;
319 HANDLE RootDirectory;
320 PUNICODE_STRING ObjectName;
321 ULONG Attributes;
322 PVOID SecurityDescriptor;
323 PVOID SecurityQualityOfService;
324 } OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;
325
326 typedef ULONG KAFFINITY, *PKAFFINITY;
327
328 typedef struct _CLIENT_ID {
329 HANDLE UniqueProcess;
330 HANDLE UniqueThread;
331 } CLIENT_ID, *PCLIENT_ID;
332
333 typedef enum _POOL_TYPE {
334 NonPagedPool,
335 PagedPool,
336 NonPagedPoolMustSucceed,
337 DontUseThisType,
338 NonPagedPoolCacheAligned,
339 PagedPoolCacheAligned,
340 NonPagedPoolCacheAlignedMustS,
341 MaxPoolType,
342 NonPagedPoolSession = 32,
343 PagedPoolSession,
344 NonPagedPoolMustSucceedSession,
345 DontUseThisTypeSession,
346 NonPagedPoolCacheAlignedSession,
347 PagedPoolCacheAlignedSession,
348 NonPagedPoolCacheAlignedMustSSession
349 } POOL_TYPE;
350
351 typedef enum _EVENT_TYPE {
352 NotificationEvent,
353 SynchronizationEvent
354 } EVENT_TYPE;
355
356 typedef enum _TIMER_TYPE {
357 NotificationTimer,
358 SynchronizationTimer
359 } TIMER_TYPE;
360
361 typedef enum _KEY_INFORMATION_CLASS {
362 KeyBasicInformation,
363 KeyNodeInformation,
364 KeyFullInformation,
365 KeyNameInformation,
366 KeyCachedInformation,
367 KeyFlagsInformation
368 } KEY_INFORMATION_CLASS;
369
370 typedef enum _KEY_VALUE_INFORMATION_CLASS {
371 KeyValueBasicInformation,
372 KeyValueFullInformation,
373 KeyValuePartialInformation,
374 KeyValueFullInformationAlign64,
375 KeyValuePartialInformationAlign64
376 } KEY_VALUE_INFORMATION_CLASS;
377
378 typedef enum _KEY_SET_INFORMATION_CLASS {
379 KeyWriteTimeInformation,
380 KeyUserFlagsInformation,
381 MaxKeySetInfoClass
382 } KEY_SET_INFORMATION_CLASS;
383
384 typedef struct _KEY_WRITE_TIME_INFORMATION {
385 LARGE_INTEGER LastWriteTime;
386 } KEY_WRITE_TIME_INFORMATION, *PKEY_WRITE_TIME_INFORMATION;
387
388 typedef struct _KEY_USER_FLAGS_INFORMATION {
389 ULONG UserFlags;
390 } KEY_USER_FLAGS_INFORMATION, *PKEY_USER_FLAGS_INFORMATION;
391
392 typedef struct _IO_STATUS_BLOCK {
393 _ANONYMOUS_UNION union {
394 NTSTATUS Status;
395 PVOID Pointer;
396 } DUMMYUNIONNAME;
397 ULONG_PTR Information;
398 } IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
399
400 typedef VOID NTAPI
401 (*PIO_APC_ROUTINE)(
402 IN PVOID ApcContext,
403 IN PIO_STATUS_BLOCK IoStatusBlock,
404 IN ULONG Reserved);
405
406 typedef struct _FILE_BASIC_INFORMATION {
407 LARGE_INTEGER CreationTime;
408 LARGE_INTEGER LastAccessTime;
409 LARGE_INTEGER LastWriteTime;
410 LARGE_INTEGER ChangeTime;
411 ULONG FileAttributes;
412 } FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION;
413
414 typedef struct _FILE_NETWORK_OPEN_INFORMATION {
415 LARGE_INTEGER CreationTime;
416 LARGE_INTEGER LastAccessTime;
417 LARGE_INTEGER LastWriteTime;
418 LARGE_INTEGER ChangeTime;
419 LARGE_INTEGER AllocationSize;
420 LARGE_INTEGER EndOfFile;
421 ULONG FileAttributes;
422 } FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION;
423
424 typedef enum _PROCESSINFOCLASS {
425 ProcessBasicInformation,
426 ProcessQuotaLimits,
427 ProcessIoCounters,
428 ProcessVmCounters,
429 ProcessTimes,
430 ProcessBasePriority,
431 ProcessRaisePriority,
432 ProcessDebugPort,
433 ProcessExceptionPort,
434 ProcessAccessToken,
435 ProcessLdtInformation,
436 ProcessLdtSize,
437 ProcessDefaultHardErrorMode,
438 ProcessIoPortHandlers,
439 ProcessPooledUsageAndLimits,
440 ProcessWorkingSetWatch,
441 ProcessUserModeIOPL,
442 ProcessEnableAlignmentFaultFixup,
443 ProcessPriorityClass,
444 ProcessWx86Information,
445 ProcessHandleCount,
446 ProcessAffinityMask,
447 ProcessPriorityBoost,
448 ProcessDeviceMap,
449 ProcessSessionInformation,
450 ProcessForegroundInformation,
451 ProcessWow64Information,
452 ProcessImageFileName,
453 ProcessLUIDDeviceMapsEnabled,
454 ProcessBreakOnTermination,
455 ProcessDebugObjectHandle,
456 ProcessDebugFlags,
457 ProcessHandleTracing,
458 MaxProcessInfoClass
459 } PROCESSINFOCLASS;
460
461 typedef enum _THREADINFOCLASS {
462 ThreadBasicInformation,
463 ThreadTimes,
464 ThreadPriority,
465 ThreadBasePriority,
466 ThreadAffinityMask,
467 ThreadImpersonationToken,
468 ThreadDescriptorTableEntry,
469 ThreadEnableAlignmentFaultFixup,
470 ThreadEventPair_Reusable,
471 ThreadQuerySetWin32StartAddress,
472 ThreadZeroTlsCell,
473 ThreadPerformanceCount,
474 ThreadAmILastThread,
475 ThreadIdealProcessor,
476 ThreadPriorityBoost,
477 ThreadSetTlsArrayAddress,
478 ThreadIsIoPending,
479 ThreadHideFromDebugger,
480 ThreadBreakOnTermination,
481 MaxThreadInfoClass
482 } THREADINFOCLASS;
483
484 typedef VOID NTAPI
485 (*PKNORMAL_ROUTINE)(
486 IN PVOID NormalContext,
487 IN PVOID SystemArgument1,
488 IN PVOID SystemArgument2);
489
490 typedef VOID NTAPI
491 (*PTIMER_APC_ROUTINE)(
492 IN PVOID TimerContext,
493 IN ULONG TimerLowValue,
494 IN LONG TimerHighValue);
495
496 typedef enum _KPROFILE_SOURCE {
497 ProfileTime,
498 ProfileAlignmentFixup,
499 ProfileTotalIssues,
500 ProfilePipelineDry,
501 ProfileLoadInstructions,
502 ProfilePipelineFrozen,
503 ProfileBranchInstructions,
504 ProfileTotalNonissues,
505 ProfileDcacheMisses,
506 ProfileIcacheMisses,
507 ProfileCacheMisses,
508 ProfileBranchMispredictions,
509 ProfileStoreInstructions,
510 ProfileFpInstructions,
511 ProfileIntegerInstructions,
512 Profile2Issue,
513 Profile3Issue,
514 Profile4Issue,
515 ProfileSpecialInstructions,
516 ProfileTotalCycles,
517 ProfileIcacheIssues,
518 ProfileDcacheAccesses,
519 ProfileMemoryBarrierCycles,
520 ProfileLoadLinkedIssues,
521 ProfileMaximum
522 } KPROFILE_SOURCE;
523
524 typedef struct _KEY_VALUE_ENTRY {
525 PUNICODE_STRING ValueName;
526 ULONG DataLength;
527 ULONG DataOffset;
528 ULONG Type;
529 } KEY_VALUE_ENTRY, *PKEY_VALUE_ENTRY;
530
531 typedef enum _FILE_INFORMATION_CLASS {
532 FileDirectoryInformation = 1,
533 FileFullDirectoryInformation,
534 FileBothDirectoryInformation,
535 FileBasicInformation,
536 FileStandardInformation,
537 FileInternalInformation,
538 FileEaInformation,
539 FileAccessInformation,
540 FileNameInformation,
541 FileRenameInformation,
542 FileLinkInformation,
543 FileNamesInformation,
544 FileDispositionInformation,
545 FilePositionInformation,
546 FileFullEaInformation,
547 FileModeInformation,
548 FileAlignmentInformation,
549 FileAllInformation,
550 FileAllocationInformation,
551 FileEndOfFileInformation,
552 FileAlternateNameInformation,
553 FileStreamInformation,
554 FilePipeInformation,
555 FilePipeLocalInformation,
556 FilePipeRemoteInformation,
557 FileMailslotQueryInformation,
558 FileMailslotSetInformation,
559 FileCompressionInformation,
560 FileObjectIdInformation,
561 FileCompletionInformation,
562 FileMoveClusterInformation,
563 FileQuotaInformation,
564 FileReparsePointInformation,
565 FileNetworkOpenInformation,
566 FileAttributeTagInformation,
567 FileTrackingInformation,
568 FileIdBothDirectoryInformation,
569 FileIdFullDirectoryInformation,
570 FileValidDataLengthInformation,
571 FileShortNameInformation,
572 FileMaximumInformation
573 } FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;
574
575 typedef enum _FSINFOCLASS {
576 FileFsVolumeInformation = 1,
577 FileFsLabelInformation,
578 FileFsSizeInformation,
579 FileFsDeviceInformation,
580 FileFsAttributeInformation,
581 FileFsControlInformation,
582 FileFsFullSizeInformation,
583 FileFsObjectIdInformation,
584 FileFsDriverPathInformation,
585 FileFsMaximumInformation
586 } FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS;
587
588 typedef struct _KEY_VALUE_PARTIAL_INFORMATION {
589 ULONG TitleIndex;
590 ULONG Type;
591 ULONG DataLength;
592 UCHAR Data[1];
593 } KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION;
594
595 typedef struct _FILE_ZERO_DATA_INFORMATION {
596 LARGE_INTEGER FileOffset;
597 LARGE_INTEGER BeyondFinalZero;
598 } FILE_ZERO_DATA_INFORMATION, *PFILE_ZERO_DATA_INFORMATION;
599
600 typedef struct FILE_ALLOCATED_RANGE_BUFFER {
601 LARGE_INTEGER FileOffset;
602 LARGE_INTEGER Length;
603 } FILE_ALLOCATED_RANGE_BUFFER, *PFILE_ALLOCATED_RANGE_BUFFER;
604
605 typedef struct _DISPATCHER_HEADER {
606 UCHAR Type;
607 UCHAR Absolute;
608 UCHAR Size;
609 UCHAR Inserted;
610 LONG SignalState;
611 LIST_ENTRY WaitListHead;
612 } DISPATCHER_HEADER, *PDISPATCHER_HEADER;
613
614 typedef struct _KEVENT {
615 DISPATCHER_HEADER Header;
616 } KEVENT, *PKEVENT;
617
618 typedef struct _KSEMAPHORE {
619 DISPATCHER_HEADER Header;
620 LONG Limit;
621 } KSEMAPHORE, *PKSEMAPHORE;
622
623 typedef struct _FAST_MUTEX {
624 LONG Count;
625 struct _KTHREAD *Owner;
626 ULONG Contention;
627 KEVENT Event;
628 ULONG OldIrql;
629 } FAST_MUTEX, *PFAST_MUTEX;
630
631 typedef struct _KTIMER {
632 DISPATCHER_HEADER Header;
633 ULARGE_INTEGER DueTime;
634 LIST_ENTRY TimerListEntry;
635 struct _KDPC *Dpc;
636 LONG Period;
637 } KTIMER, *PKTIMER;
638
639 typedef struct _KMUTANT {
640 DISPATCHER_HEADER Header;
641 LIST_ENTRY MutantListEntry;
642 struct _KTHREAD *OwnerThread;
643 BOOLEAN Abandoned;
644 UCHAR ApcDisable;
645 } KMUTANT, *PKMUTANT, KMUTEX, *PKMUTEX;
646
647 typedef struct _PROCESS_BASIC_INFORMATION
648 {
649 NTSTATUS ExitStatus;
650 PPEB PebBaseAddress;
651 KAFFINITY AffinityMask;
652 KPRIORITY BasePriority;
653 ULONG UniqueProcessId;
654 ULONG InheritedFromUniqueProcessId;
655 } PROCESS_BASIC_INFORMATION, *PPROCESS_BASIC_INFORMATION;
656
657 typedef enum _KWAIT_REASON {
658 Executive,
659 FreePage,
660 PageIn,
661 PoolAllocation,
662 DelayExecution,
663 Suspended,
664 UserRequest,
665 WrExecutive,
666 WrFreePage,
667 WrPageIn,
668 WrPoolAllocation,
669 WrDelayExecution,
670 WrSuspended,
671 WrUserRequest,
672 WrEventPair,
673 WrQueue,
674 WrLpcReceive,
675 WrLpcReply,
676 WrVirtualMemory,
677 WrPageOut,
678 WrRendezvous,
679 Spare2,
680 Spare3,
681 Spare4,
682 Spare5,
683 Spare6,
684 WrKernel,
685 MaximumWaitReason
686 } KWAIT_REASON;
687
688 #define PROCESSOR_FEATURE_MAX 64
689 #define KI_USER_SHARED_DATA 0xffdf0000
690
691 typedef struct _KSYSTEM_TIME {
692 ULONG LowPart;
693 LONG High1Time;
694 LONG High2Time;
695 } KSYSTEM_TIME, *PKSYSTEM_TIME;
696
697 typedef enum _NT_PRODUCT_TYPE {
698 NtProductWinNt = 1,
699 NtProductLanManNt,
700 NtProductServer
701 } NT_PRODUCT_TYPE, *PNT_PRODUCT_TYPE;
702
703 typedef enum _ALTERNATIVE_ARCHITECTURE_TYPE {
704 StandardDesign,
705 NEC98x86,
706 EndAlternatives
707 } ALTERNATIVE_ARCHITECTURE_TYPE;
708
709 typedef struct _KUSER_SHARED_DATA {
710 ULONG TickCountLowDeprecated;
711 ULONG TickCountMultiplier;
712 volatile KSYSTEM_TIME InterruptTime;
713 volatile KSYSTEM_TIME SystemTime;
714 volatile KSYSTEM_TIME TimeZoneBias;
715 USHORT ImageNumberLow;
716 USHORT ImageNumberHigh;
717 WCHAR NtSystemRoot[ 260 ];
718 ULONG MaxStackTraceDepth;
719 ULONG CryptoExponent;
720 ULONG TimeZoneId;
721 ULONG LargePageMinimum;
722 ULONG Reserved2[ 7 ];
723 NT_PRODUCT_TYPE NtProductType;
724 BOOLEAN ProductTypeIsValid;
725 ULONG NtMajorVersion;
726 ULONG NtMinorVersion;
727 BOOLEAN ProcessorFeatures[PROCESSOR_FEATURE_MAX];
728 ULONG Reserved1;
729 ULONG Reserved3;
730 volatile ULONG TimeSlip;
731 ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture;
732 LARGE_INTEGER SystemExpirationDate;
733 ULONG SuiteMask;
734 BOOLEAN KdDebuggerEnabled;
735 volatile ULONG ActiveConsoleId;
736 volatile ULONG DismountCount;
737 ULONG ComPlusPackage;
738 ULONG LastSystemRITEventTickCount;
739 ULONG NumberOfPhysicalPages;
740 BOOLEAN SafeBootMode;
741 ULONG TraceLogging;
742 ULONGLONG Fill0;
743 ULONGLONG SystemCall[4];
744 union {
745 volatile KSYSTEM_TIME TickCount;
746 volatile ULONG64 TickCountQuad;
747 };
748 } KUSER_SHARED_DATA, *PKUSER_SHARED_DATA;
749
750 #define MAXIMUM_LEADBYTES 12
751
752 typedef struct _CPTABLEINFO
753 {
754 USHORT CodePage;
755 USHORT MaximumCharacterSize;
756 USHORT DefaultChar;
757 USHORT UniDefaultChar;
758 USHORT TransDefaultChar;
759 USHORT TransUniDefaultChar;
760 USHORT DBCSCodePage;
761 UCHAR LeadByte[MAXIMUM_LEADBYTES];
762 PUSHORT MultiByteTable;
763 PVOID WideCharTable;
764 PUSHORT DBCSRanges;
765 PUSHORT DBCSOffsets;
766 } CPTABLEINFO, *PCPTABLEINFO;
767
768 typedef struct _NLSTABLEINFO
769 {
770 CPTABLEINFO OemTableInfo;
771 CPTABLEINFO AnsiTableInfo;
772 PUSHORT UpperCaseTable;
773 PUSHORT LowerCaseTable;
774 } NLSTABLEINFO, *PNLSTABLEINFO;
775
776 typedef struct _VM_COUNTERS
777 {
778 SIZE_T PeakVirtualSize;
779 SIZE_T VirtualSize;
780 ULONG PageFaultCount;
781 SIZE_T PeakWorkingSetSize;
782 SIZE_T WorkingSetSize;
783 SIZE_T QuotaPeakPagedPoolUsage;
784 SIZE_T QuotaPagedPoolUsage;
785 SIZE_T QuotaPeakNonPagedPoolUsage;
786 SIZE_T QuotaNonPagedPoolUsage;
787 SIZE_T PagefileUsage;
788 SIZE_T PeakPagefileUsage;
789 } VM_COUNTERS;
790 typedef VM_COUNTERS *PVM_COUNTERS;
791
792 typedef struct _VM_COUNTERS_EX
793 {
794 SIZE_T PeakVirtualSize;
795 SIZE_T VirtualSize;
796 ULONG PageFaultCount;
797 SIZE_T PeakWorkingSetSize;
798 SIZE_T WorkingSetSize;
799 SIZE_T QuotaPeakPagedPoolUsage;
800 SIZE_T QuotaPagedPoolUsage;
801 SIZE_T QuotaPeakNonPagedPoolUsage;
802 SIZE_T QuotaNonPagedPoolUsage;
803 SIZE_T PagefileUsage;
804 SIZE_T PeakPagefileUsage;
805 SIZE_T PrivateUsage;
806 } VM_COUNTERS_EX;
807 typedef VM_COUNTERS_EX *PVM_COUNTERS_EX;
808
809 typedef struct _COMPRESSED_DATA_INFO
810 {
811 USHORT CompressionFormatAndEngine;
812 UCHAR CompressionUnitShift;
813 UCHAR ChunkShift;
814 UCHAR ClusterShift;
815 UCHAR Reserved;
816 USHORT NumberOfChunks;
817 ULONG CompressedChunkSizes[ANYSIZE_ARRAY];
818 } COMPRESSED_DATA_INFO, *PCOMPRESSED_DATA_INFO;
819
820 typedef struct _GENERATE_NAME_CONTEXT
821 {
822 USHORT Checksum;
823 BOOLEAN CheckSumInserted;
824 UCHAR NameLength;
825 WCHAR NameBuffer[8];
826 ULONG ExtensionLength;
827 WCHAR ExtensionBuffer[4];
828 ULONG LastIndexValue;
829 } GENERATE_NAME_CONTEXT, *PGENERATE_NAME_CONTEXT;
830
831 typedef struct _RTL_SPLAY_LINKS {
832 struct _RTL_SPLAY_LINKS *Parent;
833 struct _RTL_SPLAY_LINKS *LeftChild;
834 struct _RTL_SPLAY_LINKS *RightChild;
835 } RTL_SPLAY_LINKS;
836 typedef RTL_SPLAY_LINKS *PRTL_SPLAY_LINKS;
837
838 struct _RTL_AVL_TABLE;
839 struct _RTL_GENERIC_TABLE;
840
841 typedef enum _TABLE_SEARCH_RESULT{
842 TableEmptyTree,
843 TableFoundNode,
844 TableInsertAsLeft,
845 TableInsertAsRight
846 } TABLE_SEARCH_RESULT;
847
848 typedef
849 NTSTATUS STDCALL (*PRTL_AVL_MATCH_FUNCTION)(
850 struct _RTL_AVL_TABLE *Table,
851 PVOID UserData,
852 PVOID MatchData
853 );
854
855 typedef enum _RTL_GENERIC_COMPARE_RESULTS
856 {
857 GenericLessThan,
858 GenericGreaterThan,
859 GenericEqual
860 } RTL_GENERIC_COMPARE_RESULTS;
861
862 typedef
863 RTL_GENERIC_COMPARE_RESULTS STDCALL
864 (*PRTL_AVL_COMPARE_ROUTINE) (
865 struct _RTL_AVL_TABLE *Table,
866 PVOID FirstStruct,
867 PVOID SecondStruct
868 );
869
870 typedef
871 RTL_GENERIC_COMPARE_RESULTS STDCALL
872 (*PRTL_GENERIC_COMPARE_ROUTINE)(
873 struct _RTL_GENERIC_TABLE *Table,
874 PVOID FirstStruct,
875 PVOID SecondStruct
876 );
877
878 typedef
879 PVOID STDCALL
880 (*PRTL_GENERIC_ALLOCATE_ROUTINE) (
881 struct _RTL_GENERIC_TABLE *Table,
882 LONG ByteSize
883 );
884
885 typedef
886 VOID STDCALL
887 (*PRTL_GENERIC_FREE_ROUTINE) (
888 struct _RTL_GENERIC_TABLE *Table,
889 PVOID Buffer
890 );
891
892 typedef
893 VOID STDCALL
894 (*PRTL_AVL_ALLOCATE_ROUTINE) (
895 struct _RTL_AVL_TABLE *Table,
896 LONG ByteSize
897 );
898
899 typedef
900 VOID STDCALL
901 (*PRTL_AVL_FREE_ROUTINE) (
902 struct _RTL_AVL_TABLE *Table,
903 PVOID Buffer
904 );
905
906 typedef struct _RTL_GENERIC_TABLE
907 {
908 PRTL_SPLAY_LINKS TableRoot;
909 LIST_ENTRY InsertOrderList;
910 PLIST_ENTRY OrderedPointer;
911 ULONG WhichOrderedElement;
912 ULONG NumberGenericTableElements;
913 PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine;
914 PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine;
915 PRTL_GENERIC_FREE_ROUTINE FreeRoutine;
916 PVOID TableContext;
917 } RTL_GENERIC_TABLE;
918 typedef RTL_GENERIC_TABLE *PRTL_GENERIC_TABLE;
919
920 typedef struct _RTL_BALANCED_LINKS
921 {
922 struct _RTL_BALANCED_LINKS *Parent;
923 struct _RTL_BALANCED_LINKS *LeftChild;
924 struct _RTL_BALANCED_LINKS *RightChild;
925 CHAR Balance;
926 UCHAR Reserved[3];
927 } RTL_BALANCED_LINKS;
928 typedef RTL_BALANCED_LINKS *PRTL_BALANCED_LINKS;
929
930 typedef struct _RTL_AVL_TABLE
931 {
932 RTL_BALANCED_LINKS BalancedRoot;
933 PVOID OrderedPointer;
934 ULONG WhichOrderedElement;
935 ULONG NumberGenericTableElements;
936 ULONG DepthOfTree;
937 PRTL_BALANCED_LINKS RestartKey;
938 ULONG DeleteCount;
939 PRTL_AVL_COMPARE_ROUTINE CompareRoutine;
940 PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine;
941 PRTL_AVL_FREE_ROUTINE FreeRoutine;
942 PVOID TableContext;
943 } RTL_AVL_TABLE;
944 typedef RTL_AVL_TABLE *PRTL_AVL_TABLE;
945
946 #define RTL_REGISTRY_ABSOLUTE 0
947 #define RTL_REGISTRY_SERVICES 1
948 #define RTL_REGISTRY_CONTROL 2
949 #define RTL_REGISTRY_WINDOWS_NT 3
950 #define RTL_REGISTRY_DEVICEMAP 4
951 #define RTL_REGISTRY_USER 5
952 #define RTL_REGISTRY_MAXIMUM 6
953 #define RTL_REGISTRY_HANDLE 0x40000000
954 #define RTL_REGISTRY_OPTIONAL 0x80000000
955
956 typedef NTSTATUS STDCALL
957 (*PRTL_QUERY_REGISTRY_ROUTINE)(
958 IN PWSTR ValueName,
959 IN ULONG ValueType,
960 IN PVOID ValueData,
961 IN ULONG ValueLength,
962 IN PVOID Context,
963 IN PVOID EntryContext
964 );
965
966 typedef struct _RTL_QUERY_REGISTRY_TABLE
967 {
968 PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine;
969 ULONG Flags;
970 PWSTR Name;
971 PVOID EntryContext;
972 ULONG DefaultType;
973 PVOID DefaultData;
974 ULONG DefaultLength;
975 } RTL_QUERY_REGISTRY_TABLE, *PRTL_QUERY_REGISTRY_TABLE;
976
977 typedef struct _KEY_VALUE_BASIC_INFORMATION
978 {
979 ULONG TitleIndex;
980 ULONG Type;
981 ULONG NameLength;
982 WCHAR Name[1];
983 } KEY_VALUE_BASIC_INFORMATION, *PKEY_VALUE_BASIC_INFORMATION;
984
985 typedef struct _KEY_VALUE_FULL_INFORMATION
986 {
987 ULONG TitleIndex;
988 ULONG Type;
989 ULONG DataOffset;
990 ULONG DataLength;
991 ULONG NameLength;
992 WCHAR Name[1];
993 } KEY_VALUE_FULL_INFORMATION, *PKEY_VALUE_FULL_INFORMATION;
994
995 typedef struct _KEY_BASIC_INFORMATION
996 {
997 LARGE_INTEGER LastWriteTime;
998 ULONG TitleIndex;
999 ULONG NameLength;
1000 WCHAR Name[1];
1001 } KEY_BASIC_INFORMATION, *PKEY_BASIC_INFORMATION;
1002
1003 #define RTL_QUERY_REGISTRY_SUBKEY 0x00000001
1004 #define RTL_QUERY_REGISTRY_TOPKEY 0x00000002
1005 #define RTL_QUERY_REGISTRY_REQUIRED 0x00000004
1006 #define RTL_QUERY_REGISTRY_NOVALUE 0x00000008
1007 #define RTL_QUERY_REGISTRY_NOEXPAND 0x00000010
1008 #define RTL_QUERY_REGISTRY_DIRECT 0x00000020
1009 #define RTL_QUERY_REGISTRY_DELETE 0x00000040
1010
1011 #define SID_MAX_SUB_AUTHORITIES 15
1012
1013 typedef struct _TIME_FIELDS
1014 {
1015 CSHORT Year;
1016 CSHORT Month;
1017 CSHORT Day;
1018 CSHORT Hour;
1019 CSHORT Minute;
1020 CSHORT Second;
1021 CSHORT Milliseconds;
1022 CSHORT Weekday;
1023 } TIME_FIELDS;
1024 typedef TIME_FIELDS *PTIME_FIELDS;
1025
1026 typedef struct _UNICODE_PREFIX_TABLE_ENTRY
1027 {
1028 CSHORT NodeTypeCode;
1029 CSHORT NameLength;
1030 struct _UNICODE_PREFIX_TABLE_ENTRY *NextPrefixTree;
1031 struct _UNICODE_PREFIX_TABLE_ENTRY *CaseMatch;
1032 RTL_SPLAY_LINKS Links;
1033 PUNICODE_STRING Prefix;
1034 } UNICODE_PREFIX_TABLE_ENTRY;
1035 typedef UNICODE_PREFIX_TABLE_ENTRY *PUNICODE_PREFIX_TABLE_ENTRY;
1036
1037 typedef struct _UNICODE_PREFIX_TABLE
1038 {
1039 CSHORT NodeTypeCode;
1040 CSHORT NameLength;
1041 PUNICODE_PREFIX_TABLE_ENTRY NextPrefixTree;
1042 PUNICODE_PREFIX_TABLE_ENTRY LastNextEntry;
1043 } UNICODE_PREFIX_TABLE;
1044 typedef UNICODE_PREFIX_TABLE *PUNICODE_PREFIX_TABLE;
1045
1046 #define VER_MINORVERSION 0x0000001
1047 #define VER_MAJORVERSION 0x0000002
1048 #define VER_BUILDNUMBER 0x0000004
1049 #define VER_PLATFORMID 0x0000008
1050 #define VER_SERVICEPACKMINOR 0x0000010
1051 #define VER_SERVICEPACKMAJOR 0x0000020
1052 #define VER_SUITENAME 0x0000040
1053 #define VER_PRODUCT_TYPE 0x0000080
1054 #define VER_PLATFORM_WIN32s 0
1055 #define VER_PLATFORM_WIN32_WINDOWS 1
1056 #define VER_PLATFORM_WIN32_NT 2
1057 #define VER_EQUAL 1
1058 #define VER_GREATER 2
1059 #define VER_GREATER_EQUAL 3
1060 #define VER_LESS 4
1061 #define VER_LESS_EQUAL 5
1062 #define VER_AND 6
1063 #define VER_OR 7
1064 #define VER_CONDITION_MASK 7
1065 #define VER_NUM_BITS_PER_CONDITION_MASK 3
1066
1067 typedef LPOSVERSIONINFOW PRTL_OSVERSIONINFOW;
1068 typedef OSVERSIONINFOEXW RTL_OSVERSIONINFOEXW;
1069 typedef LPOSVERSIONINFOEXW PRTL_OSVERSIONINFOEXW;
1070
1071 typedef enum _MEDIA_TYPE {
1072 Unknown,
1073 F5_1Pt2_512,
1074 F3_1Pt44_512,
1075 F3_2Pt88_512,
1076 F3_20Pt8_512,
1077 F3_720_512,
1078 F5_360_512,
1079 F5_320_512,
1080 F5_320_1024,
1081 F5_180_512,
1082 F5_160_512,
1083 RemovableMedia,
1084 FixedMedia,
1085 F3_120M_512,
1086 F3_640_512,
1087 F5_640_512,
1088 F5_720_512,
1089 F3_1Pt2_512,
1090 F3_1Pt23_1024,
1091 F5_1Pt23_1024,
1092 F3_128Mb_512,
1093 F3_230Mb_512,
1094 F8_256_128
1095 } MEDIA_TYPE, *PMEDIA_TYPE;
1096
1097 typedef struct _PARTITION_INFORMATION {
1098 LARGE_INTEGER StartingOffset;
1099 LARGE_INTEGER PartitionLength;
1100 DWORD HiddenSectors;
1101 DWORD PartitionNumber;
1102 BYTE PartitionType;
1103 BOOLEAN BootIndicator;
1104 BOOLEAN RecognizedPartition;
1105 BOOLEAN RewritePartition;
1106 } PARTITION_INFORMATION, *PPARTITION_INFORMATION;
1107
1108 typedef struct _DISK_GEOMETRY {
1109 LARGE_INTEGER Cylinders;
1110 MEDIA_TYPE MediaType;
1111 ULONG TracksPerCylinder;
1112 ULONG SectorsPerTrack;
1113 ULONG BytesPerSector;
1114 } DISK_GEOMETRY, *PDISK_GEOMETRY;
1115 #endif
1116