Use a better location than HKCU\Wine for saving the temporary
[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 #ifndef _FILETIME_
65 #define _FILETIME_
66 /* 64 bit number of 100 nanoseconds intervals since January 1, 1601 */
67 typedef struct _FILETIME
68 {
69 #ifdef WORDS_BIGENDIAN
70   DWORD  dwHighDateTime;
71   DWORD  dwLowDateTime;
72 #else
73   DWORD  dwLowDateTime;
74   DWORD  dwHighDateTime;
75 #endif
76 } FILETIME, *PFILETIME, *LPFILETIME;
77 #endif /* _FILETIME_ */
78
79 typedef struct _CLIENT_ID
80 {
81    HANDLE UniqueProcess;
82    HANDLE UniqueThread;
83 } CLIENT_ID, *PCLIENT_ID;
84
85 typedef struct _CURDIR
86 {
87     UNICODE_STRING DosPath;
88     PVOID Handle;
89 } CURDIR, *PCURDIR;
90
91 typedef struct RTL_DRIVE_LETTER_CURDIR
92 {
93     USHORT              Flags;
94     USHORT              Length;
95     ULONG               TimeStamp;
96     UNICODE_STRING      DosPath;
97 } RTL_DRIVE_LETTER_CURDIR, *PRTL_DRIVE_LETTER_CURDIR;
98
99 typedef struct tagRTL_BITMAP {
100     ULONG  SizeOfBitMap; /* Number of bits in the bitmap */
101     PULONG Buffer; /* Bitmap data, assumed sized to a DWORD boundary */
102 } RTL_BITMAP, *PRTL_BITMAP;
103
104 typedef const RTL_BITMAP *PCRTL_BITMAP;
105
106 typedef struct tagRTL_BITMAP_RUN {
107     ULONG StartingIndex; /* Bit position at which run starts */
108     ULONG NumberOfBits;  /* Size of the run in bits */
109 } RTL_BITMAP_RUN, *PRTL_BITMAP_RUN;
110
111 typedef const RTL_BITMAP_RUN *PCRTL_BITMAP_RUN;
112
113 typedef struct _RTL_USER_PROCESS_PARAMETERS
114 {
115     ULONG               AllocationSize;
116     ULONG               Size;
117     ULONG               Flags;
118     ULONG               DebugFlags;
119     HANDLE              ConsoleHandle;
120     ULONG               ConsoleFlags;
121     HANDLE              hStdInput;
122     HANDLE              hStdOutput;
123     HANDLE              hStdError;
124     CURDIR              CurrentDirectory;
125     UNICODE_STRING      DllPath;
126     UNICODE_STRING      ImagePathName;
127     UNICODE_STRING      CommandLine;
128     PWSTR               Environment;
129     ULONG               dwX;
130     ULONG               dwY;
131     ULONG               dwXSize;
132     ULONG               dwYSize;
133     ULONG               dwXCountChars;
134     ULONG               dwYCountChars;
135     ULONG               dwFillAttribute;
136     ULONG               dwFlags;
137     ULONG               wShowWindow;
138     UNICODE_STRING      WindowTitle;
139     UNICODE_STRING      Desktop;
140     UNICODE_STRING      ShellInfo;
141     UNICODE_STRING      RuntimeInfo;
142     RTL_DRIVE_LETTER_CURDIR DLCurrentDirectory[0x20];
143 } RTL_USER_PROCESS_PARAMETERS, *PRTL_USER_PROCESS_PARAMETERS;
144
145 /* value for Flags field (FIXME: not the correct name) */
146 #define PROCESS_PARAMS_FLAG_NORMALIZED 1
147
148 typedef struct _PEB_LDR_DATA
149 {
150     ULONG               Length;
151     BOOLEAN             Initialized;
152     PVOID               SsHandle;
153     LIST_ENTRY          InLoadOrderModuleList;
154     LIST_ENTRY          InMemoryOrderModuleList;
155     LIST_ENTRY          InInitializationOrderModuleList;
156 } PEB_LDR_DATA, *PPEB_LDR_DATA;
157
158 typedef struct _GDI_TEB_BATCH
159 {
160     ULONG  Offset;
161     HANDLE HDC;
162     ULONG  Buffer[0x136];
163 } GDI_TEB_BATCH;
164
165 /***********************************************************************
166  * PEB data structure
167  */
168 typedef struct _PEB
169 {
170     BOOLEAN                      InheritedAddressSpace;             /*  00 */
171     BOOLEAN                      ReadImageFileExecOptions;          /*  01 */
172     BOOLEAN                      BeingDebugged;                     /*  02 */
173     BOOLEAN                      SpareBool;                         /*  03 */
174     HANDLE                       Mutant;                            /*  04 */
175     HMODULE                      ImageBaseAddress;                  /*  08 */
176     PPEB_LDR_DATA                LdrData;                           /*  0c */
177     RTL_USER_PROCESS_PARAMETERS *ProcessParameters;                 /*  10 */
178     PVOID                        SubSystemData;                     /*  14 */
179     HANDLE                       ProcessHeap;                       /*  18 */
180     PRTL_CRITICAL_SECTION        FastPebLock;                       /*  1c */
181     PVOID /*PPEBLOCKROUTINE*/    FastPebLockRoutine;                /*  20 */
182     PVOID /*PPEBLOCKROUTINE*/    FastPebUnlockRoutine;              /*  24 */
183     ULONG                        EnvironmentUpdateCount;            /*  28 */
184     PVOID                        KernelCallbackTable;               /*  2c */
185     PVOID                        EventLogSection;                   /*  30 */
186     PVOID                        EventLog;                          /*  34 */
187     PVOID /*PPEB_FREE_BLOCK*/    FreeList;                          /*  38 */
188     ULONG                        TlsExpansionCounter;               /*  3c */
189     PRTL_BITMAP                  TlsBitmap;                         /*  40 */
190     ULONG                        TlsBitmapBits[2];                  /*  44 */
191     PVOID                        ReadOnlySharedMemoryBase;          /*  4c */
192     PVOID                        ReadOnlySharedMemoryHeap;          /*  50 */
193     PVOID                       *ReadOnlyStaticServerData;          /*  54 */
194     PVOID                        AnsiCodePageData;                  /*  58 */
195     PVOID                        OemCodePageData;                   /*  5c */
196     PVOID                        UnicodeCaseTableData;              /*  60 */
197     ULONG                        NumberOfProcessors;                /*  64 */
198     ULONG                        NtGlobalFlag;                      /*  68 */
199     BYTE                         Spare2[4];                         /*  6c */
200     LARGE_INTEGER                CriticalSectionTimeout;            /*  70 */
201     ULONG                        HeapSegmentReserve;                /*  78 */
202     ULONG                        HeapSegmentCommit;                 /*  7c */
203     ULONG                        HeapDeCommitTotalFreeThreshold;    /*  80 */
204     ULONG                        HeapDeCommitFreeBlockThreshold;    /*  84 */
205     ULONG                        NumberOfHeaps;                     /*  88 */
206     ULONG                        MaximumNumberOfHeaps;              /*  8c */
207     PVOID                       *ProcessHeaps;                      /*  90 */
208     PVOID                        GdiSharedHandleTable;              /*  94 */
209     PVOID                        ProcessStarterHelper;              /*  98 */
210     PVOID                        GdiDCAttributeList;                /*  9c */
211     PVOID                        LoaderLock;                        /*  a0 */
212     ULONG                        OSMajorVersion;                    /*  a4 */
213     ULONG                        OSMinorVersion;                    /*  a8 */
214     ULONG                        OSBuildNumber;                     /*  ac */
215     ULONG                        OSPlatformId;                      /*  b0 */
216     ULONG                        ImageSubSystem;                    /*  b4 */
217     ULONG                        ImageSubSystemMajorVersion;        /*  b8 */
218     ULONG                        ImageSubSystemMinorVersion;        /*  bc */
219     ULONG                        ImageProcessAffinityMask;          /*  c0 */
220     ULONG                        GdiHandleBuffer[34];               /*  c4 */
221     ULONG                        PostProcessInitRoutine;            /* 14c */
222     PRTL_BITMAP                  TlsExpansionBitmap;                /* 150 */
223     ULONG                        TlsExpansionBitmapBits[32];        /* 154 */
224     ULONG                        SessionId;                         /* 1d4 */
225 } PEB, *PPEB;
226
227
228 /***********************************************************************
229  * TEB data structure
230  */
231 #ifndef WINE_NO_TEB  /* don't define TEB if included from thread.h */
232 # ifndef WINE_TEB_DEFINED
233 # define WINE_TEB_DEFINED
234 typedef struct _TEB
235 {
236     NT_TIB          Tib;                        /* 000 */
237     PVOID           EnvironmentPointer;         /* 01c */
238     CLIENT_ID       ClientId;                   /* 020 */
239     PVOID           ActiveRpcHandle;            /* 028 */
240     PVOID           ThreadLocalStoragePointer;  /* 02c */
241     PPEB            Peb;                        /* 030 */
242     ULONG           LastErrorValue;             /* 034 */
243     ULONG           CountOfOwnedCriticalSections;/* 038 */
244     PVOID           CsrClientThread;            /* 03c */
245     PVOID           Win32ThreadInfo;            /* 040 */
246     ULONG           Win32ClientInfo[31];        /* 044 used for user32 private data in Wine */
247     PVOID           WOW32Reserved;              /* 0c0 */
248     ULONG           CurrentLocale;              /* 0c4 */
249     ULONG           FpSoftwareStatusRegister;   /* 0c8 */
250     PVOID           SystemReserved1[54];        /* 0cc used for kernel32 private data in Wine */
251     PVOID           Spare1;                     /* 1a4 */
252     LONG            ExceptionCode;              /* 1a8 */
253     BYTE            SpareBytes1[40];            /* 1ac */
254     PVOID           SystemReserved2[10];        /* 1d4 used for ntdll private data in Wine */
255     GDI_TEB_BATCH   GdiTebBatch;                /* 1fc */
256     ULONG           gdiRgn;                     /* 6dc */
257     ULONG           gdiPen;                     /* 6e0 */
258     ULONG           gdiBrush;                   /* 6e4 */
259     CLIENT_ID       RealClientId;               /* 6e8 */
260     HANDLE          GdiCachedProcessHandle;     /* 6f0 */
261     ULONG           GdiClientPID;               /* 6f4 */
262     ULONG           GdiClientTID;               /* 6f8 */
263     PVOID           GdiThreadLocaleInfo;        /* 6fc */
264     PVOID           UserReserved[5];            /* 700 */
265     PVOID           glDispachTable[280];        /* 714 */
266     ULONG           glReserved1[26];            /* b74 */
267     PVOID           glReserved2;                /* bdc */
268     PVOID           glSectionInfo;              /* be0 */
269     PVOID           glSection;                  /* be4 */
270     PVOID           glTable;                    /* be8 */
271     PVOID           glCurrentRC;                /* bec */
272     PVOID           glContext;                  /* bf0 */
273     ULONG           LastStatusValue;            /* bf4 */
274     UNICODE_STRING  StaticUnicodeString;        /* bf8 used by advapi32 */
275     WCHAR           StaticUnicodeBuffer[261];   /* c00 used by advapi32 */
276     PVOID           DeallocationStack;          /* e0c */
277     PVOID           TlsSlots[64];               /* e10 */
278     LIST_ENTRY      TlsLinks;                   /* f10 */
279     PVOID           Vdm;                        /* f18 */
280     PVOID           ReservedForNtRpc;           /* f1c */
281     PVOID           DbgSsReserved[2];           /* f20 */
282     ULONG           HardErrorDisabled;          /* f28 */
283     PVOID           Instrumentation[16];        /* f2c */
284     PVOID           WinSockData;                /* f6c */
285     ULONG           GdiBatchCount;              /* f70 */
286     ULONG           Spare2;                     /* f74 */
287     ULONG           Spare3;                     /* f78 */
288     ULONG           Spare4;                     /* f7c */
289     PVOID           ReservedForOle;             /* f80 */
290     ULONG           WaitingOnLoaderLock;        /* f84 */
291     PVOID           Reserved5[3];               /* f88 */
292     PVOID          *TlsExpansionSlots;          /* f94 */
293 } TEB, *PTEB;
294 # endif /* WINE_TEB_DEFINED */
295 #endif  /* WINE_NO_TEB */
296
297 /***********************************************************************
298  * Enums
299  */
300
301 typedef enum _FILE_INFORMATION_CLASS {
302     FileDirectoryInformation = 1,
303     FileFullDirectoryInformation,
304     FileBothDirectoryInformation,
305     FileBasicInformation,
306     FileStandardInformation,
307     FileInternalInformation,
308     FileEaInformation,
309     FileAccessInformation,
310     FileNameInformation,
311     FileRenameInformation,
312     FileLinkInformation,
313     FileNamesInformation,
314     FileDispositionInformation,
315     FilePositionInformation,
316     FileFullEaInformation,
317     FileModeInformation,
318     FileAlignmentInformation,
319     FileAllInformation,
320     FileAllocationInformation,
321     FileEndOfFileInformation,
322     FileAlternateNameInformation,
323     FileStreamInformation,
324     FilePipeInformation,
325     FilePipeLocalInformation,
326     FilePipeRemoteInformation,
327     FileMailslotQueryInformation,
328     FileMailslotSetInformation,
329     FileCompressionInformation,
330     FileObjectIdInformation,
331     FileCompletionInformation,
332     FileMoveClusterInformation,
333     FileQuotaInformation,
334     FileReparsePointInformation,
335     FileNetworkOpenInformation,
336     FileAttributeTagInformation,
337     FileTrackingInformation,
338     FileMaximumInformation
339 } FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;
340
341 typedef struct _FILE_DIRECTORY_INFORMATION {
342     ULONG               NextEntryOffset;
343     ULONG               FileIndex;
344     LARGE_INTEGER       CreationTime;
345     LARGE_INTEGER       LastAccessTime;
346     LARGE_INTEGER       LastWriteTime;
347     LARGE_INTEGER       ChangeTime;
348     LARGE_INTEGER       EndOfFile;
349     LARGE_INTEGER       AllocationSize;
350     ULONG               FileAttributes;
351     ULONG               FileNameLength;
352     WCHAR               FileName[ANYSIZE_ARRAY];
353 } FILE_DIRECTORY_INFORMATION, *PFILE_DIRECTORY_INFORMATION;
354
355 typedef struct _FILE_FULL_DIRECTORY_INFORMATION {
356     ULONG               NextEntryOffset;
357     ULONG               FileIndex;
358     LARGE_INTEGER       CreationTime;
359     LARGE_INTEGER       LastAccessTime;
360     LARGE_INTEGER       LastWriteTime;
361     LARGE_INTEGER       ChangeTime;
362     LARGE_INTEGER       EndOfFile;
363     LARGE_INTEGER       AllocationSize;
364     ULONG               FileAttributes;
365     ULONG               FileNameLength;
366     ULONG               EaSize;
367     WCHAR               FileName[ANYSIZE_ARRAY];
368 } FILE_FULL_DIRECTORY_INFORMATION, *PFILE_FULL_DIRECTORY_INFORMATION,
369   FILE_FULL_DIR_INFORMATION, *PFILE_FULL_DIR_INFORMATION;
370
371 typedef struct _FILE_BOTH_DIRECTORY_INFORMATION {
372     ULONG               NextEntryOffset;
373     ULONG               FileIndex;
374     LARGE_INTEGER       CreationTime;
375     LARGE_INTEGER       LastAccessTime;
376     LARGE_INTEGER       LastWriteTime;
377     LARGE_INTEGER       ChangeTime;
378     LARGE_INTEGER       EndOfFile;
379     LARGE_INTEGER       AllocationSize;
380     ULONG               FileAttributes;
381     ULONG               FileNameLength;
382     ULONG               EaSize;
383     CHAR                ShortNameLength;
384     WCHAR               ShortName[12];
385     WCHAR               FileName[ANYSIZE_ARRAY];
386 } FILE_BOTH_DIRECTORY_INFORMATION, *PFILE_BOTH_DIRECTORY_INFORMATION,
387   FILE_BOTH_DIR_INFORMATION, *PFILE_BOTH_DIR_INFORMATION;
388
389 typedef struct _FILE_BASIC_INFORMATION {
390     LARGE_INTEGER CreationTime;
391     LARGE_INTEGER LastAccessTime;
392     LARGE_INTEGER LastWriteTime;
393     LARGE_INTEGER ChangeTime;
394     ULONG FileAttributes;
395 } FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION;
396
397 typedef struct _FILE_STANDARD_INFORMATION {
398     LARGE_INTEGER AllocationSize;
399     LARGE_INTEGER EndOfFile;
400     ULONG NumberOfLinks;
401     BOOLEAN DeletePending;
402     BOOLEAN Directory;
403 } FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION;
404
405 typedef struct _FILE_INTERNAL_INFORMATION {
406     LARGE_INTEGER IndexNumber;
407 } FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION;
408
409 typedef struct _FILE_EA_INFORMATION {
410     ULONG EaSize;
411 } FILE_EA_INFORMATION, *PFILE_EA_INFORMATION;
412
413 typedef struct _FILE_ACCESS_INFORMATION {
414     ACCESS_MASK AccessFlags;
415 } FILE_ACCESS_INFORMATION, *PFILE_ACCESS_INFORMATION;
416
417 typedef struct _FILE_NAME_INFORMATION {
418     ULONG FileNameLength;
419     WCHAR FileName[1];
420 } FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION;
421
422 typedef struct _FILE_RENAME_INFORMATION {
423     BOOLEAN Replace;
424     HANDLE RootDir;
425     ULONG FileNameLength;
426     WCHAR FileName[1];
427 } FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION;
428
429 typedef struct _FILE_NAMES_INFORMATION {
430     ULONG NextEntryOffset;
431     ULONG FileIndex;
432     ULONG FileNameLength;
433     WCHAR FileName[1];
434 } FILE_NAMES_INFORMATION, *PFILE_NAMES_INFORMATION;
435
436 typedef struct _FILE_DISPOSITION_INFORMATION {
437     BOOLEAN DoDeleteFile;
438 } FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION;
439
440 typedef struct _FILE_POSITION_INFORMATION {
441     LARGE_INTEGER CurrentByteOffset;
442 } FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION;
443
444 typedef struct _FILE_ALIGNMENT_INFORMATION {
445     ULONG AlignmentRequirement;
446 } FILE_ALIGNMENT_INFORMATION, *PFILE_ALIGNMENT_INFORMATION;
447
448 typedef struct _FILE_ALLOCATION_INFORMATION {
449     LARGE_INTEGER AllocationSize;
450 } FILE_ALLOCATION_INFORMATION, *PFILE_ALLOCATION_INFORMATION;
451
452 typedef struct _FILE_END_OF_FILE_INFORMATION {
453     LARGE_INTEGER EndOfFile;
454 } FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION;
455
456 typedef struct _FILE_NETWORK_OPEN_INFORMATION {
457     LARGE_INTEGER CreationTime;
458     LARGE_INTEGER LastAccessTime;
459     LARGE_INTEGER LastWriteTime;
460     LARGE_INTEGER ChangeTime;
461     LARGE_INTEGER AllocationSize;
462     LARGE_INTEGER EndOfFile;
463     ULONG FileAttributes;
464 } FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION;
465
466 typedef struct _FILE_FULL_EA_INFORMATION {
467     ULONG NextEntryOffset;
468     UCHAR Flags;
469     UCHAR EaNameLength;
470     USHORT EaValueLength;
471     CHAR EaName[1];
472 } FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION;
473
474 typedef struct _FILE_MODE_INFORMATION {
475     ULONG Mode;
476 } FILE_MODE_INFORMATION, *PFILE_MODE_INFORMATION;
477
478 typedef struct _FILE_STREAM_INFORMATION
479 {
480     ULONG NextEntryOffset;
481     ULONG StreamNameLength;
482     LARGE_INTEGER StreamSize;
483     LARGE_INTEGER StreamAllocationSize;
484     WCHAR StreamName[1];
485 } FILE_STREAM_INFORMATION, *PFILE_STREAM_INFORMATION;
486
487 typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION
488 {
489     ULONG FileAttributes;
490     ULONG ReparseTag;
491 } FILE_ATTRIBUTE_TAG_INFORMATION, *PFILE_ATTRIBUTE_TAG_INFORMATION;
492
493 typedef struct _FILE_MAILSLOT_QUERY_INFORMATION {
494     ULONG MaximumMessageSize;
495     ULONG MailslotQuota;
496     ULONG NextMessageSize;
497     ULONG MessagesAvailable;
498     LARGE_INTEGER ReadTimeout;
499 } FILE_MAILSLOT_QUERY_INFORMATION, *PFILE_MAILSLOT_QUERY_INFORMATION;
500
501 typedef struct _FILE_MAILSLOT_SET_INFORMATION {
502     LARGE_INTEGER ReadTimeout;
503 } FILE_MAILSLOT_SET_INFORMATION, *PFILE_MAILSLOT_SET_INFORMATION;
504
505 typedef struct _FILE_ALL_INFORMATION
506 {
507     FILE_BASIC_INFORMATION     BasicInformation;
508     FILE_STANDARD_INFORMATION  StandardInformation;
509     FILE_INTERNAL_INFORMATION  InternalInformation;
510     FILE_EA_INFORMATION        EaInformation;
511     FILE_ACCESS_INFORMATION    AccessInformation;
512     FILE_POSITION_INFORMATION  PositionInformation;
513     FILE_MODE_INFORMATION      ModeInformation;
514     FILE_ALIGNMENT_INFORMATION AlignmentInformation;
515     FILE_NAME_INFORMATION      NameInformation;
516 } FILE_ALL_INFORMATION, *PFILE_ALL_INFORMATION;
517
518 typedef enum _FSINFOCLASS {
519     FileFsVolumeInformation = 1,
520     FileFsLabelInformation,
521     FileFsSizeInformation,
522     FileFsDeviceInformation,
523     FileFsAttributeInformation,
524     FileFsControlInformation,
525     FileFsFullSizeInformation,
526     FileFsObjectIdInformation,
527     FileFsMaximumInformation
528 } FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS;
529
530 typedef enum _KEY_INFORMATION_CLASS {
531     KeyBasicInformation,
532     KeyNodeInformation,
533     KeyFullInformation
534 } KEY_INFORMATION_CLASS;
535
536 typedef enum _KEY_VALUE_INFORMATION_CLASS {
537     KeyValueBasicInformation,
538     KeyValueFullInformation,
539     KeyValuePartialInformation,
540     KeyValueFullInformationAlign64,
541     KeyValuePartialInformationAlign64
542 } KEY_VALUE_INFORMATION_CLASS;
543
544 typedef enum _OBJECT_INFORMATION_CLASS {
545     ObjectBasicInformation,
546     ObjectNameInformation,
547     ObjectTypeInformation,
548     ObjectAllInformation,
549     ObjectDataInformation
550 } OBJECT_INFORMATION_CLASS, *POBJECT_INFORMATION_CLASS;
551
552 typedef enum _PROCESSINFOCLASS {
553     ProcessBasicInformation = 0,
554     ProcessQuotaLimits = 1,
555     ProcessIoCounters = 2,
556     ProcessVmCounters = 3,
557     ProcessTimes = 4,
558     ProcessBasePriority = 5,
559     ProcessRaisePriority = 6,
560     ProcessDebugPort = 7,
561     ProcessExceptionPort = 8,
562     ProcessAccessToken = 9,
563     ProcessLdtInformation = 10,
564     ProcessLdtSize = 11,
565     ProcessDefaultHardErrorMode = 12,
566     ProcessIoPortHandlers = 13,
567     ProcessPooledUsageAndLimits = 14,
568     ProcessWorkingSetWatch = 15,
569     ProcessUserModeIOPL = 16,
570     ProcessEnableAlignmentFaultFixup = 17,
571     ProcessPriorityClass = 18,
572     ProcessWx86Information = 19,
573     ProcessHandleCount = 20,
574     ProcessAffinityMask = 21,
575     ProcessPriorityBoost = 22,
576     ProcessDeviceMap = 23,
577     ProcessSessionInformation = 24,
578     ProcessForegroundInformation = 25,
579     ProcessWow64Information = 26,
580     MaxProcessInfoClass
581 } PROCESSINFOCLASS;
582
583 typedef enum _SECTION_INHERIT {
584     ViewShare = 1,
585     ViewUnmap = 2
586 } SECTION_INHERIT;
587
588 typedef enum _SYSTEM_INFORMATION_CLASS {
589     SystemBasicInformation = 0,
590     SystemCpuInformation = 1,
591     SystemPerformanceInformation = 2,
592     SystemTimeOfDayInformation = 3, /* was SystemTimeInformation */
593     Unknown4,
594     SystemProcessInformation = 5,
595     Unknown6,
596     Unknown7,
597     SystemProcessorPerformanceInformation = 8,
598     Unknown9,
599     Unknown10,
600     SystemModuleInformation = 11,
601     Unknown12,
602     Unknown13,
603     Unknown14,
604     Unknown15,
605     SystemHandleInformation = 16,
606     Unknown17,
607     SystemPageFileInformation = 18,
608     Unknown19,
609     Unknown20,
610     SystemCacheInformation = 21,
611     Unknown22,
612     SystemInterruptInformation = 23,
613     SystemDpcBehaviourInformation = 24,
614     SystemFullMemoryInformation = 25,
615     SystemNotImplemented6 = 25,
616     SystemLoadImage = 26,
617     SystemUnloadImage = 27,
618     SystemTimeAdjustmentInformation = 28,
619     SystemTimeAdjustment = 28,
620     SystemSummaryMemoryInformation = 29,
621     SystemNotImplemented7 = 29,
622     SystemNextEventIdInformation = 30,
623     SystemNotImplemented8 = 30,
624     SystemEventIdsInformation = 31,
625     SystemCrashDumpInformation = 32,
626     SystemExceptionInformation = 33,
627     SystemCrashDumpStateInformation = 34,
628     SystemKernelDebuggerInformation = 35,
629     SystemContextSwitchInformation = 36,
630     SystemRegistryQuotaInformation = 37,
631     SystemCurrentTimeZoneInformation = 44,
632     SystemTimeZoneInformation = 44,
633     SystemLookasideInformation = 45,
634     SystemSetTimeSlipEvent = 46,
635     SystemCreateSession = 47,
636     SystemDeleteSession = 48,
637     SystemInvalidInfoClass4 = 49,
638     SystemRangeStartInformation = 50,
639     SystemVerifierInformation = 51,
640     SystemAddVerifier = 52,
641     SystemSessionProcessesInformation   = 53,
642     SystemInformationClassMax
643 } SYSTEM_INFORMATION_CLASS, *PSYSTEM_INFORMATION_CLASS;
644
645 typedef enum _TIMER_TYPE {
646     NotificationTimer,
647     SynchronizationTimer
648 } TIMER_TYPE;
649
650 typedef enum _THREADINFOCLASS {
651     ThreadBasicInformation,
652     ThreadTimes,
653     ThreadPriority,
654     ThreadBasePriority,
655     ThreadAffinityMask,
656     ThreadImpersonationToken,
657     ThreadDescriptorTableEntry,
658     ThreadEnableAlignmentFaultFixup,
659     ThreadEventPair_Reusable,
660     ThreadQuerySetWin32StartAddress,
661     ThreadZeroTlsCell,
662     ThreadPerformanceCount,
663     ThreadAmILastThread,
664     ThreadIdealProcessor,
665     ThreadPriorityBoost,
666     ThreadSetTlsArrayAddress,
667     ThreadIsIoPending,
668     MaxThreadInfoClass
669 } THREADINFOCLASS;
670
671 typedef struct _THREAD_BASIC_INFORMATION
672 {
673     NTSTATUS  ExitStatus;
674     PVOID     TebBaseAddress;
675     CLIENT_ID ClientId;
676     ULONG     AffinityMask;
677     LONG      Priority;
678     LONG      BasePriority;
679 } THREAD_BASIC_INFORMATION, *PTHREAD_BASIC_INFORMATION;
680
681
682 typedef enum _WINSTATIONINFOCLASS {
683     WinStationInformation = 8
684 } WINSTATIONINFOCLASS;
685
686 typedef enum _MEMORY_INFORMATION_CLASS {
687     MemoryBasicInformation,
688     MemoryWorkingSetList,
689     MemorySectionName,
690     MemoryBasicVlmInformation
691 } MEMORY_INFORMATION_CLASS;
692
693 typedef enum _MUTANT_INFORMATION_CLASS
694 {
695     MutantBasicInformation
696 } MUTANT_INFORMATION_CLASS, *PMUTANT_INFORMATION_CLASS;
697
698 typedef struct _MUTANT_BASIC_INFORMATION {
699     LONG        CurrentCount;
700     BOOLEAN     OwnedByCaller;
701     BOOLEAN     AbandonedState;
702 } MUTANT_BASIC_INFORMATION, *PMUTANT_BASIC_INFORMATION;
703
704 typedef enum _TIMER_INFORMATION_CLASS
705 {
706     TimerBasicInformation = 0
707 } TIMER_INFORMATION_CLASS;
708
709 typedef struct _TIMER_BASIC_INFORMATION
710 {
711     LARGE_INTEGER RemainingTime;
712     BOOLEAN       TimerState;
713 } TIMER_BASIC_INFORMATION, *PTIMER_BASIC_INFORMATION;
714
715
716 /* return type of RtlDetermineDosPathNameType_U (FIXME: not the correct names) */
717 typedef enum
718 {
719     INVALID_PATH = 0,
720     UNC_PATH,              /* "//foo" */
721     ABSOLUTE_DRIVE_PATH,   /* "c:/foo" */
722     RELATIVE_DRIVE_PATH,   /* "c:foo" */
723     ABSOLUTE_PATH,         /* "/foo" */
724     RELATIVE_PATH,         /* "foo" */
725     DEVICE_PATH,           /* "//./foo" */
726     UNC_DOT_PATH           /* "//." */
727 } DOS_PATHNAME_TYPE;
728
729 /***********************************************************************
730  * IA64 specific types and data structures
731  */
732
733 #ifdef __ia64__
734
735 typedef struct _FRAME_POINTERS {
736   ULONGLONG MemoryStackFp;
737   ULONGLONG BackingStoreFp;
738 } FRAME_POINTERS, *PFRAME_POINTERS;
739
740 #define UNWIND_HISTORY_TABLE_SIZE 12
741
742 typedef struct _RUNTIME_FUNCTION {
743   ULONG BeginAddress;
744   ULONG EndAddress;
745   ULONG UnwindInfoAddress;
746 } RUNTIME_FUNCTION, *PRUNTIME_FUNCTION;
747
748 typedef struct _UNWIND_HISTORY_TABLE_ENTRY {
749   ULONG64 ImageBase;
750   ULONG64 Gp;
751   PRUNTIME_FUNCTION FunctionEntry;
752 } UNWIND_HISTORY_TABLE_ENTRY, *PUNWIND_HISTORY_TABLE_ENTRY;
753
754 typedef struct _UNWIND_HISTORY_TABLE {
755   ULONG Count;
756   UCHAR Search;
757   ULONG64 LowAddress;
758   ULONG64 HighAddress;
759   UNWIND_HISTORY_TABLE_ENTRY Entry[UNWIND_HISTORY_TABLE_SIZE];
760 } UNWIND_HISTORY_TABLE, *PUNWIND_HISTORY_TABLE;
761
762 #endif /* defined(__ia64__) */
763
764 /***********************************************************************
765  * Types and data structures
766  */
767
768 /* This is used by NtQuerySystemInformation */
769 typedef struct _SYSTEM_THREAD_INFORMATION{
770     FILETIME    ftKernelTime;
771     FILETIME    ftUserTime;
772     FILETIME    ftCreateTime;
773     DWORD       dwTickCount;
774     DWORD       dwStartAddress;
775     DWORD       dwOwningPID;
776     DWORD       dwThreadID;
777     DWORD       dwCurrentPriority;
778     DWORD       dwBasePriority;
779     DWORD       dwContextSwitches;
780     DWORD       dwThreadState;
781     DWORD       dwWaitReason;
782     DWORD       dwUnknown;
783 } SYSTEM_THREAD_INFORMATION, *PSYSTEM_THREAD_INFORMATION;
784
785 typedef struct _IO_STATUS_BLOCK {
786   union {
787     NTSTATUS Status;
788     PVOID Pointer;
789   } DUMMYUNIONNAME;
790
791   ULONG_PTR Information;
792 } IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
793
794 typedef void (WINAPI * PIO_APC_ROUTINE)(PVOID,PIO_STATUS_BLOCK,ULONG);
795
796 typedef struct _KEY_BASIC_INFORMATION {
797     LARGE_INTEGER LastWriteTime;
798     ULONG         TitleIndex;
799     ULONG         NameLength;
800     WCHAR         Name[1];
801 } KEY_BASIC_INFORMATION, *PKEY_BASIC_INFORMATION;
802
803 typedef struct _KEY_NODE_INFORMATION
804 {
805     LARGE_INTEGER LastWriteTime;
806     ULONG         TitleIndex;
807     ULONG         ClassOffset;
808     ULONG         ClassLength;
809     ULONG         NameLength;
810     WCHAR         Name[1];
811    /* Class[1]; */
812 } KEY_NODE_INFORMATION, *PKEY_NODE_INFORMATION;
813
814 typedef struct _KEY_FULL_INFORMATION
815 {
816     LARGE_INTEGER LastWriteTime;
817     ULONG         TitleIndex;
818     ULONG         ClassOffset;
819     ULONG         ClassLength;
820     ULONG         SubKeys;
821     ULONG         MaxNameLen;
822     ULONG         MaxClassLen;
823     ULONG         Values;
824     ULONG         MaxValueNameLen;
825     ULONG         MaxValueDataLen;
826     WCHAR         Class[1];
827 } KEY_FULL_INFORMATION, *PKEY_FULL_INFORMATION;
828
829 typedef struct _KEY_VALUE_ENTRY
830 {
831     PUNICODE_STRING ValueName;
832     ULONG           DataLength;
833     ULONG           DataOffset;
834     ULONG           Type;
835 } KEY_VALUE_ENTRY, *PKEY_VALUE_ENTRY;
836
837 typedef struct _KEY_VALUE_BASIC_INFORMATION {
838     ULONG TitleIndex;
839     ULONG Type;
840     ULONG NameLength;
841     WCHAR Name[1];
842 } KEY_VALUE_BASIC_INFORMATION, *PKEY_VALUE_BASIC_INFORMATION;
843
844 typedef struct _KEY_VALUE_FULL_INFORMATION {
845     ULONG TitleIndex;
846     ULONG Type;
847     ULONG DataOffset;
848     ULONG DataLength;
849     ULONG NameLength;
850     WCHAR Name[1];
851 } KEY_VALUE_FULL_INFORMATION, *PKEY_VALUE_FULL_INFORMATION;
852
853 typedef struct _KEY_VALUE_PARTIAL_INFORMATION {
854     ULONG TitleIndex;
855     ULONG Type;
856     ULONG DataLength;
857     UCHAR Data[1];
858 } KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION;
859
860 typedef struct _OBJECT_ATTRIBUTES {
861   ULONG Length;
862   HANDLE RootDirectory;
863   PUNICODE_STRING ObjectName;
864   ULONG Attributes;
865   PVOID SecurityDescriptor;       /* type SECURITY_DESCRIPTOR */
866   PVOID SecurityQualityOfService; /* type SECURITY_QUALITY_OF_SERVICE */
867 } OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;
868
869 typedef struct _OBJECT_DATA_INFORMATION {
870     BOOLEAN InheritHandle;
871     BOOLEAN ProtectFromClose;
872 } OBJECT_DATA_INFORMATION, *POBJECT_DATA_INFORMATION;
873
874 typedef struct _PROCESS_BASIC_INFORMATION {
875 #ifdef __WINESRC__
876     DWORD ExitStatus;
877     DWORD PebBaseAddress;
878     DWORD AffinityMask;
879     DWORD BasePriority;
880     ULONG UniqueProcessId;
881     ULONG InheritedFromUniqueProcessId;
882 #else
883     PVOID Reserved1;
884     PPEB PebBaseAddress;
885     PVOID Reserved2[2];
886     ULONG_PTR UniqueProcessId;
887     PVOID Reserved3;
888 #endif
889 } PROCESS_BASIC_INFORMATION, *PPROCESS_BASIC_INFORMATION;
890
891 typedef struct _RTL_HEAP_DEFINITION {
892     ULONG Length; /* = sizeof(RTL_HEAP_DEFINITION) */
893
894     ULONG Unknown[11];
895 } RTL_HEAP_DEFINITION, *PRTL_HEAP_DEFINITION;
896
897 typedef struct _RTL_RWLOCK {
898     RTL_CRITICAL_SECTION rtlCS;
899
900     HANDLE hSharedReleaseSemaphore;
901     UINT   uSharedWaiters;
902
903     HANDLE hExclusiveReleaseSemaphore;
904     UINT   uExclusiveWaiters;
905
906     INT    iNumberActive;
907     HANDLE hOwningThreadId;
908     DWORD  dwTimeoutBoost;
909     PVOID  pDebugInfo;
910 } RTL_RWLOCK, *LPRTL_RWLOCK;
911
912 /* System Information Class 0x00 */
913
914 typedef struct _SYSTEM_BASIC_INFORMATION {
915 #ifdef __WINESRC__
916     DWORD dwUnknown1;
917     ULONG uKeMaximumIncrement;
918     ULONG uPageSize;
919     ULONG uMmNumberOfPhysicalPages;
920     ULONG uMmLowestPhysicalPage;
921     ULONG uMmHighestPhysicalPage;
922     ULONG uAllocationGranularity;
923     PVOID pLowestUserAddress;
924     PVOID pMmHighestUserAddress;
925     ULONG uKeActiveProcessors;
926     BYTE bKeNumberProcessors;
927     BYTE bUnknown2;
928     WORD wUnknown3;
929 #else
930     BYTE Reserved1[24];
931     PVOID Reserved2[4];
932     CCHAR NumberOfProcessors;
933 #endif
934 } SYSTEM_BASIC_INFORMATION, *PSYSTEM_BASIC_INFORMATION;
935
936 /* System Information Class 0x01 */
937
938 typedef struct _SYSTEM_CPU_INFORMATION {
939     WORD Architecture;
940     WORD Level;
941     WORD Revision;       /* combination of CPU model and stepping */
942     WORD Reserved;       /* always zero */
943     DWORD FeatureSet;    /* see bit flags below */
944 } SYSTEM_CPU_INFORMATION, *PSYSTEM_CPU_INFORMATION;
945
946 /* definitions of bits in the Feature set for the x86 processors */
947 #define CPU_FEATURE_VME    0x00000005   /* Virtual 86 Mode Extensions */
948 #define CPU_FEATURE_TSC    0x00000002   /* Time Stamp Counter available */
949 #define CPU_FEATURE_CMOV   0x00000008   /* Conditional Move instruction*/
950 #define CPU_FEATURE_PGE    0x00000014   /* Page table Entry Global bit */ 
951 #define CPU_FEATURE_PSE    0x00000024   /* Page Size Extension */
952 #define CPU_FEATURE_MTRR   0x00000040   /* Memory Type Range Registers */
953 #define CPU_FEATURE_CX8    0x00000080   /* Compare and eXchange 8 byte instr. */
954 #define CPU_FEATURE_MMX    0x00000100   /* Multi Media eXtensions */
955 #define CPU_FEATURE_X86    0x00000200   /* seems to be alway ON, on the '86 */
956 #define CPU_FEATURE_PAT    0x00000400   /* Page Attribute Table */
957 #define CPU_FEATURE_FXSR   0x00000800   /* FXSAVE and FXSTORE instructions */
958 #define CPU_FEATURE_SEP    0x00001000   /* SYSENTER and SYSEXIT instructions */
959 #define CPU_FEATURE_SSE    0x00002000   /* SSE extenstions (ext. MMX) */
960 #define CPU_FEATURE_3DNOW  0x00008000   /* 3DNOW instructions available 
961                                            (FIXME: needs to be confirmed) */
962 #define CPU_FEATURE_SSE2   0x00010000   /* SSE2 extensions (XMMI64) */
963 #define CPU_FEATURE_DS     0x00020000   /* Debug Store */
964 #define CPU_FEATURE_HTT    0x00040000   /* Hyper Threading Technology */
965
966 /* System Information Class 0x02 */
967
968 typedef struct _SYSTEM_PERFORMANCE_INFORMATION {
969     BYTE Reserved1[312];
970 } SYSTEM_PERFORMANCE_INFORMATION, *PSYSTEM_PERFORMANCE_INFORMATION;
971
972 /* System Information Class 0x03 */
973
974 typedef struct _SYSTEM_TIMEOFDAY_INFORMATION {
975 #ifdef __WINESRC__
976     LARGE_INTEGER liKeBootTime;
977     LARGE_INTEGER liKeSystemTime;
978     LARGE_INTEGER liExpTimeZoneBias;
979     ULONG uCurrentTimeZoneId;
980     DWORD dwUnknown1[5];
981 #else
982     BYTE Reserved1[48];
983 #endif
984 } SYSTEM_TIMEOFDAY_INFORMATION, *PSYSTEM_TIMEOFDAY_INFORMATION; /* was SYSTEM_TIME_INFORMATION */
985
986 /* System Information Class 0x08 */
987
988 typedef struct _SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION {
989 #ifdef __WINESRC__
990     LARGE_INTEGER liIdleTime;
991     DWORD dwSpare[10];
992 #else
993     LARGE_INTEGER IdleTime;
994     LARGE_INTEGER KernelTime;
995     LARGE_INTEGER UserTime;
996     LARGE_INTEGER Reserved1[2];
997     ULONG Reserved2;
998 #endif
999 } SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION, *PSYSTEM_PROCESSOR_PERFORMANCE_INFORMATION;
1000
1001 /* System Information Class 0x0b */
1002
1003 typedef struct _SYSTEM_DRIVER_INFORMATION {
1004     PVOID pvAddress;
1005     DWORD dwUnknown1;
1006     DWORD dwUnknown2;
1007     DWORD dwEntryIndex;
1008     DWORD dwUnknown3;
1009     char szName[MAX_PATH + 1];
1010 } SYSTEM_DRIVER_INFORMATION, *PSYSTEM_DRIVER_INFORMATION;
1011
1012 /* System Information Class 0x10 */
1013
1014 typedef struct _SYSTEM_HANDLE_ENTRY {
1015     ULONG  OwnerPid;
1016     BYTE   ObjectType;
1017     BYTE   HandleFlags;
1018     USHORT HandleValue;
1019     PVOID  ObjectPointer;
1020     ULONG  AccessMask;
1021 } SYSTEM_HANDLE_ENTRY, *PSYSTEM_HANDLE_ENTRY;
1022
1023 typedef struct _SYSTEM_HANDLE_INFORMATION {
1024     ULONG               Count;
1025     SYSTEM_HANDLE_ENTRY Handle[1];
1026 } SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION;
1027
1028 /* System Information Class 0x15 */
1029
1030 typedef struct _SYSTEM_CACHE_INFORMATION {
1031     ULONG CurrentSize;
1032     ULONG PeakSize;
1033     ULONG PageFaultCount;
1034     ULONG MinimumWorkingSet;
1035     ULONG MaximumWorkingSet;
1036     ULONG unused[4];
1037 } SYSTEM_CACHE_INFORMATION, *PSYSTEM_CACHE_INFORMATION;
1038
1039 /* System Information Class 0x17 */
1040
1041 typedef struct _SYSTEM_INTERRUPT_INFORMATION {
1042     BYTE Reserved1[24];
1043 } SYSTEM_INTERRUPT_INFORMATION, *PSYSTEM_INTERRUPT_INFORMATION;
1044
1045 typedef struct _SYSTEM_CONFIGURATION_INFO {
1046     union {
1047         ULONG   OemId;
1048         struct {
1049             WORD ProcessorArchitecture;
1050             WORD Reserved;
1051         } tag1;
1052     } tag2;
1053     ULONG PageSize;
1054     PVOID MinimumApplicationAddress;
1055     PVOID MaximumApplicationAddress;
1056     ULONG ActiveProcessorMask;
1057     ULONG NumberOfProcessors;
1058     ULONG ProcessorType;
1059     ULONG AllocationGranularity;
1060     WORD  ProcessorLevel;
1061     WORD  ProcessorRevision;
1062 } SYSTEM_CONFIGURATION_INFO, *PSYSTEM_CONFIGURATION_INFO;
1063
1064 typedef struct _SYSTEM_EXCEPTION_INFORMATION {
1065     BYTE Reserved1[16];
1066 } SYSTEM_EXCEPTION_INFORMATION, *PSYSTEM_EXCEPTION_INFORMATION;
1067
1068 typedef struct _SYSTEM_LOOKASIDE_INFORMATION {
1069     BYTE Reserved1[32];
1070 } SYSTEM_LOOKASIDE_INFORMATION, *PSYSTEM_LOOKASIDE_INFORMATION;
1071
1072 typedef struct _SYSTEM_KERNEL_DEBUGGER_INFORMATION {
1073         BOOLEAN  DebuggerEnabled;
1074         BOOLEAN  DebuggerNotPresent;
1075 } SYSTEM_KERNEL_DEBUGGER_INFORMATION, *PSYSTEM_KERNEL_DEBUGGER_INFORMATION;
1076
1077 /* System Information Class 0x05 */
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 struct _SYSTEM_PROCESS_INFORMATION {
1094 #ifdef __WINESRC__
1095     DWORD dwOffset;
1096     DWORD dwThreadCount;
1097     DWORD dwUnknown1[6];
1098     FILETIME ftCreationTime;
1099     FILETIME ftUserTime;
1100     FILETIME ftKernelTime;
1101     UNICODE_STRING ProcessName;
1102     DWORD dwBasePriority;
1103     DWORD dwProcessID;
1104     DWORD dwParentProcessID;
1105     DWORD dwHandleCount;
1106     DWORD dwUnknown3;
1107     DWORD dwUnknown4;
1108     VM_COUNTERS vmCounters;
1109     IO_COUNTERS ioCounters;
1110     SYSTEM_THREAD_INFORMATION ti[1];
1111 #else
1112     ULONG NextEntryOffset;
1113     BYTE Reserved1[52];
1114     PVOID Reserved2[3];
1115     HANDLE UniqueProcessId;
1116     PVOID Reserved3;
1117     ULONG HandleCount;
1118     BYTE Reserved4[4];
1119     PVOID Reserved5[11];
1120     SIZE_T PeakPagefileUsage;
1121     SIZE_T PrivatePageCount;
1122     LARGE_INTEGER Reserved6[6];
1123 #endif
1124 } SYSTEM_PROCESS_INFORMATION, *PSYSTEM_PROCESS_INFORMATION;
1125
1126 typedef struct _SYSTEM_REGISTRY_QUOTA_INFORMATION {
1127     ULONG RegistryQuotaAllowed;
1128     ULONG RegistryQuotaUsed;
1129     PVOID Reserved1;
1130 } SYSTEM_REGISTRY_QUOTA_INFORMATION, *PSYSTEM_REGISTRY_QUOTA_INFORMATION;
1131
1132 typedef struct _SYSTEM_TIME_ADJUSTMENT {
1133     ULONG   TimeAdjustment;
1134     BOOLEAN TimeAdjustmentDisabled;
1135 } SYSTEM_TIME_ADJUSTMENT, *PSYSTEM_TIME_ADJUSTMENT;
1136
1137 typedef struct _TIME_FIELDS
1138 {   CSHORT Year;
1139     CSHORT Month;
1140     CSHORT Day;
1141     CSHORT Hour;
1142     CSHORT Minute;
1143     CSHORT Second;
1144     CSHORT Milliseconds;
1145     CSHORT Weekday;
1146 } TIME_FIELDS, *PTIME_FIELDS;
1147
1148 typedef struct _WINSTATIONINFORMATIONW {
1149   BYTE Reserved2[70];
1150   ULONG LogonId;
1151   BYTE Reserved3[1140];
1152 } WINSTATIONINFORMATIONW, *PWINSTATIONINFORMATIONW;
1153
1154 typedef BOOLEAN (WINAPI * PWINSTATIONQUERYINFORMATIONW)(HANDLE,ULONG,WINSTATIONINFOCLASS,PVOID,ULONG,PULONG);
1155
1156 typedef struct _LDR_RESOURCE_INFO
1157 {
1158     ULONG Type;
1159     ULONG Name;
1160     ULONG Language;
1161 } LDR_RESOURCE_INFO, *PLDR_RESOURCE_INFO;
1162
1163
1164 /* debug buffer definitions */
1165
1166 typedef struct _DEBUG_BUFFER {
1167   HANDLE SectionHandle;
1168   PVOID  SectionBase;
1169   PVOID  RemoteSectionBase;
1170   ULONG  SectionBaseDelta;
1171   HANDLE EventPairHandle;
1172   ULONG  Unknown[2];
1173   HANDLE RemoteThreadHandle;
1174   ULONG  InfoClassMask;
1175   ULONG  SizeOfInfo;
1176   ULONG  AllocatedSize;
1177   ULONG  SectionSize;
1178   PVOID  ModuleInformation;
1179   PVOID  BackTraceInformation;
1180   PVOID  HeapInformation;
1181   PVOID  LockInformation;
1182   PVOID  Reserved[8];
1183 } DEBUG_BUFFER, *PDEBUG_BUFFER;
1184
1185 #define PDI_MODULES                       0x01
1186 #define PDI_BACKTRACE                     0x02
1187 #define PDI_HEAPS                         0x04
1188 #define PDI_HEAP_TAGS                     0x08
1189 #define PDI_HEAP_BLOCKS                   0x10
1190 #define PDI_LOCKS                         0x20
1191
1192 typedef struct _DEBUG_MODULE_INFORMATION {
1193   ULONG  Reserved[2];
1194   ULONG  Base;
1195   ULONG  Size;
1196   ULONG  Flags;
1197   USHORT Index;
1198   USHORT Unknown;
1199   USHORT LoadCount;
1200   USHORT ModuleNameOffset;
1201   CHAR   ImageName[256];
1202 } DEBUG_MODULE_INFORMATION, *PDEBUG_MODULE_INFORMATION;
1203
1204 typedef struct _DEBUG_HEAP_INFORMATION {
1205   ULONG  Base;
1206   ULONG  Flags;
1207   USHORT Granularity;
1208   USHORT Unknown;
1209   ULONG  Allocated;
1210   ULONG  Committed;
1211   ULONG  TagCount;
1212   ULONG  BlockCount;
1213   ULONG  Reserved[7];
1214   PVOID  Tags;
1215   PVOID  Blocks;
1216 } DEBUG_HEAP_INFORMATION, *PDEBUG_HEAP_INFORMATION;
1217
1218 typedef struct _DEBUG_LOCK_INFORMATION {
1219   PVOID  Address;
1220   USHORT Type;
1221   USHORT CreatorBackTraceIndex;
1222   ULONG  OwnerThreadId;
1223   ULONG  ActiveCount;
1224   ULONG  ContentionCount;
1225   ULONG  EntryCount;
1226   ULONG  RecursionCount;
1227   ULONG  NumberOfSharedWaiters;
1228   ULONG  NumberOfExclusiveWaiters;
1229 } DEBUG_LOCK_INFORMATION, *PDEBUG_LOCK_INFORMATION;
1230
1231 typedef struct _PORT_MESSAGE_HEADER {
1232   USHORT DataSize;
1233   USHORT MessageSize;
1234   USHORT MessageType;
1235   USHORT VirtualRangesOffset;
1236   CLIENT_ID ClientId;
1237   ULONG MessageId;
1238   ULONG SectionSize;
1239 } PORT_MESSAGE_HEADER, *PPORT_MESSAGE_HEADER, PORT_MESSAGE, *PPORT_MESSAGE;
1240
1241 typedef unsigned short RTL_ATOM, *PRTL_ATOM;
1242
1243 /* Wine doesn't implement atom table as NT does:
1244  * - in NT, atom tables are user space tables, which ntdll directly accesses
1245  * - on Wine, (even local) atom tables are wineserver object, hence a HANDLE
1246  */
1247 typedef struct atom_table *RTL_ATOM_TABLE, **PRTL_ATOM_TABLE;
1248
1249 typedef enum _ATOM_INFORMATION_CLASS {
1250    AtomBasicInformation         = 0,
1251    AtomTableInformation         = 1,
1252 } ATOM_INFORMATION_CLASS;
1253
1254 typedef struct _ATOM_BASIC_INFORMATION {
1255    USHORT       ReferenceCount;
1256    USHORT       Pinned;
1257    USHORT       NameLength;
1258    WCHAR        Name[1];
1259 } ATOM_BASIC_INFORMATION, *PATOM_BASIC_INFORMATION;
1260
1261 /* FIXME: names probably not correct */
1262 typedef struct _RTL_HANDLE
1263 {
1264     struct _RTL_HANDLE * Next;
1265 } RTL_HANDLE;
1266
1267 /* FIXME: names probably not correct */
1268 typedef struct _RTL_HANDLE_TABLE
1269 {
1270     ULONG MaxHandleCount;  /* 0x00 */
1271     ULONG HandleSize;      /* 0x04 */
1272     ULONG Unused[2];       /* 0x08-0x0c */
1273     PVOID NextFree;        /* 0x10 */
1274     PVOID FirstHandle;     /* 0x14 */
1275     PVOID ReservedMemory;  /* 0x18 */
1276     PVOID MaxHandle;       /* 0x1c */
1277 } RTL_HANDLE_TABLE;
1278
1279 /***********************************************************************
1280  * Defines
1281  */
1282
1283 /* flags for NtCreateFile and NtOpenFile */
1284 #define FILE_DIRECTORY_FILE             0x00000001
1285 #define FILE_WRITE_THROUGH              0x00000002
1286 #define FILE_SEQUENTIAL_ONLY            0x00000004
1287 #define FILE_NO_INTERMEDIATE_BUFFERING  0x00000008
1288 #define FILE_SYNCHRONOUS_IO_ALERT       0x00000010
1289 #define FILE_SYNCHRONOUS_IO_NONALERT    0x00000020
1290 #define FILE_NON_DIRECTORY_FILE         0x00000040
1291 #define FILE_CREATE_TREE_CONNECTION     0x00000080
1292 #define FILE_COMPLETE_IF_OPLOCKED       0x00000100
1293 #define FILE_NO_EA_KNOWLEDGE            0x00000200
1294 #define FILE_OPEN_FOR_RECOVERY          0x00000400
1295 #define FILE_RANDOM_ACCESS              0x00000800
1296 #define FILE_DELETE_ON_CLOSE            0x00001000
1297 #define FILE_OPEN_BY_FILE_ID            0x00002000
1298 #define FILE_OPEN_FOR_BACKUP_INTENT     0x00004000
1299 #define FILE_NO_COMPRESSION             0x00008000
1300 #define FILE_RESERVE_OPFILTER           0x00100000
1301 #define FILE_TRANSACTED_MODE            0x00200000
1302 #define FILE_OPEN_OFFLINE_FILE          0x00400000
1303 #define FILE_OPEN_FOR_FREE_SPACE_QUERY  0x00800000
1304
1305 #define FILE_ATTRIBUTE_VALID_FLAGS      0x00007fb7
1306 #define FILE_ATTRIBUTE_VALID_SET_FLAGS  0x000031a7
1307
1308 /* status for NtCreateFile or NtOpenFile */
1309 #define FILE_SUPERSEDED                 0
1310 #define FILE_OPENED                     1
1311 #define FILE_CREATED                    2
1312 #define FILE_OVERWRITTEN                3
1313 #define FILE_EXISTS                     4
1314 #define FILE_DOES_NOT_EXIST             5
1315
1316 /* disposition for NtCreateFile */
1317 #define FILE_SUPERSEDE                  0
1318 #define FILE_OPEN                       1
1319 #define FILE_CREATE                     2
1320 #define FILE_OPEN_IF                    3
1321 #define FILE_OVERWRITE                  4
1322 #define FILE_OVERWRITE_IF               5
1323 #define FILE_MAXIMUM_DISPOSITION        5
1324
1325 /* Characteristics of a File System */
1326 #define FILE_REMOVABLE_MEDIA            0x00000001
1327 #define FILE_READ_ONLY_DEVICE           0x00000002
1328 #define FILE_FLOPPY_DISKETTE            0x00000004
1329 #define FILE_WRITE_ONE_MEDIA            0x00000008
1330 #define FILE_REMOTE_DEVICE              0x00000010
1331 #define FILE_DEVICE_IS_MOUNTED          0x00000020
1332 #define FILE_VIRTUAL_VOLUME             0x00000040
1333 #define FILE_AUTOGENERATED_DEVICE_NAME  0x00000080
1334 #define FILE_DEVICE_SECURE_OPEN         0x00000100
1335
1336 /* options for NtCreateNamedPipeFile */
1337 #define FILE_PIPE_INBOUND               0x00000000
1338 #define FILE_PIPE_OUTBOUND              0x00000001
1339 #define FILE_PIPE_FULL_DUPLEX           0x00000002
1340
1341 #if (_WIN32_WINNT >= 0x0501)
1342 #define INTERNAL_TS_ACTIVE_CONSOLE_ID ( *((volatile ULONG*)(0x7ffe02d8)) )
1343 #endif /* (_WIN32_WINNT >= 0x0501) */
1344
1345 #define LOGONID_CURRENT    ((ULONG)-1)
1346
1347 #define OBJ_INHERIT          0x00000002L
1348 #define OBJ_PERMANENT        0x00000010L
1349 #define OBJ_EXCLUSIVE        0x00000020L
1350 #define OBJ_CASE_INSENSITIVE 0x00000040L
1351 #define OBJ_OPENIF           0x00000080L
1352 #define OBJ_OPENLINK         0x00000100L
1353 #define OBJ_KERNEL_HANDLE    0x00000200L
1354 #define OBJ_VALID_ATTRIBUTES 0x000003F2L
1355
1356 #define SERVERNAME_CURRENT ((HANDLE)NULL)
1357
1358 typedef void (CALLBACK *PNTAPCFUNC)(ULONG_PTR,ULONG_PTR,ULONG_PTR); /* FIXME: not the right name */
1359 typedef void (CALLBACK *PRTL_THREAD_START_ROUTINE)(LPVOID); /* FIXME: not the right name */
1360
1361
1362 /* DbgPrintEx default levels */
1363 #define DPFLTR_ERROR_LEVEL     0
1364 #define DPFLTR_WARNING_LEVEL   1
1365 #define DPFLTR_TRACE_LEVEL     2
1366 #define DPFLTR_INFO_LEVEL      3
1367 #define DPFLTR_MASK    0x8000000
1368
1369 /* Well-known LUID values */
1370 #define SE_MIN_WELL_KNOWN_PRIVILEGE       2L
1371 #define SE_CREATE_TOKEN_PRIVILEGE         2L
1372 #define SE_ASSIGNPRIMARYTOKEN_PRIVILEGE   3L
1373 #define SE_LOCK_MEMORY_PRIVILEGE          4L
1374 #define SE_INCREASE_QUOTA_PRIVILEGE       5L
1375 #define SE_UNSOLICITED_INPUT_PRIVILEGE    6L /* obsolete */
1376 #define SE_MACHINE_ACCOUNT_PRIVILEGE      6L
1377 #define SE_TCB_PRIVILEGE                  7L
1378 #define SE_SECURITY_PRIVILEGE             8L
1379 #define SE_TAKE_OWNERSHIP_PRIVILEGE       9L
1380 #define SE_LOAD_DRIVER_PRIVILEGE         10L
1381 #define SE_SYSTEM_PROFILE_PRIVILEGE      11L
1382 #define SE_SYSTEMTIME_PRIVILEGE          12L
1383 #define SE_PROF_SINGLE_PROCESS_PRIVILEGE 13L
1384 #define SE_INC_BASE_PRIORITY_PRIVILEGE   14L
1385 #define SE_CREATE_PAGEFILE_PRIVILEGE     15L
1386 #define SE_CREATE_PERMANENT_PRIVILEGE    16L
1387 #define SE_BACKUP_PRIVILEGE              17L
1388 #define SE_RESTORE_PRIVILEGE             18L
1389 #define SE_SHUTDOWN_PRIVILEGE            19L
1390 #define SE_DEBUG_PRIVILEGE               20L
1391 #define SE_AUDIT_PRIVILEGE               21L
1392 #define SE_SYSTEM_ENVIRONMENT_PRIVILEGE  22L
1393 #define SE_CHANGE_NOTIFY_PRIVILLEGE      23L
1394 #define SE_REMOTE_SHUTDOWN_PRIVILEGE     24L
1395 #define SE_UNDOCK_PRIVILEGE              25L
1396 #define SE_SYNC_AGENT_PRIVILEGE          26L
1397 #define SE_ENABLE_DELEGATION_PRIVILEGE   27L
1398 #define SE_MANAGE_VOLUME_PRIVILEGE       28L
1399 #define SE_IMPERSONATE_PRIVILEGE         29L
1400 #define SE_CREATE_GLOBAL_PRIVILEGE       30L
1401 #define SE_MAX_WELL_KNOWN_PRIVILEGE      SE_CREATE_GLOBAL_PRIVILEGE
1402
1403
1404 /* Rtl*Registry* functions structs and defines */
1405 #define RTL_REGISTRY_ABSOLUTE             0
1406 #define RTL_REGISTRY_SERVICES             1
1407 #define RTL_REGISTRY_CONTROL              2
1408 #define RTL_REGISTRY_WINDOWS_NT           3
1409 #define RTL_REGISTRY_DEVICEMAP            4
1410 #define RTL_REGISTRY_USER                 5
1411
1412 #define RTL_REGISTRY_HANDLE       0x40000000
1413 #define RTL_REGISTRY_OPTIONAL     0x80000000
1414
1415 #define RTL_QUERY_REGISTRY_SUBKEY         0x00000001
1416 #define RTL_QUERY_REGISTRY_TOPKEY         0x00000002
1417 #define RTL_QUERY_REGISTRY_REQUIRED       0x00000004
1418 #define RTL_QUERY_REGISTRY_NOVALUE        0x00000008
1419 #define RTL_QUERY_REGISTRY_NOEXPAND       0x00000010
1420 #define RTL_QUERY_REGISTRY_DIRECT         0x00000020
1421 #define RTL_QUERY_REGISTRY_DELETE         0x00000040
1422
1423 typedef NTSTATUS (WINAPI *PRTL_QUERY_REGISTRY_ROUTINE)( PCWSTR ValueName,
1424                                                         ULONG  ValueType,
1425                                                         PVOID  ValueData,
1426                                                         ULONG  ValueLength,
1427                                                         PVOID  Context,
1428                                                         PVOID  EntryContext);
1429
1430 typedef struct _RTL_QUERY_REGISTRY_TABLE
1431 {
1432   PRTL_QUERY_REGISTRY_ROUTINE  QueryRoutine;
1433   ULONG  Flags;
1434   PWSTR  Name;
1435   PVOID  EntryContext;
1436   ULONG  DefaultType;
1437   PVOID  DefaultData;
1438   ULONG  DefaultLength;
1439 } RTL_QUERY_REGISTRY_TABLE, *PRTL_QUERY_REGISTRY_TABLE;
1440
1441 typedef struct _KEY_MULTIPLE_VALUE_INFORMATION
1442 {
1443   PUNICODE_STRING ValueName;
1444   ULONG DataLength;
1445   ULONG DataOffset;
1446   ULONG Type;
1447 } KEY_MULTIPLE_VALUE_INFORMATION, *PKEY_MULTIPLE_VALUE_INFORMATION;
1448
1449 typedef VOID (*PTIMER_APC_ROUTINE) ( PVOID, ULONG, LONG );
1450
1451 typedef enum _EVENT_TYPE {
1452   NotificationEvent,
1453   SynchronizationEvent
1454 } EVENT_TYPE, *PEVENT_TYPE;
1455
1456 typedef enum _EVENT_INFORMATION_CLASS {
1457   EventBasicInformation
1458 } EVENT_INFORMATION_CLASS, *PEVENT_INFORMATION_CLASS;
1459
1460 typedef struct _EVENT_BASIC_INFORMATION {
1461   EVENT_TYPE EventType;
1462   LONG EventState;
1463 } EVENT_BASIC_INFORMATION, *PEVENT_BASIC_INFORMATION;
1464
1465 typedef enum _SEMAPHORE_INFORMATION_CLASS {
1466   SemaphoreBasicInformation
1467 } SEMAPHORE_INFORMATION_CLASS, *PSEMAPHORE_INFORMATION_CLASS;
1468
1469 typedef struct _SEMAPHORE_BASIC_INFORMATION {
1470   ULONG CurrentCount;
1471   ULONG MaximumCount;
1472 } SEMAPHORE_BASIC_INFORMATION, *PSEMAPHORE_BASIC_INFORMATION;
1473
1474 typedef enum _SECTION_INFORMATION_CLASS
1475 {
1476   SectionBasicInformation,
1477   SectionImageInformation,
1478 } SECTION_INFORMATION_CLASS;
1479
1480 typedef struct _SECTION_BASIC_INFORMATION {
1481   ULONG BaseAddress;
1482   ULONG Attributes;
1483   LARGE_INTEGER Size;
1484 } SECTION_BASIC_INFORMATION, *PSECTION_BASIC_INFORMATION;
1485
1486 typedef struct _SECTION_IMAGE_INFORMATION {
1487   PVOID EntryPoint;
1488   ULONG StackZeroBits;
1489   ULONG StackReserved;
1490   ULONG StackCommit;
1491   ULONG ImageSubsystem;
1492   WORD SubsystemVersionLow;
1493   WORD SubsystemVersionHigh;
1494   ULONG Unknown1;
1495   ULONG ImageCharacteristics;
1496   ULONG ImageMachineType;
1497   ULONG Unknown2[3];
1498 } SECTION_IMAGE_INFORMATION, *PSECTION_IMAGE_INFORMATION;
1499
1500 typedef struct _LPC_SECTION_WRITE {
1501   ULONG Length;
1502   HANDLE SectionHandle;
1503   ULONG SectionOffset;
1504   ULONG ViewSize;
1505   PVOID ViewBase;
1506   PVOID TargetViewBase;
1507 } LPC_SECTION_WRITE, *PLPC_SECTION_WRITE;
1508
1509 typedef struct _LPC_SECTION_READ {
1510   ULONG Length;
1511   ULONG ViewSize;
1512   PVOID ViewBase;
1513 } LPC_SECTION_READ, *PLPC_SECTION_READ;
1514
1515 typedef struct _LPC_MESSAGE {
1516   USHORT DataSize;
1517   USHORT MessageSize;
1518   USHORT MessageType;
1519   USHORT VirtualRangesOffset;
1520   CLIENT_ID ClientId;
1521   ULONG MessageId;
1522   ULONG SectionSize;
1523   UCHAR Data[ANYSIZE_ARRAY];
1524 } LPC_MESSAGE, *PLPC_MESSAGE;
1525
1526 /***********************************************************************
1527  * Function declarations
1528  */
1529
1530 extern LPSTR _strlwr(LPSTR str); /* FIXME: Doesn't belong here */
1531 extern LPSTR _strupr(LPSTR str); /* FIXME: Doesn't belong here */
1532
1533 #if defined(__i386__) && defined(__GNUC__)
1534 static inline void WINAPI DbgBreakPoint(void) { __asm__ __volatile__("int3"); }
1535 static inline void WINAPI DbgUserBreakPoint(void) { __asm__ __volatile__("int3"); }
1536 #else  /* __i386__ && __GNUC__ */
1537 void WINAPI DbgBreakPoint(void);
1538 void WINAPI DbgUserBreakPoint(void);
1539 #endif  /* __i386__ && __GNUC__ */
1540 NTSTATUS WINAPIV DbgPrint(LPCSTR fmt, ...);
1541 NTSTATUS WINAPIV DbgPrintEx(ULONG iComponentId, ULONG Level, LPCSTR fmt, ...);
1542
1543 NTSTATUS  WINAPI LdrAccessResource(HMODULE,const IMAGE_RESOURCE_DATA_ENTRY*,void**,PULONG);
1544 NTSTATUS  WINAPI LdrFindResourceDirectory_U(HMODULE,const LDR_RESOURCE_INFO*,ULONG,const IMAGE_RESOURCE_DIRECTORY**);
1545 NTSTATUS  WINAPI LdrFindResource_U(HMODULE,const LDR_RESOURCE_INFO*,ULONG,const IMAGE_RESOURCE_DATA_ENTRY**);
1546 NTSTATUS  WINAPI LdrGetDllHandle(ULONG, ULONG, const UNICODE_STRING*, HMODULE*);
1547 NTSTATUS  WINAPI LdrGetProcedureAddress(HMODULE, const ANSI_STRING*, ULONG, void**);
1548 void      WINAPI LdrInitializeThunk(HANDLE,ULONG,ULONG,ULONG);
1549 NTSTATUS  WINAPI LdrLoadDll(LPCWSTR, DWORD, const UNICODE_STRING*, HMODULE*);
1550 void      WINAPI LdrShutdownProcess(void);
1551 void      WINAPI LdrShutdownThread(void);
1552 NTSTATUS  WINAPI NtAcceptConnectPort(PHANDLE,ULONG,PLPC_MESSAGE,BOOLEAN,PLPC_SECTION_WRITE,PLPC_SECTION_READ);
1553 NTSTATUS  WINAPI NtAccessCheck(PSECURITY_DESCRIPTOR,HANDLE,ACCESS_MASK,PGENERIC_MAPPING,PPRIVILEGE_SET,PULONG,PULONG,NTSTATUS*);
1554 NTSTATUS  WINAPI NtAddAtom(const WCHAR*,ULONG,RTL_ATOM*);
1555 NTSTATUS  WINAPI NtAdjustGroupsToken(HANDLE,BOOLEAN,PTOKEN_GROUPS,ULONG,PTOKEN_GROUPS,PULONG);
1556 NTSTATUS  WINAPI NtAdjustPrivilegesToken(HANDLE,BOOLEAN,PTOKEN_PRIVILEGES,DWORD,PTOKEN_PRIVILEGES,PDWORD);
1557 NTSTATUS  WINAPI NtAlertThread(HANDLE ThreadHandle);
1558 NTSTATUS  WINAPI NtAllocateLocallyUniqueId(PLUID lpLuid);
1559 NTSTATUS  WINAPI NtAllocateVirtualMemory(HANDLE,PVOID*,ULONG,ULONG*,ULONG,ULONG);
1560 NTSTATUS  WINAPI NtCancelIoFile(HANDLE,PIO_STATUS_BLOCK);
1561 NTSTATUS  WINAPI NtCancelTimer(HANDLE, BOOLEAN*);
1562 NTSTATUS  WINAPI NtClearEvent(HANDLE);
1563 NTSTATUS  WINAPI NtClose(HANDLE);
1564 NTSTATUS  WINAPI NtCompleteConnectPort(HANDLE);
1565 NTSTATUS  WINAPI NtConnectPort(PHANDLE,PUNICODE_STRING,PSECURITY_QUALITY_OF_SERVICE,PLPC_SECTION_WRITE,PLPC_SECTION_READ,PULONG,PVOID,PULONG);
1566 NTSTATUS  WINAPI NtCreateEvent(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES *,BOOLEAN,BOOLEAN);
1567 NTSTATUS  WINAPI NtCreateFile(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,PLARGE_INTEGER,ULONG,ULONG,ULONG,ULONG,PVOID,ULONG);
1568 NTSTATUS  WINAPI NtCreateIoCompletion(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,ULONG);
1569 NTSTATUS  WINAPI NtCreateKey(PHKEY,ACCESS_MASK,const OBJECT_ATTRIBUTES*,ULONG,const UNICODE_STRING*,ULONG,PULONG);
1570 NTSTATUS  WINAPI NtCreateMailslotFile(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,ULONG,ULONG,ULONG,PLARGE_INTEGER);
1571 NTSTATUS  WINAPI NtCreateMutant(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,BOOLEAN);
1572 NTSTATUS  WINAPI NtCreateNamedPipeFile(PHANDLE,ULONG,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,ULONG,ULONG,ULONG,ULONG,ULONG,ULONG,ULONG,ULONG,ULONG,PLARGE_INTEGER);
1573 NTSTATUS  WINAPI NtCreatePort(PHANDLE,POBJECT_ATTRIBUTES,ULONG,ULONG,PULONG);
1574 NTSTATUS  WINAPI NtCreateSection(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,const LARGE_INTEGER*,ULONG,ULONG,HANDLE);
1575 NTSTATUS  WINAPI NtCreateSemaphore(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*,LONG,LONG);
1576 NTSTATUS  WINAPI NtCreateTimer(HANDLE*, ACCESS_MASK, const OBJECT_ATTRIBUTES*, TIMER_TYPE);
1577 NTSTATUS  WINAPI NtDelayExecution(BOOLEAN,const LARGE_INTEGER*);
1578 NTSTATUS  WINAPI NtDeleteAtom(RTL_ATOM);
1579 NTSTATUS  WINAPI NtDeleteFile(POBJECT_ATTRIBUTES);
1580 NTSTATUS  WINAPI NtDeleteKey(HKEY);
1581 NTSTATUS  WINAPI NtDeleteValueKey(HKEY,const UNICODE_STRING *);
1582 NTSTATUS  WINAPI NtDeviceIoControlFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,PVOID,ULONG,PVOID,ULONG);
1583 NTSTATUS  WINAPI NtDuplicateObject(HANDLE,HANDLE,HANDLE,PHANDLE,ACCESS_MASK,ULONG,ULONG);
1584 NTSTATUS  WINAPI NtDuplicateToken(HANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,SECURITY_IMPERSONATION_LEVEL,TOKEN_TYPE,PHANDLE);
1585 NTSTATUS  WINAPI NtEnumerateKey(HKEY,ULONG,KEY_INFORMATION_CLASS,void *,DWORD,DWORD *);
1586 NTSTATUS  WINAPI NtEnumerateValueKey(HKEY,ULONG,KEY_VALUE_INFORMATION_CLASS,PVOID,ULONG,PULONG);
1587 NTSTATUS  WINAPI NtFindAtom(const WCHAR*,ULONG,RTL_ATOM*);
1588 NTSTATUS  WINAPI NtFlushBuffersFile(HANDLE,IO_STATUS_BLOCK*);
1589 NTSTATUS  WINAPI NtFlushInstructionCache(HANDLE,LPCVOID,ULONG);
1590 NTSTATUS  WINAPI NtFlushKey(HKEY);
1591 NTSTATUS  WINAPI NtFlushVirtualMemory(HANDLE,LPCVOID*,ULONG*,ULONG);
1592 NTSTATUS  WINAPI NtFreeVirtualMemory(HANDLE,PVOID*,ULONG*,ULONG);
1593 NTSTATUS  WINAPI NtFsControlFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,PVOID,ULONG,PVOID,ULONG);
1594 NTSTATUS  WINAPI NtGetContextThread(HANDLE,CONTEXT*);
1595 NTSTATUS  WINAPI NtImpersonateAnonymousToken(HANDLE);
1596 NTSTATUS  WINAPI NtImpersonateClientOfPort(HANDLE,PPORT_MESSAGE);
1597 NTSTATUS  WINAPI NtImpersonateThread(HANDLE,HANDLE,PSECURITY_QUALITY_OF_SERVICE);
1598 NTSTATUS  WINAPI NtInitiatePowerAction(POWER_ACTION,SYSTEM_POWER_STATE,ULONG,BOOLEAN);
1599 NTSTATUS  WINAPI NtListenPort(HANDLE,PLPC_MESSAGE); 
1600 NTSTATUS  WINAPI NtLoadDriver(const UNICODE_STRING *);
1601 NTSTATUS  WINAPI NtLoadKey(const OBJECT_ATTRIBUTES *,OBJECT_ATTRIBUTES *);
1602 NTSTATUS  WINAPI NtLockFile(HANDLE,HANDLE,PIO_APC_ROUTINE,void*,PIO_STATUS_BLOCK,PLARGE_INTEGER,PLARGE_INTEGER,ULONG*,BOOLEAN,BOOLEAN);
1603 NTSTATUS  WINAPI NtLockVirtualMemory(HANDLE,PVOID*,ULONG*,ULONG);
1604 NTSTATUS  WINAPI NtMapViewOfSection(HANDLE,HANDLE,PVOID*,ULONG,ULONG,const LARGE_INTEGER*,ULONG*,SECTION_INHERIT,ULONG,ULONG);
1605 NTSTATUS  WINAPI NtNotifyChangeKey(HKEY,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,BOOLEAN,PVOID,ULONG,BOOLEAN);
1606 NTSTATUS  WINAPI NtOpenEvent(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES *);
1607 NTSTATUS  WINAPI NtOpenFile(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,ULONG,ULONG);
1608 NTSTATUS  WINAPI NtOpenIoCompletion(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES);
1609 NTSTATUS  WINAPI NtOpenKey(PHKEY,ACCESS_MASK,const OBJECT_ATTRIBUTES *);
1610 NTSTATUS  WINAPI NtOpenMutant(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*);
1611 NTSTATUS  WINAPI NtOpenProcessToken(HANDLE,DWORD,HANDLE *);
1612 NTSTATUS  WINAPI NtOpenSection(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*);
1613 NTSTATUS  WINAPI NtOpenSemaphore(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*);
1614 NTSTATUS  WINAPI NtOpenThread(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,const CLIENT_ID*);
1615 NTSTATUS  WINAPI NtOpenThreadToken(HANDLE,DWORD,BOOLEAN,HANDLE *);
1616 NTSTATUS  WINAPI NtOpenTimer(HANDLE*, ACCESS_MASK, const OBJECT_ATTRIBUTES*);
1617 NTSTATUS  WINAPI NtPowerInformation(POWER_INFORMATION_LEVEL,PVOID,ULONG,PVOID,ULONG);
1618 NTSTATUS  WINAPI NtPrivilegeCheck(HANDLE,PPRIVILEGE_SET,PBOOLEAN);
1619 NTSTATUS  WINAPI NtProtectVirtualMemory(HANDLE,PVOID*,ULONG*,ULONG,ULONG*);
1620 NTSTATUS  WINAPI NtPulseEvent(HANDLE,PULONG);
1621 NTSTATUS  WINAPI NtQueueApcThread(HANDLE,PNTAPCFUNC,ULONG_PTR,ULONG_PTR,ULONG_PTR);
1622 NTSTATUS  WINAPI NtQueryAttributesFile(const OBJECT_ATTRIBUTES*,FILE_BASIC_INFORMATION*);
1623 NTSTATUS  WINAPI NtQueryDefaultLocale(BOOLEAN,LCID*);
1624 NTSTATUS  WINAPI NtQueryDefaultUILanguage(LANGID*);
1625 NTSTATUS  WINAPI NtQueryDirectoryFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,PVOID,ULONG,FILE_INFORMATION_CLASS,BOOLEAN,PUNICODE_STRING,BOOLEAN);
1626 NTSTATUS  WINAPI NtQueryEaFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,BOOLEAN,PVOID,ULONG,PVOID,BOOLEAN);
1627 NTSTATUS  WINAPI NtQueryEvent(HANDLE,EVENT_INFORMATION_CLASS,PVOID,ULONG,PULONG); 
1628 NTSTATUS  WINAPI NtQueryFullAttributesFile(const OBJECT_ATTRIBUTES*,FILE_NETWORK_OPEN_INFORMATION*);
1629 NTSTATUS  WINAPI NtQueryInformationAtom(RTL_ATOM,ATOM_INFORMATION_CLASS,RTL_ATOM_TABLE,ULONG,ULONG*);
1630 NTSTATUS  WINAPI NtQueryInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,LONG,FILE_INFORMATION_CLASS);
1631 NTSTATUS  WINAPI NtQueryInformationProcess(HANDLE,PROCESSINFOCLASS,PVOID,ULONG,PULONG);
1632 NTSTATUS  WINAPI NtQueryInformationThread(HANDLE,THREADINFOCLASS,PVOID,ULONG,PULONG);
1633 NTSTATUS  WINAPI NtQueryInformationToken(HANDLE,DWORD,LPVOID,DWORD,LPDWORD);
1634 NTSTATUS  WINAPI NtQueryInstallUILanguage(LANGID*);
1635 NTSTATUS  WINAPI NtQueryKey(HKEY,KEY_INFORMATION_CLASS,void *,DWORD,DWORD *);
1636 NTSTATUS  WINAPI NtQueryMultipleValueKey(HKEY,PKEY_MULTIPLE_VALUE_INFORMATION,ULONG,PVOID,ULONG,PULONG);
1637 NTSTATUS  WINAPI NtQueryMutant(HANDLE,MUTANT_INFORMATION_CLASS,PVOID,ULONG,PULONG); 
1638 NTSTATUS  WINAPI NtQueryObject(HANDLE, OBJECT_INFORMATION_CLASS, PVOID, ULONG, PULONG);
1639 NTSTATUS  WINAPI NtQueryPerformanceCounter(PLARGE_INTEGER, PLARGE_INTEGER);
1640 NTSTATUS  WINAPI NtQuerySecurityObject(HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,ULONG,PULONG);
1641 NTSTATUS  WINAPI NtQuerySection(HANDLE,SECTION_INFORMATION_CLASS,PVOID,ULONG,PULONG); 
1642 NTSTATUS  WINAPI NtQuerySemaphore(HANDLE,SEMAPHORE_INFORMATION_CLASS,PVOID,ULONG,PULONG);
1643 NTSTATUS  WINAPI NtQuerySystemInformation(SYSTEM_INFORMATION_CLASS,PVOID,ULONG,PULONG);
1644 NTSTATUS  WINAPI NtQuerySystemTime(PLARGE_INTEGER);
1645 NTSTATUS  WINAPI NtQueryTimer(HANDLE,TIMER_INFORMATION_CLASS,PVOID,ULONG,PULONG);
1646 NTSTATUS  WINAPI NtQueryValueKey(HKEY,const UNICODE_STRING *,KEY_VALUE_INFORMATION_CLASS,void *,DWORD,DWORD *);
1647 NTSTATUS  WINAPI NtQueryVirtualMemory(HANDLE,LPCVOID,MEMORY_INFORMATION_CLASS,PVOID,ULONG,ULONG*);
1648 NTSTATUS  WINAPI NtQueryVolumeInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,FS_INFORMATION_CLASS);
1649 void      WINAPI NtRaiseException(PEXCEPTION_RECORD,PCONTEXT,BOOL);
1650 NTSTATUS  WINAPI NtReadFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,PVOID,ULONG,PLARGE_INTEGER,PULONG);
1651 NTSTATUS  WINAPI NtReadVirtualMemory(HANDLE,const void*,void*,SIZE_T,SIZE_T*);
1652 NTSTATUS  WINAPI NtReleaseMutant(HANDLE,PLONG);
1653 NTSTATUS  WINAPI NtReleaseSemaphore(HANDLE,ULONG,PULONG);
1654 NTSTATUS  WINAPI NtRemoveIoCompletion(HANDLE,PULONG,PULONG,PIO_STATUS_BLOCK,PLARGE_INTEGER);
1655 NTSTATUS  WINAPI NtReplaceKey(POBJECT_ATTRIBUTES,HKEY,POBJECT_ATTRIBUTES);
1656 NTSTATUS  WINAPI NtReplyWaitReceivePort(HANDLE,PULONG,PLPC_MESSAGE,PLPC_MESSAGE);
1657 NTSTATUS  WINAPI NtReplyWaitReplyPort(HANDLE,PLPC_MESSAGE);
1658 NTSTATUS  WINAPI NtRequestWaitReplyPort(HANDLE,PLPC_MESSAGE,PLPC_MESSAGE);
1659 NTSTATUS  WINAPI NtResetEvent(HANDLE,PULONG);
1660 NTSTATUS  WINAPI NtRestoreKey(HKEY,HANDLE,ULONG);
1661 NTSTATUS  WINAPI NtResumeThread(HANDLE,PULONG);
1662 NTSTATUS  WINAPI NtSaveKey(HKEY,HANDLE);
1663 NTSTATUS  WINAPI NtSetContextThread(HANDLE,const CONTEXT*);
1664 NTSTATUS  WINAPI NtSetDefaultLocale(BOOLEAN,LCID);
1665 NTSTATUS  WINAPI NtSetDefaultUILanguage(LANGID);
1666 NTSTATUS  WINAPI NtSetEaFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG);
1667 NTSTATUS  WINAPI NtSetEvent(HANDLE,PULONG);
1668 NTSTATUS  WINAPI NtSetInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,FILE_INFORMATION_CLASS);
1669 NTSTATUS  WINAPI NtSetInformationKey(HKEY,const int,PVOID,ULONG);
1670 NTSTATUS  WINAPI NtSetInformationObject(HANDLE, OBJECT_INFORMATION_CLASS, PVOID, ULONG);
1671 NTSTATUS  WINAPI NtSetInformationThread(HANDLE,THREADINFOCLASS,LPCVOID,ULONG);
1672 NTSTATUS  WINAPI NtSetInformationToken(HANDLE,TOKEN_INFORMATION_CLASS,PVOID,ULONG);
1673 NTSTATUS  WINAPI NtSetIoCompletion(HANDLE,ULONG,ULONG,NTSTATUS,ULONG);
1674 NTSTATUS  WINAPI NtSetSecurityObject(HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR);
1675 NTSTATUS  WINAPI NtSetSystemTime(const LARGE_INTEGER*,LARGE_INTEGER*);
1676 NTSTATUS  WINAPI NtSetTimer(HANDLE, const LARGE_INTEGER*, PTIMER_APC_ROUTINE, PVOID, BOOLEAN, ULONG, BOOLEAN*);
1677 NTSTATUS  WINAPI NtSetValueKey(HKEY,const UNICODE_STRING *,ULONG,ULONG,const void *,ULONG);
1678 NTSTATUS  WINAPI NtSetVolumeInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,FS_INFORMATION_CLASS);
1679 NTSTATUS  WINAPI NtSignalAndWaitForSingleObject(HANDLE,HANDLE,BOOLEAN,const LARGE_INTEGER*);
1680 NTSTATUS  WINAPI NtSuspendThread(HANDLE,PULONG);
1681 NTSTATUS  WINAPI NtTerminateProcess(HANDLE,LONG);
1682 NTSTATUS  WINAPI NtTerminateThread(HANDLE,LONG);
1683 NTSTATUS  WINAPI NtUnloadDriver(const UNICODE_STRING *);
1684 NTSTATUS  WINAPI NtUnloadKey(HKEY);
1685 NTSTATUS  WINAPI NtUnlockFile(HANDLE,PIO_STATUS_BLOCK,PLARGE_INTEGER,PLARGE_INTEGER,PULONG);
1686 NTSTATUS  WINAPI NtUnlockVirtualMemory(HANDLE,PVOID*,ULONG*,ULONG);
1687 NTSTATUS  WINAPI NtUnmapViewOfSection(HANDLE,PVOID);
1688 NTSTATUS  WINAPI NtWaitForSingleObject(HANDLE,BOOLEAN,const LARGE_INTEGER*);
1689 NTSTATUS  WINAPI NtWaitForMultipleObjects(ULONG,const HANDLE*,BOOLEAN,BOOLEAN,const LARGE_INTEGER*);
1690 NTSTATUS  WINAPI NtWriteFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,const void*,ULONG,PLARGE_INTEGER,PULONG);
1691 NTSTATUS  WINAPI NtWriteVirtualMemory(HANDLE,void*,const void*,SIZE_T,SIZE_T*);
1692 NTSTATUS  WINAPI NtYieldExecution(void);
1693
1694 void      WINAPI RtlAcquirePebLock(void);
1695 BYTE      WINAPI RtlAcquireResourceExclusive(LPRTL_RWLOCK,BYTE);
1696 BYTE      WINAPI RtlAcquireResourceShared(LPRTL_RWLOCK,BYTE);
1697 NTSTATUS  WINAPI RtlAddAce(PACL,DWORD,DWORD,PACE_HEADER,DWORD);
1698 NTSTATUS  WINAPI RtlAddAccessAllowedAce(PACL,DWORD,DWORD,PSID);
1699 NTSTATUS  WINAPI RtlAddAccessAllowedAceEx(PACL,DWORD,DWORD,DWORD,PSID);
1700 NTSTATUS  WINAPI RtlAddAccessDeniedAce(PACL,DWORD,DWORD,PSID);
1701 NTSTATUS  WINAPI RtlAddAccessDeniedAceEx(PACL,DWORD,DWORD,DWORD,PSID);
1702 NTSTATUS  WINAPI RtlAddAtomToAtomTable(RTL_ATOM_TABLE,const WCHAR*,RTL_ATOM*);
1703 PVOID     WINAPI RtlAddVectoredExceptionHandler(ULONG,PVECTORED_EXCEPTION_HANDLER);
1704 NTSTATUS  WINAPI RtlAdjustPrivilege(ULONG,BOOLEAN,BOOLEAN,PBOOLEAN);
1705 NTSTATUS  WINAPI RtlAllocateAndInitializeSid(PSID_IDENTIFIER_AUTHORITY,BYTE,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,PSID *);
1706 RTL_HANDLE * WINAPI RtlAllocateHandle(RTL_HANDLE_TABLE *,ULONG *);
1707 PVOID     WINAPI RtlAllocateHeap(HANDLE,ULONG,ULONG);
1708 WCHAR     WINAPI RtlAnsiCharToUnicodeChar(LPSTR *);
1709 DWORD     WINAPI RtlAnsiStringToUnicodeSize(const STRING *);
1710 NTSTATUS  WINAPI RtlAnsiStringToUnicodeString(PUNICODE_STRING,PCANSI_STRING,BOOLEAN);
1711 NTSTATUS  WINAPI RtlAppendAsciizToString(STRING *,LPCSTR);
1712 NTSTATUS  WINAPI RtlAppendStringToString(STRING *,const STRING *);
1713 NTSTATUS  WINAPI RtlAppendUnicodeStringToString(UNICODE_STRING *,const UNICODE_STRING *);
1714 NTSTATUS  WINAPI RtlAppendUnicodeToString(UNICODE_STRING *,LPCWSTR);
1715 BOOLEAN   WINAPI RtlAreAllAccessesGranted(ACCESS_MASK,ACCESS_MASK);
1716 BOOLEAN   WINAPI RtlAreAnyAccessesGranted(ACCESS_MASK,ACCESS_MASK);
1717 BOOLEAN   WINAPI RtlAreBitsSet(PCRTL_BITMAP,ULONG,ULONG);
1718 BOOLEAN   WINAPI RtlAreBitsClear(PCRTL_BITMAP,ULONG,ULONG);
1719
1720 NTSTATUS  WINAPI RtlCharToInteger(PCSZ,ULONG,PULONG);
1721 NTSTATUS  WINAPI RtlCheckRegistryKey(ULONG, PWSTR);
1722 void      WINAPI RtlClearAllBits(PRTL_BITMAP);
1723 void      WINAPI RtlClearBits(PRTL_BITMAP,ULONG,ULONG);
1724 PDEBUG_BUFFER WINAPI RtlCreateQueryDebugBuffer(ULONG,BOOLEAN);
1725 ULONG     WINAPI RtlCompactHeap(HANDLE,ULONG);
1726 LONG      WINAPI RtlCompareString(const STRING*,const STRING*,BOOLEAN);
1727 LONG      WINAPI RtlCompareUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
1728 DWORD     WINAPI RtlComputeCrc32(DWORD,PBYTE,INT);
1729 NTSTATUS  WINAPI RtlConvertSidToUnicodeString(PUNICODE_STRING,PSID,BOOLEAN);
1730 LONGLONG  WINAPI RtlConvertLongToLargeInteger(LONG);
1731 ULONGLONG WINAPI RtlConvertUlongToLargeInteger(ULONG);
1732 void      WINAPI RtlCopyLuid(PLUID,const LUID*);
1733 void      WINAPI RtlCopyLuidAndAttributesArray(ULONG,const LUID_AND_ATTRIBUTES*,PLUID_AND_ATTRIBUTES);
1734 BOOLEAN   WINAPI RtlCopySid(DWORD,PSID,PSID);
1735 void      WINAPI RtlCopyString(STRING*,const STRING*);
1736 void      WINAPI RtlCopyUnicodeString(UNICODE_STRING*,const UNICODE_STRING*);
1737 NTSTATUS  WINAPI RtlCreateAcl(PACL,DWORD,DWORD);
1738 NTSTATUS  WINAPI RtlCreateAtomTable(ULONG,RTL_ATOM_TABLE*);
1739 NTSTATUS  WINAPI RtlCreateEnvironment(BOOLEAN, PWSTR*);
1740 HANDLE    WINAPI RtlCreateHeap(ULONG,PVOID,ULONG,ULONG,PVOID,PRTL_HEAP_DEFINITION);
1741 NTSTATUS  WINAPI RtlCreateProcessParameters(RTL_USER_PROCESS_PARAMETERS**,const UNICODE_STRING*,
1742                                             const UNICODE_STRING*,const UNICODE_STRING*,
1743                                             const UNICODE_STRING*,PWSTR,const UNICODE_STRING*,
1744                                             const UNICODE_STRING*,const UNICODE_STRING*,
1745                                             const UNICODE_STRING*);
1746 NTSTATUS  WINAPI RtlCreateSecurityDescriptor(PSECURITY_DESCRIPTOR,DWORD);
1747 BOOLEAN   WINAPI RtlCreateUnicodeString(PUNICODE_STRING,LPCWSTR);
1748 BOOLEAN   WINAPI RtlCreateUnicodeStringFromAsciiz(PUNICODE_STRING,LPCSTR);
1749 NTSTATUS  WINAPI RtlCreateUserThread(HANDLE,const SECURITY_DESCRIPTOR*,BOOLEAN,PVOID,SIZE_T,SIZE_T,PRTL_THREAD_START_ROUTINE,void*,HANDLE*,CLIENT_ID*);
1750
1751 NTSTATUS  WINAPI RtlDeleteAce(PACL,DWORD);
1752 NTSTATUS  WINAPI RtlDeleteAtomFromAtomTable(RTL_ATOM_TABLE,RTL_ATOM);
1753 NTSTATUS  WINAPI RtlDeleteCriticalSection(RTL_CRITICAL_SECTION *);
1754 NTSTATUS  WINAPI RtlDeleteRegistryValue(ULONG, PCWSTR, PCWSTR);
1755 void      WINAPI RtlDeleteResource(LPRTL_RWLOCK);
1756 DWORD     WINAPI RtlDeleteSecurityObject(DWORD);
1757 PRTL_USER_PROCESS_PARAMETERS WINAPI RtlDeNormalizeProcessParams(RTL_USER_PROCESS_PARAMETERS*);
1758 NTSTATUS  WINAPI RtlDestroyAtomTable(RTL_ATOM_TABLE);
1759 NTSTATUS  WINAPI RtlDestroyEnvironment(PWSTR);
1760 NTSTATUS  WINAPI RtlDestroyHandleTable(RTL_HANDLE_TABLE *);
1761 HANDLE    WINAPI RtlDestroyHeap(HANDLE);
1762 void      WINAPI RtlDestroyProcessParameters(RTL_USER_PROCESS_PARAMETERS*);
1763 NTSTATUS  WINAPI RtlDestroyQueryDebugBuffer(PDEBUG_BUFFER);
1764 DOS_PATHNAME_TYPE WINAPI RtlDetermineDosPathNameType_U(PCWSTR);
1765 BOOLEAN   WINAPI RtlDoesFileExists_U(LPCWSTR);
1766 BOOLEAN   WINAPI RtlDosPathNameToNtPathName_U(PCWSTR,PUNICODE_STRING,PWSTR*,CURDIR*);
1767 ULONG     WINAPI RtlDosSearchPath_U(LPCWSTR, LPCWSTR, LPCWSTR, ULONG, LPWSTR, LPWSTR*);
1768 WCHAR     WINAPI RtlDowncaseUnicodeChar(WCHAR);
1769 NTSTATUS  WINAPI RtlDowncaseUnicodeString(UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
1770 void      WINAPI RtlDumpResource(LPRTL_RWLOCK);
1771 NTSTATUS  WINAPI RtlDuplicateUnicodeString(int,const UNICODE_STRING*,UNICODE_STRING*);
1772
1773 NTSTATUS  WINAPI RtlEmptyAtomTable(RTL_ATOM_TABLE,BOOLEAN);
1774 LONGLONG  WINAPI RtlEnlargedIntegerMultiply(INT,INT);
1775 ULONGLONG WINAPI RtlEnlargedUnsignedMultiply(UINT,UINT);
1776 UINT      WINAPI RtlEnlargedUnsignedDivide(ULONGLONG,UINT,UINT *);
1777 NTSTATUS  WINAPI RtlEnterCriticalSection(RTL_CRITICAL_SECTION *);
1778 void      WINAPI RtlEraseUnicodeString(UNICODE_STRING*);
1779 NTSTATUS  WINAPI RtlEqualComputerName(const UNICODE_STRING*,const UNICODE_STRING*);
1780 NTSTATUS  WINAPI RtlEqualDomainName(const UNICODE_STRING*,const UNICODE_STRING*);
1781 BOOLEAN   WINAPI RtlEqualLuid(const LUID*,const LUID*);
1782 BOOL      WINAPI RtlEqualPrefixSid(PSID,PSID);
1783 BOOL      WINAPI RtlEqualSid(PSID,PSID);
1784 BOOLEAN   WINAPI RtlEqualString(const STRING*,const STRING*,BOOLEAN);
1785 BOOLEAN   WINAPI RtlEqualUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
1786 NTSTATUS  WINAPI RtlExpandEnvironmentStrings_U(PWSTR, const UNICODE_STRING*, UNICODE_STRING*, ULONG*);
1787 LONGLONG  WINAPI RtlExtendedMagicDivide(LONGLONG,LONGLONG,INT);
1788 LONGLONG  WINAPI RtlExtendedIntegerMultiply(LONGLONG,INT);
1789 LONGLONG  WINAPI RtlExtendedLargeIntegerDivide(LONGLONG,INT,INT *);
1790
1791 NTSTATUS  WINAPI RtlFindCharInUnicodeString(int,const UNICODE_STRING*,const UNICODE_STRING*,USHORT*);
1792 ULONG     WINAPI RtlFindClearBits(PCRTL_BITMAP,ULONG,ULONG);
1793 ULONG     WINAPI RtlFindClearBitsAndSet(PRTL_BITMAP,ULONG,ULONG);
1794 ULONG     WINAPI RtlFindClearRuns(PCRTL_BITMAP,PRTL_BITMAP_RUN,ULONG,BOOLEAN);
1795 ULONG     WINAPI RtlFindLastBackwardRunSet(PCRTL_BITMAP,ULONG,PULONG);
1796 ULONG     WINAPI RtlFindLastBackwardRunClear(PCRTL_BITMAP,ULONG,PULONG);
1797 CCHAR     WINAPI RtlFindLeastSignificantBit(ULONGLONG);
1798 ULONG     WINAPI RtlFindLongestRunSet(PCRTL_BITMAP,PULONG);
1799 ULONG     WINAPI RtlFindLongestRunClear(PCRTL_BITMAP,PULONG);
1800 NTSTATUS  WINAPI RtlFindMessage(HMODULE,ULONG,ULONG,ULONG,const MESSAGE_RESOURCE_ENTRY**);
1801 CCHAR     WINAPI RtlFindMostSignificantBit(ULONGLONG);
1802 ULONG     WINAPI RtlFindNextForwardRunSet(PCRTL_BITMAP,ULONG,PULONG);
1803 ULONG     WINAPI RtlFindNextForwardRunClear(PCRTL_BITMAP,ULONG,PULONG);
1804 ULONG     WINAPI RtlFindSetBits(PCRTL_BITMAP,ULONG,ULONG);
1805 ULONG     WINAPI RtlFindSetBitsAndClear(PRTL_BITMAP,ULONG,ULONG);
1806 ULONG     WINAPI RtlFindSetRuns(PCRTL_BITMAP,PRTL_BITMAP_RUN,ULONG,BOOLEAN);
1807 BOOLEAN   WINAPI RtlFirstFreeAce(PACL,PACE_HEADER *);
1808 NTSTATUS  WINAPI RtlFormatCurrentUserKeyPath(PUNICODE_STRING);
1809 NTSTATUS  WINAPI RtlFormatMessage(LPWSTR,UCHAR,BOOLEAN,BOOLEAN,BOOLEAN,va_list *,LPWSTR,ULONG);
1810 void      WINAPI RtlFreeAnsiString(PANSI_STRING);
1811 BOOLEAN   WINAPI RtlFreeHandle(RTL_HANDLE_TABLE *,RTL_HANDLE *);
1812 BOOLEAN   WINAPI RtlFreeHeap(HANDLE,ULONG,PVOID);
1813 void      WINAPI RtlFreeOemString(POEM_STRING);
1814 DWORD     WINAPI RtlFreeSid(PSID);
1815 void      WINAPI RtlFreeUnicodeString(PUNICODE_STRING);
1816
1817 NTSTATUS  WINAPI RtlGetAce(PACL,DWORD,LPVOID *);
1818 NTSTATUS  WINAPI RtlGetControlSecurityDescriptor(PSECURITY_DESCRIPTOR, PSECURITY_DESCRIPTOR_CONTROL,LPDWORD);
1819 NTSTATUS  WINAPI RtlGetCurrentDirectory_U(ULONG, LPWSTR);
1820 NTSTATUS  WINAPI RtlGetDaclSecurityDescriptor(PSECURITY_DESCRIPTOR,PBOOLEAN,PACL *,PBOOLEAN);
1821 ULONG     WINAPI RtlGetFullPathName_U(PCWSTR,ULONG,PWSTR,PWSTR*);
1822 NTSTATUS  WINAPI RtlGetGroupSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID *,PBOOLEAN);
1823 NTSTATUS  WINAPI RtlGetLastNtStatus(void);
1824 DWORD     WINAPI RtlGetLastWin32Error(void);
1825 DWORD     WINAPI RtlGetLongestNtPathLength(void);
1826 BOOLEAN   WINAPI RtlGetNtProductType(LPDWORD);
1827 NTSTATUS  WINAPI RtlGetOwnerSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID *,PBOOLEAN);
1828 ULONG     WINAPI RtlGetProcessHeaps(ULONG,HANDLE*);
1829 NTSTATUS  WINAPI RtlGetSaclSecurityDescriptor(PSECURITY_DESCRIPTOR,PBOOLEAN,PACL *,PBOOLEAN);
1830 NTSTATUS  WINAPI RtlGetVersion(RTL_OSVERSIONINFOEXW*);
1831
1832 PSID_IDENTIFIER_AUTHORITY WINAPI RtlIdentifierAuthoritySid(PSID);
1833 PVOID     WINAPI RtlImageDirectoryEntryToData(HMODULE,BOOL,WORD,ULONG *);
1834 PIMAGE_NT_HEADERS WINAPI RtlImageNtHeader(HMODULE);
1835 PIMAGE_SECTION_HEADER WINAPI RtlImageRvaToSection(const IMAGE_NT_HEADERS *,HMODULE,DWORD);
1836 PVOID     WINAPI RtlImageRvaToVa(const IMAGE_NT_HEADERS *,HMODULE,DWORD,IMAGE_SECTION_HEADER **);
1837 BOOL      WINAPI RtlImpersonateSelf(SECURITY_IMPERSONATION_LEVEL);
1838 void      WINAPI RtlInitString(PSTRING,PCSZ);
1839 void      WINAPI RtlInitAnsiString(PANSI_STRING,PCSZ);
1840 void      WINAPI RtlInitUnicodeString(PUNICODE_STRING,PCWSTR);
1841 NTSTATUS  WINAPI RtlInitUnicodeStringEx(PUNICODE_STRING,PCWSTR);
1842 NTSTATUS  WINAPI RtlInitializeCriticalSection(RTL_CRITICAL_SECTION *);
1843 NTSTATUS  WINAPI RtlInitializeCriticalSectionAndSpinCount(RTL_CRITICAL_SECTION *,DWORD);
1844 void      WINAPI RtlInitializeBitMap(PRTL_BITMAP,PULONG,ULONG);
1845 void      WINAPI RtlInitializeHandleTable(ULONG,ULONG,RTL_HANDLE_TABLE *);
1846 void      WINAPI RtlInitializeResource(LPRTL_RWLOCK);
1847 BOOL      WINAPI RtlInitializeSid(PSID,PSID_IDENTIFIER_AUTHORITY,BYTE);
1848
1849 NTSTATUS  WINAPI RtlInt64ToUnicodeString(ULONGLONG,ULONG,UNICODE_STRING *);
1850 NTSTATUS  WINAPI RtlIntegerToChar(ULONG,ULONG,ULONG,PCHAR);
1851 NTSTATUS  WINAPI RtlIntegerToUnicodeString(ULONG,ULONG,UNICODE_STRING *);
1852 ULONG     WINAPI RtlIsDosDeviceName_U(PCWSTR);
1853 BOOLEAN   WINAPI RtlIsNameLegalDOS8Dot3(const UNICODE_STRING*,POEM_STRING,PBOOLEAN);
1854 BOOLEAN   WINAPI RtlIsTextUnicode(LPCVOID,INT,INT *);
1855 BOOLEAN   WINAPI RtlIsValidHandle(const RTL_HANDLE_TABLE *, const RTL_HANDLE *);
1856 BOOLEAN   WINAPI RtlIsValidIndexHandle(const RTL_HANDLE_TABLE *, ULONG Index, RTL_HANDLE **);
1857
1858 LONGLONG  WINAPI RtlLargeIntegerAdd(LONGLONG,LONGLONG);
1859 LONGLONG  WINAPI RtlLargeIntegerArithmeticShift(LONGLONG,INT);
1860 ULONGLONG WINAPI RtlLargeIntegerDivide( ULONGLONG,ULONGLONG,ULONGLONG *);
1861 LONGLONG  WINAPI RtlLargeIntegerNegate(LONGLONG);
1862 LONGLONG  WINAPI RtlLargeIntegerShiftLeft(LONGLONG,INT);
1863 LONGLONG  WINAPI RtlLargeIntegerShiftRight(LONGLONG,INT);
1864 LONGLONG  WINAPI RtlLargeIntegerSubtract(LONGLONG,LONGLONG);
1865 NTSTATUS  WINAPI RtlLargeIntegerToChar(const ULONGLONG *,ULONG,ULONG,PCHAR);
1866 NTSTATUS  WINAPI RtlLeaveCriticalSection(RTL_CRITICAL_SECTION *);
1867 DWORD     WINAPI RtlLengthRequiredSid(DWORD);
1868 ULONG     WINAPI RtlLengthSecurityDescriptor(PSECURITY_DESCRIPTOR);
1869 DWORD     WINAPI RtlLengthSid(PSID);
1870 NTSTATUS  WINAPI RtlLocalTimeToSystemTime(const LARGE_INTEGER*,PLARGE_INTEGER);
1871 BOOLEAN   WINAPI RtlLockHeap(HANDLE);
1872 NTSTATUS  WINAPI RtlLookupAtomInAtomTable(RTL_ATOM_TABLE,const WCHAR*,RTL_ATOM*);
1873
1874 NTSTATUS  WINAPI RtlMakeSelfRelativeSD(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,LPDWORD);
1875 void      WINAPI RtlMapGenericMask(PACCESS_MASK,const GENERIC_MAPPING*);
1876 NTSTATUS  WINAPI RtlMultiByteToUnicodeN(LPWSTR,DWORD,LPDWORD,LPCSTR,DWORD);
1877 NTSTATUS  WINAPI RtlMultiByteToUnicodeSize(DWORD*,LPCSTR,UINT);
1878
1879 DWORD     WINAPI RtlNewSecurityObject(DWORD,DWORD,DWORD,DWORD,DWORD,DWORD);
1880 PRTL_USER_PROCESS_PARAMETERS WINAPI RtlNormalizeProcessParams(RTL_USER_PROCESS_PARAMETERS*);
1881 ULONG     WINAPI RtlNtStatusToDosError(NTSTATUS);
1882 ULONG     WINAPI RtlNtStatusToDosErrorNoTeb(NTSTATUS);
1883 ULONG     WINAPI RtlNumberOfSetBits(PCRTL_BITMAP);
1884 ULONG     WINAPI RtlNumberOfClearBits(PCRTL_BITMAP);
1885
1886 UINT      WINAPI RtlOemStringToUnicodeSize(const STRING*);
1887 NTSTATUS  WINAPI RtlOemStringToUnicodeString(UNICODE_STRING*,const STRING*,BOOLEAN);
1888 NTSTATUS  WINAPI RtlOemToUnicodeN(LPWSTR,DWORD,LPDWORD,LPCSTR,DWORD);
1889 DWORD     WINAPI RtlOpenCurrentUser(ACCESS_MASK,PHKEY);
1890
1891 NTSTATUS  WINAPI RtlPinAtomInAtomTable(RTL_ATOM_TABLE,RTL_ATOM);
1892 BOOLEAN   WINAPI RtlPrefixString(const STRING*,const STRING*,BOOLEAN);
1893 BOOLEAN   WINAPI RtlPrefixUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
1894
1895 NTSTATUS  WINAPI RtlQueryAtomInAtomTable(RTL_ATOM_TABLE,RTL_ATOM,ULONG*,ULONG*,WCHAR*,ULONG*);
1896 NTSTATUS  WINAPI RtlQueryEnvironmentVariable_U(PWSTR,PUNICODE_STRING,PUNICODE_STRING);
1897 NTSTATUS  WINAPI RtlQueryInformationAcl(PACL,LPVOID,DWORD,ACL_INFORMATION_CLASS);
1898 NTSTATUS  WINAPI RtlQueryProcessDebugInformation(ULONG,ULONG,PDEBUG_BUFFER);
1899 NTSTATUS  WINAPI RtlQueryRegistryValues(ULONG, PCWSTR, PRTL_QUERY_REGISTRY_TABLE, PVOID, PVOID);
1900 NTSTATUS  WINAPI RtlQueryTimeZoneInformation(LPTIME_ZONE_INFORMATION);
1901 void      WINAPI RtlRaiseException(PEXCEPTION_RECORD);
1902 void      WINAPI RtlRaiseStatus(NTSTATUS);
1903 ULONG     WINAPI RtlRandom(PULONG);
1904 PVOID     WINAPI RtlReAllocateHeap(HANDLE,ULONG,PVOID,ULONG);
1905 void      WINAPI RtlReleasePebLock(void);
1906 void      WINAPI RtlReleaseResource(LPRTL_RWLOCK);
1907 ULONG     WINAPI RtlRemoveVectoredExceptionHandler(PVOID);
1908 void      WINAPI RtlRestoreLastWin32Error(DWORD);
1909
1910 void      WINAPI RtlSecondsSince1970ToTime(DWORD,LARGE_INTEGER *);
1911 void      WINAPI RtlSecondsSince1980ToTime(DWORD,LARGE_INTEGER *);
1912 NTSTATUS  WINAPI RtlSelfRelativeToAbsoluteSD(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,
1913                                              PDWORD,PACL,PDWORD,PACL,PDWORD,PSID,PDWORD,PSID,PDWORD);
1914 void      WINAPI RtlSetAllBits(PRTL_BITMAP);
1915 void      WINAPI RtlSetBits(PRTL_BITMAP,ULONG,ULONG);
1916 ULONG     WINAPI RtlSetCriticalSectionSpinCount(RTL_CRITICAL_SECTION*,ULONG);
1917 NTSTATUS  WINAPI RtlSetCurrentDirectory_U(const UNICODE_STRING*);
1918 void      WINAPI RtlSetCurrentEnvironment(PWSTR, PWSTR*);
1919 NTSTATUS  WINAPI RtlSetDaclSecurityDescriptor(PSECURITY_DESCRIPTOR,BOOLEAN,PACL,BOOLEAN);
1920 NTSTATUS  WINAPI RtlSetEnvironmentVariable(PWSTR*,PUNICODE_STRING,PUNICODE_STRING);
1921 NTSTATUS  WINAPI RtlSetOwnerSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID,BOOLEAN);
1922 NTSTATUS  WINAPI RtlSetGroupSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID,BOOLEAN);
1923 void      WINAPI RtlSetLastWin32Error(DWORD);
1924 void      WINAPI RtlSetLastWin32ErrorAndNtStatusFromNtStatus(NTSTATUS);
1925 NTSTATUS  WINAPI RtlSetSaclSecurityDescriptor(PSECURITY_DESCRIPTOR,BOOLEAN,PACL,BOOLEAN);
1926 NTSTATUS  WINAPI RtlSetTimeZoneInformation(const TIME_ZONE_INFORMATION*);
1927 ULONG     WINAPI RtlSizeHeap(HANDLE,ULONG,PVOID);
1928 LPDWORD   WINAPI RtlSubAuthoritySid(PSID,DWORD);
1929 LPBYTE    WINAPI RtlSubAuthorityCountSid(PSID);
1930 NTSTATUS  WINAPI RtlSystemTimeToLocalTime(const LARGE_INTEGER*,PLARGE_INTEGER);
1931
1932 void      WINAPI RtlTimeToTimeFields(const LARGE_INTEGER*,PTIME_FIELDS);
1933 BOOLEAN   WINAPI RtlTimeFieldsToTime(PTIME_FIELDS,PLARGE_INTEGER);
1934 void      WINAPI RtlTimeToElapsedTimeFields(const LARGE_INTEGER *,PTIME_FIELDS);
1935 BOOLEAN   WINAPI RtlTimeToSecondsSince1970(const LARGE_INTEGER *,LPDWORD);
1936 BOOLEAN   WINAPI RtlTimeToSecondsSince1980(const LARGE_INTEGER *,LPDWORD);
1937 BOOL      WINAPI RtlTryEnterCriticalSection(RTL_CRITICAL_SECTION *);
1938
1939 ULONGLONG __cdecl RtlUlonglongByteSwap(ULONGLONG);
1940 DWORD     WINAPI RtlUnicodeStringToAnsiSize(const UNICODE_STRING*);
1941 NTSTATUS  WINAPI RtlUnicodeStringToAnsiString(PANSI_STRING,PCUNICODE_STRING,BOOLEAN);
1942 NTSTATUS  WINAPI RtlUnicodeStringToInteger(const UNICODE_STRING *,ULONG,ULONG *);
1943 DWORD     WINAPI RtlUnicodeStringToOemSize(const UNICODE_STRING*);
1944 NTSTATUS  WINAPI RtlUnicodeStringToOemString(POEM_STRING,PCUNICODE_STRING,BOOLEAN);
1945 NTSTATUS  WINAPI RtlUnicodeToMultiByteN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
1946 NTSTATUS  WINAPI RtlUnicodeToMultiByteSize(PULONG,PCWSTR,ULONG);
1947 NTSTATUS  WINAPI RtlUnicodeToOemN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
1948 ULONG     WINAPI RtlUniform(PULONG);
1949 BOOLEAN   WINAPI RtlUnlockHeap(HANDLE);
1950 void      WINAPI RtlUnwind(PVOID,PVOID,PEXCEPTION_RECORD,PVOID);
1951 #ifdef __ia64__
1952 void      WINAPI RtlUnwind2(FRAME_POINTERS,PVOID,PEXCEPTION_RECORD,PVOID,PCONTEXT);
1953 void      WINAPI RtlUnwindEx(FRAME_POINTERS,PVOID,PEXCEPTION_RECORD,PVOID,PCONTEXT,PUNWIND_HISTORY_TABLE);
1954 #endif
1955 WCHAR     WINAPI RtlUpcaseUnicodeChar(WCHAR);
1956 NTSTATUS  WINAPI RtlUpcaseUnicodeString(UNICODE_STRING*,const UNICODE_STRING *,BOOLEAN);
1957 NTSTATUS  WINAPI RtlUpcaseUnicodeStringToAnsiString(STRING*,const UNICODE_STRING*,BOOLEAN);
1958 NTSTATUS  WINAPI RtlUpcaseUnicodeStringToCountedOemString(STRING*,const UNICODE_STRING*,BOOLEAN);
1959 NTSTATUS  WINAPI RtlUpcaseUnicodeStringToOemString(STRING*,const UNICODE_STRING*,BOOLEAN);
1960 NTSTATUS  WINAPI RtlUpcaseUnicodeToMultiByteN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
1961 NTSTATUS  WINAPI RtlUpcaseUnicodeToOemN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
1962 CHAR      WINAPI RtlUpperChar(CHAR);
1963 void      WINAPI RtlUpperString(STRING *,const STRING *);
1964
1965 NTSTATUS  WINAPI RtlValidSecurityDescriptor(PSECURITY_DESCRIPTOR);
1966 BOOLEAN   WINAPI RtlValidAcl(PACL);
1967 BOOLEAN   WINAPI RtlValidSid(PSID);
1968 BOOLEAN   WINAPI RtlValidateHeap(HANDLE,ULONG,LPCVOID);
1969 NTSTATUS  WINAPI RtlVerifyVersionInfo(const RTL_OSVERSIONINFOEXW*,DWORD,DWORDLONG);
1970
1971 NTSTATUS  WINAPI RtlWalkHeap(HANDLE,PVOID);
1972
1973 NTSTATUS  WINAPI RtlpWaitForCriticalSection(RTL_CRITICAL_SECTION *);
1974 NTSTATUS  WINAPI RtlpUnWaitCriticalSection(RTL_CRITICAL_SECTION *);
1975
1976 /* Wine internal functions */
1977
1978 extern NTSTATUS wine_nt_to_unix_file_name( const UNICODE_STRING *nameW, ANSI_STRING *unix_name_ret,
1979                                            UINT disposition, BOOLEAN check_case );
1980
1981 /***********************************************************************
1982  * Inline functions
1983  */
1984
1985 #define InitializeObjectAttributes(p,n,a,r,s) \
1986     do { \
1987         (p)->Length = sizeof(OBJECT_ATTRIBUTES); \
1988         (p)->RootDirectory = r; \
1989         (p)->Attributes = a; \
1990         (p)->ObjectName = n; \
1991         (p)->SecurityDescriptor = s; \
1992         (p)->SecurityQualityOfService = NULL; \
1993     } while (0)
1994
1995 #define NtCurrentProcess() ((HANDLE)-1)
1996
1997 #define RtlFillMemory(Destination,Length,Fill) memset((Destination),(Fill),(Length))
1998 #define RtlMoveMemory(Destination,Source,Length) memmove((Destination),(Source),(Length))
1999 #define RtlStoreUlong(p,v)  do { ULONG _v = (v); memcpy((p), &_v, sizeof(_v)); } while (0)
2000 #define RtlStoreUlonglong(p,v) do { ULONGLONG _v = (v); memcpy((p), &_v, sizeof(_v)); } while (0)
2001 #define RtlRetrieveUlong(p,s) memcpy((p), (s), sizeof(ULONG))
2002 #define RtlRetrieveUlonglong(p,s) memcpy((p), (s), sizeof(ULONGLONG))
2003 #define RtlZeroMemory(Destination,Length) memset((Destination),0,(Length))
2004
2005 inline static BOOLEAN RtlCheckBit(PCRTL_BITMAP lpBits, ULONG ulBit)
2006 {
2007     if (lpBits && ulBit < lpBits->SizeOfBitMap &&
2008         lpBits->Buffer[ulBit >> 5] & (1 << (ulBit & 31)))
2009         return TRUE;
2010     return FALSE;
2011 }
2012
2013 /* These are implemented as __fastcall, so we can't let Winelib apps link with them */
2014 inline static USHORT RtlUshortByteSwap(USHORT s)
2015 {
2016     return (s >> 8) | (s << 8);
2017 }
2018 inline static ULONG RtlUlongByteSwap(ULONG i)
2019 {
2020 #if defined(__i386__) && defined(__GNUC__)
2021     ULONG ret;
2022     __asm__("bswap %0" : "=r" (ret) : "0" (i) );
2023     return ret;
2024 #else
2025     return ((ULONG)RtlUshortByteSwap((USHORT)i) << 16) | RtlUshortByteSwap((USHORT)(i >> 16));
2026 #endif
2027 }
2028
2029 /*************************************************************************
2030  * Loader functions and structures.
2031  *
2032  * Those are not part of standard Winternl.h
2033  */
2034 typedef struct _LDR_MODULE
2035 {
2036     LIST_ENTRY          InLoadOrderModuleList;
2037     LIST_ENTRY          InMemoryOrderModuleList;
2038     LIST_ENTRY          InInitializationOrderModuleList;
2039     void*               BaseAddress;
2040     void*               EntryPoint;
2041     ULONG               SizeOfImage;
2042     UNICODE_STRING      FullDllName;
2043     UNICODE_STRING      BaseDllName;
2044     ULONG               Flags;
2045     SHORT               LoadCount;
2046     SHORT               TlsIndex;
2047     HANDLE              SectionHandle;
2048     ULONG               CheckSum;
2049     ULONG               TimeDateStamp;
2050 } LDR_MODULE, *PLDR_MODULE;
2051
2052 /* those defines are (some of the) regular LDR_MODULE.Flags values */
2053 #define LDR_IMAGE_IS_DLL                0x00000004
2054 #define LDR_LOAD_IN_PROGRESS            0x00001000
2055 #define LDR_UNLOAD_IN_PROGRESS          0x00002000
2056 #define LDR_NO_DLL_CALLS                0x00040000
2057 #define LDR_PROCESS_ATTACHED            0x00080000
2058 #define LDR_MODULE_REBASED              0x00200000
2059
2060 /* these ones is Wine specific */
2061 #define LDR_DONT_RESOLVE_REFS           0x40000000
2062 #define LDR_WINE_INTERNAL               0x80000000
2063
2064 /* FIXME: to be checked */
2065 #define MAXIMUM_FILENAME_LENGTH 256
2066
2067 typedef struct _SYSTEM_MODULE
2068 {
2069     ULONG               Reserved1;
2070     ULONG               Reserved2;
2071     PVOID               ImageBaseAddress;
2072     ULONG               ImageSize;
2073     ULONG               Flags;
2074     WORD                Id;
2075     WORD                Rank;
2076     WORD                Unknown;
2077     WORD                NameOffset;
2078     BYTE                Name[MAXIMUM_FILENAME_LENGTH];
2079 } SYSTEM_MODULE, *PSYSTEM_MODULE;
2080
2081 typedef struct _SYSTEM_MODULE_INFORMATION
2082 {
2083     ULONG               ModulesCount;
2084     SYSTEM_MODULE       Modules[1]; /* FIXME: should be Modules[0] */
2085 } SYSTEM_MODULE_INFORMATION, *PSYSTEM_MODULE_INFORMATION;
2086
2087 NTSTATUS WINAPI LdrDisableThreadCalloutsForDll(HMODULE);
2088 NTSTATUS WINAPI LdrFindEntryForAddress(const void*, PLDR_MODULE*);
2089 NTSTATUS WINAPI LdrLockLoaderLock(ULONG,ULONG*,ULONG*);
2090 NTSTATUS WINAPI LdrQueryProcessModuleInformation(SYSTEM_MODULE_INFORMATION*, ULONG, ULONG*);
2091 NTSTATUS WINAPI LdrUnloadDll(HMODULE);
2092 NTSTATUS WINAPI LdrUnlockLoaderLock(ULONG,ULONG);
2093
2094 /* list manipulation macros */
2095 #define InitializeListHead(le)  (void)((le)->Flink = (le)->Blink = (le))
2096 #define InsertHeadList(le,e)    do { PLIST_ENTRY f = (le)->Flink; (e)->Flink = f; (e)->Blink = (le); f->Blink = (e); (le)->Flink = (e); } while (0)
2097 #define InsertTailList(le,e)    do { PLIST_ENTRY b = (le)->Blink; (e)->Flink = (le); (e)->Blink = b; b->Flink = (e); (le)->Blink = (e); } while (0)
2098 #define IsListEmpty(le)         ((le)->Flink == (le))
2099 #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)
2100 static inline PLIST_ENTRY RemoveHeadList(PLIST_ENTRY le)
2101 {
2102     PLIST_ENTRY f, b, e;
2103
2104     e = le->Flink;
2105     f = le->Flink->Flink;
2106     b = le->Flink->Blink;
2107     f->Blink = b;
2108     b->Flink = f;
2109
2110     if (e != le) e->Flink = e->Blink = NULL;
2111     return e;
2112 }
2113 static inline PLIST_ENTRY RemoveTailList(PLIST_ENTRY le)
2114 {
2115     PLIST_ENTRY f, b, e;
2116
2117     e = le->Blink;
2118     f = le->Blink->Flink;
2119     b = le->Blink->Blink;
2120     f->Blink = b;
2121     b->Flink = f;
2122
2123     if (e != le) e->Flink = e->Blink = NULL;
2124     return e;
2125 }
2126
2127 #ifdef __cplusplus
2128 } /* extern "C" */
2129 #endif /* defined(__cplusplus) */
2130
2131 #endif  /* __WINE_WINTERNL_H */