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