1 /**
2  * This file has no copyright assigned and is placed in the Public Domain.
3  * This file is part of the mingw-w64 runtime package.
4  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
5  */
6 #ifndef _WINTERNL_
7 #define _WINTERNL_
8 
9 #include <windef.h>
10 
11 #ifndef NT_SUCCESS
12 #define NT_SUCCESS(status)	((NTSTATUS) (status) >= 0)
13 #endif
14 
15 #ifndef DEVICE_TYPE
16 #define DEVICE_TYPE ULONG
17 #endif
18 
19 #ifdef __cplusplus
20 extern "C" {
21 #endif
22 
23 #ifndef __UNICODE_STRING_DEFINED
24 #define __UNICODE_STRING_DEFINED
25   typedef struct _UNICODE_STRING {
26     USHORT Length;
27     USHORT MaximumLength;
28     PWSTR Buffer;
29   } UNICODE_STRING;
30 #endif
31 
32   typedef struct _PEB_LDR_DATA {
33     BYTE Reserved1[8];
34     PVOID Reserved2[3];
35     LIST_ENTRY InMemoryOrderModuleList;
36   } PEB_LDR_DATA,*PPEB_LDR_DATA;
37 
38   typedef struct _LDR_DATA_TABLE_ENTRY {
39     PVOID Reserved1[2];
40     LIST_ENTRY InMemoryOrderLinks;
41     PVOID Reserved2[2];
42     PVOID DllBase;
43     PVOID Reserved3[2];
44     UNICODE_STRING FullDllName;
45     BYTE Reserved4[8];
46     PVOID Reserved5[3];
47     __C89_NAMELESS union {
48       ULONG CheckSum;
49       PVOID Reserved6;
50     };
51     ULONG TimeDateStamp;
52   } LDR_DATA_TABLE_ENTRY,*PLDR_DATA_TABLE_ENTRY;
53 
54 typedef struct _RTL_USER_PROCESS_PARAMETERS {
55     BYTE Reserved1[16];
56     PVOID Reserved2[10];
57     UNICODE_STRING ImagePathName;
58     UNICODE_STRING CommandLine;
59   } RTL_USER_PROCESS_PARAMETERS,*PRTL_USER_PROCESS_PARAMETERS;
60 
61   /* This function pointer is undocumented and just valid for windows 2000.
62      Therefore I guess.  */
63   typedef VOID (NTAPI *PPS_POST_PROCESS_INIT_ROUTINE)(VOID);
64 
65   typedef struct _PEB {
66     BYTE Reserved1[2];
67     BYTE BeingDebugged;
68     BYTE Reserved2[1];
69     PVOID Reserved3[2];
70     PPEB_LDR_DATA Ldr;
71     PRTL_USER_PROCESS_PARAMETERS ProcessParameters;
72     PVOID Reserved4[3];
73     PVOID AtlThunkSListPtr;
74     PVOID Reserved5;
75     ULONG Reserved6;
76     PVOID Reserved7;
77     ULONG Reserved8;
78     ULONG AtlThunkSListPtr32;
79     PVOID Reserved9[45];
80     BYTE Reserved10[96];
81     PPS_POST_PROCESS_INIT_ROUTINE PostProcessInitRoutine;
82     BYTE Reserved11[128];
83     PVOID Reserved12[1];
84     ULONG SessionId;
85   } PEB,*PPEB;
86 
87   typedef struct _TEB {
88     PVOID Reserved1[12];
89     PPEB ProcessEnvironmentBlock;
90     PVOID Reserved2[399];
91     BYTE Reserved3[1952];
92     PVOID TlsSlots[64];
93     BYTE Reserved4[8];
94     PVOID Reserved5[26];
95     PVOID ReservedForOle;
96     PVOID Reserved6[4];
97     PVOID TlsExpansionSlots;
98   } TEB;
99 
100   typedef TEB *PTEB;
101   #if !defined (_NTDEF_) && !defined (_NTSTATUS_PSDK)
102   #define _NTSTATUS_PSDK
103   typedef LONG NTSTATUS, *PNTSTATUS;
104   #endif
105   typedef CONST char *PCSZ;
106 
107 #ifndef __STRING_DEFINED
108 #define __STRING_DEFINED
109   typedef struct _STRING {
110     USHORT Length;
111     USHORT MaximumLength;
112     PCHAR Buffer;
113   } STRING;
114 #endif
115 
116   typedef STRING *PSTRING;
117   typedef STRING ANSI_STRING;
118   typedef PSTRING PANSI_STRING;
119   typedef PSTRING PCANSI_STRING;
120   typedef STRING OEM_STRING;
121   typedef PSTRING POEM_STRING;
122   typedef CONST STRING *PCOEM_STRING;
123 
124   typedef UNICODE_STRING *PUNICODE_STRING;
125   typedef const UNICODE_STRING *PCUNICODE_STRING;
126 
127 #ifndef __OBJECT_ATTRIBUTES_DEFINED
128 #define __OBJECT_ATTRIBUTES_DEFINED
129   typedef struct _OBJECT_ATTRIBUTES {
130     ULONG Length;
131 #ifdef _WIN64
132     ULONG pad1;
133 #endif
134     HANDLE RootDirectory;
135     PUNICODE_STRING ObjectName;
136     ULONG Attributes;
137 #ifdef _WIN64
138     ULONG pad2;
139 #endif
140     PVOID SecurityDescriptor;
141     PVOID SecurityQualityOfService;
142   } OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;
143 #endif
144 
145 /* Values for the Attributes member */
146  #define OBJ_INHERIT             0x00000002
147  #define OBJ_PERMANENT           0x00000010
148  #define OBJ_EXCLUSIVE           0x00000020
149  #define OBJ_CASE_INSENSITIVE    0x00000040
150  #define OBJ_OPENIF              0x00000080
151  #define OBJ_OPENLINK            0x00000100
152  #define OBJ_KERNEL_HANDLE       0x00000200
153  #define OBJ_FORCE_ACCESS_CHECK  0x00000400
154  #define OBJ_VALID_ATTRIBUTES    0x000007F2
155 
156  /* Helper Macro */
157  #define InitializeObjectAttributes(p,n,a,r,s) { \
158    (p)->Length = sizeof(OBJECT_ATTRIBUTES); \
159    (p)->RootDirectory = (r); \
160    (p)->Attributes = (a); \
161    (p)->ObjectName = (n); \
162    (p)->SecurityDescriptor = (s); \
163    (p)->SecurityQualityOfService = NULL; \
164  }
165 
166   typedef struct _OBJECT_DATA_INFORMATION {
167     BOOLEAN InheritHandle;
168     BOOLEAN ProtectFromClose;
169   } OBJECT_DATA_INFORMATION, *POBJECT_DATA_INFORMATION;
170 
171   typedef struct _OBJECT_BASIC_INFORMATION {
172     ULONG  Attributes;
173     ACCESS_MASK  GrantedAccess;
174     ULONG  HandleCount;
175     ULONG  PointerCount;
176     ULONG  PagedPoolUsage;
177     ULONG  NonPagedPoolUsage;
178     ULONG  Reserved[3];
179     ULONG  NameInformationLength;
180     ULONG  TypeInformationLength;
181     ULONG  SecurityDescriptorLength;
182     LARGE_INTEGER  CreateTime;
183   } OBJECT_BASIC_INFORMATION, *POBJECT_BASIC_INFORMATION;
184 
185   typedef struct _OBJECT_NAME_INFORMATION {
186     UNICODE_STRING Name;
187   } OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION;
188 
189   typedef struct _OBJECT_TYPE_INFORMATION {
190     UNICODE_STRING TypeName;
191     ULONG TotalNumberOfObjects;
192     ULONG TotalNumberOfHandles;
193     ULONG TotalPagedPoolUsage;
194     ULONG TotalNonPagedPoolUsage;
195     ULONG TotalNamePoolUsage;
196     ULONG TotalHandleTableUsage;
197     ULONG HighWaterNumberOfObjects;
198     ULONG HighWaterNumberOfHandles;
199     ULONG HighWaterPagedPoolUsage;
200     ULONG HighWaterNonPagedPoolUsage;
201     ULONG HighWaterNamePoolUsage;
202     ULONG HighWaterHandleTableUsage;
203     ULONG InvalidAttributes;
204     GENERIC_MAPPING GenericMapping;
205     ULONG ValidAccessMask;
206     BOOLEAN SecurityRequired;
207     BOOLEAN MaintainHandleCount;
208     ULONG PoolType;
209     ULONG DefaultPagedPoolCharge;
210     ULONG DefaultNonPagedPoolCharge;
211   } OBJECT_TYPE_INFORMATION, *POBJECT_TYPE_INFORMATION;
212 
213   typedef struct _OBJECT_ALL_INFORMATION {
214     ULONG NumberOfObjects;
215     OBJECT_TYPE_INFORMATION ObjectTypeInformation[1];
216   }OBJECT_ALL_INFORMATION, *POBJECT_ALL_INFORMATION;
217 
218   typedef enum _FILE_INFORMATION_CLASS {
219     FileDirectoryInformation = 1,
220     FileFullDirectoryInformation,
221     FileBothDirectoryInformation,
222     FileBasicInformation,
223     FileStandardInformation,
224     FileInternalInformation,
225     FileEaInformation,
226     FileAccessInformation,
227     FileNameInformation,
228     FileRenameInformation,
229     FileLinkInformation,
230     FileNamesInformation,
231     FileDispositionInformation,
232     FilePositionInformation,
233     FileFullEaInformation,
234     FileModeInformation,
235     FileAlignmentInformation,
236     FileAllInformation,
237     FileAllocationInformation,
238     FileEndOfFileInformation,
239     FileAlternateNameInformation,
240     FileStreamInformation,
241     FilePipeInformation,
242     FilePipeLocalInformation,
243     FilePipeRemoteInformation,
244     FileMailslotQueryInformation,
245     FileMailslotSetInformation,
246     FileCompressionInformation,
247     FileObjectIdInformation,
248     FileCompletionInformation,
249     FileMoveClusterInformation,
250     FileQuotaInformation,
251     FileReparsePointInformation,
252     FileNetworkOpenInformation,
253     FileAttributeTagInformation,
254     FileTrackingInformation,
255     FileIdBothDirectoryInformation,
256     FileIdFullDirectoryInformation,
257     FileValidDataLengthInformation,
258     FileShortNameInformation = 40,
259     FileSfioReserveInformation = 44,
260     FileSfioVolumeInformation = 45,
261     FileHardLinkInformation = 46,
262     FileNormalizedNameInformation = 48,
263     FileIdGlobalTxDirectoryInformation = 50,
264     FileStandardLinkInformation = 54,
265     FileMaximumInformation
266   } FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;
267 
268   typedef struct _FILE_DIRECTORY_INFORMATION {
269     ULONG NextEntryOffset;
270     ULONG FileIndex;
271     LARGE_INTEGER CreationTime;
272     LARGE_INTEGER LastAccessTime;
273     LARGE_INTEGER LastWriteTime;
274     LARGE_INTEGER ChangeTime;
275     LARGE_INTEGER EndOfFile;
276     LARGE_INTEGER AllocationSize;
277     ULONG FileAttributes;
278     ULONG FileNameLength;
279     WCHAR FileName[ANYSIZE_ARRAY];
280   } FILE_DIRECTORY_INFORMATION, *PFILE_DIRECTORY_INFORMATION;
281 
282   typedef struct _FILE_FULL_DIR_INFORMATION {
283     ULONG NextEntryOffset;
284     ULONG FileIndex;
285     LARGE_INTEGER CreationTime;
286     LARGE_INTEGER LastAccessTime;
287     LARGE_INTEGER LastWriteTime;
288     LARGE_INTEGER ChangeTime;
289     LARGE_INTEGER EndOfFile;
290     LARGE_INTEGER AllocationSize;
291     ULONG FileAttributes;
292     ULONG FileNameLength;
293     ULONG EaSize;
294     WCHAR FileName[ANYSIZE_ARRAY];
295   } FILE_FULL_DIR_INFORMATION, *PFILE_FULL_DIR_INFORMATION;
296 
297   typedef struct _FILE_ID_FULL_DIR_INFORMATION {
298     ULONG NextEntryOffset;
299     ULONG FileIndex;
300     LARGE_INTEGER CreationTime;
301     LARGE_INTEGER LastAccessTime;
302     LARGE_INTEGER LastWriteTime;
303     LARGE_INTEGER ChangeTime;
304     LARGE_INTEGER EndOfFile;
305     LARGE_INTEGER AllocationSize;
306     ULONG FileAttributes;
307     ULONG FileNameLength;
308     ULONG EaSize;
309     LARGE_INTEGER FileId;
310     WCHAR FileName[ANYSIZE_ARRAY];
311   } FILE_ID_FULL_DIR_INFORMATION, *PFILE_ID_FULL_DIR_INFORMATION;
312 
313   typedef struct _FILE_BOTH_DIR_INFORMATION {
314     ULONG NextEntryOffset;
315 	 ULONG FileIndex;
316     LARGE_INTEGER CreationTime;
317     LARGE_INTEGER LastAccessTime;
318     LARGE_INTEGER LastWriteTime;
319     LARGE_INTEGER ChangeTime;
320     LARGE_INTEGER EndOfFile;
321     LARGE_INTEGER AllocationSize;
322     ULONG FileAttributes;
323     ULONG FileNameLength;
324     ULONG EaSize;
325     CHAR ShortNameLength;
326     WCHAR ShortName[12];
327     WCHAR FileName[ANYSIZE_ARRAY];
328   } FILE_BOTH_DIR_INFORMATION, *PFILE_BOTH_DIR_INFORMATION;
329 
330   typedef struct _FILE_ID_BOTH_DIR_INFORMATION {
331     ULONG NextEntryOffset;
332     ULONG FileIndex;
333     LARGE_INTEGER CreationTime;
334     LARGE_INTEGER LastAccessTime;
335     LARGE_INTEGER LastWriteTime;
336     LARGE_INTEGER ChangeTime;
337     LARGE_INTEGER EndOfFile;
338     LARGE_INTEGER AllocationSize;
339     ULONG FileAttributes;
340     ULONG FileNameLength;
341     ULONG EaSize;
342     CHAR ShortNameLength;
343     WCHAR ShortName[12];
344     LARGE_INTEGER FileId;
345     WCHAR FileName[ANYSIZE_ARRAY];
346   } FILE_ID_BOTH_DIR_INFORMATION, *PFILE_ID_BOTH_DIR_INFORMATION;
347 
348   /* Old names of dir info structures as (partially) used in Nebbitt's
349      Native API Reference.  Keep for backward compatibility. */
350   typedef struct _FILE_FULL_DIR_INFORMATION
351     FILE_FULL_DIRECTORY_INFORMATION, *PFILE_FULL_DIRECTORY_INFORMATION;
352   typedef struct _FILE_ID_FULL_DIR_INFORMATION
353     FILE_ID_FULL_DIRECTORY_INFORMATION, *PFILE_ID_FULL_DIRECTORY_INFORMATION;
354   typedef struct _FILE_BOTH_DIR_INFORMATION
355     FILE_BOTH_DIRECTORY_INFORMATION, *PFILE_BOTH_DIRECTORY_INFORMATION;
356   typedef struct _FILE_ID_BOTH_DIR_INFORMATION
357     FILE_ID_BOTH_DIRECTORY_INFORMATION, *PFILE_ID_BOTH_DIRECTORY_INFORMATION;
358 
359   typedef struct _FILE_BASIC_INFORMATION {
360     LARGE_INTEGER CreationTime;
361     LARGE_INTEGER LastAccessTime;
362     LARGE_INTEGER LastWriteTime;
363     LARGE_INTEGER ChangeTime;
364     ULONG FileAttributes;
365   } FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION;
366 
367   typedef struct _FILE_STANDARD_INFORMATION {
368     LARGE_INTEGER AllocationSize;
369     LARGE_INTEGER EndOfFile;
370     ULONG NumberOfLinks;
371     BOOLEAN DeletePending;
372     BOOLEAN Directory;
373   } FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION;
374 
375   typedef struct _FILE_INTERNAL_INFORMATION {
376     LARGE_INTEGER IndexNumber;
377   } FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION;
378 
379   typedef struct _FILE_EA_INFORMATION {
380     ULONG EaSize;
381   } FILE_EA_INFORMATION, *PFILE_EA_INFORMATION;
382 
383   typedef struct _FILE_ACCESS_INFORMATION {
384     ACCESS_MASK AccessFlags;
385   } FILE_ACCESS_INFORMATION, *PFILE_ACCESS_INFORMATION;
386 
387   typedef struct _FILE_LINK_INFORMATION {
388     BOOLEAN ReplaceIfExists;
389     HANDLE RootDirectory;
390     ULONG FileNameLength;
391     WCHAR FileName[1];
392   } FILE_LINK_INFORMATION, *PFILE_LINK_INFORMATION;
393 
394   typedef struct _FILE_NAME_INFORMATION {
395     ULONG FileNameLength;
396     WCHAR FileName[1];
397   } FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION;
398 
399   typedef struct _FILE_RENAME_INFORMATION {
400     BOOLEAN ReplaceIfExists;
401     HANDLE RootDirectory;
402     ULONG FileNameLength;
403     WCHAR FileName[1];
404   } FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION;
405 
406   typedef struct _FILE_NAMES_INFORMATION {
407     ULONG NextEntryOffset;
408     ULONG FileIndex;
409     ULONG FileNameLength;
410     WCHAR FileName[1];
411   } FILE_NAMES_INFORMATION, *PFILE_NAMES_INFORMATION;
412 
413   typedef struct _FILE_DISPOSITION_INFORMATION {
414     BOOLEAN DoDeleteFile;
415   } FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION;
416 
417   typedef struct _FILE_POSITION_INFORMATION {
418     LARGE_INTEGER CurrentByteOffset;
419   } FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION;
420 
421   typedef struct _FILE_ALIGNMENT_INFORMATION {
422     ULONG AlignmentRequirement;
423   } FILE_ALIGNMENT_INFORMATION, *PFILE_ALIGNMENT_INFORMATION;
424 
425   typedef struct _FILE_ALLOCATION_INFORMATION {
426     LARGE_INTEGER AllocationSize;
427   } FILE_ALLOCATION_INFORMATION, *PFILE_ALLOCATION_INFORMATION;
428 
429   typedef struct _FILE_END_OF_FILE_INFORMATION {
430     LARGE_INTEGER EndOfFile;
431   } FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION;
432 
433   typedef struct _FILE_NETWORK_OPEN_INFORMATION {
434     LARGE_INTEGER CreationTime;
435     LARGE_INTEGER LastAccessTime;
436     LARGE_INTEGER LastWriteTime;
437     LARGE_INTEGER ChangeTime;
438     LARGE_INTEGER AllocationSize;
439     LARGE_INTEGER EndOfFile;
440     ULONG FileAttributes;
441   } FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION;
442 
443   typedef struct _FILE_FULL_EA_INFORMATION {
444     ULONG NextEntryOffset;
445     UCHAR Flags;
446     UCHAR EaNameLength;
447     USHORT EaValueLength;
448     CHAR EaName[1];
449   } FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION;
450 
451   typedef struct _FILE_MODE_INFORMATION {
452     ULONG Mode;
453   } FILE_MODE_INFORMATION, *PFILE_MODE_INFORMATION;
454 
455   typedef struct _FILE_STREAM_INFORMATION {
456     ULONG NextEntryOffset;
457     ULONG StreamNameLength;
458     LARGE_INTEGER StreamSize;
459     LARGE_INTEGER StreamAllocationSize;
460     WCHAR StreamName[1];
461   } FILE_STREAM_INFORMATION, *PFILE_STREAM_INFORMATION;
462 
463   typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION {
464     ULONG FileAttributes;
465     ULONG ReparseTag;
466   } FILE_ATTRIBUTE_TAG_INFORMATION, *PFILE_ATTRIBUTE_TAG_INFORMATION;
467 
468   typedef struct _FILE_MAILSLOT_QUERY_INFORMATION {
469     ULONG MaximumMessageSize;
470     ULONG MailslotQuota;
471     ULONG NextMessageSize;
472     ULONG MessagesAvailable;
473     LARGE_INTEGER ReadTimeout;
474   } FILE_MAILSLOT_QUERY_INFORMATION, *PFILE_MAILSLOT_QUERY_INFORMATION;
475 
476   typedef struct _FILE_MAILSLOT_SET_INFORMATION {
477     LARGE_INTEGER ReadTimeout;
478   } FILE_MAILSLOT_SET_INFORMATION, *PFILE_MAILSLOT_SET_INFORMATION;
479 
480   typedef struct _FILE_PIPE_LOCAL_INFORMATION {
481     ULONG NamedPipeType;
482     ULONG NamedPipeConfiguration;
483     ULONG MaximumInstances;
484     ULONG CurrentInstances;
485     ULONG InboundQuota;
486     ULONG ReadDataAvailable;
487     ULONG OutboundQuota;
488     ULONG WriteQuotaAvailable;
489     ULONG NamedPipeState;
490     ULONG NamedPipeEnd;
491   } FILE_PIPE_LOCAL_INFORMATION, *PFILE_PIPE_LOCAL_INFORMATION;
492 
493   typedef struct _FILE_ALL_INFORMATION {
494     FILE_BASIC_INFORMATION     BasicInformation;
495     FILE_STANDARD_INFORMATION  StandardInformation;
496     FILE_INTERNAL_INFORMATION  InternalInformation;
497     FILE_EA_INFORMATION        EaInformation;
498     FILE_ACCESS_INFORMATION    AccessInformation;
499     FILE_POSITION_INFORMATION  PositionInformation;
500     FILE_MODE_INFORMATION      ModeInformation;
501     FILE_ALIGNMENT_INFORMATION AlignmentInformation;
502     FILE_NAME_INFORMATION      NameInformation;
503   } FILE_ALL_INFORMATION, *PFILE_ALL_INFORMATION;
504 
505   typedef enum _FSINFOCLASS {
506     FileFsVolumeInformation = 1,
507     FileFsLabelInformation,
508     FileFsSizeInformation,
509     FileFsDeviceInformation,
510     FileFsAttributeInformation,
511     FileFsControlInformation,
512     FileFsFullSizeInformation,
513     FileFsObjectIdInformation,
514     FileFsDriverPathInformation,
515     FileFsVolumeFlagsInformation,
516     FileFsMaximumInformation
517   } FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS;
518 
519   typedef struct _FILE_FS_VOLUME_INFORMATION {
520     LARGE_INTEGER VolumeCreationTime;
521     ULONG VolumeSerialNumber;
522     ULONG VolumeLabelLength;
523     BOOLEAN SupportsObjects;
524     WCHAR VolumeLabel[1];
525   } FILE_FS_VOLUME_INFORMATION, *PFILE_FS_VOLUME_INFORMATION;
526 
527   typedef struct _FILE_FS_LABEL_INFORMATION {
528     ULONG VolumeLabelLength;
529     WCHAR VolumeLabel[1];
530   } FILE_FS_LABEL_INFORMATION, *PFILE_FS_LABEL_INFORMATION;
531 
532   typedef struct _FILE_FS_SIZE_INFORMATION {
533     LARGE_INTEGER TotalAllocationUnits;
534     LARGE_INTEGER AvailableAllocationUnits;
535     ULONG SectorsPerAllocationUnit;
536     ULONG BytesPerSector;
537   } FILE_FS_SIZE_INFORMATION, *PFILE_FS_SIZE_INFORMATION;
538 
539   typedef struct _FILE_FS_DEVICE_INFORMATION {
540     DEVICE_TYPE DeviceType;
541     ULONG Characteristics;
542   } FILE_FS_DEVICE_INFORMATION, *PFILE_FS_DEVICE_INFORMATION;
543 
544   typedef struct _FILE_FS_ATTRIBUTE_INFORMATION {
545     ULONG FileSystemAttributes;
546     ULONG MaximumComponentNameLength;
547     ULONG FileSystemNameLength;
548     WCHAR FileSystemName[1];
549   } FILE_FS_ATTRIBUTE_INFORMATION, *PFILE_FS_ATTRIBUTE_INFORMATION;
550 
551   typedef struct _FILE_FS_FULL_SIZE_INFORMATION {
552     LARGE_INTEGER TotalAllocationUnits;
553     LARGE_INTEGER CallerAvailableAllocationUnits;
554     LARGE_INTEGER ActualAvailableAllocationUnits;
555     ULONG SectorsPerAllocationUnit;
556     ULONG BytesPerSector;
557   } FILE_FS_FULL_SIZE_INFORMATION, *PFILE_FS_FULL_SIZE_INFORMATION;
558 
559   typedef struct _FILE_FS_OBJECTID_INFORMATION {
560     UCHAR ObjectId[16];
561     UCHAR ExtendedInfo[48];
562   } FILE_FS_OBJECTID_INFORMATION, *PFILE_FS_OBJECTID_INFORMATION;
563 
564   typedef struct _IO_STATUS_BLOCK {
565     __C89_NAMELESS union {
566       NTSTATUS Status;
567       PVOID Pointer;
568     };
569     ULONG_PTR Information;
570   } IO_STATUS_BLOCK,*PIO_STATUS_BLOCK;
571 
572   typedef VOID (NTAPI *PIO_APC_ROUTINE)(PVOID ApcContext,PIO_STATUS_BLOCK IoStatusBlock,ULONG Reserved);
573 
574 #ifdef __ia64__
575   typedef struct _FRAME_POINTERS {
576     ULONGLONG MemoryStackFp;
577     ULONGLONG BackingStoreFp;
578   } FRAME_POINTERS,*PFRAME_POINTERS;
579 
580 #define UNWIND_HISTORY_TABLE_SIZE 12
581 
582   typedef struct _RUNTIME_FUNCTION {
583     ULONG BeginAddress;
584     ULONG EndAddress;
585     ULONG UnwindInfoAddress;
586   } RUNTIME_FUNCTION,*PRUNTIME_FUNCTION;
587 
588   typedef struct _UNWIND_HISTORY_TABLE_ENTRY {
589     ULONG64 ImageBase;
590     ULONG64 Gp;
591     PRUNTIME_FUNCTION FunctionEntry;
592   } UNWIND_HISTORY_TABLE_ENTRY,*PUNWIND_HISTORY_TABLE_ENTRY;
593 
594   typedef struct _UNWIND_HISTORY_TABLE {
595     ULONG Count;
596     UCHAR Search;
597     ULONG64 LowAddress;
598     ULONG64 HighAddress;
599     UNWIND_HISTORY_TABLE_ENTRY Entry[UNWIND_HISTORY_TABLE_SIZE];
600   } UNWIND_HISTORY_TABLE,*PUNWIND_HISTORY_TABLE;
601 #endif
602 
603   typedef struct _VM_COUNTERS {
604     SIZE_T PeakVirtualSize;
605     SIZE_T VirtualSize;
606     ULONG PageFaultCount;
607     SIZE_T PeakWorkingSetSize;
608     SIZE_T WorkingSetSize;
609     SIZE_T QuotaPeakPagedPoolUsage;
610     SIZE_T QuotaPagedPoolUsage;
611     SIZE_T QuotaPeakNonPagedPoolUsage;
612     SIZE_T QuotaNonPagedPoolUsage;
613     SIZE_T PagefileUsage;
614     SIZE_T PeakPagefileUsage;
615   } VM_COUNTERS, *PVM_COUNTERS;
616 
617   typedef enum _THREAD_STATE {
618     StateInitialized = 0,
619     StateReady, StateRunning, StateStandby, StateTerminated,
620     StateWait, StateTransition,
621     StateUnknown
622   } THREAD_STATE;
623 
624   typedef struct _CLIENT_ID {
625     HANDLE UniqueProcess;
626     HANDLE UniqueThread;
627   } CLIENT_ID, *PCLIENT_ID;
628 
629   typedef LONG KPRIORITY;
630 
631   typedef enum _KWAIT_REASON {
632     Executive = 0,
633     FreePage, PageIn, PoolAllocation, DelayExecution,
634     Suspended, UserRequest, WrExecutive, WrFreePage, WrPageIn,
635     WrPoolAllocation, WrDelayExecution, WrSuspended,
636     WrUserRequest, WrEventPair, WrQueue, WrLpcReceive,
637     WrLpcReply, WrVirtualMemory, WrPageOut, WrRendezvous,
638     Spare2, Spare3, Spare4, Spare5, Spare6, WrKernel,
639     MaximumWaitReason
640   } KWAIT_REASON;
641 
642   typedef struct _SYSTEM_THREADS
643   {
644     LARGE_INTEGER KernelTime;
645     LARGE_INTEGER UserTime;
646     LARGE_INTEGER CreateTime;
647     ULONG WaitTime;
648     PVOID StartAddress;
649     CLIENT_ID ClientId;
650     KPRIORITY Priority;
651     KPRIORITY BasePriority;
652     ULONG ContextSwitchCount;
653     THREAD_STATE State;
654     KWAIT_REASON WaitReason;
655   } SYSTEM_THREADS, *PSYSTEM_THREADS;
656 
657   typedef struct _PROCESS_BASIC_INFORMATION {
658     NTSTATUS ExitStatus;
659     PPEB PebBaseAddress;
660     KAFFINITY AffinityMask;
661     KPRIORITY BasePriority;
662     ULONG_PTR UniqueProcessId;
663     ULONG_PTR InheritedFromUniqueProcessId;
664   } PROCESS_BASIC_INFORMATION, *PPROCESS_BASIC_INFORMATION;
665 
666   typedef struct _KERNEL_USER_TIMES {
667     FILETIME CreateTime;
668     FILETIME ExitTime;
669     LARGE_INTEGER KernelTime;
670     LARGE_INTEGER UserTime;
671   } KERNEL_USER_TIMES, *PKERNEL_USER_TIMES;
672 
673   typedef struct _SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION {
674     LARGE_INTEGER IdleTime;
675     LARGE_INTEGER KernelTime;
676     LARGE_INTEGER UserTime;
677     LARGE_INTEGER Reserved1[2];
678     ULONG Reserved2;
679   } SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION,*PSYSTEM_PROCESSOR_PERFORMANCE_INFORMATION;
680 
681   typedef struct _SYSTEM_PROCESS_INFORMATION {
682     ULONG NextEntryOffset;
683     ULONG NumberOfThreads;
684     LARGE_INTEGER Reserved[3];
685     LARGE_INTEGER CreateTime;
686     LARGE_INTEGER UserTime;
687     LARGE_INTEGER KernelTime;
688     UNICODE_STRING ImageName;
689     KPRIORITY BasePriority;
690     HANDLE UniqueProcessId;
691     HANDLE InheritedFromUniqueProcessId;
692     ULONG HandleCount;
693     ULONG SessionId;
694     ULONG PageDirectoryBase;
695     VM_COUNTERS VirtualMemoryCounters;
696     SIZE_T PrivatePageCount;
697     IO_COUNTERS IoCounters;
698   } SYSTEM_PROCESS_INFORMATION,*PSYSTEM_PROCESS_INFORMATION;
699 
700   typedef struct _SYSTEM_REGISTRY_QUOTA_INFORMATION {
701     ULONG RegistryQuotaAllowed;
702     ULONG RegistryQuotaUsed;
703     PVOID Reserved1;
704   } SYSTEM_REGISTRY_QUOTA_INFORMATION,*PSYSTEM_REGISTRY_QUOTA_INFORMATION;
705 
706   typedef struct _SYSTEM_BASIC_INFORMATION {
707     BYTE Reserved1[4];
708     ULONG MaximumIncrement;
709     ULONG PhysicalPageSize;
710     ULONG NumberOfPhysicalPages;
711     ULONG LowestPhysicalPage;
712     ULONG HighestPhysicalPage;
713     ULONG AllocationGranularity;
714     ULONG_PTR LowestUserAddress;
715     ULONG_PTR HighestUserAddress;
716     ULONG_PTR ActiveProcessors;
717     CCHAR NumberOfProcessors;
718   } SYSTEM_BASIC_INFORMATION,*PSYSTEM_BASIC_INFORMATION;
719 
720   typedef struct _SYSTEM_PROCESSOR_INFORMATION {
721     USHORT ProcessorArchitecture;
722     USHORT ProcessorLevel;
723     USHORT ProcessorRevision;
724     USHORT Unknown;
725     ULONG FeatureBits;
726   } SYSTEM_PROCESSOR_INFORMATION, *PSYSTEM_PROCESSOR_INFORMATION;
727 
728   typedef struct _SYSTEM_TIMEOFDAY_INFORMATION {
729     LARGE_INTEGER BootTime;
730     LARGE_INTEGER CurrentTime;
731     LARGE_INTEGER TimeZoneBias;
732     ULONG CurrentTimeZoneId;
733     BYTE Reserved1[20];
734   } SYSTEM_TIMEOFDAY_INFORMATION,*PSYSTEM_TIMEOFDAY_INFORMATION;
735 
736   typedef struct _SYSTEM_PERFORMANCE_INFORMATION {
737     LARGE_INTEGER IdleTime;
738     LARGE_INTEGER ReadTransferCount;
739     LARGE_INTEGER WriteTransferCount;
740     LARGE_INTEGER OtherTransferCount;
741     ULONG ReadOperationCount;
742     ULONG WriteOperationCount;
743     ULONG OtherOperationCount;
744     ULONG AvailablePages;
745     ULONG TotalCommittedPages;
746     ULONG TotalCommitLimit;
747     ULONG PeakCommitment;
748     ULONG PageFaults;
749     ULONG WriteCopyFaults;
750     ULONG TransitionFaults;
751     ULONG CacheTransitionFaults;
752     ULONG DemandZeroFaults;
753     ULONG PagesRead;
754     ULONG PageReadIos;
755     ULONG CacheReads;
756     ULONG CacheIos;
757     ULONG PagefilePagesWritten;
758     ULONG PagefilePageWriteIos;
759     ULONG MappedFilePagesWritten;
760     ULONG MappedFilePageWriteIos;
761     ULONG PagedPoolUsage;
762     ULONG NonPagedPoolUsage;
763     ULONG PagedPoolAllocs;
764     ULONG PagedPoolFrees;
765     ULONG NonPagedPoolAllocs;
766     ULONG NonPagedPoolFrees;
767     ULONG TotalFreeSystemPtes;
768     ULONG SystemCodePage;
769     ULONG TotalSystemDriverPages;
770     ULONG TotalSystemCodePages;
771     ULONG SmallNonPagedLookasideListAllocateHits;
772     ULONG SmallPagedLookasideListAllocateHits;
773     ULONG Reserved3;
774     ULONG MmSystemCachePage;
775     ULONG PagedPoolPage;
776     ULONG SystemDriverPage;
777     ULONG FastReadNoWait;
778     ULONG FastReadWait;
779     ULONG FastReadResourceMiss;
780     ULONG FastReadNotPossible;
781     ULONG FastMdlReadNoWait;
782     ULONG FastMdlReadWait;
783     ULONG FastMdlReadResourceMiss;
784     ULONG FastMdlReadNotPossible;
785     ULONG MapDataNoWait;
786     ULONG MapDataWait;
787     ULONG MapDataNoWaitMiss;
788     ULONG MapDataWaitMiss;
789     ULONG PinMappedDataCount;
790     ULONG PinReadNoWait;
791     ULONG PinReadWait;
792     ULONG PinReadNoWaitMiss;
793     ULONG PinReadWaitMiss;
794     ULONG CopyReadNoWait;
795     ULONG CopyReadWait;
796     ULONG CopyReadNoWaitMiss;
797     ULONG CopyReadWaitMiss;
798     ULONG MdlReadNoWait;
799     ULONG MdlReadWait;
800     ULONG MdlReadNoWaitMiss;
801     ULONG MdlReadWaitMiss;
802     ULONG ReadAheadIos;
803     ULONG LazyWriteIos;
804     ULONG LazyWritePages;
805     ULONG DataFlushes;
806     ULONG DataPages;
807     ULONG ContextSwitches;
808     ULONG FirstLevelTbFills;
809     ULONG SecondLevelTbFills;
810     ULONG SystemCalls;
811   } SYSTEM_PERFORMANCE_INFORMATION, *PSYSTEM_PERFORMANCE_INFORMATION;
812 
813   typedef struct _SYSTEM_EXCEPTION_INFORMATION {
814     BYTE Reserved1[16];
815   } SYSTEM_EXCEPTION_INFORMATION,*PSYSTEM_EXCEPTION_INFORMATION;
816 
817   typedef struct _SYSTEM_LOOKASIDE_INFORMATION {
818     BYTE Reserved1[32];
819   } SYSTEM_LOOKASIDE_INFORMATION,*PSYSTEM_LOOKASIDE_INFORMATION;
820 
821   typedef struct _SYSTEM_INTERRUPT_INFORMATION {
822     BYTE Reserved1[24];
823   } SYSTEM_INTERRUPT_INFORMATION,*PSYSTEM_INTERRUPT_INFORMATION;
824 
825   typedef struct _SYSTEM_HANDLE_ENTRY {
826     ULONG OwnerPid;
827     BYTE ObjectType;
828     BYTE HandleFlags;
829     USHORT HandleValue;
830     PVOID ObjectPointer;
831     ULONG AccessMask;
832   } SYSTEM_HANDLE_ENTRY, *PSYSTEM_HANDLE_ENTRY;
833 
834   typedef struct _SYSTEM_HANDLE_INFORMATION {
835     ULONG Count;
836     SYSTEM_HANDLE_ENTRY Handle[1];
837   } SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION;
838 
839   typedef struct _SYSTEM_PAGEFILE_INFORMATION {
840     ULONG NextEntryOffset;
841     ULONG CurrentSize;
842     ULONG TotalUsed;
843     ULONG PeakUsed;
844     UNICODE_STRING FileName;
845   } SYSTEM_PAGEFILE_INFORMATION, *PSYSTEM_PAGEFILE_INFORMATION;
846 
847   typedef struct __PUBLIC_OBJECT_TYPE_INFORMATION {
848     UNICODE_STRING TypeName;
849     ULONG Reserved[22];
850   } PUBLIC_OBJECT_TYPE_INFORMATION, *PPUBLIC_OBJECT_TYPE_INFORMATION;
851 
852   typedef enum _PROCESSINFOCLASS {
853     ProcessBasicInformation,
854     ProcessQuotaLimits,
855     ProcessIoCounters,
856     ProcessVmCounters,
857     ProcessTimes,
858     ProcessBasePriority,
859     ProcessRaisePriority,
860     ProcessDebugPort,
861     ProcessExceptionPort,
862     ProcessAccessToken,
863     ProcessLdtInformation,
864     ProcessLdtSize,
865     ProcessDefaultHardErrorMode,
866     ProcessIoPortHandlers,
867     ProcessPooledUsageAndLimits,
868     ProcessWorkingSetWatch,
869     ProcessUserModeIOPL,
870     ProcessEnableAlignmentFaultFixup,
871     ProcessPriorityClass,
872     ProcessWx86Information,
873     ProcessHandleCount,
874     ProcessAffinityMask,
875     ProcessPriorityBoost,
876     ProcessDeviceMap,
877     ProcessSessionInformation,
878     ProcessForegroundInformation,
879     ProcessWow64Information,
880     ProcessImageFileName,
881     ProcessLUIDDeviceMapsEnabled,
882     ProcessBreakOnTermination,
883     ProcessDebugObjectHandle,
884     ProcessDebugFlags,
885     ProcessHandleTracing,
886     ProcessIoPriority,
887     ProcessExecuteFlags,
888     ProcessTlsInformation,
889     ProcessCookie,
890     ProcessImageInformation,
891     ProcessCycleTime,
892     ProcessPagePriority,
893     ProcessInstrumentationCallback,
894     ProcessThreadStackAllocation,
895     ProcessWorkingSetWatchEx,
896     ProcessImageFileNameWin32,
897     ProcessImageFileMapping,
898     ProcessAffinityUpdateMode,
899     ProcessMemoryAllocationMode,
900     ProcessGroupInformation,
901     ProcessTokenVirtualizationEnabled,
902     ProcessConsoleHostProcess,
903     ProcessWindowInformation,
904     MaxProcessInfoClass
905   } PROCESSINFOCLASS;
906 
907   typedef enum _THREADINFOCLASS {
908      ThreadBasicInformation,
909      ThreadTimes,
910      ThreadPriority,
911      ThreadBasePriority,
912      ThreadAffinityMask,
913      ThreadImpersonationToken,
914      ThreadDescriptorTableEntry,
915      ThreadEnableAlignmentFaultFixup,
916      ThreadEventPair,
917      ThreadQuerySetWin32StartAddress,
918      ThreadZeroTlsCell,
919      ThreadPerformanceCount,
920      ThreadAmILastThread,
921      ThreadIdealProcessor,
922      ThreadPriorityBoost,
923      ThreadSetTlsArrayAddress,
924      ThreadIsIoPending,
925      ThreadHideFromDebugger
926   } THREADINFOCLASS;
927 
928   typedef enum _SYSTEM_INFORMATION_CLASS {
929     SystemBasicInformation = 0,
930     SystemProcessorInformation = 1,
931     SystemPerformanceInformation = 2,
932     SystemTimeOfDayInformation = 3,
933     SystemProcessInformation = 5,
934     SystemProcessorPerformanceInformation = 8,
935     SystemHandleInformation = 16,
936     SystemPagefileInformation = 18,
937     SystemInterruptInformation = 23,
938     SystemExceptionInformation = 33,
939     SystemRegistryQuotaInformation = 37,
940     SystemLookasideInformation = 45
941   } SYSTEM_INFORMATION_CLASS;
942 
943   typedef enum _OBJECT_INFORMATION_CLASS {
944     ObjectBasicInformation,
945     ObjectNameInformation,
946     ObjectTypeInformation,
947     ObjectAllInformation,
948     ObjectDataInformation
949  } OBJECT_INFORMATION_CLASS, *POBJECT_INFORMATION_CLASS;
950 
951 #define INTERNAL_TS_ACTIVE_CONSOLE_ID (*((volatile ULONG*)(0x7ffe02d8)))
952 
953 #define RtlMoveMemory(Destination,Source,Length) memmove((Destination),(Source),(Length))
954 #define RtlFillMemory(Destination,Length,Fill) memset((Destination),(Fill),(Length))
955 #define RtlZeroMemory(Destination,Length) memset((Destination),0,(Length))
956 
957   NTSTATUS NTAPI NtClose(HANDLE Handle);
958   NTSTATUS NTAPI NtCreateFile(PHANDLE FileHandle,ACCESS_MASK DesiredAccess,POBJECT_ATTRIBUTES ObjectAttributes,PIO_STATUS_BLOCK IoStatusBlock,PLARGE_INTEGER AllocationSize,ULONG FileAttributes,ULONG ShareAccess,ULONG CreateDisposition,ULONG CreateOptions,PVOID EaBuffer,ULONG EaLength);
959   NTSTATUS NTAPI NtOpenFile(PHANDLE FileHandle,ACCESS_MASK DesiredAccess,POBJECT_ATTRIBUTES ObjectAttributes,PIO_STATUS_BLOCK IoStatusBlock,ULONG ShareAccess,ULONG OpenOptions);
960   NTSTATUS NTAPI NtFsControlFile(HANDLE FileHandle,HANDLE Event,PIO_APC_ROUTINE ApcRoutine,PVOID ApcContext,PIO_STATUS_BLOCK IoStatusBlock,ULONG IoControlCode,PVOID InputBuffer,ULONG InputBufferLength,PVOID OutputBuffer,ULONG OutputBufferLength);
961   NTSTATUS NTAPI NtDeviceIoControlFile(HANDLE FileHandle,HANDLE Event,PIO_APC_ROUTINE ApcRoutine,PVOID ApcContext,PIO_STATUS_BLOCK IoStatusBlock,ULONG IoControlCode,PVOID InputBuffer,ULONG InputBufferLength,PVOID OutputBuffer,ULONG OutputBufferLength);
962   NTSTATUS NTAPI NtWaitForSingleObject(HANDLE Handle,BOOLEAN Alertable,PLARGE_INTEGER Timeout);
963   BOOLEAN NTAPI RtlIsNameLegalDOS8Dot3(PUNICODE_STRING Name,POEM_STRING OemName,PBOOLEAN NameContainsSpaces);
964   ULONG NTAPI RtlNtStatusToDosError (NTSTATUS Status);
965   NTSTATUS NTAPI NtQueryInformationProcess(HANDLE ProcessHandle,PROCESSINFOCLASS ProcessInformationClass,PVOID ProcessInformation,ULONG ProcessInformationLength,PULONG ReturnLength);
966   NTSTATUS NTAPI NtQueryInformationThread(HANDLE ThreadHandle,THREADINFOCLASS ThreadInformationClass,PVOID ThreadInformation,ULONG ThreadInformationLength,PULONG ReturnLength);
967   NTSTATUS NTAPI NtQueryInformationFile(HANDLE hFile,PIO_STATUS_BLOCK io,PVOID ptr,ULONG len,FILE_INFORMATION_CLASS FileInformationClass);
968   NTSTATUS NTAPI NtQueryObject(HANDLE Handle,OBJECT_INFORMATION_CLASS ObjectInformationClass,PVOID ObjectInformation,ULONG ObjectInformationLength,PULONG ReturnLength);
969   NTSTATUS NTAPI NtQuerySystemInformation(SYSTEM_INFORMATION_CLASS SystemInformationClass,PVOID SystemInformation,ULONG SystemInformationLength,PULONG ReturnLength);
970   NTSTATUS NTAPI NtQuerySystemTime(PLARGE_INTEGER SystemTime);
971   NTSTATUS NTAPI NtQueryVolumeInformationFile(HANDLE hFile,PIO_STATUS_BLOCK io,PVOID ptr,ULONG len,FS_INFORMATION_CLASS FsInformationClass);
972   NTSTATUS NTAPI NtSetInformationFile(HANDLE hFile,PIO_STATUS_BLOCK io,PVOID ptr,ULONG len,FILE_INFORMATION_CLASS FileInformationClass);
973   NTSTATUS NTAPI NtSetInformationProcess(HANDLE ProcessHandle, PROCESSINFOCLASS ProcessInformationClass, PVOID ProcessInformation, ULONG ProcessInformationLength);
974   NTSTATUS NTAPI NtSetVolumeInformationFile(HANDLE hFile,PIO_STATUS_BLOCK io,PVOID ptr,ULONG len,FILE_INFORMATION_CLASS FileInformationClass);
975   NTSTATUS NTAPI RtlLocalTimeToSystemTime(PLARGE_INTEGER LocalTime,PLARGE_INTEGER SystemTime);
976   BOOLEAN NTAPI RtlTimeToSecondsSince1970(PLARGE_INTEGER Time,PULONG ElapsedSeconds);
977   VOID NTAPI RtlFreeAnsiString(PANSI_STRING AnsiString);
978   VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString);
979   VOID NTAPI RtlFreeOemString(POEM_STRING OemString);
980   VOID NTAPI RtlInitString (PSTRING DestinationString,PCSZ SourceString);
981   VOID NTAPI RtlInitAnsiString(PANSI_STRING DestinationString,PCSZ SourceString);
982   VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString,PCWSTR SourceString);
983   NTSTATUS NTAPI RtlAnsiStringToUnicodeString(PUNICODE_STRING DestinationString,PCANSI_STRING SourceString,BOOLEAN AllocateDestinationString);
984   NTSTATUS NTAPI RtlUnicodeStringToAnsiString(PANSI_STRING DestinationString,PCUNICODE_STRING SourceString,BOOLEAN AllocateDestinationString);
985   NTSTATUS NTAPI RtlUnicodeStringToOemString(POEM_STRING DestinationString,PCUNICODE_STRING SourceString,BOOLEAN AllocateDestinationString);
986   NTSTATUS NTAPI RtlUnicodeToMultiByteSize(PULONG BytesInMultiByteString,PWCH UnicodeString,ULONG BytesInUnicodeString);
987   NTSTATUS NTAPI RtlCharToInteger (PCSZ String,ULONG Base,PULONG Value);
988   NTSTATUS NTAPI RtlConvertSidToUnicodeString(PUNICODE_STRING UnicodeString,PSID Sid,BOOLEAN AllocateDestinationString);
989   ULONG NTAPI RtlUniform(PULONG Seed);
990   VOID NTAPI RtlUnwind (PVOID TargetFrame,PVOID TargetIp,PEXCEPTION_RECORD ExceptionRecord,PVOID ReturnValue);
991   BOOL NTAPI RtlDosPathNameToNtPathName_U(PCWSTR DosPathName, PUNICODE_STRING NtPathName, PCWSTR *NtFileNamePart, VOID *DirectoryInfo);
992   BOOLEAN NTAPI RtlPrefixUnicodeString(PCUNICODE_STRING String1, PCUNICODE_STRING String2, BOOLEAN CaseInSensitive);
993   BOOLEAN NTAPI RtlCreateUnicodeStringFromAsciiz(PUNICODE_STRING target, LPCSTR src);
994 #ifdef __ia64__
995   VOID RtlUnwind2(FRAME_POINTERS TargetFrame,PVOID TargetIp,PEXCEPTION_RECORD ExceptionRecord,PVOID ReturnValue,PCONTEXT ContextRecord);
996   VOID RtlUnwindEx(FRAME_POINTERS TargetFrame,PVOID TargetIp,PEXCEPTION_RECORD ExceptionRecord,PVOID ReturnValue,PCONTEXT ContextRecord,PUNWIND_HISTORY_TABLE HistoryTable);
997 #endif
998 
999   typedef NTSTATUS (NTAPI *PRTL_HEAP_COMMIT_ROUTINE) (PVOID Base, PVOID *CommitAddress, PSIZE_T CommitSize);
1000 
1001   typedef struct _RTL_HEAP_PARAMETERS {
1002     ULONG Length;
1003     SIZE_T SegmentReserve;
1004     SIZE_T SegmentCommit;
1005     SIZE_T DeCommitFreeBlockThreshold;
1006     SIZE_T DeCommitTotalFreeThreshold;
1007     SIZE_T MaximumAllocationSize;
1008     SIZE_T VirtualMemoryThreshold;
1009     SIZE_T InitialCommit;
1010     SIZE_T InitialReserve;
1011     PRTL_HEAP_COMMIT_ROUTINE CommitRoutine;
1012     SIZE_T Reserved[ 2 ];
1013   } RTL_HEAP_PARAMETERS, *PRTL_HEAP_PARAMETERS;
1014 
1015   BOOLEAN NTAPI RtlFreeHeap(PVOID HeapHandle, ULONG Flags, PVOID HeapBase);
1016   PVOID NTAPI RtlAllocateHeap(PVOID HeapHandle, ULONG Flags, SIZE_T Size);
1017   PVOID NTAPI RtlCreateHeap(ULONG Flags, PVOID HeapBase, SIZE_T ReserveSize, SIZE_T CommitSize, PVOID Lock, PRTL_HEAP_PARAMETERS Parameters);
1018   PVOID NTAPI RtlDestroyHeap(PVOID HeapHandle);
1019 
1020 #define LOGONID_CURRENT ((ULONG)-1)
1021 #define SERVERNAME_CURRENT ((HANDLE)NULL)
1022 
1023   typedef enum _WINSTATIONINFOCLASS {
1024     WinStationInformation = 8
1025   } WINSTATIONINFOCLASS;
1026 
1027   typedef struct _WINSTATIONINFORMATIONW {
1028     BYTE Reserved2[70];
1029     ULONG LogonId;
1030     BYTE Reserved3[1140];
1031   } WINSTATIONINFORMATIONW,*PWINSTATIONINFORMATIONW;
1032 
1033   typedef BOOLEAN (NTAPI *PWINSTATIONQUERYINFORMATIONW)(HANDLE,ULONG,WINSTATIONINFOCLASS,PVOID,ULONG,PULONG);
1034 
1035 #ifdef __cplusplus
1036 }
1037 #endif
1038 
1039 #endif
1040 
1041