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