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