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
28 #endif /* defined(__cplusplus) */
31 /**********************************************************************
32 * Fundamental types and data structures
35 typedef LONG NTSTATUS;
37 typedef CONST char *PCSZ;
40 typedef CSHORT *PCSHORT;
42 typedef struct _STRING {
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 */
60 } UNICODE_STRING, *PUNICODE_STRING;
62 typedef const UNICODE_STRING *PCUNICODE_STRING;
64 typedef struct _CLIENT_ID
68 } CLIENT_ID, *PCLIENT_ID;
70 typedef struct _CURDIR
72 UNICODE_STRING DosPath;
76 typedef struct RTL_DRIVE_LETTER_CURDIR
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;
104 HANDLE ConsoleHandle;
109 CURDIR CurrentDirectory;
110 UNICODE_STRING DllPath;
111 UNICODE_STRING ImagePathName;
112 UNICODE_STRING CommandLine;
120 ULONG dwFillAttribute;
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
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
150 /***********************************************************************
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 */
213 /***********************************************************************
216 #if defined(_NTSYSTEM_) || defined(_KERNEL32_) /* hack, should go away */
220 #ifndef WINE_NO_TEB /* don't define TEB if included from thread.h */
221 # ifndef WINE_TEB_DEFINED
222 # define WINE_TEB_DEFINED
225 NT_TIB Tib; /* 000 */
226 PVOID EnvironmentPointer; /* 01c */
227 CLIENT_ID ClientId; /* 020 */
228 PVOID ActiveRpcHandle; /* 028 */
229 PVOID ThreadLocalStoragePointer; /* 02c */
231 ULONG LastErrorValue; /* 034 */
232 ULONG CountOfOwnedCriticalSections;/* 038 */
233 PVOID CsrClientThread; /* 03c */
234 PVOID Win32ThreadInfo; /* 040 */
235 ULONG Win32ClientInfo[31]; /* 044 */
236 PVOID WOW32Reserved; /* 0c0 */
237 ULONG CurrentLocale; /* 0c4 */
238 ULONG FpSoftwareStatusRegister; /* 0c8 */
239 PVOID SystemReserved1[54]; /* 0cc */
240 PVOID Spare1; /* 1a4 */
241 LONG ExceptionCode; /* 1a8 */
242 BYTE SpareBytes1[40]; /* 1ac */
243 PVOID SystemReserved2[10]; /* 1d4 */
244 GDI_TEB_BATCH GdiTebBatch; /* 1fc */
245 ULONG gdiRgn; /* 6dc */
246 ULONG gdiPen; /* 6e0 */
247 ULONG gdiBrush; /* 6e4 */
248 CLIENT_ID RealClientId; /* 6e8 */
249 HANDLE GdiCachedProcessHandle; /* 6f0 */
250 ULONG GdiClientPID; /* 6f4 */
251 ULONG GdiClientTID; /* 6f8 */
252 PVOID GdiThreadLocaleInfo; /* 6fc */
253 PVOID UserReserved[5]; /* 700 */
254 PVOID glDispachTable[280]; /* 714 */
255 ULONG glReserved1[26]; /* b74 */
256 PVOID glReserved2; /* bdc */
257 PVOID glSectionInfo; /* be0 */
258 PVOID glSection; /* be4 */
259 PVOID glTable; /* be8 */
260 PVOID glCurrentRC; /* bec */
261 PVOID glContext; /* bf0 */
262 ULONG LastStatusValue; /* bf4 */
263 UNICODE_STRING StaticUnicodeString; /* bf8 used by advapi32 */
264 WCHAR StaticUnicodeBuffer[261]; /* c00 used by advapi32 */
265 PVOID DeallocationStack; /* e0c */
266 PVOID TlsSlots[64]; /* e10 */
267 LIST_ENTRY TlsLinks; /* f10 */
269 PVOID ReservedForNtRpc; /* f1c */
270 PVOID DbgSsReserved[2]; /* f20 */
271 ULONG HardErrorDisabled; /* f28 */
272 PVOID Instrumentation[16]; /* f2c */
273 PVOID WinSockData; /* f6c */
274 ULONG GdiBatchCount; /* f70 */
275 ULONG Spare2; /* f74 */
276 ULONG Spare3; /* f78 */
277 ULONG Spare4; /* f7c */
278 PVOID ReservedForOle; /* f80 Windows 2000 only */
279 ULONG WaitingOnLoaderLock; /* f84 */
280 PVOID Reserved5[3]; /* f88 */
281 PVOID *TlsExpansionSlots; /* f94 */
283 # endif /* WINE_TEB_DEFINED */
284 #endif /* WINE_NO_TEB */
286 /***********************************************************************
290 typedef enum _FILE_INFORMATION_CLASS {
291 FileDirectoryInformation = 1,
292 FileFullDirectoryInformation,
293 FileBothDirectoryInformation,
294 FileBasicInformation,
295 FileStandardInformation,
296 FileInternalInformation,
298 FileAccessInformation,
300 FileRenameInformation,
302 FileNamesInformation,
303 FileDispositionInformation,
304 FilePositionInformation,
305 FileFullEaInformation,
307 FileAlignmentInformation,
309 FileAllocationInformation,
310 FileEndOfFileInformation,
311 FileAlternateNameInformation,
312 FileStreamInformation,
314 FilePipeLocalInformation,
315 FilePipeRemoteInformation,
316 FileMailslotQueryInformation,
317 FileMailslotSetInformation,
318 FileCompressionInformation,
319 FileObjectIdInformation,
320 FileCompletionInformation,
321 FileMoveClusterInformation,
322 FileQuotaInformation,
323 FileReparsePointInformation,
324 FileNetworkOpenInformation,
325 FileAttributeTagInformation,
326 FileTrackingInformation,
327 FileMaximumInformation
328 } FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;
330 typedef struct _FILE_DIRECTORY_INFORMATION {
331 ULONG NextEntryOffset;
333 LARGE_INTEGER CreationTime;
334 LARGE_INTEGER LastAccessTime;
335 LARGE_INTEGER LastWriteTime;
336 LARGE_INTEGER ChangeTime;
337 LARGE_INTEGER EndOfFile;
338 LARGE_INTEGER AllocationSize;
339 ULONG FileAttributes;
340 ULONG FileNameLength;
341 WCHAR FileName[ANYSIZE_ARRAY];
342 } FILE_DIRECTORY_INFORMATION, *PFILE_DIRECTORY_INFORMATION;
344 typedef struct _FILE_FULL_DIRECTORY_INFORMATION {
345 ULONG NextEntryOffset;
347 LARGE_INTEGER CreationTime;
348 LARGE_INTEGER LastAccessTime;
349 LARGE_INTEGER LastWriteTime;
350 LARGE_INTEGER ChangeTime;
351 LARGE_INTEGER EndOfFile;
352 LARGE_INTEGER AllocationSize;
353 ULONG FileAttributes;
354 ULONG FileNameLength;
356 WCHAR FileName[ANYSIZE_ARRAY];
357 } FILE_FULL_DIRECTORY_INFORMATION, *PFILE_FULL_DIRECTORY_INFORMATION,
358 FILE_FULL_DIR_INFORMATION, *PFILE_FULL_DIR_INFORMATION;
360 typedef struct _FILE_BOTH_DIRECTORY_INFORMATION {
361 ULONG NextEntryOffset;
363 LARGE_INTEGER CreationTime;
364 LARGE_INTEGER LastAccessTime;
365 LARGE_INTEGER LastWriteTime;
366 LARGE_INTEGER ChangeTime;
367 LARGE_INTEGER EndOfFile;
368 LARGE_INTEGER AllocationSize;
369 ULONG FileAttributes;
370 ULONG FileNameLength;
372 CHAR ShortNameLength;
374 WCHAR FileName[ANYSIZE_ARRAY];
375 } FILE_BOTH_DIRECTORY_INFORMATION, *PFILE_BOTH_DIRECTORY_INFORMATION,
376 FILE_BOTH_DIR_INFORMATION, *PFILE_BOTH_DIR_INFORMATION;
378 typedef struct _FILE_BASIC_INFORMATION {
379 LARGE_INTEGER CreationTime;
380 LARGE_INTEGER LastAccessTime;
381 LARGE_INTEGER LastWriteTime;
382 LARGE_INTEGER ChangeTime;
383 ULONG FileAttributes;
384 } FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION;
386 typedef struct _FILE_STANDARD_INFORMATION {
387 LARGE_INTEGER AllocationSize;
388 LARGE_INTEGER EndOfFile;
390 BOOLEAN DeletePending;
392 } FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION;
394 typedef struct _FILE_INTERNAL_INFORMATION {
395 LARGE_INTEGER IndexNumber;
396 } FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION;
398 typedef struct _FILE_EA_INFORMATION {
400 } FILE_EA_INFORMATION, *PFILE_EA_INFORMATION;
402 typedef struct _FILE_ACCESS_INFORMATION {
403 ACCESS_MASK AccessFlags;
404 } FILE_ACCESS_INFORMATION, *PFILE_ACCESS_INFORMATION;
406 typedef struct _FILE_NAME_INFORMATION {
407 ULONG FileNameLength;
409 } FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION;
411 typedef struct _FILE_RENAME_INFORMATION {
414 ULONG FileNameLength;
416 } FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION;
418 typedef struct _FILE_NAMES_INFORMATION {
419 ULONG NextEntryOffset;
421 ULONG FileNameLength;
423 } FILE_NAMES_INFORMATION, *PFILE_NAMES_INFORMATION;
425 typedef struct _FILE_DISPOSITION_INFORMATION {
426 BOOLEAN DoDeleteFile;
427 } FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION;
429 typedef struct _FILE_POSITION_INFORMATION {
430 LARGE_INTEGER CurrentByteOffset;
431 } FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION;
433 typedef struct _FILE_ALIGNMENT_INFORMATION {
434 ULONG AlignmentRequirement;
435 } FILE_ALIGNMENT_INFORMATION, *PFILE_ALIGNMENT_INFORMATION;
437 typedef struct _FILE_ALLOCATION_INFORMATION {
438 LARGE_INTEGER AllocationSize;
439 } FILE_ALLOCATION_INFORMATION, *PFILE_ALLOCATION_INFORMATION;
441 typedef struct _FILE_END_OF_FILE_INFORMATION {
442 LARGE_INTEGER EndOfFile;
443 } FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION;
445 typedef struct _FILE_NETWORK_OPEN_INFORMATION {
446 LARGE_INTEGER CreationTime;
447 LARGE_INTEGER LastAccessTime;
448 LARGE_INTEGER LastWriteTime;
449 LARGE_INTEGER ChangeTime;
450 LARGE_INTEGER AllocationSize;
451 LARGE_INTEGER EndOfFile;
452 ULONG FileAttributes;
453 } FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION;
455 typedef struct _FILE_FULL_EA_INFORMATION {
456 ULONG NextEntryOffset;
459 USHORT EaValueLength;
461 } FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION;
463 typedef struct _FILE_MODE_INFORMATION {
465 } FILE_MODE_INFORMATION, *PFILE_MODE_INFORMATION;
467 typedef struct _FILE_STREAM_INFORMATION
469 ULONG NextEntryOffset;
470 ULONG StreamNameLength;
471 LARGE_INTEGER StreamSize;
472 LARGE_INTEGER StreamAllocationSize;
474 } FILE_STREAM_INFORMATION, *PFILE_STREAM_INFORMATION;
476 typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION
478 ULONG FileAttributes;
480 } FILE_ATTRIBUTE_TAG_INFORMATION, *PFILE_ATTRIBUTE_TAG_INFORMATION;
482 typedef struct _FILE_MAILSLOT_QUERY_INFORMATION {
483 ULONG MaximumMessageSize;
485 ULONG NextMessageSize;
486 ULONG MessagesAvailable;
487 LARGE_INTEGER ReadTimeout;
488 } FILE_MAILSLOT_QUERY_INFORMATION, *PFILE_MAILSLOT_QUERY_INFORMATION;
490 typedef struct _FILE_MAILSLOT_SET_INFORMATION {
491 LARGE_INTEGER ReadTimeout;
492 } FILE_MAILSLOT_SET_INFORMATION, *PFILE_MAILSLOT_SET_INFORMATION;
494 typedef struct _FILE_ALL_INFORMATION
496 FILE_BASIC_INFORMATION BasicInformation;
497 FILE_STANDARD_INFORMATION StandardInformation;
498 FILE_INTERNAL_INFORMATION InternalInformation;
499 FILE_EA_INFORMATION EaInformation;
500 FILE_ACCESS_INFORMATION AccessInformation;
501 FILE_POSITION_INFORMATION PositionInformation;
502 FILE_MODE_INFORMATION ModeInformation;
503 FILE_ALIGNMENT_INFORMATION AlignmentInformation;
504 FILE_NAME_INFORMATION NameInformation;
505 } FILE_ALL_INFORMATION, *PFILE_ALL_INFORMATION;
507 typedef enum _FSINFOCLASS {
508 FileFsVolumeInformation = 1,
509 FileFsLabelInformation,
510 FileFsSizeInformation,
511 FileFsDeviceInformation,
512 FileFsAttributeInformation,
513 FileFsControlInformation,
514 FileFsFullSizeInformation,
515 FileFsObjectIdInformation,
516 FileFsMaximumInformation
517 } FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS;
519 typedef enum _KEY_INFORMATION_CLASS {
523 } KEY_INFORMATION_CLASS;
525 typedef enum _KEY_VALUE_INFORMATION_CLASS {
526 KeyValueBasicInformation,
527 KeyValueFullInformation,
528 KeyValuePartialInformation,
529 KeyValueFullInformationAlign64,
530 KeyValuePartialInformationAlign64
531 } KEY_VALUE_INFORMATION_CLASS;
533 typedef enum _OBJECT_INFORMATION_CLASS {
534 ObjectBasicInformation,
535 ObjectNameInformation,
536 ObjectTypeInformation,
537 ObjectAllInformation,
538 ObjectDataInformation
539 } OBJECT_INFORMATION_CLASS, *POBJECT_INFORMATION_CLASS;
541 typedef enum _PROCESSINFOCLASS {
542 ProcessBasicInformation = 0,
543 ProcessQuotaLimits = 1,
544 ProcessIoCounters = 2,
545 ProcessVmCounters = 3,
547 ProcessBasePriority = 5,
548 ProcessRaisePriority = 6,
549 ProcessDebugPort = 7,
550 ProcessExceptionPort = 8,
551 ProcessAccessToken = 9,
552 ProcessLdtInformation = 10,
554 ProcessDefaultHardErrorMode = 12,
555 ProcessIoPortHandlers = 13,
556 ProcessPooledUsageAndLimits = 14,
557 ProcessWorkingSetWatch = 15,
558 ProcessUserModeIOPL = 16,
559 ProcessEnableAlignmentFaultFixup = 17,
560 ProcessPriorityClass = 18,
561 ProcessWx86Information = 19,
562 ProcessHandleCount = 20,
563 ProcessAffinityMask = 21,
564 ProcessPriorityBoost = 22,
565 ProcessDeviceMap = 23,
566 ProcessSessionInformation = 24,
567 ProcessForegroundInformation = 25,
568 ProcessWow64Information = 26,
572 typedef enum _SECTION_INHERIT {
577 typedef enum _SYSTEM_INFORMATION_CLASS {
578 SystemBasicInformation = 0,
579 SystemCpuInformation = 1,
580 SystemPerformanceInformation = 2,
581 SystemTimeOfDayInformation = 3, /* was SystemTimeInformation */
583 SystemProcessInformation = 5,
586 SystemProcessorPerformanceInformation = 8,
589 SystemDriverInformation = 11,
594 SystemHandleInformation = 16,
596 SystemPageFileInformation = 18,
599 SystemCacheInformation = 21,
601 SystemInterruptInformation = 23,
602 SystemDpcBehaviourInformation = 24,
603 SystemFullMemoryInformation = 25,
604 SystemNotImplemented6 = 25,
605 SystemLoadImage = 26,
606 SystemUnloadImage = 27,
607 SystemTimeAdjustmentInformation = 28,
608 SystemTimeAdjustment = 28,
609 SystemSummaryMemoryInformation = 29,
610 SystemNotImplemented7 = 29,
611 SystemNextEventIdInformation = 30,
612 SystemNotImplemented8 = 30,
613 SystemEventIdsInformation = 31,
614 SystemCrashDumpInformation = 32,
615 SystemExceptionInformation = 33,
616 SystemCrashDumpStateInformation = 34,
617 SystemKernelDebuggerInformation = 35,
618 SystemContextSwitchInformation = 36,
619 SystemRegistryQuotaInformation = 37,
620 SystemCurrentTimeZoneInformation = 44,
621 SystemTimeZoneInformation = 44,
622 SystemLookasideInformation = 45,
623 SystemSetTimeSlipEvent = 46,
624 SystemCreateSession = 47,
625 SystemDeleteSession = 48,
626 SystemInvalidInfoClass4 = 49,
627 SystemRangeStartInformation = 50,
628 SystemVerifierInformation = 51,
629 SystemAddVerifier = 52,
630 SystemSessionProcessesInformation = 53,
631 SystemInformationClassMax
632 } SYSTEM_INFORMATION_CLASS, *PSYSTEM_INFORMATION_CLASS;
634 typedef enum _TIMER_TYPE {
639 typedef enum _THREADINFOCLASS {
640 ThreadBasicInformation,
645 ThreadImpersonationToken,
646 ThreadDescriptorTableEntry,
647 ThreadEnableAlignmentFaultFixup,
648 ThreadEventPair_Reusable,
649 ThreadQuerySetWin32StartAddress,
651 ThreadPerformanceCount,
653 ThreadIdealProcessor,
655 ThreadSetTlsArrayAddress,
660 typedef struct _THREAD_BASIC_INFORMATION
663 PVOID TebBaseAddress;
668 } THREAD_BASIC_INFORMATION, *PTHREAD_BASIC_INFORMATION;
671 typedef enum _WINSTATIONINFOCLASS {
672 WinStationInformation = 8
673 } WINSTATIONINFOCLASS;
675 typedef enum _MEMORY_INFORMATION_CLASS {
676 MemoryBasicInformation,
677 MemoryWorkingSetList,
679 MemoryBasicVlmInformation
680 } MEMORY_INFORMATION_CLASS;
682 typedef enum _MUTANT_INFORMATION_CLASS
684 MutantBasicInformation
685 } MUTANT_INFORMATION_CLASS, *PMUTANT_INFORMATION_CLASS;
687 typedef struct _MUTANT_BASIC_INFORMATION {
689 BOOLEAN OwnedByCaller;
690 BOOLEAN AbandonedState;
691 } MUTANT_BASIC_INFORMATION, *PMUTANT_BASIC_INFORMATION;
693 typedef enum _TIMER_INFORMATION_CLASS
695 TimerBasicInformation = 0
696 } TIMER_INFORMATION_CLASS;
698 typedef struct _TIMER_BASIC_INFORMATION
700 LARGE_INTEGER RemainingTime;
702 } TIMER_BASIC_INFORMATION, *PTIMER_BASIC_INFORMATION;
705 /* return type of RtlDetermineDosPathNameType_U (FIXME: not the correct names) */
709 UNC_PATH, /* "//foo" */
710 ABSOLUTE_DRIVE_PATH, /* "c:/foo" */
711 RELATIVE_DRIVE_PATH, /* "c:foo" */
712 ABSOLUTE_PATH, /* "/foo" */
713 RELATIVE_PATH, /* "foo" */
714 DEVICE_PATH, /* "//./foo" */
715 UNC_DOT_PATH /* "//." */
718 /***********************************************************************
719 * IA64 specific types and data structures
724 typedef struct _FRAME_POINTERS {
725 ULONGLONG MemoryStackFp;
726 ULONGLONG BackingStoreFp;
727 } FRAME_POINTERS, *PFRAME_POINTERS;
729 #define UNWIND_HISTORY_TABLE_SIZE 12
731 typedef struct _RUNTIME_FUNCTION {
734 ULONG UnwindInfoAddress;
735 } RUNTIME_FUNCTION, *PRUNTIME_FUNCTION;
737 typedef struct _UNWIND_HISTORY_TABLE_ENTRY {
740 PRUNTIME_FUNCTION FunctionEntry;
741 } UNWIND_HISTORY_TABLE_ENTRY, *PUNWIND_HISTORY_TABLE_ENTRY;
743 typedef struct _UNWIND_HISTORY_TABLE {
748 UNWIND_HISTORY_TABLE_ENTRY Entry[UNWIND_HISTORY_TABLE_SIZE];
749 } UNWIND_HISTORY_TABLE, *PUNWIND_HISTORY_TABLE;
751 #endif /* defined(__ia64__) */
753 /***********************************************************************
754 * Types and data structures
757 /* This is used by NtQuerySystemInformation */
758 typedef struct _SYSTEM_THREAD_INFORMATION{
759 FILETIME ftKernelTime;
761 FILETIME ftCreateTime;
763 DWORD dwStartAddress;
766 DWORD dwCurrentPriority;
767 DWORD dwBasePriority;
768 DWORD dwContextSwitches;
771 } SYSTEM_THREAD_INFORMATION, *PSYSTEM_THREAD_INFORMATION;
773 typedef struct _IO_STATUS_BLOCK {
779 ULONG_PTR Information;
780 } IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
782 typedef void (WINAPI * PIO_APC_ROUTINE)(PVOID,PIO_STATUS_BLOCK,ULONG);
784 typedef struct _KEY_BASIC_INFORMATION {
785 LARGE_INTEGER LastWriteTime;
789 } KEY_BASIC_INFORMATION, *PKEY_BASIC_INFORMATION;
791 typedef struct _KEY_NODE_INFORMATION
793 LARGE_INTEGER LastWriteTime;
800 } KEY_NODE_INFORMATION, *PKEY_NODE_INFORMATION;
802 typedef struct _KEY_FULL_INFORMATION
804 LARGE_INTEGER LastWriteTime;
812 ULONG MaxValueNameLen;
813 ULONG MaxValueDataLen;
815 } KEY_FULL_INFORMATION, *PKEY_FULL_INFORMATION;
817 typedef struct _KEY_VALUE_ENTRY
819 PUNICODE_STRING ValueName;
823 } KEY_VALUE_ENTRY, *PKEY_VALUE_ENTRY;
825 typedef struct _KEY_VALUE_BASIC_INFORMATION {
830 } KEY_VALUE_BASIC_INFORMATION, *PKEY_VALUE_BASIC_INFORMATION;
832 typedef struct _KEY_VALUE_FULL_INFORMATION {
839 } KEY_VALUE_FULL_INFORMATION, *PKEY_VALUE_FULL_INFORMATION;
841 typedef struct _KEY_VALUE_PARTIAL_INFORMATION {
846 } KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION;
848 typedef struct _OBJECT_ATTRIBUTES {
850 HANDLE RootDirectory;
851 PUNICODE_STRING ObjectName;
853 PVOID SecurityDescriptor; /* type SECURITY_DESCRIPTOR */
854 PVOID SecurityQualityOfService; /* type SECURITY_QUALITY_OF_SERVICE */
855 } OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;
857 typedef struct _OBJECT_DATA_INFORMATION {
858 BOOLEAN InheritHandle;
859 BOOLEAN ProtectFromClose;
860 } OBJECT_DATA_INFORMATION, *POBJECT_DATA_INFORMATION;
862 typedef struct _PROCESS_BASIC_INFORMATION {
865 DWORD PebBaseAddress;
868 ULONG UniqueProcessId;
869 ULONG InheritedFromUniqueProcessId;
874 ULONG_PTR UniqueProcessId;
877 } PROCESS_BASIC_INFORMATION, *PPROCESS_BASIC_INFORMATION;
879 typedef struct _RTL_HEAP_DEFINITION {
880 ULONG Length; /* = sizeof(RTL_HEAP_DEFINITION) */
883 } RTL_HEAP_DEFINITION, *PRTL_HEAP_DEFINITION;
885 typedef struct _RTL_RWLOCK {
886 RTL_CRITICAL_SECTION rtlCS;
888 HANDLE hSharedReleaseSemaphore;
891 HANDLE hExclusiveReleaseSemaphore;
892 UINT uExclusiveWaiters;
895 HANDLE hOwningThreadId;
896 DWORD dwTimeoutBoost;
898 } RTL_RWLOCK, *LPRTL_RWLOCK;
900 /* System Information Class 0x00 */
902 typedef struct _SYSTEM_BASIC_INFORMATION {
905 ULONG uKeMaximumIncrement;
907 ULONG uMmNumberOfPhysicalPages;
908 ULONG uMmLowestPhysicalPage;
909 ULONG uMmHighestPhysicalPage;
910 ULONG uAllocationGranularity;
911 PVOID pLowestUserAddress;
912 PVOID pMmHighestUserAddress;
913 ULONG uKeActiveProcessors;
914 BYTE bKeNumberProcessors;
920 CCHAR NumberOfProcessors;
922 } SYSTEM_BASIC_INFORMATION, *PSYSTEM_BASIC_INFORMATION;
924 /* System Information Class 0x01 */
926 typedef struct _SYSTEM_CPU_INFORMATION {
929 WORD Revision; /* combination of CPU model and stepping */
930 WORD Reserved; /* always zero */
931 DWORD FeatureSet; /* see bit flags below */
932 } SYSTEM_CPU_INFORMATION, *PSYSTEM_CPU_INFORMATION;
934 /* definitions of bits in the Feature set for the x86 processors */
935 #define CPU_FEATURE_VME 0x00000005 /* Virtual 86 Mode Extensions */
936 #define CPU_FEATURE_TSC 0x00000002 /* Time Stamp Counter available */
937 #define CPU_FEATURE_CMOV 0x00000008 /* Conditional Move instruction*/
938 #define CPU_FEATURE_PGE 0x00000014 /* Page table Entry Global bit */
939 #define CPU_FEATURE_PSE 0x00000024 /* Page Size Extension */
940 #define CPU_FEATURE_MTRR 0x00000040 /* Memory Type Range Registers */
941 #define CPU_FEATURE_CX8 0x00000080 /* Compare and eXchange 8 byte instr. */
942 #define CPU_FEATURE_MMX 0x00000100 /* Multi Media eXtensions */
943 #define CPU_FEATURE_X86 0x00000200 /* seems to be alway ON, on the '86 */
944 #define CPU_FEATURE_PAT 0x00000400 /* Page Attribute Table */
945 #define CPU_FEATURE_FXSR 0x00000800 /* FXSAVE and FXSTORE instructions */
946 #define CPU_FEATURE_SEP 0x00001000 /* SYSENTER and SYSEXIT instructions */
947 #define CPU_FEATURE_SSE 0x00002000 /* SSE extenstions (ext. MMX) */
948 #define CPU_FEATURE_3DNOW 0x00008000 /* 3DNOW instructions available
949 (FIXME: needs to be confirmed) */
950 #define CPU_FEATURE_SSE2 0x00010000 /* SSE2 extensions (XMMI64) */
951 #define CPU_FEATURE_DS 0x00020000 /* Debug Store */
952 #define CPU_FEATURE_HTT 0x00040000 /* Hyper Threading Technology */
954 /* System Information Class 0x02 */
956 typedef struct _SYSTEM_PERFORMANCE_INFORMATION {
958 } SYSTEM_PERFORMANCE_INFORMATION, *PSYSTEM_PERFORMANCE_INFORMATION;
960 /* System Information Class 0x03 */
962 typedef struct _SYSTEM_TIMEOFDAY_INFORMATION {
964 LARGE_INTEGER liKeBootTime;
965 LARGE_INTEGER liKeSystemTime;
966 LARGE_INTEGER liExpTimeZoneBias;
967 ULONG uCurrentTimeZoneId;
972 } SYSTEM_TIMEOFDAY_INFORMATION, *PSYSTEM_TIMEOFDAY_INFORMATION; /* was SYSTEM_TIME_INFORMATION */
974 /* System Information Class 0x08 */
976 typedef struct _SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION {
978 LARGE_INTEGER liIdleTime;
981 LARGE_INTEGER IdleTime;
982 LARGE_INTEGER KernelTime;
983 LARGE_INTEGER UserTime;
984 LARGE_INTEGER Reserved1[2];
987 } SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION, *PSYSTEM_PROCESSOR_PERFORMANCE_INFORMATION;
989 /* System Information Class 0x0b */
991 typedef struct _SYSTEM_DRIVER_INFORMATION {
997 char szName[MAX_PATH + 1];
998 } SYSTEM_DRIVER_INFORMATION, *PSYSTEM_DRIVER_INFORMATION;
1000 /* System Information Class 0x10 */
1002 typedef struct _SYSTEM_HANDLE_ENTRY {
1007 PVOID ObjectPointer;
1009 } SYSTEM_HANDLE_ENTRY, *PSYSTEM_HANDLE_ENTRY;
1011 typedef struct _SYSTEM_HANDLE_INFORMATION {
1013 SYSTEM_HANDLE_ENTRY Handle[1];
1014 } SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION;
1016 /* System Information Class 0x15 */
1018 typedef struct _SYSTEM_CACHE_INFORMATION {
1021 ULONG PageFaultCount;
1022 ULONG MinimumWorkingSet;
1023 ULONG MaximumWorkingSet;
1025 } SYSTEM_CACHE_INFORMATION, *PSYSTEM_CACHE_INFORMATION;
1027 /* System Information Class 0x17 */
1029 typedef struct _SYSTEM_INTERRUPT_INFORMATION {
1031 } SYSTEM_INTERRUPT_INFORMATION, *PSYSTEM_INTERRUPT_INFORMATION;
1033 typedef struct _SYSTEM_CONFIGURATION_INFO {
1037 WORD ProcessorArchitecture;
1042 PVOID MinimumApplicationAddress;
1043 PVOID MaximumApplicationAddress;
1044 ULONG ActiveProcessorMask;
1045 ULONG NumberOfProcessors;
1046 ULONG ProcessorType;
1047 ULONG AllocationGranularity;
1048 WORD ProcessorLevel;
1049 WORD ProcessorRevision;
1050 } SYSTEM_CONFIGURATION_INFO, *PSYSTEM_CONFIGURATION_INFO;
1052 typedef struct _SYSTEM_EXCEPTION_INFORMATION {
1054 } SYSTEM_EXCEPTION_INFORMATION, *PSYSTEM_EXCEPTION_INFORMATION;
1056 typedef struct _SYSTEM_LOOKASIDE_INFORMATION {
1058 } SYSTEM_LOOKASIDE_INFORMATION, *PSYSTEM_LOOKASIDE_INFORMATION;
1060 typedef struct _SYSTEM_KERNEL_DEBUGGER_INFORMATION {
1061 BOOLEAN DebuggerEnabled;
1062 BOOLEAN DebuggerNotPresent;
1063 } SYSTEM_KERNEL_DEBUGGER_INFORMATION, *PSYSTEM_KERNEL_DEBUGGER_INFORMATION;
1065 /* System Information Class 0x05 */
1066 typedef struct _SYSTEM_PROCESS_INFORMATION {
1069 DWORD dwThreadCount;
1070 DWORD dwUnknown1[6];
1071 FILETIME ftCreationTime;
1072 DWORD dwUnknown2[5];
1073 WCHAR *pszProcessName;
1074 DWORD dwBasePriority;
1076 DWORD dwParentProcessID;
1077 DWORD dwHandleCount;
1080 DWORD dwVirtualBytesPeak;
1081 DWORD dwVirtualBytes;
1083 DWORD dwWorkingSetPeak;
1088 DWORD dwNonPagedPool;
1089 DWORD dwPageFileBytesPeak;
1090 DWORD dwPrivateBytes;
1091 DWORD dwPageFileBytes;
1092 DWORD dwUnknown7[4];
1093 SYSTEM_THREAD_INFORMATION ti[1];
1095 ULONG NextEntryOffset;
1098 HANDLE UniqueProcessId;
1102 PVOID Reserved5[11];
1103 SIZE_T PeakPagefileUsage;
1104 SIZE_T PrivatePageCount;
1105 LARGE_INTEGER Reserved6[6];
1107 } SYSTEM_PROCESS_INFORMATION, *PSYSTEM_PROCESS_INFORMATION;
1109 typedef struct _SYSTEM_REGISTRY_QUOTA_INFORMATION {
1110 ULONG RegistryQuotaAllowed;
1111 ULONG RegistryQuotaUsed;
1113 } SYSTEM_REGISTRY_QUOTA_INFORMATION, *PSYSTEM_REGISTRY_QUOTA_INFORMATION;
1115 typedef struct _SYSTEM_TIME_ADJUSTMENT {
1116 ULONG TimeAdjustment;
1117 BOOLEAN TimeAdjustmentDisabled;
1118 } SYSTEM_TIME_ADJUSTMENT, *PSYSTEM_TIME_ADJUSTMENT;
1120 typedef struct _TIME_FIELDS
1127 CSHORT Milliseconds;
1129 } TIME_FIELDS, *PTIME_FIELDS;
1131 typedef struct _WINSTATIONINFORMATIONW {
1134 BYTE Reserved3[1140];
1135 } WINSTATIONINFORMATIONW, *PWINSTATIONINFORMATIONW;
1137 typedef struct _VM_COUNTERS_ {
1138 SIZE_T PeakVirtualSize;
1140 ULONG PageFaultCount;
1141 SIZE_T PeakWorkingSetSize;
1142 SIZE_T WorkingSetSize;
1143 SIZE_T QuotaPeakPagedPoolUsage;
1144 SIZE_T QuotaPagedPoolUsage;
1145 SIZE_T QuotaPeakNonPagedPoolUsage;
1146 SIZE_T QuotaNonPagedPoolUsage;
1147 SIZE_T PagefileUsage;
1148 SIZE_T PeakPagefileUsage;
1149 } VM_COUNTERS, *PVM_COUNTERS;
1151 typedef BOOLEAN (WINAPI * PWINSTATIONQUERYINFORMATIONW)(HANDLE,ULONG,WINSTATIONINFOCLASS,PVOID,ULONG,PULONG);
1153 typedef struct _LDR_RESOURCE_INFO
1158 } LDR_RESOURCE_INFO, *PLDR_RESOURCE_INFO;
1161 /* debug buffer definitions */
1163 typedef struct _DEBUG_BUFFER {
1164 HANDLE SectionHandle;
1166 PVOID RemoteSectionBase;
1167 ULONG SectionBaseDelta;
1168 HANDLE EventPairHandle;
1170 HANDLE RemoteThreadHandle;
1171 ULONG InfoClassMask;
1173 ULONG AllocatedSize;
1175 PVOID ModuleInformation;
1176 PVOID BackTraceInformation;
1177 PVOID HeapInformation;
1178 PVOID LockInformation;
1180 } DEBUG_BUFFER, *PDEBUG_BUFFER;
1182 #define PDI_MODULES 0x01
1183 #define PDI_BACKTRACE 0x02
1184 #define PDI_HEAPS 0x04
1185 #define PDI_HEAP_TAGS 0x08
1186 #define PDI_HEAP_BLOCKS 0x10
1187 #define PDI_LOCKS 0x20
1189 typedef struct _DEBUG_MODULE_INFORMATION {
1197 USHORT ModuleNameOffset;
1198 CHAR ImageName[256];
1199 } DEBUG_MODULE_INFORMATION, *PDEBUG_MODULE_INFORMATION;
1201 typedef struct _DEBUG_HEAP_INFORMATION {
1213 } DEBUG_HEAP_INFORMATION, *PDEBUG_HEAP_INFORMATION;
1215 typedef struct _DEBUG_LOCK_INFORMATION {
1218 USHORT CreatorBackTraceIndex;
1219 ULONG OwnerThreadId;
1221 ULONG ContentionCount;
1223 ULONG RecursionCount;
1224 ULONG NumberOfSharedWaiters;
1225 ULONG NumberOfExclusiveWaiters;
1226 } DEBUG_LOCK_INFORMATION, *PDEBUG_LOCK_INFORMATION;
1228 typedef struct _PORT_MESSAGE_HEADER {
1232 USHORT VirtualRangesOffset;
1236 } PORT_MESSAGE_HEADER, *PPORT_MESSAGE_HEADER, PORT_MESSAGE, *PPORT_MESSAGE;
1238 typedef unsigned short RTL_ATOM, *PRTL_ATOM;
1240 /* Wine doesn't implement atom table as NT does:
1241 * - in NT, atom tables are user space tables, which ntdll directly accesses
1242 * - on Wine, (even local) atom tables are wineserver object, hence a HANDLE
1244 typedef struct atom_table *RTL_ATOM_TABLE, **PRTL_ATOM_TABLE;
1246 typedef enum _ATOM_INFORMATION_CLASS {
1247 AtomBasicInformation = 0,
1248 AtomTableInformation = 1,
1249 } ATOM_INFORMATION_CLASS;
1251 typedef struct _ATOM_BASIC_INFORMATION {
1252 USHORT ReferenceCount;
1256 } ATOM_BASIC_INFORMATION, *PATOM_BASIC_INFORMATION;
1258 /* FIXME: names probably not correct */
1259 typedef struct _RTL_HANDLE
1261 struct _RTL_HANDLE * Next;
1264 /* FIXME: names probably not correct */
1265 typedef struct _RTL_HANDLE_TABLE
1267 ULONG MaxHandleCount; /* 0x00 */
1268 ULONG HandleSize; /* 0x04 */
1269 ULONG Unused[2]; /* 0x08-0x0c */
1270 PVOID NextFree; /* 0x10 */
1271 PVOID FirstHandle; /* 0x14 */
1272 PVOID ReservedMemory; /* 0x18 */
1273 PVOID MaxHandle; /* 0x1c */
1276 /***********************************************************************
1280 /* flags for NtCreateFile and NtOpenFile */
1281 #define FILE_DIRECTORY_FILE 0x00000001
1282 #define FILE_WRITE_THROUGH 0x00000002
1283 #define FILE_SEQUENTIAL_ONLY 0x00000004
1284 #define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008
1285 #define FILE_SYNCHRONOUS_IO_ALERT 0x00000010
1286 #define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020
1287 #define FILE_NON_DIRECTORY_FILE 0x00000040
1288 #define FILE_CREATE_TREE_CONNECTION 0x00000080
1289 #define FILE_COMPLETE_IF_OPLOCKED 0x00000100
1290 #define FILE_NO_EA_KNOWLEDGE 0x00000200
1291 #define FILE_OPEN_FOR_RECOVERY 0x00000400
1292 #define FILE_RANDOM_ACCESS 0x00000800
1293 #define FILE_DELETE_ON_CLOSE 0x00001000
1294 #define FILE_OPEN_BY_FILE_ID 0x00002000
1295 #define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000
1296 #define FILE_NO_COMPRESSION 0x00008000
1297 #define FILE_RESERVE_OPFILTER 0x00100000
1298 #define FILE_TRANSACTED_MODE 0x00200000
1299 #define FILE_OPEN_OFFLINE_FILE 0x00400000
1300 #define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000
1302 #define FILE_ATTRIBUTE_VALID_FLAGS 0x00007fb7
1303 #define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x000031a7
1305 /* status for NtCreateFile or NtOpenFile */
1306 #define FILE_SUPERSEDED 0
1307 #define FILE_OPENED 1
1308 #define FILE_CREATED 2
1309 #define FILE_OVERWRITTEN 3
1310 #define FILE_EXISTS 4
1311 #define FILE_DOES_NOT_EXIST 5
1313 /* disposition for NtCreateFile */
1314 #define FILE_SUPERSEDE 0
1316 #define FILE_CREATE 2
1317 #define FILE_OPEN_IF 3
1318 #define FILE_OVERWRITE 4
1319 #define FILE_OVERWRITE_IF 5
1320 #define FILE_MAXIMUM_DISPOSITION 5
1322 /* Characteristics of a File System */
1323 #define FILE_REMOVABLE_MEDIA 0x00000001
1324 #define FILE_READ_ONLY_DEVICE 0x00000002
1325 #define FILE_FLOPPY_DISKETTE 0x00000004
1326 #define FILE_WRITE_ONE_MEDIA 0x00000008
1327 #define FILE_REMOTE_DEVICE 0x00000010
1328 #define FILE_DEVICE_IS_MOUNTED 0x00000020
1329 #define FILE_VIRTUAL_VOLUME 0x00000040
1330 #define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080
1331 #define FILE_DEVICE_SECURE_OPEN 0x00000100
1333 /* options for NtCreateNamedPipeFile */
1334 #define FILE_PIPE_INBOUND 0x00000000
1335 #define FILE_PIPE_OUTBOUND 0x00000001
1336 #define FILE_PIPE_FULL_DUPLEX 0x00000002
1338 #if (_WIN32_WINNT >= 0x0501)
1339 #define INTERNAL_TS_ACTIVE_CONSOLE_ID ( *((volatile ULONG*)(0x7ffe02d8)) )
1340 #endif /* (_WIN32_WINNT >= 0x0501) */
1342 #define LOGONID_CURRENT ((ULONG)-1)
1344 #define OBJ_INHERIT 0x00000002L
1345 #define OBJ_PERMANENT 0x00000010L
1346 #define OBJ_EXCLUSIVE 0x00000020L
1347 #define OBJ_CASE_INSENSITIVE 0x00000040L
1348 #define OBJ_OPENIF 0x00000080L
1349 #define OBJ_OPENLINK 0x00000100L
1350 #define OBJ_KERNEL_HANDLE 0x00000200L
1351 #define OBJ_VALID_ATTRIBUTES 0x000003F2L
1353 #define SERVERNAME_CURRENT ((HANDLE)NULL)
1355 typedef void (CALLBACK *PNTAPCFUNC)(ULONG_PTR,ULONG_PTR,ULONG_PTR); /* FIXME: not the right name */
1356 typedef void (CALLBACK *PRTL_THREAD_START_ROUTINE)(LPVOID); /* FIXME: not the right name */
1359 /* DbgPrintEx default levels */
1360 #define DPFLTR_ERROR_LEVEL 0
1361 #define DPFLTR_WARNING_LEVEL 1
1362 #define DPFLTR_TRACE_LEVEL 2
1363 #define DPFLTR_INFO_LEVEL 3
1364 #define DPFLTR_MASK 0x8000000
1366 /* Well-known LUID values */
1367 #define SE_MIN_WELL_KNOWN_PRIVILEGE 2L
1368 #define SE_CREATE_TOKEN_PRIVILEGE 2L
1369 #define SE_ASSIGNPRIMARYTOKEN_PRIVILEGE 3L
1370 #define SE_LOCK_MEMORY_PRIVILEGE 4L
1371 #define SE_INCREASE_QUOTA_PRIVILEGE 5L
1372 #define SE_UNSOLICITED_INPUT_PRIVILEGE 6L /* obsolete */
1373 #define SE_MACHINE_ACCOUNT_PRIVILEGE 6L
1374 #define SE_TCB_PRIVILEGE 7L
1375 #define SE_SECURITY_PRIVILEGE 8L
1376 #define SE_TAKE_OWNERSHIP_PRIVILEGE 9L
1377 #define SE_LOAD_DRIVER_PRIVILEGE 10L
1378 #define SE_SYSTEM_PROFILE_PRIVILEGE 11L
1379 #define SE_SYSTEMTIME_PRIVILEGE 12L
1380 #define SE_PROF_SINGLE_PROCESS_PRIVILEGE 13L
1381 #define SE_INC_BASE_PRIORITY_PRIVILEGE 14L
1382 #define SE_CREATE_PAGEFILE_PRIVILEGE 15L
1383 #define SE_CREATE_PERMANENT_PRIVILEGE 16L
1384 #define SE_BACKUP_PRIVILEGE 17L
1385 #define SE_RESTORE_PRIVILEGE 18L
1386 #define SE_SHUTDOWN_PRIVILEGE 19L
1387 #define SE_DEBUG_PRIVILEGE 20L
1388 #define SE_AUDIT_PRIVILEGE 21L
1389 #define SE_SYSTEM_ENVIRONMENT_PRIVILEGE 22L
1390 #define SE_CHANGE_NOTIFY_PRIVILLEGE 23L
1391 #define SE_REMOTE_SHUTDOWN_PRIVILEGE 24L
1392 #define SE_UNDOCK_PRIVILEGE 25L
1393 #define SE_SYNC_AGENT_PRIVILEGE 26L
1394 #define SE_ENABLE_DELEGATION_PRIVILEGE 27L
1395 #define SE_MANAGE_VOLUME_PRIVILEGE 28L
1396 #define SE_IMPERSONATE_PRIVILEGE 29L
1397 #define SE_CREATE_GLOBAL_PRIVILEGE 30L
1398 #define SE_MAX_WELL_KNOWN_PRIVILEGE SE_CREATE_GLOBAL_PRIVILEGE
1401 /* Rtl*Registry* functions structs and defines */
1402 #define RTL_REGISTRY_ABSOLUTE 0
1403 #define RTL_REGISTRY_SERVICES 1
1404 #define RTL_REGISTRY_CONTROL 2
1405 #define RTL_REGISTRY_WINDOWS_NT 3
1406 #define RTL_REGISTRY_DEVICEMAP 4
1407 #define RTL_REGISTRY_USER 5
1409 #define RTL_REGISTRY_HANDLE 0x40000000
1410 #define RTL_REGISTRY_OPTIONAL 0x80000000
1412 #define RTL_QUERY_REGISTRY_SUBKEY 0x00000001
1413 #define RTL_QUERY_REGISTRY_TOPKEY 0x00000002
1414 #define RTL_QUERY_REGISTRY_REQUIRED 0x00000004
1415 #define RTL_QUERY_REGISTRY_NOVALUE 0x00000008
1416 #define RTL_QUERY_REGISTRY_NOEXPAND 0x00000010
1417 #define RTL_QUERY_REGISTRY_DIRECT 0x00000020
1418 #define RTL_QUERY_REGISTRY_DELETE 0x00000040
1420 typedef NTSTATUS (WINAPI *PRTL_QUERY_REGISTRY_ROUTINE)( PCWSTR ValueName,
1425 PVOID EntryContext);
1427 typedef struct _RTL_QUERY_REGISTRY_TABLE
1429 PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine;
1435 ULONG DefaultLength;
1436 } RTL_QUERY_REGISTRY_TABLE, *PRTL_QUERY_REGISTRY_TABLE;
1439 /***********************************************************************
1440 * Function declarations
1443 extern LPSTR _strlwr(LPSTR str); /* FIXME: Doesn't belong here */
1444 extern LPSTR _strupr(LPSTR str); /* FIXME: Doesn't belong here */
1446 #if defined(__i386__) && defined(__GNUC__)
1447 static inline void WINAPI DbgBreakPoint(void) { __asm__ __volatile__("int3"); }
1448 static inline void WINAPI DbgUserBreakPoint(void) { __asm__ __volatile__("int3"); }
1449 #else /* __i386__ && __GNUC__ */
1450 void WINAPI DbgBreakPoint(void);
1451 void WINAPI DbgUserBreakPoint(void);
1452 #endif /* __i386__ && __GNUC__ */
1453 NTSTATUS WINAPIV DbgPrint(LPCSTR fmt, ...);
1454 NTSTATUS WINAPIV DbgPrintEx(ULONG iComponentId, ULONG Level, LPCSTR fmt, ...);
1456 NTSTATUS WINAPI LdrAccessResource(HMODULE,const IMAGE_RESOURCE_DATA_ENTRY*,void**,PULONG);
1457 NTSTATUS WINAPI LdrFindResourceDirectory_U(HMODULE,const LDR_RESOURCE_INFO*,ULONG,const IMAGE_RESOURCE_DIRECTORY**);
1458 NTSTATUS WINAPI LdrFindResource_U(HMODULE,const LDR_RESOURCE_INFO*,ULONG,const IMAGE_RESOURCE_DATA_ENTRY**);
1459 NTSTATUS WINAPI LdrGetDllHandle(ULONG, ULONG, const UNICODE_STRING*, HMODULE*);
1460 NTSTATUS WINAPI LdrGetProcedureAddress(HMODULE, const ANSI_STRING*, ULONG, void**);
1461 void WINAPI LdrInitializeThunk(HANDLE,ULONG,ULONG,ULONG);
1462 NTSTATUS WINAPI LdrLoadDll(LPCWSTR, DWORD, const UNICODE_STRING*, HMODULE*);
1463 void WINAPI LdrShutdownProcess(void);
1464 void WINAPI LdrShutdownThread(void);
1465 NTSTATUS WINAPI NtAccessCheck(PSECURITY_DESCRIPTOR,HANDLE,ACCESS_MASK,PGENERIC_MAPPING,PPRIVILEGE_SET,PULONG,PULONG,NTSTATUS*);
1466 NTSTATUS WINAPI NtAddAtom(const WCHAR*,ULONG,RTL_ATOM*);
1467 NTSTATUS WINAPI NtAdjustGroupsToken(HANDLE,BOOLEAN,PTOKEN_GROUPS,ULONG,PTOKEN_GROUPS,PULONG);
1468 NTSTATUS WINAPI NtAdjustPrivilegesToken(HANDLE,BOOLEAN,PTOKEN_PRIVILEGES,DWORD,PTOKEN_PRIVILEGES,PDWORD);
1469 NTSTATUS WINAPI NtAlertThread(HANDLE ThreadHandle);
1470 NTSTATUS WINAPI NtAllocateLocallyUniqueId(PLUID lpLuid);
1471 NTSTATUS WINAPI NtAllocateVirtualMemory(HANDLE,PVOID*,ULONG,ULONG*,ULONG,ULONG);
1472 NTSTATUS WINAPI NtCancelIoFile(HANDLE,PIO_STATUS_BLOCK);
1473 NTSTATUS WINAPI NtCancelTimer(HANDLE, BOOLEAN*);
1474 NTSTATUS WINAPI NtClearEvent(HANDLE);
1475 NTSTATUS WINAPI NtClose(HANDLE);
1476 NTSTATUS WINAPI NtCreateEvent(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES *,BOOLEAN,BOOLEAN);
1477 NTSTATUS WINAPI NtCreateFile(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,PLARGE_INTEGER,ULONG,ULONG,ULONG,ULONG,PVOID,ULONG);
1478 NTSTATUS WINAPI NtCreateIoCompletion(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,ULONG);
1479 NTSTATUS WINAPI NtCreateKey(PHKEY,ACCESS_MASK,const OBJECT_ATTRIBUTES*,ULONG,const UNICODE_STRING*,ULONG,PULONG);
1480 NTSTATUS WINAPI NtCreateMailslotFile(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,ULONG,ULONG,ULONG,PLARGE_INTEGER);
1481 NTSTATUS WINAPI NtCreateMutant(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,BOOLEAN);
1482 NTSTATUS WINAPI NtCreateNamedPipeFile(PHANDLE,ULONG,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,ULONG,ULONG,ULONG,ULONG,ULONG,ULONG,ULONG,ULONG,ULONG,PLARGE_INTEGER);
1483 NTSTATUS WINAPI NtCreateSection(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,const LARGE_INTEGER*,ULONG,ULONG,HANDLE);
1484 NTSTATUS WINAPI NtCreateSemaphore(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*,LONG,LONG);
1485 NTSTATUS WINAPI NtCreateTimer(HANDLE*, ACCESS_MASK, const OBJECT_ATTRIBUTES*, TIMER_TYPE);
1486 NTSTATUS WINAPI NtDelayExecution(BOOLEAN,const LARGE_INTEGER*);
1487 NTSTATUS WINAPI NtDeleteAtom(RTL_ATOM);
1488 NTSTATUS WINAPI NtDeleteFile(POBJECT_ATTRIBUTES);
1489 NTSTATUS WINAPI NtDeleteKey(HKEY);
1490 NTSTATUS WINAPI NtDeleteValueKey(HKEY,const UNICODE_STRING *);
1491 NTSTATUS WINAPI NtDeviceIoControlFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,PVOID,ULONG,PVOID,ULONG);
1492 NTSTATUS WINAPI NtDuplicateObject(HANDLE,HANDLE,HANDLE,PHANDLE,ACCESS_MASK,ULONG,ULONG);
1493 NTSTATUS WINAPI NtDuplicateToken(HANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,SECURITY_IMPERSONATION_LEVEL,TOKEN_TYPE,PHANDLE);
1494 NTSTATUS WINAPI NtEnumerateKey(HKEY,ULONG,KEY_INFORMATION_CLASS,void *,DWORD,DWORD *);
1495 NTSTATUS WINAPI NtEnumerateValueKey(HKEY,ULONG,KEY_VALUE_INFORMATION_CLASS,PVOID,ULONG,PULONG);
1496 NTSTATUS WINAPI NtFindAtom(const WCHAR*,ULONG,RTL_ATOM*);
1497 NTSTATUS WINAPI NtFlushBuffersFile(HANDLE,IO_STATUS_BLOCK*);
1498 NTSTATUS WINAPI NtFlushInstructionCache(HANDLE,LPCVOID,ULONG);
1499 NTSTATUS WINAPI NtFlushKey(HKEY);
1500 NTSTATUS WINAPI NtFlushVirtualMemory(HANDLE,LPCVOID*,ULONG*,ULONG);
1501 NTSTATUS WINAPI NtFreeVirtualMemory(HANDLE,PVOID*,ULONG*,ULONG);
1502 NTSTATUS WINAPI NtGetContextThread(HANDLE,CONTEXT*);
1503 NTSTATUS WINAPI NtImpersonateAnonymousToken(HANDLE);
1504 NTSTATUS WINAPI NtImpersonateClientOfPort(HANDLE,PPORT_MESSAGE);
1505 NTSTATUS WINAPI NtImpersonateThread(HANDLE,HANDLE,PSECURITY_QUALITY_OF_SERVICE);
1506 NTSTATUS WINAPI NtInitiatePowerAction(POWER_ACTION,SYSTEM_POWER_STATE,ULONG,BOOLEAN);
1507 NTSTATUS WINAPI NtLoadDriver(const UNICODE_STRING *);
1508 NTSTATUS WINAPI NtLoadKey(const OBJECT_ATTRIBUTES *,OBJECT_ATTRIBUTES *);
1509 NTSTATUS WINAPI NtLockFile(HANDLE,HANDLE,PIO_APC_ROUTINE,void*,PIO_STATUS_BLOCK,PLARGE_INTEGER,PLARGE_INTEGER,ULONG*,BOOLEAN,BOOLEAN);
1510 NTSTATUS WINAPI NtLockVirtualMemory(HANDLE,PVOID*,ULONG*,ULONG);
1511 NTSTATUS WINAPI NtMapViewOfSection(HANDLE,HANDLE,PVOID*,ULONG,ULONG,const LARGE_INTEGER*,ULONG*,SECTION_INHERIT,ULONG,ULONG);
1512 NTSTATUS WINAPI NtNotifyChangeKey(HKEY,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,BOOLEAN,PVOID,ULONG,BOOLEAN);
1513 NTSTATUS WINAPI NtOpenEvent(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES *);
1514 NTSTATUS WINAPI NtOpenFile(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,ULONG,ULONG);
1515 NTSTATUS WINAPI NtOpenIoCompletion(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES);
1516 NTSTATUS WINAPI NtOpenKey(PHKEY,ACCESS_MASK,const OBJECT_ATTRIBUTES *);
1517 NTSTATUS WINAPI NtOpenMutant(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*);
1518 NTSTATUS WINAPI NtOpenProcessToken(HANDLE,DWORD,HANDLE *);
1519 NTSTATUS WINAPI NtOpenSection(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*);
1520 NTSTATUS WINAPI NtOpenSemaphore(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*);
1521 NTSTATUS WINAPI NtOpenThread(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,const CLIENT_ID*);
1522 NTSTATUS WINAPI NtOpenThreadToken(HANDLE,DWORD,BOOLEAN,HANDLE *);
1523 NTSTATUS WINAPI NtOpenTimer(HANDLE*, ACCESS_MASK, const OBJECT_ATTRIBUTES*);
1524 NTSTATUS WINAPI NtPowerInformation(POWER_INFORMATION_LEVEL,PVOID,ULONG,PVOID,ULONG);
1525 NTSTATUS WINAPI NtPrivilegeCheck(HANDLE,PPRIVILEGE_SET,PBOOLEAN);
1526 NTSTATUS WINAPI NtProtectVirtualMemory(HANDLE,PVOID*,ULONG*,ULONG,ULONG*);
1527 NTSTATUS WINAPI NtPulseEvent(HANDLE,PULONG);
1528 NTSTATUS WINAPI NtQueueApcThread(HANDLE,PNTAPCFUNC,ULONG_PTR,ULONG_PTR,ULONG_PTR);
1529 NTSTATUS WINAPI NtQueryAttributesFile(const OBJECT_ATTRIBUTES*,FILE_BASIC_INFORMATION*);
1530 NTSTATUS WINAPI NtQueryDefaultLocale(BOOLEAN,LCID*);
1531 NTSTATUS WINAPI NtQueryDefaultUILanguage(LANGID*);
1532 NTSTATUS WINAPI NtQueryDirectoryFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,PVOID,ULONG,FILE_INFORMATION_CLASS,BOOLEAN,PUNICODE_STRING,BOOLEAN);
1533 NTSTATUS WINAPI NtQueryEaFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,BOOLEAN,PVOID,ULONG,PVOID,BOOLEAN);
1534 NTSTATUS WINAPI NtQueryFullAttributesFile(const OBJECT_ATTRIBUTES*,FILE_NETWORK_OPEN_INFORMATION*);
1535 NTSTATUS WINAPI NtQueryInformationAtom(RTL_ATOM,ATOM_INFORMATION_CLASS,RTL_ATOM_TABLE,ULONG,ULONG*);
1536 NTSTATUS WINAPI NtQueryInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,LONG,FILE_INFORMATION_CLASS);
1537 NTSTATUS WINAPI NtQueryInformationProcess(HANDLE,PROCESSINFOCLASS,PVOID,ULONG,PULONG);
1538 NTSTATUS WINAPI NtQueryInformationThread(HANDLE,THREADINFOCLASS,PVOID,ULONG,PULONG);
1539 NTSTATUS WINAPI NtQueryInformationToken(HANDLE,DWORD,LPVOID,DWORD,LPDWORD);
1540 NTSTATUS WINAPI NtQueryInstallUILanguage(LANGID*);
1541 NTSTATUS WINAPI NtQueryKey(HKEY,KEY_INFORMATION_CLASS,void *,DWORD,DWORD *);
1542 NTSTATUS WINAPI NtQueryMultipleValueKey(HKEY,PVALENTW,ULONG,PVOID,ULONG,PULONG);
1543 NTSTATUS WINAPI NtQueryObject(HANDLE, OBJECT_INFORMATION_CLASS, PVOID, ULONG, PULONG);
1544 NTSTATUS WINAPI NtQueryPerformanceCounter(PLARGE_INTEGER, PLARGE_INTEGER);
1545 NTSTATUS WINAPI NtQuerySecurityObject(HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,ULONG,PULONG);
1546 NTSTATUS WINAPI NtQuerySystemInformation(SYSTEM_INFORMATION_CLASS,PVOID,ULONG,PULONG);
1547 NTSTATUS WINAPI NtQuerySystemTime(PLARGE_INTEGER);
1548 NTSTATUS WINAPI NtQueryTimer(HANDLE,TIMER_INFORMATION_CLASS,PVOID,ULONG,PULONG);
1549 NTSTATUS WINAPI NtQueryValueKey(HKEY,const UNICODE_STRING *,KEY_VALUE_INFORMATION_CLASS,void *,DWORD,DWORD *);
1550 NTSTATUS WINAPI NtQueryVirtualMemory(HANDLE,LPCVOID,MEMORY_INFORMATION_CLASS,PVOID,ULONG,ULONG*);
1551 NTSTATUS WINAPI NtQueryVolumeInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,FS_INFORMATION_CLASS);
1552 void WINAPI NtRaiseException(PEXCEPTION_RECORD,PCONTEXT,BOOL);
1553 NTSTATUS WINAPI NtReadFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,PVOID,ULONG,PLARGE_INTEGER,PULONG);
1554 NTSTATUS WINAPI NtReadVirtualMemory(HANDLE,const void*,void*,SIZE_T,SIZE_T*);
1555 NTSTATUS WINAPI NtReleaseMutant(HANDLE,PLONG);
1556 NTSTATUS WINAPI NtReleaseSemaphore(HANDLE,ULONG,PULONG);
1557 NTSTATUS WINAPI NtRemoveIoCompletion(HANDLE,PULONG,PULONG,PIO_STATUS_BLOCK,PLARGE_INTEGER);
1558 NTSTATUS WINAPI NtReplaceKey(POBJECT_ATTRIBUTES,HKEY,POBJECT_ATTRIBUTES);
1559 NTSTATUS WINAPI NtResetEvent(HANDLE,PULONG);
1560 NTSTATUS WINAPI NtRestoreKey(HKEY,HANDLE,ULONG);
1561 NTSTATUS WINAPI NtResumeThread(HANDLE,PULONG);
1562 NTSTATUS WINAPI NtSaveKey(HKEY,HANDLE);
1563 NTSTATUS WINAPI NtSetContextThread(HANDLE,const CONTEXT*);
1564 NTSTATUS WINAPI NtSetDefaultLocale(BOOLEAN,LCID);
1565 NTSTATUS WINAPI NtSetDefaultUILanguage(LANGID);
1566 NTSTATUS WINAPI NtSetEaFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG);
1567 NTSTATUS WINAPI NtSetEvent(HANDLE,PULONG);
1568 NTSTATUS WINAPI NtSetInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,FILE_INFORMATION_CLASS);
1569 NTSTATUS WINAPI NtSetInformationKey(HKEY,const int,PVOID,ULONG);
1570 NTSTATUS WINAPI NtSetInformationObject(HANDLE, OBJECT_INFORMATION_CLASS, PVOID, ULONG);
1571 NTSTATUS WINAPI NtSetInformationThread(HANDLE,THREADINFOCLASS,LPCVOID,ULONG);
1572 NTSTATUS WINAPI NtSetInformationToken(HANDLE,TOKEN_INFORMATION_CLASS,PVOID,ULONG);
1573 NTSTATUS WINAPI NtSetIoCompletion(HANDLE,ULONG,ULONG,NTSTATUS,ULONG);
1574 NTSTATUS WINAPI NtSetSecurityObject(HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR);
1575 NTSTATUS WINAPI NtSetSystemTime(const LARGE_INTEGER*,LARGE_INTEGER*);
1576 NTSTATUS WINAPI NtSetTimer(HANDLE, const LARGE_INTEGER*, PTIMERAPCROUTINE, PVOID, BOOLEAN, ULONG, BOOLEAN*);
1577 NTSTATUS WINAPI NtSetValueKey(HKEY,const UNICODE_STRING *,ULONG,ULONG,const void *,ULONG);
1578 NTSTATUS WINAPI NtSignalAndWaitForSingleObject(HANDLE,HANDLE,BOOLEAN,const LARGE_INTEGER*);
1579 NTSTATUS WINAPI NtSuspendThread(HANDLE,PULONG);
1580 NTSTATUS WINAPI NtTerminateProcess(HANDLE,LONG);
1581 NTSTATUS WINAPI NtTerminateThread(HANDLE,LONG);
1582 NTSTATUS WINAPI NtUnloadDriver(const UNICODE_STRING *);
1583 NTSTATUS WINAPI NtUnloadKey(HKEY);
1584 NTSTATUS WINAPI NtUnlockFile(HANDLE,PIO_STATUS_BLOCK,PLARGE_INTEGER,PLARGE_INTEGER,PULONG);
1585 NTSTATUS WINAPI NtUnlockVirtualMemory(HANDLE,PVOID*,ULONG*,ULONG);
1586 NTSTATUS WINAPI NtUnmapViewOfSection(HANDLE,PVOID);
1587 NTSTATUS WINAPI NtWaitForSingleObject(HANDLE,BOOLEAN,const LARGE_INTEGER*);
1588 NTSTATUS WINAPI NtWaitForMultipleObjects(ULONG,const HANDLE*,BOOLEAN,BOOLEAN,const LARGE_INTEGER*);
1589 NTSTATUS WINAPI NtWriteFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,const void*,ULONG,PLARGE_INTEGER,PULONG);
1590 NTSTATUS WINAPI NtWriteVirtualMemory(HANDLE,void*,const void*,SIZE_T,SIZE_T*);
1591 NTSTATUS WINAPI NtYieldExecution(void);
1593 void WINAPI RtlAcquirePebLock(void);
1594 BYTE WINAPI RtlAcquireResourceExclusive(LPRTL_RWLOCK,BYTE);
1595 BYTE WINAPI RtlAcquireResourceShared(LPRTL_RWLOCK,BYTE);
1596 NTSTATUS WINAPI RtlAddAce(PACL,DWORD,DWORD,PACE_HEADER,DWORD);
1597 NTSTATUS WINAPI RtlAddAccessAllowedAce(PACL,DWORD,DWORD,PSID);
1598 NTSTATUS WINAPI RtlAddAccessAllowedAceEx(PACL,DWORD,DWORD,DWORD,PSID);
1599 NTSTATUS WINAPI RtlAddAccessDeniedAce(PACL,DWORD,DWORD,PSID);
1600 NTSTATUS WINAPI RtlAddAccessDeniedAceEx(PACL,DWORD,DWORD,DWORD,PSID);
1601 NTSTATUS WINAPI RtlAddAtomToAtomTable(RTL_ATOM_TABLE,const WCHAR*,RTL_ATOM*);
1602 PVOID WINAPI RtlAddVectoredExceptionHandler(ULONG,PVECTORED_EXCEPTION_HANDLER);
1603 DWORD WINAPI RtlAdjustPrivilege(DWORD,DWORD,DWORD,DWORD);
1604 NTSTATUS WINAPI RtlAllocateAndInitializeSid(PSID_IDENTIFIER_AUTHORITY,BYTE,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,PSID *);
1605 RTL_HANDLE * WINAPI RtlAllocateHandle(RTL_HANDLE_TABLE *,ULONG *);
1606 PVOID WINAPI RtlAllocateHeap(HANDLE,ULONG,ULONG);
1607 DWORD WINAPI RtlAnsiStringToUnicodeSize(const STRING *);
1608 NTSTATUS WINAPI RtlAnsiStringToUnicodeString(PUNICODE_STRING,PCANSI_STRING,BOOLEAN);
1609 NTSTATUS WINAPI RtlAppendAsciizToString(STRING *,LPCSTR);
1610 NTSTATUS WINAPI RtlAppendStringToString(STRING *,const STRING *);
1611 NTSTATUS WINAPI RtlAppendUnicodeStringToString(UNICODE_STRING *,const UNICODE_STRING *);
1612 NTSTATUS WINAPI RtlAppendUnicodeToString(UNICODE_STRING *,LPCWSTR);
1613 BOOLEAN WINAPI RtlAreAllAccessesGranted(ACCESS_MASK,ACCESS_MASK);
1614 BOOLEAN WINAPI RtlAreAnyAccessesGranted(ACCESS_MASK,ACCESS_MASK);
1615 BOOLEAN WINAPI RtlAreBitsSet(PCRTL_BITMAP,ULONG,ULONG);
1616 BOOLEAN WINAPI RtlAreBitsClear(PCRTL_BITMAP,ULONG,ULONG);
1618 NTSTATUS WINAPI RtlCharToInteger(PCSZ,ULONG,PULONG);
1619 NTSTATUS WINAPI RtlCheckRegistryKey(ULONG, PWSTR);
1620 void WINAPI RtlClearAllBits(PRTL_BITMAP);
1621 void WINAPI RtlClearBits(PRTL_BITMAP,ULONG,ULONG);
1622 ULONG WINAPI RtlCompactHeap(HANDLE,ULONG);
1623 LONG WINAPI RtlCompareString(const STRING*,const STRING*,BOOLEAN);
1624 LONG WINAPI RtlCompareUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
1625 DWORD WINAPI RtlComputeCrc32(DWORD,PBYTE,INT);
1626 NTSTATUS WINAPI RtlConvertSidToUnicodeString(PUNICODE_STRING,PSID,BOOLEAN);
1627 LONGLONG WINAPI RtlConvertLongToLargeInteger(LONG);
1628 ULONGLONG WINAPI RtlConvertUlongToLargeInteger(ULONG);
1629 void WINAPI RtlCopyLuid(PLUID,const LUID*);
1630 void WINAPI RtlCopyLuidAndAttributesArray(ULONG,const LUID_AND_ATTRIBUTES*,PLUID_AND_ATTRIBUTES);
1631 BOOLEAN WINAPI RtlCopySid(DWORD,PSID,PSID);
1632 void WINAPI RtlCopyString(STRING*,const STRING*);
1633 void WINAPI RtlCopyUnicodeString(UNICODE_STRING*,const UNICODE_STRING*);
1634 NTSTATUS WINAPI RtlCreateAcl(PACL,DWORD,DWORD);
1635 NTSTATUS WINAPI RtlCreateAtomTable(ULONG,RTL_ATOM_TABLE*);
1636 NTSTATUS WINAPI RtlCreateEnvironment(BOOLEAN, PWSTR*);
1637 HANDLE WINAPI RtlCreateHeap(ULONG,PVOID,ULONG,ULONG,PVOID,PRTL_HEAP_DEFINITION);
1638 NTSTATUS WINAPI RtlCreateProcessParameters(RTL_USER_PROCESS_PARAMETERS**,const UNICODE_STRING*,
1639 const UNICODE_STRING*,const UNICODE_STRING*,
1640 const UNICODE_STRING*,PWSTR,const UNICODE_STRING*,
1641 const UNICODE_STRING*,const UNICODE_STRING*,
1642 const UNICODE_STRING*);
1643 NTSTATUS WINAPI RtlCreateSecurityDescriptor(PSECURITY_DESCRIPTOR,DWORD);
1644 BOOLEAN WINAPI RtlCreateUnicodeString(PUNICODE_STRING,LPCWSTR);
1645 BOOLEAN WINAPI RtlCreateUnicodeStringFromAsciiz(PUNICODE_STRING,LPCSTR);
1646 NTSTATUS WINAPI RtlCreateUserThread(HANDLE,const SECURITY_DESCRIPTOR*,BOOLEAN,PVOID,SIZE_T,SIZE_T,PRTL_THREAD_START_ROUTINE,void*,HANDLE*,CLIENT_ID*);
1648 NTSTATUS WINAPI RtlDeleteAce(PACL,DWORD);
1649 NTSTATUS WINAPI RtlDeleteAtomFromAtomTable(RTL_ATOM_TABLE,RTL_ATOM);
1650 NTSTATUS WINAPI RtlDeleteCriticalSection(RTL_CRITICAL_SECTION *);
1651 NTSTATUS WINAPI RtlDeleteRegistryValue(ULONG, PCWSTR, PCWSTR);
1652 void WINAPI RtlDeleteResource(LPRTL_RWLOCK);
1653 DWORD WINAPI RtlDeleteSecurityObject(DWORD);
1654 PRTL_USER_PROCESS_PARAMETERS WINAPI RtlDeNormalizeProcessParams(RTL_USER_PROCESS_PARAMETERS*);
1655 NTSTATUS WINAPI RtlDestroyAtomTable(RTL_ATOM_TABLE);
1656 NTSTATUS WINAPI RtlDestroyEnvironment(PWSTR);
1657 NTSTATUS WINAPI RtlDestroyHandleTable(RTL_HANDLE_TABLE *);
1658 HANDLE WINAPI RtlDestroyHeap(HANDLE);
1659 void WINAPI RtlDestroyProcessParameters(RTL_USER_PROCESS_PARAMETERS*);
1660 DOS_PATHNAME_TYPE WINAPI RtlDetermineDosPathNameType_U(PCWSTR);
1661 BOOLEAN WINAPI RtlDoesFileExists_U(LPCWSTR);
1662 BOOLEAN WINAPI RtlDosPathNameToNtPathName_U(PCWSTR,PUNICODE_STRING,PWSTR*,CURDIR*);
1663 ULONG WINAPI RtlDosSearchPath_U(LPCWSTR, LPCWSTR, LPCWSTR, ULONG, LPWSTR, LPWSTR*);
1664 WCHAR WINAPI RtlDowncaseUnicodeChar(WCHAR);
1665 NTSTATUS WINAPI RtlDowncaseUnicodeString(UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
1666 void WINAPI RtlDumpResource(LPRTL_RWLOCK);
1667 NTSTATUS WINAPI RtlDuplicateUnicodeString(int,const UNICODE_STRING*,UNICODE_STRING*);
1669 NTSTATUS WINAPI RtlEmptyAtomTable(RTL_ATOM_TABLE,BOOLEAN);
1670 LONGLONG WINAPI RtlEnlargedIntegerMultiply(INT,INT);
1671 ULONGLONG WINAPI RtlEnlargedUnsignedMultiply(UINT,UINT);
1672 UINT WINAPI RtlEnlargedUnsignedDivide(ULONGLONG,UINT,UINT *);
1673 NTSTATUS WINAPI RtlEnterCriticalSection(RTL_CRITICAL_SECTION *);
1674 void WINAPI RtlEraseUnicodeString(UNICODE_STRING*);
1675 NTSTATUS WINAPI RtlEqualComputerName(const UNICODE_STRING*,const UNICODE_STRING*);
1676 NTSTATUS WINAPI RtlEqualDomainName(const UNICODE_STRING*,const UNICODE_STRING*);
1677 BOOLEAN WINAPI RtlEqualLuid(const LUID*,const LUID*);
1678 BOOL WINAPI RtlEqualPrefixSid(PSID,PSID);
1679 BOOL WINAPI RtlEqualSid(PSID,PSID);
1680 BOOLEAN WINAPI RtlEqualString(const STRING*,const STRING*,BOOLEAN);
1681 BOOLEAN WINAPI RtlEqualUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
1682 NTSTATUS WINAPI RtlExpandEnvironmentStrings_U(PWSTR, const UNICODE_STRING*, UNICODE_STRING*, ULONG*);
1683 LONGLONG WINAPI RtlExtendedMagicDivide(LONGLONG,LONGLONG,INT);
1684 LONGLONG WINAPI RtlExtendedIntegerMultiply(LONGLONG,INT);
1685 LONGLONG WINAPI RtlExtendedLargeIntegerDivide(LONGLONG,INT,INT *);
1687 NTSTATUS WINAPI RtlFindCharInUnicodeString(int,const UNICODE_STRING*,const UNICODE_STRING*,USHORT*);
1688 ULONG WINAPI RtlFindClearBits(PCRTL_BITMAP,ULONG,ULONG);
1689 ULONG WINAPI RtlFindClearBitsAndSet(PRTL_BITMAP,ULONG,ULONG);
1690 ULONG WINAPI RtlFindClearRuns(PCRTL_BITMAP,PRTL_BITMAP_RUN,ULONG,BOOLEAN);
1691 ULONG WINAPI RtlFindLastBackwardRunSet(PCRTL_BITMAP,ULONG,PULONG);
1692 ULONG WINAPI RtlFindLastBackwardRunClear(PCRTL_BITMAP,ULONG,PULONG);
1693 CCHAR WINAPI RtlFindLeastSignificantBit(ULONGLONG);
1694 ULONG WINAPI RtlFindLongestRunSet(PCRTL_BITMAP,PULONG);
1695 ULONG WINAPI RtlFindLongestRunClear(PCRTL_BITMAP,PULONG);
1696 NTSTATUS WINAPI RtlFindMessage(HMODULE,ULONG,ULONG,ULONG,const MESSAGE_RESOURCE_ENTRY**);
1697 CCHAR WINAPI RtlFindMostSignificantBit(ULONGLONG);
1698 ULONG WINAPI RtlFindNextForwardRunSet(PCRTL_BITMAP,ULONG,PULONG);
1699 ULONG WINAPI RtlFindNextForwardRunClear(PCRTL_BITMAP,ULONG,PULONG);
1700 ULONG WINAPI RtlFindSetBits(PCRTL_BITMAP,ULONG,ULONG);
1701 ULONG WINAPI RtlFindSetBitsAndClear(PRTL_BITMAP,ULONG,ULONG);
1702 ULONG WINAPI RtlFindSetRuns(PCRTL_BITMAP,PRTL_BITMAP_RUN,ULONG,BOOLEAN);
1703 BOOLEAN WINAPI RtlFirstFreeAce(PACL,PACE_HEADER *);
1704 NTSTATUS WINAPI RtlFormatCurrentUserKeyPath(PUNICODE_STRING);
1705 NTSTATUS WINAPI RtlFormatMessage(LPWSTR,UCHAR,BOOLEAN,BOOLEAN,BOOLEAN,va_list *,LPWSTR,ULONG);
1706 void WINAPI RtlFreeAnsiString(PANSI_STRING);
1707 BOOLEAN WINAPI RtlFreeHandle(RTL_HANDLE_TABLE *,RTL_HANDLE *);
1708 BOOLEAN WINAPI RtlFreeHeap(HANDLE,ULONG,PVOID);
1709 void WINAPI RtlFreeOemString(POEM_STRING);
1710 DWORD WINAPI RtlFreeSid(PSID);
1711 void WINAPI RtlFreeUnicodeString(PUNICODE_STRING);
1713 NTSTATUS WINAPI RtlGetAce(PACL,DWORD,LPVOID *);
1714 NTSTATUS WINAPI RtlGetControlSecurityDescriptor(PSECURITY_DESCRIPTOR, PSECURITY_DESCRIPTOR_CONTROL,LPDWORD);
1715 NTSTATUS WINAPI RtlGetCurrentDirectory_U(ULONG, LPWSTR);
1716 NTSTATUS WINAPI RtlGetDaclSecurityDescriptor(PSECURITY_DESCRIPTOR,PBOOLEAN,PACL *,PBOOLEAN);
1717 ULONG WINAPI RtlGetFullPathName_U(PCWSTR,ULONG,PWSTR,PWSTR*);
1718 NTSTATUS WINAPI RtlGetGroupSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID *,PBOOLEAN);
1719 NTSTATUS WINAPI RtlGetLastNtStatus(void);
1720 DWORD WINAPI RtlGetLastWin32Error(void);
1721 DWORD WINAPI RtlGetLongestNtPathLength(void);
1722 BOOLEAN WINAPI RtlGetNtProductType(LPDWORD);
1723 NTSTATUS WINAPI RtlGetOwnerSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID *,PBOOLEAN);
1724 ULONG WINAPI RtlGetProcessHeaps(ULONG,HANDLE*);
1725 NTSTATUS WINAPI RtlGetSaclSecurityDescriptor(PSECURITY_DESCRIPTOR,PBOOLEAN,PACL *,PBOOLEAN);
1726 NTSTATUS WINAPI RtlGetVersion(RTL_OSVERSIONINFOEXW*);
1728 PSID_IDENTIFIER_AUTHORITY WINAPI RtlIdentifierAuthoritySid(PSID);
1729 PVOID WINAPI RtlImageDirectoryEntryToData(HMODULE,BOOL,WORD,ULONG *);
1730 PIMAGE_NT_HEADERS WINAPI RtlImageNtHeader(HMODULE);
1731 PIMAGE_SECTION_HEADER WINAPI RtlImageRvaToSection(const IMAGE_NT_HEADERS *,HMODULE,DWORD);
1732 PVOID WINAPI RtlImageRvaToVa(const IMAGE_NT_HEADERS *,HMODULE,DWORD,IMAGE_SECTION_HEADER **);
1733 BOOL WINAPI RtlImpersonateSelf(SECURITY_IMPERSONATION_LEVEL);
1734 void WINAPI RtlInitString(PSTRING,PCSZ);
1735 void WINAPI RtlInitAnsiString(PANSI_STRING,PCSZ);
1736 void WINAPI RtlInitUnicodeString(PUNICODE_STRING,PCWSTR);
1737 NTSTATUS WINAPI RtlInitUnicodeStringEx(PUNICODE_STRING,PCWSTR);
1738 NTSTATUS WINAPI RtlInitializeCriticalSection(RTL_CRITICAL_SECTION *);
1739 NTSTATUS WINAPI RtlInitializeCriticalSectionAndSpinCount(RTL_CRITICAL_SECTION *,DWORD);
1740 void WINAPI RtlInitializeBitMap(PRTL_BITMAP,PULONG,ULONG);
1741 void WINAPI RtlInitializeHandleTable(ULONG,ULONG,RTL_HANDLE_TABLE *);
1742 void WINAPI RtlInitializeResource(LPRTL_RWLOCK);
1743 BOOL WINAPI RtlInitializeSid(PSID,PSID_IDENTIFIER_AUTHORITY,BYTE);
1745 NTSTATUS WINAPI RtlInt64ToUnicodeString(ULONGLONG,ULONG,UNICODE_STRING *);
1746 NTSTATUS WINAPI RtlIntegerToChar(ULONG,ULONG,ULONG,PCHAR);
1747 NTSTATUS WINAPI RtlIntegerToUnicodeString(ULONG,ULONG,UNICODE_STRING *);
1748 ULONG WINAPI RtlIsDosDeviceName_U(PCWSTR);
1749 BOOLEAN WINAPI RtlIsNameLegalDOS8Dot3(const UNICODE_STRING*,POEM_STRING,PBOOLEAN);
1750 DWORD WINAPI RtlIsTextUnicode(LPVOID,DWORD,DWORD *);
1751 BOOLEAN WINAPI RtlIsValidHandle(const RTL_HANDLE_TABLE *, const RTL_HANDLE *);
1752 BOOLEAN WINAPI RtlIsValidIndexHandle(const RTL_HANDLE_TABLE *, ULONG Index, RTL_HANDLE **);
1754 LONGLONG WINAPI RtlLargeIntegerAdd(LONGLONG,LONGLONG);
1755 LONGLONG WINAPI RtlLargeIntegerArithmeticShift(LONGLONG,INT);
1756 ULONGLONG WINAPI RtlLargeIntegerDivide( ULONGLONG,ULONGLONG,ULONGLONG *);
1757 LONGLONG WINAPI RtlLargeIntegerNegate(LONGLONG);
1758 LONGLONG WINAPI RtlLargeIntegerShiftLeft(LONGLONG,INT);
1759 LONGLONG WINAPI RtlLargeIntegerShiftRight(LONGLONG,INT);
1760 LONGLONG WINAPI RtlLargeIntegerSubtract(LONGLONG,LONGLONG);
1761 NTSTATUS WINAPI RtlLargeIntegerToChar(const ULONGLONG *,ULONG,ULONG,PCHAR);
1762 NTSTATUS WINAPI RtlLeaveCriticalSection(RTL_CRITICAL_SECTION *);
1763 DWORD WINAPI RtlLengthRequiredSid(DWORD);
1764 ULONG WINAPI RtlLengthSecurityDescriptor(PSECURITY_DESCRIPTOR);
1765 DWORD WINAPI RtlLengthSid(PSID);
1766 NTSTATUS WINAPI RtlLocalTimeToSystemTime(const LARGE_INTEGER*,PLARGE_INTEGER);
1767 BOOLEAN WINAPI RtlLockHeap(HANDLE);
1768 NTSTATUS WINAPI RtlLookupAtomInAtomTable(RTL_ATOM_TABLE,const WCHAR*,RTL_ATOM*);
1770 NTSTATUS WINAPI RtlMakeSelfRelativeSD(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,LPDWORD);
1771 void WINAPI RtlMapGenericMask(PACCESS_MASK,const GENERIC_MAPPING*);
1772 NTSTATUS WINAPI RtlMultiByteToUnicodeN(LPWSTR,DWORD,LPDWORD,LPCSTR,DWORD);
1773 NTSTATUS WINAPI RtlMultiByteToUnicodeSize(DWORD*,LPCSTR,UINT);
1775 DWORD WINAPI RtlNewSecurityObject(DWORD,DWORD,DWORD,DWORD,DWORD,DWORD);
1776 PRTL_USER_PROCESS_PARAMETERS WINAPI RtlNormalizeProcessParams(RTL_USER_PROCESS_PARAMETERS*);
1777 ULONG WINAPI RtlNtStatusToDosError(NTSTATUS);
1778 ULONG WINAPI RtlNtStatusToDosErrorNoTeb(NTSTATUS);
1779 ULONG WINAPI RtlNumberOfSetBits(PCRTL_BITMAP);
1780 ULONG WINAPI RtlNumberOfClearBits(PCRTL_BITMAP);
1782 UINT WINAPI RtlOemStringToUnicodeSize(const STRING*);
1783 NTSTATUS WINAPI RtlOemStringToUnicodeString(UNICODE_STRING*,const STRING*,BOOLEAN);
1784 NTSTATUS WINAPI RtlOemToUnicodeN(LPWSTR,DWORD,LPDWORD,LPCSTR,DWORD);
1785 DWORD WINAPI RtlOpenCurrentUser(ACCESS_MASK,PHKEY);
1787 NTSTATUS WINAPI RtlPinAtomInAtomTable(RTL_ATOM_TABLE,RTL_ATOM);
1788 BOOLEAN WINAPI RtlPrefixString(const STRING*,const STRING*,BOOLEAN);
1789 BOOLEAN WINAPI RtlPrefixUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
1791 NTSTATUS WINAPI RtlQueryAtomInAtomTable(RTL_ATOM_TABLE,RTL_ATOM,ULONG*,ULONG*,WCHAR*,ULONG*);
1792 NTSTATUS WINAPI RtlQueryEnvironmentVariable_U(PWSTR,PUNICODE_STRING,PUNICODE_STRING);
1793 NTSTATUS WINAPI RtlQueryInformationAcl(PACL,LPVOID,DWORD,ACL_INFORMATION_CLASS);
1794 NTSTATUS WINAPI RtlQueryRegistryValues(ULONG, PCWSTR, PRTL_QUERY_REGISTRY_TABLE, PVOID, PVOID);
1795 NTSTATUS WINAPI RtlQueryTimeZoneInformation(LPTIME_ZONE_INFORMATION);
1797 void WINAPI RtlRaiseException(PEXCEPTION_RECORD);
1798 void WINAPI RtlRaiseStatus(NTSTATUS);
1799 ULONG WINAPI RtlRandom(PULONG);
1800 PVOID WINAPI RtlReAllocateHeap(HANDLE,ULONG,PVOID,ULONG);
1801 void WINAPI RtlReleasePebLock(void);
1802 void WINAPI RtlReleaseResource(LPRTL_RWLOCK);
1803 ULONG WINAPI RtlRemoveVectoredExceptionHandler(PVOID);
1804 void WINAPI RtlRestoreLastWin32Error(DWORD);
1806 void WINAPI RtlSecondsSince1970ToTime(DWORD,LARGE_INTEGER *);
1807 void WINAPI RtlSecondsSince1980ToTime(DWORD,LARGE_INTEGER *);
1808 NTSTATUS WINAPI RtlSelfRelativeToAbsoluteSD(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,
1809 PDWORD,PACL,PDWORD,PACL,PDWORD,PSID,PDWORD,PSID,PDWORD);
1810 void WINAPI RtlSetAllBits(PRTL_BITMAP);
1811 void WINAPI RtlSetBits(PRTL_BITMAP,ULONG,ULONG);
1812 ULONG WINAPI RtlSetCriticalSectionSpinCount(RTL_CRITICAL_SECTION*,ULONG);
1813 NTSTATUS WINAPI RtlSetCurrentDirectory_U(const UNICODE_STRING*);
1814 void WINAPI RtlSetCurrentEnvironment(PWSTR, PWSTR*);
1815 NTSTATUS WINAPI RtlSetDaclSecurityDescriptor(PSECURITY_DESCRIPTOR,BOOLEAN,PACL,BOOLEAN);
1816 NTSTATUS WINAPI RtlSetEnvironmentVariable(PWSTR*,PUNICODE_STRING,PUNICODE_STRING);
1817 NTSTATUS WINAPI RtlSetOwnerSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID,BOOLEAN);
1818 NTSTATUS WINAPI RtlSetGroupSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID,BOOLEAN);
1819 void WINAPI RtlSetLastWin32Error(DWORD);
1820 void WINAPI RtlSetLastWin32ErrorAndNtStatusFromNtStatus(NTSTATUS);
1821 NTSTATUS WINAPI RtlSetSaclSecurityDescriptor(PSECURITY_DESCRIPTOR,BOOLEAN,PACL,BOOLEAN);
1822 NTSTATUS WINAPI RtlSetTimeZoneInformation(const TIME_ZONE_INFORMATION*);
1823 ULONG WINAPI RtlSizeHeap(HANDLE,ULONG,PVOID);
1824 LPDWORD WINAPI RtlSubAuthoritySid(PSID,DWORD);
1825 LPBYTE WINAPI RtlSubAuthorityCountSid(PSID);
1826 NTSTATUS WINAPI RtlSystemTimeToLocalTime(const LARGE_INTEGER*,PLARGE_INTEGER);
1828 void WINAPI RtlTimeToTimeFields(const LARGE_INTEGER*,PTIME_FIELDS);
1829 BOOLEAN WINAPI RtlTimeFieldsToTime(PTIME_FIELDS,PLARGE_INTEGER);
1830 void WINAPI RtlTimeToElapsedTimeFields(const LARGE_INTEGER *,PTIME_FIELDS);
1831 BOOLEAN WINAPI RtlTimeToSecondsSince1970(const LARGE_INTEGER *,LPDWORD);
1832 BOOLEAN WINAPI RtlTimeToSecondsSince1980(const LARGE_INTEGER *,LPDWORD);
1833 BOOL WINAPI RtlTryEnterCriticalSection(RTL_CRITICAL_SECTION *);
1835 ULONGLONG __cdecl RtlUlonglongByteSwap(ULONGLONG);
1836 DWORD WINAPI RtlUnicodeStringToAnsiSize(const UNICODE_STRING*);
1837 NTSTATUS WINAPI RtlUnicodeStringToAnsiString(PANSI_STRING,PCUNICODE_STRING,BOOLEAN);
1838 NTSTATUS WINAPI RtlUnicodeStringToInteger(const UNICODE_STRING *,ULONG,ULONG *);
1839 DWORD WINAPI RtlUnicodeStringToOemSize(const UNICODE_STRING*);
1840 NTSTATUS WINAPI RtlUnicodeStringToOemString(POEM_STRING,PCUNICODE_STRING,BOOLEAN);
1841 NTSTATUS WINAPI RtlUnicodeToMultiByteN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
1842 NTSTATUS WINAPI RtlUnicodeToMultiByteSize(PULONG,PCWSTR,ULONG);
1843 NTSTATUS WINAPI RtlUnicodeToOemN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
1844 ULONG WINAPI RtlUniform(PULONG);
1845 BOOLEAN WINAPI RtlUnlockHeap(HANDLE);
1846 void WINAPI RtlUnwind(PVOID,PVOID,PEXCEPTION_RECORD,PVOID);
1848 void WINAPI RtlUnwind2(FRAME_POINTERS,PVOID,PEXCEPTION_RECORD,PVOID,PCONTEXT);
1849 void WINAPI RtlUnwindEx(FRAME_POINTERS,PVOID,PEXCEPTION_RECORD,PVOID,PCONTEXT,PUNWIND_HISTORY_TABLE);
1851 WCHAR WINAPI RtlUpcaseUnicodeChar(WCHAR);
1852 NTSTATUS WINAPI RtlUpcaseUnicodeString(UNICODE_STRING*,const UNICODE_STRING *,BOOLEAN);
1853 NTSTATUS WINAPI RtlUpcaseUnicodeStringToAnsiString(STRING*,const UNICODE_STRING*,BOOLEAN);
1854 NTSTATUS WINAPI RtlUpcaseUnicodeStringToCountedOemString(STRING*,const UNICODE_STRING*,BOOLEAN);
1855 NTSTATUS WINAPI RtlUpcaseUnicodeStringToOemString(STRING*,const UNICODE_STRING*,BOOLEAN);
1856 NTSTATUS WINAPI RtlUpcaseUnicodeToMultiByteN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
1857 NTSTATUS WINAPI RtlUpcaseUnicodeToOemN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
1858 CHAR WINAPI RtlUpperChar(CHAR);
1859 void WINAPI RtlUpperString(STRING *,const STRING *);
1861 NTSTATUS WINAPI RtlValidSecurityDescriptor(PSECURITY_DESCRIPTOR);
1862 BOOLEAN WINAPI RtlValidAcl(PACL);
1863 BOOLEAN WINAPI RtlValidSid(PSID);
1864 BOOLEAN WINAPI RtlValidateHeap(HANDLE,ULONG,LPCVOID);
1865 NTSTATUS WINAPI RtlVerifyVersionInfo(const RTL_OSVERSIONINFOEXW*,DWORD,DWORDLONG);
1867 NTSTATUS WINAPI RtlWalkHeap(HANDLE,PVOID);
1869 NTSTATUS WINAPI RtlpWaitForCriticalSection(RTL_CRITICAL_SECTION *);
1870 NTSTATUS WINAPI RtlpUnWaitCriticalSection(RTL_CRITICAL_SECTION *);
1872 /* Wine internal functions */
1874 extern NTSTATUS wine_nt_to_unix_file_name( const UNICODE_STRING *nameW, ANSI_STRING *unix_name_ret,
1875 UINT disposition, BOOLEAN check_case );
1877 /***********************************************************************
1881 #define InitializeObjectAttributes(p,n,a,r,s) \
1883 (p)->Length = sizeof(OBJECT_ATTRIBUTES); \
1884 (p)->RootDirectory = r; \
1885 (p)->Attributes = a; \
1886 (p)->ObjectName = n; \
1887 (p)->SecurityDescriptor = s; \
1888 (p)->SecurityQualityOfService = NULL; \
1891 #define NtCurrentProcess() ((HANDLE)-1)
1893 #define RtlFillMemory(Destination,Length,Fill) memset((Destination),(Fill),(Length))
1894 #define RtlMoveMemory(Destination,Source,Length) memmove((Destination),(Source),(Length))
1895 #define RtlStoreUlong(p,v) do { ULONG _v = (v); memcpy((p), &_v, sizeof(_v)); } while (0)
1896 #define RtlStoreUlonglong(p,v) do { ULONGLONG _v = (v); memcpy((p), &_v, sizeof(_v)); } while (0)
1897 #define RtlRetrieveUlong(p,s) memcpy((p), (s), sizeof(ULONG))
1898 #define RtlRetrieveUlonglong(p,s) memcpy((p), (s), sizeof(ULONGLONG))
1899 #define RtlZeroMemory(Destination,Length) memset((Destination),0,(Length))
1901 inline static BOOLEAN RtlCheckBit(PCRTL_BITMAP lpBits, ULONG ulBit)
1903 if (lpBits && ulBit < lpBits->SizeOfBitMap &&
1904 lpBits->Buffer[ulBit >> 5] & (1 << (ulBit & 31)))
1909 /* These are implemented as __fastcall, so we can't let Winelib apps link with them */
1910 inline static USHORT RtlUshortByteSwap(USHORT s)
1912 return (s >> 8) | (s << 8);
1914 inline static ULONG RtlUlongByteSwap(ULONG i)
1916 #if defined(__i386__) && defined(__GNUC__)
1918 __asm__("bswap %0" : "=r" (ret) : "0" (i) );
1921 return ((ULONG)RtlUshortByteSwap((USHORT)i) << 16) | RtlUshortByteSwap((USHORT)(i >> 16));
1925 /*************************************************************************
1926 * Loader functions and structures.
1928 * Those are not part of standard Winternl.h
1930 typedef struct _LDR_MODULE
1932 LIST_ENTRY InLoadOrderModuleList;
1933 LIST_ENTRY InMemoryOrderModuleList;
1934 LIST_ENTRY InInitializationOrderModuleList;
1938 UNICODE_STRING FullDllName;
1939 UNICODE_STRING BaseDllName;
1943 HANDLE SectionHandle;
1945 ULONG TimeDateStamp;
1946 } LDR_MODULE, *PLDR_MODULE;
1948 /* those defines are (some of the) regular LDR_MODULE.Flags values */
1949 #define LDR_IMAGE_IS_DLL 0x00000004
1950 #define LDR_LOAD_IN_PROGRESS 0x00001000
1951 #define LDR_UNLOAD_IN_PROGRESS 0x00002000
1952 #define LDR_NO_DLL_CALLS 0x00040000
1953 #define LDR_PROCESS_ATTACHED 0x00080000
1954 #define LDR_MODULE_REBASED 0x00200000
1956 /* these ones is Wine specific */
1957 #define LDR_DONT_RESOLVE_REFS 0x40000000
1958 #define LDR_WINE_INTERNAL 0x80000000
1960 /* FIXME: to be checked */
1961 #define MAXIMUM_FILENAME_LENGTH 256
1963 typedef struct _SYSTEM_MODULE
1967 PVOID ImageBaseAddress;
1974 BYTE Name[MAXIMUM_FILENAME_LENGTH];
1975 } SYSTEM_MODULE, *PSYSTEM_MODULE;
1977 typedef struct _SYSTEM_MODULE_INFORMATION
1980 SYSTEM_MODULE Modules[1]; /* FIXME: should be Modules[0] */
1981 } SYSTEM_MODULE_INFORMATION, *PSYSTEM_MODULE_INFORMATION;
1983 NTSTATUS WINAPI LdrDisableThreadCalloutsForDll(HMODULE);
1984 NTSTATUS WINAPI LdrFindEntryForAddress(const void*, PLDR_MODULE*);
1985 NTSTATUS WINAPI LdrLockLoaderLock(ULONG,ULONG*,ULONG*);
1986 NTSTATUS WINAPI LdrQueryProcessModuleInformation(SYSTEM_MODULE_INFORMATION*, ULONG, ULONG*);
1987 NTSTATUS WINAPI LdrUnloadDll(HMODULE);
1988 NTSTATUS WINAPI LdrUnlockLoaderLock(ULONG,ULONG);
1990 /* list manipulation macros */
1991 #define InitializeListHead(le) (void)((le)->Flink = (le)->Blink = (le))
1992 #define InsertHeadList(le,e) do { PLIST_ENTRY f = (le)->Flink; (e)->Flink = f; (e)->Blink = (le); f->Blink = (e); (le)->Flink = (e); } while (0)
1993 #define InsertTailList(le,e) do { PLIST_ENTRY b = (le)->Blink; (e)->Flink = (le); (e)->Blink = b; b->Flink = (e); (le)->Blink = (e); } while (0)
1994 #define IsListEmpty(le) ((le)->Flink == (le))
1995 #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)
1996 static inline PLIST_ENTRY RemoveHeadList(PLIST_ENTRY le)
1998 PLIST_ENTRY f, b, e;
2001 f = le->Flink->Flink;
2002 b = le->Flink->Blink;
2006 if (e != le) e->Flink = e->Blink = NULL;
2009 static inline PLIST_ENTRY RemoveTailList(PLIST_ENTRY le)
2011 PLIST_ENTRY f, b, e;
2014 f = le->Blink->Flink;
2015 b = le->Blink->Blink;
2019 if (e != le) e->Flink = e->Blink = NULL;
2025 #endif /* defined(__cplusplus) */
2027 #endif /* __WINE_WINTERNL_H */