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