Add HEAPENTRY32 and the related APIs.
[wine] / include / winternl.h
1 /*
2  * Internal NT APIs and data structures
3  *
4  * Copyright (C) the Wine project
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  */
20
21 #ifndef __WINE_WINTERNL_H
22 #define __WINE_WINTERNL_H
23
24 #include <windef.h>
25
26 #ifdef __cplusplus
27 extern "C" {
28 #endif /* defined(__cplusplus) */
29
30
31 /**********************************************************************
32  * Fundamental types and data structures
33  */
34
35 typedef LONG NTSTATUS;
36
37 typedef CONST char *PCSZ;
38
39 typedef short CSHORT;
40 typedef CSHORT *PCSHORT;
41
42 typedef struct _STRING {
43   USHORT Length;
44   USHORT MaximumLength;
45   PCHAR Buffer;
46 } STRING, *PSTRING;
47
48 typedef STRING ANSI_STRING;
49 typedef PSTRING PANSI_STRING;
50 typedef const STRING *PCANSI_STRING;
51
52 typedef STRING OEM_STRING;
53 typedef PSTRING POEM_STRING;
54 typedef const STRING *PCOEM_STRING;
55
56 typedef struct _UNICODE_STRING {
57   USHORT Length;        /* bytes */
58   USHORT MaximumLength; /* bytes */
59   PWSTR  Buffer;
60 } UNICODE_STRING, *PUNICODE_STRING;
61
62 typedef const UNICODE_STRING *PCUNICODE_STRING;
63
64 typedef struct _CLIENT_ID
65 {
66    HANDLE UniqueProcess;
67    HANDLE UniqueThread;
68 } CLIENT_ID, *PCLIENT_ID;
69
70 typedef struct _CURDIR
71 {
72     UNICODE_STRING DosPath;
73     PVOID Handle;
74 } CURDIR, *PCURDIR;
75
76 typedef struct RTL_DRIVE_LETTER_CURDIR
77 {
78     USHORT              Flags;
79     USHORT              Length;
80     ULONG               TimeStamp;
81     UNICODE_STRING      DosPath;
82 } RTL_DRIVE_LETTER_CURDIR, *PRTL_DRIVE_LETTER_CURDIR;
83
84 typedef struct tagRTL_BITMAP {
85     ULONG  SizeOfBitMap; /* Number of bits in the bitmap */
86     PULONG Buffer; /* Bitmap data, assumed sized to a DWORD boundary */
87 } RTL_BITMAP, *PRTL_BITMAP;
88
89 typedef const RTL_BITMAP *PCRTL_BITMAP;
90
91 typedef struct tagRTL_BITMAP_RUN {
92     ULONG StartingIndex; /* Bit position at which run starts */
93     ULONG NumberOfBits;  /* Size of the run in bits */
94 } RTL_BITMAP_RUN, *PRTL_BITMAP_RUN;
95
96 typedef const RTL_BITMAP_RUN *PCRTL_BITMAP_RUN;
97
98 typedef struct _RTL_USER_PROCESS_PARAMETERS
99 {
100     ULONG               AllocationSize;
101     ULONG               Size;
102     ULONG               Flags;
103     ULONG               DebugFlags;
104     HANDLE              ConsoleHandle;
105     ULONG               ConsoleFlags;
106     HANDLE              hStdInput;
107     HANDLE              hStdOutput;
108     HANDLE              hStdError;
109     CURDIR              CurrentDirectory;
110     UNICODE_STRING      DllPath;
111     UNICODE_STRING      ImagePathName;
112     UNICODE_STRING      CommandLine;
113     PWSTR               Environment;
114     ULONG               dwX;
115     ULONG               dwY;
116     ULONG               dwXSize;
117     ULONG               dwYSize;
118     ULONG               dwXCountChars;
119     ULONG               dwYCountChars;
120     ULONG               dwFillAttribute;
121     ULONG               dwFlags;
122     ULONG               wShowWindow;
123     UNICODE_STRING      WindowTitle;
124     UNICODE_STRING      Desktop;
125     UNICODE_STRING      ShellInfo;
126     UNICODE_STRING      RuntimeInfo;
127     RTL_DRIVE_LETTER_CURDIR DLCurrentDirectory[0x20];
128 } RTL_USER_PROCESS_PARAMETERS, *PRTL_USER_PROCESS_PARAMETERS;
129
130 /* value for Flags field (FIXME: not the correct name) */
131 #define PROCESS_PARAMS_FLAG_NORMALIZED 1
132
133 typedef struct _PEB_LDR_DATA
134 {
135     ULONG               Length;
136     BOOLEAN             Initialized;
137     PVOID               SsHandle;
138     LIST_ENTRY          InLoadOrderModuleList;
139     LIST_ENTRY          InMemoryOrderModuleList;
140     LIST_ENTRY          InInitializationOrderModuleList;
141 } PEB_LDR_DATA, *PPEB_LDR_DATA;
142
143 /***********************************************************************
144  * PEB data structure
145  */
146 typedef struct _PEB
147 {
148     BOOLEAN                      InheritedAddressSpace;             /*  00 */
149     BOOLEAN                      ReadImageFileExecOptions;          /*  01 */
150     BOOLEAN                      BeingDebugged;                     /*  02 */
151     BOOLEAN                      SpareBool;                         /*  03 */
152     HANDLE                       Mutant;                            /*  04 */
153     HMODULE                      ImageBaseAddress;                  /*  08 */
154     PPEB_LDR_DATA                LdrData;                           /*  0c */
155     RTL_USER_PROCESS_PARAMETERS *ProcessParameters;                 /*  10 */
156     PVOID                        SubSystemData;                     /*  14 */
157     HANDLE                       ProcessHeap;                       /*  18 */
158     PRTL_CRITICAL_SECTION        FastPebLock;                       /*  1c */
159     PVOID /*PPEBLOCKROUTINE*/    FastPebLockRoutine;                /*  20 */
160     PVOID /*PPEBLOCKROUTINE*/    FastPebUnlockRoutine;              /*  24 */
161     ULONG                        EnvironmentUpdateCount;            /*  28 */
162     PVOID                        KernelCallbackTable;               /*  2c */
163     PVOID                        EventLogSection;                   /*  30 */
164     PVOID                        EventLog;                          /*  34 */
165     PVOID /*PPEB_FREE_BLOCK*/    FreeList;                          /*  38 */
166     ULONG                        TlsExpansionCounter;               /*  3c */
167     PRTL_BITMAP                  TlsBitmap;                         /*  40 */
168     ULONG                        TlsBitmapBits[2];                  /*  44 */
169     PVOID                        ReadOnlySharedMemoryBase;          /*  4c */
170     PVOID                        ReadOnlySharedMemoryHeap;          /*  50 */
171     PVOID                       *ReadOnlyStaticServerData;          /*  54 */
172     PVOID                        AnsiCodePageData;                  /*  58 */
173     PVOID                        OemCodePageData;                   /*  5c */
174     PVOID                        UnicodeCaseTableData;              /*  60 */
175     ULONG                        NumberOfProcessors;                /*  64 */
176     ULONG                        NtGlobalFlag;                      /*  68 */
177     BYTE                         Spare2[4];                         /*  6c */
178     LARGE_INTEGER                CriticalSectionTimeout;            /*  70 */
179     ULONG                        HeapSegmentReserve;                /*  78 */
180     ULONG                        HeapSegmentCommit;                 /*  7c */
181     ULONG                        HeapDeCommitTotalFreeThreshold;    /*  80 */
182     ULONG                        HeapDeCommitFreeBlockThreshold;    /*  84 */
183     ULONG                        NumberOfHeaps;                     /*  88 */
184     ULONG                        MaximumNumberOfHeaps;              /*  8c */
185     PVOID                       *ProcessHeaps;                      /*  90 */
186     PVOID                        GdiSharedHandleTable;              /*  94 */
187     PVOID                        ProcessStarterHelper;              /*  98 */
188     PVOID                        GdiDCAttributeList;                /*  9c */
189     PVOID                        LoaderLock;                        /*  a0 */
190     ULONG                        OSMajorVersion;                    /*  a4 */
191     ULONG                        OSMinorVersion;                    /*  a8 */
192     ULONG                        OSBuildNumber;                     /*  ac */
193     ULONG                        OSPlatformId;                      /*  b0 */
194     ULONG                        ImageSubSystem;                    /*  b4 */
195     ULONG                        ImageSubSystemMajorVersion;        /*  b8 */
196     ULONG                        ImageSubSystemMinorVersion;        /*  bc */
197     ULONG                        ImageProcessAffinityMask;          /*  c0 */
198     ULONG                        GdiHandleBuffer[34];               /*  c4 */
199     ULONG                        PostProcessInitRoutine;            /* 14c */
200     ULONG                        TlsExpansionBitmap;                /* 150 */
201     ULONG                        TlsExpansionBitmapBits[32];        /* 154 */
202     ULONG                        SessionId;                         /* 1d4 */
203 } PEB, *PPEB;
204
205
206 /***********************************************************************
207  * TEB data structure
208  */
209 #if defined(_NTSYSTEM_) || defined(_KERNEL32_)  /* hack, should go away */
210 # define WINE_NO_TEB
211 #endif
212
213 #ifndef WINE_NO_TEB  /* don't define TEB if included from thread.h */
214 # ifndef WINE_TEB_DEFINED
215 # define WINE_TEB_DEFINED
216 typedef struct _TEB
217 {
218     NT_TIB          Tib;                        /* 000 */
219     PVOID           EnvironmentPointer;         /* 01c */
220     CLIENT_ID       ClientId;                   /* 020 */
221     PVOID           ActiveRpcHandle;            /* 028 */
222     PVOID           ThreadLocalStoragePointer;  /* 02c */
223     PPEB            Peb;                        /* 030 */
224     ULONG           LastErrorValue;             /* 034 */
225     BYTE            __pad038[140];              /* 038 */
226     ULONG           CurrentLocale;              /* 0c4 */
227     BYTE            __pad0c8[1752];             /* 0c8 */
228     PVOID           Reserved2[278];             /* 7a0 */
229     UNICODE_STRING  StaticUnicodeString;        /* bf8 used by advapi32 */
230     WCHAR           StaticUnicodeBuffer[261];   /* c00 used by advapi32 */
231     PVOID           DeallocationStack;          /* e0c */
232     PVOID           TlsSlots[64];               /* e10 */
233     LIST_ENTRY      TlsLinks;                   /* f10 */
234     PVOID           Reserved4[26];              /* f18 */
235     PVOID           ReservedForOle;             /* f80 Windows 2000 only */
236     PVOID           Reserved5[4];               /* f84 */
237     PVOID           TlsExpansionSlots;          /* f94 */
238 } TEB, *PTEB;
239 # endif /* WINE_TEB_DEFINED */
240 #endif  /* WINE_NO_TEB */
241
242 /***********************************************************************
243  * Enums
244  */
245
246 typedef enum _FILE_INFORMATION_CLASS {
247     FileDirectoryInformation = 1,
248     FileFullDirectoryInformation,
249     FileBothDirectoryInformation,
250     FileBasicInformation,
251     FileStandardInformation,
252     FileInternalInformation,
253     FileEaInformation,
254     FileAccessInformation,
255     FileNameInformation,
256     FileRenameInformation,
257     FileLinkInformation,
258     FileNamesInformation,
259     FileDispositionInformation,
260     FilePositionInformation,
261     FileFullEaInformation,
262     FileModeInformation,
263     FileAlignmentInformation,
264     FileAllInformation,
265     FileAllocationInformation,
266     FileEndOfFileInformation,
267     FileAlternateNameInformation,
268     FileStreamInformation,
269     FilePipeInformation,
270     FilePipeLocalInformation,
271     FilePipeRemoteInformation,
272     FileMailslotQueryInformation,
273     FileMailslotSetInformation,
274     FileCompressionInformation,
275     FileObjectIdInformation,
276     FileCompletionInformation,
277     FileMoveClusterInformation,
278     FileQuotaInformation,
279     FileReparsePointInformation,
280     FileNetworkOpenInformation,
281     FileAttributeTagInformation,
282     FileTrackingInformation,
283     FileMaximumInformation
284 } FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;
285
286 typedef struct _FILE_DIRECTORY_INFORMATION {
287     ULONG               NextEntryOffset;
288     ULONG               FileIndex;
289     LARGE_INTEGER       CreationTime;
290     LARGE_INTEGER       LastAccessTime;
291     LARGE_INTEGER       LastWriteTime;
292     LARGE_INTEGER       ChangeTime;
293     LARGE_INTEGER       EndOfFile;
294     LARGE_INTEGER       AllocationSize;
295     ULONG               FileAttributes;
296     ULONG               FileNameLength;
297     WCHAR               FileName[ANYSIZE_ARRAY];
298 } FILE_DIRECTORY_INFORMATION, *PFILE_DIRECTORY_INFORMATION;
299
300 typedef struct _FILE_FULL_DIRECTORY_INFORMATION {
301     ULONG               NextEntryOffset;
302     ULONG               FileIndex;
303     LARGE_INTEGER       CreationTime;
304     LARGE_INTEGER       LastAccessTime;
305     LARGE_INTEGER       LastWriteTime;
306     LARGE_INTEGER       ChangeTime;
307     LARGE_INTEGER       EndOfFile;
308     LARGE_INTEGER       AllocationSize;
309     ULONG               FileAttributes;
310     ULONG               FileNameLength;
311     ULONG               EaSize;
312     WCHAR               FileName[ANYSIZE_ARRAY];
313 } FILE_FULL_DIRECTORY_INFORMATION, *PFILE_FULL_DIRECTORY_INFORMATION,
314   FILE_FULL_DIR_INFORMATION, *PFILE_FULL_DIR_INFORMATION;
315
316 typedef struct _FILE_BOTH_DIRECTORY_INFORMATION {
317     ULONG               NextEntryOffset;
318     ULONG               FileIndex;
319     LARGE_INTEGER       CreationTime;
320     LARGE_INTEGER       LastAccessTime;
321     LARGE_INTEGER       LastWriteTime;
322     LARGE_INTEGER       ChangeTime;
323     LARGE_INTEGER       EndOfFile;
324     LARGE_INTEGER       AllocationSize;
325     ULONG               FileAttributes;
326     ULONG               FileNameLength;
327     ULONG               EaSize;
328     CHAR                ShortNameLength;
329     WCHAR               ShortName[12];
330     WCHAR               FileName[ANYSIZE_ARRAY];
331 } FILE_BOTH_DIRECTORY_INFORMATION, *PFILE_BOTH_DIRECTORY_INFORMATION,
332   FILE_BOTH_DIR_INFORMATION, *PFILE_BOTH_DIR_INFORMATION;
333
334 typedef struct _FILE_BASIC_INFORMATION {
335     LARGE_INTEGER CreationTime;
336     LARGE_INTEGER LastAccessTime;
337     LARGE_INTEGER LastWriteTime;
338     LARGE_INTEGER ChangeTime;
339     ULONG FileAttributes;
340 } FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION;
341
342 typedef struct _FILE_STANDARD_INFORMATION {
343     LARGE_INTEGER AllocationSize;
344     LARGE_INTEGER EndOfFile;
345     ULONG NumberOfLinks;
346     BOOLEAN DeletePending;
347     BOOLEAN Directory;
348 } FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION;
349
350 typedef struct _FILE_INTERNAL_INFORMATION {
351     LARGE_INTEGER IndexNumber;
352 } FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION;
353
354 typedef struct _FILE_EA_INFORMATION {
355     ULONG EaSize;
356 } FILE_EA_INFORMATION, *PFILE_EA_INFORMATION;
357
358 typedef struct _FILE_ACCESS_INFORMATION {
359     ACCESS_MASK AccessFlags;
360 } FILE_ACCESS_INFORMATION, *PFILE_ACCESS_INFORMATION;
361
362 typedef struct _FILE_NAME_INFORMATION {
363     ULONG FileNameLength;
364     WCHAR FileName[1];
365 } FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION;
366
367 typedef struct _FILE_RENAME_INFORMATION {
368     BOOLEAN Replace;
369     HANDLE RootDir;
370     ULONG FileNameLength;
371     WCHAR FileName[1];
372 } FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION;
373
374 typedef struct _FILE_NAMES_INFORMATION {
375     ULONG NextEntryOffset;
376     ULONG FileIndex;
377     ULONG FileNameLength;
378     WCHAR FileName[1];
379 } FILE_NAMES_INFORMATION, *PFILE_NAMES_INFORMATION;
380
381 typedef struct _FILE_DISPOSITION_INFORMATION {
382     BOOLEAN DoDeleteFile;
383 } FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION;
384
385 typedef struct _FILE_POSITION_INFORMATION {
386     LARGE_INTEGER CurrentByteOffset;
387 } FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION;
388
389 typedef struct _FILE_ALIGNMENT_INFORMATION {
390     ULONG AlignmentRequirement;
391 } FILE_ALIGNMENT_INFORMATION, *PFILE_ALIGNMENT_INFORMATION;
392
393 typedef struct _FILE_ALLOCATION_INFORMATION {
394     LARGE_INTEGER AllocationSize;
395 } FILE_ALLOCATION_INFORMATION, *PFILE_ALLOCATION_INFORMATION;
396
397 typedef struct _FILE_END_OF_FILE_INFORMATION {
398     LARGE_INTEGER EndOfFile;
399 } FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION;
400
401 typedef struct _FILE_NETWORK_OPEN_INFORMATION {
402     LARGE_INTEGER CreationTime;
403     LARGE_INTEGER LastAccessTime;
404     LARGE_INTEGER LastWriteTime;
405     LARGE_INTEGER ChangeTime;
406     LARGE_INTEGER AllocationSize;
407     LARGE_INTEGER EndOfFile;
408     ULONG FileAttributes;
409 } FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION;
410
411 typedef struct _FILE_FULL_EA_INFORMATION {
412     ULONG NextEntryOffset;
413     UCHAR Flags;
414     UCHAR EaNameLength;
415     USHORT EaValueLength;
416     CHAR EaName[1];
417 } FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION;
418
419 typedef struct _FILE_MODE_INFORMATION {
420     ULONG Mode;
421 } FILE_MODE_INFORMATION, *PFILE_MODE_INFORMATION;
422
423 typedef struct _FILE_STREAM_INFORMATION
424 {
425     ULONG NextEntryOffset;
426     ULONG StreamNameLength;
427     LARGE_INTEGER StreamSize;
428     LARGE_INTEGER StreamAllocationSize;
429     WCHAR StreamName[1];
430 } FILE_STREAM_INFORMATION, *PFILE_STREAM_INFORMATION;
431
432 typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION
433 {
434     ULONG FileAttributes;
435     ULONG ReparseTag;
436 } FILE_ATTRIBUTE_TAG_INFORMATION, *PFILE_ATTRIBUTE_TAG_INFORMATION;
437
438 typedef struct _FILE_ALL_INFORMATION
439 {
440     FILE_BASIC_INFORMATION     BasicInformation;
441     FILE_STANDARD_INFORMATION  StandardInformation;
442     FILE_INTERNAL_INFORMATION  InternalInformation;
443     FILE_EA_INFORMATION        EaInformation;
444     FILE_ACCESS_INFORMATION    AccessInformation;
445     FILE_POSITION_INFORMATION  PositionInformation;
446     FILE_MODE_INFORMATION      ModeInformation;
447     FILE_ALIGNMENT_INFORMATION AlignmentInformation;
448     FILE_NAME_INFORMATION      NameInformation;
449 } FILE_ALL_INFORMATION, *PFILE_ALL_INFORMATION;
450
451 typedef enum _FSINFOCLASS {
452     FileFsVolumeInformation = 1,
453     FileFsLabelInformation,
454     FileFsSizeInformation,
455     FileFsDeviceInformation,
456     FileFsAttributeInformation,
457     FileFsControlInformation,
458     FileFsFullSizeInformation,
459     FileFsObjectIdInformation,
460     FileFsMaximumInformation
461 } FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS;
462
463 typedef enum _KEY_INFORMATION_CLASS {
464     KeyBasicInformation,
465     KeyNodeInformation,
466     KeyFullInformation
467 } KEY_INFORMATION_CLASS;
468
469 typedef enum _KEY_VALUE_INFORMATION_CLASS {
470     KeyValueBasicInformation,
471     KeyValueFullInformation,
472     KeyValuePartialInformation,
473     KeyValueFullInformationAlign64,
474     KeyValuePartialInformationAlign64
475 } KEY_VALUE_INFORMATION_CLASS;
476
477 typedef enum _OBJECT_INFORMATION_CLASS {
478     ObjectBasicInformation,
479     ObjectNameInformation,
480     ObjectTypeInformation,
481     ObjectAllInformation,
482     ObjectDataInformation
483 } OBJECT_INFORMATION_CLASS, *POBJECT_INFORMATION_CLASS;
484
485 typedef enum _PROCESSINFOCLASS {
486     ProcessBasicInformation = 0,
487     ProcessQuotaLimits = 1,
488     ProcessIoCounters = 2,
489     ProcessVmCounters = 3,
490     ProcessTimes = 4,
491     ProcessBasePriority = 5,
492     ProcessRaisePriority = 6,
493     ProcessDebugPort = 7,
494     ProcessExceptionPort = 8,
495     ProcessAccessToken = 9,
496     ProcessLdtInformation = 10,
497     ProcessLdtSize = 11,
498     ProcessDefaultHardErrorMode = 12,
499     ProcessIoPortHandlers = 13,
500     ProcessPooledUsageAndLimits = 14,
501     ProcessWorkingSetWatch = 15,
502     ProcessUserModeIOPL = 16,
503     ProcessEnableAlignmentFaultFixup = 17,
504     ProcessPriorityClass = 18,
505     ProcessWx86Information = 19,
506     ProcessHandleCount = 20,
507     ProcessAffinityMask = 21,
508     ProcessPriorityBoost = 22,
509     ProcessDeviceMap = 23,
510     ProcessSessionInformation = 24,
511     ProcessForegroundInformation = 25,
512     ProcessWow64Information = 26,
513     MaxProcessInfoClass
514 } PROCESSINFOCLASS;
515
516 typedef enum _SECTION_INHERIT {
517     ViewShare = 1,
518     ViewUnmap = 2
519 } SECTION_INHERIT;
520
521 typedef enum _SYSTEM_INFORMATION_CLASS {
522     SystemBasicInformation = 0,
523     Unknown1,
524     SystemPerformanceInformation = 2,
525     SystemTimeOfDayInformation = 3, /* was SystemTimeInformation */
526     Unknown4,
527     SystemProcessInformation = 5,
528     Unknown6,
529     Unknown7,
530     SystemProcessorPerformanceInformation = 8,
531     Unknown9,
532     Unknown10,
533     SystemDriverInformation,
534     Unknown12,
535     Unknown13,
536     Unknown14,
537     Unknown15,
538     SystemHandleList,
539     Unknown17,
540     Unknown18,
541     Unknown19,
542     Unknown20,
543     SystemCacheInformation,
544     Unknown22,
545     SystemInterruptInformation = 23,
546     SystemDpcBehaviourInformation = 24,
547     SystemFullMemoryInformation = 25,
548     SystemNotImplemented6 = 25,
549     SystemLoadImage = 26,
550     SystemUnloadImage = 27,
551     SystemTimeAdjustmentInformation = 28,
552     SystemTimeAdjustment = 28,
553     SystemSummaryMemoryInformation = 29,
554     SystemNotImplemented7 = 29,
555     SystemNextEventIdInformation = 30,
556     SystemNotImplemented8 = 30,
557     SystemEventIdsInformation = 31,
558     SystemCrashDumpInformation = 32,
559     SystemExceptionInformation = 33,
560     SystemCrashDumpStateInformation = 34,
561     SystemKernelDebuggerInformation = 35,
562     SystemContextSwitchInformation = 36,
563     SystemRegistryQuotaInformation = 37,
564     SystemCurrentTimeZoneInformation = 44,
565     SystemTimeZoneInformation = 44,
566     SystemLookasideInformation = 45,
567     SystemSetTimeSlipEvent = 46,
568     SystemCreateSession = 47,
569     SystemDeleteSession = 48,
570     SystemInvalidInfoClass4 = 49,
571     SystemRangeStartInformation = 50,
572     SystemVerifierInformation = 51,
573     SystemAddVerifier = 52,
574     SystemSessionProcessesInformation   = 53,
575     SystemInformationClassMax
576 } SYSTEM_INFORMATION_CLASS, *PSYSTEM_INFORMATION_CLASS;
577
578 typedef enum _TIMER_TYPE {
579     NotificationTimer,
580     SynchronizationTimer
581 } TIMER_TYPE;
582
583 typedef enum _THREADINFOCLASS {
584     ThreadBasicInformation,
585     ThreadTimes,
586     ThreadPriority,
587     ThreadBasePriority,
588     ThreadAffinityMask,
589     ThreadImpersonationToken,
590     ThreadDescriptorTableEntry,
591     ThreadEnableAlignmentFaultFixup,
592     ThreadEventPair_Reusable,
593     ThreadQuerySetWin32StartAddress,
594     ThreadZeroTlsCell,
595     ThreadPerformanceCount,
596     ThreadAmILastThread,
597     ThreadIdealProcessor,
598     ThreadPriorityBoost,
599     ThreadSetTlsArrayAddress,
600     ThreadIsIoPending,
601     MaxThreadInfoClass
602 } THREADINFOCLASS;
603
604 typedef struct _THREAD_BASIC_INFORMATION
605 {
606     NTSTATUS  ExitStatus;
607     PVOID     TebBaseAddress;
608     CLIENT_ID ClientId;
609     ULONG     AffinityMask;
610     LONG      Priority;
611     LONG      BasePriority;
612 } THREAD_BASIC_INFORMATION, *PTHREAD_BASIC_INFORMATION;
613
614
615 typedef enum _WINSTATIONINFOCLASS {
616     WinStationInformation = 8
617 } WINSTATIONINFOCLASS;
618
619 typedef enum
620 {
621     MemoryBasicInformation = 0
622 } MEMORY_INFORMATION_CLASS;
623
624 /* return type of RtlDetermineDosPathNameType_U (FIXME: not the correct names) */
625 typedef enum
626 {
627     INVALID_PATH = 0,
628     UNC_PATH,              /* "//foo" */
629     ABSOLUTE_DRIVE_PATH,   /* "c:/foo" */
630     RELATIVE_DRIVE_PATH,   /* "c:foo" */
631     ABSOLUTE_PATH,         /* "/foo" */
632     RELATIVE_PATH,         /* "foo" */
633     DEVICE_PATH,           /* "//./foo" */
634     UNC_DOT_PATH           /* "//." */
635 } DOS_PATHNAME_TYPE;
636
637 /***********************************************************************
638  * IA64 specific types and data structures
639  */
640
641 #ifdef __ia64__
642
643 typedef struct _FRAME_POINTERS {
644   ULONGLONG MemoryStackFp;
645   ULONGLONG BackingStoreFp;
646 } FRAME_POINTERS, *PFRAME_POINTERS;
647
648 #define UNWIND_HISTORY_TABLE_SIZE 12
649
650 typedef struct _RUNTIME_FUNCTION {
651   ULONG BeginAddress;
652   ULONG EndAddress;
653   ULONG UnwindInfoAddress;
654 } RUNTIME_FUNCTION, *PRUNTIME_FUNCTION;
655
656 typedef struct _UNWIND_HISTORY_TABLE_ENTRY {
657   ULONG64 ImageBase;
658   ULONG64 Gp;
659   PRUNTIME_FUNCTION FunctionEntry;
660 } UNWIND_HISTORY_TABLE_ENTRY, *PUNWIND_HISTORY_TABLE_ENTRY;
661
662 typedef struct _UNWIND_HISTORY_TABLE {
663   ULONG Count;
664   UCHAR Search;
665   ULONG64 LowAddress;
666   ULONG64 HighAddress;
667   UNWIND_HISTORY_TABLE_ENTRY Entry[UNWIND_HISTORY_TABLE_SIZE];
668 } UNWIND_HISTORY_TABLE, *PUNWIND_HISTORY_TABLE;
669
670 #endif /* defined(__ia64__) */
671
672 /***********************************************************************
673  * Types and data structures
674  */
675
676 /* This is used by NtQuerySystemInformation */
677 /* FIXME: Isn't THREAD_INFO and THREADINFO the same structure? */
678 typedef struct {
679     FILETIME    ftKernelTime;
680     FILETIME    ftUserTime;
681     FILETIME    ftCreateTime;
682     DWORD       dwTickCount;
683     DWORD       dwStartAddress;
684     DWORD       dwOwningPID;
685     DWORD       dwThreadID;
686     DWORD       dwCurrentPriority;
687     DWORD       dwBasePriority;
688     DWORD       dwContextSwitches;
689     DWORD       dwThreadState;
690     DWORD       dwWaitReason;
691 } THREADINFO, *PTHREADINFO;
692
693 /* FIXME: Isn't THREAD_INFO and THREADINFO the same structure? */
694 typedef struct _THREAD_INFO{
695     DWORD Unknown1[6];
696     DWORD ThreadID;
697     DWORD Unknown2[3];
698     DWORD Status;
699     DWORD WaitReason;
700     DWORD Unknown3[4];
701 } THREAD_INFO, PTHREAD_INFO;
702
703 /***********************************************************************
704  * Types and data structures
705  */
706
707 typedef struct _IO_STATUS_BLOCK {
708   union {
709     NTSTATUS Status;
710     PVOID Pointer;
711   } DUMMYUNIONNAME;
712
713   ULONG_PTR Information;
714 } IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
715
716 typedef void (WINAPI * PIO_APC_ROUTINE)(PVOID,PIO_STATUS_BLOCK,ULONG);
717
718 typedef struct _KEY_BASIC_INFORMATION {
719     LARGE_INTEGER LastWriteTime;
720     ULONG         TitleIndex;
721     ULONG         NameLength;
722     WCHAR         Name[1];
723 } KEY_BASIC_INFORMATION, *PKEY_BASIC_INFORMATION;
724
725 typedef struct _KEY_NODE_INFORMATION
726 {
727     LARGE_INTEGER LastWriteTime;
728     ULONG         TitleIndex;
729     ULONG         ClassOffset;
730     ULONG         ClassLength;
731     ULONG         NameLength;
732     WCHAR         Name[1];
733    /* Class[1]; */
734 } KEY_NODE_INFORMATION, *PKEY_NODE_INFORMATION;
735
736 typedef struct _KEY_FULL_INFORMATION
737 {
738     LARGE_INTEGER LastWriteTime;
739     ULONG         TitleIndex;
740     ULONG         ClassOffset;
741     ULONG         ClassLength;
742     ULONG         SubKeys;
743     ULONG         MaxNameLen;
744     ULONG         MaxClassLen;
745     ULONG         Values;
746     ULONG         MaxValueNameLen;
747     ULONG         MaxValueDataLen;
748     WCHAR         Class[1];
749 } KEY_FULL_INFORMATION, *PKEY_FULL_INFORMATION;
750
751 typedef struct _KEY_VALUE_ENTRY
752 {
753     PUNICODE_STRING ValueName;
754     ULONG           DataLength;
755     ULONG           DataOffset;
756     ULONG           Type;
757 } KEY_VALUE_ENTRY, *PKEY_VALUE_ENTRY;
758
759 typedef struct _KEY_VALUE_BASIC_INFORMATION {
760     ULONG TitleIndex;
761     ULONG Type;
762     ULONG NameLength;
763     WCHAR Name[1];
764 } KEY_VALUE_BASIC_INFORMATION, *PKEY_VALUE_BASIC_INFORMATION;
765
766 typedef struct _KEY_VALUE_FULL_INFORMATION {
767     ULONG TitleIndex;
768     ULONG Type;
769     ULONG DataOffset;
770     ULONG DataLength;
771     ULONG NameLength;
772     WCHAR Name[1];
773 } KEY_VALUE_FULL_INFORMATION, *PKEY_VALUE_FULL_INFORMATION;
774
775 typedef struct _KEY_VALUE_PARTIAL_INFORMATION {
776     ULONG TitleIndex;
777     ULONG Type;
778     ULONG DataLength;
779     UCHAR Data[1];
780 } KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION;
781
782 typedef struct _OBJECT_ATTRIBUTES {
783   ULONG Length;
784   HANDLE RootDirectory;
785   PUNICODE_STRING ObjectName;
786   ULONG Attributes;
787   PVOID SecurityDescriptor;       /* type SECURITY_DESCRIPTOR */
788   PVOID SecurityQualityOfService; /* type SECURITY_QUALITY_OF_SERVICE */
789 } OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;
790
791 typedef struct _OBJECT_DATA_INFORMATION {
792     BOOLEAN InheritHandle;
793     BOOLEAN ProtectFromClose;
794 } OBJECT_DATA_INFORMATION, *POBJECT_DATA_INFORMATION;
795
796 typedef struct _PROCESS_BASIC_INFORMATION {
797 #ifdef __WINESRC__
798     DWORD ExitStatus;
799     DWORD PebBaseAddress;
800     DWORD AffinityMask;
801     DWORD BasePriority;
802     ULONG UniqueProcessId;
803     ULONG InheritedFromUniqueProcessId;
804 #else
805     PVOID Reserved1;
806     PPEB PebBaseAddress;
807     PVOID Reserved2[2];
808     ULONG_PTR UniqueProcessId;
809     PVOID Reserved3;
810 #endif
811 } PROCESS_BASIC_INFORMATION, *PPROCESS_BASIC_INFORMATION;
812
813 typedef struct _PROCESS_INFO {
814     DWORD    Offset;             /* 00 offset to next PROCESS_INFO ok*/
815     DWORD    ThreadCount;        /* 04 number of ThreadInfo member ok */
816     DWORD    Unknown1[6];
817     FILETIME CreationTime;       /* 20 */
818     DWORD    Unknown2[5];
819     PWCHAR   ProcessName;        /* 3c ok */
820     DWORD    BasePriority;
821     DWORD    ProcessID;          /* 44 ok*/
822     DWORD    ParentProcessID;
823     DWORD    HandleCount;
824     DWORD    Unknown3[2];        /* 50 */
825     ULONG    PeakVirtualSize;
826     ULONG    VirtualSize;
827     ULONG    PageFaultCount;
828     ULONG    PeakWorkingSetSize;
829     ULONG    WorkingSetSize;
830     ULONG    QuotaPeakPagedPoolUsage;
831     ULONG    QuotaPagedPoolUsage;
832     ULONG    QuotaPeakNonPagedPoolUsage;
833     ULONG    QuotaNonPagedPoolUsage;
834     ULONG    PagefileUsage;
835     ULONG    PeakPagefileUsage;
836     DWORD    PrivateBytes;
837     DWORD    Unknown6[4];
838     THREAD_INFO ati[ANYSIZE_ARRAY]; /* 94 size=0x40*/
839 } PROCESS_INFO, PPROCESS_INFO;
840
841 typedef struct _RTL_HEAP_DEFINITION {
842     ULONG Length; /* = sizeof(RTL_HEAP_DEFINITION) */
843
844     ULONG Unknown[11];
845 } RTL_HEAP_DEFINITION, *PRTL_HEAP_DEFINITION;
846
847 typedef struct _RTL_RWLOCK {
848     RTL_CRITICAL_SECTION rtlCS;
849
850     HANDLE hSharedReleaseSemaphore;
851     UINT   uSharedWaiters;
852
853     HANDLE hExclusiveReleaseSemaphore;
854     UINT   uExclusiveWaiters;
855
856     INT    iNumberActive;
857     HANDLE hOwningThreadId;
858     DWORD  dwTimeoutBoost;
859     PVOID  pDebugInfo;
860 } RTL_RWLOCK, *LPRTL_RWLOCK;
861
862 /* System Information Class 0x00 */
863 typedef struct _SYSTEM_BASIC_INFORMATION {
864 #ifdef __WINESRC__
865     DWORD dwUnknown1;
866     ULONG uKeMaximumIncrement;
867     ULONG uPageSize;
868     ULONG uMmNumberOfPhysicalPages;
869     ULONG uMmLowestPhysicalPage;
870     ULONG uMmHighestPhysicalPage;
871     ULONG uAllocationGranularity;
872     PVOID pLowestUserAddress;
873     PVOID pMmHighestUserAddress;
874     ULONG uKeActiveProcessors;
875     BYTE bKeNumberProcessors;
876     BYTE bUnknown2;
877     WORD wUnknown3;
878 #else
879     BYTE Reserved1[24];
880     PVOID Reserved2[4];
881     CCHAR NumberOfProcessors;
882 #endif
883 } SYSTEM_BASIC_INFORMATION, *PSYSTEM_BASIC_INFORMATION;
884
885 /* System Information Class 0x15 */
886 typedef struct {
887     ULONG CurrentSize;
888     ULONG PeakSize;
889     ULONG PageFaultCount;
890     ULONG MinimumWorkingSet;
891     ULONG MaximumWorkingSet;
892     ULONG unused[4];
893 } SYSTEM_CACHE_INFORMATION;
894
895 typedef struct _SYSTEM_CONFIGURATION_INFO {
896     union {
897         ULONG   OemId;
898         struct {
899             WORD ProcessorArchitecture;
900             WORD Reserved;
901         } tag1;
902     } tag2;
903     ULONG PageSize;
904     PVOID MinimumApplicationAddress;
905     PVOID MaximumApplicationAddress;
906     ULONG ActiveProcessorMask;
907     ULONG NumberOfProcessors;
908     ULONG ProcessorType;
909     ULONG AllocationGranularity;
910     WORD  ProcessorLevel;
911     WORD  ProcessorRevision;
912 } SYSTEM_CONFIGURATION_INFO, *PSYSTEM_CONFIGURATION_INFO;
913
914 /* System Information Class 0x0b */
915 typedef struct {
916     PVOID pvAddress;
917     DWORD dwUnknown1;
918     DWORD dwUnknown2;
919     DWORD dwEntryIndex;
920     DWORD dwUnknown3;
921     char szName[MAX_PATH + 1];
922 } SYSTEM_DRIVER_INFORMATION;
923
924 typedef struct _SYSTEM_EXCEPTION_INFORMATION {
925     BYTE Reserved1[16];
926 } SYSTEM_EXCEPTION_INFORMATION, *PSYSTEM_EXCEPTION_INFORMATION;
927
928 typedef struct _SYSTEM_LOOKASIDE_INFORMATION {
929     BYTE Reserved1[32];
930 } SYSTEM_LOOKASIDE_INFORMATION, *PSYSTEM_LOOKASIDE_INFORMATION;
931
932 typedef struct _SYSTEM_INTERRUPT_INFORMATION {
933     BYTE Reserved1[24];
934 } SYSTEM_INTERRUPT_INFORMATION, *PSYSTEM_INTERRUPT_INFORMATION;
935
936 typedef struct _SYSTEM_KERNEL_DEBUGGER_INFORMATION {
937         BOOLEAN  DebuggerEnabled;
938         BOOLEAN  DebuggerNotPresent;
939 } SYSTEM_KERNEL_DEBUGGER_INFORMATION, *PSYSTEM_KERNEL_DEBUGGER_INFORMATION;
940
941 /* System Information Class 0x10 */
942 typedef struct {
943     USHORT dwPID;
944     USHORT dwCreatorBackTraceIndex;
945     BYTE bObjectType;
946     BYTE bHandleAttributes;
947     USHORT usHandleOffset;
948     DWORD dwKeObject;
949     ULONG ulGrantedAccess;
950 } HANDLEINFO, *PHANDLEINFO; /* FIXME: SYSTEM_HANDLE_INFORMATION? */
951
952 typedef struct _SYSTEM_PERFORMANCE_INFORMATION {
953     BYTE Reserved1[312];
954 } SYSTEM_PERFORMANCE_INFORMATION, *PSYSTEM_PERFORMANCE_INFORMATION;
955
956 /* System Information Class 0x02 */
957 typedef struct _SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION {
958 #ifdef __WINESRC__
959     LARGE_INTEGER liIdleTime;
960     DWORD dwSpare[10];
961 #else
962     LARGE_INTEGER IdleTime;
963     LARGE_INTEGER KernelTime;
964     LARGE_INTEGER UserTime;
965     LARGE_INTEGER Reserved1[2];
966     ULONG Reserved2;
967 #endif
968 } SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION, *PSYSTEM_PROCESSOR_PERFORMANCE_INFORMATION;
969
970 /* System Information Class 0x05 */
971 typedef struct _SYSTEM_PROCESS_INFORMATION {
972 #ifdef __WINESRC__
973     DWORD dwOffset;
974     DWORD dwThreadCount;
975     DWORD dwUnknown1[6];
976     FILETIME ftCreationTime;
977     DWORD dwUnknown2[5];
978     WCHAR *pszProcessName;
979     DWORD dwBasePriority;
980     DWORD dwProcessID;
981     DWORD dwParentProcessID;
982     DWORD dwHandleCount;
983     DWORD dwUnknown3;
984     DWORD dwUnknown4;
985     DWORD dwVirtualBytesPeak;
986     DWORD dwVirtualBytes;
987     DWORD dwPageFaults;
988     DWORD dwWorkingSetPeak;
989     DWORD dwWorkingSet;
990     DWORD dwUnknown5;
991     DWORD dwPagedPool;
992     DWORD dwUnknown6;
993     DWORD dwNonPagedPool;
994     DWORD dwPageFileBytesPeak;
995     DWORD dwPrivateBytes;
996     DWORD dwPageFileBytes;
997     DWORD dwUnknown7[4];
998     THREADINFO ti[1];
999 #else
1000     ULONG NextEntryOffset;
1001     BYTE Reserved1[52];
1002     PVOID Reserved2[3];
1003     HANDLE UniqueProcessId;
1004     PVOID Reserved3;
1005     ULONG HandleCount;
1006     BYTE Reserved4[4];
1007     PVOID Reserved5[11];
1008     SIZE_T PeakPagefileUsage;
1009     SIZE_T PrivatePageCount;
1010     LARGE_INTEGER Reserved6[6];
1011 #endif
1012 } SYSTEM_PROCESS_INFORMATION, *PSYSTEM_PROCESS_INFORMATION;
1013
1014 typedef struct _SYSTEM_REGISTRY_QUOTA_INFORMATION {
1015     ULONG RegistryQuotaAllowed;
1016     ULONG RegistryQuotaUsed;
1017     PVOID Reserved1;
1018 } SYSTEM_REGISTRY_QUOTA_INFORMATION, *PSYSTEM_REGISTRY_QUOTA_INFORMATION;
1019
1020 typedef struct _SYSTEM_TIME_ADJUSTMENT {
1021     ULONG   TimeAdjustment;
1022     BOOLEAN TimeAdjustmentDisabled;
1023 } SYSTEM_TIME_ADJUSTMENT, *PSYSTEM_TIME_ADJUSTMENT;
1024
1025 /* System Information Class 0x03 */
1026 typedef struct _SYSTEM_TIMEOFDAY_INFORMATION {
1027 #ifdef __WINESRC__
1028     LARGE_INTEGER liKeBootTime;
1029     LARGE_INTEGER liKeSystemTime;
1030     LARGE_INTEGER liExpTimeZoneBias;
1031     ULONG uCurrentTimeZoneId;
1032     DWORD dwReserved;
1033 #else
1034     BYTE Reserved1[48];
1035 #endif
1036 } SYSTEM_TIMEOFDAY_INFORMATION, *PSYSTEM_TIMEOFDAY_INFORMATION; /* was SYSTEM_TIME_INFORMATION */
1037
1038 typedef struct _TIME_FIELDS
1039 {   CSHORT Year;
1040     CSHORT Month;
1041     CSHORT Day;
1042     CSHORT Hour;
1043     CSHORT Minute;
1044     CSHORT Second;
1045     CSHORT Milliseconds;
1046     CSHORT Weekday;
1047 } TIME_FIELDS, *PTIME_FIELDS;
1048
1049 typedef struct _WINSTATIONINFORMATIONW {
1050   BYTE Reserved2[70];
1051   ULONG LogonId;
1052   BYTE Reserved3[1140];
1053 } WINSTATIONINFORMATIONW, *PWINSTATIONINFORMATIONW;
1054
1055 typedef struct _VM_COUNTERS_ {
1056     SIZE_T PeakVirtualSize;
1057     SIZE_T VirtualSize;
1058     ULONG  PageFaultCount;
1059     SIZE_T PeakWorkingSetSize;
1060     SIZE_T WorkingSetSize;
1061     SIZE_T QuotaPeakPagedPoolUsage;
1062     SIZE_T QuotaPagedPoolUsage;
1063     SIZE_T QuotaPeakNonPagedPoolUsage;
1064     SIZE_T QuotaNonPagedPoolUsage;
1065     SIZE_T PagefileUsage;
1066     SIZE_T PeakPagefileUsage;
1067 } VM_COUNTERS, *PVM_COUNTERS;
1068
1069 typedef BOOLEAN (WINAPI * PWINSTATIONQUERYINFORMATIONW)(HANDLE,ULONG,WINSTATIONINFOCLASS,PVOID,ULONG,PULONG);
1070
1071 typedef struct _LDR_RESOURCE_INFO
1072 {
1073     ULONG Type;
1074     ULONG Name;
1075     ULONG Language;
1076 } LDR_RESOURCE_INFO, *PLDR_RESOURCE_INFO;
1077
1078
1079 /* debug buffer definitions */
1080
1081 typedef struct _DEBUG_BUFFER {
1082   HANDLE SectionHandle;
1083   PVOID  SectionBase;
1084   PVOID  RemoteSectionBase;
1085   ULONG  SectionBaseDelta;
1086   HANDLE EventPairHandle;
1087   ULONG  Unknown[2];
1088   HANDLE RemoteThreadHandle;
1089   ULONG  InfoClassMask;
1090   ULONG  SizeOfInfo;
1091   ULONG  AllocatedSize;
1092   ULONG  SectionSize;
1093   PVOID  ModuleInformation;
1094   PVOID  BackTraceInformation;
1095   PVOID  HeapInformation;
1096   PVOID  LockInformation;
1097   PVOID  Reserved[8];
1098 } DEBUG_BUFFER, *PDEBUG_BUFFER;
1099
1100 #define PDI_MODULES                       0x01
1101 #define PDI_BACKTRACE                     0x02
1102 #define PDI_HEAPS                         0x04
1103 #define PDI_HEAP_TAGS                     0x08
1104 #define PDI_HEAP_BLOCKS                   0x10
1105 #define PDI_LOCKS                         0x20
1106
1107 typedef struct _DEBUG_MODULE_INFORMATION {
1108   ULONG  Reserved[2];
1109   ULONG  Base;
1110   ULONG  Size;
1111   ULONG  Flags;
1112   USHORT Index;
1113   USHORT Unknown;
1114   USHORT LoadCount;
1115   USHORT ModuleNameOffset;
1116   CHAR   ImageName[256];
1117 } DEBUG_MODULE_INFORMATION, *PDEBUG_MODULE_INFORMATION;
1118
1119 typedef struct _DEBUG_HEAP_INFORMATION {
1120   ULONG  Base;
1121   ULONG  Flags;
1122   USHORT Granularity;
1123   USHORT Unknown;
1124   ULONG  Allocated;
1125   ULONG  Committed;
1126   ULONG  TagCount;
1127   ULONG  BlockCount;
1128   ULONG  Reserved[7];
1129   PVOID  Tags;
1130   PVOID  Blocks;
1131 } DEBUG_HEAP_INFORMATION, *PDEBUG_HEAP_INFORMATION;
1132
1133 typedef struct _DEBUG_LOCK_INFORMATION {
1134   PVOID  Address;
1135   USHORT Type;
1136   USHORT CreatorBackTraceIndex;
1137   ULONG  OwnerThreadId;
1138   ULONG  ActiveCount;
1139   ULONG  ContentionCount;
1140   ULONG  EntryCount;
1141   ULONG  RecursionCount;
1142   ULONG  NumberOfSharedWaiters;
1143   ULONG  NumberOfExclusiveWaiters;
1144 } DEBUG_LOCK_INFORMATION, *PDEBUG_LOCK_INFORMATION;
1145
1146 typedef struct _PORT_MESSAGE_HEADER {
1147   USHORT DataSize;
1148   USHORT MessageSize;
1149   USHORT MessageType;
1150   USHORT VirtualRangesOffset;
1151   CLIENT_ID ClientId;
1152   ULONG MessageId;
1153   ULONG SectionSize;
1154 } PORT_MESSAGE_HEADER, *PPORT_MESSAGE_HEADER, PORT_MESSAGE, *PPORT_MESSAGE;
1155
1156 /***********************************************************************
1157  * Defines
1158  */
1159
1160 /* flags for NtCreateFile and NtOpenFile */
1161 #define FILE_DIRECTORY_FILE             0x00000001
1162 #define FILE_WRITE_THROUGH              0x00000002
1163 #define FILE_SEQUENTIAL_ONLY            0x00000004
1164 #define FILE_NO_INTERMEDIATE_BUFFERING  0x00000008
1165 #define FILE_SYNCHRONOUS_IO_ALERT       0x00000010
1166 #define FILE_SYNCHRONOUS_IO_NONALERT    0x00000020
1167 #define FILE_NON_DIRECTORY_FILE         0x00000040
1168 #define FILE_CREATE_TREE_CONNECTION     0x00000080
1169 #define FILE_COMPLETE_IF_OPLOCKED       0x00000100
1170 #define FILE_NO_EA_KNOWLEDGE            0x00000200
1171 #define FILE_OPEN_FOR_RECOVERY          0x00000400
1172 #define FILE_RANDOM_ACCESS              0x00000800
1173 #define FILE_DELETE_ON_CLOSE            0x00001000
1174 #define FILE_OPEN_BY_FILE_ID            0x00002000
1175 #define FILE_OPEN_FOR_BACKUP_INTENT     0x00004000
1176 #define FILE_NO_COMPRESSION             0x00008000
1177 #define FILE_RESERVE_OPFILTER           0x00100000
1178 #define FILE_TRANSACTED_MODE            0x00200000
1179 #define FILE_OPEN_OFFLINE_FILE          0x00400000
1180 #define FILE_OPEN_FOR_FREE_SPACE_QUERY  0x00800000
1181
1182 #define FILE_ATTRIBUTE_VALID_FLAGS      0x00007fb7
1183 #define FILE_ATTRIBUTE_VALID_SET_FLAGS  0x000031a7
1184
1185 /* status for NtCreateFile or NtOpenFile */
1186 #define FILE_SUPERSEDED                 0
1187 #define FILE_OPENED                     1
1188 #define FILE_CREATED                    2
1189 #define FILE_OVERWRITTEN                3
1190 #define FILE_EXISTS                     4
1191 #define FILE_DOES_NOT_EXIST             5
1192
1193 /* disposition for NtCreateFile */
1194 #define FILE_SUPERSEDE                  0
1195 #define FILE_OPEN                       1
1196 #define FILE_CREATE                     2
1197 #define FILE_OPEN_IF                    3
1198 #define FILE_OVERWRITE                  4
1199 #define FILE_OVERWRITE_IF               5
1200 #define FILE_MAXIMUM_DISPOSITION        5
1201
1202 /* Characteristics of a File System */
1203 #define FILE_REMOVABLE_MEDIA            0x00000001
1204 #define FILE_READ_ONLY_DEVICE           0x00000002
1205 #define FILE_FLOPPY_DISKETTE            0x00000004
1206 #define FILE_WRITE_ONE_MEDIA            0x00000008
1207 #define FILE_REMOTE_DEVICE              0x00000010
1208 #define FILE_DEVICE_IS_MOUNTED          0x00000020
1209 #define FILE_VIRTUAL_VOLUME             0x00000040
1210 #define FILE_AUTOGENERATED_DEVICE_NAME  0x00000080
1211 #define FILE_DEVICE_SECURE_OPEN         0x00000100
1212
1213 #if (_WIN32_WINNT >= 0x0501)
1214 #define INTERNAL_TS_ACTIVE_CONSOLE_ID ( *((volatile ULONG*)(0x7ffe02d8)) )
1215 #endif /* (_WIN32_WINNT >= 0x0501) */
1216
1217 #define LOGONID_CURRENT    ((ULONG)-1)
1218
1219 #define OBJ_INHERIT          0x00000002L
1220 #define OBJ_PERMANENT        0x00000010L
1221 #define OBJ_EXCLUSIVE        0x00000020L
1222 #define OBJ_CASE_INSENSITIVE 0x00000040L
1223 #define OBJ_OPENIF           0x00000080L
1224 #define OBJ_OPENLINK         0x00000100L
1225 #define OBJ_KERNEL_HANDLE    0x00000200L
1226 #define OBJ_VALID_ATTRIBUTES 0x000003F2L
1227
1228 #define SERVERNAME_CURRENT ((HANDLE)NULL)
1229
1230 typedef void (CALLBACK *PNTAPCFUNC)(ULONG_PTR,ULONG_PTR,ULONG_PTR); /* FIXME: not the right name */
1231 typedef void (CALLBACK *PRTL_THREAD_START_ROUTINE)(LPVOID); /* FIXME: not the right name */
1232
1233
1234 /* DbgPrintEx default levels */
1235 #define DPFLTR_ERROR_LEVEL     0
1236 #define DPFLTR_WARNING_LEVEL   1
1237 #define DPFLTR_TRACE_LEVEL     2
1238 #define DPFLTR_INFO_LEVEL      3
1239 #define DPFLTR_MASK    0x8000000
1240
1241 /***********************************************************************
1242  * Function declarations
1243  */
1244
1245 extern LPSTR _strlwr(LPSTR str); /* FIXME: Doesn't belong here */
1246 extern LPSTR _strupr(LPSTR str); /* FIXME: Doesn't belong here */
1247
1248 #if defined(__i386__) && defined(__GNUC__)
1249 static inline void WINAPI DbgBreakPoint(void) { __asm__ __volatile__("int3"); }
1250 static inline void WINAPI DbgUserBreakPoint(void) { __asm__ __volatile__("int3"); }
1251 #else  /* __i386__ && __GNUC__ */
1252 void WINAPI DbgBreakPoint(void);
1253 void WINAPI DbgUserBreakPoint(void);
1254 #endif  /* __i386__ && __GNUC__ */
1255 NTSTATUS WINAPIV DbgPrint(LPCSTR fmt, ...);
1256 NTSTATUS WINAPIV DbgPrintEx(ULONG iComponentId, ULONG Level, LPCSTR fmt, ...);
1257
1258 NTSTATUS  WINAPI LdrAccessResource(HMODULE,const IMAGE_RESOURCE_DATA_ENTRY*,void**,PULONG);
1259 NTSTATUS  WINAPI LdrFindResourceDirectory_U(HMODULE,const LDR_RESOURCE_INFO*,ULONG,const IMAGE_RESOURCE_DIRECTORY**);
1260 NTSTATUS  WINAPI LdrFindResource_U(HMODULE,const LDR_RESOURCE_INFO*,ULONG,const IMAGE_RESOURCE_DATA_ENTRY**);
1261 NTSTATUS  WINAPI LdrGetDllHandle(ULONG, ULONG, const UNICODE_STRING*, HMODULE*);
1262 NTSTATUS  WINAPI LdrGetProcedureAddress(HMODULE, const ANSI_STRING*, ULONG, void**);
1263 void      WINAPI LdrInitializeThunk(HANDLE,ULONG,ULONG,ULONG);
1264 NTSTATUS  WINAPI LdrLoadDll(LPCWSTR, DWORD, const UNICODE_STRING*, HMODULE*);
1265 void      WINAPI LdrShutdownProcess(void);
1266 void      WINAPI LdrShutdownThread(void);
1267 NTSTATUS  WINAPI NtAccessCheck(PSECURITY_DESCRIPTOR,HANDLE,ACCESS_MASK,PGENERIC_MAPPING,PPRIVILEGE_SET,PULONG,PULONG,PBOOLEAN);
1268 NTSTATUS  WINAPI NtAdjustGroupsToken(HANDLE,BOOLEAN,PTOKEN_GROUPS,ULONG,PTOKEN_GROUPS,PULONG);
1269 NTSTATUS  WINAPI NtAdjustPrivilegesToken(HANDLE,BOOLEAN,PTOKEN_PRIVILEGES,DWORD,PTOKEN_PRIVILEGES,PDWORD);
1270 NTSTATUS  WINAPI NtAlertThread(HANDLE ThreadHandle);
1271 NTSTATUS  WINAPI NtAllocateVirtualMemory(HANDLE,PVOID*,PVOID,ULONG*,ULONG,ULONG);
1272 NTSTATUS  WINAPI NtCancelIoFile(HANDLE,PIO_STATUS_BLOCK);
1273 NTSTATUS  WINAPI NtCancelTimer(HANDLE, BOOLEAN*);
1274 NTSTATUS  WINAPI NtClearEvent(HANDLE);
1275 NTSTATUS  WINAPI NtClose(HANDLE);
1276 NTSTATUS  WINAPI NtCreateEvent(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES *,BOOLEAN,BOOLEAN);
1277 NTSTATUS  WINAPI NtCreateFile(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,PLARGE_INTEGER,ULONG,ULONG,ULONG,ULONG,PVOID,ULONG);
1278 NTSTATUS  WINAPI NtCreateIoCompletion(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,ULONG);
1279 NTSTATUS  WINAPI NtCreateKey(PHKEY,ACCESS_MASK,const OBJECT_ATTRIBUTES*,ULONG,const UNICODE_STRING*,ULONG,PULONG);
1280 NTSTATUS  WINAPI NtCreateNamedPipeFile(PHANDLE,ULONG,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,ULONG,ULONG,ULONG,ULONG,ULONG,ULONG,ULONG,ULONG,ULONG,PLARGE_INTEGER);
1281 NTSTATUS  WINAPI NtCreateSection(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,const LARGE_INTEGER*,ULONG,ULONG,HANDLE);
1282 NTSTATUS  WINAPI NtCreateSemaphore(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*,ULONG,ULONG);
1283 NTSTATUS  WINAPI NtCreateTimer(HANDLE*, ACCESS_MASK, const OBJECT_ATTRIBUTES*, TIMER_TYPE);
1284 NTSTATUS  WINAPI NtDelayExecution(BOOLEAN,const LARGE_INTEGER*);
1285 NTSTATUS  WINAPI NtDeleteFile(POBJECT_ATTRIBUTES);
1286 NTSTATUS  WINAPI NtDeleteKey(HKEY);
1287 NTSTATUS  WINAPI NtDeleteValueKey(HKEY,const UNICODE_STRING *);
1288 NTSTATUS  WINAPI NtDeviceIoControlFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,PVOID,ULONG,PVOID,ULONG);
1289 NTSTATUS  WINAPI NtDuplicateObject(HANDLE,HANDLE,HANDLE,PHANDLE,ACCESS_MASK,ULONG,ULONG);
1290 NTSTATUS  WINAPI NtEnumerateKey(HKEY,ULONG,KEY_INFORMATION_CLASS,void *,DWORD,DWORD *);
1291 NTSTATUS  WINAPI NtEnumerateValueKey(HKEY,ULONG,KEY_VALUE_INFORMATION_CLASS,PVOID,ULONG,PULONG);
1292 NTSTATUS  WINAPI NtFlushBuffersFile(HANDLE,IO_STATUS_BLOCK*);
1293 NTSTATUS  WINAPI NtFlushInstructionCache(HANDLE,LPCVOID,ULONG);
1294 NTSTATUS  WINAPI NtFlushKey(HKEY);
1295 NTSTATUS  WINAPI NtFlushVirtualMemory(HANDLE,LPCVOID*,ULONG*,ULONG);
1296 NTSTATUS  WINAPI NtFreeVirtualMemory(HANDLE,PVOID*,ULONG*,ULONG);
1297 NTSTATUS  WINAPI NtGetContextThread(HANDLE,CONTEXT*);
1298 NTSTATUS  WINAPI NtImpersonateAnonymousToken(HANDLE);
1299 NTSTATUS  WINAPI NtImpersonateClientOfPort(HANDLE,PPORT_MESSAGE);
1300 NTSTATUS  WINAPI NtImpersonateThread(HANDLE,HANDLE,PSECURITY_QUALITY_OF_SERVICE);
1301 NTSTATUS  WINAPI NtLoadKey(const OBJECT_ATTRIBUTES *,const OBJECT_ATTRIBUTES *);
1302 NTSTATUS  WINAPI NtLockFile(HANDLE,HANDLE,PIO_APC_ROUTINE,void*,PIO_STATUS_BLOCK,PLARGE_INTEGER,PLARGE_INTEGER,ULONG*,BOOLEAN,BOOLEAN);
1303 NTSTATUS  WINAPI NtLockVirtualMemory(HANDLE,PVOID*,ULONG*,ULONG);
1304 NTSTATUS  WINAPI NtMapViewOfSection(HANDLE,HANDLE,PVOID*,ULONG,ULONG,const LARGE_INTEGER*,ULONG*,SECTION_INHERIT,ULONG,ULONG);
1305 NTSTATUS  WINAPI NtNotifyChangeKey(HKEY,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,BOOLEAN,PVOID,ULONG,BOOLEAN);
1306 NTSTATUS  WINAPI NtOpenEvent(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES *);
1307 NTSTATUS  WINAPI NtOpenFile(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,ULONG,ULONG);
1308 NTSTATUS  WINAPI NtOpenIoCompletion(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES);
1309 NTSTATUS  WINAPI NtOpenKey(PHKEY,ACCESS_MASK,const OBJECT_ATTRIBUTES *);
1310 NTSTATUS  WINAPI NtOpenProcessToken(HANDLE,DWORD,HANDLE *);
1311 NTSTATUS  WINAPI NtOpenSection(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*);
1312 NTSTATUS  WINAPI NtOpenThread(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,const CLIENT_ID*);
1313 NTSTATUS  WINAPI NtOpenThreadToken(HANDLE,DWORD,BOOLEAN,HANDLE *);
1314 NTSTATUS  WINAPI NtOpenTimer(HANDLE*, ACCESS_MASK, const OBJECT_ATTRIBUTES*);
1315 NTSTATUS  WINAPI NtProtectVirtualMemory(HANDLE,PVOID*,ULONG*,ULONG,ULONG*);
1316 NTSTATUS  WINAPI NtPulseEvent(HANDLE,PULONG);
1317 NTSTATUS  WINAPI NtQueueApcThread(HANDLE,PNTAPCFUNC,ULONG_PTR,ULONG_PTR,ULONG_PTR);
1318 NTSTATUS  WINAPI NtQueryAttributesFile(const OBJECT_ATTRIBUTES*,FILE_BASIC_INFORMATION*);
1319 NTSTATUS  WINAPI NtQueryDefaultLocale(BOOLEAN,LCID*);
1320 NTSTATUS  WINAPI NtQueryDefaultUILanguage(LANGID*);
1321 NTSTATUS  WINAPI NtQueryDirectoryFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,PVOID,ULONG,FILE_INFORMATION_CLASS,BOOLEAN,PUNICODE_STRING,BOOLEAN);
1322 NTSTATUS  WINAPI NtQueryEaFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,BOOLEAN,PVOID,ULONG,PVOID,BOOLEAN);
1323 NTSTATUS  WINAPI NtQueryFullAttributesFile(const OBJECT_ATTRIBUTES*,FILE_NETWORK_OPEN_INFORMATION*);
1324 NTSTATUS  WINAPI NtQueryInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,LONG,FILE_INFORMATION_CLASS);
1325 NTSTATUS  WINAPI NtQueryInformationProcess(HANDLE,PROCESSINFOCLASS,PVOID,ULONG,PULONG);
1326 NTSTATUS  WINAPI NtQueryInformationThread(HANDLE,THREADINFOCLASS,PVOID,ULONG,PULONG);
1327 NTSTATUS  WINAPI NtQueryInformationToken(HANDLE,DWORD,LPVOID,DWORD,LPDWORD);
1328 NTSTATUS  WINAPI NtQueryInstallUILanguage(LANGID*);
1329 NTSTATUS  WINAPI NtQueryKey(HKEY,KEY_INFORMATION_CLASS,void *,DWORD,DWORD *);
1330 NTSTATUS  WINAPI NtQueryMultipleValueKey(HKEY,PVALENTW,ULONG,PVOID,ULONG,PULONG);
1331 NTSTATUS  WINAPI NtQueryObject(HANDLE, OBJECT_INFORMATION_CLASS, PVOID, ULONG, PULONG);
1332 NTSTATUS  WINAPI NtQuerySecurityObject(HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,ULONG,PULONG);
1333 NTSTATUS  WINAPI NtQuerySystemInformation(SYSTEM_INFORMATION_CLASS,PVOID,ULONG,PULONG);
1334 NTSTATUS  WINAPI NtQuerySystemTime(PLARGE_INTEGER);
1335 NTSTATUS  WINAPI NtQueryValueKey(HKEY,const UNICODE_STRING *,KEY_VALUE_INFORMATION_CLASS,void *,DWORD,DWORD *);
1336 NTSTATUS  WINAPI NtQueryVirtualMemory(HANDLE,LPCVOID,MEMORY_INFORMATION_CLASS,PVOID,ULONG,ULONG*);
1337 NTSTATUS  WINAPI NtQueryVolumeInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,FS_INFORMATION_CLASS);
1338 void      WINAPI NtRaiseException(PEXCEPTION_RECORD,PCONTEXT,BOOL);
1339 NTSTATUS  WINAPI NtReadFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,PVOID,ULONG,PLARGE_INTEGER,PULONG);
1340 NTSTATUS  WINAPI NtReadVirtualMemory(HANDLE,const void*,void*,SIZE_T,SIZE_T*);
1341 NTSTATUS  WINAPI NtReleaseSemaphore(HANDLE,ULONG,PULONG);
1342 NTSTATUS  WINAPI NtRemoveIoCompletion(HANDLE,PULONG,PULONG,PIO_STATUS_BLOCK,PLARGE_INTEGER);
1343 NTSTATUS  WINAPI NtReplaceKey(POBJECT_ATTRIBUTES,HKEY,POBJECT_ATTRIBUTES);
1344 NTSTATUS  WINAPI NtResetEvent(HANDLE,PULONG);
1345 NTSTATUS  WINAPI NtRestoreKey(HKEY,HANDLE,ULONG);
1346 NTSTATUS  WINAPI NtResumeThread(HANDLE,PULONG);
1347 NTSTATUS  WINAPI NtSaveKey(HKEY,HANDLE);
1348 NTSTATUS  WINAPI NtSetContextThread(HANDLE,const CONTEXT*);
1349 NTSTATUS  WINAPI NtSetDefaultLocale(BOOLEAN,LCID);
1350 NTSTATUS  WINAPI NtSetDefaultUILanguage(LANGID);
1351 NTSTATUS  WINAPI NtSetEaFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG);
1352 NTSTATUS  WINAPI NtSetEvent(HANDLE,PULONG);
1353 NTSTATUS  WINAPI NtSetInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,FILE_INFORMATION_CLASS);
1354 NTSTATUS  WINAPI NtSetInformationKey(HKEY,const int,PVOID,ULONG);
1355 NTSTATUS  WINAPI NtSetInformationObject(HANDLE, OBJECT_INFORMATION_CLASS, PVOID, ULONG);
1356 NTSTATUS  WINAPI NtSetInformationThread(HANDLE,THREADINFOCLASS,LPCVOID,ULONG);
1357 NTSTATUS  WINAPI NtSetInformationToken(HANDLE,TOKEN_INFORMATION_CLASS,PVOID,ULONG);
1358 NTSTATUS  WINAPI NtSetIoCompletion(HANDLE,ULONG,ULONG,NTSTATUS,ULONG);
1359 NTSTATUS  WINAPI NtSetSecurityObject(HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR);
1360 NTSTATUS  WINAPI NtSetSystemTime(const LARGE_INTEGER*,LARGE_INTEGER*);
1361 NTSTATUS  WINAPI NtSetTimer(HANDLE, const LARGE_INTEGER*, PTIMERAPCROUTINE, PVOID, BOOLEAN, ULONG, BOOLEAN*);
1362 NTSTATUS  WINAPI NtSetValueKey(HKEY,const UNICODE_STRING *,ULONG,ULONG,const void *,ULONG);
1363 NTSTATUS  WINAPI NtSuspendThread(HANDLE,PULONG);
1364 NTSTATUS  WINAPI NtTerminateProcess(HANDLE,LONG);
1365 NTSTATUS  WINAPI NtTerminateThread(HANDLE,LONG);
1366 NTSTATUS  WINAPI NtUnloadKey(HKEY);
1367 NTSTATUS  WINAPI NtUnlockFile(HANDLE,PIO_STATUS_BLOCK,PLARGE_INTEGER,PLARGE_INTEGER,PULONG);
1368 NTSTATUS  WINAPI NtUnlockVirtualMemory(HANDLE,PVOID*,ULONG*,ULONG);
1369 NTSTATUS  WINAPI NtUnmapViewOfSection(HANDLE,PVOID);
1370 NTSTATUS  WINAPI NtWaitForSingleObject(HANDLE,BOOLEAN,const LARGE_INTEGER*);
1371 NTSTATUS  WINAPI NtWaitForMultipleObjects(ULONG,const HANDLE*,BOOLEAN,BOOLEAN,const LARGE_INTEGER*);
1372 NTSTATUS  WINAPI NtWriteFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,const void*,ULONG,PLARGE_INTEGER,PULONG);
1373 NTSTATUS  WINAPI NtWriteVirtualMemory(HANDLE,void*,const void*,SIZE_T,SIZE_T*);
1374
1375 void      WINAPI RtlAcquirePebLock(void);
1376 BYTE      WINAPI RtlAcquireResourceExclusive(LPRTL_RWLOCK,BYTE);
1377 BYTE      WINAPI RtlAcquireResourceShared(LPRTL_RWLOCK,BYTE);
1378 NTSTATUS  WINAPI RtlAddAce(PACL,DWORD,DWORD,PACE_HEADER,DWORD);
1379 NTSTATUS  WINAPI RtlAddAccessAllowedAce(PACL,DWORD,DWORD,PSID);
1380 NTSTATUS  WINAPI RtlAddAccessAllowedAceEx(PACL,DWORD,DWORD,DWORD,PSID);
1381 NTSTATUS  WINAPI RtlAddAccessDeniedAce(PACL,DWORD,DWORD,PSID);
1382 NTSTATUS  WINAPI RtlAddAccessDeniedAceEx(PACL,DWORD,DWORD,DWORD,PSID);
1383 PVOID     WINAPI RtlAddVectoredExceptionHandler(ULONG,PVECTORED_EXCEPTION_HANDLER);
1384 DWORD     WINAPI RtlAdjustPrivilege(DWORD,DWORD,DWORD,DWORD);
1385 BOOLEAN   WINAPI RtlAllocateAndInitializeSid(PSID_IDENTIFIER_AUTHORITY,BYTE,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,PSID *);
1386 PVOID     WINAPI RtlAllocateHeap(HANDLE,ULONG,ULONG);
1387 DWORD     WINAPI RtlAnsiStringToUnicodeSize(const STRING *);
1388 NTSTATUS  WINAPI RtlAnsiStringToUnicodeString(PUNICODE_STRING,PCANSI_STRING,BOOLEAN);
1389 NTSTATUS  WINAPI RtlAppendAsciizToString(STRING *,LPCSTR);
1390 NTSTATUS  WINAPI RtlAppendStringToString(STRING *,const STRING *);
1391 NTSTATUS  WINAPI RtlAppendUnicodeStringToString(UNICODE_STRING *,const UNICODE_STRING *);
1392 NTSTATUS  WINAPI RtlAppendUnicodeToString(UNICODE_STRING *,LPCWSTR);
1393 BOOLEAN   WINAPI RtlAreAllAccessesGranted(ACCESS_MASK,ACCESS_MASK);
1394 BOOLEAN   WINAPI RtlAreAnyAccessesGranted(ACCESS_MASK,ACCESS_MASK);
1395 BOOLEAN   WINAPI RtlAreBitsSet(PCRTL_BITMAP,ULONG,ULONG);
1396 BOOLEAN   WINAPI RtlAreBitsClear(PCRTL_BITMAP,ULONG,ULONG);
1397
1398 NTSTATUS  WINAPI RtlCharToInteger(PCSZ,ULONG,PULONG);
1399 void      WINAPI RtlClearAllBits(PRTL_BITMAP);
1400 void      WINAPI RtlClearBits(PRTL_BITMAP,ULONG,ULONG);
1401 ULONG     WINAPI RtlCompactHeap(HANDLE,ULONG);
1402 LONG      WINAPI RtlCompareString(const STRING*,const STRING*,BOOLEAN);
1403 LONG      WINAPI RtlCompareUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
1404 DWORD     WINAPI RtlComputeCrc32(DWORD,PBYTE,INT);
1405 NTSTATUS  WINAPI RtlConvertSidToUnicodeString(PUNICODE_STRING,PSID,BOOLEAN);
1406 LONGLONG  WINAPI RtlConvertLongToLargeInteger(LONG);
1407 ULONGLONG WINAPI RtlConvertUlongToLargeInteger(ULONG);
1408 void      WINAPI RtlCopyLuid(PLUID,const LUID*);
1409 void      WINAPI RtlCopyLuidAndAttributesArray(ULONG,const LUID_AND_ATTRIBUTES*,PLUID_AND_ATTRIBUTES);
1410 DWORD     WINAPI RtlCopySid(DWORD,PSID,PSID);
1411 void      WINAPI RtlCopyString(STRING*,const STRING*);
1412 void      WINAPI RtlCopyUnicodeString(UNICODE_STRING*,const UNICODE_STRING*);
1413 NTSTATUS  WINAPI RtlCreateAcl(PACL,DWORD,DWORD);
1414 NTSTATUS  WINAPI RtlCreateEnvironment(BOOLEAN, PWSTR*);
1415 HANDLE    WINAPI RtlCreateHeap(ULONG,PVOID,ULONG,ULONG,PVOID,PRTL_HEAP_DEFINITION);
1416 NTSTATUS  WINAPI RtlCreateProcessParameters(RTL_USER_PROCESS_PARAMETERS**,const UNICODE_STRING*,
1417                                             const UNICODE_STRING*,const UNICODE_STRING*,
1418                                             const UNICODE_STRING*,PWSTR,const UNICODE_STRING*,
1419                                             const UNICODE_STRING*,const UNICODE_STRING*,
1420                                             const UNICODE_STRING*);
1421 NTSTATUS  WINAPI RtlCreateSecurityDescriptor(PSECURITY_DESCRIPTOR,DWORD);
1422 BOOLEAN   WINAPI RtlCreateUnicodeString(PUNICODE_STRING,LPCWSTR);
1423 BOOLEAN   WINAPI RtlCreateUnicodeStringFromAsciiz(PUNICODE_STRING,LPCSTR);
1424 NTSTATUS  WINAPI RtlCreateUserThread(HANDLE,const SECURITY_DESCRIPTOR*,BOOLEAN,PVOID,SIZE_T,SIZE_T,PRTL_THREAD_START_ROUTINE,void*,HANDLE*,CLIENT_ID*);
1425
1426 NTSTATUS  WINAPI RtlDeleteAce(PACL,DWORD);
1427 NTSTATUS  WINAPI RtlDeleteCriticalSection(RTL_CRITICAL_SECTION *);
1428 void      WINAPI RtlDeleteResource(LPRTL_RWLOCK);
1429 DWORD     WINAPI RtlDeleteSecurityObject(DWORD);
1430 PRTL_USER_PROCESS_PARAMETERS WINAPI RtlDeNormalizeProcessParams(RTL_USER_PROCESS_PARAMETERS*);
1431 NTSTATUS  WINAPI RtlDestroyEnvironment(PWSTR);
1432 HANDLE    WINAPI RtlDestroyHeap(HANDLE);
1433 void      WINAPI RtlDestroyProcessParameters(RTL_USER_PROCESS_PARAMETERS*);
1434 DOS_PATHNAME_TYPE WINAPI RtlDetermineDosPathNameType_U(PCWSTR);
1435 BOOLEAN   WINAPI RtlDoesFileExists_U(LPCWSTR);
1436 BOOLEAN   WINAPI RtlDosPathNameToNtPathName_U(PCWSTR,PUNICODE_STRING,PWSTR*,CURDIR*);
1437 ULONG     WINAPI RtlDosSearchPath_U(LPCWSTR, LPCWSTR, LPCWSTR, ULONG, LPWSTR, LPWSTR*);
1438 WCHAR     WINAPI RtlDowncaseUnicodeChar(WCHAR);
1439 NTSTATUS  WINAPI RtlDowncaseUnicodeString(UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
1440 void      WINAPI RtlDumpResource(LPRTL_RWLOCK);
1441 NTSTATUS  WINAPI RtlDuplicateUnicodeString(int,const UNICODE_STRING*,UNICODE_STRING*);
1442
1443 LONGLONG  WINAPI RtlEnlargedIntegerMultiply(INT,INT);
1444 ULONGLONG WINAPI RtlEnlargedUnsignedMultiply(UINT,UINT);
1445 UINT      WINAPI RtlEnlargedUnsignedDivide(ULONGLONG,UINT,UINT *);
1446 NTSTATUS  WINAPI RtlEnterCriticalSection(RTL_CRITICAL_SECTION *);
1447 void      WINAPI RtlEraseUnicodeString(UNICODE_STRING*);
1448 NTSTATUS  WINAPI RtlEqualComputerName(const UNICODE_STRING*,const UNICODE_STRING*);
1449 NTSTATUS  WINAPI RtlEqualDomainName(const UNICODE_STRING*,const UNICODE_STRING*);
1450 BOOLEAN   WINAPI RtlEqualLuid(const LUID*,const LUID*);
1451 BOOL      WINAPI RtlEqualPrefixSid(PSID,PSID);
1452 BOOL      WINAPI RtlEqualSid(PSID,PSID);
1453 BOOLEAN   WINAPI RtlEqualString(const STRING*,const STRING*,BOOLEAN);
1454 BOOLEAN   WINAPI RtlEqualUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
1455 NTSTATUS  WINAPI RtlExpandEnvironmentStrings_U(PWSTR, const UNICODE_STRING*, UNICODE_STRING*, ULONG*);
1456 LONGLONG  WINAPI RtlExtendedMagicDivide(LONGLONG,LONGLONG,INT);
1457 LONGLONG  WINAPI RtlExtendedIntegerMultiply(LONGLONG,INT);
1458 LONGLONG  WINAPI RtlExtendedLargeIntegerDivide(LONGLONG,INT,INT *);
1459
1460 NTSTATUS  WINAPI RtlFindCharInUnicodeString(int,const UNICODE_STRING*,const UNICODE_STRING*,USHORT*);
1461 ULONG     WINAPI RtlFindClearBits(PCRTL_BITMAP,ULONG,ULONG);
1462 ULONG     WINAPI RtlFindClearBitsAndSet(PRTL_BITMAP,ULONG,ULONG);
1463 ULONG     WINAPI RtlFindClearRuns(PCRTL_BITMAP,PRTL_BITMAP_RUN,ULONG,BOOLEAN);
1464 ULONG     WINAPI RtlFindLastBackwardRunSet(PCRTL_BITMAP,ULONG,PULONG);
1465 ULONG     WINAPI RtlFindLastBackwardRunClear(PCRTL_BITMAP,ULONG,PULONG);
1466 CCHAR     WINAPI RtlFindLeastSignificantBit(ULONGLONG);
1467 ULONG     WINAPI RtlFindLongestRunSet(PCRTL_BITMAP,PULONG);
1468 ULONG     WINAPI RtlFindLongestRunClear(PCRTL_BITMAP,PULONG);
1469 NTSTATUS  WINAPI RtlFindMessage(HMODULE,ULONG,ULONG,ULONG,const MESSAGE_RESOURCE_ENTRY**);
1470 CCHAR     WINAPI RtlFindMostSignificantBit(ULONGLONG);
1471 ULONG     WINAPI RtlFindNextForwardRunSet(PCRTL_BITMAP,ULONG,PULONG);
1472 ULONG     WINAPI RtlFindNextForwardRunClear(PCRTL_BITMAP,ULONG,PULONG);
1473 ULONG     WINAPI RtlFindSetBits(PCRTL_BITMAP,ULONG,ULONG);
1474 ULONG     WINAPI RtlFindSetBitsAndClear(PRTL_BITMAP,ULONG,ULONG);
1475 ULONG     WINAPI RtlFindSetRuns(PCRTL_BITMAP,PRTL_BITMAP_RUN,ULONG,BOOLEAN);
1476 BOOLEAN   WINAPI RtlFirstFreeAce(PACL,PACE_HEADER *);
1477 NTSTATUS  WINAPI RtlFormatCurrentUserKeyPath(PUNICODE_STRING);
1478 NTSTATUS  WINAPI RtlFormatMessage(LPWSTR,UCHAR,BOOLEAN,BOOLEAN,BOOLEAN,va_list *,LPWSTR,ULONG);
1479 void      WINAPI RtlFreeAnsiString(PANSI_STRING);
1480 BOOLEAN   WINAPI RtlFreeHeap(HANDLE,ULONG,PVOID);
1481 void      WINAPI RtlFreeOemString(POEM_STRING);
1482 DWORD     WINAPI RtlFreeSid(PSID);
1483 void      WINAPI RtlFreeUnicodeString(PUNICODE_STRING);
1484
1485 DWORD     WINAPI RtlGetAce(PACL,DWORD,LPVOID *);
1486 NTSTATUS  WINAPI RtlGetControlSecurityDescriptor(PSECURITY_DESCRIPTOR, PSECURITY_DESCRIPTOR_CONTROL,LPDWORD);
1487 NTSTATUS  WINAPI RtlGetCurrentDirectory_U(ULONG, LPWSTR);
1488 NTSTATUS  WINAPI RtlGetDaclSecurityDescriptor(PSECURITY_DESCRIPTOR,PBOOLEAN,PACL *,PBOOLEAN);
1489 ULONG     WINAPI RtlGetFullPathName_U(PCWSTR,ULONG,PWSTR,PWSTR*);
1490 NTSTATUS  WINAPI RtlGetGroupSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID *,PBOOLEAN);
1491 DWORD     WINAPI RtlGetLastWin32Error(void);
1492 DWORD     WINAPI RtlGetLongestNtPathLength(void);
1493 BOOLEAN   WINAPI RtlGetNtProductType(LPDWORD);
1494 NTSTATUS  WINAPI RtlGetOwnerSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID *,PBOOLEAN);
1495 ULONG     WINAPI RtlGetProcessHeaps(ULONG,HANDLE*);
1496 NTSTATUS  WINAPI RtlGetSaclSecurityDescriptor(PSECURITY_DESCRIPTOR,PBOOLEAN,PACL *,PBOOLEAN);
1497 NTSTATUS  WINAPI RtlGetVersion(RTL_OSVERSIONINFOEXW*);
1498
1499 PSID_IDENTIFIER_AUTHORITY WINAPI RtlIdentifierAuthoritySid(PSID);
1500 PVOID     WINAPI RtlImageDirectoryEntryToData(HMODULE,BOOL,WORD,ULONG *);
1501 PIMAGE_NT_HEADERS WINAPI RtlImageNtHeader(HMODULE);
1502 PIMAGE_SECTION_HEADER WINAPI RtlImageRvaToSection(const IMAGE_NT_HEADERS *,HMODULE,DWORD);
1503 PVOID     WINAPI RtlImageRvaToVa(const IMAGE_NT_HEADERS *,HMODULE,DWORD,IMAGE_SECTION_HEADER **);
1504 BOOL      WINAPI RtlImpersonateSelf(SECURITY_IMPERSONATION_LEVEL);
1505 void      WINAPI RtlInitString(PSTRING,PCSZ);
1506 void      WINAPI RtlInitAnsiString(PANSI_STRING,PCSZ);
1507 void      WINAPI RtlInitUnicodeString(PUNICODE_STRING,PCWSTR);
1508 NTSTATUS  WINAPI RtlInitUnicodeStringEx(PUNICODE_STRING,PCWSTR);
1509 NTSTATUS  WINAPI RtlInitializeCriticalSection(RTL_CRITICAL_SECTION *);
1510 NTSTATUS  WINAPI RtlInitializeCriticalSectionAndSpinCount(RTL_CRITICAL_SECTION *,DWORD);
1511 void      WINAPI RtlInitializeBitMap(PRTL_BITMAP,PULONG,ULONG);
1512 void      WINAPI RtlInitializeResource(LPRTL_RWLOCK);
1513 BOOL      WINAPI RtlInitializeSid(PSID,PSID_IDENTIFIER_AUTHORITY,BYTE);
1514
1515 NTSTATUS  WINAPI RtlInt64ToUnicodeString(ULONGLONG,ULONG,UNICODE_STRING *);
1516 NTSTATUS  WINAPI RtlIntegerToChar(ULONG,ULONG,ULONG,PCHAR);
1517 NTSTATUS  WINAPI RtlIntegerToUnicodeString(ULONG,ULONG,UNICODE_STRING *);
1518 ULONG     WINAPI RtlIsDosDeviceName_U(PCWSTR);
1519 BOOLEAN   WINAPI RtlIsNameLegalDOS8Dot3(const UNICODE_STRING*,POEM_STRING,PBOOLEAN);
1520 DWORD     WINAPI RtlIsTextUnicode(LPVOID,DWORD,DWORD *);
1521
1522 LONGLONG  WINAPI RtlLargeIntegerAdd(LONGLONG,LONGLONG);
1523 LONGLONG  WINAPI RtlLargeIntegerArithmeticShift(LONGLONG,INT);
1524 ULONGLONG WINAPI RtlLargeIntegerDivide( ULONGLONG,ULONGLONG,ULONGLONG *);
1525 LONGLONG  WINAPI RtlLargeIntegerNegate(LONGLONG);
1526 LONGLONG  WINAPI RtlLargeIntegerShiftLeft(LONGLONG,INT);
1527 LONGLONG  WINAPI RtlLargeIntegerShiftRight(LONGLONG,INT);
1528 LONGLONG  WINAPI RtlLargeIntegerSubtract(LONGLONG,LONGLONG);
1529 NTSTATUS  WINAPI RtlLargeIntegerToChar(const ULONGLONG *,ULONG,ULONG,PCHAR);
1530 NTSTATUS  WINAPI RtlLeaveCriticalSection(RTL_CRITICAL_SECTION *);
1531 DWORD     WINAPI RtlLengthRequiredSid(DWORD);
1532 ULONG     WINAPI RtlLengthSecurityDescriptor(PSECURITY_DESCRIPTOR);
1533 DWORD     WINAPI RtlLengthSid(PSID);
1534 NTSTATUS  WINAPI RtlLocalTimeToSystemTime(const LARGE_INTEGER*,PLARGE_INTEGER);
1535 BOOLEAN   WINAPI RtlLockHeap(HANDLE);
1536
1537 NTSTATUS  WINAPI RtlMakeSelfRelativeSD(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,LPDWORD);
1538 void      WINAPI RtlMapGenericMask(PACCESS_MASK,const GENERIC_MAPPING*);
1539 NTSTATUS  WINAPI RtlMultiByteToUnicodeN(LPWSTR,DWORD,LPDWORD,LPCSTR,DWORD);
1540 NTSTATUS  WINAPI RtlMultiByteToUnicodeSize(DWORD*,LPCSTR,UINT);
1541
1542 DWORD     WINAPI RtlNewSecurityObject(DWORD,DWORD,DWORD,DWORD,DWORD,DWORD);
1543 PRTL_USER_PROCESS_PARAMETERS WINAPI RtlNormalizeProcessParams(RTL_USER_PROCESS_PARAMETERS*);
1544 ULONG     WINAPI RtlNtStatusToDosError(NTSTATUS);
1545 ULONG     WINAPI RtlNtStatusToDosErrorNoTeb(NTSTATUS);
1546 ULONG     WINAPI RtlNumberOfSetBits(PCRTL_BITMAP);
1547 ULONG     WINAPI RtlNumberOfClearBits(PCRTL_BITMAP);
1548
1549 UINT      WINAPI RtlOemStringToUnicodeSize(const STRING*);
1550 NTSTATUS  WINAPI RtlOemStringToUnicodeString(UNICODE_STRING*,const STRING*,BOOLEAN);
1551 NTSTATUS  WINAPI RtlOemToUnicodeN(LPWSTR,DWORD,LPDWORD,LPCSTR,DWORD);
1552 DWORD     WINAPI RtlOpenCurrentUser(ACCESS_MASK,PHKEY);
1553
1554 BOOLEAN   WINAPI RtlPrefixString(const STRING*,const STRING*,BOOLEAN);
1555 BOOLEAN   WINAPI RtlPrefixUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
1556
1557 NTSTATUS  WINAPI RtlQueryEnvironmentVariable_U(PWSTR,PUNICODE_STRING,PUNICODE_STRING);
1558 NTSTATUS  WINAPI RtlQueryInformationAcl(PACL,LPVOID,DWORD,ACL_INFORMATION_CLASS);
1559 NTSTATUS  WINAPI RtlQueryTimeZoneInformation(LPTIME_ZONE_INFORMATION);
1560
1561 void      WINAPI RtlRaiseException(PEXCEPTION_RECORD);
1562 void      WINAPI RtlRaiseStatus(NTSTATUS);
1563 ULONG     WINAPI RtlRandom(PULONG);
1564 PVOID     WINAPI RtlReAllocateHeap(HANDLE,ULONG,PVOID,ULONG);
1565 void      WINAPI RtlReleasePebLock(void);
1566 void      WINAPI RtlReleaseResource(LPRTL_RWLOCK);
1567 ULONG     WINAPI RtlRemoveVectoredExceptionHandler(PVOID);
1568 void      WINAPI RtlRestoreLastWin32Error(DWORD);
1569
1570 void      WINAPI RtlSecondsSince1970ToTime(DWORD,LARGE_INTEGER *);
1571 void      WINAPI RtlSecondsSince1980ToTime(DWORD,LARGE_INTEGER *);
1572 NTSTATUS  WINAPI RtlSelfRelativeToAbsoluteSD(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,
1573                                              PDWORD,PACL,PDWORD,PACL,PDWORD,PSID,PDWORD,PSID,PDWORD);
1574 void      WINAPI RtlSetAllBits(PRTL_BITMAP);
1575 void      WINAPI RtlSetBits(PRTL_BITMAP,ULONG,ULONG);
1576 ULONG     WINAPI RtlSetCriticalSectionSpinCount(RTL_CRITICAL_SECTION*,ULONG);
1577 NTSTATUS  WINAPI RtlSetCurrentDirectory_U(const UNICODE_STRING*);
1578 void      WINAPI RtlSetCurrentEnvironment(PWSTR, PWSTR*);
1579 NTSTATUS  WINAPI RtlSetDaclSecurityDescriptor(PSECURITY_DESCRIPTOR,BOOLEAN,PACL,BOOLEAN);
1580 NTSTATUS  WINAPI RtlSetEnvironmentVariable(PWSTR*,PUNICODE_STRING,PUNICODE_STRING);
1581 NTSTATUS  WINAPI RtlSetOwnerSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID,BOOLEAN);
1582 NTSTATUS  WINAPI RtlSetGroupSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID,BOOLEAN);
1583 void      WINAPI RtlSetLastWin32Error(DWORD);
1584 NTSTATUS  WINAPI RtlSetSaclSecurityDescriptor(PSECURITY_DESCRIPTOR,BOOLEAN,PACL,BOOLEAN);
1585 NTSTATUS  WINAPI RtlSetTimeZoneInformation(const TIME_ZONE_INFORMATION*);
1586 ULONG     WINAPI RtlSizeHeap(HANDLE,ULONG,PVOID);
1587 LPDWORD   WINAPI RtlSubAuthoritySid(PSID,DWORD);
1588 LPBYTE    WINAPI RtlSubAuthorityCountSid(PSID);
1589 NTSTATUS  WINAPI RtlSystemTimeToLocalTime(const LARGE_INTEGER*,PLARGE_INTEGER);
1590
1591 void      WINAPI RtlTimeToTimeFields(const LARGE_INTEGER*,PTIME_FIELDS);
1592 BOOLEAN   WINAPI RtlTimeFieldsToTime(PTIME_FIELDS,PLARGE_INTEGER);
1593 void      WINAPI RtlTimeToElapsedTimeFields(const LARGE_INTEGER *,PTIME_FIELDS);
1594 BOOLEAN   WINAPI RtlTimeToSecondsSince1970(const LARGE_INTEGER *,LPDWORD);
1595 BOOLEAN   WINAPI RtlTimeToSecondsSince1980(const LARGE_INTEGER *,LPDWORD);
1596 BOOL      WINAPI RtlTryEnterCriticalSection(RTL_CRITICAL_SECTION *);
1597
1598 ULONGLONG __cdecl RtlUlonglongByteSwap(ULONGLONG);
1599 DWORD     WINAPI RtlUnicodeStringToAnsiSize(const UNICODE_STRING*);
1600 NTSTATUS  WINAPI RtlUnicodeStringToAnsiString(PANSI_STRING,PCUNICODE_STRING,BOOLEAN);
1601 NTSTATUS  WINAPI RtlUnicodeStringToInteger(const UNICODE_STRING *,ULONG,ULONG *);
1602 DWORD     WINAPI RtlUnicodeStringToOemSize(const UNICODE_STRING*);
1603 NTSTATUS  WINAPI RtlUnicodeStringToOemString(POEM_STRING,PCUNICODE_STRING,BOOLEAN);
1604 NTSTATUS  WINAPI RtlUnicodeToMultiByteN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
1605 NTSTATUS  WINAPI RtlUnicodeToMultiByteSize(PULONG,PCWSTR,ULONG);
1606 NTSTATUS  WINAPI RtlUnicodeToOemN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
1607 ULONG     WINAPI RtlUniform(PULONG);
1608 BOOLEAN   WINAPI RtlUnlockHeap(HANDLE);
1609 void      WINAPI RtlUnwind(PVOID,PVOID,PEXCEPTION_RECORD,PVOID);
1610 #ifdef __ia64__
1611 void      WINAPI RtlUnwind2(FRAME_POINTERS,PVOID,PEXCEPTION_RECORD,PVOID,PCONTEXT);
1612 void      WINAPI RtlUnwindEx(FRAME_POINTERS,PVOID,PEXCEPTION_RECORD,PVOID,PCONTEXT,PUNWIND_HISTORY_TABLE);
1613 #endif
1614 WCHAR     WINAPI RtlUpcaseUnicodeChar(WCHAR);
1615 NTSTATUS  WINAPI RtlUpcaseUnicodeString(UNICODE_STRING*,const UNICODE_STRING *,BOOLEAN);
1616 NTSTATUS  WINAPI RtlUpcaseUnicodeStringToAnsiString(STRING*,const UNICODE_STRING*,BOOLEAN);
1617 NTSTATUS  WINAPI RtlUpcaseUnicodeStringToCountedOemString(STRING*,const UNICODE_STRING*,BOOLEAN);
1618 NTSTATUS  WINAPI RtlUpcaseUnicodeStringToOemString(STRING*,const UNICODE_STRING*,BOOLEAN);
1619 NTSTATUS  WINAPI RtlUpcaseUnicodeToMultiByteN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
1620 NTSTATUS  WINAPI RtlUpcaseUnicodeToOemN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
1621 CHAR      WINAPI RtlUpperChar(CHAR);
1622 void      WINAPI RtlUpperString(STRING *,const STRING *);
1623
1624 NTSTATUS  WINAPI RtlValidSecurityDescriptor(PSECURITY_DESCRIPTOR);
1625 BOOLEAN   WINAPI RtlValidAcl(PACL);
1626 BOOLEAN   WINAPI RtlValidSid(PSID);
1627 BOOLEAN   WINAPI RtlValidateHeap(HANDLE,ULONG,LPCVOID);
1628 NTSTATUS  WINAPI RtlVerifyVersionInfo(const RTL_OSVERSIONINFOEXW*,DWORD,DWORDLONG);
1629
1630 NTSTATUS  WINAPI RtlWalkHeap(HANDLE,PVOID);
1631
1632 NTSTATUS  WINAPI RtlpWaitForCriticalSection(RTL_CRITICAL_SECTION *);
1633 NTSTATUS  WINAPI RtlpUnWaitCriticalSection(RTL_CRITICAL_SECTION *);
1634
1635 /* Wine internal functions */
1636
1637 extern NTSTATUS wine_nt_to_unix_file_name( const UNICODE_STRING *nameW, ANSI_STRING *unix_name_ret,
1638                                            UINT disposition, BOOLEAN check_case );
1639
1640 /***********************************************************************
1641  * Inline functions
1642  */
1643
1644 #define InitializeObjectAttributes(p,n,a,r,s) \
1645     do { \
1646         (p)->Length = sizeof(OBJECT_ATTRIBUTES); \
1647         (p)->RootDirectory = r; \
1648         (p)->Attributes = a; \
1649         (p)->ObjectName = n; \
1650         (p)->SecurityDescriptor = s; \
1651         (p)->SecurityQualityOfService = NULL; \
1652     } while (0)
1653
1654 #define NtCurrentProcess() ((HANDLE)-1)
1655
1656 #define RtlFillMemory(Destination,Length,Fill) memset((Destination),(Fill),(Length))
1657 #define RtlMoveMemory(Destination,Source,Length) memmove((Destination),(Source),(Length))
1658 #define RtlStoreUlong(p,v)  do { ULONG _v = (v); memcpy((p), &_v, sizeof(_v)); } while (0)
1659 #define RtlStoreUlonglong(p,v) do { ULONGLONG _v = (v); memcpy((p), &_v, sizeof(_v)); } while (0)
1660 #define RtlRetrieveUlong(p,s) memcpy((p), (s), sizeof(ULONG))
1661 #define RtlRetrieveUlonglong(p,s) memcpy((p), (s), sizeof(ULONGLONG))
1662 #define RtlZeroMemory(Destination,Length) memset((Destination),0,(Length))
1663
1664 inline static BOOLEAN RtlCheckBit(PCRTL_BITMAP lpBits, ULONG ulBit)
1665 {
1666     if (lpBits && ulBit < lpBits->SizeOfBitMap &&
1667         lpBits->Buffer[ulBit >> 5] & (1 << (ulBit & 31)))
1668         return TRUE;
1669     return FALSE;
1670 }
1671
1672 /* These are implemented as __fastcall, so we can't let Winelib apps link with them */
1673 inline static USHORT RtlUshortByteSwap(USHORT s)
1674 {
1675     return (s >> 8) | (s << 8);
1676 }
1677 inline static ULONG RtlUlongByteSwap(ULONG i)
1678 {
1679 #if defined(__i386__) && defined(__GNUC__)
1680     ULONG ret;
1681     __asm__("bswap %0" : "=r" (ret) : "0" (i) );
1682     return ret;
1683 #else
1684     return ((ULONG)RtlUshortByteSwap((USHORT)i) << 16) | RtlUshortByteSwap((USHORT)(i >> 16));
1685 #endif
1686 }
1687
1688 /*************************************************************************
1689  * Loader functions and structures.
1690  *
1691  * Those are not part of standard Winternl.h
1692  */
1693 typedef struct _LDR_MODULE
1694 {
1695     LIST_ENTRY          InLoadOrderModuleList;
1696     LIST_ENTRY          InMemoryOrderModuleList;
1697     LIST_ENTRY          InInitializationOrderModuleList;
1698     void*               BaseAddress;
1699     void*               EntryPoint;
1700     ULONG               SizeOfImage;
1701     UNICODE_STRING      FullDllName;
1702     UNICODE_STRING      BaseDllName;
1703     ULONG               Flags;
1704     SHORT               LoadCount;
1705     SHORT               TlsIndex;
1706     HANDLE              SectionHandle;
1707     ULONG               CheckSum;
1708     ULONG               TimeDateStamp;
1709 } LDR_MODULE, *PLDR_MODULE;
1710
1711 /* those defines are (some of the) regular LDR_MODULE.Flags values */
1712 #define LDR_IMAGE_IS_DLL                0x00000004
1713 #define LDR_LOAD_IN_PROGRESS            0x00001000
1714 #define LDR_UNLOAD_IN_PROGRESS          0x00002000
1715 #define LDR_NO_DLL_CALLS                0x00040000
1716 #define LDR_PROCESS_ATTACHED            0x00080000
1717 #define LDR_MODULE_REBASED              0x00200000
1718
1719 /* these ones is Wine specific */
1720 #define LDR_DONT_RESOLVE_REFS           0x40000000
1721 #define LDR_WINE_INTERNAL               0x80000000
1722
1723 /* FIXME: to be checked */
1724 #define MAXIMUM_FILENAME_LENGTH 256
1725
1726 typedef struct _SYSTEM_MODULE
1727 {
1728     ULONG               Reserved1;
1729     ULONG               Reserved2;
1730     PVOID               ImageBaseAddress;
1731     ULONG               ImageSize;
1732     ULONG               Flags;
1733     WORD                Id;
1734     WORD                Rank;
1735     WORD                Unknown;
1736     WORD                NameOffset;
1737     BYTE                Name[MAXIMUM_FILENAME_LENGTH];
1738 } SYSTEM_MODULE, *PSYSTEM_MODULE;
1739
1740 typedef struct _SYSTEM_MODULE_INFORMATION
1741 {
1742     ULONG               ModulesCount;
1743     SYSTEM_MODULE       Modules[1]; /* FIXME: should be Modules[0] */
1744 } SYSTEM_MODULE_INFORMATION, *PSYSTEM_MODULE_INFORMATION;
1745
1746 NTSTATUS WINAPI LdrDisableThreadCalloutsForDll(HMODULE);
1747 NTSTATUS WINAPI LdrFindEntryForAddress(const void*, PLDR_MODULE*);
1748 NTSTATUS WINAPI LdrLockLoaderLock(ULONG,ULONG*,ULONG*);
1749 NTSTATUS WINAPI LdrQueryProcessModuleInformation(SYSTEM_MODULE_INFORMATION*, ULONG, ULONG*);
1750 NTSTATUS WINAPI LdrUnloadDll(HMODULE);
1751 NTSTATUS WINAPI LdrUnlockLoaderLock(ULONG,ULONG);
1752
1753 /* list manipulation macros */
1754 #define InitializeListHead(le)  (void)((le)->Flink = (le)->Blink = (le))
1755 #define InsertHeadList(le,e)    do { PLIST_ENTRY f = (le)->Flink; (e)->Flink = f; (e)->Blink = (le); f->Blink = (e); (le)->Flink = (e); } while (0)
1756 #define InsertTailList(le,e)    do { PLIST_ENTRY b = (le)->Blink; (e)->Flink = (le); (e)->Blink = b; b->Flink = (e); (le)->Blink = (e); } while (0)
1757 #define IsListEmpty(le)         ((le)->Flink == (le))
1758 #define RemoveEntryList(e)      do { PLIST_ENTRY f = (e)->Flink, b = (e)->Blink; f->Blink = b; b->Flink = f; (e)->Flink = (e)->Blink = NULL; } while (0)
1759 static inline PLIST_ENTRY RemoveHeadList(PLIST_ENTRY le)
1760 {
1761     PLIST_ENTRY f, b, e;
1762
1763     e = le->Flink;
1764     f = le->Flink->Flink;
1765     b = le->Flink->Blink;
1766     f->Blink = b;
1767     b->Flink = f;
1768
1769     if (e != le) e->Flink = e->Blink = NULL;
1770     return e;
1771 }
1772 static inline PLIST_ENTRY RemoveTailList(PLIST_ENTRY le)
1773 {
1774     PLIST_ENTRY f, b, e;
1775
1776     e = le->Blink;
1777     f = le->Blink->Flink;
1778     b = le->Blink->Blink;
1779     f->Blink = b;
1780     b->Flink = f;
1781
1782     if (e != le) e->Flink = e->Blink = NULL;
1783     return e;
1784 }
1785
1786 #ifdef __cplusplus
1787 } /* extern "C" */
1788 #endif /* defined(__cplusplus) */
1789
1790 #endif  /* __WINE_WINTERNL_H */