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