Declare Nt directory functions.
[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, PROCESS_INFORMATION_CLASS;
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 typedef enum _SHUTDOWN_ACTION {
1527   ShutdownNoReboot,
1528   ShutdownReboot,
1529   ShutdownPowerOff
1530 } SHUTDOWN_ACTION, *PSHUTDOWN_ACTION;
1531
1532 typedef enum _KPROFILE_SOURCE {
1533   ProfileTime,
1534   ProfileAlignmentFixup,
1535   ProfileTotalIssues,
1536   ProfilePipelineDry,
1537   ProfileLoadInstructions,
1538   ProfilePipelineFrozen,
1539   ProfileBranchInstructions,
1540   ProfileTotalNonissues,
1541   ProfileDcacheMisses,
1542   ProfileIcacheMisses,
1543   ProfileCacheMisses,
1544   ProfileBranchMispredictions,
1545   ProfileStoreInstructions,
1546   ProfileFpInstructions,
1547   ProfileIntegerInstructions,
1548   Profile2Issue,
1549   Profile3Issue,
1550   Profile4Issue,
1551   ProfileSpecialInstructions,
1552   ProfileTotalCycles,
1553   ProfileIcacheIssues,
1554   ProfileDcacheAccesses,
1555   ProfileMemoryBarrierCycles,
1556   ProfileLoadLinkedIssues,
1557   ProfileMaximum
1558 } KPROFILE_SOURCE, *PKPROFILE_SOURCE;
1559
1560 typedef struct _OBJDIR_INFORMATION {
1561   UNICODE_STRING ObjectName;
1562   UNICODE_STRING ObjectTypeName;
1563   BYTE Data[1];
1564 } OBJDIR_INFORMATION, *POBJDIR_INFORMATION;
1565
1566 /***********************************************************************
1567  * Function declarations
1568  */
1569
1570 extern LPSTR _strlwr(LPSTR str); /* FIXME: Doesn't belong here */
1571 extern LPSTR _strupr(LPSTR str); /* FIXME: Doesn't belong here */
1572
1573 #if defined(__i386__) && defined(__GNUC__)
1574 static inline void WINAPI DbgBreakPoint(void) { __asm__ __volatile__("int3"); }
1575 static inline void WINAPI DbgUserBreakPoint(void) { __asm__ __volatile__("int3"); }
1576 #else  /* __i386__ && __GNUC__ */
1577 void WINAPI DbgBreakPoint(void);
1578 void WINAPI DbgUserBreakPoint(void);
1579 #endif  /* __i386__ && __GNUC__ */
1580 NTSTATUS WINAPIV DbgPrint(LPCSTR fmt, ...);
1581 NTSTATUS WINAPIV DbgPrintEx(ULONG iComponentId, ULONG Level, LPCSTR fmt, ...);
1582
1583 NTSTATUS  WINAPI LdrAccessResource(HMODULE,const IMAGE_RESOURCE_DATA_ENTRY*,void**,PULONG);
1584 NTSTATUS  WINAPI LdrFindResourceDirectory_U(HMODULE,const LDR_RESOURCE_INFO*,ULONG,const IMAGE_RESOURCE_DIRECTORY**);
1585 NTSTATUS  WINAPI LdrFindResource_U(HMODULE,const LDR_RESOURCE_INFO*,ULONG,const IMAGE_RESOURCE_DATA_ENTRY**);
1586 NTSTATUS  WINAPI LdrGetDllHandle(ULONG, ULONG, const UNICODE_STRING*, HMODULE*);
1587 NTSTATUS  WINAPI LdrGetProcedureAddress(HMODULE, const ANSI_STRING*, ULONG, void**);
1588 void      WINAPI LdrInitializeThunk(HANDLE,ULONG,ULONG,ULONG);
1589 NTSTATUS  WINAPI LdrLoadDll(LPCWSTR, DWORD, const UNICODE_STRING*, HMODULE*);
1590 void      WINAPI LdrShutdownProcess(void);
1591 void      WINAPI LdrShutdownThread(void);
1592 NTSTATUS  WINAPI NtAcceptConnectPort(PHANDLE,ULONG,PLPC_MESSAGE,BOOLEAN,PLPC_SECTION_WRITE,PLPC_SECTION_READ);
1593 NTSTATUS  WINAPI NtAccessCheck(PSECURITY_DESCRIPTOR,HANDLE,ACCESS_MASK,PGENERIC_MAPPING,PPRIVILEGE_SET,PULONG,PULONG,NTSTATUS*);
1594 NTSTATUS  WINAPI NtAddAtom(const WCHAR*,ULONG,RTL_ATOM*);
1595 NTSTATUS  WINAPI NtAdjustGroupsToken(HANDLE,BOOLEAN,PTOKEN_GROUPS,ULONG,PTOKEN_GROUPS,PULONG);
1596 NTSTATUS  WINAPI NtAdjustPrivilegesToken(HANDLE,BOOLEAN,PTOKEN_PRIVILEGES,DWORD,PTOKEN_PRIVILEGES,PDWORD);
1597 NTSTATUS  WINAPI NtAlertThread(HANDLE ThreadHandle);
1598 NTSTATUS  WINAPI NtAllocateLocallyUniqueId(PLUID lpLuid);
1599 NTSTATUS  WINAPI NtAllocateUuids(PULARGE_INTEGER,PULONG,PULONG);
1600 NTSTATUS  WINAPI NtAllocateVirtualMemory(HANDLE,PVOID*,ULONG,ULONG*,ULONG,ULONG);
1601 NTSTATUS  WINAPI NtCancelIoFile(HANDLE,PIO_STATUS_BLOCK);
1602 NTSTATUS  WINAPI NtCancelTimer(HANDLE, BOOLEAN*);
1603 NTSTATUS  WINAPI NtClearEvent(HANDLE);
1604 NTSTATUS  WINAPI NtClose(HANDLE);
1605 NTSTATUS  WINAPI NtCompleteConnectPort(HANDLE);
1606 NTSTATUS  WINAPI NtConnectPort(PHANDLE,PUNICODE_STRING,PSECURITY_QUALITY_OF_SERVICE,PLPC_SECTION_WRITE,PLPC_SECTION_READ,PULONG,PVOID,PULONG);
1607 NTSTATUS  WINAPI NtCreateDirectoryObject(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES);
1608 NTSTATUS  WINAPI NtCreateEvent(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES *,BOOLEAN,BOOLEAN);
1609 NTSTATUS  WINAPI NtCreateFile(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,PLARGE_INTEGER,ULONG,ULONG,ULONG,ULONG,PVOID,ULONG);
1610 NTSTATUS  WINAPI NtCreateIoCompletion(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,ULONG);
1611 NTSTATUS  WINAPI NtCreateKey(PHKEY,ACCESS_MASK,const OBJECT_ATTRIBUTES*,ULONG,const UNICODE_STRING*,ULONG,PULONG);
1612 NTSTATUS  WINAPI NtCreateMailslotFile(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,ULONG,ULONG,ULONG,PLARGE_INTEGER);
1613 NTSTATUS  WINAPI NtCreateMutant(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,BOOLEAN);
1614 NTSTATUS  WINAPI NtCreateNamedPipeFile(PHANDLE,ULONG,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,ULONG,ULONG,ULONG,ULONG,ULONG,ULONG,ULONG,ULONG,ULONG,PLARGE_INTEGER);
1615 NTSTATUS  WINAPI NtCreatePagingFile(PUNICODE_STRING,PLARGE_INTEGER,PLARGE_INTEGER,PLARGE_INTEGER);
1616 NTSTATUS  WINAPI NtCreatePort(PHANDLE,POBJECT_ATTRIBUTES,ULONG,ULONG,PULONG);
1617 NTSTATUS  WINAPI NtCreateSection(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,const LARGE_INTEGER*,ULONG,ULONG,HANDLE);
1618 NTSTATUS  WINAPI NtCreateSemaphore(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*,LONG,LONG);
1619 NTSTATUS  WINAPI NtCreateSymbolicLinkObject(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PUNICODE_STRING);
1620 NTSTATUS  WINAPI NtCreateTimer(HANDLE*, ACCESS_MASK, const OBJECT_ATTRIBUTES*, TIMER_TYPE);
1621 NTSTATUS  WINAPI NtDelayExecution(BOOLEAN,const LARGE_INTEGER*);
1622 NTSTATUS  WINAPI NtDeleteAtom(RTL_ATOM);
1623 NTSTATUS  WINAPI NtDeleteFile(POBJECT_ATTRIBUTES);
1624 NTSTATUS  WINAPI NtDeleteKey(HKEY);
1625 NTSTATUS  WINAPI NtDeleteValueKey(HKEY,const UNICODE_STRING *);
1626 NTSTATUS  WINAPI NtDeviceIoControlFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,PVOID,ULONG,PVOID,ULONG);
1627 NTSTATUS  WINAPI NtDisplayString(PUNICODE_STRING); 
1628 NTSTATUS  WINAPI NtDuplicateObject(HANDLE,HANDLE,HANDLE,PHANDLE,ACCESS_MASK,ULONG,ULONG);
1629 NTSTATUS  WINAPI NtDuplicateToken(HANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,SECURITY_IMPERSONATION_LEVEL,TOKEN_TYPE,PHANDLE);
1630 NTSTATUS  WINAPI NtEnumerateKey(HKEY,ULONG,KEY_INFORMATION_CLASS,void *,DWORD,DWORD *);
1631 NTSTATUS  WINAPI NtEnumerateValueKey(HKEY,ULONG,KEY_VALUE_INFORMATION_CLASS,PVOID,ULONG,PULONG);
1632 NTSTATUS  WINAPI NtFindAtom(const WCHAR*,ULONG,RTL_ATOM*);
1633 NTSTATUS  WINAPI NtFlushBuffersFile(HANDLE,IO_STATUS_BLOCK*);
1634 NTSTATUS  WINAPI NtFlushInstructionCache(HANDLE,LPCVOID,ULONG);
1635 NTSTATUS  WINAPI NtFlushKey(HKEY);
1636 NTSTATUS  WINAPI NtFlushVirtualMemory(HANDLE,LPCVOID*,ULONG*,ULONG);
1637 NTSTATUS  WINAPI NtFreeVirtualMemory(HANDLE,PVOID*,ULONG*,ULONG);
1638 NTSTATUS  WINAPI NtFsControlFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,PVOID,ULONG,PVOID,ULONG);
1639 NTSTATUS  WINAPI NtGetContextThread(HANDLE,CONTEXT*);
1640 NTSTATUS  WINAPI NtImpersonateAnonymousToken(HANDLE);
1641 NTSTATUS  WINAPI NtImpersonateClientOfPort(HANDLE,PPORT_MESSAGE);
1642 NTSTATUS  WINAPI NtImpersonateThread(HANDLE,HANDLE,PSECURITY_QUALITY_OF_SERVICE);
1643 NTSTATUS  WINAPI NtInitiatePowerAction(POWER_ACTION,SYSTEM_POWER_STATE,ULONG,BOOLEAN);
1644 NTSTATUS  WINAPI NtListenPort(HANDLE,PLPC_MESSAGE); 
1645 NTSTATUS  WINAPI NtLoadDriver(const UNICODE_STRING *);
1646 NTSTATUS  WINAPI NtLoadKey(const OBJECT_ATTRIBUTES *,OBJECT_ATTRIBUTES *);
1647 NTSTATUS  WINAPI NtLockFile(HANDLE,HANDLE,PIO_APC_ROUTINE,void*,PIO_STATUS_BLOCK,PLARGE_INTEGER,PLARGE_INTEGER,ULONG*,BOOLEAN,BOOLEAN);
1648 NTSTATUS  WINAPI NtLockVirtualMemory(HANDLE,PVOID*,ULONG*,ULONG);
1649 NTSTATUS  WINAPI NtMapViewOfSection(HANDLE,HANDLE,PVOID*,ULONG,ULONG,const LARGE_INTEGER*,ULONG*,SECTION_INHERIT,ULONG,ULONG);
1650 NTSTATUS  WINAPI NtNotifyChangeKey(HKEY,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,BOOLEAN,PVOID,ULONG,BOOLEAN);
1651 NTSTATUS  WINAPI NtOpenDirectoryObject(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES);
1652 NTSTATUS  WINAPI NtOpenEvent(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES *);
1653 NTSTATUS  WINAPI NtOpenFile(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,ULONG,ULONG);
1654 NTSTATUS  WINAPI NtOpenIoCompletion(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES);
1655 NTSTATUS  WINAPI NtOpenKey(PHKEY,ACCESS_MASK,const OBJECT_ATTRIBUTES *);
1656 NTSTATUS  WINAPI NtOpenMutant(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*);
1657 NTSTATUS  WINAPI NtOpenProcessToken(HANDLE,DWORD,HANDLE *);
1658 NTSTATUS  WINAPI NtOpenSection(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*);
1659 NTSTATUS  WINAPI NtOpenSemaphore(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*);
1660 NTSTATUS  WINAPI NtOpenSymbolicLinkObject(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES);
1661 NTSTATUS  WINAPI NtOpenThread(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,const CLIENT_ID*);
1662 NTSTATUS  WINAPI NtOpenThreadToken(HANDLE,DWORD,BOOLEAN,HANDLE *);
1663 NTSTATUS  WINAPI NtOpenTimer(HANDLE*, ACCESS_MASK, const OBJECT_ATTRIBUTES*);
1664 NTSTATUS  WINAPI NtPowerInformation(POWER_INFORMATION_LEVEL,PVOID,ULONG,PVOID,ULONG);
1665 NTSTATUS  WINAPI NtPrivilegeCheck(HANDLE,PPRIVILEGE_SET,PBOOLEAN);
1666 NTSTATUS  WINAPI NtProtectVirtualMemory(HANDLE,PVOID*,ULONG*,ULONG,ULONG*);
1667 NTSTATUS  WINAPI NtPulseEvent(HANDLE,PULONG);
1668 NTSTATUS  WINAPI NtQueueApcThread(HANDLE,PNTAPCFUNC,ULONG_PTR,ULONG_PTR,ULONG_PTR);
1669 NTSTATUS  WINAPI NtQueryAttributesFile(const OBJECT_ATTRIBUTES*,FILE_BASIC_INFORMATION*);
1670 NTSTATUS  WINAPI NtQueryDefaultLocale(BOOLEAN,LCID*);
1671 NTSTATUS  WINAPI NtQueryDefaultUILanguage(LANGID*);
1672 NTSTATUS  WINAPI NtQueryDirectoryFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,PVOID,ULONG,FILE_INFORMATION_CLASS,BOOLEAN,PUNICODE_STRING,BOOLEAN);
1673 NTSTATUS  WINAPI NtQueryDirectoryObject(HANDLE,POBJDIR_INFORMATION,ULONG,BOOLEAN,BOOLEAN,PULONG,PULONG);
1674 NTSTATUS  WINAPI NtQueryEaFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,BOOLEAN,PVOID,ULONG,PVOID,BOOLEAN);
1675 NTSTATUS  WINAPI NtQueryEvent(HANDLE,EVENT_INFORMATION_CLASS,PVOID,ULONG,PULONG); 
1676 NTSTATUS  WINAPI NtQueryFullAttributesFile(const OBJECT_ATTRIBUTES*,FILE_NETWORK_OPEN_INFORMATION*);
1677 NTSTATUS  WINAPI NtQueryInformationAtom(RTL_ATOM,ATOM_INFORMATION_CLASS,RTL_ATOM_TABLE,ULONG,ULONG*);
1678 NTSTATUS  WINAPI NtQueryInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,LONG,FILE_INFORMATION_CLASS);
1679 NTSTATUS  WINAPI NtQueryInformationProcess(HANDLE,PROCESSINFOCLASS,PVOID,ULONG,PULONG);
1680 NTSTATUS  WINAPI NtQueryInformationThread(HANDLE,THREADINFOCLASS,PVOID,ULONG,PULONG);
1681 NTSTATUS  WINAPI NtQueryInformationToken(HANDLE,DWORD,LPVOID,DWORD,LPDWORD);
1682 NTSTATUS  WINAPI NtQueryInstallUILanguage(LANGID*);
1683 NTSTATUS  WINAPI NtQueryKey(HKEY,KEY_INFORMATION_CLASS,void *,DWORD,DWORD *);
1684 NTSTATUS  WINAPI NtQueryMultipleValueKey(HKEY,PKEY_MULTIPLE_VALUE_INFORMATION,ULONG,PVOID,ULONG,PULONG);
1685 NTSTATUS  WINAPI NtQueryMutant(HANDLE,MUTANT_INFORMATION_CLASS,PVOID,ULONG,PULONG); 
1686 NTSTATUS  WINAPI NtQueryObject(HANDLE, OBJECT_INFORMATION_CLASS, PVOID, ULONG, PULONG);
1687 NTSTATUS  WINAPI NtQueryPerformanceCounter(PLARGE_INTEGER, PLARGE_INTEGER);
1688 NTSTATUS  WINAPI NtQuerySecurityObject(HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,ULONG,PULONG);
1689 NTSTATUS  WINAPI NtQuerySection(HANDLE,SECTION_INFORMATION_CLASS,PVOID,ULONG,PULONG); 
1690 NTSTATUS  WINAPI NtQuerySemaphore(HANDLE,SEMAPHORE_INFORMATION_CLASS,PVOID,ULONG,PULONG);
1691 NTSTATUS  WINAPI NtQuerySymbolicLinkObject(HANDLE,PUNICODE_STRING,PULONG);
1692 NTSTATUS  WINAPI NtQuerySystemInformation(SYSTEM_INFORMATION_CLASS,PVOID,ULONG,PULONG);
1693 NTSTATUS  WINAPI NtQuerySystemTime(PLARGE_INTEGER);
1694 NTSTATUS  WINAPI NtQueryTimer(HANDLE,TIMER_INFORMATION_CLASS,PVOID,ULONG,PULONG);
1695 NTSTATUS  WINAPI NtQueryTimerResolution(PULONG,PULONG,PULONG);
1696 NTSTATUS  WINAPI NtQueryValueKey(HKEY,const UNICODE_STRING *,KEY_VALUE_INFORMATION_CLASS,void *,DWORD,DWORD *);
1697 NTSTATUS  WINAPI NtQueryVirtualMemory(HANDLE,LPCVOID,MEMORY_INFORMATION_CLASS,PVOID,ULONG,ULONG*);
1698 NTSTATUS  WINAPI NtQueryVolumeInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,FS_INFORMATION_CLASS);
1699 void      WINAPI NtRaiseException(PEXCEPTION_RECORD,PCONTEXT,BOOL);
1700 NTSTATUS  WINAPI NtReadFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,PVOID,ULONG,PLARGE_INTEGER,PULONG);
1701 NTSTATUS  WINAPI NtReadVirtualMemory(HANDLE,const void*,void*,SIZE_T,SIZE_T*);
1702 NTSTATUS  WINAPI NtRegisterThreadTerminatePort(HANDLE); 
1703 NTSTATUS  WINAPI NtReleaseMutant(HANDLE,PLONG);
1704 NTSTATUS  WINAPI NtReleaseSemaphore(HANDLE,ULONG,PULONG);
1705 NTSTATUS  WINAPI NtRemoveIoCompletion(HANDLE,PULONG,PULONG,PIO_STATUS_BLOCK,PLARGE_INTEGER);
1706 NTSTATUS  WINAPI NtReplaceKey(POBJECT_ATTRIBUTES,HKEY,POBJECT_ATTRIBUTES);
1707 NTSTATUS  WINAPI NtReplyWaitReceivePort(HANDLE,PULONG,PLPC_MESSAGE,PLPC_MESSAGE);
1708 NTSTATUS  WINAPI NtReplyWaitReplyPort(HANDLE,PLPC_MESSAGE);
1709 NTSTATUS  WINAPI NtRequestWaitReplyPort(HANDLE,PLPC_MESSAGE,PLPC_MESSAGE);
1710 NTSTATUS  WINAPI NtResetEvent(HANDLE,PULONG);
1711 NTSTATUS  WINAPI NtRestoreKey(HKEY,HANDLE,ULONG);
1712 NTSTATUS  WINAPI NtResumeThread(HANDLE,PULONG);
1713 NTSTATUS  WINAPI NtSaveKey(HKEY,HANDLE);
1714 NTSTATUS  WINAPI NtSetContextThread(HANDLE,const CONTEXT*);
1715 NTSTATUS  WINAPI NtSetDefaultLocale(BOOLEAN,LCID);
1716 NTSTATUS  WINAPI NtSetDefaultUILanguage(LANGID);
1717 NTSTATUS  WINAPI NtSetEaFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG);
1718 NTSTATUS  WINAPI NtSetEvent(HANDLE,PULONG);
1719 NTSTATUS  WINAPI NtSetInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,FILE_INFORMATION_CLASS);
1720 NTSTATUS  WINAPI NtSetInformationKey(HKEY,const int,PVOID,ULONG);
1721 NTSTATUS  WINAPI NtSetInformationObject(HANDLE, OBJECT_INFORMATION_CLASS, PVOID, ULONG);
1722 NTSTATUS  WINAPI NtSetInformationProcess(HANDLE,PROCESS_INFORMATION_CLASS,PVOID,ULONG);
1723 NTSTATUS  WINAPI NtSetInformationThread(HANDLE,THREADINFOCLASS,LPCVOID,ULONG);
1724 NTSTATUS  WINAPI NtSetInformationToken(HANDLE,TOKEN_INFORMATION_CLASS,PVOID,ULONG);
1725 NTSTATUS  WINAPI NtSetIntervalProfile(ULONG,KPROFILE_SOURCE);
1726 NTSTATUS  WINAPI NtSetIoCompletion(HANDLE,ULONG,ULONG,NTSTATUS,ULONG);
1727 NTSTATUS  WINAPI NtSetSecurityObject(HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR);
1728 NTSTATUS  WINAPI NtSetSystemTime(const LARGE_INTEGER*,LARGE_INTEGER*);
1729 NTSTATUS  WINAPI NtSetTimer(HANDLE, const LARGE_INTEGER*, PTIMER_APC_ROUTINE, PVOID, BOOLEAN, ULONG, BOOLEAN*);
1730 NTSTATUS  WINAPI NtSetTimerResolution(ULONG,BOOLEAN,PULONG); 
1731 NTSTATUS  WINAPI NtSetValueKey(HKEY,const UNICODE_STRING *,ULONG,ULONG,const void *,ULONG);
1732 NTSTATUS  WINAPI NtSetVolumeInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,FS_INFORMATION_CLASS);
1733 NTSTATUS  WINAPI NtSignalAndWaitForSingleObject(HANDLE,HANDLE,BOOLEAN,const LARGE_INTEGER*);
1734 NTSTATUS  WINAPI NtShutdownSystem(SHUTDOWN_ACTION); 
1735 NTSTATUS  WINAPI NtSuspendThread(HANDLE,PULONG);
1736 NTSTATUS  WINAPI NtTerminateProcess(HANDLE,LONG);
1737 NTSTATUS  WINAPI NtTerminateThread(HANDLE,LONG);
1738 NTSTATUS  WINAPI NtUnloadDriver(const UNICODE_STRING *);
1739 NTSTATUS  WINAPI NtUnloadKey(HKEY);
1740 NTSTATUS  WINAPI NtUnlockFile(HANDLE,PIO_STATUS_BLOCK,PLARGE_INTEGER,PLARGE_INTEGER,PULONG);
1741 NTSTATUS  WINAPI NtUnlockVirtualMemory(HANDLE,PVOID*,ULONG*,ULONG);
1742 NTSTATUS  WINAPI NtUnmapViewOfSection(HANDLE,PVOID);
1743 NTSTATUS  WINAPI NtWaitForSingleObject(HANDLE,BOOLEAN,const LARGE_INTEGER*);
1744 NTSTATUS  WINAPI NtWaitForMultipleObjects(ULONG,const HANDLE*,BOOLEAN,BOOLEAN,const LARGE_INTEGER*);
1745 NTSTATUS  WINAPI NtWriteFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,const void*,ULONG,PLARGE_INTEGER,PULONG);
1746 NTSTATUS  WINAPI NtWriteVirtualMemory(HANDLE,void*,const void*,SIZE_T,SIZE_T*);
1747 NTSTATUS  WINAPI NtYieldExecution(void);
1748
1749 void      WINAPI RtlAcquirePebLock(void);
1750 BYTE      WINAPI RtlAcquireResourceExclusive(LPRTL_RWLOCK,BYTE);
1751 BYTE      WINAPI RtlAcquireResourceShared(LPRTL_RWLOCK,BYTE);
1752 NTSTATUS  WINAPI RtlAddAce(PACL,DWORD,DWORD,PACE_HEADER,DWORD);
1753 NTSTATUS  WINAPI RtlAddAccessAllowedAce(PACL,DWORD,DWORD,PSID);
1754 NTSTATUS  WINAPI RtlAddAccessAllowedAceEx(PACL,DWORD,DWORD,DWORD,PSID);
1755 NTSTATUS  WINAPI RtlAddAccessDeniedAce(PACL,DWORD,DWORD,PSID);
1756 NTSTATUS  WINAPI RtlAddAccessDeniedAceEx(PACL,DWORD,DWORD,DWORD,PSID);
1757 NTSTATUS  WINAPI RtlAddAtomToAtomTable(RTL_ATOM_TABLE,const WCHAR*,RTL_ATOM*);
1758 PVOID     WINAPI RtlAddVectoredExceptionHandler(ULONG,PVECTORED_EXCEPTION_HANDLER);
1759 NTSTATUS  WINAPI RtlAdjustPrivilege(ULONG,BOOLEAN,BOOLEAN,PBOOLEAN);
1760 NTSTATUS  WINAPI RtlAllocateAndInitializeSid(PSID_IDENTIFIER_AUTHORITY,BYTE,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,PSID *);
1761 RTL_HANDLE * WINAPI RtlAllocateHandle(RTL_HANDLE_TABLE *,ULONG *);
1762 PVOID     WINAPI RtlAllocateHeap(HANDLE,ULONG,ULONG);
1763 WCHAR     WINAPI RtlAnsiCharToUnicodeChar(LPSTR *);
1764 DWORD     WINAPI RtlAnsiStringToUnicodeSize(const STRING *);
1765 NTSTATUS  WINAPI RtlAnsiStringToUnicodeString(PUNICODE_STRING,PCANSI_STRING,BOOLEAN);
1766 NTSTATUS  WINAPI RtlAppendAsciizToString(STRING *,LPCSTR);
1767 NTSTATUS  WINAPI RtlAppendStringToString(STRING *,const STRING *);
1768 NTSTATUS  WINAPI RtlAppendUnicodeStringToString(UNICODE_STRING *,const UNICODE_STRING *);
1769 NTSTATUS  WINAPI RtlAppendUnicodeToString(UNICODE_STRING *,LPCWSTR);
1770 BOOLEAN   WINAPI RtlAreAllAccessesGranted(ACCESS_MASK,ACCESS_MASK);
1771 BOOLEAN   WINAPI RtlAreAnyAccessesGranted(ACCESS_MASK,ACCESS_MASK);
1772 BOOLEAN   WINAPI RtlAreBitsSet(PCRTL_BITMAP,ULONG,ULONG);
1773 BOOLEAN   WINAPI RtlAreBitsClear(PCRTL_BITMAP,ULONG,ULONG);
1774
1775 NTSTATUS  WINAPI RtlCharToInteger(PCSZ,ULONG,PULONG);
1776 NTSTATUS  WINAPI RtlCheckRegistryKey(ULONG, PWSTR);
1777 void      WINAPI RtlClearAllBits(PRTL_BITMAP);
1778 void      WINAPI RtlClearBits(PRTL_BITMAP,ULONG,ULONG);
1779 PDEBUG_BUFFER WINAPI RtlCreateQueryDebugBuffer(ULONG,BOOLEAN);
1780 ULONG     WINAPI RtlCompactHeap(HANDLE,ULONG);
1781 LONG      WINAPI RtlCompareString(const STRING*,const STRING*,BOOLEAN);
1782 LONG      WINAPI RtlCompareUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
1783 DWORD     WINAPI RtlComputeCrc32(DWORD,PBYTE,INT);
1784 NTSTATUS  WINAPI RtlConvertSidToUnicodeString(PUNICODE_STRING,PSID,BOOLEAN);
1785 LONGLONG  WINAPI RtlConvertLongToLargeInteger(LONG);
1786 ULONGLONG WINAPI RtlConvertUlongToLargeInteger(ULONG);
1787 void      WINAPI RtlCopyLuid(PLUID,const LUID*);
1788 void      WINAPI RtlCopyLuidAndAttributesArray(ULONG,const LUID_AND_ATTRIBUTES*,PLUID_AND_ATTRIBUTES);
1789 BOOLEAN   WINAPI RtlCopySid(DWORD,PSID,PSID);
1790 void      WINAPI RtlCopyString(STRING*,const STRING*);
1791 void      WINAPI RtlCopyUnicodeString(UNICODE_STRING*,const UNICODE_STRING*);
1792 NTSTATUS  WINAPI RtlCreateAcl(PACL,DWORD,DWORD);
1793 NTSTATUS  WINAPI RtlCreateAtomTable(ULONG,RTL_ATOM_TABLE*);
1794 NTSTATUS  WINAPI RtlCreateEnvironment(BOOLEAN, PWSTR*);
1795 HANDLE    WINAPI RtlCreateHeap(ULONG,PVOID,ULONG,ULONG,PVOID,PRTL_HEAP_DEFINITION);
1796 NTSTATUS  WINAPI RtlCreateProcessParameters(RTL_USER_PROCESS_PARAMETERS**,const UNICODE_STRING*,
1797                                             const UNICODE_STRING*,const UNICODE_STRING*,
1798                                             const UNICODE_STRING*,PWSTR,const UNICODE_STRING*,
1799                                             const UNICODE_STRING*,const UNICODE_STRING*,
1800                                             const UNICODE_STRING*);
1801 NTSTATUS  WINAPI RtlCreateSecurityDescriptor(PSECURITY_DESCRIPTOR,DWORD);
1802 BOOLEAN   WINAPI RtlCreateUnicodeString(PUNICODE_STRING,LPCWSTR);
1803 BOOLEAN   WINAPI RtlCreateUnicodeStringFromAsciiz(PUNICODE_STRING,LPCSTR);
1804 NTSTATUS  WINAPI RtlCreateUserThread(HANDLE,const SECURITY_DESCRIPTOR*,BOOLEAN,PVOID,SIZE_T,SIZE_T,PRTL_THREAD_START_ROUTINE,void*,HANDLE*,CLIENT_ID*);
1805
1806 NTSTATUS  WINAPI RtlDeleteAce(PACL,DWORD);
1807 NTSTATUS  WINAPI RtlDeleteAtomFromAtomTable(RTL_ATOM_TABLE,RTL_ATOM);
1808 NTSTATUS  WINAPI RtlDeleteCriticalSection(RTL_CRITICAL_SECTION *);
1809 NTSTATUS  WINAPI RtlDeleteRegistryValue(ULONG, PCWSTR, PCWSTR);
1810 void      WINAPI RtlDeleteResource(LPRTL_RWLOCK);
1811 DWORD     WINAPI RtlDeleteSecurityObject(DWORD);
1812 PRTL_USER_PROCESS_PARAMETERS WINAPI RtlDeNormalizeProcessParams(RTL_USER_PROCESS_PARAMETERS*);
1813 NTSTATUS  WINAPI RtlDestroyAtomTable(RTL_ATOM_TABLE);
1814 NTSTATUS  WINAPI RtlDestroyEnvironment(PWSTR);
1815 NTSTATUS  WINAPI RtlDestroyHandleTable(RTL_HANDLE_TABLE *);
1816 HANDLE    WINAPI RtlDestroyHeap(HANDLE);
1817 void      WINAPI RtlDestroyProcessParameters(RTL_USER_PROCESS_PARAMETERS*);
1818 NTSTATUS  WINAPI RtlDestroyQueryDebugBuffer(PDEBUG_BUFFER);
1819 DOS_PATHNAME_TYPE WINAPI RtlDetermineDosPathNameType_U(PCWSTR);
1820 BOOLEAN   WINAPI RtlDoesFileExists_U(LPCWSTR);
1821 BOOLEAN   WINAPI RtlDosPathNameToNtPathName_U(PCWSTR,PUNICODE_STRING,PWSTR*,CURDIR*);
1822 ULONG     WINAPI RtlDosSearchPath_U(LPCWSTR, LPCWSTR, LPCWSTR, ULONG, LPWSTR, LPWSTR*);
1823 WCHAR     WINAPI RtlDowncaseUnicodeChar(WCHAR);
1824 NTSTATUS  WINAPI RtlDowncaseUnicodeString(UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
1825 void      WINAPI RtlDumpResource(LPRTL_RWLOCK);
1826 NTSTATUS  WINAPI RtlDuplicateUnicodeString(int,const UNICODE_STRING*,UNICODE_STRING*);
1827
1828 NTSTATUS  WINAPI RtlEmptyAtomTable(RTL_ATOM_TABLE,BOOLEAN);
1829 LONGLONG  WINAPI RtlEnlargedIntegerMultiply(INT,INT);
1830 ULONGLONG WINAPI RtlEnlargedUnsignedMultiply(UINT,UINT);
1831 UINT      WINAPI RtlEnlargedUnsignedDivide(ULONGLONG,UINT,UINT *);
1832 NTSTATUS  WINAPI RtlEnterCriticalSection(RTL_CRITICAL_SECTION *);
1833 void      WINAPI RtlEraseUnicodeString(UNICODE_STRING*);
1834 NTSTATUS  WINAPI RtlEqualComputerName(const UNICODE_STRING*,const UNICODE_STRING*);
1835 NTSTATUS  WINAPI RtlEqualDomainName(const UNICODE_STRING*,const UNICODE_STRING*);
1836 BOOLEAN   WINAPI RtlEqualLuid(const LUID*,const LUID*);
1837 BOOL      WINAPI RtlEqualPrefixSid(PSID,PSID);
1838 BOOL      WINAPI RtlEqualSid(PSID,PSID);
1839 BOOLEAN   WINAPI RtlEqualString(const STRING*,const STRING*,BOOLEAN);
1840 BOOLEAN   WINAPI RtlEqualUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
1841 NTSTATUS  WINAPI RtlExpandEnvironmentStrings_U(PWSTR, const UNICODE_STRING*, UNICODE_STRING*, ULONG*);
1842 LONGLONG  WINAPI RtlExtendedMagicDivide(LONGLONG,LONGLONG,INT);
1843 LONGLONG  WINAPI RtlExtendedIntegerMultiply(LONGLONG,INT);
1844 LONGLONG  WINAPI RtlExtendedLargeIntegerDivide(LONGLONG,INT,INT *);
1845
1846 NTSTATUS  WINAPI RtlFindCharInUnicodeString(int,const UNICODE_STRING*,const UNICODE_STRING*,USHORT*);
1847 ULONG     WINAPI RtlFindClearBits(PCRTL_BITMAP,ULONG,ULONG);
1848 ULONG     WINAPI RtlFindClearBitsAndSet(PRTL_BITMAP,ULONG,ULONG);
1849 ULONG     WINAPI RtlFindClearRuns(PCRTL_BITMAP,PRTL_BITMAP_RUN,ULONG,BOOLEAN);
1850 ULONG     WINAPI RtlFindLastBackwardRunSet(PCRTL_BITMAP,ULONG,PULONG);
1851 ULONG     WINAPI RtlFindLastBackwardRunClear(PCRTL_BITMAP,ULONG,PULONG);
1852 CCHAR     WINAPI RtlFindLeastSignificantBit(ULONGLONG);
1853 ULONG     WINAPI RtlFindLongestRunSet(PCRTL_BITMAP,PULONG);
1854 ULONG     WINAPI RtlFindLongestRunClear(PCRTL_BITMAP,PULONG);
1855 NTSTATUS  WINAPI RtlFindMessage(HMODULE,ULONG,ULONG,ULONG,const MESSAGE_RESOURCE_ENTRY**);
1856 CCHAR     WINAPI RtlFindMostSignificantBit(ULONGLONG);
1857 ULONG     WINAPI RtlFindNextForwardRunSet(PCRTL_BITMAP,ULONG,PULONG);
1858 ULONG     WINAPI RtlFindNextForwardRunClear(PCRTL_BITMAP,ULONG,PULONG);
1859 ULONG     WINAPI RtlFindSetBits(PCRTL_BITMAP,ULONG,ULONG);
1860 ULONG     WINAPI RtlFindSetBitsAndClear(PRTL_BITMAP,ULONG,ULONG);
1861 ULONG     WINAPI RtlFindSetRuns(PCRTL_BITMAP,PRTL_BITMAP_RUN,ULONG,BOOLEAN);
1862 BOOLEAN   WINAPI RtlFirstFreeAce(PACL,PACE_HEADER *);
1863 NTSTATUS  WINAPI RtlFormatCurrentUserKeyPath(PUNICODE_STRING);
1864 NTSTATUS  WINAPI RtlFormatMessage(LPWSTR,UCHAR,BOOLEAN,BOOLEAN,BOOLEAN,va_list *,LPWSTR,ULONG);
1865 void      WINAPI RtlFreeAnsiString(PANSI_STRING);
1866 BOOLEAN   WINAPI RtlFreeHandle(RTL_HANDLE_TABLE *,RTL_HANDLE *);
1867 BOOLEAN   WINAPI RtlFreeHeap(HANDLE,ULONG,PVOID);
1868 void      WINAPI RtlFreeOemString(POEM_STRING);
1869 DWORD     WINAPI RtlFreeSid(PSID);
1870 void      WINAPI RtlFreeUnicodeString(PUNICODE_STRING);
1871
1872 NTSTATUS  WINAPI RtlGetAce(PACL,DWORD,LPVOID *);
1873 NTSTATUS  WINAPI RtlGetControlSecurityDescriptor(PSECURITY_DESCRIPTOR, PSECURITY_DESCRIPTOR_CONTROL,LPDWORD);
1874 NTSTATUS  WINAPI RtlGetCurrentDirectory_U(ULONG, LPWSTR);
1875 NTSTATUS  WINAPI RtlGetDaclSecurityDescriptor(PSECURITY_DESCRIPTOR,PBOOLEAN,PACL *,PBOOLEAN);
1876 ULONG     WINAPI RtlGetFullPathName_U(PCWSTR,ULONG,PWSTR,PWSTR*);
1877 NTSTATUS  WINAPI RtlGetGroupSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID *,PBOOLEAN);
1878 NTSTATUS  WINAPI RtlGetLastNtStatus(void);
1879 DWORD     WINAPI RtlGetLastWin32Error(void);
1880 DWORD     WINAPI RtlGetLongestNtPathLength(void);
1881 BOOLEAN   WINAPI RtlGetNtProductType(LPDWORD);
1882 NTSTATUS  WINAPI RtlGetOwnerSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID *,PBOOLEAN);
1883 ULONG     WINAPI RtlGetProcessHeaps(ULONG,HANDLE*);
1884 NTSTATUS  WINAPI RtlGetSaclSecurityDescriptor(PSECURITY_DESCRIPTOR,PBOOLEAN,PACL *,PBOOLEAN);
1885 NTSTATUS  WINAPI RtlGetVersion(RTL_OSVERSIONINFOEXW*);
1886
1887 PSID_IDENTIFIER_AUTHORITY WINAPI RtlIdentifierAuthoritySid(PSID);
1888 PVOID     WINAPI RtlImageDirectoryEntryToData(HMODULE,BOOL,WORD,ULONG *);
1889 PIMAGE_NT_HEADERS WINAPI RtlImageNtHeader(HMODULE);
1890 PIMAGE_SECTION_HEADER WINAPI RtlImageRvaToSection(const IMAGE_NT_HEADERS *,HMODULE,DWORD);
1891 PVOID     WINAPI RtlImageRvaToVa(const IMAGE_NT_HEADERS *,HMODULE,DWORD,IMAGE_SECTION_HEADER **);
1892 BOOL      WINAPI RtlImpersonateSelf(SECURITY_IMPERSONATION_LEVEL);
1893 void      WINAPI RtlInitString(PSTRING,PCSZ);
1894 void      WINAPI RtlInitAnsiString(PANSI_STRING,PCSZ);
1895 void      WINAPI RtlInitUnicodeString(PUNICODE_STRING,PCWSTR);
1896 NTSTATUS  WINAPI RtlInitUnicodeStringEx(PUNICODE_STRING,PCWSTR);
1897 NTSTATUS  WINAPI RtlInitializeCriticalSection(RTL_CRITICAL_SECTION *);
1898 NTSTATUS  WINAPI RtlInitializeCriticalSectionAndSpinCount(RTL_CRITICAL_SECTION *,DWORD);
1899 void      WINAPI RtlInitializeBitMap(PRTL_BITMAP,PULONG,ULONG);
1900 void      WINAPI RtlInitializeHandleTable(ULONG,ULONG,RTL_HANDLE_TABLE *);
1901 void      WINAPI RtlInitializeResource(LPRTL_RWLOCK);
1902 BOOL      WINAPI RtlInitializeSid(PSID,PSID_IDENTIFIER_AUTHORITY,BYTE);
1903
1904 NTSTATUS  WINAPI RtlInt64ToUnicodeString(ULONGLONG,ULONG,UNICODE_STRING *);
1905 NTSTATUS  WINAPI RtlIntegerToChar(ULONG,ULONG,ULONG,PCHAR);
1906 NTSTATUS  WINAPI RtlIntegerToUnicodeString(ULONG,ULONG,UNICODE_STRING *);
1907 ULONG     WINAPI RtlIsDosDeviceName_U(PCWSTR);
1908 BOOLEAN   WINAPI RtlIsNameLegalDOS8Dot3(const UNICODE_STRING*,POEM_STRING,PBOOLEAN);
1909 BOOLEAN   WINAPI RtlIsTextUnicode(LPCVOID,INT,INT *);
1910 BOOLEAN   WINAPI RtlIsValidHandle(const RTL_HANDLE_TABLE *, const RTL_HANDLE *);
1911 BOOLEAN   WINAPI RtlIsValidIndexHandle(const RTL_HANDLE_TABLE *, ULONG Index, RTL_HANDLE **);
1912
1913 LONGLONG  WINAPI RtlLargeIntegerAdd(LONGLONG,LONGLONG);
1914 LONGLONG  WINAPI RtlLargeIntegerArithmeticShift(LONGLONG,INT);
1915 ULONGLONG WINAPI RtlLargeIntegerDivide( ULONGLONG,ULONGLONG,ULONGLONG *);
1916 LONGLONG  WINAPI RtlLargeIntegerNegate(LONGLONG);
1917 LONGLONG  WINAPI RtlLargeIntegerShiftLeft(LONGLONG,INT);
1918 LONGLONG  WINAPI RtlLargeIntegerShiftRight(LONGLONG,INT);
1919 LONGLONG  WINAPI RtlLargeIntegerSubtract(LONGLONG,LONGLONG);
1920 NTSTATUS  WINAPI RtlLargeIntegerToChar(const ULONGLONG *,ULONG,ULONG,PCHAR);
1921 NTSTATUS  WINAPI RtlLeaveCriticalSection(RTL_CRITICAL_SECTION *);
1922 DWORD     WINAPI RtlLengthRequiredSid(DWORD);
1923 ULONG     WINAPI RtlLengthSecurityDescriptor(PSECURITY_DESCRIPTOR);
1924 DWORD     WINAPI RtlLengthSid(PSID);
1925 NTSTATUS  WINAPI RtlLocalTimeToSystemTime(const LARGE_INTEGER*,PLARGE_INTEGER);
1926 BOOLEAN   WINAPI RtlLockHeap(HANDLE);
1927 NTSTATUS  WINAPI RtlLookupAtomInAtomTable(RTL_ATOM_TABLE,const WCHAR*,RTL_ATOM*);
1928
1929 NTSTATUS  WINAPI RtlMakeSelfRelativeSD(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,LPDWORD);
1930 void      WINAPI RtlMapGenericMask(PACCESS_MASK,const GENERIC_MAPPING*);
1931 NTSTATUS  WINAPI RtlMultiByteToUnicodeN(LPWSTR,DWORD,LPDWORD,LPCSTR,DWORD);
1932 NTSTATUS  WINAPI RtlMultiByteToUnicodeSize(DWORD*,LPCSTR,UINT);
1933
1934 DWORD     WINAPI RtlNewSecurityObject(DWORD,DWORD,DWORD,DWORD,DWORD,DWORD);
1935 PRTL_USER_PROCESS_PARAMETERS WINAPI RtlNormalizeProcessParams(RTL_USER_PROCESS_PARAMETERS*);
1936 ULONG     WINAPI RtlNtStatusToDosError(NTSTATUS);
1937 ULONG     WINAPI RtlNtStatusToDosErrorNoTeb(NTSTATUS);
1938 ULONG     WINAPI RtlNumberOfSetBits(PCRTL_BITMAP);
1939 ULONG     WINAPI RtlNumberOfClearBits(PCRTL_BITMAP);
1940
1941 UINT      WINAPI RtlOemStringToUnicodeSize(const STRING*);
1942 NTSTATUS  WINAPI RtlOemStringToUnicodeString(UNICODE_STRING*,const STRING*,BOOLEAN);
1943 NTSTATUS  WINAPI RtlOemToUnicodeN(LPWSTR,DWORD,LPDWORD,LPCSTR,DWORD);
1944 DWORD     WINAPI RtlOpenCurrentUser(ACCESS_MASK,PHKEY);
1945
1946 NTSTATUS  WINAPI RtlPinAtomInAtomTable(RTL_ATOM_TABLE,RTL_ATOM);
1947 BOOLEAN   WINAPI RtlPrefixString(const STRING*,const STRING*,BOOLEAN);
1948 BOOLEAN   WINAPI RtlPrefixUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
1949
1950 NTSTATUS  WINAPI RtlQueryAtomInAtomTable(RTL_ATOM_TABLE,RTL_ATOM,ULONG*,ULONG*,WCHAR*,ULONG*);
1951 NTSTATUS  WINAPI RtlQueryEnvironmentVariable_U(PWSTR,PUNICODE_STRING,PUNICODE_STRING);
1952 NTSTATUS  WINAPI RtlQueryInformationAcl(PACL,LPVOID,DWORD,ACL_INFORMATION_CLASS);
1953 NTSTATUS  WINAPI RtlQueryProcessDebugInformation(ULONG,ULONG,PDEBUG_BUFFER);
1954 NTSTATUS  WINAPI RtlQueryRegistryValues(ULONG, PCWSTR, PRTL_QUERY_REGISTRY_TABLE, PVOID, PVOID);
1955 NTSTATUS  WINAPI RtlQueryTimeZoneInformation(LPTIME_ZONE_INFORMATION);
1956 void      WINAPI RtlRaiseException(PEXCEPTION_RECORD);
1957 void      WINAPI RtlRaiseStatus(NTSTATUS);
1958 ULONG     WINAPI RtlRandom(PULONG);
1959 PVOID     WINAPI RtlReAllocateHeap(HANDLE,ULONG,PVOID,ULONG);
1960 void      WINAPI RtlReleasePebLock(void);
1961 void      WINAPI RtlReleaseResource(LPRTL_RWLOCK);
1962 ULONG     WINAPI RtlRemoveVectoredExceptionHandler(PVOID);
1963 void      WINAPI RtlRestoreLastWin32Error(DWORD);
1964
1965 void      WINAPI RtlSecondsSince1970ToTime(DWORD,LARGE_INTEGER *);
1966 void      WINAPI RtlSecondsSince1980ToTime(DWORD,LARGE_INTEGER *);
1967 NTSTATUS  WINAPI RtlSelfRelativeToAbsoluteSD(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,
1968                                              PDWORD,PACL,PDWORD,PACL,PDWORD,PSID,PDWORD,PSID,PDWORD);
1969 void      WINAPI RtlSetAllBits(PRTL_BITMAP);
1970 void      WINAPI RtlSetBits(PRTL_BITMAP,ULONG,ULONG);
1971 ULONG     WINAPI RtlSetCriticalSectionSpinCount(RTL_CRITICAL_SECTION*,ULONG);
1972 NTSTATUS  WINAPI RtlSetCurrentDirectory_U(const UNICODE_STRING*);
1973 void      WINAPI RtlSetCurrentEnvironment(PWSTR, PWSTR*);
1974 NTSTATUS  WINAPI RtlSetDaclSecurityDescriptor(PSECURITY_DESCRIPTOR,BOOLEAN,PACL,BOOLEAN);
1975 NTSTATUS  WINAPI RtlSetEnvironmentVariable(PWSTR*,PUNICODE_STRING,PUNICODE_STRING);
1976 NTSTATUS  WINAPI RtlSetOwnerSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID,BOOLEAN);
1977 NTSTATUS  WINAPI RtlSetGroupSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID,BOOLEAN);
1978 void      WINAPI RtlSetLastWin32Error(DWORD);
1979 void      WINAPI RtlSetLastWin32ErrorAndNtStatusFromNtStatus(NTSTATUS);
1980 NTSTATUS  WINAPI RtlSetSaclSecurityDescriptor(PSECURITY_DESCRIPTOR,BOOLEAN,PACL,BOOLEAN);
1981 NTSTATUS  WINAPI RtlSetTimeZoneInformation(const TIME_ZONE_INFORMATION*);
1982 ULONG     WINAPI RtlSizeHeap(HANDLE,ULONG,PVOID);
1983 LPDWORD   WINAPI RtlSubAuthoritySid(PSID,DWORD);
1984 LPBYTE    WINAPI RtlSubAuthorityCountSid(PSID);
1985 NTSTATUS  WINAPI RtlSystemTimeToLocalTime(const LARGE_INTEGER*,PLARGE_INTEGER);
1986
1987 void      WINAPI RtlTimeToTimeFields(const LARGE_INTEGER*,PTIME_FIELDS);
1988 BOOLEAN   WINAPI RtlTimeFieldsToTime(PTIME_FIELDS,PLARGE_INTEGER);
1989 void      WINAPI RtlTimeToElapsedTimeFields(const LARGE_INTEGER *,PTIME_FIELDS);
1990 BOOLEAN   WINAPI RtlTimeToSecondsSince1970(const LARGE_INTEGER *,LPDWORD);
1991 BOOLEAN   WINAPI RtlTimeToSecondsSince1980(const LARGE_INTEGER *,LPDWORD);
1992 BOOL      WINAPI RtlTryEnterCriticalSection(RTL_CRITICAL_SECTION *);
1993
1994 ULONGLONG __cdecl RtlUlonglongByteSwap(ULONGLONG);
1995 DWORD     WINAPI RtlUnicodeStringToAnsiSize(const UNICODE_STRING*);
1996 NTSTATUS  WINAPI RtlUnicodeStringToAnsiString(PANSI_STRING,PCUNICODE_STRING,BOOLEAN);
1997 NTSTATUS  WINAPI RtlUnicodeStringToInteger(const UNICODE_STRING *,ULONG,ULONG *);
1998 DWORD     WINAPI RtlUnicodeStringToOemSize(const UNICODE_STRING*);
1999 NTSTATUS  WINAPI RtlUnicodeStringToOemString(POEM_STRING,PCUNICODE_STRING,BOOLEAN);
2000 NTSTATUS  WINAPI RtlUnicodeToMultiByteN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
2001 NTSTATUS  WINAPI RtlUnicodeToMultiByteSize(PULONG,PCWSTR,ULONG);
2002 NTSTATUS  WINAPI RtlUnicodeToOemN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
2003 ULONG     WINAPI RtlUniform(PULONG);
2004 BOOLEAN   WINAPI RtlUnlockHeap(HANDLE);
2005 void      WINAPI RtlUnwind(PVOID,PVOID,PEXCEPTION_RECORD,PVOID);
2006 #ifdef __ia64__
2007 void      WINAPI RtlUnwind2(FRAME_POINTERS,PVOID,PEXCEPTION_RECORD,PVOID,PCONTEXT);
2008 void      WINAPI RtlUnwindEx(FRAME_POINTERS,PVOID,PEXCEPTION_RECORD,PVOID,PCONTEXT,PUNWIND_HISTORY_TABLE);
2009 #endif
2010 WCHAR     WINAPI RtlUpcaseUnicodeChar(WCHAR);
2011 NTSTATUS  WINAPI RtlUpcaseUnicodeString(UNICODE_STRING*,const UNICODE_STRING *,BOOLEAN);
2012 NTSTATUS  WINAPI RtlUpcaseUnicodeStringToAnsiString(STRING*,const UNICODE_STRING*,BOOLEAN);
2013 NTSTATUS  WINAPI RtlUpcaseUnicodeStringToCountedOemString(STRING*,const UNICODE_STRING*,BOOLEAN);
2014 NTSTATUS  WINAPI RtlUpcaseUnicodeStringToOemString(STRING*,const UNICODE_STRING*,BOOLEAN);
2015 NTSTATUS  WINAPI RtlUpcaseUnicodeToMultiByteN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
2016 NTSTATUS  WINAPI RtlUpcaseUnicodeToOemN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
2017 CHAR      WINAPI RtlUpperChar(CHAR);
2018 void      WINAPI RtlUpperString(STRING *,const STRING *);
2019
2020 NTSTATUS  WINAPI RtlValidSecurityDescriptor(PSECURITY_DESCRIPTOR);
2021 BOOLEAN   WINAPI RtlValidAcl(PACL);
2022 BOOLEAN   WINAPI RtlValidSid(PSID);
2023 BOOLEAN   WINAPI RtlValidateHeap(HANDLE,ULONG,LPCVOID);
2024 NTSTATUS  WINAPI RtlVerifyVersionInfo(const RTL_OSVERSIONINFOEXW*,DWORD,DWORDLONG);
2025
2026 NTSTATUS  WINAPI RtlWalkHeap(HANDLE,PVOID);
2027
2028 NTSTATUS  WINAPI RtlpWaitForCriticalSection(RTL_CRITICAL_SECTION *);
2029 NTSTATUS  WINAPI RtlpUnWaitCriticalSection(RTL_CRITICAL_SECTION *);
2030
2031 /* Wine internal functions */
2032
2033 extern NTSTATUS wine_nt_to_unix_file_name( const UNICODE_STRING *nameW, ANSI_STRING *unix_name_ret,
2034                                            UINT disposition, BOOLEAN check_case );
2035
2036 /***********************************************************************
2037  * Inline functions
2038  */
2039
2040 #define InitializeObjectAttributes(p,n,a,r,s) \
2041     do { \
2042         (p)->Length = sizeof(OBJECT_ATTRIBUTES); \
2043         (p)->RootDirectory = r; \
2044         (p)->Attributes = a; \
2045         (p)->ObjectName = n; \
2046         (p)->SecurityDescriptor = s; \
2047         (p)->SecurityQualityOfService = NULL; \
2048     } while (0)
2049
2050 #define NtCurrentProcess() ((HANDLE)-1)
2051
2052 #define RtlFillMemory(Destination,Length,Fill) memset((Destination),(Fill),(Length))
2053 #define RtlMoveMemory(Destination,Source,Length) memmove((Destination),(Source),(Length))
2054 #define RtlStoreUlong(p,v)  do { ULONG _v = (v); memcpy((p), &_v, sizeof(_v)); } while (0)
2055 #define RtlStoreUlonglong(p,v) do { ULONGLONG _v = (v); memcpy((p), &_v, sizeof(_v)); } while (0)
2056 #define RtlRetrieveUlong(p,s) memcpy((p), (s), sizeof(ULONG))
2057 #define RtlRetrieveUlonglong(p,s) memcpy((p), (s), sizeof(ULONGLONG))
2058 #define RtlZeroMemory(Destination,Length) memset((Destination),0,(Length))
2059
2060 inline static BOOLEAN RtlCheckBit(PCRTL_BITMAP lpBits, ULONG ulBit)
2061 {
2062     if (lpBits && ulBit < lpBits->SizeOfBitMap &&
2063         lpBits->Buffer[ulBit >> 5] & (1 << (ulBit & 31)))
2064         return TRUE;
2065     return FALSE;
2066 }
2067
2068 /* These are implemented as __fastcall, so we can't let Winelib apps link with them */
2069 inline static USHORT RtlUshortByteSwap(USHORT s)
2070 {
2071     return (s >> 8) | (s << 8);
2072 }
2073 inline static ULONG RtlUlongByteSwap(ULONG i)
2074 {
2075 #if defined(__i386__) && defined(__GNUC__)
2076     ULONG ret;
2077     __asm__("bswap %0" : "=r" (ret) : "0" (i) );
2078     return ret;
2079 #else
2080     return ((ULONG)RtlUshortByteSwap((USHORT)i) << 16) | RtlUshortByteSwap((USHORT)(i >> 16));
2081 #endif
2082 }
2083
2084 /*************************************************************************
2085  * Loader functions and structures.
2086  *
2087  * Those are not part of standard Winternl.h
2088  */
2089 typedef struct _LDR_MODULE
2090 {
2091     LIST_ENTRY          InLoadOrderModuleList;
2092     LIST_ENTRY          InMemoryOrderModuleList;
2093     LIST_ENTRY          InInitializationOrderModuleList;
2094     void*               BaseAddress;
2095     void*               EntryPoint;
2096     ULONG               SizeOfImage;
2097     UNICODE_STRING      FullDllName;
2098     UNICODE_STRING      BaseDllName;
2099     ULONG               Flags;
2100     SHORT               LoadCount;
2101     SHORT               TlsIndex;
2102     HANDLE              SectionHandle;
2103     ULONG               CheckSum;
2104     ULONG               TimeDateStamp;
2105 } LDR_MODULE, *PLDR_MODULE;
2106
2107 /* those defines are (some of the) regular LDR_MODULE.Flags values */
2108 #define LDR_IMAGE_IS_DLL                0x00000004
2109 #define LDR_LOAD_IN_PROGRESS            0x00001000
2110 #define LDR_UNLOAD_IN_PROGRESS          0x00002000
2111 #define LDR_NO_DLL_CALLS                0x00040000
2112 #define LDR_PROCESS_ATTACHED            0x00080000
2113 #define LDR_MODULE_REBASED              0x00200000
2114
2115 /* these ones is Wine specific */
2116 #define LDR_DONT_RESOLVE_REFS           0x40000000
2117 #define LDR_WINE_INTERNAL               0x80000000
2118
2119 /* FIXME: to be checked */
2120 #define MAXIMUM_FILENAME_LENGTH 256
2121
2122 typedef struct _SYSTEM_MODULE
2123 {
2124     ULONG               Reserved1;
2125     ULONG               Reserved2;
2126     PVOID               ImageBaseAddress;
2127     ULONG               ImageSize;
2128     ULONG               Flags;
2129     WORD                Id;
2130     WORD                Rank;
2131     WORD                Unknown;
2132     WORD                NameOffset;
2133     BYTE                Name[MAXIMUM_FILENAME_LENGTH];
2134 } SYSTEM_MODULE, *PSYSTEM_MODULE;
2135
2136 typedef struct _SYSTEM_MODULE_INFORMATION
2137 {
2138     ULONG               ModulesCount;
2139     SYSTEM_MODULE       Modules[1]; /* FIXME: should be Modules[0] */
2140 } SYSTEM_MODULE_INFORMATION, *PSYSTEM_MODULE_INFORMATION;
2141
2142 NTSTATUS WINAPI LdrDisableThreadCalloutsForDll(HMODULE);
2143 NTSTATUS WINAPI LdrFindEntryForAddress(const void*, PLDR_MODULE*);
2144 NTSTATUS WINAPI LdrLockLoaderLock(ULONG,ULONG*,ULONG*);
2145 NTSTATUS WINAPI LdrQueryProcessModuleInformation(SYSTEM_MODULE_INFORMATION*, ULONG, ULONG*);
2146 NTSTATUS WINAPI LdrUnloadDll(HMODULE);
2147 NTSTATUS WINAPI LdrUnlockLoaderLock(ULONG,ULONG);
2148
2149 /* list manipulation macros */
2150 #define InitializeListHead(le)  (void)((le)->Flink = (le)->Blink = (le))
2151 #define InsertHeadList(le,e)    do { PLIST_ENTRY f = (le)->Flink; (e)->Flink = f; (e)->Blink = (le); f->Blink = (e); (le)->Flink = (e); } while (0)
2152 #define InsertTailList(le,e)    do { PLIST_ENTRY b = (le)->Blink; (e)->Flink = (le); (e)->Blink = b; b->Flink = (e); (le)->Blink = (e); } while (0)
2153 #define IsListEmpty(le)         ((le)->Flink == (le))
2154 #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)
2155 static inline PLIST_ENTRY RemoveHeadList(PLIST_ENTRY le)
2156 {
2157     PLIST_ENTRY f, b, e;
2158
2159     e = le->Flink;
2160     f = le->Flink->Flink;
2161     b = le->Flink->Blink;
2162     f->Blink = b;
2163     b->Flink = f;
2164
2165     if (e != le) e->Flink = e->Blink = NULL;
2166     return e;
2167 }
2168 static inline PLIST_ENTRY RemoveTailList(PLIST_ENTRY le)
2169 {
2170     PLIST_ENTRY f, b, e;
2171
2172     e = le->Blink;
2173     f = le->Blink->Flink;
2174     b = le->Blink->Blink;
2175     f->Blink = b;
2176     b->Flink = f;
2177
2178     if (e != le) e->Flink = e->Blink = NULL;
2179     return e;
2180 }
2181
2182 #ifdef __cplusplus
2183 } /* extern "C" */
2184 #endif /* defined(__cplusplus) */
2185
2186 #endif  /* __WINE_WINTERNL_H */