2e2a6273b1a78120df15eeb28dcd334e08155e12
[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 /* DEPENDENCIES **************************************************************/
14 #include <winioctl.h>
15 #include <ntstatus.h>
16 #include <ntnls.h>
17 #define STATIC static
18
19 /* EXPORTED DATA *************************************************************/
20
21 /* CONSTANTS *****************************************************************/
22
23 /* NTAPI/NTOSAPI Define */
24 #define NTAPI __stdcall
25 #define NTOSAPI
26 #define FASTCALL __fastcall
27 #define STDCALL __stdcall
28
29 /* Definitions for Object Creation -- winternl.h */
30 #define OBJ_INHERIT 2L
31 #define OBJ_PERMANENT 16L
32 #define OBJ_EXCLUSIVE 32L
33 #define OBJ_CASE_INSENSITIVE 64L
34 #define OBJ_OPENIF 128L
35 #define OBJ_OPENLINK 256L
36 #define OBJ_VALID_ATTRIBUTES 498L
37 #define InitializeObjectAttributes(p,n,a,r,s) { \
38 (p)->Length = sizeof(OBJECT_ATTRIBUTES); \
39 (p)->RootDirectory = (r); \
40 (p)->Attributes = (a); \
41 (p)->ObjectName = (n); \
42 (p)->SecurityDescriptor = (s); \
43 (p)->SecurityQualityOfService = NULL; \
44 }
45
46 /* Native API Return Value Macros */
47 #define NT_SUCCESS(x) ((x)>=0)
48 #define NT_WARNING(x) ((ULONG)(x)>>30==2)
49 #define NT_ERROR(x) ((ULONG)(x)>>30==3)
50
51 /* Object Access Rights */
52 #define DIRECTORY_QUERY (0x0001)
53 #define DIRECTORY_TRAVERSE (0x0002)
54 #define DIRECTORY_CREATE_OBJECT (0x0004)
55 #define DIRECTORY_CREATE_SUBDIRECTORY (0x0008)
56 #define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF)
57 #define EVENT_QUERY_STATE (0x0001)
58 #define SEMAPHORE_QUERY_STATE (0x0001)
59 #define SYMBOLIC_LINK_QUERY 0x0001
60 #define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
61
62 /* Duplication Flags */
63 #define DUPLICATE_SAME_ATTRIBUTES 0x00000004
64
65 /* I/O Control Codes for communicating with Mailslots */
66 #define FSCTL_MAILSLOT_PEEK \
67 CTL_CODE(FILE_DEVICE_MAILSLOT, 0, METHOD_NEITHER, FILE_READ_DATA)
68
69 /* I/O Control Codes for communicating with Pipes */
70 #define FSCTL_PIPE_ASSIGN_EVENT \
71 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
72 #define FSCTL_PIPE_DISCONNECT \
73 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
74 #define FSCTL_PIPE_LISTEN \
75 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
76 #define FSCTL_PIPE_PEEK \
77 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 3, METHOD_BUFFERED, FILE_READ_DATA)
78 #define FSCTL_PIPE_QUERY_EVENT \
79 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
80 #define FSCTL_PIPE_TRANSCEIVE \
81 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 5, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
82 #define FSCTL_PIPE_WAIT \
83 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
84 #define FSCTL_PIPE_IMPERSONATE \
85 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
86 #define FSCTL_PIPE_SET_CLIENT_PROCESS \
87 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
88 #define FSCTL_PIPE_QUERY_CLIENT_PROCESS \
89 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
90 #define FSCTL_PIPE_INTERNAL_READ \
91 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2045, METHOD_BUFFERED, FILE_READ_DATA)
92 #define FSCTL_PIPE_INTERNAL_WRITE \
93 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2046, METHOD_BUFFERED, FILE_WRITE_DATA)
94 #define FSCTL_PIPE_INTERNAL_TRANSCEIVE \
95 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2047, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
96 #define FSCTL_PIPE_INTERNAL_READ_OVFLOW \
97 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2048, METHOD_BUFFERED, FILE_READ_DATA)
98
99 /* I/O Control Codes for Communicating with Tapes */
100 #define IOCTL_TAPE_ERASE \
101 CTL_CODE(FILE_DEVICE_TAPE, 0, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
102 #define IOCTL_TAPE_PREPARE \
103 CTL_CODE(FILE_DEVICE_TAPE, 1, METHOD_BUFFERED, FILE_READ_ACCESS)
104 #define IOCTL_TAPE_WRITE_MARKS \
105 CTL_CODE(FILE_DEVICE_TAPE, 2, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
106 #define IOCTL_TAPE_GET_POSITION \
107 CTL_CODE(FILE_DEVICE_TAPE, 3, METHOD_BUFFERED, FILE_READ_ACCESS)
108 #define IOCTL_TAPE_SET_POSITION \
109 CTL_CODE(FILE_DEVICE_TAPE, 4, METHOD_BUFFERED, FILE_READ_ACCESS)
110 #define IOCTL_TAPE_GET_DRIVE_PARAMS \
111 CTL_CODE(FILE_DEVICE_TAPE, 5, METHOD_BUFFERED, FILE_READ_ACCESS)
112 #define IOCTL_TAPE_SET_DRIVE_PARAMS \
113 CTL_CODE(FILE_DEVICE_TAPE, 6, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
114 #define IOCTL_TAPE_GET_MEDIA_PARAMS \
115 CTL_CODE(FILE_DEVICE_TAPE, 7, METHOD_BUFFERED, FILE_READ_ACCESS)
116 #define IOCTL_TAPE_SET_MEDIA_PARAMS \
117 CTL_CODE(FILE_DEVICE_TAPE, 8, METHOD_BUFFERED, FILE_READ_ACCESS)
118 #define IOCTL_TAPE_GET_STATUS \
119 CTL_CODE(FILE_DEVICE_TAPE, 9, METHOD_BUFFERED, FILE_READ_ACCESS)
120 #define IOCTL_TAPE_CREATE_PARTITION \
121 CTL_CODE(FILE_DEVICE_TAPE, 10, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
122
123 /* Macros for current Process/Thread built-in 'special' ID */
124 #define NtCurrentProcess() ( (HANDLE)(LONG_PTR) -1 )
125 #define ZwCurrentProcess() NtCurrentProcess()
126 #define NtCurrentThread() ( (HANDLE)(LONG_PTR) -2 )
127 #define ZwCurrentThread() NtCurrentThread()
128
129 /* Kernel Shared Data Constants */
130 #define PROCESSOR_FEATURE_MAX 64
131 #define SharedUserData ((KUSER_SHARED_DATA * CONST) USER_SHARED_DATA)
132
133 /* Paging Values on x86 */
134 #define PAGE_SIZE 0x1000
135 #define PAGE_SHIFT 12L
136
137 /* Run-Time Library (RTL) Registry Constants */
138 #define RTL_REGISTRY_ABSOLUTE 0
139 #define RTL_REGISTRY_SERVICES 1
140 #define RTL_REGISTRY_CONTROL 2
141 #define RTL_REGISTRY_WINDOWS_NT 3
142 #define RTL_REGISTRY_DEVICEMAP 4
143 #define RTL_REGISTRY_USER 5
144 #define RTL_REGISTRY_MAXIMUM 6
145 #define RTL_REGISTRY_HANDLE 0x40000000
146 #define RTL_REGISTRY_OPTIONAL 0x80000000
147 #define RTL_QUERY_REGISTRY_SUBKEY 0x00000001
148 #define RTL_QUERY_REGISTRY_TOPKEY 0x00000002
149 #define RTL_QUERY_REGISTRY_REQUIRED 0x00000004
150 #define RTL_QUERY_REGISTRY_NOVALUE 0x00000008
151 #define RTL_QUERY_REGISTRY_NOEXPAND 0x00000010
152 #define RTL_QUERY_REGISTRY_DIRECT 0x00000020
153 #define RTL_QUERY_REGISTRY_DELETE 0x00000040
154
155 /* File Result Flags */
156 #define FILE_SUPERSEDED 0x00000000
157 #define FILE_OPENED 0x00000001
158 #define FILE_CREATED 0x00000002
159 #define FILE_OVERWRITTEN 0x00000003
160 #define FILE_EXISTS 0x00000004
161 #define FILE_DOES_NOT_EXIST 0x00000005
162
163 /* Pipe Flags */
164 #define FILE_PIPE_BYTE_STREAM_MODE 0x00000000
165 #define FILE_PIPE_MESSAGE_MODE 0x00000001
166 #define FILE_PIPE_QUEUE_OPERATION 0x00000000
167 #define FILE_PIPE_COMPLETE_OPERATION 0x00000001
168 #define FILE_PIPE_INBOUND 0x00000000
169 #define FILE_PIPE_OUTBOUND 0x00000001
170 #define FILE_PIPE_FULL_DUPLEX 0x00000002
171 #define FILE_PIPE_CLIENT_END 0x00000000
172 #define FILE_PIPE_SERVER_END 0x00000001
173
174 /* File Attributes */
175 #define FILE_ATTRIBUTE_VALID_FLAGS 0x00007fb7
176 #define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x000031a7
177
178 /* File Flags */
179 #define FILE_SUPERSEDE 0x00000000
180 #define FILE_OPEN 0x00000001
181 #define FILE_CREATE 0x00000002
182 #define FILE_OPEN_IF 0x00000003
183 #define FILE_OVERWRITE 0x00000004
184 #define FILE_OVERWRITE_IF 0x00000005
185 #define FILE_MAXIMUM_DISPOSITION 0x00000005
186
187 /* File Types */
188 #define FILE_DIRECTORY_FILE 0x00000001
189 #define FILE_WRITE_THROUGH 0x00000002
190 #define FILE_SEQUENTIAL_ONLY 0x00000004
191 #define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008
192 #define FILE_SYNCHRONOUS_IO_ALERT 0x00000010
193 #define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020
194 #define FILE_NON_DIRECTORY_FILE 0x00000040
195 #define FILE_CREATE_TREE_CONNECTION 0x00000080
196 #define FILE_COMPLETE_IF_OPLOCKED 0x00000100
197 #define FILE_NO_EA_KNOWLEDGE 0x00000200
198 #define FILE_OPEN_FOR_RECOVERY 0x00000400
199 #define FILE_RANDOM_ACCESS 0x00000800
200 #define FILE_DELETE_ON_CLOSE 0x00001000
201 #define FILE_OPEN_BY_FILE_ID 0x00002000
202 #define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000
203 #define FILE_NO_COMPRESSION 0x00008000
204 #define FILE_RESERVE_OPFILTER 0x00100000
205 #define FILE_OPEN_REPARSE_POINT 0x00200000
206 #define FILE_OPEN_NO_RECALL 0x00400000
207 #define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000
208
209 /* Device Charactertics */
210 #define FILE_REMOVABLE_MEDIA 0x00000001
211 #define FILE_REMOTE_DEVICE 0x00000010
212
213 /* Version Constants */
214 #define VER_MINORVERSION 0x0000001
215 #define VER_MAJORVERSION 0x0000002
216 #define VER_BUILDNUMBER 0x0000004
217 #define VER_PLATFORMID 0x0000008
218 #define VER_SERVICEPACKMINOR 0x0000010
219 #define VER_SERVICEPACKMAJOR 0x0000020
220 #define VER_SUITENAME 0x0000040
221 #define VER_PRODUCT_TYPE 0x0000080
222 #define VER_PLATFORM_WIN32s 0
223 #define VER_PLATFORM_WIN32_WINDOWS 1
224 #define VER_PLATFORM_WIN32_NT 2
225 #define VER_EQUAL 1
226 #define VER_GREATER 2
227 #define VER_GREATER_EQUAL 3
228 #define VER_LESS 4
229 #define VER_LESS_EQUAL 5
230 #define VER_AND 6
231 #define VER_OR 7
232 #define VER_CONDITION_MASK 7
233 #define VER_NUM_BITS_PER_CONDITION_MASK 3
234
235 /* RTL String Hash Algorithms */
236 #define HASH_STRING_ALGORITHM_DEFAULT 0
237 #define HASH_STRING_ALGORITHM_X65599 1
238 #define HASH_STRING_ALGORITHM_INVALID 0xffffffff
239
240 /* List Macros */
241 static __inline
242 VOID
243 InitializeListHead(
244 IN PLIST_ENTRY ListHead)
245 {
246 ListHead->Flink = ListHead->Blink = ListHead;
247 }
248
249 static __inline
250 VOID
251 InsertHeadList(
252 IN PLIST_ENTRY ListHead,
253 IN PLIST_ENTRY Entry)
254 {
255 PLIST_ENTRY OldFlink;
256 OldFlink = ListHead->Flink;
257 Entry->Flink = OldFlink;
258 Entry->Blink = ListHead;
259 OldFlink->Blink = Entry;
260 ListHead->Flink = Entry;
261 }
262
263 static __inline
264 VOID
265 InsertTailList(
266 IN PLIST_ENTRY ListHead,
267 IN PLIST_ENTRY Entry)
268 {
269 PLIST_ENTRY OldBlink;
270 OldBlink = ListHead->Blink;
271 Entry->Flink = ListHead;
272 Entry->Blink = OldBlink;
273 OldBlink->Flink = Entry;
274 ListHead->Blink = Entry;
275 }
276
277 #define IsListEmpty(ListHead) \
278 ((ListHead)->Flink == (ListHead))
279
280 #define PopEntryList(ListHead) \
281 (ListHead)->Next; \
282 { \
283 PSINGLE_LIST_ENTRY _FirstEntry; \
284 _FirstEntry = (ListHead)->Next; \
285 if (_FirstEntry != NULL) \
286 (ListHead)->Next = _FirstEntry->Next; \
287 }
288
289 #define PushEntryList(_ListHead, _Entry) \
290 (_Entry)->Next = (_ListHead)->Next; \
291 (_ListHead)->Next = (_Entry); \
292
293 static __inline
294 BOOLEAN
295 RemoveEntryList(
296 IN PLIST_ENTRY Entry)
297 {
298 PLIST_ENTRY OldFlink;
299 PLIST_ENTRY OldBlink;
300
301 OldFlink = Entry->Flink;
302 OldBlink = Entry->Blink;
303 OldFlink->Blink = OldBlink;
304 OldBlink->Flink = OldFlink;
305 return (OldFlink == OldBlink);
306 }
307
308 static __inline
309 PLIST_ENTRY
310 RemoveHeadList(
311 IN PLIST_ENTRY ListHead)
312 {
313 PLIST_ENTRY Flink;
314 PLIST_ENTRY Entry;
315
316 Entry = ListHead->Flink;
317 Flink = Entry->Flink;
318 ListHead->Flink = Flink;
319 Flink->Blink = ListHead;
320 return Entry;
321 }
322
323 static __inline
324 PLIST_ENTRY
325 RemoveTailList(
326 IN PLIST_ENTRY ListHead)
327 {
328 PLIST_ENTRY Blink;
329 PLIST_ENTRY Entry;
330
331 Entry = ListHead->Blink;
332 Blink = Entry->Blink;
333 ListHead->Blink = Blink;
334 Blink->Flink = ListHead;
335 return Entry;
336 }
337
338 #define IsFirstEntry(ListHead, Entry) \
339 ((ListHead)->Flink == Entry)
340
341 #define IsLastEntry(ListHead, Entry) \
342 ((ListHead)->Blink == Entry)
343
344 /*
345 * Constant String Macro
346 */
347 #define RTL_CONSTANT_STRING(__SOURCE_STRING__) \
348 { \
349 sizeof(__SOURCE_STRING__) - sizeof((__SOURCE_STRING__)[0]), \
350 sizeof(__SOURCE_STRING__), \
351 (__SOURCE_STRING__) \
352 }
353
354 /* ENUMERATIONS **************************************************************/
355
356 /* Kernel Shared Data Values */
357 typedef enum _NT_PRODUCT_TYPE
358 {
359 NtProductWinNt = 1,
360 NtProductLanManNt,
361 NtProductServer
362 } NT_PRODUCT_TYPE, *PNT_PRODUCT_TYPE;
363
364 typedef enum _ALTERNATIVE_ARCHITECTURE_TYPE
365 {
366 StandardDesign,
367 NEC98x86,
368 EndAlternatives
369 } ALTERNATIVE_ARCHITECTURE_TYPE;
370
371 /* Run-Time Library (RTL) Enumerations */
372 typedef enum _TABLE_SEARCH_RESULT
373 {
374 TableEmptyTree,
375 TableFoundNode,
376 TableInsertAsLeft,
377 TableInsertAsRight
378 } TABLE_SEARCH_RESULT;
379
380 typedef enum _RTL_GENERIC_COMPARE_RESULTS
381 {
382 GenericLessThan,
383 GenericGreaterThan,
384 GenericEqual
385 } RTL_GENERIC_COMPARE_RESULTS;
386
387 /* Kernel or Native Enumerations used by Native API */
388 typedef enum _SECTION_INHERIT
389 {
390 ViewShare = 1,
391 ViewUnmap = 2
392 } SECTION_INHERIT;
393
394 typedef enum _POOL_TYPE
395 {
396 NonPagedPool,
397 PagedPool,
398 NonPagedPoolMustSucceed,
399 DontUseThisType,
400 NonPagedPoolCacheAligned,
401 PagedPoolCacheAligned,
402 NonPagedPoolCacheAlignedMustS,
403 MaxPoolType,
404 NonPagedPoolSession = 32,
405 PagedPoolSession,
406 NonPagedPoolMustSucceedSession,
407 DontUseThisTypeSession,
408 NonPagedPoolCacheAlignedSession,
409 PagedPoolCacheAlignedSession,
410 NonPagedPoolCacheAlignedMustSSession
411 } POOL_TYPE;
412
413 typedef enum _EVENT_TYPE
414 {
415 NotificationEvent,
416 SynchronizationEvent
417 } EVENT_TYPE;
418
419 typedef enum _TIMER_TYPE
420 {
421 NotificationTimer,
422 SynchronizationTimer
423 } TIMER_TYPE;
424
425 typedef enum _WAIT_TYPE
426 {
427 WaitAll,
428 WaitAny
429 } WAIT_TYPE;
430
431 typedef enum _INTERFACE_TYPE
432 {
433 InterfaceTypeUndefined = -1,
434 Internal,
435 Isa,
436 Eisa,
437 MicroChannel,
438 TurboChannel,
439 PCIBus,
440 VMEBus,
441 NuBus,
442 PCMCIABus,
443 CBus,
444 MPIBus,
445 MPSABus,
446 ProcessorInternal,
447 InternalPowerBus,
448 PNPISABus,
449 PNPBus,
450 MaximumInterfaceType
451 }INTERFACE_TYPE, *PINTERFACE_TYPE;
452
453 typedef enum _MODE
454 {
455 KernelMode,
456 UserMode,
457 MaximumMode
458 } MODE;
459
460 typedef enum _KWAIT_REASON
461 {
462 Executive,
463 FreePage,
464 PageIn,
465 PoolAllocation,
466 DelayExecution,
467 Suspended,
468 UserRequest,
469 WrExecutive,
470 WrFreePage,
471 WrPageIn,
472 WrPoolAllocation,
473 WrDelayExecution,
474 WrSuspended,
475 WrUserRequest,
476 WrEventPair,
477 WrQueue,
478 WrLpcReceive,
479 WrLpcReply,
480 WrVirtualMemory,
481 WrPageOut,
482 WrRendezvous,
483 Spare2,
484 WrGuardedMutex,
485 Spare4,
486 Spare5,
487 Spare6,
488 WrKernel,
489 WrResource,
490 WrPushLock,
491 WrMutex,
492 WrQuantumEnd,
493 WrDispatchInt,
494 WrPreempted,
495 WrYieldExecution,
496 MaximumWaitReason
497 } KWAIT_REASON;
498
499 typedef enum _KPROFILE_SOURCE
500 {
501 ProfileTime,
502 ProfileAlignmentFixup,
503 ProfileTotalIssues,
504 ProfilePipelineDry,
505 ProfileLoadInstructions,
506 ProfilePipelineFrozen,
507 ProfileBranchInstructions,
508 ProfileTotalNonissues,
509 ProfileDcacheMisses,
510 ProfileIcacheMisses,
511 ProfileCacheMisses,
512 ProfileBranchMispredictions,
513 ProfileStoreInstructions,
514 ProfileFpInstructions,
515 ProfileIntegerInstructions,
516 Profile2Issue,
517 Profile3Issue,
518 Profile4Issue,
519 ProfileSpecialInstructions,
520 ProfileTotalCycles,
521 ProfileIcacheIssues,
522 ProfileDcacheAccesses,
523 ProfileMemoryBarrierCycles,
524 ProfileLoadLinkedIssues,
525 ProfileMaximum
526 } KPROFILE_SOURCE;
527
528 /**** Information Classes ****/
529
530 /*
531 * File
532 */
533 typedef enum _FILE_INFORMATION_CLASS
534 {
535 FileDirectoryInformation = 1,
536 FileFullDirectoryInformation,
537 FileBothDirectoryInformation,
538 FileBasicInformation,
539 FileStandardInformation,
540 FileInternalInformation,
541 FileEaInformation,
542 FileAccessInformation,
543 FileNameInformation,
544 FileRenameInformation,
545 FileLinkInformation,
546 FileNamesInformation,
547 FileDispositionInformation,
548 FilePositionInformation,
549 FileFullEaInformation,
550 FileModeInformation,
551 FileAlignmentInformation,
552 FileAllInformation,
553 FileAllocationInformation,
554 FileEndOfFileInformation,
555 FileAlternateNameInformation,
556 FileStreamInformation,
557 FilePipeInformation,
558 FilePipeLocalInformation,
559 FilePipeRemoteInformation,
560 FileMailslotQueryInformation,
561 FileMailslotSetInformation,
562 FileCompressionInformation,
563 FileObjectIdInformation,
564 FileCompletionInformation,
565 FileMoveClusterInformation,
566 FileQuotaInformation,
567 FileReparsePointInformation,
568 FileNetworkOpenInformation,
569 FileAttributeTagInformation,
570 FileTrackingInformation,
571 FileIdBothDirectoryInformation,
572 FileIdFullDirectoryInformation,
573 FileValidDataLengthInformation,
574 FileShortNameInformation,
575 FileMaximumInformation
576 } FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;
577
578 /*
579 * File System
580 */
581 typedef enum _FSINFOCLASS
582 {
583 FileFsVolumeInformation = 1,
584 FileFsLabelInformation,
585 FileFsSizeInformation,
586 FileFsDeviceInformation,
587 FileFsAttributeInformation,
588 FileFsControlInformation,
589 FileFsFullSizeInformation,
590 FileFsObjectIdInformation,
591 FileFsDriverPathInformation,
592 FileFsMaximumInformation
593 } FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS;
594
595 /*
596 * Registry Key
597 */
598 typedef enum _KEY_INFORMATION_CLASS
599 {
600 KeyBasicInformation,
601 KeyNodeInformation,
602 KeyFullInformation,
603 KeyNameInformation,
604 KeyCachedInformation,
605 KeyFlagsInformation
606 } KEY_INFORMATION_CLASS;
607
608 /*
609 * Registry Key Value
610 */
611 typedef enum _KEY_VALUE_INFORMATION_CLASS
612 {
613 KeyValueBasicInformation,
614 KeyValueFullInformation,
615 KeyValuePartialInformation,
616 KeyValueFullInformationAlign64,
617 KeyValuePartialInformationAlign64
618 } KEY_VALUE_INFORMATION_CLASS;
619
620 /*
621 * Registry Key Set
622 */
623 typedef enum _KEY_SET_INFORMATION_CLASS
624 {
625 KeyWriteTimeInformation,
626 KeyUserFlagsInformation,
627 MaxKeySetInfoClass
628 } KEY_SET_INFORMATION_CLASS;
629
630 /*
631 * Process
632 */
633 typedef enum _PROCESSINFOCLASS
634 {
635 ProcessBasicInformation,
636 ProcessQuotaLimits,
637 ProcessIoCounters,
638 ProcessVmCounters,
639 ProcessTimes,
640 ProcessBasePriority,
641 ProcessRaisePriority,
642 ProcessDebugPort,
643 ProcessExceptionPort,
644 ProcessAccessToken,
645 ProcessLdtInformation,
646 ProcessLdtSize,
647 ProcessDefaultHardErrorMode,
648 ProcessIoPortHandlers,
649 ProcessPooledUsageAndLimits,
650 ProcessWorkingSetWatch,
651 ProcessUserModeIOPL,
652 ProcessEnableAlignmentFaultFixup,
653 ProcessPriorityClass,
654 ProcessWx86Information,
655 ProcessHandleCount,
656 ProcessAffinityMask,
657 ProcessPriorityBoost,
658 ProcessDeviceMap,
659 ProcessSessionInformation,
660 ProcessForegroundInformation,
661 ProcessWow64Information,
662 ProcessImageFileName,
663 ProcessLUIDDeviceMapsEnabled,
664 ProcessBreakOnTermination,
665 ProcessDebugObjectHandle,
666 ProcessDebugFlags,
667 ProcessHandleTracing,
668 MaxProcessInfoClass
669 } PROCESSINFOCLASS;
670
671 /*
672 * Thread
673 */
674 typedef enum _THREADINFOCLASS
675 {
676 ThreadBasicInformation,
677 ThreadTimes,
678 ThreadPriority,
679 ThreadBasePriority,
680 ThreadAffinityMask,
681 ThreadImpersonationToken,
682 ThreadDescriptorTableEntry,
683 ThreadEnableAlignmentFaultFixup,
684 ThreadEventPair_Reusable,
685 ThreadQuerySetWin32StartAddress,
686 ThreadZeroTlsCell,
687 ThreadPerformanceCount,
688 ThreadAmILastThread,
689 ThreadIdealProcessor,
690 ThreadPriorityBoost,
691 ThreadSetTlsArrayAddress,
692 ThreadIsIoPending,
693 ThreadHideFromDebugger,
694 ThreadBreakOnTermination,
695 MaxThreadInfoClass
696 } THREADINFOCLASS;
697
698 /* TYPES *********************************************************************/
699
700 /* Basic Types that aren't defined in User-Mode Headers */
701 typedef CONST int CINT;
702 typedef CONST char *PCSZ;
703 typedef short CSHORT;
704 typedef CSHORT *PCSHORT;
705 typedef LARGE_INTEGER PHYSICAL_ADDRESS, *PPHYSICAL_ADDRESS;
706
707 /* Kernel Types used by Native APIs */
708 typedef LONG KPRIORITY;
709 typedef LONG NTSTATUS, *PNTSTATUS;
710 typedef UCHAR KIRQL, *PKIRQL;
711 typedef ULONG KAFFINITY, *PKAFFINITY;
712 typedef ULONG_PTR KSPIN_LOCK, *PKSPIN_LOCK;
713 typedef struct _PEB *PPEB;
714 typedef ULONG KPROCESSOR_MODE;
715 typedef struct _OBJECT_TYPE *POBJECT_TYPE;
716 struct _ETHREAD;
717 struct _CSR_API_MESSAGE;
718 typedef ULONG EXECUTION_STATE;
719
720 /* Basic NT Types */
721 #if !defined(_NTSECAPI_H) && !defined(_SUBAUTH_H)
722 typedef struct _UNICODE_STRING
723 {
724 USHORT Length;
725 USHORT MaximumLength;
726 PWSTR Buffer;
727 } UNICODE_STRING, *PUNICODE_STRING;
728 typedef const UNICODE_STRING* PCUNICODE_STRING;
729
730 typedef struct _STRING
731 {
732 USHORT Length;
733 USHORT MaximumLength;
734 PCHAR Buffer;
735 } STRING, *PSTRING;
736
737 typedef struct _OBJECT_ATTRIBUTES
738 {
739 ULONG Length;
740 HANDLE RootDirectory;
741 PUNICODE_STRING ObjectName;
742 ULONG Attributes;
743 PVOID SecurityDescriptor;
744 PVOID SecurityQualityOfService;
745 } OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;
746 #endif
747
748 typedef STRING ANSI_STRING;
749 typedef PSTRING PANSI_STRING;
750 typedef STRING OEM_STRING;
751 typedef PSTRING POEM_STRING;
752
753 typedef struct _IO_STATUS_BLOCK
754 {
755 union
756 {
757 NTSTATUS Status;
758 PVOID Pointer;
759 };
760 ULONG_PTR Information;
761 } IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
762
763 typedef VOID
764 (NTAPI *PIO_APC_ROUTINE)(
765 IN PVOID ApcContext,
766 IN PIO_STATUS_BLOCK IoStatusBlock,
767 IN ULONG Reserved);
768
769 typedef VOID
770 (NTAPI *PKNORMAL_ROUTINE)(
771 IN PVOID NormalContext,
772 IN PVOID SystemArgument1,
773 IN PVOID SystemArgument2);
774
775 typedef VOID
776 (NTAPI *PTIMER_APC_ROUTINE)(
777 IN PVOID TimerContext,
778 IN ULONG TimerLowValue,
779 IN LONG TimerHighValue);
780
781 /* Kernel Types which are returned or used by Native API */
782 typedef struct _OBJECT_NAME_INFORMATION
783 {
784 UNICODE_STRING Name;
785 } OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION;
786
787 typedef struct _IO_ERROR_LOG_PACKET
788 {
789 UCHAR MajorFunctionCode;
790 UCHAR RetryCount;
791 USHORT DumpDataSize;
792 USHORT NumberOfStrings;
793 USHORT StringOffset;
794 USHORT EventCategory;
795 NTSTATUS ErrorCode;
796 ULONG UniqueErrorValue;
797 NTSTATUS FinalStatus;
798 ULONG SequenceNumber;
799 ULONG IoControlCode;
800 LARGE_INTEGER DeviceOffset;
801 ULONG DumpData[1];
802 }IO_ERROR_LOG_PACKET, *PIO_ERROR_LOG_PACKET;
803
804 typedef struct _IO_ERROR_LOG_MESSAGE
805 {
806 USHORT Type;
807 USHORT Size;
808 USHORT DriverNameLength;
809 LARGE_INTEGER TimeStamp;
810 ULONG DriverNameOffset;
811 IO_ERROR_LOG_PACKET EntryData;
812 } IO_ERROR_LOG_MESSAGE, *PIO_ERROR_LOG_MESSAGE;
813
814 typedef struct _CLIENT_ID
815 {
816 HANDLE UniqueProcess;
817 HANDLE UniqueThread;
818 } CLIENT_ID, *PCLIENT_ID;
819
820 typedef struct _KSYSTEM_TIME
821 {
822 ULONG LowPart;
823 LONG High1Time;
824 LONG High2Time;
825 } KSYSTEM_TIME, *PKSYSTEM_TIME;
826
827 typedef struct _TIME_FIELDS
828 {
829 CSHORT Year;
830 CSHORT Month;
831 CSHORT Day;
832 CSHORT Hour;
833 CSHORT Minute;
834 CSHORT Second;
835 CSHORT Milliseconds;
836 CSHORT Weekday;
837 } TIME_FIELDS, *PTIME_FIELDS;
838
839 typedef struct _VM_COUNTERS
840 {
841 SIZE_T PeakVirtualSize;
842 SIZE_T VirtualSize;
843 ULONG PageFaultCount;
844 SIZE_T PeakWorkingSetSize;
845 SIZE_T WorkingSetSize;
846 SIZE_T QuotaPeakPagedPoolUsage;
847 SIZE_T QuotaPagedPoolUsage;
848 SIZE_T QuotaPeakNonPagedPoolUsage;
849 SIZE_T QuotaNonPagedPoolUsage;
850 SIZE_T PagefileUsage;
851 SIZE_T PeakPagefileUsage;
852 } VM_COUNTERS, *PVM_COUNTERS;
853
854 typedef struct _VM_COUNTERS_EX
855 {
856 SIZE_T PeakVirtualSize;
857 SIZE_T VirtualSize;
858 ULONG PageFaultCount;
859 SIZE_T PeakWorkingSetSize;
860 SIZE_T WorkingSetSize;
861 SIZE_T QuotaPeakPagedPoolUsage;
862 SIZE_T QuotaPagedPoolUsage;
863 SIZE_T QuotaPeakNonPagedPoolUsage;
864 SIZE_T QuotaNonPagedPoolUsage;
865 SIZE_T PagefileUsage;
866 SIZE_T PeakPagefileUsage;
867 SIZE_T PrivateUsage;
868 } VM_COUNTERS_EX, *PVM_COUNTERS_EX;
869
870 /**** Information Types ****/
871
872 /*
873 * Registry Key Set
874 */
875
876 /* Class 0 */
877 typedef struct _KEY_WRITE_TIME_INFORMATION
878 {
879 LARGE_INTEGER LastWriteTime;
880 } KEY_WRITE_TIME_INFORMATION, *PKEY_WRITE_TIME_INFORMATION;
881
882 /* Class 1 */
883 typedef struct _KEY_USER_FLAGS_INFORMATION
884 {
885 ULONG UserFlags;
886 } KEY_USER_FLAGS_INFORMATION, *PKEY_USER_FLAGS_INFORMATION;
887
888 typedef struct _KEY_FULL_INFORMATION
889 {
890 LARGE_INTEGER LastWriteTime;
891 ULONG TitleIndex;
892 ULONG ClassOffset;
893 ULONG ClassLength;
894 ULONG SubKeys;
895 ULONG MaxNameLen;
896 ULONG MaxClassLen;
897 ULONG Values;
898 ULONG MaxValueNameLen;
899 ULONG MaxValueDataLen;
900 WCHAR Class[1];
901 } KEY_FULL_INFORMATION, *PKEY_FULL_INFORMATION;
902
903 typedef struct _KEY_NODE_INFORMATION
904 {
905 LARGE_INTEGER LastWriteTime;
906 ULONG TitleIndex;
907 ULONG ClassOffset;
908 ULONG ClassLength;
909 ULONG NameLength;
910 WCHAR Name[1];
911 } KEY_NODE_INFORMATION, *PKEY_NODE_INFORMATION;
912
913 /*
914 * File
915 */
916
917 /* Class 1 */
918 typedef struct _FILE_BASIC_INFORMATION
919 {
920 LARGE_INTEGER CreationTime;
921 LARGE_INTEGER LastAccessTime;
922 LARGE_INTEGER LastWriteTime;
923 LARGE_INTEGER ChangeTime;
924 ULONG FileAttributes;
925 } FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION;
926
927 /* Class 2 */
928 typedef struct _FILE_STANDARD_INFORMATION
929 {
930 LARGE_INTEGER AllocationSize;
931 LARGE_INTEGER EndOfFile;
932 ULONG NumberOfLinks;
933 BOOLEAN DeletePending;
934 BOOLEAN Directory;
935 } FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION;
936
937 typedef struct _FILE_NETWORK_OPEN_INFORMATION
938 {
939 LARGE_INTEGER CreationTime;
940 LARGE_INTEGER LastAccessTime;
941 LARGE_INTEGER LastWriteTime;
942 LARGE_INTEGER ChangeTime;
943 LARGE_INTEGER AllocationSize;
944 LARGE_INTEGER EndOfFile;
945 ULONG FileAttributes;
946 } FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION;
947
948 typedef struct _FILE_EA_INFORMATION
949 {
950 ULONG EaSize;
951 } FILE_EA_INFORMATION, *PFILE_EA_INFORMATION;
952
953 typedef struct _FILE_COMPRESSION_INFORMATION
954 {
955 LARGE_INTEGER CompressedFileSize;
956 USHORT CompressionFormat;
957 UCHAR CompressionUnitShift;
958 UCHAR ChunkShift;
959 UCHAR ClusterShift;
960 UCHAR Reserved[3];
961 } FILE_COMPRESSION_INFORMATION, *PFILE_COMPRESSION_INFORMATION;
962
963 typedef struct _FILE_POSITION_INFORMATION
964 {
965 LARGE_INTEGER CurrentByteOffset;
966 } FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION;
967
968 typedef struct _FILE_DISPOSITION_INFORMATION
969 {
970 BOOLEAN DeleteFile;
971 } FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION;
972
973 typedef struct _FILE_FULL_EA_INFORMATION
974 {
975 ULONG NextEntryOffset;
976 UCHAR Flags;
977 UCHAR EaNameLength;
978 USHORT EaValueLength;
979 CHAR EaName[1];
980 } FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION;
981
982 typedef struct _FILE_QUOTA_INFORMATION
983 {
984 ULONG NextEntryOffset;
985 ULONG SidLength;
986 LARGE_INTEGER ChangeTime;
987 LARGE_INTEGER QuotaUsed;
988 LARGE_INTEGER QuotaThreshold;
989 LARGE_INTEGER QuotaLimit;
990 SID Sid;
991 } FILE_QUOTA_INFORMATION, *PFILE_QUOTA_INFORMATION;
992
993 typedef struct _FILE_INTERNAL_INFORMATION
994 {
995 LARGE_INTEGER IndexNumber;
996 } FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION;
997
998 typedef struct _FILE_RENAME_INFORMATION
999 {
1000 BOOLEAN ReplaceIfExists;
1001 HANDLE RootDirectory;
1002 ULONG FileNameLength;
1003 WCHAR FileName[1];
1004 } FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION;
1005
1006 typedef struct _FILE_PIPE_INFORMATION
1007 {
1008 ULONG ReadMode;
1009 ULONG CompletionMode;
1010 } FILE_PIPE_INFORMATION, *PFILE_PIPE_INFORMATION;
1011
1012 typedef struct _FILE_PIPE_LOCAL_INFORMATION
1013 {
1014 ULONG NamedPipeType;
1015 ULONG NamedPipeConfiguration;
1016 ULONG MaximumInstances;
1017 ULONG CurrentInstances;
1018 ULONG InboundQuota;
1019 ULONG ReadDataAvailable;
1020 ULONG OutboundQuota;
1021 ULONG WriteQuotaAvailable;
1022 ULONG NamedPipeState;
1023 ULONG NamedPipeEnd;
1024 } FILE_PIPE_LOCAL_INFORMATION, *PFILE_PIPE_LOCAL_INFORMATION;
1025
1026 typedef struct _FILE_PIPE_REMOTE_INFORMATION
1027 {
1028 LARGE_INTEGER CollectDataTime;
1029 ULONG MaximumCollectionCount;
1030 } FILE_PIPE_REMOTE_INFORMATION, *PFILE_PIPE_REMOTE_INFORMATION;
1031
1032 typedef struct _FILE_MAILSLOT_QUERY_INFORMATION
1033 {
1034 ULONG MaximumMessageSize;
1035 ULONG MailslotQuota;
1036 ULONG NextMessageSize;
1037 ULONG MessagesAvailable;
1038 LARGE_INTEGER ReadTimeout;
1039 } FILE_MAILSLOT_QUERY_INFORMATION, *PFILE_MAILSLOT_QUERY_INFORMATION;
1040
1041 typedef struct _FILE_MAILSLOT_SET_INFORMATION
1042 {
1043 LARGE_INTEGER ReadTimeout;
1044 } FILE_MAILSLOT_SET_INFORMATION, *PFILE_MAILSLOT_SET_INFORMATION;
1045
1046 typedef struct _FILE_BOTH_DIR_INFORMATION
1047 {
1048 ULONG NextEntryOffset;
1049 ULONG FileIndex;
1050 LARGE_INTEGER CreationTime;
1051 LARGE_INTEGER LastAccessTime;
1052 LARGE_INTEGER LastWriteTime;
1053 LARGE_INTEGER ChangeTime;
1054 LARGE_INTEGER EndOfFile;
1055 LARGE_INTEGER AllocationSize;
1056 ULONG FileAttributes;
1057 ULONG FileNameLength;
1058 ULONG EaSize;
1059 CCHAR ShortNameLength;
1060 WCHAR ShortName[12];
1061 WCHAR FileName[1];
1062 } FILE_BOTH_DIR_INFORMATION, *PFILE_BOTH_DIR_INFORMATION;
1063
1064 typedef struct _FILE_COMPLETION_INFORMATION
1065 {
1066 HANDLE Port;
1067 PVOID Key;
1068 } FILE_COMPLETION_INFORMATION, *PFILE_COMPLETION_INFORMATION;
1069
1070 typedef struct _FILE_LINK_INFORMATION
1071 {
1072 BOOLEAN ReplaceIfExists;
1073 HANDLE RootDirectory;
1074 ULONG FileNameLength;
1075 WCHAR FileName[1];
1076 } FILE_LINK_INFORMATION, *PFILE_LINK_INFORMATION;
1077
1078 typedef struct _FILE_NAME_INFORMATION
1079 {
1080 ULONG FileNameLength;
1081 WCHAR FileName[1];
1082 } FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION;
1083
1084 typedef struct _FILE_ALLOCATION_INFORMATION
1085 {
1086 LARGE_INTEGER AllocationSize;
1087 } FILE_ALLOCATION_INFORMATION, *PFILE_ALLOCATION_INFORMATION;
1088
1089 typedef struct _FILE_END_OF_FILE_INFORMATION
1090 {
1091 LARGE_INTEGER EndOfFile;
1092 } FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION;
1093
1094 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
1095 {
1096 LARGE_INTEGER ValidDataLength;
1097 } FILE_VALID_DATA_LENGTH_INFORMATION, *PFILE_VALID_DATA_LENGTH_INFORMATION;
1098
1099 /*
1100 * File System
1101 */
1102 typedef struct _FILE_FS_DEVICE_INFORMATION
1103 {
1104 DEVICE_TYPE DeviceType;
1105 ULONG Characteristics;
1106 } FILE_FS_DEVICE_INFORMATION, *PFILE_FS_DEVICE_INFORMATION;
1107
1108 typedef struct _FILE_FS_ATTRIBUTE_INFORMATION
1109 {
1110 ULONG FileSystemAttributes;
1111 ULONG MaximumComponentNameLength;
1112 ULONG FileSystemNameLength;
1113 WCHAR FileSystemName[1];
1114 } FILE_FS_ATTRIBUTE_INFORMATION, *PFILE_FS_ATTRIBUTE_INFORMATION;
1115
1116 typedef struct _FILE_FS_SIZE_INFORMATION
1117 {
1118 LARGE_INTEGER TotalAllocationUnits;
1119 LARGE_INTEGER AvailableAllocationUnits;
1120 ULONG SectorsPerAllocationUnit;
1121 ULONG BytesPerSector;
1122 } FILE_FS_SIZE_INFORMATION, *PFILE_FS_SIZE_INFORMATION;
1123
1124 typedef struct _FILE_FS_LABEL_INFORMATION
1125 {
1126 ULONG VolumeLabelLength;
1127 WCHAR VolumeLabel[1];
1128 } FILE_FS_LABEL_INFORMATION, *PFILE_FS_LABEL_INFORMATION;
1129
1130 typedef struct _FILE_FS_VOLUME_INFORMATION
1131 {
1132 LARGE_INTEGER VolumeCreationTime;
1133 ULONG VolumeSerialNumber;
1134 ULONG VolumeLabelLength;
1135 BOOLEAN SupportsObjects;
1136 WCHAR VolumeLabel[1];
1137 } FILE_FS_VOLUME_INFORMATION, *PFILE_FS_VOLUME_INFORMATION;
1138
1139 /*
1140 * Registry Key Value
1141 */
1142
1143 /* Class 0 */
1144 typedef struct _KEY_VALUE_ENTRY
1145 {
1146 PUNICODE_STRING ValueName;
1147 ULONG DataLength;
1148 ULONG DataOffset;
1149 ULONG Type;
1150 } KEY_VALUE_ENTRY, *PKEY_VALUE_ENTRY;
1151
1152 /* Class 1 */
1153 typedef struct _KEY_VALUE_PARTIAL_INFORMATION
1154 {
1155 ULONG TitleIndex;
1156 ULONG Type;
1157 ULONG DataLength;
1158 UCHAR Data[1];
1159 } KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION;
1160
1161 /* Class 2 */
1162 typedef struct _KEY_VALUE_BASIC_INFORMATION
1163 {
1164 ULONG TitleIndex;
1165 ULONG Type;
1166 ULONG NameLength;
1167 WCHAR Name[1];
1168 } KEY_VALUE_BASIC_INFORMATION, *PKEY_VALUE_BASIC_INFORMATION;
1169
1170 /* Class 3 */
1171 typedef struct _KEY_VALUE_FULL_INFORMATION
1172 {
1173 ULONG TitleIndex;
1174 ULONG Type;
1175 ULONG DataOffset;
1176 ULONG DataLength;
1177 ULONG NameLength;
1178 WCHAR Name[1];
1179 } KEY_VALUE_FULL_INFORMATION, *PKEY_VALUE_FULL_INFORMATION;
1180
1181 /*
1182 * Registry Key
1183 */
1184
1185 /* Class 0 */
1186 typedef struct _KEY_BASIC_INFORMATION
1187 {
1188 LARGE_INTEGER LastWriteTime;
1189 ULONG TitleIndex;
1190 ULONG NameLength;
1191 WCHAR Name[1];
1192 } KEY_BASIC_INFORMATION, *PKEY_BASIC_INFORMATION;
1193
1194 /* File Pipe Structures for the FSCTLs */
1195 typedef struct _FILE_PIPE_WAIT_FOR_BUFFER
1196 {
1197 LARGE_INTEGER Timeout;
1198 ULONG NameLength;
1199 BOOLEAN TimeoutSpecified;
1200 WCHAR Name[1];
1201 } FILE_PIPE_WAIT_FOR_BUFFER, *PFILE_PIPE_WAIT_FOR_BUFFER;
1202
1203 typedef struct _FILE_PIPE_PEEK_BUFFER
1204 {
1205 ULONG NamedPipeState;
1206 ULONG ReadDataAvailable;
1207 ULONG NumberOfMessages;
1208 ULONG MessageLength;
1209 CHAR Data[1];
1210 } FILE_PIPE_PEEK_BUFFER, *PFILE_PIPE_PEEK_BUFFER;
1211
1212 /* The Kerner/User Shared Data Structure */
1213 typedef struct _KUSER_SHARED_DATA
1214 {
1215 ULONG TickCountLowDeprecated;
1216 ULONG TickCountMultiplier;
1217 volatile KSYSTEM_TIME InterruptTime;
1218 volatile KSYSTEM_TIME SystemTime;
1219 volatile KSYSTEM_TIME TimeZoneBias;
1220 USHORT ImageNumberLow;
1221 USHORT ImageNumberHigh;
1222 WCHAR NtSystemRoot[260];
1223 ULONG MaxStackTraceDepth;
1224 ULONG CryptoExponent;
1225 ULONG TimeZoneId;
1226 ULONG LargePageMinimum;
1227 ULONG Reserved2[7];
1228 NT_PRODUCT_TYPE NtProductType;
1229 BOOLEAN ProductTypeIsValid;
1230 ULONG NtMajorVersion;
1231 ULONG NtMinorVersion;
1232 BOOLEAN ProcessorFeatures[PROCESSOR_FEATURE_MAX];
1233 ULONG Reserved1;
1234 ULONG Reserved3;
1235 volatile ULONG TimeSlip;
1236 ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture;
1237 LARGE_INTEGER SystemExpirationDate;
1238 ULONG SuiteMask;
1239 BOOLEAN KdDebuggerEnabled;
1240 volatile ULONG ActiveConsoleId;
1241 volatile ULONG DismountCount;
1242 ULONG ComPlusPackage;
1243 ULONG LastSystemRITEventTickCount;
1244 ULONG NumberOfPhysicalPages;
1245 BOOLEAN SafeBootMode;
1246 ULONG TraceLogging;
1247 ULONGLONG Fill0;
1248 ULONGLONG SystemCall[4];
1249 union {
1250 volatile KSYSTEM_TIME TickCount;
1251 volatile ULONG64 TickCountQuad;
1252 };
1253 } KUSER_SHARED_DATA, *PKUSER_SHARED_DATA;
1254
1255 /* Run-Time Library (RTL) Types */
1256 typedef struct _RTL_BITMAP
1257 {
1258 ULONG SizeOfBitMap;
1259 PULONG Buffer;
1260 } RTL_BITMAP, *PRTL_BITMAP;
1261
1262 typedef struct _RTL_BITMAP_RUN
1263 {
1264 ULONG StartingIndex;
1265 ULONG NumberOfBits;
1266 } RTL_BITMAP_RUN, *PRTL_BITMAP_RUN;
1267
1268 typedef struct _COMPRESSED_DATA_INFO
1269 {
1270 USHORT CompressionFormatAndEngine;
1271 UCHAR CompressionUnitShift;
1272 UCHAR ChunkShift;
1273 UCHAR ClusterShift;
1274 UCHAR Reserved;
1275 USHORT NumberOfChunks;
1276 ULONG CompressedChunkSizes[ANYSIZE_ARRAY];
1277 } COMPRESSED_DATA_INFO, *PCOMPRESSED_DATA_INFO;
1278
1279 typedef struct _GENERATE_NAME_CONTEXT
1280 {
1281 USHORT Checksum;
1282 BOOLEAN CheckSumInserted;
1283 UCHAR NameLength;
1284 WCHAR NameBuffer[8];
1285 ULONG ExtensionLength;
1286 WCHAR ExtensionBuffer[4];
1287 ULONG LastIndexValue;
1288 } GENERATE_NAME_CONTEXT, *PGENERATE_NAME_CONTEXT;
1289
1290 typedef struct _RTL_SPLAY_LINKS
1291 {
1292 struct _RTL_SPLAY_LINKS *Parent;
1293 struct _RTL_SPLAY_LINKS *LeftChild;
1294 struct _RTL_SPLAY_LINKS *RightChild;
1295 } RTL_SPLAY_LINKS, *PRTL_SPLAY_LINKS;
1296
1297 struct _RTL_AVL_TABLE;
1298 struct _RTL_GENERIC_TABLE;
1299
1300 typedef NTSTATUS
1301 (NTAPI *PRTL_AVL_MATCH_FUNCTION)(
1302 struct _RTL_AVL_TABLE *Table,
1303 PVOID UserData,
1304 PVOID MatchData
1305 );
1306
1307 typedef RTL_GENERIC_COMPARE_RESULTS
1308 (NTAPI *PRTL_AVL_COMPARE_ROUTINE) (
1309 struct _RTL_AVL_TABLE *Table,
1310 PVOID FirstStruct,
1311 PVOID SecondStruct
1312 );
1313
1314 typedef RTL_GENERIC_COMPARE_RESULTS
1315 (NTAPI *PRTL_GENERIC_COMPARE_ROUTINE) (
1316 struct _RTL_GENERIC_TABLE *Table,
1317 PVOID FirstStruct,
1318 PVOID SecondStruct
1319 );
1320
1321 typedef PVOID
1322 (NTAPI *PRTL_GENERIC_ALLOCATE_ROUTINE) (
1323 struct _RTL_GENERIC_TABLE *Table,
1324 LONG ByteSize
1325 );
1326
1327 typedef VOID
1328 (NTAPI *PRTL_GENERIC_FREE_ROUTINE) (
1329 struct _RTL_GENERIC_TABLE *Table,
1330 PVOID Buffer
1331 );
1332
1333 typedef VOID
1334 (NTAPI *PRTL_AVL_ALLOCATE_ROUTINE) (
1335 struct _RTL_AVL_TABLE *Table,
1336 LONG ByteSize
1337 );
1338
1339 typedef VOID
1340 (NTAPI *PRTL_AVL_FREE_ROUTINE) (
1341 struct _RTL_AVL_TABLE *Table,
1342 PVOID Buffer
1343 );
1344
1345 typedef struct _RTL_GENERIC_TABLE
1346 {
1347 PRTL_SPLAY_LINKS TableRoot;
1348 LIST_ENTRY InsertOrderList;
1349 PLIST_ENTRY OrderedPointer;
1350 ULONG WhichOrderedElement;
1351 ULONG NumberGenericTableElements;
1352 PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine;
1353 PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine;
1354 PRTL_GENERIC_FREE_ROUTINE FreeRoutine;
1355 PVOID TableContext;
1356 } RTL_GENERIC_TABLE, *PRTL_GENERIC_TABLE;
1357
1358 typedef struct _RTL_BALANCED_LINKS
1359 {
1360 struct _RTL_BALANCED_LINKS *Parent;
1361 struct _RTL_BALANCED_LINKS *LeftChild;
1362 struct _RTL_BALANCED_LINKS *RightChild;
1363 CHAR Balance;
1364 UCHAR Reserved[3];
1365 } RTL_BALANCED_LINKS, *PRTL_BALANCED_LINKS;
1366
1367 typedef struct _RTL_AVL_TABLE
1368 {
1369 RTL_BALANCED_LINKS BalancedRoot;
1370 PVOID OrderedPointer;
1371 ULONG WhichOrderedElement;
1372 ULONG NumberGenericTableElements;
1373 ULONG DepthOfTree;
1374 PRTL_BALANCED_LINKS RestartKey;
1375 ULONG DeleteCount;
1376 PRTL_AVL_COMPARE_ROUTINE CompareRoutine;
1377 PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine;
1378 PRTL_AVL_FREE_ROUTINE FreeRoutine;
1379 PVOID TableContext;
1380 } RTL_AVL_TABLE, *PRTL_AVL_TABLE;
1381
1382 typedef NTSTATUS
1383 (NTAPI *PRTL_QUERY_REGISTRY_ROUTINE)(
1384 IN PWSTR ValueName,
1385 IN ULONG ValueType,
1386 IN PVOID ValueData,
1387 IN ULONG ValueLength,
1388 IN PVOID Context,
1389 IN PVOID EntryContext
1390 );
1391
1392 typedef struct _RTL_QUERY_REGISTRY_TABLE
1393 {
1394 PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine;
1395 ULONG Flags;
1396 PWSTR Name;
1397 PVOID EntryContext;
1398 ULONG DefaultType;
1399 PVOID DefaultData;
1400 ULONG DefaultLength;
1401 } RTL_QUERY_REGISTRY_TABLE, *PRTL_QUERY_REGISTRY_TABLE;
1402
1403 typedef struct _UNICODE_PREFIX_TABLE_ENTRY
1404 {
1405 CSHORT NodeTypeCode;
1406 CSHORT NameLength;
1407 struct _UNICODE_PREFIX_TABLE_ENTRY *NextPrefixTree;
1408 struct _UNICODE_PREFIX_TABLE_ENTRY *CaseMatch;
1409 RTL_SPLAY_LINKS Links;
1410 PUNICODE_STRING Prefix;
1411 } UNICODE_PREFIX_TABLE_ENTRY, *PUNICODE_PREFIX_TABLE_ENTRY;
1412
1413 typedef struct _UNICODE_PREFIX_TABLE
1414 {
1415 CSHORT NodeTypeCode;
1416 CSHORT NameLength;
1417 PUNICODE_PREFIX_TABLE_ENTRY NextPrefixTree;
1418 PUNICODE_PREFIX_TABLE_ENTRY LastNextEntry;
1419 } UNICODE_PREFIX_TABLE, *PUNICODE_PREFIX_TABLE;
1420
1421 typedef NTSTATUS
1422 (NTAPI * PRTL_HEAP_COMMIT_ROUTINE)(
1423 IN PVOID Base,
1424 IN OUT PVOID *CommitAddress,
1425 IN OUT PSIZE_T CommitSize
1426 );
1427
1428 typedef struct _RTL_HEAP_PARAMETERS
1429 {
1430 ULONG Length;
1431 SIZE_T SegmentReserve;
1432 SIZE_T SegmentCommit;
1433 SIZE_T DeCommitFreeBlockThreshold;
1434 SIZE_T DeCommitTotalFreeThreshold;
1435 SIZE_T MaximumAllocationSize;
1436 SIZE_T VirtualMemoryThreshold;
1437 SIZE_T InitialCommit;
1438 SIZE_T InitialReserve;
1439 PRTL_HEAP_COMMIT_ROUTINE CommitRoutine;
1440 SIZE_T Reserved[2];
1441 } RTL_HEAP_PARAMETERS, *PRTL_HEAP_PARAMETERS;
1442
1443 typedef void *FAST_MUTEX;
1444 typedef void *PHANDLE_TABLE;
1445
1446 typedef OSVERSIONINFOW RTL_OSVERSIONINFOW;
1447 typedef LPOSVERSIONINFOW PRTL_OSVERSIONINFOW;
1448 typedef OSVERSIONINFOEXW RTL_OSVERSIONINFOEXW;
1449 typedef LPOSVERSIONINFOEXW PRTL_OSVERSIONINFOEXW;
1450
1451 #endif