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