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;
66 /* 64 bit number of 100 nanoseconds intervals since January 1, 1601 */
67 typedef struct _FILETIME
69 #ifdef WORDS_BIGENDIAN
76 } FILETIME, *PFILETIME, *LPFILETIME;
77 #endif /* _FILETIME_ */
79 typedef struct _CLIENT_ID
83 } CLIENT_ID, *PCLIENT_ID;
85 typedef struct _CURDIR
87 UNICODE_STRING DosPath;
91 typedef struct RTL_DRIVE_LETTER_CURDIR
96 UNICODE_STRING DosPath;
97 } RTL_DRIVE_LETTER_CURDIR, *PRTL_DRIVE_LETTER_CURDIR;
99 typedef struct tagRTL_BITMAP {
100 ULONG SizeOfBitMap; /* Number of bits in the bitmap */
101 PULONG Buffer; /* Bitmap data, assumed sized to a DWORD boundary */
102 } RTL_BITMAP, *PRTL_BITMAP;
104 typedef const RTL_BITMAP *PCRTL_BITMAP;
106 typedef struct tagRTL_BITMAP_RUN {
107 ULONG StartingIndex; /* Bit position at which run starts */
108 ULONG NumberOfBits; /* Size of the run in bits */
109 } RTL_BITMAP_RUN, *PRTL_BITMAP_RUN;
111 typedef const RTL_BITMAP_RUN *PCRTL_BITMAP_RUN;
113 typedef struct _RTL_USER_PROCESS_PARAMETERS
115 ULONG AllocationSize;
119 HANDLE ConsoleHandle;
124 CURDIR CurrentDirectory;
125 UNICODE_STRING DllPath;
126 UNICODE_STRING ImagePathName;
127 UNICODE_STRING CommandLine;
135 ULONG dwFillAttribute;
138 UNICODE_STRING WindowTitle;
139 UNICODE_STRING Desktop;
140 UNICODE_STRING ShellInfo;
141 UNICODE_STRING RuntimeInfo;
142 RTL_DRIVE_LETTER_CURDIR DLCurrentDirectory[0x20];
143 } RTL_USER_PROCESS_PARAMETERS, *PRTL_USER_PROCESS_PARAMETERS;
145 /* value for Flags field (FIXME: not the correct name) */
146 #define PROCESS_PARAMS_FLAG_NORMALIZED 1
148 typedef struct _PEB_LDR_DATA
153 LIST_ENTRY InLoadOrderModuleList;
154 LIST_ENTRY InMemoryOrderModuleList;
155 LIST_ENTRY InInitializationOrderModuleList;
156 } PEB_LDR_DATA, *PPEB_LDR_DATA;
158 typedef struct _GDI_TEB_BATCH
165 /***********************************************************************
170 BOOLEAN InheritedAddressSpace; /* 00 */
171 BOOLEAN ReadImageFileExecOptions; /* 01 */
172 BOOLEAN BeingDebugged; /* 02 */
173 BOOLEAN SpareBool; /* 03 */
174 HANDLE Mutant; /* 04 */
175 HMODULE ImageBaseAddress; /* 08 */
176 PPEB_LDR_DATA LdrData; /* 0c */
177 RTL_USER_PROCESS_PARAMETERS *ProcessParameters; /* 10 */
178 PVOID SubSystemData; /* 14 */
179 HANDLE ProcessHeap; /* 18 */
180 PRTL_CRITICAL_SECTION FastPebLock; /* 1c */
181 PVOID /*PPEBLOCKROUTINE*/ FastPebLockRoutine; /* 20 */
182 PVOID /*PPEBLOCKROUTINE*/ FastPebUnlockRoutine; /* 24 */
183 ULONG EnvironmentUpdateCount; /* 28 */
184 PVOID KernelCallbackTable; /* 2c */
185 PVOID EventLogSection; /* 30 */
186 PVOID EventLog; /* 34 */
187 PVOID /*PPEB_FREE_BLOCK*/ FreeList; /* 38 */
188 ULONG TlsExpansionCounter; /* 3c */
189 PRTL_BITMAP TlsBitmap; /* 40 */
190 ULONG TlsBitmapBits[2]; /* 44 */
191 PVOID ReadOnlySharedMemoryBase; /* 4c */
192 PVOID ReadOnlySharedMemoryHeap; /* 50 */
193 PVOID *ReadOnlyStaticServerData; /* 54 */
194 PVOID AnsiCodePageData; /* 58 */
195 PVOID OemCodePageData; /* 5c */
196 PVOID UnicodeCaseTableData; /* 60 */
197 ULONG NumberOfProcessors; /* 64 */
198 ULONG NtGlobalFlag; /* 68 */
199 BYTE Spare2[4]; /* 6c */
200 LARGE_INTEGER CriticalSectionTimeout; /* 70 */
201 ULONG HeapSegmentReserve; /* 78 */
202 ULONG HeapSegmentCommit; /* 7c */
203 ULONG HeapDeCommitTotalFreeThreshold; /* 80 */
204 ULONG HeapDeCommitFreeBlockThreshold; /* 84 */
205 ULONG NumberOfHeaps; /* 88 */
206 ULONG MaximumNumberOfHeaps; /* 8c */
207 PVOID *ProcessHeaps; /* 90 */
208 PVOID GdiSharedHandleTable; /* 94 */
209 PVOID ProcessStarterHelper; /* 98 */
210 PVOID GdiDCAttributeList; /* 9c */
211 PVOID LoaderLock; /* a0 */
212 ULONG OSMajorVersion; /* a4 */
213 ULONG OSMinorVersion; /* a8 */
214 ULONG OSBuildNumber; /* ac */
215 ULONG OSPlatformId; /* b0 */
216 ULONG ImageSubSystem; /* b4 */
217 ULONG ImageSubSystemMajorVersion; /* b8 */
218 ULONG ImageSubSystemMinorVersion; /* bc */
219 ULONG ImageProcessAffinityMask; /* c0 */
220 ULONG GdiHandleBuffer[34]; /* c4 */
221 ULONG PostProcessInitRoutine; /* 14c */
222 PRTL_BITMAP TlsExpansionBitmap; /* 150 */
223 ULONG TlsExpansionBitmapBits[32]; /* 154 */
224 ULONG SessionId; /* 1d4 */
228 /***********************************************************************
231 #ifndef WINE_NO_TEB /* don't define TEB if included from thread.h */
232 # ifndef WINE_TEB_DEFINED
233 # define WINE_TEB_DEFINED
236 NT_TIB Tib; /* 000 */
237 PVOID EnvironmentPointer; /* 01c */
238 CLIENT_ID ClientId; /* 020 */
239 PVOID ActiveRpcHandle; /* 028 */
240 PVOID ThreadLocalStoragePointer; /* 02c */
242 ULONG LastErrorValue; /* 034 */
243 ULONG CountOfOwnedCriticalSections;/* 038 */
244 PVOID CsrClientThread; /* 03c */
245 PVOID Win32ThreadInfo; /* 040 */
246 ULONG Win32ClientInfo[31]; /* 044 used for user32 private data in Wine */
247 PVOID WOW32Reserved; /* 0c0 */
248 ULONG CurrentLocale; /* 0c4 */
249 ULONG FpSoftwareStatusRegister; /* 0c8 */
250 PVOID SystemReserved1[54]; /* 0cc used for kernel32 private data in Wine */
251 PVOID Spare1; /* 1a4 */
252 LONG ExceptionCode; /* 1a8 */
253 BYTE SpareBytes1[40]; /* 1ac */
254 PVOID SystemReserved2[10]; /* 1d4 used for ntdll private data in Wine */
255 GDI_TEB_BATCH GdiTebBatch; /* 1fc */
256 ULONG gdiRgn; /* 6dc */
257 ULONG gdiPen; /* 6e0 */
258 ULONG gdiBrush; /* 6e4 */
259 CLIENT_ID RealClientId; /* 6e8 */
260 HANDLE GdiCachedProcessHandle; /* 6f0 */
261 ULONG GdiClientPID; /* 6f4 */
262 ULONG GdiClientTID; /* 6f8 */
263 PVOID GdiThreadLocaleInfo; /* 6fc */
264 PVOID UserReserved[5]; /* 700 */
265 PVOID glDispachTable[280]; /* 714 */
266 ULONG glReserved1[26]; /* b74 */
267 PVOID glReserved2; /* bdc */
268 PVOID glSectionInfo; /* be0 */
269 PVOID glSection; /* be4 */
270 PVOID glTable; /* be8 */
271 PVOID glCurrentRC; /* bec */
272 PVOID glContext; /* bf0 */
273 ULONG LastStatusValue; /* bf4 */
274 UNICODE_STRING StaticUnicodeString; /* bf8 used by advapi32 */
275 WCHAR StaticUnicodeBuffer[261]; /* c00 used by advapi32 */
276 PVOID DeallocationStack; /* e0c */
277 PVOID TlsSlots[64]; /* e10 */
278 LIST_ENTRY TlsLinks; /* f10 */
280 PVOID ReservedForNtRpc; /* f1c */
281 PVOID DbgSsReserved[2]; /* f20 */
282 ULONG HardErrorDisabled; /* f28 */
283 PVOID Instrumentation[16]; /* f2c */
284 PVOID WinSockData; /* f6c */
285 ULONG GdiBatchCount; /* f70 */
286 ULONG Spare2; /* f74 */
287 ULONG Spare3; /* f78 */
288 ULONG Spare4; /* f7c */
289 PVOID ReservedForOle; /* f80 */
290 ULONG WaitingOnLoaderLock; /* f84 */
291 PVOID Reserved5[3]; /* f88 */
292 PVOID *TlsExpansionSlots; /* f94 */
294 # endif /* WINE_TEB_DEFINED */
295 #endif /* WINE_NO_TEB */
297 /***********************************************************************
301 typedef enum _FILE_INFORMATION_CLASS {
302 FileDirectoryInformation = 1,
303 FileFullDirectoryInformation,
304 FileBothDirectoryInformation,
305 FileBasicInformation,
306 FileStandardInformation,
307 FileInternalInformation,
309 FileAccessInformation,
311 FileRenameInformation,
313 FileNamesInformation,
314 FileDispositionInformation,
315 FilePositionInformation,
316 FileFullEaInformation,
318 FileAlignmentInformation,
320 FileAllocationInformation,
321 FileEndOfFileInformation,
322 FileAlternateNameInformation,
323 FileStreamInformation,
325 FilePipeLocalInformation,
326 FilePipeRemoteInformation,
327 FileMailslotQueryInformation,
328 FileMailslotSetInformation,
329 FileCompressionInformation,
330 FileObjectIdInformation,
331 FileCompletionInformation,
332 FileMoveClusterInformation,
333 FileQuotaInformation,
334 FileReparsePointInformation,
335 FileNetworkOpenInformation,
336 FileAttributeTagInformation,
337 FileTrackingInformation,
338 FileMaximumInformation
339 } FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;
341 typedef struct _FILE_DIRECTORY_INFORMATION {
342 ULONG NextEntryOffset;
344 LARGE_INTEGER CreationTime;
345 LARGE_INTEGER LastAccessTime;
346 LARGE_INTEGER LastWriteTime;
347 LARGE_INTEGER ChangeTime;
348 LARGE_INTEGER EndOfFile;
349 LARGE_INTEGER AllocationSize;
350 ULONG FileAttributes;
351 ULONG FileNameLength;
352 WCHAR FileName[ANYSIZE_ARRAY];
353 } FILE_DIRECTORY_INFORMATION, *PFILE_DIRECTORY_INFORMATION;
355 typedef struct _FILE_FULL_DIRECTORY_INFORMATION {
356 ULONG NextEntryOffset;
358 LARGE_INTEGER CreationTime;
359 LARGE_INTEGER LastAccessTime;
360 LARGE_INTEGER LastWriteTime;
361 LARGE_INTEGER ChangeTime;
362 LARGE_INTEGER EndOfFile;
363 LARGE_INTEGER AllocationSize;
364 ULONG FileAttributes;
365 ULONG FileNameLength;
367 WCHAR FileName[ANYSIZE_ARRAY];
368 } FILE_FULL_DIRECTORY_INFORMATION, *PFILE_FULL_DIRECTORY_INFORMATION,
369 FILE_FULL_DIR_INFORMATION, *PFILE_FULL_DIR_INFORMATION;
371 typedef struct _FILE_BOTH_DIRECTORY_INFORMATION {
372 ULONG NextEntryOffset;
374 LARGE_INTEGER CreationTime;
375 LARGE_INTEGER LastAccessTime;
376 LARGE_INTEGER LastWriteTime;
377 LARGE_INTEGER ChangeTime;
378 LARGE_INTEGER EndOfFile;
379 LARGE_INTEGER AllocationSize;
380 ULONG FileAttributes;
381 ULONG FileNameLength;
383 CHAR ShortNameLength;
385 WCHAR FileName[ANYSIZE_ARRAY];
386 } FILE_BOTH_DIRECTORY_INFORMATION, *PFILE_BOTH_DIRECTORY_INFORMATION,
387 FILE_BOTH_DIR_INFORMATION, *PFILE_BOTH_DIR_INFORMATION;
389 typedef struct _FILE_BASIC_INFORMATION {
390 LARGE_INTEGER CreationTime;
391 LARGE_INTEGER LastAccessTime;
392 LARGE_INTEGER LastWriteTime;
393 LARGE_INTEGER ChangeTime;
394 ULONG FileAttributes;
395 } FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION;
397 typedef struct _FILE_STANDARD_INFORMATION {
398 LARGE_INTEGER AllocationSize;
399 LARGE_INTEGER EndOfFile;
401 BOOLEAN DeletePending;
403 } FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION;
405 typedef struct _FILE_INTERNAL_INFORMATION {
406 LARGE_INTEGER IndexNumber;
407 } FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION;
409 typedef struct _FILE_EA_INFORMATION {
411 } FILE_EA_INFORMATION, *PFILE_EA_INFORMATION;
413 typedef struct _FILE_ACCESS_INFORMATION {
414 ACCESS_MASK AccessFlags;
415 } FILE_ACCESS_INFORMATION, *PFILE_ACCESS_INFORMATION;
417 typedef struct _FILE_NAME_INFORMATION {
418 ULONG FileNameLength;
420 } FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION;
422 typedef struct _FILE_RENAME_INFORMATION {
425 ULONG FileNameLength;
427 } FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION;
429 typedef struct _FILE_NAMES_INFORMATION {
430 ULONG NextEntryOffset;
432 ULONG FileNameLength;
434 } FILE_NAMES_INFORMATION, *PFILE_NAMES_INFORMATION;
436 typedef struct _FILE_DISPOSITION_INFORMATION {
437 BOOLEAN DoDeleteFile;
438 } FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION;
440 typedef struct _FILE_POSITION_INFORMATION {
441 LARGE_INTEGER CurrentByteOffset;
442 } FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION;
444 typedef struct _FILE_ALIGNMENT_INFORMATION {
445 ULONG AlignmentRequirement;
446 } FILE_ALIGNMENT_INFORMATION, *PFILE_ALIGNMENT_INFORMATION;
448 typedef struct _FILE_ALLOCATION_INFORMATION {
449 LARGE_INTEGER AllocationSize;
450 } FILE_ALLOCATION_INFORMATION, *PFILE_ALLOCATION_INFORMATION;
452 typedef struct _FILE_END_OF_FILE_INFORMATION {
453 LARGE_INTEGER EndOfFile;
454 } FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION;
456 typedef struct _FILE_NETWORK_OPEN_INFORMATION {
457 LARGE_INTEGER CreationTime;
458 LARGE_INTEGER LastAccessTime;
459 LARGE_INTEGER LastWriteTime;
460 LARGE_INTEGER ChangeTime;
461 LARGE_INTEGER AllocationSize;
462 LARGE_INTEGER EndOfFile;
463 ULONG FileAttributes;
464 } FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION;
466 typedef struct _FILE_FULL_EA_INFORMATION {
467 ULONG NextEntryOffset;
470 USHORT EaValueLength;
472 } FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION;
474 typedef struct _FILE_MODE_INFORMATION {
476 } FILE_MODE_INFORMATION, *PFILE_MODE_INFORMATION;
478 typedef struct _FILE_STREAM_INFORMATION
480 ULONG NextEntryOffset;
481 ULONG StreamNameLength;
482 LARGE_INTEGER StreamSize;
483 LARGE_INTEGER StreamAllocationSize;
485 } FILE_STREAM_INFORMATION, *PFILE_STREAM_INFORMATION;
487 typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION
489 ULONG FileAttributes;
491 } FILE_ATTRIBUTE_TAG_INFORMATION, *PFILE_ATTRIBUTE_TAG_INFORMATION;
493 typedef struct _FILE_MAILSLOT_QUERY_INFORMATION {
494 ULONG MaximumMessageSize;
496 ULONG NextMessageSize;
497 ULONG MessagesAvailable;
498 LARGE_INTEGER ReadTimeout;
499 } FILE_MAILSLOT_QUERY_INFORMATION, *PFILE_MAILSLOT_QUERY_INFORMATION;
501 typedef struct _FILE_MAILSLOT_SET_INFORMATION {
502 LARGE_INTEGER ReadTimeout;
503 } FILE_MAILSLOT_SET_INFORMATION, *PFILE_MAILSLOT_SET_INFORMATION;
505 typedef struct _FILE_ALL_INFORMATION
507 FILE_BASIC_INFORMATION BasicInformation;
508 FILE_STANDARD_INFORMATION StandardInformation;
509 FILE_INTERNAL_INFORMATION InternalInformation;
510 FILE_EA_INFORMATION EaInformation;
511 FILE_ACCESS_INFORMATION AccessInformation;
512 FILE_POSITION_INFORMATION PositionInformation;
513 FILE_MODE_INFORMATION ModeInformation;
514 FILE_ALIGNMENT_INFORMATION AlignmentInformation;
515 FILE_NAME_INFORMATION NameInformation;
516 } FILE_ALL_INFORMATION, *PFILE_ALL_INFORMATION;
518 typedef enum _FSINFOCLASS {
519 FileFsVolumeInformation = 1,
520 FileFsLabelInformation,
521 FileFsSizeInformation,
522 FileFsDeviceInformation,
523 FileFsAttributeInformation,
524 FileFsControlInformation,
525 FileFsFullSizeInformation,
526 FileFsObjectIdInformation,
527 FileFsMaximumInformation
528 } FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS;
530 typedef enum _KEY_INFORMATION_CLASS {
534 } KEY_INFORMATION_CLASS;
536 typedef enum _KEY_VALUE_INFORMATION_CLASS {
537 KeyValueBasicInformation,
538 KeyValueFullInformation,
539 KeyValuePartialInformation,
540 KeyValueFullInformationAlign64,
541 KeyValuePartialInformationAlign64
542 } KEY_VALUE_INFORMATION_CLASS;
544 typedef enum _OBJECT_INFORMATION_CLASS {
545 ObjectBasicInformation,
546 ObjectNameInformation,
547 ObjectTypeInformation,
548 ObjectAllInformation,
549 ObjectDataInformation
550 } OBJECT_INFORMATION_CLASS, *POBJECT_INFORMATION_CLASS;
552 typedef enum _PROCESSINFOCLASS {
553 ProcessBasicInformation = 0,
554 ProcessQuotaLimits = 1,
555 ProcessIoCounters = 2,
556 ProcessVmCounters = 3,
558 ProcessBasePriority = 5,
559 ProcessRaisePriority = 6,
560 ProcessDebugPort = 7,
561 ProcessExceptionPort = 8,
562 ProcessAccessToken = 9,
563 ProcessLdtInformation = 10,
565 ProcessDefaultHardErrorMode = 12,
566 ProcessIoPortHandlers = 13,
567 ProcessPooledUsageAndLimits = 14,
568 ProcessWorkingSetWatch = 15,
569 ProcessUserModeIOPL = 16,
570 ProcessEnableAlignmentFaultFixup = 17,
571 ProcessPriorityClass = 18,
572 ProcessWx86Information = 19,
573 ProcessHandleCount = 20,
574 ProcessAffinityMask = 21,
575 ProcessPriorityBoost = 22,
576 ProcessDeviceMap = 23,
577 ProcessSessionInformation = 24,
578 ProcessForegroundInformation = 25,
579 ProcessWow64Information = 26,
583 typedef enum _SECTION_INHERIT {
588 typedef enum _SYSTEM_INFORMATION_CLASS {
589 SystemBasicInformation = 0,
590 SystemCpuInformation = 1,
591 SystemPerformanceInformation = 2,
592 SystemTimeOfDayInformation = 3, /* was SystemTimeInformation */
594 SystemProcessInformation = 5,
597 SystemProcessorPerformanceInformation = 8,
600 SystemModuleInformation = 11,
605 SystemHandleInformation = 16,
607 SystemPageFileInformation = 18,
610 SystemCacheInformation = 21,
612 SystemInterruptInformation = 23,
613 SystemDpcBehaviourInformation = 24,
614 SystemFullMemoryInformation = 25,
615 SystemNotImplemented6 = 25,
616 SystemLoadImage = 26,
617 SystemUnloadImage = 27,
618 SystemTimeAdjustmentInformation = 28,
619 SystemTimeAdjustment = 28,
620 SystemSummaryMemoryInformation = 29,
621 SystemNotImplemented7 = 29,
622 SystemNextEventIdInformation = 30,
623 SystemNotImplemented8 = 30,
624 SystemEventIdsInformation = 31,
625 SystemCrashDumpInformation = 32,
626 SystemExceptionInformation = 33,
627 SystemCrashDumpStateInformation = 34,
628 SystemKernelDebuggerInformation = 35,
629 SystemContextSwitchInformation = 36,
630 SystemRegistryQuotaInformation = 37,
631 SystemCurrentTimeZoneInformation = 44,
632 SystemTimeZoneInformation = 44,
633 SystemLookasideInformation = 45,
634 SystemSetTimeSlipEvent = 46,
635 SystemCreateSession = 47,
636 SystemDeleteSession = 48,
637 SystemInvalidInfoClass4 = 49,
638 SystemRangeStartInformation = 50,
639 SystemVerifierInformation = 51,
640 SystemAddVerifier = 52,
641 SystemSessionProcessesInformation = 53,
642 SystemInformationClassMax
643 } SYSTEM_INFORMATION_CLASS, *PSYSTEM_INFORMATION_CLASS;
645 typedef enum _TIMER_TYPE {
650 typedef enum _THREADINFOCLASS {
651 ThreadBasicInformation,
656 ThreadImpersonationToken,
657 ThreadDescriptorTableEntry,
658 ThreadEnableAlignmentFaultFixup,
659 ThreadEventPair_Reusable,
660 ThreadQuerySetWin32StartAddress,
662 ThreadPerformanceCount,
664 ThreadIdealProcessor,
666 ThreadSetTlsArrayAddress,
671 typedef struct _THREAD_BASIC_INFORMATION
674 PVOID TebBaseAddress;
679 } THREAD_BASIC_INFORMATION, *PTHREAD_BASIC_INFORMATION;
682 typedef enum _WINSTATIONINFOCLASS {
683 WinStationInformation = 8
684 } WINSTATIONINFOCLASS;
686 typedef enum _MEMORY_INFORMATION_CLASS {
687 MemoryBasicInformation,
688 MemoryWorkingSetList,
690 MemoryBasicVlmInformation
691 } MEMORY_INFORMATION_CLASS;
693 typedef enum _MUTANT_INFORMATION_CLASS
695 MutantBasicInformation
696 } MUTANT_INFORMATION_CLASS, *PMUTANT_INFORMATION_CLASS;
698 typedef struct _MUTANT_BASIC_INFORMATION {
700 BOOLEAN OwnedByCaller;
701 BOOLEAN AbandonedState;
702 } MUTANT_BASIC_INFORMATION, *PMUTANT_BASIC_INFORMATION;
704 typedef enum _TIMER_INFORMATION_CLASS
706 TimerBasicInformation = 0
707 } TIMER_INFORMATION_CLASS;
709 typedef struct _TIMER_BASIC_INFORMATION
711 LARGE_INTEGER RemainingTime;
713 } TIMER_BASIC_INFORMATION, *PTIMER_BASIC_INFORMATION;
716 /* return type of RtlDetermineDosPathNameType_U (FIXME: not the correct names) */
720 UNC_PATH, /* "//foo" */
721 ABSOLUTE_DRIVE_PATH, /* "c:/foo" */
722 RELATIVE_DRIVE_PATH, /* "c:foo" */
723 ABSOLUTE_PATH, /* "/foo" */
724 RELATIVE_PATH, /* "foo" */
725 DEVICE_PATH, /* "//./foo" */
726 UNC_DOT_PATH /* "//." */
729 /***********************************************************************
730 * IA64 specific types and data structures
735 typedef struct _FRAME_POINTERS {
736 ULONGLONG MemoryStackFp;
737 ULONGLONG BackingStoreFp;
738 } FRAME_POINTERS, *PFRAME_POINTERS;
740 #define UNWIND_HISTORY_TABLE_SIZE 12
742 typedef struct _RUNTIME_FUNCTION {
745 ULONG UnwindInfoAddress;
746 } RUNTIME_FUNCTION, *PRUNTIME_FUNCTION;
748 typedef struct _UNWIND_HISTORY_TABLE_ENTRY {
751 PRUNTIME_FUNCTION FunctionEntry;
752 } UNWIND_HISTORY_TABLE_ENTRY, *PUNWIND_HISTORY_TABLE_ENTRY;
754 typedef struct _UNWIND_HISTORY_TABLE {
759 UNWIND_HISTORY_TABLE_ENTRY Entry[UNWIND_HISTORY_TABLE_SIZE];
760 } UNWIND_HISTORY_TABLE, *PUNWIND_HISTORY_TABLE;
762 #endif /* defined(__ia64__) */
764 /***********************************************************************
765 * Types and data structures
768 /* This is used by NtQuerySystemInformation */
769 typedef struct _SYSTEM_THREAD_INFORMATION{
770 FILETIME ftKernelTime;
772 FILETIME ftCreateTime;
774 DWORD dwStartAddress;
777 DWORD dwCurrentPriority;
778 DWORD dwBasePriority;
779 DWORD dwContextSwitches;
783 } SYSTEM_THREAD_INFORMATION, *PSYSTEM_THREAD_INFORMATION;
785 typedef struct _IO_STATUS_BLOCK {
791 ULONG_PTR Information;
792 } IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
794 typedef void (WINAPI * PIO_APC_ROUTINE)(PVOID,PIO_STATUS_BLOCK,ULONG);
796 typedef struct _KEY_BASIC_INFORMATION {
797 LARGE_INTEGER LastWriteTime;
801 } KEY_BASIC_INFORMATION, *PKEY_BASIC_INFORMATION;
803 typedef struct _KEY_NODE_INFORMATION
805 LARGE_INTEGER LastWriteTime;
812 } KEY_NODE_INFORMATION, *PKEY_NODE_INFORMATION;
814 typedef struct _KEY_FULL_INFORMATION
816 LARGE_INTEGER LastWriteTime;
824 ULONG MaxValueNameLen;
825 ULONG MaxValueDataLen;
827 } KEY_FULL_INFORMATION, *PKEY_FULL_INFORMATION;
829 typedef struct _KEY_VALUE_ENTRY
831 PUNICODE_STRING ValueName;
835 } KEY_VALUE_ENTRY, *PKEY_VALUE_ENTRY;
837 typedef struct _KEY_VALUE_BASIC_INFORMATION {
842 } KEY_VALUE_BASIC_INFORMATION, *PKEY_VALUE_BASIC_INFORMATION;
844 typedef struct _KEY_VALUE_FULL_INFORMATION {
851 } KEY_VALUE_FULL_INFORMATION, *PKEY_VALUE_FULL_INFORMATION;
853 typedef struct _KEY_VALUE_PARTIAL_INFORMATION {
858 } KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION;
860 typedef struct _OBJECT_ATTRIBUTES {
862 HANDLE RootDirectory;
863 PUNICODE_STRING ObjectName;
865 PVOID SecurityDescriptor; /* type SECURITY_DESCRIPTOR */
866 PVOID SecurityQualityOfService; /* type SECURITY_QUALITY_OF_SERVICE */
867 } OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;
869 typedef struct _OBJECT_DATA_INFORMATION {
870 BOOLEAN InheritHandle;
871 BOOLEAN ProtectFromClose;
872 } OBJECT_DATA_INFORMATION, *POBJECT_DATA_INFORMATION;
874 typedef struct _PROCESS_BASIC_INFORMATION {
877 DWORD PebBaseAddress;
880 ULONG UniqueProcessId;
881 ULONG InheritedFromUniqueProcessId;
886 ULONG_PTR UniqueProcessId;
889 } PROCESS_BASIC_INFORMATION, *PPROCESS_BASIC_INFORMATION;
891 typedef struct _RTL_HEAP_DEFINITION {
892 ULONG Length; /* = sizeof(RTL_HEAP_DEFINITION) */
895 } RTL_HEAP_DEFINITION, *PRTL_HEAP_DEFINITION;
897 typedef struct _RTL_RWLOCK {
898 RTL_CRITICAL_SECTION rtlCS;
900 HANDLE hSharedReleaseSemaphore;
903 HANDLE hExclusiveReleaseSemaphore;
904 UINT uExclusiveWaiters;
907 HANDLE hOwningThreadId;
908 DWORD dwTimeoutBoost;
910 } RTL_RWLOCK, *LPRTL_RWLOCK;
912 /* System Information Class 0x00 */
914 typedef struct _SYSTEM_BASIC_INFORMATION {
917 ULONG uKeMaximumIncrement;
919 ULONG uMmNumberOfPhysicalPages;
920 ULONG uMmLowestPhysicalPage;
921 ULONG uMmHighestPhysicalPage;
922 ULONG uAllocationGranularity;
923 PVOID pLowestUserAddress;
924 PVOID pMmHighestUserAddress;
925 ULONG uKeActiveProcessors;
926 BYTE bKeNumberProcessors;
932 CCHAR NumberOfProcessors;
934 } SYSTEM_BASIC_INFORMATION, *PSYSTEM_BASIC_INFORMATION;
936 /* System Information Class 0x01 */
938 typedef struct _SYSTEM_CPU_INFORMATION {
941 WORD Revision; /* combination of CPU model and stepping */
942 WORD Reserved; /* always zero */
943 DWORD FeatureSet; /* see bit flags below */
944 } SYSTEM_CPU_INFORMATION, *PSYSTEM_CPU_INFORMATION;
946 /* definitions of bits in the Feature set for the x86 processors */
947 #define CPU_FEATURE_VME 0x00000005 /* Virtual 86 Mode Extensions */
948 #define CPU_FEATURE_TSC 0x00000002 /* Time Stamp Counter available */
949 #define CPU_FEATURE_CMOV 0x00000008 /* Conditional Move instruction*/
950 #define CPU_FEATURE_PGE 0x00000014 /* Page table Entry Global bit */
951 #define CPU_FEATURE_PSE 0x00000024 /* Page Size Extension */
952 #define CPU_FEATURE_MTRR 0x00000040 /* Memory Type Range Registers */
953 #define CPU_FEATURE_CX8 0x00000080 /* Compare and eXchange 8 byte instr. */
954 #define CPU_FEATURE_MMX 0x00000100 /* Multi Media eXtensions */
955 #define CPU_FEATURE_X86 0x00000200 /* seems to be alway ON, on the '86 */
956 #define CPU_FEATURE_PAT 0x00000400 /* Page Attribute Table */
957 #define CPU_FEATURE_FXSR 0x00000800 /* FXSAVE and FXSTORE instructions */
958 #define CPU_FEATURE_SEP 0x00001000 /* SYSENTER and SYSEXIT instructions */
959 #define CPU_FEATURE_SSE 0x00002000 /* SSE extenstions (ext. MMX) */
960 #define CPU_FEATURE_3DNOW 0x00008000 /* 3DNOW instructions available
961 (FIXME: needs to be confirmed) */
962 #define CPU_FEATURE_SSE2 0x00010000 /* SSE2 extensions (XMMI64) */
963 #define CPU_FEATURE_DS 0x00020000 /* Debug Store */
964 #define CPU_FEATURE_HTT 0x00040000 /* Hyper Threading Technology */
966 /* System Information Class 0x02 */
968 typedef struct _SYSTEM_PERFORMANCE_INFORMATION {
970 } SYSTEM_PERFORMANCE_INFORMATION, *PSYSTEM_PERFORMANCE_INFORMATION;
972 /* System Information Class 0x03 */
974 typedef struct _SYSTEM_TIMEOFDAY_INFORMATION {
976 LARGE_INTEGER liKeBootTime;
977 LARGE_INTEGER liKeSystemTime;
978 LARGE_INTEGER liExpTimeZoneBias;
979 ULONG uCurrentTimeZoneId;
984 } SYSTEM_TIMEOFDAY_INFORMATION, *PSYSTEM_TIMEOFDAY_INFORMATION; /* was SYSTEM_TIME_INFORMATION */
986 /* System Information Class 0x08 */
988 typedef struct _SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION {
990 LARGE_INTEGER liIdleTime;
993 LARGE_INTEGER IdleTime;
994 LARGE_INTEGER KernelTime;
995 LARGE_INTEGER UserTime;
996 LARGE_INTEGER Reserved1[2];
999 } SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION, *PSYSTEM_PROCESSOR_PERFORMANCE_INFORMATION;
1001 /* System Information Class 0x0b */
1003 typedef struct _SYSTEM_DRIVER_INFORMATION {
1009 char szName[MAX_PATH + 1];
1010 } SYSTEM_DRIVER_INFORMATION, *PSYSTEM_DRIVER_INFORMATION;
1012 /* System Information Class 0x10 */
1014 typedef struct _SYSTEM_HANDLE_ENTRY {
1019 PVOID ObjectPointer;
1021 } SYSTEM_HANDLE_ENTRY, *PSYSTEM_HANDLE_ENTRY;
1023 typedef struct _SYSTEM_HANDLE_INFORMATION {
1025 SYSTEM_HANDLE_ENTRY Handle[1];
1026 } SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION;
1028 /* System Information Class 0x15 */
1030 typedef struct _SYSTEM_CACHE_INFORMATION {
1033 ULONG PageFaultCount;
1034 ULONG MinimumWorkingSet;
1035 ULONG MaximumWorkingSet;
1037 } SYSTEM_CACHE_INFORMATION, *PSYSTEM_CACHE_INFORMATION;
1039 /* System Information Class 0x17 */
1041 typedef struct _SYSTEM_INTERRUPT_INFORMATION {
1043 } SYSTEM_INTERRUPT_INFORMATION, *PSYSTEM_INTERRUPT_INFORMATION;
1045 typedef struct _SYSTEM_CONFIGURATION_INFO {
1049 WORD ProcessorArchitecture;
1054 PVOID MinimumApplicationAddress;
1055 PVOID MaximumApplicationAddress;
1056 ULONG ActiveProcessorMask;
1057 ULONG NumberOfProcessors;
1058 ULONG ProcessorType;
1059 ULONG AllocationGranularity;
1060 WORD ProcessorLevel;
1061 WORD ProcessorRevision;
1062 } SYSTEM_CONFIGURATION_INFO, *PSYSTEM_CONFIGURATION_INFO;
1064 typedef struct _SYSTEM_EXCEPTION_INFORMATION {
1066 } SYSTEM_EXCEPTION_INFORMATION, *PSYSTEM_EXCEPTION_INFORMATION;
1068 typedef struct _SYSTEM_LOOKASIDE_INFORMATION {
1070 } SYSTEM_LOOKASIDE_INFORMATION, *PSYSTEM_LOOKASIDE_INFORMATION;
1072 typedef struct _SYSTEM_KERNEL_DEBUGGER_INFORMATION {
1073 BOOLEAN DebuggerEnabled;
1074 BOOLEAN DebuggerNotPresent;
1075 } SYSTEM_KERNEL_DEBUGGER_INFORMATION, *PSYSTEM_KERNEL_DEBUGGER_INFORMATION;
1077 /* System Information Class 0x05 */
1079 typedef struct _VM_COUNTERS_ {
1080 SIZE_T PeakVirtualSize;
1082 ULONG PageFaultCount;
1083 SIZE_T PeakWorkingSetSize;
1084 SIZE_T WorkingSetSize;
1085 SIZE_T QuotaPeakPagedPoolUsage;
1086 SIZE_T QuotaPagedPoolUsage;
1087 SIZE_T QuotaPeakNonPagedPoolUsage;
1088 SIZE_T QuotaNonPagedPoolUsage;
1089 SIZE_T PagefileUsage;
1090 SIZE_T PeakPagefileUsage;
1091 } VM_COUNTERS, *PVM_COUNTERS;
1093 typedef struct _SYSTEM_PROCESS_INFORMATION {
1096 DWORD dwThreadCount;
1097 DWORD dwUnknown1[6];
1098 FILETIME ftCreationTime;
1099 FILETIME ftUserTime;
1100 FILETIME ftKernelTime;
1101 UNICODE_STRING ProcessName;
1102 DWORD dwBasePriority;
1104 DWORD dwParentProcessID;
1105 DWORD dwHandleCount;
1108 VM_COUNTERS vmCounters;
1109 IO_COUNTERS ioCounters;
1110 SYSTEM_THREAD_INFORMATION ti[1];
1112 ULONG NextEntryOffset;
1115 HANDLE UniqueProcessId;
1119 PVOID Reserved5[11];
1120 SIZE_T PeakPagefileUsage;
1121 SIZE_T PrivatePageCount;
1122 LARGE_INTEGER Reserved6[6];
1124 } SYSTEM_PROCESS_INFORMATION, *PSYSTEM_PROCESS_INFORMATION;
1126 typedef struct _SYSTEM_REGISTRY_QUOTA_INFORMATION {
1127 ULONG RegistryQuotaAllowed;
1128 ULONG RegistryQuotaUsed;
1130 } SYSTEM_REGISTRY_QUOTA_INFORMATION, *PSYSTEM_REGISTRY_QUOTA_INFORMATION;
1132 typedef struct _SYSTEM_TIME_ADJUSTMENT {
1133 ULONG TimeAdjustment;
1134 BOOLEAN TimeAdjustmentDisabled;
1135 } SYSTEM_TIME_ADJUSTMENT, *PSYSTEM_TIME_ADJUSTMENT;
1137 typedef struct _TIME_FIELDS
1144 CSHORT Milliseconds;
1146 } TIME_FIELDS, *PTIME_FIELDS;
1148 typedef struct _WINSTATIONINFORMATIONW {
1151 BYTE Reserved3[1140];
1152 } WINSTATIONINFORMATIONW, *PWINSTATIONINFORMATIONW;
1154 typedef BOOLEAN (WINAPI * PWINSTATIONQUERYINFORMATIONW)(HANDLE,ULONG,WINSTATIONINFOCLASS,PVOID,ULONG,PULONG);
1156 typedef struct _LDR_RESOURCE_INFO
1161 } LDR_RESOURCE_INFO, *PLDR_RESOURCE_INFO;
1164 /* debug buffer definitions */
1166 typedef struct _DEBUG_BUFFER {
1167 HANDLE SectionHandle;
1169 PVOID RemoteSectionBase;
1170 ULONG SectionBaseDelta;
1171 HANDLE EventPairHandle;
1173 HANDLE RemoteThreadHandle;
1174 ULONG InfoClassMask;
1176 ULONG AllocatedSize;
1178 PVOID ModuleInformation;
1179 PVOID BackTraceInformation;
1180 PVOID HeapInformation;
1181 PVOID LockInformation;
1183 } DEBUG_BUFFER, *PDEBUG_BUFFER;
1185 #define PDI_MODULES 0x01
1186 #define PDI_BACKTRACE 0x02
1187 #define PDI_HEAPS 0x04
1188 #define PDI_HEAP_TAGS 0x08
1189 #define PDI_HEAP_BLOCKS 0x10
1190 #define PDI_LOCKS 0x20
1192 typedef struct _DEBUG_MODULE_INFORMATION {
1200 USHORT ModuleNameOffset;
1201 CHAR ImageName[256];
1202 } DEBUG_MODULE_INFORMATION, *PDEBUG_MODULE_INFORMATION;
1204 typedef struct _DEBUG_HEAP_INFORMATION {
1216 } DEBUG_HEAP_INFORMATION, *PDEBUG_HEAP_INFORMATION;
1218 typedef struct _DEBUG_LOCK_INFORMATION {
1221 USHORT CreatorBackTraceIndex;
1222 ULONG OwnerThreadId;
1224 ULONG ContentionCount;
1226 ULONG RecursionCount;
1227 ULONG NumberOfSharedWaiters;
1228 ULONG NumberOfExclusiveWaiters;
1229 } DEBUG_LOCK_INFORMATION, *PDEBUG_LOCK_INFORMATION;
1231 typedef struct _PORT_MESSAGE_HEADER {
1235 USHORT VirtualRangesOffset;
1239 } PORT_MESSAGE_HEADER, *PPORT_MESSAGE_HEADER, PORT_MESSAGE, *PPORT_MESSAGE;
1241 typedef unsigned short RTL_ATOM, *PRTL_ATOM;
1243 /* Wine doesn't implement atom table as NT does:
1244 * - in NT, atom tables are user space tables, which ntdll directly accesses
1245 * - on Wine, (even local) atom tables are wineserver object, hence a HANDLE
1247 typedef struct atom_table *RTL_ATOM_TABLE, **PRTL_ATOM_TABLE;
1249 typedef enum _ATOM_INFORMATION_CLASS {
1250 AtomBasicInformation = 0,
1251 AtomTableInformation = 1,
1252 } ATOM_INFORMATION_CLASS;
1254 typedef struct _ATOM_BASIC_INFORMATION {
1255 USHORT ReferenceCount;
1259 } ATOM_BASIC_INFORMATION, *PATOM_BASIC_INFORMATION;
1261 /* FIXME: names probably not correct */
1262 typedef struct _RTL_HANDLE
1264 struct _RTL_HANDLE * Next;
1267 /* FIXME: names probably not correct */
1268 typedef struct _RTL_HANDLE_TABLE
1270 ULONG MaxHandleCount; /* 0x00 */
1271 ULONG HandleSize; /* 0x04 */
1272 ULONG Unused[2]; /* 0x08-0x0c */
1273 PVOID NextFree; /* 0x10 */
1274 PVOID FirstHandle; /* 0x14 */
1275 PVOID ReservedMemory; /* 0x18 */
1276 PVOID MaxHandle; /* 0x1c */
1279 /***********************************************************************
1283 /* flags for NtCreateFile and NtOpenFile */
1284 #define FILE_DIRECTORY_FILE 0x00000001
1285 #define FILE_WRITE_THROUGH 0x00000002
1286 #define FILE_SEQUENTIAL_ONLY 0x00000004
1287 #define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008
1288 #define FILE_SYNCHRONOUS_IO_ALERT 0x00000010
1289 #define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020
1290 #define FILE_NON_DIRECTORY_FILE 0x00000040
1291 #define FILE_CREATE_TREE_CONNECTION 0x00000080
1292 #define FILE_COMPLETE_IF_OPLOCKED 0x00000100
1293 #define FILE_NO_EA_KNOWLEDGE 0x00000200
1294 #define FILE_OPEN_FOR_RECOVERY 0x00000400
1295 #define FILE_RANDOM_ACCESS 0x00000800
1296 #define FILE_DELETE_ON_CLOSE 0x00001000
1297 #define FILE_OPEN_BY_FILE_ID 0x00002000
1298 #define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000
1299 #define FILE_NO_COMPRESSION 0x00008000
1300 #define FILE_RESERVE_OPFILTER 0x00100000
1301 #define FILE_TRANSACTED_MODE 0x00200000
1302 #define FILE_OPEN_OFFLINE_FILE 0x00400000
1303 #define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000
1305 #define FILE_ATTRIBUTE_VALID_FLAGS 0x00007fb7
1306 #define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x000031a7
1308 /* status for NtCreateFile or NtOpenFile */
1309 #define FILE_SUPERSEDED 0
1310 #define FILE_OPENED 1
1311 #define FILE_CREATED 2
1312 #define FILE_OVERWRITTEN 3
1313 #define FILE_EXISTS 4
1314 #define FILE_DOES_NOT_EXIST 5
1316 /* disposition for NtCreateFile */
1317 #define FILE_SUPERSEDE 0
1319 #define FILE_CREATE 2
1320 #define FILE_OPEN_IF 3
1321 #define FILE_OVERWRITE 4
1322 #define FILE_OVERWRITE_IF 5
1323 #define FILE_MAXIMUM_DISPOSITION 5
1325 /* Characteristics of a File System */
1326 #define FILE_REMOVABLE_MEDIA 0x00000001
1327 #define FILE_READ_ONLY_DEVICE 0x00000002
1328 #define FILE_FLOPPY_DISKETTE 0x00000004
1329 #define FILE_WRITE_ONE_MEDIA 0x00000008
1330 #define FILE_REMOTE_DEVICE 0x00000010
1331 #define FILE_DEVICE_IS_MOUNTED 0x00000020
1332 #define FILE_VIRTUAL_VOLUME 0x00000040
1333 #define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080
1334 #define FILE_DEVICE_SECURE_OPEN 0x00000100
1336 /* options for NtCreateNamedPipeFile */
1337 #define FILE_PIPE_INBOUND 0x00000000
1338 #define FILE_PIPE_OUTBOUND 0x00000001
1339 #define FILE_PIPE_FULL_DUPLEX 0x00000002
1341 #if (_WIN32_WINNT >= 0x0501)
1342 #define INTERNAL_TS_ACTIVE_CONSOLE_ID ( *((volatile ULONG*)(0x7ffe02d8)) )
1343 #endif /* (_WIN32_WINNT >= 0x0501) */
1345 #define LOGONID_CURRENT ((ULONG)-1)
1347 #define OBJ_INHERIT 0x00000002L
1348 #define OBJ_PERMANENT 0x00000010L
1349 #define OBJ_EXCLUSIVE 0x00000020L
1350 #define OBJ_CASE_INSENSITIVE 0x00000040L
1351 #define OBJ_OPENIF 0x00000080L
1352 #define OBJ_OPENLINK 0x00000100L
1353 #define OBJ_KERNEL_HANDLE 0x00000200L
1354 #define OBJ_VALID_ATTRIBUTES 0x000003F2L
1356 #define SERVERNAME_CURRENT ((HANDLE)NULL)
1358 typedef void (CALLBACK *PNTAPCFUNC)(ULONG_PTR,ULONG_PTR,ULONG_PTR); /* FIXME: not the right name */
1359 typedef void (CALLBACK *PRTL_THREAD_START_ROUTINE)(LPVOID); /* FIXME: not the right name */
1362 /* DbgPrintEx default levels */
1363 #define DPFLTR_ERROR_LEVEL 0
1364 #define DPFLTR_WARNING_LEVEL 1
1365 #define DPFLTR_TRACE_LEVEL 2
1366 #define DPFLTR_INFO_LEVEL 3
1367 #define DPFLTR_MASK 0x8000000
1369 /* Well-known LUID values */
1370 #define SE_MIN_WELL_KNOWN_PRIVILEGE 2L
1371 #define SE_CREATE_TOKEN_PRIVILEGE 2L
1372 #define SE_ASSIGNPRIMARYTOKEN_PRIVILEGE 3L
1373 #define SE_LOCK_MEMORY_PRIVILEGE 4L
1374 #define SE_INCREASE_QUOTA_PRIVILEGE 5L
1375 #define SE_UNSOLICITED_INPUT_PRIVILEGE 6L /* obsolete */
1376 #define SE_MACHINE_ACCOUNT_PRIVILEGE 6L
1377 #define SE_TCB_PRIVILEGE 7L
1378 #define SE_SECURITY_PRIVILEGE 8L
1379 #define SE_TAKE_OWNERSHIP_PRIVILEGE 9L
1380 #define SE_LOAD_DRIVER_PRIVILEGE 10L
1381 #define SE_SYSTEM_PROFILE_PRIVILEGE 11L
1382 #define SE_SYSTEMTIME_PRIVILEGE 12L
1383 #define SE_PROF_SINGLE_PROCESS_PRIVILEGE 13L
1384 #define SE_INC_BASE_PRIORITY_PRIVILEGE 14L
1385 #define SE_CREATE_PAGEFILE_PRIVILEGE 15L
1386 #define SE_CREATE_PERMANENT_PRIVILEGE 16L
1387 #define SE_BACKUP_PRIVILEGE 17L
1388 #define SE_RESTORE_PRIVILEGE 18L
1389 #define SE_SHUTDOWN_PRIVILEGE 19L
1390 #define SE_DEBUG_PRIVILEGE 20L
1391 #define SE_AUDIT_PRIVILEGE 21L
1392 #define SE_SYSTEM_ENVIRONMENT_PRIVILEGE 22L
1393 #define SE_CHANGE_NOTIFY_PRIVILLEGE 23L
1394 #define SE_REMOTE_SHUTDOWN_PRIVILEGE 24L
1395 #define SE_UNDOCK_PRIVILEGE 25L
1396 #define SE_SYNC_AGENT_PRIVILEGE 26L
1397 #define SE_ENABLE_DELEGATION_PRIVILEGE 27L
1398 #define SE_MANAGE_VOLUME_PRIVILEGE 28L
1399 #define SE_IMPERSONATE_PRIVILEGE 29L
1400 #define SE_CREATE_GLOBAL_PRIVILEGE 30L
1401 #define SE_MAX_WELL_KNOWN_PRIVILEGE SE_CREATE_GLOBAL_PRIVILEGE
1404 /* Rtl*Registry* functions structs and defines */
1405 #define RTL_REGISTRY_ABSOLUTE 0
1406 #define RTL_REGISTRY_SERVICES 1
1407 #define RTL_REGISTRY_CONTROL 2
1408 #define RTL_REGISTRY_WINDOWS_NT 3
1409 #define RTL_REGISTRY_DEVICEMAP 4
1410 #define RTL_REGISTRY_USER 5
1412 #define RTL_REGISTRY_HANDLE 0x40000000
1413 #define RTL_REGISTRY_OPTIONAL 0x80000000
1415 #define RTL_QUERY_REGISTRY_SUBKEY 0x00000001
1416 #define RTL_QUERY_REGISTRY_TOPKEY 0x00000002
1417 #define RTL_QUERY_REGISTRY_REQUIRED 0x00000004
1418 #define RTL_QUERY_REGISTRY_NOVALUE 0x00000008
1419 #define RTL_QUERY_REGISTRY_NOEXPAND 0x00000010
1420 #define RTL_QUERY_REGISTRY_DIRECT 0x00000020
1421 #define RTL_QUERY_REGISTRY_DELETE 0x00000040
1423 typedef NTSTATUS (WINAPI *PRTL_QUERY_REGISTRY_ROUTINE)( PCWSTR ValueName,
1428 PVOID EntryContext);
1430 typedef struct _RTL_QUERY_REGISTRY_TABLE
1432 PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine;
1438 ULONG DefaultLength;
1439 } RTL_QUERY_REGISTRY_TABLE, *PRTL_QUERY_REGISTRY_TABLE;
1441 typedef struct _KEY_MULTIPLE_VALUE_INFORMATION
1443 PUNICODE_STRING ValueName;
1447 } KEY_MULTIPLE_VALUE_INFORMATION, *PKEY_MULTIPLE_VALUE_INFORMATION;
1449 typedef VOID (*PTIMER_APC_ROUTINE) ( PVOID, ULONG, LONG );
1451 typedef enum _EVENT_TYPE {
1453 SynchronizationEvent
1454 } EVENT_TYPE, *PEVENT_TYPE;
1456 typedef enum _EVENT_INFORMATION_CLASS {
1457 EventBasicInformation
1458 } EVENT_INFORMATION_CLASS, *PEVENT_INFORMATION_CLASS;
1460 typedef struct _EVENT_BASIC_INFORMATION {
1461 EVENT_TYPE EventType;
1463 } EVENT_BASIC_INFORMATION, *PEVENT_BASIC_INFORMATION;
1465 typedef enum _SEMAPHORE_INFORMATION_CLASS {
1466 SemaphoreBasicInformation
1467 } SEMAPHORE_INFORMATION_CLASS, *PSEMAPHORE_INFORMATION_CLASS;
1469 typedef struct _SEMAPHORE_BASIC_INFORMATION {
1472 } SEMAPHORE_BASIC_INFORMATION, *PSEMAPHORE_BASIC_INFORMATION;
1474 typedef enum _SECTION_INFORMATION_CLASS
1476 SectionBasicInformation,
1477 SectionImageInformation,
1478 } SECTION_INFORMATION_CLASS;
1480 typedef struct _SECTION_BASIC_INFORMATION {
1484 } SECTION_BASIC_INFORMATION, *PSECTION_BASIC_INFORMATION;
1486 typedef struct _SECTION_IMAGE_INFORMATION {
1488 ULONG StackZeroBits;
1489 ULONG StackReserved;
1491 ULONG ImageSubsystem;
1492 WORD SubsystemVersionLow;
1493 WORD SubsystemVersionHigh;
1495 ULONG ImageCharacteristics;
1496 ULONG ImageMachineType;
1498 } SECTION_IMAGE_INFORMATION, *PSECTION_IMAGE_INFORMATION;
1500 typedef struct _LPC_SECTION_WRITE {
1502 HANDLE SectionHandle;
1503 ULONG SectionOffset;
1506 PVOID TargetViewBase;
1507 } LPC_SECTION_WRITE, *PLPC_SECTION_WRITE;
1509 typedef struct _LPC_SECTION_READ {
1513 } LPC_SECTION_READ, *PLPC_SECTION_READ;
1515 typedef struct _LPC_MESSAGE {
1519 USHORT VirtualRangesOffset;
1523 UCHAR Data[ANYSIZE_ARRAY];
1524 } LPC_MESSAGE, *PLPC_MESSAGE;
1526 /***********************************************************************
1527 * Function declarations
1530 extern LPSTR _strlwr(LPSTR str); /* FIXME: Doesn't belong here */
1531 extern LPSTR _strupr(LPSTR str); /* FIXME: Doesn't belong here */
1533 #if defined(__i386__) && defined(__GNUC__)
1534 static inline void WINAPI DbgBreakPoint(void) { __asm__ __volatile__("int3"); }
1535 static inline void WINAPI DbgUserBreakPoint(void) { __asm__ __volatile__("int3"); }
1536 #else /* __i386__ && __GNUC__ */
1537 void WINAPI DbgBreakPoint(void);
1538 void WINAPI DbgUserBreakPoint(void);
1539 #endif /* __i386__ && __GNUC__ */
1540 NTSTATUS WINAPIV DbgPrint(LPCSTR fmt, ...);
1541 NTSTATUS WINAPIV DbgPrintEx(ULONG iComponentId, ULONG Level, LPCSTR fmt, ...);
1543 NTSTATUS WINAPI LdrAccessResource(HMODULE,const IMAGE_RESOURCE_DATA_ENTRY*,void**,PULONG);
1544 NTSTATUS WINAPI LdrFindResourceDirectory_U(HMODULE,const LDR_RESOURCE_INFO*,ULONG,const IMAGE_RESOURCE_DIRECTORY**);
1545 NTSTATUS WINAPI LdrFindResource_U(HMODULE,const LDR_RESOURCE_INFO*,ULONG,const IMAGE_RESOURCE_DATA_ENTRY**);
1546 NTSTATUS WINAPI LdrGetDllHandle(ULONG, ULONG, const UNICODE_STRING*, HMODULE*);
1547 NTSTATUS WINAPI LdrGetProcedureAddress(HMODULE, const ANSI_STRING*, ULONG, void**);
1548 void WINAPI LdrInitializeThunk(HANDLE,ULONG,ULONG,ULONG);
1549 NTSTATUS WINAPI LdrLoadDll(LPCWSTR, DWORD, const UNICODE_STRING*, HMODULE*);
1550 void WINAPI LdrShutdownProcess(void);
1551 void WINAPI LdrShutdownThread(void);
1552 NTSTATUS WINAPI NtAcceptConnectPort(PHANDLE,ULONG,PLPC_MESSAGE,BOOLEAN,PLPC_SECTION_WRITE,PLPC_SECTION_READ);
1553 NTSTATUS WINAPI NtAccessCheck(PSECURITY_DESCRIPTOR,HANDLE,ACCESS_MASK,PGENERIC_MAPPING,PPRIVILEGE_SET,PULONG,PULONG,NTSTATUS*);
1554 NTSTATUS WINAPI NtAddAtom(const WCHAR*,ULONG,RTL_ATOM*);
1555 NTSTATUS WINAPI NtAdjustGroupsToken(HANDLE,BOOLEAN,PTOKEN_GROUPS,ULONG,PTOKEN_GROUPS,PULONG);
1556 NTSTATUS WINAPI NtAdjustPrivilegesToken(HANDLE,BOOLEAN,PTOKEN_PRIVILEGES,DWORD,PTOKEN_PRIVILEGES,PDWORD);
1557 NTSTATUS WINAPI NtAlertThread(HANDLE ThreadHandle);
1558 NTSTATUS WINAPI NtAllocateLocallyUniqueId(PLUID lpLuid);
1559 NTSTATUS WINAPI NtAllocateVirtualMemory(HANDLE,PVOID*,ULONG,ULONG*,ULONG,ULONG);
1560 NTSTATUS WINAPI NtCancelIoFile(HANDLE,PIO_STATUS_BLOCK);
1561 NTSTATUS WINAPI NtCancelTimer(HANDLE, BOOLEAN*);
1562 NTSTATUS WINAPI NtClearEvent(HANDLE);
1563 NTSTATUS WINAPI NtClose(HANDLE);
1564 NTSTATUS WINAPI NtCompleteConnectPort(HANDLE);
1565 NTSTATUS WINAPI NtConnectPort(PHANDLE,PUNICODE_STRING,PSECURITY_QUALITY_OF_SERVICE,PLPC_SECTION_WRITE,PLPC_SECTION_READ,PULONG,PVOID,PULONG);
1566 NTSTATUS WINAPI NtCreateEvent(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES *,BOOLEAN,BOOLEAN);
1567 NTSTATUS WINAPI NtCreateFile(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,PLARGE_INTEGER,ULONG,ULONG,ULONG,ULONG,PVOID,ULONG);
1568 NTSTATUS WINAPI NtCreateIoCompletion(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,ULONG);
1569 NTSTATUS WINAPI NtCreateKey(PHKEY,ACCESS_MASK,const OBJECT_ATTRIBUTES*,ULONG,const UNICODE_STRING*,ULONG,PULONG);
1570 NTSTATUS WINAPI NtCreateMailslotFile(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,ULONG,ULONG,ULONG,PLARGE_INTEGER);
1571 NTSTATUS WINAPI NtCreateMutant(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,BOOLEAN);
1572 NTSTATUS WINAPI NtCreateNamedPipeFile(PHANDLE,ULONG,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,ULONG,ULONG,ULONG,ULONG,ULONG,ULONG,ULONG,ULONG,ULONG,PLARGE_INTEGER);
1573 NTSTATUS WINAPI NtCreatePort(PHANDLE,POBJECT_ATTRIBUTES,ULONG,ULONG,PULONG);
1574 NTSTATUS WINAPI NtCreateSection(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,const LARGE_INTEGER*,ULONG,ULONG,HANDLE);
1575 NTSTATUS WINAPI NtCreateSemaphore(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*,LONG,LONG);
1576 NTSTATUS WINAPI NtCreateTimer(HANDLE*, ACCESS_MASK, const OBJECT_ATTRIBUTES*, TIMER_TYPE);
1577 NTSTATUS WINAPI NtDelayExecution(BOOLEAN,const LARGE_INTEGER*);
1578 NTSTATUS WINAPI NtDeleteAtom(RTL_ATOM);
1579 NTSTATUS WINAPI NtDeleteFile(POBJECT_ATTRIBUTES);
1580 NTSTATUS WINAPI NtDeleteKey(HKEY);
1581 NTSTATUS WINAPI NtDeleteValueKey(HKEY,const UNICODE_STRING *);
1582 NTSTATUS WINAPI NtDeviceIoControlFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,PVOID,ULONG,PVOID,ULONG);
1583 NTSTATUS WINAPI NtDuplicateObject(HANDLE,HANDLE,HANDLE,PHANDLE,ACCESS_MASK,ULONG,ULONG);
1584 NTSTATUS WINAPI NtDuplicateToken(HANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,SECURITY_IMPERSONATION_LEVEL,TOKEN_TYPE,PHANDLE);
1585 NTSTATUS WINAPI NtEnumerateKey(HKEY,ULONG,KEY_INFORMATION_CLASS,void *,DWORD,DWORD *);
1586 NTSTATUS WINAPI NtEnumerateValueKey(HKEY,ULONG,KEY_VALUE_INFORMATION_CLASS,PVOID,ULONG,PULONG);
1587 NTSTATUS WINAPI NtFindAtom(const WCHAR*,ULONG,RTL_ATOM*);
1588 NTSTATUS WINAPI NtFlushBuffersFile(HANDLE,IO_STATUS_BLOCK*);
1589 NTSTATUS WINAPI NtFlushInstructionCache(HANDLE,LPCVOID,ULONG);
1590 NTSTATUS WINAPI NtFlushKey(HKEY);
1591 NTSTATUS WINAPI NtFlushVirtualMemory(HANDLE,LPCVOID*,ULONG*,ULONG);
1592 NTSTATUS WINAPI NtFreeVirtualMemory(HANDLE,PVOID*,ULONG*,ULONG);
1593 NTSTATUS WINAPI NtFsControlFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,PVOID,ULONG,PVOID,ULONG);
1594 NTSTATUS WINAPI NtGetContextThread(HANDLE,CONTEXT*);
1595 NTSTATUS WINAPI NtImpersonateAnonymousToken(HANDLE);
1596 NTSTATUS WINAPI NtImpersonateClientOfPort(HANDLE,PPORT_MESSAGE);
1597 NTSTATUS WINAPI NtImpersonateThread(HANDLE,HANDLE,PSECURITY_QUALITY_OF_SERVICE);
1598 NTSTATUS WINAPI NtInitiatePowerAction(POWER_ACTION,SYSTEM_POWER_STATE,ULONG,BOOLEAN);
1599 NTSTATUS WINAPI NtListenPort(HANDLE,PLPC_MESSAGE);
1600 NTSTATUS WINAPI NtLoadDriver(const UNICODE_STRING *);
1601 NTSTATUS WINAPI NtLoadKey(const OBJECT_ATTRIBUTES *,OBJECT_ATTRIBUTES *);
1602 NTSTATUS WINAPI NtLockFile(HANDLE,HANDLE,PIO_APC_ROUTINE,void*,PIO_STATUS_BLOCK,PLARGE_INTEGER,PLARGE_INTEGER,ULONG*,BOOLEAN,BOOLEAN);
1603 NTSTATUS WINAPI NtLockVirtualMemory(HANDLE,PVOID*,ULONG*,ULONG);
1604 NTSTATUS WINAPI NtMapViewOfSection(HANDLE,HANDLE,PVOID*,ULONG,ULONG,const LARGE_INTEGER*,ULONG*,SECTION_INHERIT,ULONG,ULONG);
1605 NTSTATUS WINAPI NtNotifyChangeKey(HKEY,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,BOOLEAN,PVOID,ULONG,BOOLEAN);
1606 NTSTATUS WINAPI NtOpenEvent(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES *);
1607 NTSTATUS WINAPI NtOpenFile(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,ULONG,ULONG);
1608 NTSTATUS WINAPI NtOpenIoCompletion(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES);
1609 NTSTATUS WINAPI NtOpenKey(PHKEY,ACCESS_MASK,const OBJECT_ATTRIBUTES *);
1610 NTSTATUS WINAPI NtOpenMutant(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*);
1611 NTSTATUS WINAPI NtOpenProcessToken(HANDLE,DWORD,HANDLE *);
1612 NTSTATUS WINAPI NtOpenSection(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*);
1613 NTSTATUS WINAPI NtOpenSemaphore(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*);
1614 NTSTATUS WINAPI NtOpenThread(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,const CLIENT_ID*);
1615 NTSTATUS WINAPI NtOpenThreadToken(HANDLE,DWORD,BOOLEAN,HANDLE *);
1616 NTSTATUS WINAPI NtOpenTimer(HANDLE*, ACCESS_MASK, const OBJECT_ATTRIBUTES*);
1617 NTSTATUS WINAPI NtPowerInformation(POWER_INFORMATION_LEVEL,PVOID,ULONG,PVOID,ULONG);
1618 NTSTATUS WINAPI NtPrivilegeCheck(HANDLE,PPRIVILEGE_SET,PBOOLEAN);
1619 NTSTATUS WINAPI NtProtectVirtualMemory(HANDLE,PVOID*,ULONG*,ULONG,ULONG*);
1620 NTSTATUS WINAPI NtPulseEvent(HANDLE,PULONG);
1621 NTSTATUS WINAPI NtQueueApcThread(HANDLE,PNTAPCFUNC,ULONG_PTR,ULONG_PTR,ULONG_PTR);
1622 NTSTATUS WINAPI NtQueryAttributesFile(const OBJECT_ATTRIBUTES*,FILE_BASIC_INFORMATION*);
1623 NTSTATUS WINAPI NtQueryDefaultLocale(BOOLEAN,LCID*);
1624 NTSTATUS WINAPI NtQueryDefaultUILanguage(LANGID*);
1625 NTSTATUS WINAPI NtQueryDirectoryFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,PVOID,ULONG,FILE_INFORMATION_CLASS,BOOLEAN,PUNICODE_STRING,BOOLEAN);
1626 NTSTATUS WINAPI NtQueryEaFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,BOOLEAN,PVOID,ULONG,PVOID,BOOLEAN);
1627 NTSTATUS WINAPI NtQueryEvent(HANDLE,EVENT_INFORMATION_CLASS,PVOID,ULONG,PULONG);
1628 NTSTATUS WINAPI NtQueryFullAttributesFile(const OBJECT_ATTRIBUTES*,FILE_NETWORK_OPEN_INFORMATION*);
1629 NTSTATUS WINAPI NtQueryInformationAtom(RTL_ATOM,ATOM_INFORMATION_CLASS,RTL_ATOM_TABLE,ULONG,ULONG*);
1630 NTSTATUS WINAPI NtQueryInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,LONG,FILE_INFORMATION_CLASS);
1631 NTSTATUS WINAPI NtQueryInformationProcess(HANDLE,PROCESSINFOCLASS,PVOID,ULONG,PULONG);
1632 NTSTATUS WINAPI NtQueryInformationThread(HANDLE,THREADINFOCLASS,PVOID,ULONG,PULONG);
1633 NTSTATUS WINAPI NtQueryInformationToken(HANDLE,DWORD,LPVOID,DWORD,LPDWORD);
1634 NTSTATUS WINAPI NtQueryInstallUILanguage(LANGID*);
1635 NTSTATUS WINAPI NtQueryKey(HKEY,KEY_INFORMATION_CLASS,void *,DWORD,DWORD *);
1636 NTSTATUS WINAPI NtQueryMultipleValueKey(HKEY,PKEY_MULTIPLE_VALUE_INFORMATION,ULONG,PVOID,ULONG,PULONG);
1637 NTSTATUS WINAPI NtQueryMutant(HANDLE,MUTANT_INFORMATION_CLASS,PVOID,ULONG,PULONG);
1638 NTSTATUS WINAPI NtQueryObject(HANDLE, OBJECT_INFORMATION_CLASS, PVOID, ULONG, PULONG);
1639 NTSTATUS WINAPI NtQueryPerformanceCounter(PLARGE_INTEGER, PLARGE_INTEGER);
1640 NTSTATUS WINAPI NtQuerySecurityObject(HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,ULONG,PULONG);
1641 NTSTATUS WINAPI NtQuerySection(HANDLE,SECTION_INFORMATION_CLASS,PVOID,ULONG,PULONG);
1642 NTSTATUS WINAPI NtQuerySemaphore(HANDLE,SEMAPHORE_INFORMATION_CLASS,PVOID,ULONG,PULONG);
1643 NTSTATUS WINAPI NtQuerySystemInformation(SYSTEM_INFORMATION_CLASS,PVOID,ULONG,PULONG);
1644 NTSTATUS WINAPI NtQuerySystemTime(PLARGE_INTEGER);
1645 NTSTATUS WINAPI NtQueryTimer(HANDLE,TIMER_INFORMATION_CLASS,PVOID,ULONG,PULONG);
1646 NTSTATUS WINAPI NtQueryValueKey(HKEY,const UNICODE_STRING *,KEY_VALUE_INFORMATION_CLASS,void *,DWORD,DWORD *);
1647 NTSTATUS WINAPI NtQueryVirtualMemory(HANDLE,LPCVOID,MEMORY_INFORMATION_CLASS,PVOID,ULONG,ULONG*);
1648 NTSTATUS WINAPI NtQueryVolumeInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,FS_INFORMATION_CLASS);
1649 void WINAPI NtRaiseException(PEXCEPTION_RECORD,PCONTEXT,BOOL);
1650 NTSTATUS WINAPI NtReadFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,PVOID,ULONG,PLARGE_INTEGER,PULONG);
1651 NTSTATUS WINAPI NtReadVirtualMemory(HANDLE,const void*,void*,SIZE_T,SIZE_T*);
1652 NTSTATUS WINAPI NtReleaseMutant(HANDLE,PLONG);
1653 NTSTATUS WINAPI NtReleaseSemaphore(HANDLE,ULONG,PULONG);
1654 NTSTATUS WINAPI NtRemoveIoCompletion(HANDLE,PULONG,PULONG,PIO_STATUS_BLOCK,PLARGE_INTEGER);
1655 NTSTATUS WINAPI NtReplaceKey(POBJECT_ATTRIBUTES,HKEY,POBJECT_ATTRIBUTES);
1656 NTSTATUS WINAPI NtReplyWaitReceivePort(HANDLE,PULONG,PLPC_MESSAGE,PLPC_MESSAGE);
1657 NTSTATUS WINAPI NtReplyWaitReplyPort(HANDLE,PLPC_MESSAGE);
1658 NTSTATUS WINAPI NtRequestWaitReplyPort(HANDLE,PLPC_MESSAGE,PLPC_MESSAGE);
1659 NTSTATUS WINAPI NtResetEvent(HANDLE,PULONG);
1660 NTSTATUS WINAPI NtRestoreKey(HKEY,HANDLE,ULONG);
1661 NTSTATUS WINAPI NtResumeThread(HANDLE,PULONG);
1662 NTSTATUS WINAPI NtSaveKey(HKEY,HANDLE);
1663 NTSTATUS WINAPI NtSetContextThread(HANDLE,const CONTEXT*);
1664 NTSTATUS WINAPI NtSetDefaultLocale(BOOLEAN,LCID);
1665 NTSTATUS WINAPI NtSetDefaultUILanguage(LANGID);
1666 NTSTATUS WINAPI NtSetEaFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG);
1667 NTSTATUS WINAPI NtSetEvent(HANDLE,PULONG);
1668 NTSTATUS WINAPI NtSetInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,FILE_INFORMATION_CLASS);
1669 NTSTATUS WINAPI NtSetInformationKey(HKEY,const int,PVOID,ULONG);
1670 NTSTATUS WINAPI NtSetInformationObject(HANDLE, OBJECT_INFORMATION_CLASS, PVOID, ULONG);
1671 NTSTATUS WINAPI NtSetInformationThread(HANDLE,THREADINFOCLASS,LPCVOID,ULONG);
1672 NTSTATUS WINAPI NtSetInformationToken(HANDLE,TOKEN_INFORMATION_CLASS,PVOID,ULONG);
1673 NTSTATUS WINAPI NtSetIoCompletion(HANDLE,ULONG,ULONG,NTSTATUS,ULONG);
1674 NTSTATUS WINAPI NtSetSecurityObject(HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR);
1675 NTSTATUS WINAPI NtSetSystemTime(const LARGE_INTEGER*,LARGE_INTEGER*);
1676 NTSTATUS WINAPI NtSetTimer(HANDLE, const LARGE_INTEGER*, PTIMER_APC_ROUTINE, PVOID, BOOLEAN, ULONG, BOOLEAN*);
1677 NTSTATUS WINAPI NtSetValueKey(HKEY,const UNICODE_STRING *,ULONG,ULONG,const void *,ULONG);
1678 NTSTATUS WINAPI NtSetVolumeInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,FS_INFORMATION_CLASS);
1679 NTSTATUS WINAPI NtSignalAndWaitForSingleObject(HANDLE,HANDLE,BOOLEAN,const LARGE_INTEGER*);
1680 NTSTATUS WINAPI NtSuspendThread(HANDLE,PULONG);
1681 NTSTATUS WINAPI NtTerminateProcess(HANDLE,LONG);
1682 NTSTATUS WINAPI NtTerminateThread(HANDLE,LONG);
1683 NTSTATUS WINAPI NtUnloadDriver(const UNICODE_STRING *);
1684 NTSTATUS WINAPI NtUnloadKey(HKEY);
1685 NTSTATUS WINAPI NtUnlockFile(HANDLE,PIO_STATUS_BLOCK,PLARGE_INTEGER,PLARGE_INTEGER,PULONG);
1686 NTSTATUS WINAPI NtUnlockVirtualMemory(HANDLE,PVOID*,ULONG*,ULONG);
1687 NTSTATUS WINAPI NtUnmapViewOfSection(HANDLE,PVOID);
1688 NTSTATUS WINAPI NtWaitForSingleObject(HANDLE,BOOLEAN,const LARGE_INTEGER*);
1689 NTSTATUS WINAPI NtWaitForMultipleObjects(ULONG,const HANDLE*,BOOLEAN,BOOLEAN,const LARGE_INTEGER*);
1690 NTSTATUS WINAPI NtWriteFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,const void*,ULONG,PLARGE_INTEGER,PULONG);
1691 NTSTATUS WINAPI NtWriteVirtualMemory(HANDLE,void*,const void*,SIZE_T,SIZE_T*);
1692 NTSTATUS WINAPI NtYieldExecution(void);
1694 void WINAPI RtlAcquirePebLock(void);
1695 BYTE WINAPI RtlAcquireResourceExclusive(LPRTL_RWLOCK,BYTE);
1696 BYTE WINAPI RtlAcquireResourceShared(LPRTL_RWLOCK,BYTE);
1697 NTSTATUS WINAPI RtlAddAce(PACL,DWORD,DWORD,PACE_HEADER,DWORD);
1698 NTSTATUS WINAPI RtlAddAccessAllowedAce(PACL,DWORD,DWORD,PSID);
1699 NTSTATUS WINAPI RtlAddAccessAllowedAceEx(PACL,DWORD,DWORD,DWORD,PSID);
1700 NTSTATUS WINAPI RtlAddAccessDeniedAce(PACL,DWORD,DWORD,PSID);
1701 NTSTATUS WINAPI RtlAddAccessDeniedAceEx(PACL,DWORD,DWORD,DWORD,PSID);
1702 NTSTATUS WINAPI RtlAddAtomToAtomTable(RTL_ATOM_TABLE,const WCHAR*,RTL_ATOM*);
1703 PVOID WINAPI RtlAddVectoredExceptionHandler(ULONG,PVECTORED_EXCEPTION_HANDLER);
1704 NTSTATUS WINAPI RtlAdjustPrivilege(ULONG,BOOLEAN,BOOLEAN,PBOOLEAN);
1705 NTSTATUS WINAPI RtlAllocateAndInitializeSid(PSID_IDENTIFIER_AUTHORITY,BYTE,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,PSID *);
1706 RTL_HANDLE * WINAPI RtlAllocateHandle(RTL_HANDLE_TABLE *,ULONG *);
1707 PVOID WINAPI RtlAllocateHeap(HANDLE,ULONG,ULONG);
1708 WCHAR WINAPI RtlAnsiCharToUnicodeChar(LPSTR *);
1709 DWORD WINAPI RtlAnsiStringToUnicodeSize(const STRING *);
1710 NTSTATUS WINAPI RtlAnsiStringToUnicodeString(PUNICODE_STRING,PCANSI_STRING,BOOLEAN);
1711 NTSTATUS WINAPI RtlAppendAsciizToString(STRING *,LPCSTR);
1712 NTSTATUS WINAPI RtlAppendStringToString(STRING *,const STRING *);
1713 NTSTATUS WINAPI RtlAppendUnicodeStringToString(UNICODE_STRING *,const UNICODE_STRING *);
1714 NTSTATUS WINAPI RtlAppendUnicodeToString(UNICODE_STRING *,LPCWSTR);
1715 BOOLEAN WINAPI RtlAreAllAccessesGranted(ACCESS_MASK,ACCESS_MASK);
1716 BOOLEAN WINAPI RtlAreAnyAccessesGranted(ACCESS_MASK,ACCESS_MASK);
1717 BOOLEAN WINAPI RtlAreBitsSet(PCRTL_BITMAP,ULONG,ULONG);
1718 BOOLEAN WINAPI RtlAreBitsClear(PCRTL_BITMAP,ULONG,ULONG);
1720 NTSTATUS WINAPI RtlCharToInteger(PCSZ,ULONG,PULONG);
1721 NTSTATUS WINAPI RtlCheckRegistryKey(ULONG, PWSTR);
1722 void WINAPI RtlClearAllBits(PRTL_BITMAP);
1723 void WINAPI RtlClearBits(PRTL_BITMAP,ULONG,ULONG);
1724 PDEBUG_BUFFER WINAPI RtlCreateQueryDebugBuffer(ULONG,BOOLEAN);
1725 ULONG WINAPI RtlCompactHeap(HANDLE,ULONG);
1726 LONG WINAPI RtlCompareString(const STRING*,const STRING*,BOOLEAN);
1727 LONG WINAPI RtlCompareUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
1728 DWORD WINAPI RtlComputeCrc32(DWORD,PBYTE,INT);
1729 NTSTATUS WINAPI RtlConvertSidToUnicodeString(PUNICODE_STRING,PSID,BOOLEAN);
1730 LONGLONG WINAPI RtlConvertLongToLargeInteger(LONG);
1731 ULONGLONG WINAPI RtlConvertUlongToLargeInteger(ULONG);
1732 void WINAPI RtlCopyLuid(PLUID,const LUID*);
1733 void WINAPI RtlCopyLuidAndAttributesArray(ULONG,const LUID_AND_ATTRIBUTES*,PLUID_AND_ATTRIBUTES);
1734 BOOLEAN WINAPI RtlCopySid(DWORD,PSID,PSID);
1735 void WINAPI RtlCopyString(STRING*,const STRING*);
1736 void WINAPI RtlCopyUnicodeString(UNICODE_STRING*,const UNICODE_STRING*);
1737 NTSTATUS WINAPI RtlCreateAcl(PACL,DWORD,DWORD);
1738 NTSTATUS WINAPI RtlCreateAtomTable(ULONG,RTL_ATOM_TABLE*);
1739 NTSTATUS WINAPI RtlCreateEnvironment(BOOLEAN, PWSTR*);
1740 HANDLE WINAPI RtlCreateHeap(ULONG,PVOID,ULONG,ULONG,PVOID,PRTL_HEAP_DEFINITION);
1741 NTSTATUS WINAPI RtlCreateProcessParameters(RTL_USER_PROCESS_PARAMETERS**,const UNICODE_STRING*,
1742 const UNICODE_STRING*,const UNICODE_STRING*,
1743 const UNICODE_STRING*,PWSTR,const UNICODE_STRING*,
1744 const UNICODE_STRING*,const UNICODE_STRING*,
1745 const UNICODE_STRING*);
1746 NTSTATUS WINAPI RtlCreateSecurityDescriptor(PSECURITY_DESCRIPTOR,DWORD);
1747 BOOLEAN WINAPI RtlCreateUnicodeString(PUNICODE_STRING,LPCWSTR);
1748 BOOLEAN WINAPI RtlCreateUnicodeStringFromAsciiz(PUNICODE_STRING,LPCSTR);
1749 NTSTATUS WINAPI RtlCreateUserThread(HANDLE,const SECURITY_DESCRIPTOR*,BOOLEAN,PVOID,SIZE_T,SIZE_T,PRTL_THREAD_START_ROUTINE,void*,HANDLE*,CLIENT_ID*);
1751 NTSTATUS WINAPI RtlDeleteAce(PACL,DWORD);
1752 NTSTATUS WINAPI RtlDeleteAtomFromAtomTable(RTL_ATOM_TABLE,RTL_ATOM);
1753 NTSTATUS WINAPI RtlDeleteCriticalSection(RTL_CRITICAL_SECTION *);
1754 NTSTATUS WINAPI RtlDeleteRegistryValue(ULONG, PCWSTR, PCWSTR);
1755 void WINAPI RtlDeleteResource(LPRTL_RWLOCK);
1756 DWORD WINAPI RtlDeleteSecurityObject(DWORD);
1757 PRTL_USER_PROCESS_PARAMETERS WINAPI RtlDeNormalizeProcessParams(RTL_USER_PROCESS_PARAMETERS*);
1758 NTSTATUS WINAPI RtlDestroyAtomTable(RTL_ATOM_TABLE);
1759 NTSTATUS WINAPI RtlDestroyEnvironment(PWSTR);
1760 NTSTATUS WINAPI RtlDestroyHandleTable(RTL_HANDLE_TABLE *);
1761 HANDLE WINAPI RtlDestroyHeap(HANDLE);
1762 void WINAPI RtlDestroyProcessParameters(RTL_USER_PROCESS_PARAMETERS*);
1763 NTSTATUS WINAPI RtlDestroyQueryDebugBuffer(PDEBUG_BUFFER);
1764 DOS_PATHNAME_TYPE WINAPI RtlDetermineDosPathNameType_U(PCWSTR);
1765 BOOLEAN WINAPI RtlDoesFileExists_U(LPCWSTR);
1766 BOOLEAN WINAPI RtlDosPathNameToNtPathName_U(PCWSTR,PUNICODE_STRING,PWSTR*,CURDIR*);
1767 ULONG WINAPI RtlDosSearchPath_U(LPCWSTR, LPCWSTR, LPCWSTR, ULONG, LPWSTR, LPWSTR*);
1768 WCHAR WINAPI RtlDowncaseUnicodeChar(WCHAR);
1769 NTSTATUS WINAPI RtlDowncaseUnicodeString(UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
1770 void WINAPI RtlDumpResource(LPRTL_RWLOCK);
1771 NTSTATUS WINAPI RtlDuplicateUnicodeString(int,const UNICODE_STRING*,UNICODE_STRING*);
1773 NTSTATUS WINAPI RtlEmptyAtomTable(RTL_ATOM_TABLE,BOOLEAN);
1774 LONGLONG WINAPI RtlEnlargedIntegerMultiply(INT,INT);
1775 ULONGLONG WINAPI RtlEnlargedUnsignedMultiply(UINT,UINT);
1776 UINT WINAPI RtlEnlargedUnsignedDivide(ULONGLONG,UINT,UINT *);
1777 NTSTATUS WINAPI RtlEnterCriticalSection(RTL_CRITICAL_SECTION *);
1778 void WINAPI RtlEraseUnicodeString(UNICODE_STRING*);
1779 NTSTATUS WINAPI RtlEqualComputerName(const UNICODE_STRING*,const UNICODE_STRING*);
1780 NTSTATUS WINAPI RtlEqualDomainName(const UNICODE_STRING*,const UNICODE_STRING*);
1781 BOOLEAN WINAPI RtlEqualLuid(const LUID*,const LUID*);
1782 BOOL WINAPI RtlEqualPrefixSid(PSID,PSID);
1783 BOOL WINAPI RtlEqualSid(PSID,PSID);
1784 BOOLEAN WINAPI RtlEqualString(const STRING*,const STRING*,BOOLEAN);
1785 BOOLEAN WINAPI RtlEqualUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
1786 NTSTATUS WINAPI RtlExpandEnvironmentStrings_U(PWSTR, const UNICODE_STRING*, UNICODE_STRING*, ULONG*);
1787 LONGLONG WINAPI RtlExtendedMagicDivide(LONGLONG,LONGLONG,INT);
1788 LONGLONG WINAPI RtlExtendedIntegerMultiply(LONGLONG,INT);
1789 LONGLONG WINAPI RtlExtendedLargeIntegerDivide(LONGLONG,INT,INT *);
1791 NTSTATUS WINAPI RtlFindCharInUnicodeString(int,const UNICODE_STRING*,const UNICODE_STRING*,USHORT*);
1792 ULONG WINAPI RtlFindClearBits(PCRTL_BITMAP,ULONG,ULONG);
1793 ULONG WINAPI RtlFindClearBitsAndSet(PRTL_BITMAP,ULONG,ULONG);
1794 ULONG WINAPI RtlFindClearRuns(PCRTL_BITMAP,PRTL_BITMAP_RUN,ULONG,BOOLEAN);
1795 ULONG WINAPI RtlFindLastBackwardRunSet(PCRTL_BITMAP,ULONG,PULONG);
1796 ULONG WINAPI RtlFindLastBackwardRunClear(PCRTL_BITMAP,ULONG,PULONG);
1797 CCHAR WINAPI RtlFindLeastSignificantBit(ULONGLONG);
1798 ULONG WINAPI RtlFindLongestRunSet(PCRTL_BITMAP,PULONG);
1799 ULONG WINAPI RtlFindLongestRunClear(PCRTL_BITMAP,PULONG);
1800 NTSTATUS WINAPI RtlFindMessage(HMODULE,ULONG,ULONG,ULONG,const MESSAGE_RESOURCE_ENTRY**);
1801 CCHAR WINAPI RtlFindMostSignificantBit(ULONGLONG);
1802 ULONG WINAPI RtlFindNextForwardRunSet(PCRTL_BITMAP,ULONG,PULONG);
1803 ULONG WINAPI RtlFindNextForwardRunClear(PCRTL_BITMAP,ULONG,PULONG);
1804 ULONG WINAPI RtlFindSetBits(PCRTL_BITMAP,ULONG,ULONG);
1805 ULONG WINAPI RtlFindSetBitsAndClear(PRTL_BITMAP,ULONG,ULONG);
1806 ULONG WINAPI RtlFindSetRuns(PCRTL_BITMAP,PRTL_BITMAP_RUN,ULONG,BOOLEAN);
1807 BOOLEAN WINAPI RtlFirstFreeAce(PACL,PACE_HEADER *);
1808 NTSTATUS WINAPI RtlFormatCurrentUserKeyPath(PUNICODE_STRING);
1809 NTSTATUS WINAPI RtlFormatMessage(LPWSTR,UCHAR,BOOLEAN,BOOLEAN,BOOLEAN,va_list *,LPWSTR,ULONG);
1810 void WINAPI RtlFreeAnsiString(PANSI_STRING);
1811 BOOLEAN WINAPI RtlFreeHandle(RTL_HANDLE_TABLE *,RTL_HANDLE *);
1812 BOOLEAN WINAPI RtlFreeHeap(HANDLE,ULONG,PVOID);
1813 void WINAPI RtlFreeOemString(POEM_STRING);
1814 DWORD WINAPI RtlFreeSid(PSID);
1815 void WINAPI RtlFreeUnicodeString(PUNICODE_STRING);
1817 NTSTATUS WINAPI RtlGetAce(PACL,DWORD,LPVOID *);
1818 NTSTATUS WINAPI RtlGetControlSecurityDescriptor(PSECURITY_DESCRIPTOR, PSECURITY_DESCRIPTOR_CONTROL,LPDWORD);
1819 NTSTATUS WINAPI RtlGetCurrentDirectory_U(ULONG, LPWSTR);
1820 NTSTATUS WINAPI RtlGetDaclSecurityDescriptor(PSECURITY_DESCRIPTOR,PBOOLEAN,PACL *,PBOOLEAN);
1821 ULONG WINAPI RtlGetFullPathName_U(PCWSTR,ULONG,PWSTR,PWSTR*);
1822 NTSTATUS WINAPI RtlGetGroupSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID *,PBOOLEAN);
1823 NTSTATUS WINAPI RtlGetLastNtStatus(void);
1824 DWORD WINAPI RtlGetLastWin32Error(void);
1825 DWORD WINAPI RtlGetLongestNtPathLength(void);
1826 BOOLEAN WINAPI RtlGetNtProductType(LPDWORD);
1827 NTSTATUS WINAPI RtlGetOwnerSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID *,PBOOLEAN);
1828 ULONG WINAPI RtlGetProcessHeaps(ULONG,HANDLE*);
1829 NTSTATUS WINAPI RtlGetSaclSecurityDescriptor(PSECURITY_DESCRIPTOR,PBOOLEAN,PACL *,PBOOLEAN);
1830 NTSTATUS WINAPI RtlGetVersion(RTL_OSVERSIONINFOEXW*);
1832 PSID_IDENTIFIER_AUTHORITY WINAPI RtlIdentifierAuthoritySid(PSID);
1833 PVOID WINAPI RtlImageDirectoryEntryToData(HMODULE,BOOL,WORD,ULONG *);
1834 PIMAGE_NT_HEADERS WINAPI RtlImageNtHeader(HMODULE);
1835 PIMAGE_SECTION_HEADER WINAPI RtlImageRvaToSection(const IMAGE_NT_HEADERS *,HMODULE,DWORD);
1836 PVOID WINAPI RtlImageRvaToVa(const IMAGE_NT_HEADERS *,HMODULE,DWORD,IMAGE_SECTION_HEADER **);
1837 BOOL WINAPI RtlImpersonateSelf(SECURITY_IMPERSONATION_LEVEL);
1838 void WINAPI RtlInitString(PSTRING,PCSZ);
1839 void WINAPI RtlInitAnsiString(PANSI_STRING,PCSZ);
1840 void WINAPI RtlInitUnicodeString(PUNICODE_STRING,PCWSTR);
1841 NTSTATUS WINAPI RtlInitUnicodeStringEx(PUNICODE_STRING,PCWSTR);
1842 NTSTATUS WINAPI RtlInitializeCriticalSection(RTL_CRITICAL_SECTION *);
1843 NTSTATUS WINAPI RtlInitializeCriticalSectionAndSpinCount(RTL_CRITICAL_SECTION *,DWORD);
1844 void WINAPI RtlInitializeBitMap(PRTL_BITMAP,PULONG,ULONG);
1845 void WINAPI RtlInitializeHandleTable(ULONG,ULONG,RTL_HANDLE_TABLE *);
1846 void WINAPI RtlInitializeResource(LPRTL_RWLOCK);
1847 BOOL WINAPI RtlInitializeSid(PSID,PSID_IDENTIFIER_AUTHORITY,BYTE);
1849 NTSTATUS WINAPI RtlInt64ToUnicodeString(ULONGLONG,ULONG,UNICODE_STRING *);
1850 NTSTATUS WINAPI RtlIntegerToChar(ULONG,ULONG,ULONG,PCHAR);
1851 NTSTATUS WINAPI RtlIntegerToUnicodeString(ULONG,ULONG,UNICODE_STRING *);
1852 ULONG WINAPI RtlIsDosDeviceName_U(PCWSTR);
1853 BOOLEAN WINAPI RtlIsNameLegalDOS8Dot3(const UNICODE_STRING*,POEM_STRING,PBOOLEAN);
1854 BOOLEAN WINAPI RtlIsTextUnicode(LPCVOID,INT,INT *);
1855 BOOLEAN WINAPI RtlIsValidHandle(const RTL_HANDLE_TABLE *, const RTL_HANDLE *);
1856 BOOLEAN WINAPI RtlIsValidIndexHandle(const RTL_HANDLE_TABLE *, ULONG Index, RTL_HANDLE **);
1858 LONGLONG WINAPI RtlLargeIntegerAdd(LONGLONG,LONGLONG);
1859 LONGLONG WINAPI RtlLargeIntegerArithmeticShift(LONGLONG,INT);
1860 ULONGLONG WINAPI RtlLargeIntegerDivide( ULONGLONG,ULONGLONG,ULONGLONG *);
1861 LONGLONG WINAPI RtlLargeIntegerNegate(LONGLONG);
1862 LONGLONG WINAPI RtlLargeIntegerShiftLeft(LONGLONG,INT);
1863 LONGLONG WINAPI RtlLargeIntegerShiftRight(LONGLONG,INT);
1864 LONGLONG WINAPI RtlLargeIntegerSubtract(LONGLONG,LONGLONG);
1865 NTSTATUS WINAPI RtlLargeIntegerToChar(const ULONGLONG *,ULONG,ULONG,PCHAR);
1866 NTSTATUS WINAPI RtlLeaveCriticalSection(RTL_CRITICAL_SECTION *);
1867 DWORD WINAPI RtlLengthRequiredSid(DWORD);
1868 ULONG WINAPI RtlLengthSecurityDescriptor(PSECURITY_DESCRIPTOR);
1869 DWORD WINAPI RtlLengthSid(PSID);
1870 NTSTATUS WINAPI RtlLocalTimeToSystemTime(const LARGE_INTEGER*,PLARGE_INTEGER);
1871 BOOLEAN WINAPI RtlLockHeap(HANDLE);
1872 NTSTATUS WINAPI RtlLookupAtomInAtomTable(RTL_ATOM_TABLE,const WCHAR*,RTL_ATOM*);
1874 NTSTATUS WINAPI RtlMakeSelfRelativeSD(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,LPDWORD);
1875 void WINAPI RtlMapGenericMask(PACCESS_MASK,const GENERIC_MAPPING*);
1876 NTSTATUS WINAPI RtlMultiByteToUnicodeN(LPWSTR,DWORD,LPDWORD,LPCSTR,DWORD);
1877 NTSTATUS WINAPI RtlMultiByteToUnicodeSize(DWORD*,LPCSTR,UINT);
1879 DWORD WINAPI RtlNewSecurityObject(DWORD,DWORD,DWORD,DWORD,DWORD,DWORD);
1880 PRTL_USER_PROCESS_PARAMETERS WINAPI RtlNormalizeProcessParams(RTL_USER_PROCESS_PARAMETERS*);
1881 ULONG WINAPI RtlNtStatusToDosError(NTSTATUS);
1882 ULONG WINAPI RtlNtStatusToDosErrorNoTeb(NTSTATUS);
1883 ULONG WINAPI RtlNumberOfSetBits(PCRTL_BITMAP);
1884 ULONG WINAPI RtlNumberOfClearBits(PCRTL_BITMAP);
1886 UINT WINAPI RtlOemStringToUnicodeSize(const STRING*);
1887 NTSTATUS WINAPI RtlOemStringToUnicodeString(UNICODE_STRING*,const STRING*,BOOLEAN);
1888 NTSTATUS WINAPI RtlOemToUnicodeN(LPWSTR,DWORD,LPDWORD,LPCSTR,DWORD);
1889 DWORD WINAPI RtlOpenCurrentUser(ACCESS_MASK,PHKEY);
1891 NTSTATUS WINAPI RtlPinAtomInAtomTable(RTL_ATOM_TABLE,RTL_ATOM);
1892 BOOLEAN WINAPI RtlPrefixString(const STRING*,const STRING*,BOOLEAN);
1893 BOOLEAN WINAPI RtlPrefixUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
1895 NTSTATUS WINAPI RtlQueryAtomInAtomTable(RTL_ATOM_TABLE,RTL_ATOM,ULONG*,ULONG*,WCHAR*,ULONG*);
1896 NTSTATUS WINAPI RtlQueryEnvironmentVariable_U(PWSTR,PUNICODE_STRING,PUNICODE_STRING);
1897 NTSTATUS WINAPI RtlQueryInformationAcl(PACL,LPVOID,DWORD,ACL_INFORMATION_CLASS);
1898 NTSTATUS WINAPI RtlQueryProcessDebugInformation(ULONG,ULONG,PDEBUG_BUFFER);
1899 NTSTATUS WINAPI RtlQueryRegistryValues(ULONG, PCWSTR, PRTL_QUERY_REGISTRY_TABLE, PVOID, PVOID);
1900 NTSTATUS WINAPI RtlQueryTimeZoneInformation(LPTIME_ZONE_INFORMATION);
1901 void WINAPI RtlRaiseException(PEXCEPTION_RECORD);
1902 void WINAPI RtlRaiseStatus(NTSTATUS);
1903 ULONG WINAPI RtlRandom(PULONG);
1904 PVOID WINAPI RtlReAllocateHeap(HANDLE,ULONG,PVOID,ULONG);
1905 void WINAPI RtlReleasePebLock(void);
1906 void WINAPI RtlReleaseResource(LPRTL_RWLOCK);
1907 ULONG WINAPI RtlRemoveVectoredExceptionHandler(PVOID);
1908 void WINAPI RtlRestoreLastWin32Error(DWORD);
1910 void WINAPI RtlSecondsSince1970ToTime(DWORD,LARGE_INTEGER *);
1911 void WINAPI RtlSecondsSince1980ToTime(DWORD,LARGE_INTEGER *);
1912 NTSTATUS WINAPI RtlSelfRelativeToAbsoluteSD(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,
1913 PDWORD,PACL,PDWORD,PACL,PDWORD,PSID,PDWORD,PSID,PDWORD);
1914 void WINAPI RtlSetAllBits(PRTL_BITMAP);
1915 void WINAPI RtlSetBits(PRTL_BITMAP,ULONG,ULONG);
1916 ULONG WINAPI RtlSetCriticalSectionSpinCount(RTL_CRITICAL_SECTION*,ULONG);
1917 NTSTATUS WINAPI RtlSetCurrentDirectory_U(const UNICODE_STRING*);
1918 void WINAPI RtlSetCurrentEnvironment(PWSTR, PWSTR*);
1919 NTSTATUS WINAPI RtlSetDaclSecurityDescriptor(PSECURITY_DESCRIPTOR,BOOLEAN,PACL,BOOLEAN);
1920 NTSTATUS WINAPI RtlSetEnvironmentVariable(PWSTR*,PUNICODE_STRING,PUNICODE_STRING);
1921 NTSTATUS WINAPI RtlSetOwnerSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID,BOOLEAN);
1922 NTSTATUS WINAPI RtlSetGroupSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID,BOOLEAN);
1923 void WINAPI RtlSetLastWin32Error(DWORD);
1924 void WINAPI RtlSetLastWin32ErrorAndNtStatusFromNtStatus(NTSTATUS);
1925 NTSTATUS WINAPI RtlSetSaclSecurityDescriptor(PSECURITY_DESCRIPTOR,BOOLEAN,PACL,BOOLEAN);
1926 NTSTATUS WINAPI RtlSetTimeZoneInformation(const TIME_ZONE_INFORMATION*);
1927 ULONG WINAPI RtlSizeHeap(HANDLE,ULONG,PVOID);
1928 LPDWORD WINAPI RtlSubAuthoritySid(PSID,DWORD);
1929 LPBYTE WINAPI RtlSubAuthorityCountSid(PSID);
1930 NTSTATUS WINAPI RtlSystemTimeToLocalTime(const LARGE_INTEGER*,PLARGE_INTEGER);
1932 void WINAPI RtlTimeToTimeFields(const LARGE_INTEGER*,PTIME_FIELDS);
1933 BOOLEAN WINAPI RtlTimeFieldsToTime(PTIME_FIELDS,PLARGE_INTEGER);
1934 void WINAPI RtlTimeToElapsedTimeFields(const LARGE_INTEGER *,PTIME_FIELDS);
1935 BOOLEAN WINAPI RtlTimeToSecondsSince1970(const LARGE_INTEGER *,LPDWORD);
1936 BOOLEAN WINAPI RtlTimeToSecondsSince1980(const LARGE_INTEGER *,LPDWORD);
1937 BOOL WINAPI RtlTryEnterCriticalSection(RTL_CRITICAL_SECTION *);
1939 ULONGLONG __cdecl RtlUlonglongByteSwap(ULONGLONG);
1940 DWORD WINAPI RtlUnicodeStringToAnsiSize(const UNICODE_STRING*);
1941 NTSTATUS WINAPI RtlUnicodeStringToAnsiString(PANSI_STRING,PCUNICODE_STRING,BOOLEAN);
1942 NTSTATUS WINAPI RtlUnicodeStringToInteger(const UNICODE_STRING *,ULONG,ULONG *);
1943 DWORD WINAPI RtlUnicodeStringToOemSize(const UNICODE_STRING*);
1944 NTSTATUS WINAPI RtlUnicodeStringToOemString(POEM_STRING,PCUNICODE_STRING,BOOLEAN);
1945 NTSTATUS WINAPI RtlUnicodeToMultiByteN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
1946 NTSTATUS WINAPI RtlUnicodeToMultiByteSize(PULONG,PCWSTR,ULONG);
1947 NTSTATUS WINAPI RtlUnicodeToOemN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
1948 ULONG WINAPI RtlUniform(PULONG);
1949 BOOLEAN WINAPI RtlUnlockHeap(HANDLE);
1950 void WINAPI RtlUnwind(PVOID,PVOID,PEXCEPTION_RECORD,PVOID);
1952 void WINAPI RtlUnwind2(FRAME_POINTERS,PVOID,PEXCEPTION_RECORD,PVOID,PCONTEXT);
1953 void WINAPI RtlUnwindEx(FRAME_POINTERS,PVOID,PEXCEPTION_RECORD,PVOID,PCONTEXT,PUNWIND_HISTORY_TABLE);
1955 WCHAR WINAPI RtlUpcaseUnicodeChar(WCHAR);
1956 NTSTATUS WINAPI RtlUpcaseUnicodeString(UNICODE_STRING*,const UNICODE_STRING *,BOOLEAN);
1957 NTSTATUS WINAPI RtlUpcaseUnicodeStringToAnsiString(STRING*,const UNICODE_STRING*,BOOLEAN);
1958 NTSTATUS WINAPI RtlUpcaseUnicodeStringToCountedOemString(STRING*,const UNICODE_STRING*,BOOLEAN);
1959 NTSTATUS WINAPI RtlUpcaseUnicodeStringToOemString(STRING*,const UNICODE_STRING*,BOOLEAN);
1960 NTSTATUS WINAPI RtlUpcaseUnicodeToMultiByteN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
1961 NTSTATUS WINAPI RtlUpcaseUnicodeToOemN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
1962 CHAR WINAPI RtlUpperChar(CHAR);
1963 void WINAPI RtlUpperString(STRING *,const STRING *);
1965 NTSTATUS WINAPI RtlValidSecurityDescriptor(PSECURITY_DESCRIPTOR);
1966 BOOLEAN WINAPI RtlValidAcl(PACL);
1967 BOOLEAN WINAPI RtlValidSid(PSID);
1968 BOOLEAN WINAPI RtlValidateHeap(HANDLE,ULONG,LPCVOID);
1969 NTSTATUS WINAPI RtlVerifyVersionInfo(const RTL_OSVERSIONINFOEXW*,DWORD,DWORDLONG);
1971 NTSTATUS WINAPI RtlWalkHeap(HANDLE,PVOID);
1973 NTSTATUS WINAPI RtlpWaitForCriticalSection(RTL_CRITICAL_SECTION *);
1974 NTSTATUS WINAPI RtlpUnWaitCriticalSection(RTL_CRITICAL_SECTION *);
1976 /* Wine internal functions */
1978 extern NTSTATUS wine_nt_to_unix_file_name( const UNICODE_STRING *nameW, ANSI_STRING *unix_name_ret,
1979 UINT disposition, BOOLEAN check_case );
1981 /***********************************************************************
1985 #define InitializeObjectAttributes(p,n,a,r,s) \
1987 (p)->Length = sizeof(OBJECT_ATTRIBUTES); \
1988 (p)->RootDirectory = r; \
1989 (p)->Attributes = a; \
1990 (p)->ObjectName = n; \
1991 (p)->SecurityDescriptor = s; \
1992 (p)->SecurityQualityOfService = NULL; \
1995 #define NtCurrentProcess() ((HANDLE)-1)
1997 #define RtlFillMemory(Destination,Length,Fill) memset((Destination),(Fill),(Length))
1998 #define RtlMoveMemory(Destination,Source,Length) memmove((Destination),(Source),(Length))
1999 #define RtlStoreUlong(p,v) do { ULONG _v = (v); memcpy((p), &_v, sizeof(_v)); } while (0)
2000 #define RtlStoreUlonglong(p,v) do { ULONGLONG _v = (v); memcpy((p), &_v, sizeof(_v)); } while (0)
2001 #define RtlRetrieveUlong(p,s) memcpy((p), (s), sizeof(ULONG))
2002 #define RtlRetrieveUlonglong(p,s) memcpy((p), (s), sizeof(ULONGLONG))
2003 #define RtlZeroMemory(Destination,Length) memset((Destination),0,(Length))
2005 inline static BOOLEAN RtlCheckBit(PCRTL_BITMAP lpBits, ULONG ulBit)
2007 if (lpBits && ulBit < lpBits->SizeOfBitMap &&
2008 lpBits->Buffer[ulBit >> 5] & (1 << (ulBit & 31)))
2013 /* These are implemented as __fastcall, so we can't let Winelib apps link with them */
2014 inline static USHORT RtlUshortByteSwap(USHORT s)
2016 return (s >> 8) | (s << 8);
2018 inline static ULONG RtlUlongByteSwap(ULONG i)
2020 #if defined(__i386__) && defined(__GNUC__)
2022 __asm__("bswap %0" : "=r" (ret) : "0" (i) );
2025 return ((ULONG)RtlUshortByteSwap((USHORT)i) << 16) | RtlUshortByteSwap((USHORT)(i >> 16));
2029 /*************************************************************************
2030 * Loader functions and structures.
2032 * Those are not part of standard Winternl.h
2034 typedef struct _LDR_MODULE
2036 LIST_ENTRY InLoadOrderModuleList;
2037 LIST_ENTRY InMemoryOrderModuleList;
2038 LIST_ENTRY InInitializationOrderModuleList;
2042 UNICODE_STRING FullDllName;
2043 UNICODE_STRING BaseDllName;
2047 HANDLE SectionHandle;
2049 ULONG TimeDateStamp;
2050 } LDR_MODULE, *PLDR_MODULE;
2052 /* those defines are (some of the) regular LDR_MODULE.Flags values */
2053 #define LDR_IMAGE_IS_DLL 0x00000004
2054 #define LDR_LOAD_IN_PROGRESS 0x00001000
2055 #define LDR_UNLOAD_IN_PROGRESS 0x00002000
2056 #define LDR_NO_DLL_CALLS 0x00040000
2057 #define LDR_PROCESS_ATTACHED 0x00080000
2058 #define LDR_MODULE_REBASED 0x00200000
2060 /* these ones is Wine specific */
2061 #define LDR_DONT_RESOLVE_REFS 0x40000000
2062 #define LDR_WINE_INTERNAL 0x80000000
2064 /* FIXME: to be checked */
2065 #define MAXIMUM_FILENAME_LENGTH 256
2067 typedef struct _SYSTEM_MODULE
2071 PVOID ImageBaseAddress;
2078 BYTE Name[MAXIMUM_FILENAME_LENGTH];
2079 } SYSTEM_MODULE, *PSYSTEM_MODULE;
2081 typedef struct _SYSTEM_MODULE_INFORMATION
2084 SYSTEM_MODULE Modules[1]; /* FIXME: should be Modules[0] */
2085 } SYSTEM_MODULE_INFORMATION, *PSYSTEM_MODULE_INFORMATION;
2087 NTSTATUS WINAPI LdrDisableThreadCalloutsForDll(HMODULE);
2088 NTSTATUS WINAPI LdrFindEntryForAddress(const void*, PLDR_MODULE*);
2089 NTSTATUS WINAPI LdrLockLoaderLock(ULONG,ULONG*,ULONG*);
2090 NTSTATUS WINAPI LdrQueryProcessModuleInformation(SYSTEM_MODULE_INFORMATION*, ULONG, ULONG*);
2091 NTSTATUS WINAPI LdrUnloadDll(HMODULE);
2092 NTSTATUS WINAPI LdrUnlockLoaderLock(ULONG,ULONG);
2094 /* list manipulation macros */
2095 #define InitializeListHead(le) (void)((le)->Flink = (le)->Blink = (le))
2096 #define InsertHeadList(le,e) do { PLIST_ENTRY f = (le)->Flink; (e)->Flink = f; (e)->Blink = (le); f->Blink = (e); (le)->Flink = (e); } while (0)
2097 #define InsertTailList(le,e) do { PLIST_ENTRY b = (le)->Blink; (e)->Flink = (le); (e)->Blink = b; b->Flink = (e); (le)->Blink = (e); } while (0)
2098 #define IsListEmpty(le) ((le)->Flink == (le))
2099 #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)
2100 static inline PLIST_ENTRY RemoveHeadList(PLIST_ENTRY le)
2102 PLIST_ENTRY f, b, e;
2105 f = le->Flink->Flink;
2106 b = le->Flink->Blink;
2110 if (e != le) e->Flink = e->Blink = NULL;
2113 static inline PLIST_ENTRY RemoveTailList(PLIST_ENTRY le)
2115 PLIST_ENTRY f, b, e;
2118 f = le->Blink->Flink;
2119 b = le->Blink->Blink;
2123 if (e != le) e->Flink = e->Blink = NULL;
2129 #endif /* defined(__cplusplus) */
2131 #endif /* __WINE_WINTERNL_H */