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