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