Sunc with trunk revision 58971.
[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_LOCAL_INFORMATION {
599 ULONG NamedPipeType;
600 ULONG NamedPipeConfiguration;
601 ULONG MaximumInstances;
602 ULONG CurrentInstances;
603 ULONG InboundQuota;
604 ULONG ReadDataAvailable;
605 ULONG OutboundQuota;
606 ULONG WriteQuotaAvailable;
607 ULONG NamedPipeState;
608 ULONG NamedPipeEnd;
609 } FILE_PIPE_LOCAL_INFORMATION, *PFILE_PIPE_LOCAL_INFORMATION;
610
611 typedef struct _FILE_ALL_INFORMATION {
612 FILE_BASIC_INFORMATION BasicInformation;
613 FILE_STANDARD_INFORMATION StandardInformation;
614 FILE_INTERNAL_INFORMATION InternalInformation;
615 FILE_EA_INFORMATION EaInformation;
616 FILE_ACCESS_INFORMATION AccessInformation;
617 FILE_POSITION_INFORMATION PositionInformation;
618 FILE_MODE_INFORMATION ModeInformation;
619 FILE_ALIGNMENT_INFORMATION AlignmentInformation;
620 FILE_NAME_INFORMATION NameInformation;
621 } FILE_ALL_INFORMATION, *PFILE_ALL_INFORMATION;
622
623 typedef enum _FSINFOCLASS {
624 FileFsVolumeInformation = 1,
625 FileFsLabelInformation,
626 FileFsSizeInformation,
627 FileFsDeviceInformation,
628 FileFsAttributeInformation,
629 FileFsControlInformation,
630 FileFsFullSizeInformation,
631 FileFsObjectIdInformation,
632 FileFsMaximumInformation
633 } FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS;
634
635 typedef enum _KEY_INFORMATION_CLASS {
636 KeyBasicInformation = 0,
637 KeyNodeInformation = 1,
638 KeyFullInformation = 2,
639 KeyNameInformation = 3,
640 KeyCachedInformation = 4,
641 KeyFlagsInformation = 5,
642 KeyVirtualizationInformation = 6,
643 KeyHandleTagsInformation = 7,
644 MaxKeyInfoClass = 8
645 } KEY_INFORMATION_CLASS;
646
647 typedef enum _KEY_VALUE_INFORMATION_CLASS {
648 KeyValueBasicInformation,
649 KeyValueFullInformation,
650 KeyValuePartialInformation,
651 KeyValueFullInformationAlign64,
652 KeyValuePartialInformationAlign64
653 } KEY_VALUE_INFORMATION_CLASS;
654
655 typedef enum _OBJECT_INFORMATION_CLASS {
656 ObjectBasicInformation,
657 ObjectNameInformation,
658 ObjectTypeInformation,
659 ObjectAllInformation,
660 ObjectDataInformation
661 } OBJECT_INFORMATION_CLASS, *POBJECT_INFORMATION_CLASS;
662
663 typedef enum _PROCESSINFOCLASS {
664 ProcessBasicInformation = 0,
665 ProcessQuotaLimits = 1,
666 ProcessIoCounters = 2,
667 ProcessVmCounters = 3,
668 ProcessTimes = 4,
669 ProcessBasePriority = 5,
670 ProcessRaisePriority = 6,
671 ProcessDebugPort = 7,
672 ProcessExceptionPort = 8,
673 ProcessAccessToken = 9,
674 ProcessLdtInformation = 10,
675 ProcessLdtSize = 11,
676 ProcessDefaultHardErrorMode = 12,
677 ProcessIoPortHandlers = 13,
678 ProcessPooledUsageAndLimits = 14,
679 ProcessWorkingSetWatch = 15,
680 ProcessUserModeIOPL = 16,
681 ProcessEnableAlignmentFaultFixup = 17,
682 ProcessPriorityClass = 18,
683 ProcessWx86Information = 19,
684 ProcessHandleCount = 20,
685 ProcessAffinityMask = 21,
686 ProcessPriorityBoost = 22,
687 ProcessDeviceMap = 23,
688 ProcessSessionInformation = 24,
689 ProcessForegroundInformation = 25,
690 ProcessWow64Information = 26,
691 ProcessImageFileName = 27,
692 ProcessLUIDDeviceMapsEnabled = 28,
693 ProcessBreakOnTermination = 29,
694 ProcessDebugObjectHandle = 30,
695 ProcessDebugFlags = 31,
696 ProcessHandleTracing = 32,
697 ProcessExecuteFlags = 34,
698 MaxProcessInfoClass
699 } PROCESSINFOCLASS, PROCESS_INFORMATION_CLASS;
700
701 #define MEM_EXECUTE_OPTION_DISABLE 0x01
702 #define MEM_EXECUTE_OPTION_ENABLE 0x02
703 #define MEM_EXECUTE_OPTION_PERMANENT 0x08
704
705 typedef enum _SECTION_INHERIT {
706 ViewShare = 1,
707 ViewUnmap = 2
708 } SECTION_INHERIT;
709
710 typedef enum _SYSTEM_INFORMATION_CLASS {
711 SystemBasicInformation = 0,
712 SystemCpuInformation = 1,
713 SystemPerformanceInformation = 2,
714 SystemTimeOfDayInformation = 3, /* was SystemTimeInformation */
715 Unknown4,
716 SystemProcessInformation = 5,
717 Unknown6,
718 Unknown7,
719 SystemProcessorPerformanceInformation = 8,
720 Unknown9,
721 Unknown10,
722 SystemModuleInformation = 11,
723 Unknown12,
724 Unknown13,
725 Unknown14,
726 Unknown15,
727 SystemHandleInformation = 16,
728 Unknown17,
729 SystemPageFileInformation = 18,
730 Unknown19,
731 Unknown20,
732 SystemCacheInformation = 21,
733 Unknown22,
734 SystemInterruptInformation = 23,
735 SystemDpcBehaviourInformation = 24,
736 SystemFullMemoryInformation = 25,
737 SystemNotImplemented6 = 25,
738 SystemLoadImage = 26,
739 SystemUnloadImage = 27,
740 SystemTimeAdjustmentInformation = 28,
741 SystemTimeAdjustment = 28,
742 SystemSummaryMemoryInformation = 29,
743 SystemNotImplemented7 = 29,
744 SystemNextEventIdInformation = 30,
745 SystemNotImplemented8 = 30,
746 SystemEventIdsInformation = 31,
747 SystemCrashDumpInformation = 32,
748 SystemExceptionInformation = 33,
749 SystemCrashDumpStateInformation = 34,
750 SystemKernelDebuggerInformation = 35,
751 SystemContextSwitchInformation = 36,
752 SystemRegistryQuotaInformation = 37,
753 SystemCurrentTimeZoneInformation = 44,
754 SystemTimeZoneInformation = 44,
755 SystemLookasideInformation = 45,
756 SystemSetTimeSlipEvent = 46,
757 SystemCreateSession = 47,
758 SystemDeleteSession = 48,
759 SystemInvalidInfoClass4 = 49,
760 SystemRangeStartInformation = 50,
761 SystemVerifierInformation = 51,
762 SystemAddVerifier = 52,
763 SystemSessionProcessesInformation = 53,
764 Unknown54,
765 Unknown55,
766 Unknown56,
767 Unknown57,
768 Unknown58,
769 Unknown59,
770 Unknown60,
771 Unknown61,
772 Unknown62,
773 Unknown63,
774 Unknown64,
775 Unknown65,
776 Unknown66,
777 Unknown67,
778 Unknown68,
779 Unknown69,
780 Unknown70,
781 Unknown71,
782 Unknown72,
783 SystemLogicalProcessorInformation = 73,
784 SystemInformationClassMax
785 } SYSTEM_INFORMATION_CLASS, *PSYSTEM_INFORMATION_CLASS;
786
787 typedef enum _TIMER_TYPE {
788 NotificationTimer,
789 SynchronizationTimer
790 } TIMER_TYPE;
791
792 typedef enum _THREADINFOCLASS {
793 ThreadBasicInformation,
794 ThreadTimes,
795 ThreadPriority,
796 ThreadBasePriority,
797 ThreadAffinityMask,
798 ThreadImpersonationToken,
799 ThreadDescriptorTableEntry,
800 ThreadEnableAlignmentFaultFixup,
801 ThreadEventPair_Reusable,
802 ThreadQuerySetWin32StartAddress,
803 ThreadZeroTlsCell,
804 ThreadPerformanceCount,
805 ThreadAmILastThread,
806 ThreadIdealProcessor,
807 ThreadPriorityBoost,
808 ThreadSetTlsArrayAddress,
809 ThreadIsIoPending,
810 MaxThreadInfoClass
811 } THREADINFOCLASS;
812
813 typedef struct _THREAD_BASIC_INFORMATION
814 {
815 NTSTATUS ExitStatus;
816 PVOID TebBaseAddress;
817 CLIENT_ID ClientId;
818 ULONG_PTR AffinityMask;
819 LONG Priority;
820 LONG BasePriority;
821 } THREAD_BASIC_INFORMATION, *PTHREAD_BASIC_INFORMATION;
822
823 typedef struct _KERNEL_USER_TIMES {
824 LARGE_INTEGER CreateTime;
825 LARGE_INTEGER ExitTime;
826 LARGE_INTEGER KernelTime;
827 LARGE_INTEGER UserTime;
828 } KERNEL_USER_TIMES, *PKERNEL_USER_TIMES;
829
830 typedef enum _WINSTATIONINFOCLASS {
831 WinStationInformation = 8
832 } WINSTATIONINFOCLASS;
833
834 typedef enum _MEMORY_INFORMATION_CLASS {
835 MemoryBasicInformation,
836 MemoryWorkingSetList,
837 MemorySectionName,
838 MemoryBasicVlmInformation
839 } MEMORY_INFORMATION_CLASS;
840
841 typedef enum _MUTANT_INFORMATION_CLASS
842 {
843 MutantBasicInformation
844 } MUTANT_INFORMATION_CLASS, *PMUTANT_INFORMATION_CLASS;
845
846 typedef struct _MUTANT_BASIC_INFORMATION {
847 LONG CurrentCount;
848 BOOLEAN OwnedByCaller;
849 BOOLEAN AbandonedState;
850 } MUTANT_BASIC_INFORMATION, *PMUTANT_BASIC_INFORMATION;
851
852 typedef enum _TIMER_INFORMATION_CLASS
853 {
854 TimerBasicInformation = 0
855 } TIMER_INFORMATION_CLASS;
856
857 typedef struct _TIMER_BASIC_INFORMATION
858 {
859 LARGE_INTEGER RemainingTime;
860 BOOLEAN TimerState;
861 } TIMER_BASIC_INFORMATION, *PTIMER_BASIC_INFORMATION;
862
863
864 /* return type of RtlDetermineDosPathNameType_U (FIXME: not the correct names) */
865 typedef enum
866 {
867 INVALID_PATH = 0,
868 UNC_PATH, /* "//foo" */
869 ABSOLUTE_DRIVE_PATH, /* "c:/foo" */
870 RELATIVE_DRIVE_PATH, /* "c:foo" */
871 ABSOLUTE_PATH, /* "/foo" */
872 RELATIVE_PATH, /* "foo" */
873 DEVICE_PATH, /* "//./foo" */
874 UNC_DOT_PATH /* "//." */
875 } DOS_PATHNAME_TYPE;
876
877 /***********************************************************************
878 * IA64 specific types and data structures
879 */
880
881 #ifdef __ia64__
882
883 typedef struct _FRAME_POINTERS {
884 ULONGLONG MemoryStackFp;
885 ULONGLONG BackingStoreFp;
886 } FRAME_POINTERS, *PFRAME_POINTERS;
887
888 #define UNWIND_HISTORY_TABLE_SIZE 12
889
890 typedef struct _RUNTIME_FUNCTION {
891 ULONG BeginAddress;
892 ULONG EndAddress;
893 ULONG UnwindInfoAddress;
894 } RUNTIME_FUNCTION, *PRUNTIME_FUNCTION;
895
896 typedef struct _UNWIND_HISTORY_TABLE_ENTRY {
897 ULONG64 ImageBase;
898 ULONG64 Gp;
899 PRUNTIME_FUNCTION FunctionEntry;
900 } UNWIND_HISTORY_TABLE_ENTRY, *PUNWIND_HISTORY_TABLE_ENTRY;
901
902 typedef struct _UNWIND_HISTORY_TABLE {
903 ULONG Count;
904 UCHAR Search;
905 ULONG64 LowAddress;
906 ULONG64 HighAddress;
907 UNWIND_HISTORY_TABLE_ENTRY Entry[UNWIND_HISTORY_TABLE_SIZE];
908 } UNWIND_HISTORY_TABLE, *PUNWIND_HISTORY_TABLE;
909
910 #endif /* defined(__ia64__) */
911
912 /***********************************************************************
913 * Types and data structures
914 */
915
916 /* This is used by NtQuerySystemInformation */
917 typedef struct _SYSTEM_THREAD_INFORMATION
918 { /* win32/win64 */
919 LARGE_INTEGER KernelTime; /* 00/00 */
920 LARGE_INTEGER UserTime; /* 08/08 */
921 LARGE_INTEGER CreateTime; /* 10/10 */
922 DWORD dwTickCount; /* 18/18 */
923 LPVOID StartAddress; /* 1c/20 */
924 CLIENT_ID ClientId; /* 20/28 */
925 DWORD dwCurrentPriority; /* 28/38 */
926 DWORD dwBasePriority; /* 2c/3c */
927 DWORD dwContextSwitches; /* 30/40 */
928 DWORD dwThreadState; /* 34/44 */
929 DWORD dwWaitReason; /* 38/48 */
930 DWORD dwUnknown; /* 3c/4c */
931 } SYSTEM_THREAD_INFORMATION, *PSYSTEM_THREAD_INFORMATION;
932
933 typedef struct _IO_STATUS_BLOCK {
934 union {
935 NTSTATUS Status;
936 PVOID Pointer;
937 } DUMMYUNIONNAME;
938
939 ULONG_PTR Information;
940 } IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
941
942 typedef void (WINAPI * PIO_APC_ROUTINE)(PVOID,PIO_STATUS_BLOCK,ULONG);
943
944 typedef struct _KEY_BASIC_INFORMATION {
945 LARGE_INTEGER LastWriteTime;
946 ULONG TitleIndex;
947 ULONG NameLength;
948 WCHAR Name[1];
949 } KEY_BASIC_INFORMATION, *PKEY_BASIC_INFORMATION;
950
951 typedef struct _KEY_NODE_INFORMATION
952 {
953 LARGE_INTEGER LastWriteTime;
954 ULONG TitleIndex;
955 ULONG ClassOffset;
956 ULONG ClassLength;
957 ULONG NameLength;
958 WCHAR Name[1];
959 /* Class[1]; */
960 } KEY_NODE_INFORMATION, *PKEY_NODE_INFORMATION;
961
962 typedef struct _KEY_FULL_INFORMATION
963 {
964 LARGE_INTEGER LastWriteTime;
965 ULONG TitleIndex;
966 ULONG ClassOffset;
967 ULONG ClassLength;
968 ULONG SubKeys;
969 ULONG MaxNameLen;
970 ULONG MaxClassLen;
971 ULONG Values;
972 ULONG MaxValueNameLen;
973 ULONG MaxValueDataLen;
974 WCHAR Class[1];
975 } KEY_FULL_INFORMATION, *PKEY_FULL_INFORMATION;
976
977 typedef struct _KEY_VALUE_ENTRY
978 {
979 PUNICODE_STRING ValueName;
980 ULONG DataLength;
981 ULONG DataOffset;
982 ULONG Type;
983 } KEY_VALUE_ENTRY, *PKEY_VALUE_ENTRY;
984
985 typedef struct _KEY_VALUE_BASIC_INFORMATION {
986 ULONG TitleIndex;
987 ULONG Type;
988 ULONG NameLength;
989 WCHAR Name[1];
990 } KEY_VALUE_BASIC_INFORMATION, *PKEY_VALUE_BASIC_INFORMATION;
991
992 typedef struct _KEY_VALUE_FULL_INFORMATION {
993 ULONG TitleIndex;
994 ULONG Type;
995 ULONG DataOffset;
996 ULONG DataLength;
997 ULONG NameLength;
998 WCHAR Name[1];
999 } KEY_VALUE_FULL_INFORMATION, *PKEY_VALUE_FULL_INFORMATION;
1000
1001 typedef struct _KEY_VALUE_PARTIAL_INFORMATION {
1002 ULONG TitleIndex;
1003 ULONG Type;
1004 ULONG DataLength;
1005 UCHAR Data[1];
1006 } KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION;
1007
1008 typedef struct _OBJECT_ATTRIBUTES {
1009 ULONG Length;
1010 HANDLE RootDirectory;
1011 PUNICODE_STRING ObjectName;
1012 ULONG Attributes;
1013 PVOID SecurityDescriptor; /* type SECURITY_DESCRIPTOR */
1014 PVOID SecurityQualityOfService; /* type SECURITY_QUALITY_OF_SERVICE */
1015 } OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;
1016
1017 typedef struct _OBJECT_DATA_INFORMATION {
1018 BOOLEAN InheritHandle;
1019 BOOLEAN ProtectFromClose;
1020 } OBJECT_DATA_INFORMATION, *POBJECT_DATA_INFORMATION;
1021
1022 typedef struct _OBJECT_BASIC_INFORMATION {
1023 ULONG Attributes;
1024 ACCESS_MASK GrantedAccess;
1025 ULONG HandleCount;
1026 ULONG PointerCount;
1027 ULONG PagedPoolUsage;
1028 ULONG NonPagedPoolUsage;
1029 ULONG Reserved[3];
1030 ULONG NameInformationLength;
1031 ULONG TypeInformationLength;
1032 ULONG SecurityDescriptorLength;
1033 LARGE_INTEGER CreateTime;
1034 } OBJECT_BASIC_INFORMATION, *POBJECT_BASIC_INFORMATION;
1035
1036 typedef struct _OBJECT_NAME_INFORMATION {
1037 UNICODE_STRING Name;
1038 } OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION;
1039
1040 typedef struct __OBJECT_TYPE_INFORMATION {
1041 UNICODE_STRING TypeName;
1042 ULONG Reserved [22];
1043 } OBJECT_TYPE_INFORMATION, *POBJECT_TYPE_INFORMATION;
1044
1045 typedef struct _PROCESS_BASIC_INFORMATION {
1046 #ifdef __WINESRC__
1047 DWORD_PTR ExitStatus;
1048 PPEB PebBaseAddress;
1049 DWORD_PTR AffinityMask;
1050 DWORD_PTR BasePriority;
1051 ULONG_PTR UniqueProcessId;
1052 ULONG_PTR InheritedFromUniqueProcessId;
1053 #else
1054 PVOID Reserved1;
1055 PPEB PebBaseAddress;
1056 PVOID Reserved2[2];
1057 ULONG_PTR UniqueProcessId;
1058 PVOID Reserved3;
1059 #endif
1060 } PROCESS_BASIC_INFORMATION, *PPROCESS_BASIC_INFORMATION;
1061
1062 typedef struct _RTL_HEAP_DEFINITION {
1063 ULONG Length; /* = sizeof(RTL_HEAP_DEFINITION) */
1064
1065 ULONG Unknown[11];
1066 } RTL_HEAP_DEFINITION, *PRTL_HEAP_DEFINITION;
1067
1068 typedef struct _RTL_RWLOCK {
1069 RTL_CRITICAL_SECTION rtlCS;
1070
1071 HANDLE hSharedReleaseSemaphore;
1072 UINT uSharedWaiters;
1073
1074 HANDLE hExclusiveReleaseSemaphore;
1075 UINT uExclusiveWaiters;
1076
1077 INT iNumberActive;
1078 HANDLE hOwningThreadId;
1079 DWORD dwTimeoutBoost;
1080 PVOID pDebugInfo;
1081 } RTL_RWLOCK, *LPRTL_RWLOCK;
1082
1083 /* System Information Class 0x00 */
1084
1085 typedef struct _SYSTEM_BASIC_INFORMATION {
1086 #ifdef __WINESRC__
1087 DWORD dwUnknown1;
1088 ULONG uKeMaximumIncrement;
1089 ULONG uPageSize;
1090 ULONG uMmNumberOfPhysicalPages;
1091 ULONG uMmLowestPhysicalPage;
1092 ULONG uMmHighestPhysicalPage;
1093 ULONG uAllocationGranularity;
1094 PVOID pLowestUserAddress;
1095 PVOID pMmHighestUserAddress;
1096 ULONG uKeActiveProcessors;
1097 BYTE bKeNumberProcessors;
1098 BYTE bUnknown2;
1099 WORD wUnknown3;
1100 #else
1101 BYTE Reserved1[24];
1102 PVOID Reserved2[4];
1103 CCHAR NumberOfProcessors;
1104 #endif
1105 } SYSTEM_BASIC_INFORMATION, *PSYSTEM_BASIC_INFORMATION;
1106
1107 /* System Information Class 0x01 */
1108
1109 typedef struct _SYSTEM_CPU_INFORMATION {
1110 WORD Architecture;
1111 WORD Level;
1112 WORD Revision; /* combination of CPU model and stepping */
1113 WORD Reserved; /* always zero */
1114 DWORD FeatureSet; /* see bit flags below */
1115 } SYSTEM_CPU_INFORMATION, *PSYSTEM_CPU_INFORMATION;
1116
1117 /* definitions of bits in the Feature set for the x86 processors */
1118 #define CPU_FEATURE_VME 0x00000005 /* Virtual 86 Mode Extensions */
1119 #define CPU_FEATURE_TSC 0x00000002 /* Time Stamp Counter available */
1120 #define CPU_FEATURE_CMOV 0x00000008 /* Conditional Move instruction*/
1121 #define CPU_FEATURE_PGE 0x00000014 /* Page table Entry Global bit */
1122 #define CPU_FEATURE_PSE 0x00000024 /* Page Size Extension */
1123 #define CPU_FEATURE_MTRR 0x00000040 /* Memory Type Range Registers */
1124 #define CPU_FEATURE_CX8 0x00000080 /* Compare and eXchange 8 byte instr. */
1125 #define CPU_FEATURE_MMX 0x00000100 /* Multi Media eXtensions */
1126 #define CPU_FEATURE_X86 0x00000200 /* seems to be alway ON, on the '86 */
1127 #define CPU_FEATURE_PAT 0x00000400 /* Page Attribute Table */
1128 #define CPU_FEATURE_FXSR 0x00000800 /* FXSAVE and FXSTORE instructions */
1129 #define CPU_FEATURE_SEP 0x00001000 /* SYSENTER and SYSEXIT instructions */
1130 #define CPU_FEATURE_SSE 0x00002000 /* SSE extenstions (ext. MMX) */
1131 #define CPU_FEATURE_3DNOW 0x00008000 /* 3DNOW instructions available
1132 (FIXME: needs to be confirmed) */
1133 #define CPU_FEATURE_SSE2 0x00010000 /* SSE2 extensions (XMMI64) */
1134 #define CPU_FEATURE_DS 0x00020000 /* Debug Store */
1135 #define CPU_FEATURE_HTT 0x00040000 /* Hyper Threading Technology */
1136
1137 /* System Information Class 0x02 */
1138
1139 typedef struct _SYSTEM_PERFORMANCE_INFORMATION {
1140 BYTE Reserved1[312];
1141 } SYSTEM_PERFORMANCE_INFORMATION, *PSYSTEM_PERFORMANCE_INFORMATION;
1142
1143 /* System Information Class 0x03 */
1144
1145 typedef struct _SYSTEM_TIMEOFDAY_INFORMATION {
1146 #ifdef __WINESRC__
1147 LARGE_INTEGER liKeBootTime;
1148 LARGE_INTEGER liKeSystemTime;
1149 LARGE_INTEGER liExpTimeZoneBias;
1150 ULONG uCurrentTimeZoneId;
1151 DWORD dwUnknown1[5];
1152 #else
1153 BYTE Reserved1[48];
1154 #endif
1155 } SYSTEM_TIMEOFDAY_INFORMATION, *PSYSTEM_TIMEOFDAY_INFORMATION; /* was SYSTEM_TIME_INFORMATION */
1156
1157 /* System Information Class 0x08 */
1158
1159 typedef struct _SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION {
1160 #ifdef __WINESRC__
1161 LARGE_INTEGER liIdleTime;
1162 LARGE_INTEGER liKernelTime;
1163 LARGE_INTEGER liUserTime;
1164 DWORD dwSpare[5];
1165 #else
1166 LARGE_INTEGER IdleTime;
1167 LARGE_INTEGER KernelTime;
1168 LARGE_INTEGER UserTime;
1169 LARGE_INTEGER Reserved1[2];
1170 ULONG Reserved2;
1171 #endif
1172 } SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION, *PSYSTEM_PROCESSOR_PERFORMANCE_INFORMATION;
1173
1174 /* System Information Class 0x0b */
1175
1176 typedef struct _SYSTEM_DRIVER_INFORMATION {
1177 PVOID pvAddress;
1178 DWORD dwUnknown1;
1179 DWORD dwUnknown2;
1180 DWORD dwEntryIndex;
1181 DWORD dwUnknown3;
1182 char szName[MAX_PATH + 1];
1183 } SYSTEM_DRIVER_INFORMATION, *PSYSTEM_DRIVER_INFORMATION;
1184
1185 /* System Information Class 0x10 */
1186
1187 typedef struct _SYSTEM_HANDLE_ENTRY {
1188 ULONG OwnerPid;
1189 BYTE ObjectType;
1190 BYTE HandleFlags;
1191 USHORT HandleValue;
1192 PVOID ObjectPointer;
1193 ULONG AccessMask;
1194 } SYSTEM_HANDLE_ENTRY, *PSYSTEM_HANDLE_ENTRY;
1195
1196 typedef struct _SYSTEM_HANDLE_INFORMATION {
1197 ULONG Count;
1198 SYSTEM_HANDLE_ENTRY Handle[1];
1199 } SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION;
1200
1201 /* System Information Class 0x15 */
1202
1203 typedef struct _SYSTEM_CACHE_INFORMATION {
1204 ULONG CurrentSize;
1205 ULONG PeakSize;
1206 ULONG PageFaultCount;
1207 ULONG MinimumWorkingSet;
1208 ULONG MaximumWorkingSet;
1209 ULONG unused[4];
1210 } SYSTEM_CACHE_INFORMATION, *PSYSTEM_CACHE_INFORMATION;
1211
1212 /* System Information Class 0x17 */
1213
1214 typedef struct _SYSTEM_INTERRUPT_INFORMATION {
1215 BYTE Reserved1[24];
1216 } SYSTEM_INTERRUPT_INFORMATION, *PSYSTEM_INTERRUPT_INFORMATION;
1217
1218 typedef struct _SYSTEM_CONFIGURATION_INFO {
1219 union {
1220 ULONG OemId;
1221 struct {
1222 WORD ProcessorArchitecture;
1223 WORD Reserved;
1224 } tag1;
1225 } tag2;
1226 ULONG PageSize;
1227 PVOID MinimumApplicationAddress;
1228 PVOID MaximumApplicationAddress;
1229 ULONG ActiveProcessorMask;
1230 ULONG NumberOfProcessors;
1231 ULONG ProcessorType;
1232 ULONG AllocationGranularity;
1233 WORD ProcessorLevel;
1234 WORD ProcessorRevision;
1235 } SYSTEM_CONFIGURATION_INFO, *PSYSTEM_CONFIGURATION_INFO;
1236
1237 typedef struct _SYSTEM_EXCEPTION_INFORMATION {
1238 BYTE Reserved1[16];
1239 } SYSTEM_EXCEPTION_INFORMATION, *PSYSTEM_EXCEPTION_INFORMATION;
1240
1241 typedef struct _SYSTEM_LOOKASIDE_INFORMATION {
1242 BYTE Reserved1[32];
1243 } SYSTEM_LOOKASIDE_INFORMATION, *PSYSTEM_LOOKASIDE_INFORMATION;
1244
1245 typedef struct _SYSTEM_KERNEL_DEBUGGER_INFORMATION {
1246 BOOLEAN DebuggerEnabled;
1247 BOOLEAN DebuggerNotPresent;
1248 } SYSTEM_KERNEL_DEBUGGER_INFORMATION, *PSYSTEM_KERNEL_DEBUGGER_INFORMATION;
1249
1250 /* System Information Class 0x05 */
1251
1252 typedef struct _VM_COUNTERS_ {
1253 SIZE_T PeakVirtualSize;
1254 SIZE_T VirtualSize;
1255 ULONG PageFaultCount;
1256 SIZE_T PeakWorkingSetSize;
1257 SIZE_T WorkingSetSize;
1258 SIZE_T QuotaPeakPagedPoolUsage;
1259 SIZE_T QuotaPagedPoolUsage;
1260 SIZE_T QuotaPeakNonPagedPoolUsage;
1261 SIZE_T QuotaNonPagedPoolUsage;
1262 SIZE_T PagefileUsage;
1263 SIZE_T PeakPagefileUsage;
1264 SIZE_T PrivatePageCount;
1265 } VM_COUNTERS, *PVM_COUNTERS;
1266
1267 typedef struct _SYSTEM_PROCESS_INFORMATION {
1268 #ifdef __WINESRC__ /* win32/win64 */
1269 ULONG NextEntryOffset; /* 00/00 */
1270 DWORD dwThreadCount; /* 04/04 */
1271 DWORD dwUnknown1[6]; /* 08/08 */
1272 LARGE_INTEGER CreationTime; /* 20/20 */
1273 LARGE_INTEGER UserTime; /* 28/28 */
1274 LARGE_INTEGER KernelTime; /* 30/30 */
1275 UNICODE_STRING ProcessName; /* 38/38 */
1276 DWORD dwBasePriority; /* 40/48 */
1277 HANDLE UniqueProcessId; /* 44/50 */
1278 HANDLE ParentProcessId; /* 48/58 */
1279 ULONG HandleCount; /* 4c/60 */
1280 DWORD dwUnknown3; /* 50/64 */
1281 DWORD dwUnknown4; /* 54/68 */
1282 VM_COUNTERS vmCounters; /* 58/70 */
1283 IO_COUNTERS ioCounters; /* 88/d0 */
1284 SYSTEM_THREAD_INFORMATION ti[1]; /* b8/100 */
1285 #else
1286 ULONG NextEntryOffset; /* 00/00 */
1287 BYTE Reserved1[52]; /* 04/04 */
1288 PVOID Reserved2[3]; /* 38/38 */
1289 HANDLE UniqueProcessId; /* 44/50 */
1290 PVOID Reserved3; /* 48/58 */
1291 ULONG HandleCount; /* 4c/60 */
1292 BYTE Reserved4[4]; /* 50/64 */
1293 PVOID Reserved5[11]; /* 54/68 */
1294 SIZE_T PeakPagefileUsage; /* 80/c0 */
1295 SIZE_T PrivatePageCount; /* 84/c8 */
1296 LARGE_INTEGER Reserved6[6]; /* 88/d0 */
1297 #endif
1298 } SYSTEM_PROCESS_INFORMATION, *PSYSTEM_PROCESS_INFORMATION;
1299
1300 typedef struct _SYSTEM_REGISTRY_QUOTA_INFORMATION {
1301 ULONG RegistryQuotaAllowed;
1302 ULONG RegistryQuotaUsed;
1303 PVOID Reserved1;
1304 } SYSTEM_REGISTRY_QUOTA_INFORMATION, *PSYSTEM_REGISTRY_QUOTA_INFORMATION;
1305
1306 typedef struct _SYSTEM_TIME_ADJUSTMENT {
1307 ULONG TimeAdjustment;
1308 BOOLEAN TimeAdjustmentDisabled;
1309 } SYSTEM_TIME_ADJUSTMENT, *PSYSTEM_TIME_ADJUSTMENT;
1310
1311 typedef struct _TIME_FIELDS
1312 { CSHORT Year;
1313 CSHORT Month;
1314 CSHORT Day;
1315 CSHORT Hour;
1316 CSHORT Minute;
1317 CSHORT Second;
1318 CSHORT Milliseconds;
1319 CSHORT Weekday;
1320 } TIME_FIELDS, *PTIME_FIELDS;
1321
1322 typedef struct _WINSTATIONINFORMATIONW {
1323 BYTE Reserved2[70];
1324 ULONG LogonId;
1325 BYTE Reserved3[1140];
1326 } WINSTATIONINFORMATIONW, *PWINSTATIONINFORMATIONW;
1327
1328 typedef BOOLEAN (WINAPI * PWINSTATIONQUERYINFORMATIONW)(HANDLE,ULONG,WINSTATIONINFOCLASS,PVOID,ULONG,PULONG);
1329
1330 typedef struct _LDR_RESOURCE_INFO
1331 {
1332 ULONG Type;
1333 ULONG Name;
1334 ULONG Language;
1335 } LDR_RESOURCE_INFO, *PLDR_RESOURCE_INFO;
1336
1337
1338 /* debug buffer definitions */
1339
1340 typedef struct _DEBUG_BUFFER {
1341 HANDLE SectionHandle;
1342 PVOID SectionBase;
1343 PVOID RemoteSectionBase;
1344 ULONG SectionBaseDelta;
1345 HANDLE EventPairHandle;
1346 ULONG Unknown[2];
1347 HANDLE RemoteThreadHandle;
1348 ULONG InfoClassMask;
1349 ULONG SizeOfInfo;
1350 ULONG AllocatedSize;
1351 ULONG SectionSize;
1352 PVOID ModuleInformation;
1353 PVOID BackTraceInformation;
1354 PVOID HeapInformation;
1355 PVOID LockInformation;
1356 PVOID Reserved[8];
1357 } DEBUG_BUFFER, *PDEBUG_BUFFER;
1358
1359 #define PDI_MODULES 0x01
1360 #define PDI_BACKTRACE 0x02
1361 #define PDI_HEAPS 0x04
1362 #define PDI_HEAP_TAGS 0x08
1363 #define PDI_HEAP_BLOCKS 0x10
1364 #define PDI_LOCKS 0x20
1365
1366 typedef struct _DEBUG_MODULE_INFORMATION {
1367 ULONG Reserved[2];
1368 ULONG Base;
1369 ULONG Size;
1370 ULONG Flags;
1371 USHORT Index;
1372 USHORT Unknown;
1373 USHORT LoadCount;
1374 USHORT ModuleNameOffset;
1375 CHAR ImageName[256];
1376 } DEBUG_MODULE_INFORMATION, *PDEBUG_MODULE_INFORMATION;
1377
1378 typedef struct _DEBUG_HEAP_INFORMATION {
1379 ULONG Base;
1380 ULONG Flags;
1381 USHORT Granularity;
1382 USHORT Unknown;
1383 ULONG Allocated;
1384 ULONG Committed;
1385 ULONG TagCount;
1386 ULONG BlockCount;
1387 ULONG Reserved[7];
1388 PVOID Tags;
1389 PVOID Blocks;
1390 } DEBUG_HEAP_INFORMATION, *PDEBUG_HEAP_INFORMATION;
1391
1392 typedef struct _DEBUG_LOCK_INFORMATION {
1393 PVOID Address;
1394 USHORT Type;
1395 USHORT CreatorBackTraceIndex;
1396 ULONG OwnerThreadId;
1397 ULONG ActiveCount;
1398 ULONG ContentionCount;
1399 ULONG EntryCount;
1400 ULONG RecursionCount;
1401 ULONG NumberOfSharedWaiters;
1402 ULONG NumberOfExclusiveWaiters;
1403 } DEBUG_LOCK_INFORMATION, *PDEBUG_LOCK_INFORMATION;
1404
1405 typedef struct _PORT_MESSAGE_HEADER {
1406 USHORT DataSize;
1407 USHORT MessageSize;
1408 USHORT MessageType;
1409 USHORT VirtualRangesOffset;
1410 CLIENT_ID ClientId;
1411 ULONG MessageId;
1412 ULONG SectionSize;
1413 } PORT_MESSAGE_HEADER, *PPORT_MESSAGE_HEADER, PORT_MESSAGE, *PPORT_MESSAGE;
1414
1415 typedef unsigned short RTL_ATOM, *PRTL_ATOM;
1416
1417 /* Wine doesn't implement atom table as NT does:
1418 * - in NT, atom tables are user space tables, which ntdll directly accesses
1419 * - on Wine, (even local) atom tables are wineserver object, hence a HANDLE
1420 */
1421 typedef struct atom_table *RTL_ATOM_TABLE, **PRTL_ATOM_TABLE;
1422
1423 typedef enum _ATOM_INFORMATION_CLASS {
1424 AtomBasicInformation = 0,
1425 AtomTableInformation = 1,
1426 } ATOM_INFORMATION_CLASS;
1427
1428 typedef struct _ATOM_BASIC_INFORMATION {
1429 USHORT ReferenceCount;
1430 USHORT Pinned;
1431 USHORT NameLength;
1432 WCHAR Name[1];
1433 } ATOM_BASIC_INFORMATION, *PATOM_BASIC_INFORMATION;
1434
1435 /* FIXME: names probably not correct */
1436 typedef struct _RTL_HANDLE
1437 {
1438 struct _RTL_HANDLE * Next;
1439 } RTL_HANDLE;
1440
1441 /* FIXME: names probably not correct */
1442 typedef struct _RTL_HANDLE_TABLE
1443 {
1444 ULONG MaxHandleCount; /* 0x00 */
1445 ULONG HandleSize; /* 0x04 */
1446 ULONG Unused[2]; /* 0x08-0x0c */
1447 PVOID NextFree; /* 0x10 */
1448 PVOID FirstHandle; /* 0x14 */
1449 PVOID ReservedMemory; /* 0x18 */
1450 PVOID MaxHandle; /* 0x1c */
1451 } RTL_HANDLE_TABLE;
1452
1453 /***********************************************************************
1454 * Defines
1455 */
1456
1457 /* flags for NtCreateFile and NtOpenFile */
1458 #define FILE_DIRECTORY_FILE 0x00000001
1459 #define FILE_WRITE_THROUGH 0x00000002
1460 #define FILE_SEQUENTIAL_ONLY 0x00000004
1461 #define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008
1462 #define FILE_SYNCHRONOUS_IO_ALERT 0x00000010
1463 #define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020
1464 #define FILE_NON_DIRECTORY_FILE 0x00000040
1465 #define FILE_CREATE_TREE_CONNECTION 0x00000080
1466 #define FILE_COMPLETE_IF_OPLOCKED 0x00000100
1467 #define FILE_NO_EA_KNOWLEDGE 0x00000200
1468 #define FILE_OPEN_REMOTE_INSTANCE 0x00000400
1469 #define FILE_RANDOM_ACCESS 0x00000800
1470 #define FILE_DELETE_ON_CLOSE 0x00001000
1471 #define FILE_OPEN_BY_FILE_ID 0x00002000
1472 #define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000
1473 #define FILE_NO_COMPRESSION 0x00008000
1474 #define FILE_RESERVE_OPFILTER 0x00100000
1475 #define FILE_TRANSACTED_MODE 0x00200000
1476 #define FILE_OPEN_OFFLINE_FILE 0x00400000
1477 #define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000
1478
1479 #define FILE_ATTRIBUTE_VALID_FLAGS 0x00007fb7
1480 #define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x000031a7
1481
1482 /* status for NtCreateFile or NtOpenFile */
1483 #define FILE_SUPERSEDED 0
1484 #define FILE_OPENED 1
1485 #define FILE_CREATED 2
1486 #define FILE_OVERWRITTEN 3
1487 #define FILE_EXISTS 4
1488 #define FILE_DOES_NOT_EXIST 5
1489
1490 /* disposition for NtCreateFile */
1491 #define FILE_SUPERSEDE 0
1492 #define FILE_OPEN 1
1493 #define FILE_CREATE 2
1494 #define FILE_OPEN_IF 3
1495 #define FILE_OVERWRITE 4
1496 #define FILE_OVERWRITE_IF 5
1497 #define FILE_MAXIMUM_DISPOSITION 5
1498
1499 /* Characteristics of a File System */
1500 #define FILE_REMOVABLE_MEDIA 0x00000001
1501 #define FILE_READ_ONLY_DEVICE 0x00000002
1502 #define FILE_FLOPPY_DISKETTE 0x00000004
1503 #define FILE_WRITE_ONE_MEDIA 0x00000008
1504 #define FILE_REMOTE_DEVICE 0x00000010
1505 #define FILE_DEVICE_IS_MOUNTED 0x00000020
1506 #define FILE_VIRTUAL_VOLUME 0x00000040
1507 #define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080
1508 #define FILE_DEVICE_SECURE_OPEN 0x00000100
1509
1510 /* options for NtCreateNamedPipeFile */
1511 #define FILE_PIPE_INBOUND 0x00000000
1512 #define FILE_PIPE_OUTBOUND 0x00000001
1513 #define FILE_PIPE_FULL_DUPLEX 0x00000002
1514
1515 #if (_WIN32_WINNT >= 0x0501)
1516 #define INTERNAL_TS_ACTIVE_CONSOLE_ID ( *((volatile ULONG*)(0x7ffe02d8)) )
1517 #endif /* (_WIN32_WINNT >= 0x0501) */
1518
1519 #define LOGONID_CURRENT ((ULONG)-1)
1520
1521 #define OBJ_INHERIT 0x00000002L
1522 #define OBJ_PERMANENT 0x00000010L
1523 #define OBJ_EXCLUSIVE 0x00000020L
1524 #define OBJ_CASE_INSENSITIVE 0x00000040L
1525 #define OBJ_OPENIF 0x00000080L
1526 #define OBJ_OPENLINK 0x00000100L
1527 #define OBJ_KERNEL_HANDLE 0x00000200L
1528 #define OBJ_VALID_ATTRIBUTES 0x000003F2L
1529
1530 #define SERVERNAME_CURRENT ((HANDLE)NULL)
1531
1532 typedef void (CALLBACK *PNTAPCFUNC)(ULONG_PTR,ULONG_PTR,ULONG_PTR); /* FIXME: not the right name */
1533 typedef void (CALLBACK *PRTL_THREAD_START_ROUTINE)(LPVOID); /* FIXME: not the right name */
1534
1535
1536 /* DbgPrintEx default levels */
1537 #define DPFLTR_ERROR_LEVEL 0
1538 #define DPFLTR_WARNING_LEVEL 1
1539 #define DPFLTR_TRACE_LEVEL 2
1540 #define DPFLTR_INFO_LEVEL 3
1541 #define DPFLTR_MASK 0x8000000
1542
1543 /* Well-known LUID values */
1544 #define SE_MIN_WELL_KNOWN_PRIVILEGE 2L
1545 #define SE_CREATE_TOKEN_PRIVILEGE 2L
1546 #define SE_ASSIGNPRIMARYTOKEN_PRIVILEGE 3L
1547 #define SE_LOCK_MEMORY_PRIVILEGE 4L
1548 #define SE_INCREASE_QUOTA_PRIVILEGE 5L
1549 #define SE_UNSOLICITED_INPUT_PRIVILEGE 6L /* obsolete */
1550 #define SE_MACHINE_ACCOUNT_PRIVILEGE 6L
1551 #define SE_TCB_PRIVILEGE 7L
1552 #define SE_SECURITY_PRIVILEGE 8L
1553 #define SE_TAKE_OWNERSHIP_PRIVILEGE 9L
1554 #define SE_LOAD_DRIVER_PRIVILEGE 10L
1555 #define SE_SYSTEM_PROFILE_PRIVILEGE 11L
1556 #define SE_SYSTEMTIME_PRIVILEGE 12L
1557 #define SE_PROF_SINGLE_PROCESS_PRIVILEGE 13L
1558 #define SE_INC_BASE_PRIORITY_PRIVILEGE 14L
1559 #define SE_CREATE_PAGEFILE_PRIVILEGE 15L
1560 #define SE_CREATE_PERMANENT_PRIVILEGE 16L
1561 #define SE_BACKUP_PRIVILEGE 17L
1562 #define SE_RESTORE_PRIVILEGE 18L
1563 #define SE_SHUTDOWN_PRIVILEGE 19L
1564 #define SE_DEBUG_PRIVILEGE 20L
1565 #define SE_AUDIT_PRIVILEGE 21L
1566 #define SE_SYSTEM_ENVIRONMENT_PRIVILEGE 22L
1567 #define SE_CHANGE_NOTIFY_PRIVILLEGE 23L
1568 #define SE_REMOTE_SHUTDOWN_PRIVILEGE 24L
1569 #define SE_UNDOCK_PRIVILEGE 25L
1570 #define SE_SYNC_AGENT_PRIVILEGE 26L
1571 #define SE_ENABLE_DELEGATION_PRIVILEGE 27L
1572 #define SE_MANAGE_VOLUME_PRIVILEGE 28L
1573 #define SE_IMPERSONATE_PRIVILEGE 29L
1574 #define SE_CREATE_GLOBAL_PRIVILEGE 30L
1575 #define SE_MAX_WELL_KNOWN_PRIVILEGE SE_CREATE_GLOBAL_PRIVILEGE
1576
1577 /* NtGlobalFlag bits */
1578 #define FLG_STOP_ON_EXCEPTION 0x00000001
1579 #define FLG_SHOW_LDR_SNAPS 0x00000002
1580 #define FLG_DEBUG_INITIAL_COMMAND 0x00000004
1581 #define FLG_STOP_ON_HUNG_GUI 0x00000008
1582 #define FLG_HEAP_ENABLE_TAIL_CHECK 0x00000010
1583 #define FLG_HEAP_ENABLE_FREE_CHECK 0x00000020
1584 #define FLG_HEAP_VALIDATE_PARAMETERS 0x00000040
1585 #define FLG_HEAP_VALIDATE_ALL 0x00000080
1586 #define FLG_APPLICATION_VERIFIER 0x00000100
1587 #define FLG_POOL_ENABLE_TAGGING 0x00000400
1588 #define FLG_HEAP_ENABLE_TAGGING 0x00000800
1589 #define FLG_USER_STACK_TRACE_DB 0x00001000
1590 #define FLG_KERNEL_STACK_TRACE_DB 0x00002000
1591 #define FLG_MAINTAIN_OBJECT_TYPELIST 0x00004000
1592 #define FLG_HEAP_ENABLE_TAG_BY_DLL 0x00008000
1593 #define FLG_DISABLE_STACK_EXTENSION 0x00010000
1594 #define FLG_ENABLE_CSRDEBUG 0x00020000
1595 #define FLG_ENABLE_KDEBUG_SYMBOL_LOAD 0x00040000
1596 #define FLG_DISABLE_PAGE_KERNEL_STACKS 0x00080000
1597 #define FLG_ENABLE_SYSTEM_CRIT_BREAKS 0x00100000
1598 #define FLG_HEAP_DISABLE_COALESCING 0x00200000
1599 #define FLG_ENABLE_CLOSE_EXCEPTIONS 0x00400000
1600 #define FLG_ENABLE_EXCEPTION_LOGGING 0x00800000
1601 #define FLG_ENABLE_HANDLE_TYPE_TAGGING 0x01000000
1602 #define FLG_HEAP_PAGE_ALLOCS 0x02000000
1603 #define FLG_DEBUG_INITIAL_COMMAND_EX 0x04000000
1604 #define FLG_DISABLE_DBGPRINT 0x08000000
1605 #define FLG_CRITSEC_EVENT_CREATION 0x10000000
1606 #define FLG_LDR_TOP_DOWN 0x20000000
1607 #define FLG_ENABLE_HANDLE_EXCEPTIONS 0x40000000
1608 #define FLG_DISABLE_PROTDLLS 0x80000000
1609
1610 /* Rtl*Registry* functions structs and defines */
1611 #define RTL_REGISTRY_ABSOLUTE 0
1612 #define RTL_REGISTRY_SERVICES 1
1613 #define RTL_REGISTRY_CONTROL 2
1614 #define RTL_REGISTRY_WINDOWS_NT 3
1615 #define RTL_REGISTRY_DEVICEMAP 4
1616 #define RTL_REGISTRY_USER 5
1617
1618 #define RTL_REGISTRY_HANDLE 0x40000000
1619 #define RTL_REGISTRY_OPTIONAL 0x80000000
1620
1621 #define RTL_QUERY_REGISTRY_SUBKEY 0x00000001
1622 #define RTL_QUERY_REGISTRY_TOPKEY 0x00000002
1623 #define RTL_QUERY_REGISTRY_REQUIRED 0x00000004
1624 #define RTL_QUERY_REGISTRY_NOVALUE 0x00000008
1625 #define RTL_QUERY_REGISTRY_NOEXPAND 0x00000010
1626 #define RTL_QUERY_REGISTRY_DIRECT 0x00000020
1627 #define RTL_QUERY_REGISTRY_DELETE 0x00000040
1628
1629 typedef NTSTATUS (WINAPI *PRTL_QUERY_REGISTRY_ROUTINE)( PCWSTR ValueName,
1630 ULONG ValueType,
1631 PVOID ValueData,
1632 ULONG ValueLength,
1633 PVOID Context,
1634 PVOID EntryContext);
1635
1636 typedef struct _RTL_QUERY_REGISTRY_TABLE
1637 {
1638 PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine;
1639 ULONG Flags;
1640 PWSTR Name;
1641 PVOID EntryContext;
1642 ULONG DefaultType;
1643 PVOID DefaultData;
1644 ULONG DefaultLength;
1645 } RTL_QUERY_REGISTRY_TABLE, *PRTL_QUERY_REGISTRY_TABLE;
1646
1647 typedef struct _KEY_MULTIPLE_VALUE_INFORMATION
1648 {
1649 PUNICODE_STRING ValueName;
1650 ULONG DataLength;
1651 ULONG DataOffset;
1652 ULONG Type;
1653 } KEY_MULTIPLE_VALUE_INFORMATION, *PKEY_MULTIPLE_VALUE_INFORMATION;
1654
1655 typedef VOID (CALLBACK *PTIMER_APC_ROUTINE) ( PVOID, ULONG, LONG );
1656
1657 typedef enum _EVENT_TYPE {
1658 NotificationEvent,
1659 SynchronizationEvent
1660 } EVENT_TYPE, *PEVENT_TYPE;
1661
1662 typedef enum _EVENT_INFORMATION_CLASS {
1663 EventBasicInformation
1664 } EVENT_INFORMATION_CLASS, *PEVENT_INFORMATION_CLASS;
1665
1666 typedef struct _EVENT_BASIC_INFORMATION {
1667 EVENT_TYPE EventType;
1668 LONG EventState;
1669 } EVENT_BASIC_INFORMATION, *PEVENT_BASIC_INFORMATION;
1670
1671 typedef enum _SEMAPHORE_INFORMATION_CLASS {
1672 SemaphoreBasicInformation
1673 } SEMAPHORE_INFORMATION_CLASS, *PSEMAPHORE_INFORMATION_CLASS;
1674
1675 typedef struct _SEMAPHORE_BASIC_INFORMATION {
1676 ULONG CurrentCount;
1677 ULONG MaximumCount;
1678 } SEMAPHORE_BASIC_INFORMATION, *PSEMAPHORE_BASIC_INFORMATION;
1679
1680 typedef enum _SECTION_INFORMATION_CLASS
1681 {
1682 SectionBasicInformation,
1683 SectionImageInformation,
1684 } SECTION_INFORMATION_CLASS;
1685
1686 typedef struct _SECTION_BASIC_INFORMATION {
1687 ULONG BaseAddress;
1688 ULONG Attributes;
1689 LARGE_INTEGER Size;
1690 } SECTION_BASIC_INFORMATION, *PSECTION_BASIC_INFORMATION;
1691
1692 typedef struct _SECTION_IMAGE_INFORMATION {
1693 PVOID EntryPoint;
1694 ULONG StackZeroBits;
1695 ULONG StackReserved;
1696 ULONG StackCommit;
1697 ULONG ImageSubsystem;
1698 WORD SubsystemVersionLow;
1699 WORD SubsystemVersionHigh;
1700 ULONG Unknown1;
1701 ULONG ImageCharacteristics;
1702 ULONG ImageMachineType;
1703 ULONG Unknown2[3];
1704 } SECTION_IMAGE_INFORMATION, *PSECTION_IMAGE_INFORMATION;
1705
1706 typedef struct _LPC_SECTION_WRITE {
1707 ULONG Length;
1708 HANDLE SectionHandle;
1709 ULONG SectionOffset;
1710 ULONG ViewSize;
1711 PVOID ViewBase;
1712 PVOID TargetViewBase;
1713 } LPC_SECTION_WRITE, *PLPC_SECTION_WRITE;
1714
1715 typedef struct _LPC_SECTION_READ {
1716 ULONG Length;
1717 ULONG ViewSize;
1718 PVOID ViewBase;
1719 } LPC_SECTION_READ, *PLPC_SECTION_READ;
1720
1721 typedef struct _LPC_MESSAGE {
1722 USHORT DataSize;
1723 USHORT MessageSize;
1724 USHORT MessageType;
1725 USHORT VirtualRangesOffset;
1726 CLIENT_ID ClientId;
1727 ULONG MessageId;
1728 ULONG SectionSize;
1729 UCHAR Data[ANYSIZE_ARRAY];
1730 } LPC_MESSAGE, *PLPC_MESSAGE;
1731
1732 typedef enum _SHUTDOWN_ACTION {
1733 ShutdownNoReboot,
1734 ShutdownReboot,
1735 ShutdownPowerOff
1736 } SHUTDOWN_ACTION, *PSHUTDOWN_ACTION;
1737
1738 typedef enum _KPROFILE_SOURCE {
1739 ProfileTime,
1740 ProfileAlignmentFixup,
1741 ProfileTotalIssues,
1742 ProfilePipelineDry,
1743 ProfileLoadInstructions,
1744 ProfilePipelineFrozen,
1745 ProfileBranchInstructions,
1746 ProfileTotalNonissues,
1747 ProfileDcacheMisses,
1748 ProfileIcacheMisses,
1749 ProfileCacheMisses,
1750 ProfileBranchMispredictions,
1751 ProfileStoreInstructions,
1752 ProfileFpInstructions,
1753 ProfileIntegerInstructions,
1754 Profile2Issue,
1755 Profile3Issue,
1756 Profile4Issue,
1757 ProfileSpecialInstructions,
1758 ProfileTotalCycles,
1759 ProfileIcacheIssues,
1760 ProfileDcacheAccesses,
1761 ProfileMemoryBarrierCycles,
1762 ProfileLoadLinkedIssues,
1763 ProfileMaximum
1764 } KPROFILE_SOURCE, *PKPROFILE_SOURCE;
1765
1766 typedef struct _OBJDIR_INFORMATION {
1767 UNICODE_STRING ObjectName;
1768 UNICODE_STRING ObjectTypeName;
1769 BYTE Data[1];
1770 } OBJDIR_INFORMATION, *POBJDIR_INFORMATION;
1771
1772 typedef struct _INITIAL_TEB {
1773 PVOID StackBase;
1774 PVOID StackLimit;
1775 PVOID StackCommit;
1776 PVOID StackCommitMax;
1777 PVOID StackReserved;
1778 } INITIAL_TEB, *PINITIAL_TEB;
1779
1780 typedef enum _PORT_INFORMATION_CLASS {
1781 PortNoInformation
1782 } PORT_INFORMATION_CLASS, *PPORT_INFORMATION_CLASS;
1783
1784 typedef enum _IO_COMPLETION_INFORMATION_CLASS {
1785 IoCompletionBasicInformation
1786 } IO_COMPLETION_INFORMATION_CLASS, *PIO_COMPLETION_INFORMATION_CLASS;
1787
1788 typedef struct _FILE_COMPLETION_INFORMATION {
1789 HANDLE CompletionPort;
1790 ULONG_PTR CompletionKey;
1791 } FILE_COMPLETION_INFORMATION, *PFILE_COMPLETION_INFORMATION;
1792
1793 typedef enum _HARDERROR_RESPONSE_OPTION {
1794 OptionAbortRetryIgnore,
1795 OptionOk,
1796 OptionOkCancel,
1797 OptionRetryCancel,
1798 OptionYesNo,
1799 OptionYesNoCancel,
1800 OptionShutdownSystem
1801 } HARDERROR_RESPONSE_OPTION, *PHARDERROR_RESPONSE_OPTION;
1802
1803 typedef enum _HARDERROR_RESPONSE {
1804 ResponseReturnToCaller,
1805 ResponseNotHandled,
1806 ResponseAbort,
1807 ResponseCancel,
1808 ResponseIgnore,
1809 ResponseNo,
1810 ResponseOk,
1811 ResponseRetry,
1812 ResponseYes
1813 } HARDERROR_RESPONSE, *PHARDERROR_RESPONSE;
1814
1815 typedef enum _SYSDBG_COMMAND {
1816 SysDbgQueryModuleInformation,
1817 SysDbgQueryTraceInformation,
1818 SysDbgSetTracepoint,
1819 SysDbgSetSpecialCall,
1820 SysDbgClearSpecialCalls,
1821 SysDbgQuerySpecialCalls
1822 } SYSDBG_COMMAND, *PSYSDBG_COMMAND;
1823
1824 /***********************************************************************
1825 * Function declarations
1826 */
1827
1828 #if defined(__i386__) && defined(__GNUC__)
1829 static inline void WINAPI DbgBreakPoint(void) { __asm__ __volatile__("int3"); }
1830 static inline void WINAPI DbgUserBreakPoint(void) { __asm__ __volatile__("int3"); }
1831 #else /* __i386__ && __GNUC__ */
1832 void WINAPI DbgBreakPoint(void);
1833 void WINAPI DbgUserBreakPoint(void);
1834 #endif /* __i386__ && __GNUC__ */
1835 //NTSTATUS WINAPIV DbgPrint(LPCSTR fmt, ...);
1836 NTSTATUS WINAPIV DbgPrintEx(ULONG iComponentId, ULONG Level, LPCSTR fmt, ...);
1837
1838 NTSTATUS WINAPI LdrAccessResource(HMODULE,const IMAGE_RESOURCE_DATA_ENTRY*,void**,PULONG);
1839 NTSTATUS WINAPI LdrFindResourceDirectory_U(HMODULE,const LDR_RESOURCE_INFO*,ULONG,const IMAGE_RESOURCE_DIRECTORY**);
1840 NTSTATUS WINAPI LdrFindResource_U(HMODULE,const LDR_RESOURCE_INFO*,ULONG,const IMAGE_RESOURCE_DATA_ENTRY**);
1841 NTSTATUS WINAPI LdrGetDllHandle(ULONG, ULONG, const UNICODE_STRING*, HMODULE*);
1842 NTSTATUS WINAPI LdrGetDllHandleEx(ULONG,PWSTR,PULONG,PUNICODE_STRING,PVOID);
1843 NTSTATUS WINAPI LdrGetProcedureAddress(HMODULE, const ANSI_STRING*, ULONG, void**);
1844 void WINAPI LdrInitializeThunk(HANDLE,ULONG,ULONG,ULONG);
1845 NTSTATUS WINAPI LdrLoadDll(LPCWSTR, DWORD, const UNICODE_STRING*, HMODULE*);
1846 NTSTATUS WINAPI LdrAddRefDll(ULONG, HMODULE);
1847 void WINAPI LdrShutdownProcess(void);
1848 void WINAPI LdrShutdownThread(void);
1849 NTSTATUS WINAPI NtAcceptConnectPort(PHANDLE,ULONG,PLPC_MESSAGE,BOOLEAN,PLPC_SECTION_WRITE,PLPC_SECTION_READ);
1850 NTSTATUS WINAPI NtAccessCheck(PSECURITY_DESCRIPTOR,HANDLE,ACCESS_MASK,PGENERIC_MAPPING,PPRIVILEGE_SET,PULONG,PULONG,NTSTATUS*);
1851 NTSTATUS WINAPI NtAccessCheckAndAuditAlarm(PUNICODE_STRING,HANDLE,PUNICODE_STRING,PUNICODE_STRING,PSECURITY_DESCRIPTOR,ACCESS_MASK,PGENERIC_MAPPING,BOOLEAN,PULONG,PULONG,PBOOLEAN);
1852 NTSTATUS WINAPI NtAddAtom(const WCHAR*,ULONG,RTL_ATOM*);
1853 NTSTATUS WINAPI NtAdjustGroupsToken(HANDLE,BOOLEAN,PTOKEN_GROUPS,ULONG,PTOKEN_GROUPS,PULONG);
1854 NTSTATUS WINAPI NtAdjustPrivilegesToken(HANDLE,BOOLEAN,PTOKEN_PRIVILEGES,DWORD,PTOKEN_PRIVILEGES,PDWORD);
1855 NTSTATUS WINAPI NtAlertResumeThread(HANDLE,PULONG);
1856 NTSTATUS WINAPI NtAlertThread(HANDLE ThreadHandle);
1857 NTSTATUS WINAPI NtAllocateLocallyUniqueId(PLUID lpLuid);
1858 NTSTATUS WINAPI NtAllocateUuids(PULARGE_INTEGER,PULONG,PULONG);
1859 NTSTATUS WINAPI NtAllocateVirtualMemory(HANDLE,PVOID*,ULONG,SIZE_T*,ULONG,ULONG);
1860 NTSTATUS WINAPI NtCallbackReturn(PVOID,ULONG,NTSTATUS);
1861 NTSTATUS WINAPI NtCancelIoFile(HANDLE,PIO_STATUS_BLOCK);
1862 NTSTATUS WINAPI NtCancelTimer(HANDLE, BOOLEAN*);
1863 NTSTATUS WINAPI NtClearEvent(HANDLE);
1864 NTSTATUS WINAPI NtClose(HANDLE);
1865 NTSTATUS WINAPI NtCloseObjectAuditAlarm(PUNICODE_STRING,HANDLE,BOOLEAN);
1866 NTSTATUS WINAPI NtCompleteConnectPort(HANDLE);
1867 NTSTATUS WINAPI NtConnectPort(PHANDLE,PUNICODE_STRING,PSECURITY_QUALITY_OF_SERVICE,PLPC_SECTION_WRITE,PLPC_SECTION_READ,PULONG,PVOID,PULONG);
1868 NTSTATUS WINAPI NtContinue(PCONTEXT,BOOLEAN);
1869 NTSTATUS WINAPI NtCreateDirectoryObject(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES);
1870 NTSTATUS WINAPI NtCreateEvent(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES *,BOOLEAN,BOOLEAN);
1871 NTSTATUS WINAPI NtCreateEventPair(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES);
1872 NTSTATUS WINAPI NtCreateFile(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,PLARGE_INTEGER,ULONG,ULONG,ULONG,ULONG,PVOID,ULONG);
1873 NTSTATUS WINAPI NtCreateIoCompletion(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,ULONG);
1874 NTSTATUS WINAPI NtCreateKey(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*,ULONG,const UNICODE_STRING*,ULONG,PULONG);
1875 NTSTATUS WINAPI NtCreateMailslotFile(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,ULONG,ULONG,ULONG,PLARGE_INTEGER);
1876 NTSTATUS WINAPI NtCreateMutant(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,BOOLEAN);
1877 NTSTATUS WINAPI NtCreateNamedPipeFile(PHANDLE,ULONG,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,ULONG,ULONG,ULONG,ULONG,ULONG,ULONG,ULONG,ULONG,ULONG,PLARGE_INTEGER);
1878 NTSTATUS WINAPI NtCreatePagingFile(PUNICODE_STRING,PLARGE_INTEGER,PLARGE_INTEGER,PLARGE_INTEGER);
1879 NTSTATUS WINAPI NtCreatePort(PHANDLE,POBJECT_ATTRIBUTES,ULONG,ULONG,PULONG);
1880 NTSTATUS WINAPI NtCreateProcess(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,HANDLE,BOOLEAN,HANDLE,HANDLE,HANDLE);
1881 //NTSTATUS WINAPI NtCreateProfile(PHANDLE,HANDLE,PVOID,ULONG,ULONG,PVOID,ULONG,KPROFILE_SOURCE,KAFFINITY);
1882 NTSTATUS WINAPI NtCreateSection(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,const LARGE_INTEGER*,ULONG,ULONG,HANDLE);
1883 NTSTATUS WINAPI NtCreateSemaphore(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*,LONG,LONG);
1884 NTSTATUS WINAPI NtCreateSymbolicLinkObject(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PUNICODE_STRING);
1885 NTSTATUS WINAPI NtCreateThread(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,HANDLE,PCLIENT_ID,PCONTEXT,PINITIAL_TEB,BOOLEAN);
1886 NTSTATUS WINAPI NtCreateTimer(HANDLE*, ACCESS_MASK, const OBJECT_ATTRIBUTES*, TIMER_TYPE);
1887 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);
1888 NTSTATUS WINAPI NtDelayExecution(BOOLEAN,const LARGE_INTEGER*);
1889 NTSTATUS WINAPI NtDeleteAtom(RTL_ATOM);
1890 NTSTATUS WINAPI NtDeleteFile(POBJECT_ATTRIBUTES);
1891 NTSTATUS WINAPI NtDeleteKey(HANDLE);
1892 NTSTATUS WINAPI NtDeleteValueKey(HANDLE,const UNICODE_STRING *);
1893 NTSTATUS WINAPI NtDeviceIoControlFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,PVOID,ULONG,PVOID,ULONG);
1894 NTSTATUS WINAPI NtDisplayString(PUNICODE_STRING);
1895 NTSTATUS WINAPI NtDuplicateObject(HANDLE,HANDLE,HANDLE,PHANDLE,ACCESS_MASK,ULONG,ULONG);
1896 NTSTATUS WINAPI NtDuplicateToken(HANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,SECURITY_IMPERSONATION_LEVEL,TOKEN_TYPE,PHANDLE);
1897 NTSTATUS WINAPI NtEnumerateKey(HANDLE,ULONG,KEY_INFORMATION_CLASS,void *,DWORD,DWORD *);
1898 NTSTATUS WINAPI NtEnumerateValueKey(HANDLE,ULONG,KEY_VALUE_INFORMATION_CLASS,PVOID,ULONG,PULONG);
1899 NTSTATUS WINAPI NtExtendSection(HANDLE,PLARGE_INTEGER);
1900 NTSTATUS WINAPI NtFindAtom(const WCHAR*,ULONG,RTL_ATOM*);
1901 NTSTATUS WINAPI NtFlushBuffersFile(HANDLE,IO_STATUS_BLOCK*);
1902 NTSTATUS WINAPI NtFlushInstructionCache(HANDLE,LPCVOID,SIZE_T);
1903 NTSTATUS WINAPI NtFlushKey(HANDLE);
1904 NTSTATUS WINAPI NtFlushVirtualMemory(HANDLE,LPCVOID*,SIZE_T*,PIO_STATUS_BLOCK);
1905 NTSTATUS WINAPI NtFlushWriteBuffer(VOID);
1906 NTSTATUS WINAPI NtFreeVirtualMemory(HANDLE,PVOID*,SIZE_T*,ULONG);
1907 NTSTATUS WINAPI NtFsControlFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,PVOID,ULONG,PVOID,ULONG);
1908 NTSTATUS WINAPI NtGetContextThread(HANDLE,CONTEXT*);
1909 NTSTATUS WINAPI NtGetPlugPlayEvent(ULONG,ULONG,PVOID,ULONG);
1910 ULONG WINAPI NtGetTickCount(VOID);
1911 NTSTATUS WINAPI NtImpersonateAnonymousToken(HANDLE);
1912 NTSTATUS WINAPI NtImpersonateClientOfPort(HANDLE,PPORT_MESSAGE);
1913 NTSTATUS WINAPI NtImpersonateThread(HANDLE,HANDLE,PSECURITY_QUALITY_OF_SERVICE);
1914 NTSTATUS WINAPI NtInitializeRegistry(BOOLEAN);
1915 NTSTATUS WINAPI NtInitiatePowerAction(POWER_ACTION,SYSTEM_POWER_STATE,ULONG,BOOLEAN);
1916 NTSTATUS WINAPI NtListenPort(HANDLE,PLPC_MESSAGE);
1917 NTSTATUS WINAPI NtLoadDriver(const UNICODE_STRING *);
1918 NTSTATUS WINAPI NtLoadKey(const OBJECT_ATTRIBUTES *,OBJECT_ATTRIBUTES *);
1919 NTSTATUS WINAPI NtLockFile(HANDLE,HANDLE,PIO_APC_ROUTINE,void*,PIO_STATUS_BLOCK,PLARGE_INTEGER,PLARGE_INTEGER,ULONG*,BOOLEAN,BOOLEAN);
1920 NTSTATUS WINAPI NtLockVirtualMemory(HANDLE,PVOID*,SIZE_T*,ULONG);
1921 NTSTATUS WINAPI NtMakeTemporaryObject(HANDLE);
1922 NTSTATUS WINAPI NtMapViewOfSection(HANDLE,HANDLE,PVOID*,ULONG,SIZE_T,const LARGE_INTEGER*,SIZE_T*,SECTION_INHERIT,ULONG,ULONG);
1923 NTSTATUS WINAPI NtNotifyChangeDirectoryFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,PVOID,ULONG,ULONG,BOOLEAN);
1924 NTSTATUS WINAPI NtNotifyChangeKey(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,BOOLEAN,PVOID,ULONG,BOOLEAN);
1925 NTSTATUS WINAPI NtOpenDirectoryObject(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES);
1926 NTSTATUS WINAPI NtOpenEvent(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES *);
1927 NTSTATUS WINAPI NtOpenEventPair(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES);
1928 NTSTATUS WINAPI NtOpenFile(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,ULONG,ULONG);
1929 NTSTATUS WINAPI NtOpenIoCompletion(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES);
1930 NTSTATUS WINAPI NtOpenKey(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES *);
1931 NTSTATUS WINAPI NtOpenMutant(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*);
1932 NTSTATUS WINAPI NtOpenObjectAuditAlarm(PUNICODE_STRING,PHANDLE,PUNICODE_STRING,PUNICODE_STRING,PSECURITY_DESCRIPTOR,HANDLE,ACCESS_MASK,ACCESS_MASK,PPRIVILEGE_SET,BOOLEAN,BOOLEAN,PBOOLEAN);
1933 NTSTATUS WINAPI NtOpenProcess(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*,const CLIENT_ID*);
1934 NTSTATUS WINAPI NtOpenProcessToken(HANDLE,DWORD,HANDLE *);
1935 NTSTATUS WINAPI NtOpenSection(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*);
1936 NTSTATUS WINAPI NtOpenSemaphore(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*);
1937 NTSTATUS WINAPI NtOpenSymbolicLinkObject(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES);
1938 NTSTATUS WINAPI NtOpenThread(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,const CLIENT_ID*);
1939 NTSTATUS WINAPI NtOpenThreadToken(HANDLE,DWORD,BOOLEAN,HANDLE *);
1940 NTSTATUS WINAPI NtOpenTimer(HANDLE*, ACCESS_MASK, const OBJECT_ATTRIBUTES*);
1941 NTSTATUS WINAPI NtPowerInformation(POWER_INFORMATION_LEVEL,PVOID,ULONG,PVOID,ULONG);
1942 NTSTATUS WINAPI NtPrivilegeCheck(HANDLE,PPRIVILEGE_SET,PBOOLEAN);
1943 NTSTATUS WINAPI NtPrivilegeObjectAuditAlarm(PUNICODE_STRING,HANDLE,HANDLE,ULONG,PPRIVILEGE_SET,BOOLEAN);
1944 NTSTATUS WINAPI NtPrivilegedServiceAuditAlarm(PUNICODE_STRING,PUNICODE_STRING,HANDLE,PPRIVILEGE_SET,BOOLEAN);
1945 NTSTATUS WINAPI NtProtectVirtualMemory(HANDLE,PVOID*,SIZE_T*,ULONG,ULONG*);
1946 NTSTATUS WINAPI NtPulseEvent(HANDLE,PULONG);
1947 NTSTATUS WINAPI NtQueueApcThread(HANDLE,PNTAPCFUNC,ULONG_PTR,ULONG_PTR,ULONG_PTR);
1948 NTSTATUS WINAPI NtQueryAttributesFile(const OBJECT_ATTRIBUTES*,FILE_BASIC_INFORMATION*);
1949 NTSTATUS WINAPI NtQueryDefaultLocale(BOOLEAN,LCID*);
1950 NTSTATUS WINAPI NtQueryDefaultUILanguage(LANGID*);
1951 NTSTATUS WINAPI NtQueryDirectoryFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,PVOID,ULONG,FILE_INFORMATION_CLASS,BOOLEAN,PUNICODE_STRING,BOOLEAN);
1952 NTSTATUS WINAPI NtQueryDirectoryObject(HANDLE,POBJDIR_INFORMATION,ULONG,BOOLEAN,BOOLEAN,PULONG,PULONG);
1953 NTSTATUS WINAPI NtQueryEaFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,BOOLEAN,PVOID,ULONG,PVOID,BOOLEAN);
1954 NTSTATUS WINAPI NtQueryEvent(HANDLE,EVENT_INFORMATION_CLASS,PVOID,ULONG,PULONG);
1955 NTSTATUS WINAPI NtQueryFullAttributesFile(const OBJECT_ATTRIBUTES*,FILE_NETWORK_OPEN_INFORMATION*);
1956 NTSTATUS WINAPI NtQueryInformationAtom(RTL_ATOM,ATOM_INFORMATION_CLASS,RTL_ATOM_TABLE,ULONG,ULONG*);
1957 NTSTATUS WINAPI NtQueryInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,LONG,FILE_INFORMATION_CLASS);
1958 NTSTATUS WINAPI NtQueryInformationPort(HANDLE,PORT_INFORMATION_CLASS,PVOID,ULONG,PULONG);
1959 NTSTATUS WINAPI NtQueryInformationProcess(HANDLE,PROCESSINFOCLASS,PVOID,ULONG,PULONG);
1960 NTSTATUS WINAPI NtQueryInformationThread(HANDLE,THREADINFOCLASS,PVOID,ULONG,PULONG);
1961 NTSTATUS WINAPI NtQueryInformationToken(HANDLE,DWORD,LPVOID,DWORD,LPDWORD);
1962 NTSTATUS WINAPI NtQueryInstallUILanguage(LANGID*);
1963 NTSTATUS WINAPI NtQueryIntervalProfile(KPROFILE_SOURCE,PULONG);
1964 NTSTATUS WINAPI NtQueryIoCompletion(HANDLE,IO_COMPLETION_INFORMATION_CLASS,PVOID,ULONG,PULONG);
1965 NTSTATUS WINAPI NtQueryKey(HANDLE,KEY_INFORMATION_CLASS,void *,DWORD,DWORD *);
1966 NTSTATUS WINAPI NtQueryMultipleValueKey(HANDLE,PKEY_MULTIPLE_VALUE_INFORMATION,ULONG,PVOID,ULONG,PULONG);
1967 NTSTATUS WINAPI NtQueryMutant(HANDLE,MUTANT_INFORMATION_CLASS,PVOID,ULONG,PULONG);
1968 NTSTATUS WINAPI NtQueryObject(HANDLE, OBJECT_INFORMATION_CLASS, PVOID, ULONG, PULONG);
1969 NTSTATUS WINAPI NtQueryOpenSubKeys(POBJECT_ATTRIBUTES,PULONG);
1970 NTSTATUS WINAPI NtQueryPerformanceCounter(PLARGE_INTEGER, PLARGE_INTEGER);
1971 NTSTATUS WINAPI NtQuerySecurityObject(HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,ULONG,PULONG);
1972 NTSTATUS WINAPI NtQuerySection(HANDLE,SECTION_INFORMATION_CLASS,PVOID,ULONG,PULONG);
1973 NTSTATUS WINAPI NtQuerySemaphore(HANDLE,SEMAPHORE_INFORMATION_CLASS,PVOID,ULONG,PULONG);
1974 NTSTATUS WINAPI NtQuerySymbolicLinkObject(HANDLE,PUNICODE_STRING,PULONG);
1975 NTSTATUS WINAPI NtQuerySystemEnvironmentValue(PUNICODE_STRING,PWCHAR,ULONG,PULONG);
1976 NTSTATUS WINAPI NtQuerySystemInformation(SYSTEM_INFORMATION_CLASS,PVOID,ULONG,PULONG);
1977 NTSTATUS WINAPI NtQuerySystemTime(PLARGE_INTEGER);
1978 NTSTATUS WINAPI NtQueryTimer(HANDLE,TIMER_INFORMATION_CLASS,PVOID,ULONG,PULONG);
1979 NTSTATUS WINAPI NtQueryTimerResolution(PULONG,PULONG,PULONG);
1980 NTSTATUS WINAPI NtQueryValueKey(HANDLE,const UNICODE_STRING *,KEY_VALUE_INFORMATION_CLASS,void *,DWORD,DWORD *);
1981 NTSTATUS WINAPI NtQueryVirtualMemory(HANDLE,LPCVOID,MEMORY_INFORMATION_CLASS,PVOID,SIZE_T,SIZE_T*);
1982 NTSTATUS WINAPI NtQueryVolumeInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,FS_INFORMATION_CLASS);
1983 void WINAPI NtRaiseException(PEXCEPTION_RECORD,PCONTEXT,BOOL);
1984 NTSTATUS WINAPI NtRaiseHardError(NTSTATUS,ULONG,PUNICODE_STRING,PVOID*,HARDERROR_RESPONSE_OPTION,PHARDERROR_RESPONSE);
1985 NTSTATUS WINAPI NtReadFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,PVOID,ULONG,PLARGE_INTEGER,PULONG);
1986 NTSTATUS WINAPI NtReadFileScatter(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,FILE_SEGMENT_ELEMENT,ULONG,PLARGE_INTEGER,PULONG);
1987 NTSTATUS WINAPI NtReadRequestData(HANDLE,PLPC_MESSAGE,ULONG,PVOID,ULONG,PULONG);
1988 NTSTATUS WINAPI NtReadVirtualMemory(HANDLE,const void*,void*,SIZE_T,SIZE_T*);
1989 NTSTATUS WINAPI NtRegisterThreadTerminatePort(HANDLE);
1990 NTSTATUS WINAPI NtReleaseMutant(HANDLE,PLONG);
1991 NTSTATUS WINAPI NtReleaseSemaphore(HANDLE,ULONG,PULONG);
1992 NTSTATUS WINAPI NtRemoveIoCompletion(HANDLE,PULONG,PULONG,PIO_STATUS_BLOCK,PLARGE_INTEGER);
1993 NTSTATUS WINAPI NtReplaceKey(POBJECT_ATTRIBUTES,HANDLE,POBJECT_ATTRIBUTES);
1994 NTSTATUS WINAPI NtReplyPort(HANDLE,PLPC_MESSAGE);
1995 NTSTATUS WINAPI NtReplyWaitReceivePort(HANDLE,PULONG,PLPC_MESSAGE,PLPC_MESSAGE);
1996 NTSTATUS WINAPI NtReplyWaitReceivePortEx(HANDLE,PVOID*,PPORT_MESSAGE,PPORT_MESSAGE,PLARGE_INTEGER);
1997 NTSTATUS WINAPI NtReplyWaitReplyPort(HANDLE,PLPC_MESSAGE);
1998 NTSTATUS WINAPI NtRequestPort(HANDLE,PLPC_MESSAGE);
1999 NTSTATUS WINAPI NtRequestWaitReplyPort(HANDLE,PLPC_MESSAGE,PLPC_MESSAGE);
2000 NTSTATUS WINAPI NtResetEvent(HANDLE,PULONG);
2001 NTSTATUS WINAPI NtRestoreKey(HANDLE,HANDLE,ULONG);
2002 NTSTATUS WINAPI NtResumeThread(HANDLE,PULONG);
2003 NTSTATUS WINAPI NtSaveKey(HANDLE,HANDLE);
2004 NTSTATUS WINAPI NtSecureConnectPort(PHANDLE,PUNICODE_STRING,PSECURITY_QUALITY_OF_SERVICE,PLPC_SECTION_WRITE,PSID,PLPC_SECTION_READ,PULONG,PVOID,PULONG);
2005 NTSTATUS WINAPI NtSetContextThread(HANDLE,const CONTEXT*);
2006 NTSTATUS WINAPI NtSetDefaultHardErrorPort(HANDLE);
2007 NTSTATUS WINAPI NtSetDefaultLocale(BOOLEAN,LCID);
2008 NTSTATUS WINAPI NtSetDefaultUILanguage(LANGID);
2009 NTSTATUS WINAPI NtSetEaFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG);
2010 NTSTATUS WINAPI NtSetEvent(HANDLE,PULONG);
2011 NTSTATUS WINAPI NtSetHighEventPair(HANDLE);
2012 NTSTATUS WINAPI NtSetHighWaitLowEventPair(HANDLE);
2013 NTSTATUS WINAPI NtSetHighWaitLowThread(VOID);
2014 NTSTATUS WINAPI NtSetInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,FILE_INFORMATION_CLASS);
2015 NTSTATUS WINAPI NtSetInformationKey(HANDLE,const int,PVOID,ULONG);
2016 NTSTATUS WINAPI NtSetInformationObject(HANDLE, OBJECT_INFORMATION_CLASS, PVOID, ULONG);
2017 NTSTATUS WINAPI NtSetInformationProcess(HANDLE,PROCESS_INFORMATION_CLASS,PVOID,ULONG);
2018 NTSTATUS WINAPI NtSetInformationThread(HANDLE,THREADINFOCLASS,LPCVOID,ULONG);
2019 NTSTATUS WINAPI NtSetInformationToken(HANDLE,TOKEN_INFORMATION_CLASS,PVOID,ULONG);
2020 NTSTATUS WINAPI NtSetIntervalProfile(ULONG,KPROFILE_SOURCE);
2021 NTSTATUS WINAPI NtSetIoCompletion(HANDLE,ULONG,ULONG,NTSTATUS,ULONG);
2022 NTSTATUS WINAPI NtSetLdtEntries(ULONG,LDT_ENTRY,ULONG,LDT_ENTRY);
2023 NTSTATUS WINAPI NtSetLowEventPair(HANDLE);
2024 NTSTATUS WINAPI NtSetLowWaitHighEventPair(HANDLE);
2025 NTSTATUS WINAPI NtSetLowWaitHighThread(VOID);
2026 NTSTATUS WINAPI NtSetSecurityObject(HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR);
2027 NTSTATUS WINAPI NtSetSystemEnvironmentValue(PUNICODE_STRING,PUNICODE_STRING);
2028 NTSTATUS WINAPI NtSetSystemInformation(SYSTEM_INFORMATION_CLASS,PVOID,ULONG);
2029 NTSTATUS WINAPI NtSetSystemPowerState(POWER_ACTION,SYSTEM_POWER_STATE,ULONG);
2030 NTSTATUS WINAPI NtSetSystemTime(const LARGE_INTEGER*,LARGE_INTEGER*);
2031 NTSTATUS WINAPI NtSetTimer(HANDLE, const LARGE_INTEGER*, PTIMER_APC_ROUTINE, PVOID, BOOLEAN, ULONG, BOOLEAN*);
2032 NTSTATUS WINAPI NtSetTimerResolution(ULONG,BOOLEAN,PULONG);
2033 NTSTATUS WINAPI NtSetValueKey(HANDLE,const UNICODE_STRING *,ULONG,ULONG,const void *,ULONG);
2034 NTSTATUS WINAPI NtSetVolumeInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,FS_INFORMATION_CLASS);
2035 NTSTATUS WINAPI NtSignalAndWaitForSingleObject(HANDLE,HANDLE,BOOLEAN,const LARGE_INTEGER*);
2036 NTSTATUS WINAPI NtShutdownSystem(SHUTDOWN_ACTION);
2037 NTSTATUS WINAPI NtStartProfile(HANDLE);
2038 NTSTATUS WINAPI NtStopProfile(HANDLE);
2039 NTSTATUS WINAPI NtSuspendThread(HANDLE,PULONG);
2040 NTSTATUS WINAPI NtSystemDebugControl(SYSDBG_COMMAND,PVOID,ULONG,PVOID,ULONG,PULONG);
2041 NTSTATUS WINAPI NtTerminateProcess(HANDLE,LONG);
2042 NTSTATUS WINAPI NtTerminateThread(HANDLE,LONG);
2043 NTSTATUS WINAPI NtTestAlert(VOID);
2044 NTSTATUS WINAPI NtUnloadDriver(const UNICODE_STRING *);
2045 NTSTATUS WINAPI NtUnloadKey(HANDLE);
2046 NTSTATUS WINAPI NtUnloadKeyEx(POBJECT_ATTRIBUTES,HANDLE);
2047 NTSTATUS WINAPI NtUnlockFile(HANDLE,PIO_STATUS_BLOCK,PLARGE_INTEGER,PLARGE_INTEGER,PULONG);
2048 NTSTATUS WINAPI NtUnlockVirtualMemory(HANDLE,PVOID*,SIZE_T*,ULONG);
2049 NTSTATUS WINAPI NtUnmapViewOfSection(HANDLE,PVOID);
2050 NTSTATUS WINAPI NtVdmControl(ULONG,PVOID);
2051 NTSTATUS WINAPI NtWaitForSingleObject(HANDLE,BOOLEAN,const LARGE_INTEGER*);
2052 NTSTATUS WINAPI NtWaitForMultipleObjects(ULONG,const HANDLE*,BOOLEAN,BOOLEAN,const LARGE_INTEGER*);
2053 NTSTATUS WINAPI NtWaitHighEventPair(HANDLE);
2054 NTSTATUS WINAPI NtWaitLowEventPair(HANDLE);
2055 NTSTATUS WINAPI NtWriteFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,const void*,ULONG,PLARGE_INTEGER,PULONG);
2056 NTSTATUS WINAPI NtWriteFileGather(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,FILE_SEGMENT_ELEMENT,ULONG,PLARGE_INTEGER,PULONG);
2057 NTSTATUS WINAPI NtWriteRequestData(HANDLE,PLPC_MESSAGE,ULONG,PVOID,ULONG,PULONG);
2058 NTSTATUS WINAPI NtWriteVirtualMemory(HANDLE,void*,const void*,SIZE_T,SIZE_T*);
2059 NTSTATUS WINAPI NtYieldExecution(void);
2060
2061 void WINAPI RtlAcquirePebLock(void);
2062 BYTE WINAPI RtlAcquireResourceExclusive(LPRTL_RWLOCK,BYTE);
2063 BYTE WINAPI RtlAcquireResourceShared(LPRTL_RWLOCK,BYTE);
2064 NTSTATUS WINAPI RtlAddAce(PACL,DWORD,DWORD,PACE_HEADER,DWORD);
2065 NTSTATUS WINAPI RtlAddAccessAllowedAce(PACL,DWORD,DWORD,PSID);
2066 NTSTATUS WINAPI RtlAddAccessAllowedAceEx(PACL,DWORD,DWORD,DWORD,PSID);
2067 NTSTATUS WINAPI RtlAddAccessDeniedAce(PACL,DWORD,DWORD,PSID);
2068 NTSTATUS WINAPI RtlAddAccessDeniedAceEx(PACL,DWORD,DWORD,DWORD,PSID);
2069 NTSTATUS WINAPI RtlAddAtomToAtomTable(RTL_ATOM_TABLE,const WCHAR*,RTL_ATOM*);
2070 NTSTATUS WINAPI RtlAddAuditAccessAce(PACL,DWORD,DWORD,PSID,BOOL,BOOL);
2071 PVOID WINAPI RtlAddVectoredExceptionHandler(ULONG,PVECTORED_EXCEPTION_HANDLER);
2072 NTSTATUS WINAPI RtlAdjustPrivilege(ULONG,BOOLEAN,BOOLEAN,PBOOLEAN);
2073 NTSTATUS WINAPI RtlAllocateAndInitializeSid(PSID_IDENTIFIER_AUTHORITY,BYTE,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,PSID *);
2074 RTL_HANDLE * WINAPI RtlAllocateHandle(RTL_HANDLE_TABLE *,ULONG *);
2075 PVOID WINAPI RtlAllocateHeap(HANDLE,ULONG,SIZE_T);
2076 WCHAR WINAPI RtlAnsiCharToUnicodeChar(LPSTR *);
2077 DWORD WINAPI RtlAnsiStringToUnicodeSize(const STRING *);
2078 NTSTATUS WINAPI RtlAnsiStringToUnicodeString(PUNICODE_STRING,PCANSI_STRING,BOOLEAN);
2079 NTSTATUS WINAPI RtlAppendAsciizToString(STRING *,LPCSTR);
2080 NTSTATUS WINAPI RtlAppendStringToString(STRING *,const STRING *);
2081 NTSTATUS WINAPI RtlAppendUnicodeStringToString(UNICODE_STRING *,const UNICODE_STRING *);
2082 NTSTATUS WINAPI RtlAppendUnicodeToString(UNICODE_STRING *,LPCWSTR);
2083 BOOLEAN WINAPI RtlAreAllAccessesGranted(ACCESS_MASK,ACCESS_MASK);
2084 BOOLEAN WINAPI RtlAreAnyAccessesGranted(ACCESS_MASK,ACCESS_MASK);
2085 BOOLEAN WINAPI RtlAreBitsSet(PCRTL_BITMAP,ULONG,ULONG);
2086 BOOLEAN WINAPI RtlAreBitsClear(PCRTL_BITMAP,ULONG,ULONG);
2087
2088 NTSTATUS WINAPI RtlCharToInteger(PCSZ,ULONG,PULONG);
2089 NTSTATUS WINAPI RtlCheckRegistryKey(ULONG, PWSTR);
2090 void WINAPI RtlClearAllBits(PRTL_BITMAP);
2091 void WINAPI RtlClearBits(PRTL_BITMAP,ULONG,ULONG);
2092 PDEBUG_BUFFER WINAPI RtlCreateQueryDebugBuffer(ULONG,BOOLEAN);
2093 ULONG WINAPI RtlCompactHeap(HANDLE,ULONG);
2094 LONG WINAPI RtlCompareString(const STRING*,const STRING*,BOOLEAN);
2095 LONG WINAPI RtlCompareUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
2096 DWORD WINAPI RtlComputeCrc32(DWORD,PBYTE,INT);
2097 NTSTATUS WINAPI RtlConvertSidToUnicodeString(PUNICODE_STRING,PSID,BOOLEAN);
2098 LONGLONG WINAPI RtlConvertLongToLargeInteger(LONG);
2099 ULONGLONG WINAPI RtlConvertUlongToLargeInteger(ULONG);
2100 void WINAPI RtlCopyLuid(PLUID,const LUID*);
2101 void WINAPI RtlCopyLuidAndAttributesArray(ULONG,const LUID_AND_ATTRIBUTES*,PLUID_AND_ATTRIBUTES);
2102 BOOLEAN WINAPI RtlCopySid(DWORD,PSID,PSID);
2103 NTSTATUS WINAPI RtlCopySecurityDescriptor(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR);
2104 void WINAPI RtlCopyString(STRING*,const STRING*);
2105 void WINAPI RtlCopyUnicodeString(UNICODE_STRING*,const UNICODE_STRING*);
2106 NTSTATUS WINAPI RtlCreateAcl(PACL,DWORD,DWORD);
2107 NTSTATUS WINAPI RtlCreateAtomTable(ULONG,RTL_ATOM_TABLE*);
2108 NTSTATUS WINAPI RtlCreateEnvironment(BOOLEAN, PWSTR*);
2109 HANDLE WINAPI RtlCreateHeap(ULONG,PVOID,SIZE_T,SIZE_T,PVOID,PRTL_HEAP_DEFINITION);
2110 NTSTATUS WINAPI RtlCreateProcessParameters(RTL_USER_PROCESS_PARAMETERS**,const UNICODE_STRING*,
2111 const UNICODE_STRING*,const UNICODE_STRING*,
2112 const UNICODE_STRING*,PWSTR,const UNICODE_STRING*,
2113 const UNICODE_STRING*,const UNICODE_STRING*,
2114 const UNICODE_STRING*);
2115 NTSTATUS WINAPI RtlCreateSecurityDescriptor(PSECURITY_DESCRIPTOR,DWORD);
2116 BOOLEAN WINAPI RtlCreateUnicodeString(PUNICODE_STRING,LPCWSTR);
2117 BOOLEAN WINAPI RtlCreateUnicodeStringFromAsciiz(PUNICODE_STRING,LPCSTR);
2118 NTSTATUS WINAPI RtlCreateUserThread(HANDLE,const SECURITY_DESCRIPTOR*,BOOLEAN,PVOID,SIZE_T,SIZE_T,PRTL_THREAD_START_ROUTINE,void*,HANDLE*,CLIENT_ID*);
2119
2120 NTSTATUS WINAPI RtlDeleteAce(PACL,DWORD);
2121 NTSTATUS WINAPI RtlDeleteAtomFromAtomTable(RTL_ATOM_TABLE,RTL_ATOM);
2122 NTSTATUS WINAPI RtlDeleteCriticalSection(RTL_CRITICAL_SECTION *);
2123 NTSTATUS WINAPI RtlDeleteRegistryValue(ULONG, PCWSTR, PCWSTR);
2124 void WINAPI RtlDeleteResource(LPRTL_RWLOCK);
2125 DWORD WINAPI RtlDeleteSecurityObject(DWORD);
2126 PRTL_USER_PROCESS_PARAMETERS WINAPI RtlDeNormalizeProcessParams(RTL_USER_PROCESS_PARAMETERS*);
2127 NTSTATUS WINAPI RtlDestroyAtomTable(RTL_ATOM_TABLE);
2128 NTSTATUS WINAPI RtlDestroyEnvironment(PWSTR);
2129 NTSTATUS WINAPI RtlDestroyHandleTable(RTL_HANDLE_TABLE *);
2130 HANDLE WINAPI RtlDestroyHeap(HANDLE);
2131 void WINAPI RtlDestroyProcessParameters(RTL_USER_PROCESS_PARAMETERS*);
2132 NTSTATUS WINAPI RtlDestroyQueryDebugBuffer(PDEBUG_BUFFER);
2133 DOS_PATHNAME_TYPE WINAPI RtlDetermineDosPathNameType_U(PCWSTR);
2134 BOOLEAN WINAPI RtlDoesFileExists_U(LPCWSTR);
2135 BOOLEAN WINAPI RtlDosPathNameToNtPathName_U(PCWSTR,PUNICODE_STRING,PCWSTR*,CURDIR*);
2136 ULONG WINAPI RtlDosSearchPath_U(LPCWSTR, LPCWSTR, LPCWSTR, ULONG, LPWSTR, LPWSTR*);
2137 WCHAR WINAPI RtlDowncaseUnicodeChar(WCHAR);
2138 NTSTATUS WINAPI RtlDowncaseUnicodeString(UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
2139 void WINAPI RtlDumpResource(LPRTL_RWLOCK);
2140 NTSTATUS WINAPI RtlDuplicateUnicodeString(int,const UNICODE_STRING*,UNICODE_STRING*);
2141
2142 NTSTATUS WINAPI RtlEmptyAtomTable(RTL_ATOM_TABLE,BOOLEAN);
2143 LONGLONG WINAPI RtlEnlargedIntegerMultiply(INT,INT);
2144 ULONGLONG WINAPI RtlEnlargedUnsignedMultiply(UINT,UINT);
2145 UINT WINAPI RtlEnlargedUnsignedDivide(ULONGLONG,UINT,UINT *);
2146 NTSTATUS WINAPI RtlEnterCriticalSection(RTL_CRITICAL_SECTION *);
2147 void WINAPI RtlEraseUnicodeString(UNICODE_STRING*);
2148 NTSTATUS WINAPI RtlEqualComputerName(const UNICODE_STRING*,const UNICODE_STRING*);
2149 NTSTATUS WINAPI RtlEqualDomainName(const UNICODE_STRING*,const UNICODE_STRING*);
2150 BOOLEAN WINAPI RtlEqualLuid(const LUID*,const LUID*);
2151 BOOL WINAPI RtlEqualPrefixSid(PSID,PSID);
2152 BOOL WINAPI RtlEqualSid(PSID,PSID);
2153 BOOLEAN WINAPI RtlEqualString(const STRING*,const STRING*,BOOLEAN);
2154 BOOLEAN WINAPI RtlEqualUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
2155 DECLSPEC_NORETURN void WINAPI RtlExitUserThread(ULONG);
2156 NTSTATUS WINAPI RtlExpandEnvironmentStrings_U(PWSTR, const UNICODE_STRING*, UNICODE_STRING*, ULONG*);
2157 LONGLONG WINAPI RtlExtendedMagicDivide(LONGLONG,LONGLONG,INT);
2158 LONGLONG WINAPI RtlExtendedIntegerMultiply(LONGLONG,INT);
2159 LONGLONG WINAPI RtlExtendedLargeIntegerDivide(LONGLONG,INT,INT *);
2160
2161 NTSTATUS WINAPI RtlFindCharInUnicodeString(int,const UNICODE_STRING*,const UNICODE_STRING*,USHORT*);
2162 ULONG WINAPI RtlFindClearBits(PCRTL_BITMAP,ULONG,ULONG);
2163 ULONG WINAPI RtlFindClearBitsAndSet(PRTL_BITMAP,ULONG,ULONG);
2164 ULONG WINAPI RtlFindClearRuns(PCRTL_BITMAP,PRTL_BITMAP_RUN,ULONG,BOOLEAN);
2165 ULONG WINAPI RtlFindLastBackwardRunSet(PCRTL_BITMAP,ULONG,PULONG);
2166 ULONG WINAPI RtlFindLastBackwardRunClear(PCRTL_BITMAP,ULONG,PULONG);
2167 CCHAR WINAPI RtlFindLeastSignificantBit(ULONGLONG);
2168 ULONG WINAPI RtlFindLongestRunSet(PCRTL_BITMAP,PULONG);
2169 ULONG WINAPI RtlFindLongestRunClear(PCRTL_BITMAP,PULONG);
2170 NTSTATUS WINAPI RtlFindMessage(HMODULE,ULONG,ULONG,ULONG,const MESSAGE_RESOURCE_ENTRY**);
2171 CCHAR WINAPI RtlFindMostSignificantBit(ULONGLONG);
2172 ULONG WINAPI RtlFindNextForwardRunSet(PCRTL_BITMAP,ULONG,PULONG);
2173 ULONG WINAPI RtlFindNextForwardRunClear(PCRTL_BITMAP,ULONG,PULONG);
2174 ULONG WINAPI RtlFindSetBits(PCRTL_BITMAP,ULONG,ULONG);
2175 ULONG WINAPI RtlFindSetBitsAndClear(PRTL_BITMAP,ULONG,ULONG);
2176 ULONG WINAPI RtlFindSetRuns(PCRTL_BITMAP,PRTL_BITMAP_RUN,ULONG,BOOLEAN);
2177 BOOLEAN WINAPI RtlFirstFreeAce(PACL,PACE_HEADER *);
2178 NTSTATUS WINAPI RtlFormatCurrentUserKeyPath(PUNICODE_STRING);
2179 NTSTATUS WINAPI RtlFormatMessage(LPWSTR,UCHAR,BOOLEAN,BOOLEAN,BOOLEAN,va_list *,LPWSTR,ULONG);
2180 void WINAPI RtlFreeAnsiString(PANSI_STRING);
2181 BOOLEAN WINAPI RtlFreeHandle(RTL_HANDLE_TABLE *,RTL_HANDLE *);
2182 BOOLEAN WINAPI RtlFreeHeap(HANDLE,ULONG,PVOID);
2183 void WINAPI RtlFreeOemString(POEM_STRING);
2184 DWORD WINAPI RtlFreeSid(PSID);
2185 void WINAPI RtlFreeUnicodeString(PUNICODE_STRING);
2186
2187 NTSTATUS WINAPI RtlGetAce(PACL,DWORD,LPVOID *);
2188 NTSTATUS WINAPI RtlGetControlSecurityDescriptor(PSECURITY_DESCRIPTOR, PSECURITY_DESCRIPTOR_CONTROL,LPDWORD);
2189 NTSTATUS WINAPI RtlGetCurrentDirectory_U(ULONG, LPWSTR);
2190 PEB * WINAPI RtlGetCurrentPeb(void);
2191 NTSTATUS WINAPI RtlGetDaclSecurityDescriptor(PSECURITY_DESCRIPTOR,PBOOLEAN,PACL *,PBOOLEAN);
2192 ULONG WINAPI RtlGetFullPathName_U(PCWSTR,ULONG,PWSTR,PWSTR*);
2193 NTSTATUS WINAPI RtlGetGroupSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID *,PBOOLEAN);
2194 NTSTATUS WINAPI RtlGetLastNtStatus(void);
2195 DWORD WINAPI RtlGetLastWin32Error(void);
2196 DWORD WINAPI RtlGetLongestNtPathLength(void);
2197 BOOLEAN WINAPI RtlGetNtProductType(LPDWORD);
2198 NTSTATUS WINAPI RtlGetOwnerSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID *,PBOOLEAN);
2199 ULONG WINAPI RtlGetProcessHeaps(ULONG,HANDLE*);
2200 NTSTATUS WINAPI RtlGetSaclSecurityDescriptor(PSECURITY_DESCRIPTOR,PBOOLEAN,PACL *,PBOOLEAN);
2201 //NTSTATUS WINAPI RtlGetVersion(RTL_OSVERSIONINFOEXW*);
2202 NTSTATUS WINAPI RtlGUIDFromString(PUNICODE_STRING,GUID*);
2203
2204 PSID_IDENTIFIER_AUTHORITY WINAPI RtlIdentifierAuthoritySid(PSID);
2205 PVOID WINAPI RtlImageDirectoryEntryToData(HMODULE,BOOL,WORD,ULONG *);
2206 PIMAGE_NT_HEADERS WINAPI RtlImageNtHeader(HMODULE);
2207 PIMAGE_SECTION_HEADER WINAPI RtlImageRvaToSection(const IMAGE_NT_HEADERS *,HMODULE,DWORD);
2208 PVOID WINAPI RtlImageRvaToVa(const IMAGE_NT_HEADERS *,HMODULE,DWORD,IMAGE_SECTION_HEADER **);
2209 NTSTATUS WINAPI RtlImpersonateSelf(SECURITY_IMPERSONATION_LEVEL);
2210 void WINAPI RtlInitString(PSTRING,PCSZ);
2211 void WINAPI RtlInitAnsiString(PANSI_STRING,PCSZ);
2212 void WINAPI RtlInitUnicodeString(PUNICODE_STRING,PCWSTR);
2213 NTSTATUS WINAPI RtlInitUnicodeStringEx(PUNICODE_STRING,PCWSTR);
2214 NTSTATUS WINAPI RtlInitializeCriticalSection(RTL_CRITICAL_SECTION *);
2215 NTSTATUS WINAPI RtlInitializeCriticalSectionAndSpinCount(RTL_CRITICAL_SECTION *,DWORD);
2216 void WINAPI RtlInitializeBitMap(PRTL_BITMAP,PULONG,ULONG);
2217 void WINAPI RtlInitializeHandleTable(ULONG,ULONG,RTL_HANDLE_TABLE *);
2218 void WINAPI RtlInitializeResource(LPRTL_RWLOCK);
2219 BOOL WINAPI RtlInitializeSid(PSID,PSID_IDENTIFIER_AUTHORITY,BYTE);
2220
2221 NTSTATUS WINAPI RtlInt64ToUnicodeString(ULONGLONG,ULONG,UNICODE_STRING *);
2222 NTSTATUS WINAPI RtlIntegerToChar(ULONG,ULONG,ULONG,PCHAR);
2223 NTSTATUS WINAPI RtlIntegerToUnicodeString(ULONG,ULONG,UNICODE_STRING *);
2224 ULONG WINAPI RtlIsDosDeviceName_U(PCWSTR);
2225 BOOLEAN WINAPI RtlIsNameLegalDOS8Dot3(const UNICODE_STRING*,POEM_STRING,PBOOLEAN);
2226 BOOLEAN WINAPI RtlIsTextUnicode(LPCVOID,INT,INT *);
2227 BOOLEAN WINAPI RtlIsValidHandle(const RTL_HANDLE_TABLE *, const RTL_HANDLE *);
2228 BOOLEAN WINAPI RtlIsValidIndexHandle(const RTL_HANDLE_TABLE *, ULONG Index, RTL_HANDLE **);
2229
2230 LONGLONG WINAPI RtlLargeIntegerAdd(LONGLONG,LONGLONG);
2231 LONGLONG WINAPI RtlLargeIntegerArithmeticShift(LONGLONG,INT);
2232 ULONGLONG WINAPI RtlLargeIntegerDivide( ULONGLONG,ULONGLONG,ULONGLONG *);
2233 LONGLONG WINAPI RtlLargeIntegerNegate(LONGLONG);
2234 LONGLONG WINAPI RtlLargeIntegerShiftLeft(LONGLONG,INT);
2235 LONGLONG WINAPI RtlLargeIntegerShiftRight(LONGLONG,INT);
2236 LONGLONG WINAPI RtlLargeIntegerSubtract(LONGLONG,LONGLONG);
2237 NTSTATUS WINAPI RtlLargeIntegerToChar(const ULONGLONG *,ULONG,ULONG,PCHAR);
2238 NTSTATUS WINAPI RtlLeaveCriticalSection(RTL_CRITICAL_SECTION *);
2239 DWORD WINAPI RtlLengthRequiredSid(DWORD);
2240 ULONG WINAPI RtlLengthSecurityDescriptor(PSECURITY_DESCRIPTOR);
2241 DWORD WINAPI RtlLengthSid(PSID);
2242 NTSTATUS WINAPI RtlLocalTimeToSystemTime(const LARGE_INTEGER*,PLARGE_INTEGER);
2243 BOOLEAN WINAPI RtlLockHeap(HANDLE);
2244 NTSTATUS WINAPI RtlLookupAtomInAtomTable(RTL_ATOM_TABLE,const WCHAR*,RTL_ATOM*);
2245
2246 NTSTATUS WINAPI RtlMakeSelfRelativeSD(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,LPDWORD);
2247 void WINAPI RtlMapGenericMask(PACCESS_MASK,const GENERIC_MAPPING*);
2248 NTSTATUS WINAPI RtlMultiByteToUnicodeN(LPWSTR,DWORD,LPDWORD,LPCSTR,DWORD);
2249 NTSTATUS WINAPI RtlMultiByteToUnicodeSize(DWORD*,LPCSTR,UINT);
2250
2251 DWORD WINAPI RtlNewSecurityObject(DWORD,DWORD,DWORD,DWORD,DWORD,DWORD);
2252 PRTL_USER_PROCESS_PARAMETERS WINAPI RtlNormalizeProcessParams(RTL_USER_PROCESS_PARAMETERS*);
2253 ULONG WINAPI RtlNtStatusToDosError(NTSTATUS);
2254 ULONG WINAPI RtlNtStatusToDosErrorNoTeb(NTSTATUS);
2255 ULONG WINAPI RtlNumberOfSetBits(PCRTL_BITMAP);
2256 ULONG WINAPI RtlNumberOfClearBits(PCRTL_BITMAP);
2257
2258 UINT WINAPI RtlOemStringToUnicodeSize(const STRING*);
2259 NTSTATUS WINAPI RtlOemStringToUnicodeString(UNICODE_STRING*,const STRING*,BOOLEAN);
2260 NTSTATUS WINAPI RtlOemToUnicodeN(LPWSTR,DWORD,LPDWORD,LPCSTR,DWORD);
2261 DWORD WINAPI RtlOpenCurrentUser(ACCESS_MASK,PHANDLE);
2262
2263 NTSTATUS WINAPI RtlPinAtomInAtomTable(PRTL_ATOM_TABLE,RTL_ATOM);
2264 BOOLEAN WINAPI RtlPrefixString(const STRING*,const STRING*,BOOLEAN);
2265 BOOLEAN WINAPI RtlPrefixUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
2266
2267 NTSTATUS WINAPI RtlQueryAtomInAtomTable(RTL_ATOM_TABLE,RTL_ATOM,ULONG*,ULONG*,WCHAR*,ULONG*);
2268 NTSTATUS WINAPI RtlQueryEnvironmentVariable_U(PWSTR,PUNICODE_STRING,PUNICODE_STRING);
2269 NTSTATUS WINAPI RtlQueryInformationAcl(PACL,LPVOID,DWORD,ACL_INFORMATION_CLASS);
2270 NTSTATUS WINAPI RtlQueryProcessDebugInformation(ULONG,ULONG,PDEBUG_BUFFER);
2271 NTSTATUS WINAPI RtlQueryRegistryValues(ULONG, PCWSTR, PRTL_QUERY_REGISTRY_TABLE, PVOID, PVOID);
2272 NTSTATUS WINAPI RtlQueryTimeZoneInformation(RTL_TIME_ZONE_INFORMATION*);
2273 void WINAPI RtlRaiseException(PEXCEPTION_RECORD);
2274 void WINAPI RtlRaiseStatus(NTSTATUS);
2275 ULONG WINAPI RtlRandom(PULONG);
2276 PVOID WINAPI RtlReAllocateHeap(HANDLE,ULONG,PVOID,SIZE_T);
2277 void WINAPI RtlReleasePebLock(void);
2278 void WINAPI RtlReleaseResource(LPRTL_RWLOCK);
2279 ULONG WINAPI RtlRemoveVectoredExceptionHandler(PVOID);
2280 void WINAPI RtlRestoreLastWin32Error(DWORD);
2281
2282 void WINAPI RtlSecondsSince1970ToTime(DWORD,LARGE_INTEGER *);
2283 void WINAPI RtlSecondsSince1980ToTime(DWORD,LARGE_INTEGER *);
2284 NTSTATUS WINAPI RtlSelfRelativeToAbsoluteSD(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,
2285 PDWORD,PACL,PDWORD,PACL,PDWORD,PSID,PDWORD,PSID,PDWORD);
2286 void WINAPI RtlSetAllBits(PRTL_BITMAP);
2287 void WINAPI RtlSetBits(PRTL_BITMAP,ULONG,ULONG);
2288 ULONG WINAPI RtlSetCriticalSectionSpinCount(RTL_CRITICAL_SECTION*,ULONG);
2289 NTSTATUS WINAPI RtlSetCurrentDirectory_U(const UNICODE_STRING*);
2290 void WINAPI RtlSetCurrentEnvironment(PWSTR, PWSTR*);
2291 NTSTATUS WINAPI RtlSetDaclSecurityDescriptor(PSECURITY_DESCRIPTOR,BOOLEAN,PACL,BOOLEAN);
2292 NTSTATUS WINAPI RtlSetEnvironmentVariable(PWSTR*,PUNICODE_STRING,PUNICODE_STRING);
2293 NTSTATUS WINAPI RtlSetOwnerSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID,BOOLEAN);
2294 NTSTATUS WINAPI RtlSetGroupSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID,BOOLEAN);
2295 void WINAPI RtlSetLastWin32Error(DWORD);
2296 void WINAPI RtlSetLastWin32ErrorAndNtStatusFromNtStatus(NTSTATUS);
2297 NTSTATUS WINAPI RtlSetSaclSecurityDescriptor(PSECURITY_DESCRIPTOR,BOOLEAN,PACL,BOOLEAN);
2298 NTSTATUS WINAPI RtlSetTimeZoneInformation(const RTL_TIME_ZONE_INFORMATION*);
2299 SIZE_T WINAPI RtlSizeHeap(HANDLE,ULONG,PVOID);
2300 NTSTATUS WINAPI RtlStringFromGUID(REFGUID,PUNICODE_STRING);
2301 LPDWORD WINAPI RtlSubAuthoritySid(PSID,DWORD);
2302 LPBYTE WINAPI RtlSubAuthorityCountSid(PSID);
2303 NTSTATUS WINAPI RtlSystemTimeToLocalTime(const LARGE_INTEGER*,PLARGE_INTEGER);
2304
2305 void WINAPI RtlTimeToTimeFields(const LARGE_INTEGER*,PTIME_FIELDS);
2306 BOOLEAN WINAPI RtlTimeFieldsToTime(PTIME_FIELDS,PLARGE_INTEGER);
2307 void WINAPI RtlTimeToElapsedTimeFields(const LARGE_INTEGER *,PTIME_FIELDS);
2308 BOOLEAN WINAPI RtlTimeToSecondsSince1970(const LARGE_INTEGER *,LPDWORD);
2309 BOOLEAN WINAPI RtlTimeToSecondsSince1980(const LARGE_INTEGER *,LPDWORD);
2310 BOOL WINAPI RtlTryEnterCriticalSection(RTL_CRITICAL_SECTION *);
2311
2312 ULONGLONG __fastcall RtlUlonglongByteSwap(ULONGLONG);
2313 DWORD WINAPI RtlUnicodeStringToAnsiSize(const UNICODE_STRING*);
2314 NTSTATUS WINAPI RtlUnicodeStringToAnsiString(PANSI_STRING,PCUNICODE_STRING,BOOLEAN);
2315 NTSTATUS WINAPI RtlUnicodeStringToInteger(const UNICODE_STRING *,ULONG,ULONG *);
2316 DWORD WINAPI RtlUnicodeStringToOemSize(const UNICODE_STRING*);
2317 NTSTATUS WINAPI RtlUnicodeStringToOemString(POEM_STRING,PCUNICODE_STRING,BOOLEAN);
2318 NTSTATUS WINAPI RtlUnicodeToMultiByteN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
2319 NTSTATUS WINAPI RtlUnicodeToMultiByteSize(PULONG,PCWSTR,ULONG);
2320 NTSTATUS WINAPI RtlUnicodeToOemN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
2321 ULONG WINAPI RtlUniform(PULONG);
2322 BOOLEAN WINAPI RtlUnlockHeap(HANDLE);
2323 #ifdef __ia64__
2324 void WINAPI RtlUnwind2(FRAME_POINTERS,PVOID,PEXCEPTION_RECORD,PVOID,PCONTEXT);
2325 void WINAPI RtlUnwindEx(FRAME_POINTERS,PVOID,PEXCEPTION_RECORD,PVOID,PCONTEXT,PUNWIND_HISTORY_TABLE);
2326 #endif
2327 WCHAR WINAPI RtlUpcaseUnicodeChar(WCHAR);
2328 NTSTATUS WINAPI RtlUpcaseUnicodeString(UNICODE_STRING*,const UNICODE_STRING *,BOOLEAN);
2329 NTSTATUS WINAPI RtlUpcaseUnicodeStringToAnsiString(STRING*,const UNICODE_STRING*,BOOLEAN);
2330 NTSTATUS WINAPI RtlUpcaseUnicodeStringToCountedOemString(STRING*,const UNICODE_STRING*,BOOLEAN);
2331 NTSTATUS WINAPI RtlUpcaseUnicodeStringToOemString(STRING*,const UNICODE_STRING*,BOOLEAN);
2332 NTSTATUS WINAPI RtlUpcaseUnicodeToMultiByteN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
2333 NTSTATUS WINAPI RtlUpcaseUnicodeToOemN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
2334 CHAR WINAPI RtlUpperChar(CHAR);
2335 void WINAPI RtlUpperString(STRING *,const STRING *);
2336
2337 NTSTATUS WINAPI RtlValidSecurityDescriptor(PSECURITY_DESCRIPTOR);
2338 BOOLEAN WINAPI RtlValidAcl(PACL);
2339 BOOLEAN WINAPI RtlValidSid(PSID);
2340 BOOLEAN WINAPI RtlValidateHeap(HANDLE,ULONG,LPCVOID);
2341 //NTSTATUS WINAPI RtlVerifyVersionInfo(const RTL_OSVERSIONINFOEXW*,DWORD,DWORDLONG);
2342
2343 NTSTATUS WINAPI RtlWalkHeap(HANDLE,PVOID);
2344
2345 NTSTATUS WINAPI RtlpNtCreateKey(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*,ULONG,const UNICODE_STRING*,ULONG,PULONG);
2346 NTSTATUS WINAPI RtlpWaitForCriticalSection(RTL_CRITICAL_SECTION *);
2347 NTSTATUS WINAPI RtlpUnWaitCriticalSection(RTL_CRITICAL_SECTION *);
2348
2349 ULONG WINAPI
2350 vDbgPrintEx(IN ULONG ComponentId,
2351 IN ULONG Level,
2352 IN LPCSTR Format,
2353 IN va_list ap);
2354 ULONG WINAPI
2355 vDbgPrintExWithPrefix(IN LPCSTR Prefix,
2356 IN ULONG ComponentId,
2357 IN ULONG Level,
2358 IN LPCSTR Format,
2359 IN va_list ap);
2360
2361 /* Wine internal functions */
2362
2363 extern NTSTATUS wine_nt_to_unix_file_name( const UNICODE_STRING *nameW, ANSI_STRING *unix_name_ret,
2364 UINT disposition, BOOLEAN check_case );
2365
2366 /***********************************************************************
2367 * Inline functions
2368 */
2369
2370 #define InitializeObjectAttributes(p,n,a,r,s) \
2371 do { \
2372 (p)->Length = sizeof(OBJECT_ATTRIBUTES); \
2373 (p)->RootDirectory = r; \
2374 (p)->Attributes = a; \
2375 (p)->ObjectName = n; \
2376 (p)->SecurityDescriptor = s; \
2377 (p)->SecurityQualityOfService = NULL; \
2378 } while (0)
2379
2380 #define NtCurrentProcess() ((HANDLE)-1)
2381
2382 #ifndef RtlFillMemory
2383 #define RtlFillMemory(Destination,Length,Fill) memset((Destination),(Fill),(Length))
2384 #endif
2385 #ifndef RtlMoveMemory
2386 #define RtlMoveMemory(Destination,Source,Length) memmove((Destination),(Source),(Length))
2387 #endif
2388 #define RtlStoreUlong(p,v) do { ULONG _v = (v); memcpy((p), &_v, sizeof(_v)); } while (0)
2389 #define RtlStoreUlonglong(p,v) do { ULONGLONG _v = (v); memcpy((p), &_v, sizeof(_v)); } while (0)
2390 #define RtlRetrieveUlong(p,s) memcpy((p), (s), sizeof(ULONG))
2391 #define RtlRetrieveUlonglong(p,s) memcpy((p), (s), sizeof(ULONGLONG))
2392 #ifndef RtlZeroMemory
2393 #define RtlZeroMemory(Destination,Length) memset((Destination),0,(Length))
2394 #endif
2395
2396 static __inline BOOLEAN RtlCheckBit(PCRTL_BITMAP lpBits, ULONG ulBit)
2397 {
2398 if (lpBits && ulBit < lpBits->SizeOfBitMap &&
2399 lpBits->Buffer[ulBit >> 5] & (1 << (ulBit & 31)))
2400 return TRUE;
2401 return FALSE;
2402 }
2403
2404 /* These are implemented as __fastcall, so we can't let Winelib apps link with them */
2405 static __inline USHORT RtlUshortByteSwap(USHORT s)
2406 {
2407 return (s >> 8) | (s << 8);
2408 }
2409 static __inline ULONG RtlUlongByteSwap(ULONG i)
2410 {
2411 #if defined(__i386__) && defined(__GNUC__)
2412 ULONG ret;
2413 __asm__("bswap %0" : "=r" (ret) : "0" (i) );
2414 return ret;
2415 #else
2416 return ((ULONG)RtlUshortByteSwap((USHORT)i) << 16) | RtlUshortByteSwap((USHORT)(i >> 16));
2417 #endif
2418 }
2419
2420 /*************************************************************************
2421 * Loader functions and structures.
2422 *
2423 * Those are not part of standard Winternl.h
2424 */
2425 typedef struct _LDR_MODULE
2426 {
2427 LIST_ENTRY InLoadOrderModuleList;
2428 LIST_ENTRY InMemoryOrderModuleList;
2429 LIST_ENTRY InInitializationOrderModuleList;
2430 void* BaseAddress;
2431 void* EntryPoint;
2432 ULONG SizeOfImage;
2433 UNICODE_STRING FullDllName;
2434 UNICODE_STRING BaseDllName;
2435 ULONG Flags;
2436 SHORT LoadCount;
2437 SHORT TlsIndex;
2438 HANDLE SectionHandle;
2439 ULONG CheckSum;
2440 ULONG TimeDateStamp;
2441 } LDR_MODULE, *PLDR_MODULE;
2442
2443 /* those defines are (some of the) regular LDR_MODULE.Flags values */
2444 #define LDR_IMAGE_IS_DLL 0x00000004
2445 #define LDR_LOAD_IN_PROGRESS 0x00001000
2446 #define LDR_UNLOAD_IN_PROGRESS 0x00002000
2447 #define LDR_NO_DLL_CALLS 0x00040000
2448 #define LDR_PROCESS_ATTACHED 0x00080000
2449 #define LDR_MODULE_REBASED 0x00200000
2450
2451 /* these ones is Wine specific */
2452 #define LDR_DONT_RESOLVE_REFS 0x40000000
2453 #define LDR_WINE_INTERNAL 0x80000000
2454
2455 /* FIXME: to be checked */
2456 #define MAXIMUM_FILENAME_LENGTH 256
2457
2458 typedef struct _SYSTEM_MODULE
2459 {
2460 ULONG Reserved1;
2461 ULONG Reserved2;
2462 PVOID ImageBaseAddress;
2463 ULONG ImageSize;
2464 ULONG Flags;
2465 WORD Id;
2466 WORD Rank;
2467 WORD Unknown;
2468 WORD NameOffset;
2469 BYTE Name[MAXIMUM_FILENAME_LENGTH];
2470 } SYSTEM_MODULE, *PSYSTEM_MODULE;
2471
2472 typedef struct _SYSTEM_MODULE_INFORMATION
2473 {
2474 ULONG ModulesCount;
2475 SYSTEM_MODULE Modules[1]; /* FIXME: should be Modules[0] */
2476 } SYSTEM_MODULE_INFORMATION, *PSYSTEM_MODULE_INFORMATION;
2477
2478 NTSTATUS WINAPI LdrDisableThreadCalloutsForDll(HMODULE);
2479 NTSTATUS WINAPI LdrFindEntryForAddress(const void*, PLDR_MODULE*);
2480 NTSTATUS WINAPI LdrLockLoaderLock(ULONG,ULONG*,ULONG*);
2481 NTSTATUS WINAPI LdrQueryProcessModuleInformation(SYSTEM_MODULE_INFORMATION*, ULONG, ULONG*);
2482 NTSTATUS WINAPI LdrUnloadDll(HMODULE);
2483 NTSTATUS WINAPI LdrUnlockLoaderLock(ULONG,ULONG);
2484
2485 /* list manipulation macros */
2486 #define InitializeListHead(le) (void)((le)->Flink = (le)->Blink = (le))
2487 #define InsertHeadList(le,e) do { PLIST_ENTRY f = (le)->Flink; (e)->Flink = f; (e)->Blink = (le); f->Blink = (e); (le)->Flink = (e); } while (0)
2488 #define InsertTailList(le,e) do { PLIST_ENTRY b = (le)->Blink; (e)->Flink = (le); (e)->Blink = b; b->Flink = (e); (le)->Blink = (e); } while (0)
2489 #define IsListEmpty(le) ((le)->Flink == (le))
2490 #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)
2491 static __inline PLIST_ENTRY RemoveHeadList(PLIST_ENTRY le)
2492 {
2493 PLIST_ENTRY f, b, e;
2494
2495 e = le->Flink;
2496 f = le->Flink->Flink;
2497 b = le->Flink->Blink;
2498 f->Blink = b;
2499 b->Flink = f;
2500
2501 if (e != le) e->Flink = e->Blink = NULL;
2502 return e;
2503 }
2504 static __inline PLIST_ENTRY RemoveTailList(PLIST_ENTRY le)
2505 {
2506 PLIST_ENTRY f, b, e;
2507
2508 e = le->Blink;
2509 f = le->Blink->Flink;
2510 b = le->Blink->Blink;
2511 f->Blink = b;
2512 b->Flink = f;
2513
2514 if (e != le) e->Flink = e->Blink = NULL;
2515 return e;
2516 }
2517
2518 typedef struct _FILE_FS_VOLUME_INFORMATION
2519 {
2520 LARGE_INTEGER VolumeCreationTime;
2521 ULONG VolumeSerialNumber;
2522 ULONG VolumeLabelLength;
2523 BOOLEAN SupportsObjects;
2524 WCHAR VolumeLabel[1];
2525 } FILE_FS_VOLUME_INFORMATION, *PFILE_FS_VOLUME_INFORMATION;
2526 #define FSCTL_PIPE_LISTEN CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
2527
2528 #ifdef __cplusplus
2529 } /* extern "C" */
2530 #endif /* defined(__cplusplus) */
2531
2532 #endif /* __WINE_WINTERNL_H */