Support all possible texture coordinates sizes.
[wine/multimedia.git] / include / winternl.h
blobd467c7ae6067cdba1ffa052f9f5ccf1042ffe91d
1 /*
2 * Internal NT APIs and data structures
4 * Copyright (C) the Wine project
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 #ifndef __WINE_WINTERNL_H
22 #define __WINE_WINTERNL_H
24 #include <windef.h>
26 #ifdef __cplusplus
27 extern "C" {
28 #endif /* defined(__cplusplus) */
31 /**********************************************************************
32 * Fundamental types and data structures
35 typedef LONG NTSTATUS;
37 typedef CONST char *PCSZ;
39 typedef short CSHORT;
40 typedef CSHORT *PCSHORT;
42 typedef struct _STRING {
43 USHORT Length;
44 USHORT MaximumLength;
45 PCHAR Buffer;
46 } STRING, *PSTRING;
48 typedef STRING ANSI_STRING;
49 typedef PSTRING PANSI_STRING;
50 typedef const STRING *PCANSI_STRING;
52 typedef STRING OEM_STRING;
53 typedef PSTRING POEM_STRING;
54 typedef const STRING *PCOEM_STRING;
56 typedef struct _UNICODE_STRING {
57 USHORT Length; /* bytes */
58 USHORT MaximumLength; /* bytes */
59 PWSTR Buffer;
60 } UNICODE_STRING, *PUNICODE_STRING;
62 typedef const UNICODE_STRING *PCUNICODE_STRING;
64 #ifndef _FILETIME_
65 #define _FILETIME_
66 /* 64 bit number of 100 nanoseconds intervals since January 1, 1601 */
67 typedef struct _FILETIME
69 #ifdef WORDS_BIGENDIAN
70 DWORD dwHighDateTime;
71 DWORD dwLowDateTime;
72 #else
73 DWORD dwLowDateTime;
74 DWORD dwHighDateTime;
75 #endif
76 } FILETIME, *PFILETIME, *LPFILETIME;
77 #endif /* _FILETIME_ */
79 typedef struct _CLIENT_ID
81 HANDLE UniqueProcess;
82 HANDLE UniqueThread;
83 } CLIENT_ID, *PCLIENT_ID;
85 typedef struct _CURDIR
87 UNICODE_STRING DosPath;
88 PVOID Handle;
89 } CURDIR, *PCURDIR;
91 typedef struct RTL_DRIVE_LETTER_CURDIR
93 USHORT Flags;
94 USHORT Length;
95 ULONG TimeStamp;
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;
116 ULONG Size;
117 ULONG Flags;
118 ULONG DebugFlags;
119 HANDLE ConsoleHandle;
120 ULONG ConsoleFlags;
121 HANDLE hStdInput;
122 HANDLE hStdOutput;
123 HANDLE hStdError;
124 CURDIR CurrentDirectory;
125 UNICODE_STRING DllPath;
126 UNICODE_STRING ImagePathName;
127 UNICODE_STRING CommandLine;
128 PWSTR Environment;
129 ULONG dwX;
130 ULONG dwY;
131 ULONG dwXSize;
132 ULONG dwYSize;
133 ULONG dwXCountChars;
134 ULONG dwYCountChars;
135 ULONG dwFillAttribute;
136 ULONG dwFlags;
137 ULONG wShowWindow;
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
150 ULONG Length;
151 BOOLEAN Initialized;
152 PVOID SsHandle;
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
160 ULONG Offset;
161 HANDLE HDC;
162 ULONG Buffer[0x136];
163 } GDI_TEB_BATCH;
165 /***********************************************************************
166 * PEB data structure
168 typedef struct _PEB
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 */
225 } PEB, *PPEB;
228 /***********************************************************************
229 * TEB data structure
231 #ifndef WINE_NO_TEB /* don't define TEB if included from thread.h */
232 # ifndef WINE_TEB_DEFINED
233 # define WINE_TEB_DEFINED
234 typedef struct _TEB
236 NT_TIB Tib; /* 000 */
237 PVOID EnvironmentPointer; /* 01c */
238 CLIENT_ID ClientId; /* 020 */
239 PVOID ActiveRpcHandle; /* 028 */
240 PVOID ThreadLocalStoragePointer; /* 02c */
241 PPEB Peb; /* 030 */
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 */
279 PVOID Vdm; /* f18 */
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 */
293 } TEB, *PTEB;
294 # endif /* WINE_TEB_DEFINED */
295 #endif /* WINE_NO_TEB */
297 /***********************************************************************
298 * Enums
301 typedef enum _FILE_INFORMATION_CLASS {
302 FileDirectoryInformation = 1,
303 FileFullDirectoryInformation,
304 FileBothDirectoryInformation,
305 FileBasicInformation,
306 FileStandardInformation,
307 FileInternalInformation,
308 FileEaInformation,
309 FileAccessInformation,
310 FileNameInformation,
311 FileRenameInformation,
312 FileLinkInformation,
313 FileNamesInformation,
314 FileDispositionInformation,
315 FilePositionInformation,
316 FileFullEaInformation,
317 FileModeInformation,
318 FileAlignmentInformation,
319 FileAllInformation,
320 FileAllocationInformation,
321 FileEndOfFileInformation,
322 FileAlternateNameInformation,
323 FileStreamInformation,
324 FilePipeInformation,
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;
343 ULONG FileIndex;
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;
357 ULONG FileIndex;
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;
366 ULONG EaSize;
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;
373 ULONG FileIndex;
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;
382 ULONG EaSize;
383 CHAR ShortNameLength;
384 WCHAR ShortName[12];
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;
400 ULONG NumberOfLinks;
401 BOOLEAN DeletePending;
402 BOOLEAN Directory;
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 {
410 ULONG EaSize;
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;
419 WCHAR FileName[1];
420 } FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION;
422 typedef struct _FILE_RENAME_INFORMATION {
423 BOOLEAN Replace;
424 HANDLE RootDir;
425 ULONG FileNameLength;
426 WCHAR FileName[1];
427 } FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION;
429 typedef struct _FILE_NAMES_INFORMATION {
430 ULONG NextEntryOffset;
431 ULONG FileIndex;
432 ULONG FileNameLength;
433 WCHAR FileName[1];
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;
468 UCHAR Flags;
469 UCHAR EaNameLength;
470 USHORT EaValueLength;
471 CHAR EaName[1];
472 } FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION;
474 typedef struct _FILE_MODE_INFORMATION {
475 ULONG Mode;
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;
484 WCHAR StreamName[1];
485 } FILE_STREAM_INFORMATION, *PFILE_STREAM_INFORMATION;
487 typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION
489 ULONG FileAttributes;
490 ULONG ReparseTag;
491 } FILE_ATTRIBUTE_TAG_INFORMATION, *PFILE_ATTRIBUTE_TAG_INFORMATION;
493 typedef struct _FILE_MAILSLOT_QUERY_INFORMATION {
494 ULONG MaximumMessageSize;
495 ULONG MailslotQuota;
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 {
531 KeyBasicInformation,
532 KeyNodeInformation,
533 KeyFullInformation
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,
557 ProcessTimes = 4,
558 ProcessBasePriority = 5,
559 ProcessRaisePriority = 6,
560 ProcessDebugPort = 7,
561 ProcessExceptionPort = 8,
562 ProcessAccessToken = 9,
563 ProcessLdtInformation = 10,
564 ProcessLdtSize = 11,
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,
580 MaxProcessInfoClass
581 } PROCESSINFOCLASS;
583 typedef enum _SECTION_INHERIT {
584 ViewShare = 1,
585 ViewUnmap = 2
586 } SECTION_INHERIT;
588 typedef enum _SYSTEM_INFORMATION_CLASS {
589 SystemBasicInformation = 0,
590 SystemCpuInformation = 1,
591 SystemPerformanceInformation = 2,
592 SystemTimeOfDayInformation = 3, /* was SystemTimeInformation */
593 Unknown4,
594 SystemProcessInformation = 5,
595 Unknown6,
596 Unknown7,
597 SystemProcessorPerformanceInformation = 8,
598 Unknown9,
599 Unknown10,
600 SystemModuleInformation = 11,
601 Unknown12,
602 Unknown13,
603 Unknown14,
604 Unknown15,
605 SystemHandleInformation = 16,
606 Unknown17,
607 SystemPageFileInformation = 18,
608 Unknown19,
609 Unknown20,
610 SystemCacheInformation = 21,
611 Unknown22,
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 {
646 NotificationTimer,
647 SynchronizationTimer
648 } TIMER_TYPE;
650 typedef enum _THREADINFOCLASS {
651 ThreadBasicInformation,
652 ThreadTimes,
653 ThreadPriority,
654 ThreadBasePriority,
655 ThreadAffinityMask,
656 ThreadImpersonationToken,
657 ThreadDescriptorTableEntry,
658 ThreadEnableAlignmentFaultFixup,
659 ThreadEventPair_Reusable,
660 ThreadQuerySetWin32StartAddress,
661 ThreadZeroTlsCell,
662 ThreadPerformanceCount,
663 ThreadAmILastThread,
664 ThreadIdealProcessor,
665 ThreadPriorityBoost,
666 ThreadSetTlsArrayAddress,
667 ThreadIsIoPending,
668 MaxThreadInfoClass
669 } THREADINFOCLASS;
671 typedef struct _THREAD_BASIC_INFORMATION
673 NTSTATUS ExitStatus;
674 PVOID TebBaseAddress;
675 CLIENT_ID ClientId;
676 ULONG AffinityMask;
677 LONG Priority;
678 LONG BasePriority;
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,
689 MemorySectionName,
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 {
699 LONG CurrentCount;
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;
712 BOOLEAN TimerState;
713 } TIMER_BASIC_INFORMATION, *PTIMER_BASIC_INFORMATION;
716 /* return type of RtlDetermineDosPathNameType_U (FIXME: not the correct names) */
717 typedef enum
719 INVALID_PATH = 0,
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 /* "//." */
727 } DOS_PATHNAME_TYPE;
729 /***********************************************************************
730 * IA64 specific types and data structures
733 #ifdef __ia64__
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 {
743 ULONG BeginAddress;
744 ULONG EndAddress;
745 ULONG UnwindInfoAddress;
746 } RUNTIME_FUNCTION, *PRUNTIME_FUNCTION;
748 typedef struct _UNWIND_HISTORY_TABLE_ENTRY {
749 ULONG64 ImageBase;
750 ULONG64 Gp;
751 PRUNTIME_FUNCTION FunctionEntry;
752 } UNWIND_HISTORY_TABLE_ENTRY, *PUNWIND_HISTORY_TABLE_ENTRY;
754 typedef struct _UNWIND_HISTORY_TABLE {
755 ULONG Count;
756 UCHAR Search;
757 ULONG64 LowAddress;
758 ULONG64 HighAddress;
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;
771 FILETIME ftUserTime;
772 FILETIME ftCreateTime;
773 DWORD dwTickCount;
774 DWORD dwStartAddress;
775 DWORD dwOwningPID;
776 DWORD dwThreadID;
777 DWORD dwCurrentPriority;
778 DWORD dwBasePriority;
779 DWORD dwContextSwitches;
780 DWORD dwThreadState;
781 DWORD dwWaitReason;
782 DWORD dwUnknown;
783 } SYSTEM_THREAD_INFORMATION, *PSYSTEM_THREAD_INFORMATION;
785 typedef struct _IO_STATUS_BLOCK {
786 union {
787 NTSTATUS Status;
788 PVOID Pointer;
789 } DUMMYUNIONNAME;
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;
798 ULONG TitleIndex;
799 ULONG NameLength;
800 WCHAR Name[1];
801 } KEY_BASIC_INFORMATION, *PKEY_BASIC_INFORMATION;
803 typedef struct _KEY_NODE_INFORMATION
805 LARGE_INTEGER LastWriteTime;
806 ULONG TitleIndex;
807 ULONG ClassOffset;
808 ULONG ClassLength;
809 ULONG NameLength;
810 WCHAR Name[1];
811 /* Class[1]; */
812 } KEY_NODE_INFORMATION, *PKEY_NODE_INFORMATION;
814 typedef struct _KEY_FULL_INFORMATION
816 LARGE_INTEGER LastWriteTime;
817 ULONG TitleIndex;
818 ULONG ClassOffset;
819 ULONG ClassLength;
820 ULONG SubKeys;
821 ULONG MaxNameLen;
822 ULONG MaxClassLen;
823 ULONG Values;
824 ULONG MaxValueNameLen;
825 ULONG MaxValueDataLen;
826 WCHAR Class[1];
827 } KEY_FULL_INFORMATION, *PKEY_FULL_INFORMATION;
829 typedef struct _KEY_VALUE_ENTRY
831 PUNICODE_STRING ValueName;
832 ULONG DataLength;
833 ULONG DataOffset;
834 ULONG Type;
835 } KEY_VALUE_ENTRY, *PKEY_VALUE_ENTRY;
837 typedef struct _KEY_VALUE_BASIC_INFORMATION {
838 ULONG TitleIndex;
839 ULONG Type;
840 ULONG NameLength;
841 WCHAR Name[1];
842 } KEY_VALUE_BASIC_INFORMATION, *PKEY_VALUE_BASIC_INFORMATION;
844 typedef struct _KEY_VALUE_FULL_INFORMATION {
845 ULONG TitleIndex;
846 ULONG Type;
847 ULONG DataOffset;
848 ULONG DataLength;
849 ULONG NameLength;
850 WCHAR Name[1];
851 } KEY_VALUE_FULL_INFORMATION, *PKEY_VALUE_FULL_INFORMATION;
853 typedef struct _KEY_VALUE_PARTIAL_INFORMATION {
854 ULONG TitleIndex;
855 ULONG Type;
856 ULONG DataLength;
857 UCHAR Data[1];
858 } KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION;
860 typedef struct _OBJECT_ATTRIBUTES {
861 ULONG Length;
862 HANDLE RootDirectory;
863 PUNICODE_STRING ObjectName;
864 ULONG Attributes;
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 {
875 #ifdef __WINESRC__
876 DWORD ExitStatus;
877 DWORD PebBaseAddress;
878 DWORD AffinityMask;
879 DWORD BasePriority;
880 ULONG UniqueProcessId;
881 ULONG InheritedFromUniqueProcessId;
882 #else
883 PVOID Reserved1;
884 PPEB PebBaseAddress;
885 PVOID Reserved2[2];
886 ULONG_PTR UniqueProcessId;
887 PVOID Reserved3;
888 #endif
889 } PROCESS_BASIC_INFORMATION, *PPROCESS_BASIC_INFORMATION;
891 typedef struct _RTL_HEAP_DEFINITION {
892 ULONG Length; /* = sizeof(RTL_HEAP_DEFINITION) */
894 ULONG Unknown[11];
895 } RTL_HEAP_DEFINITION, *PRTL_HEAP_DEFINITION;
897 typedef struct _RTL_RWLOCK {
898 RTL_CRITICAL_SECTION rtlCS;
900 HANDLE hSharedReleaseSemaphore;
901 UINT uSharedWaiters;
903 HANDLE hExclusiveReleaseSemaphore;
904 UINT uExclusiveWaiters;
906 INT iNumberActive;
907 HANDLE hOwningThreadId;
908 DWORD dwTimeoutBoost;
909 PVOID pDebugInfo;
910 } RTL_RWLOCK, *LPRTL_RWLOCK;
912 /* System Information Class 0x00 */
914 typedef struct _SYSTEM_BASIC_INFORMATION {
915 #ifdef __WINESRC__
916 DWORD dwUnknown1;
917 ULONG uKeMaximumIncrement;
918 ULONG uPageSize;
919 ULONG uMmNumberOfPhysicalPages;
920 ULONG uMmLowestPhysicalPage;
921 ULONG uMmHighestPhysicalPage;
922 ULONG uAllocationGranularity;
923 PVOID pLowestUserAddress;
924 PVOID pMmHighestUserAddress;
925 ULONG uKeActiveProcessors;
926 BYTE bKeNumberProcessors;
927 BYTE bUnknown2;
928 WORD wUnknown3;
929 #else
930 BYTE Reserved1[24];
931 PVOID Reserved2[4];
932 CCHAR NumberOfProcessors;
933 #endif
934 } SYSTEM_BASIC_INFORMATION, *PSYSTEM_BASIC_INFORMATION;
936 /* System Information Class 0x01 */
938 typedef struct _SYSTEM_CPU_INFORMATION {
939 WORD Architecture;
940 WORD Level;
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 {
969 BYTE Reserved1[312];
970 } SYSTEM_PERFORMANCE_INFORMATION, *PSYSTEM_PERFORMANCE_INFORMATION;
972 /* System Information Class 0x03 */
974 typedef struct _SYSTEM_TIMEOFDAY_INFORMATION {
975 #ifdef __WINESRC__
976 LARGE_INTEGER liKeBootTime;
977 LARGE_INTEGER liKeSystemTime;
978 LARGE_INTEGER liExpTimeZoneBias;
979 ULONG uCurrentTimeZoneId;
980 DWORD dwReserved;
981 #else
982 BYTE Reserved1[48];
983 #endif
984 } SYSTEM_TIMEOFDAY_INFORMATION, *PSYSTEM_TIMEOFDAY_INFORMATION; /* was SYSTEM_TIME_INFORMATION */
986 /* System Information Class 0x08 */
988 typedef struct _SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION {
989 #ifdef __WINESRC__
990 LARGE_INTEGER liIdleTime;
991 DWORD dwSpare[10];
992 #else
993 LARGE_INTEGER IdleTime;
994 LARGE_INTEGER KernelTime;
995 LARGE_INTEGER UserTime;
996 LARGE_INTEGER Reserved1[2];
997 ULONG Reserved2;
998 #endif
999 } SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION, *PSYSTEM_PROCESSOR_PERFORMANCE_INFORMATION;
1001 /* System Information Class 0x0b */
1003 typedef struct _SYSTEM_DRIVER_INFORMATION {
1004 PVOID pvAddress;
1005 DWORD dwUnknown1;
1006 DWORD dwUnknown2;
1007 DWORD dwEntryIndex;
1008 DWORD dwUnknown3;
1009 char szName[MAX_PATH + 1];
1010 } SYSTEM_DRIVER_INFORMATION, *PSYSTEM_DRIVER_INFORMATION;
1012 /* System Information Class 0x10 */
1014 typedef struct _SYSTEM_HANDLE_ENTRY {
1015 ULONG OwnerPid;
1016 BYTE ObjectType;
1017 BYTE HandleFlags;
1018 USHORT HandleValue;
1019 PVOID ObjectPointer;
1020 ULONG AccessMask;
1021 } SYSTEM_HANDLE_ENTRY, *PSYSTEM_HANDLE_ENTRY;
1023 typedef struct _SYSTEM_HANDLE_INFORMATION {
1024 ULONG Count;
1025 SYSTEM_HANDLE_ENTRY Handle[1];
1026 } SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION;
1028 /* System Information Class 0x15 */
1030 typedef struct _SYSTEM_CACHE_INFORMATION {
1031 ULONG CurrentSize;
1032 ULONG PeakSize;
1033 ULONG PageFaultCount;
1034 ULONG MinimumWorkingSet;
1035 ULONG MaximumWorkingSet;
1036 ULONG unused[4];
1037 } SYSTEM_CACHE_INFORMATION, *PSYSTEM_CACHE_INFORMATION;
1039 /* System Information Class 0x17 */
1041 typedef struct _SYSTEM_INTERRUPT_INFORMATION {
1042 BYTE Reserved1[24];
1043 } SYSTEM_INTERRUPT_INFORMATION, *PSYSTEM_INTERRUPT_INFORMATION;
1045 typedef struct _SYSTEM_CONFIGURATION_INFO {
1046 union {
1047 ULONG OemId;
1048 struct {
1049 WORD ProcessorArchitecture;
1050 WORD Reserved;
1051 } tag1;
1052 } tag2;
1053 ULONG PageSize;
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 {
1065 BYTE Reserved1[16];
1066 } SYSTEM_EXCEPTION_INFORMATION, *PSYSTEM_EXCEPTION_INFORMATION;
1068 typedef struct _SYSTEM_LOOKASIDE_INFORMATION {
1069 BYTE Reserved1[32];
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;
1081 SIZE_T VirtualSize;
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 {
1094 #ifdef __WINESRC__
1095 DWORD dwOffset;
1096 DWORD dwThreadCount;
1097 DWORD dwUnknown1[6];
1098 FILETIME ftCreationTime;
1099 FILETIME ftUserTime;
1100 FILETIME ftKernelTime;
1101 UNICODE_STRING ProcessName;
1102 DWORD dwBasePriority;
1103 DWORD dwProcessID;
1104 DWORD dwParentProcessID;
1105 DWORD dwHandleCount;
1106 DWORD dwUnknown3;
1107 DWORD dwUnknown4;
1108 VM_COUNTERS vmCounters;
1109 IO_COUNTERS ioCounters;
1110 SYSTEM_THREAD_INFORMATION ti[1];
1111 #else
1112 ULONG NextEntryOffset;
1113 BYTE Reserved1[52];
1114 PVOID Reserved2[3];
1115 HANDLE UniqueProcessId;
1116 PVOID Reserved3;
1117 ULONG HandleCount;
1118 BYTE Reserved4[4];
1119 PVOID Reserved5[11];
1120 SIZE_T PeakPagefileUsage;
1121 SIZE_T PrivatePageCount;
1122 LARGE_INTEGER Reserved6[6];
1123 #endif
1124 } SYSTEM_PROCESS_INFORMATION, *PSYSTEM_PROCESS_INFORMATION;
1126 typedef struct _SYSTEM_REGISTRY_QUOTA_INFORMATION {
1127 ULONG RegistryQuotaAllowed;
1128 ULONG RegistryQuotaUsed;
1129 PVOID Reserved1;
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
1138 { CSHORT Year;
1139 CSHORT Month;
1140 CSHORT Day;
1141 CSHORT Hour;
1142 CSHORT Minute;
1143 CSHORT Second;
1144 CSHORT Milliseconds;
1145 CSHORT Weekday;
1146 } TIME_FIELDS, *PTIME_FIELDS;
1148 typedef struct _WINSTATIONINFORMATIONW {
1149 BYTE Reserved2[70];
1150 ULONG LogonId;
1151 BYTE Reserved3[1140];
1152 } WINSTATIONINFORMATIONW, *PWINSTATIONINFORMATIONW;
1154 typedef BOOLEAN (WINAPI * PWINSTATIONQUERYINFORMATIONW)(HANDLE,ULONG,WINSTATIONINFOCLASS,PVOID,ULONG,PULONG);
1156 typedef struct _LDR_RESOURCE_INFO
1158 ULONG Type;
1159 ULONG Name;
1160 ULONG Language;
1161 } LDR_RESOURCE_INFO, *PLDR_RESOURCE_INFO;
1164 /* debug buffer definitions */
1166 typedef struct _DEBUG_BUFFER {
1167 HANDLE SectionHandle;
1168 PVOID SectionBase;
1169 PVOID RemoteSectionBase;
1170 ULONG SectionBaseDelta;
1171 HANDLE EventPairHandle;
1172 ULONG Unknown[2];
1173 HANDLE RemoteThreadHandle;
1174 ULONG InfoClassMask;
1175 ULONG SizeOfInfo;
1176 ULONG AllocatedSize;
1177 ULONG SectionSize;
1178 PVOID ModuleInformation;
1179 PVOID BackTraceInformation;
1180 PVOID HeapInformation;
1181 PVOID LockInformation;
1182 PVOID Reserved[8];
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 {
1193 ULONG Reserved[2];
1194 ULONG Base;
1195 ULONG Size;
1196 ULONG Flags;
1197 USHORT Index;
1198 USHORT Unknown;
1199 USHORT LoadCount;
1200 USHORT ModuleNameOffset;
1201 CHAR ImageName[256];
1202 } DEBUG_MODULE_INFORMATION, *PDEBUG_MODULE_INFORMATION;
1204 typedef struct _DEBUG_HEAP_INFORMATION {
1205 ULONG Base;
1206 ULONG Flags;
1207 USHORT Granularity;
1208 USHORT Unknown;
1209 ULONG Allocated;
1210 ULONG Committed;
1211 ULONG TagCount;
1212 ULONG BlockCount;
1213 ULONG Reserved[7];
1214 PVOID Tags;
1215 PVOID Blocks;
1216 } DEBUG_HEAP_INFORMATION, *PDEBUG_HEAP_INFORMATION;
1218 typedef struct _DEBUG_LOCK_INFORMATION {
1219 PVOID Address;
1220 USHORT Type;
1221 USHORT CreatorBackTraceIndex;
1222 ULONG OwnerThreadId;
1223 ULONG ActiveCount;
1224 ULONG ContentionCount;
1225 ULONG EntryCount;
1226 ULONG RecursionCount;
1227 ULONG NumberOfSharedWaiters;
1228 ULONG NumberOfExclusiveWaiters;
1229 } DEBUG_LOCK_INFORMATION, *PDEBUG_LOCK_INFORMATION;
1231 typedef struct _PORT_MESSAGE_HEADER {
1232 USHORT DataSize;
1233 USHORT MessageSize;
1234 USHORT MessageType;
1235 USHORT VirtualRangesOffset;
1236 CLIENT_ID ClientId;
1237 ULONG MessageId;
1238 ULONG SectionSize;
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;
1256 USHORT Pinned;
1257 USHORT NameLength;
1258 WCHAR Name[1];
1259 } ATOM_BASIC_INFORMATION, *PATOM_BASIC_INFORMATION;
1261 /* FIXME: names probably not correct */
1262 typedef struct _RTL_HANDLE
1264 struct _RTL_HANDLE * Next;
1265 } RTL_HANDLE;
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 */
1277 } RTL_HANDLE_TABLE;
1279 /***********************************************************************
1280 * Defines
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
1318 #define FILE_OPEN 1
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,
1424 ULONG ValueType,
1425 PVOID ValueData,
1426 ULONG ValueLength,
1427 PVOID Context,
1428 PVOID EntryContext);
1430 typedef struct _RTL_QUERY_REGISTRY_TABLE
1432 PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine;
1433 ULONG Flags;
1434 PWSTR Name;
1435 PVOID EntryContext;
1436 ULONG DefaultType;
1437 PVOID DefaultData;
1438 ULONG DefaultLength;
1439 } RTL_QUERY_REGISTRY_TABLE, *PRTL_QUERY_REGISTRY_TABLE;
1441 typedef struct _KEY_MULTIPLE_VALUE_INFORMATION
1443 PUNICODE_STRING ValueName;
1444 ULONG DataLength;
1445 ULONG DataOffset;
1446 ULONG Type;
1447 } KEY_MULTIPLE_VALUE_INFORMATION, *PKEY_MULTIPLE_VALUE_INFORMATION;
1449 typedef VOID (*PTIMER_APC_ROUTINE) ( PVOID, ULONG, LONG );
1452 /***********************************************************************
1453 * Function declarations
1456 extern LPSTR _strlwr(LPSTR str); /* FIXME: Doesn't belong here */
1457 extern LPSTR _strupr(LPSTR str); /* FIXME: Doesn't belong here */
1459 #if defined(__i386__) && defined(__GNUC__)
1460 static inline void WINAPI DbgBreakPoint(void) { __asm__ __volatile__("int3"); }
1461 static inline void WINAPI DbgUserBreakPoint(void) { __asm__ __volatile__("int3"); }
1462 #else /* __i386__ && __GNUC__ */
1463 void WINAPI DbgBreakPoint(void);
1464 void WINAPI DbgUserBreakPoint(void);
1465 #endif /* __i386__ && __GNUC__ */
1466 NTSTATUS WINAPIV DbgPrint(LPCSTR fmt, ...);
1467 NTSTATUS WINAPIV DbgPrintEx(ULONG iComponentId, ULONG Level, LPCSTR fmt, ...);
1469 NTSTATUS WINAPI LdrAccessResource(HMODULE,const IMAGE_RESOURCE_DATA_ENTRY*,void**,PULONG);
1470 NTSTATUS WINAPI LdrFindResourceDirectory_U(HMODULE,const LDR_RESOURCE_INFO*,ULONG,const IMAGE_RESOURCE_DIRECTORY**);
1471 NTSTATUS WINAPI LdrFindResource_U(HMODULE,const LDR_RESOURCE_INFO*,ULONG,const IMAGE_RESOURCE_DATA_ENTRY**);
1472 NTSTATUS WINAPI LdrGetDllHandle(ULONG, ULONG, const UNICODE_STRING*, HMODULE*);
1473 NTSTATUS WINAPI LdrGetProcedureAddress(HMODULE, const ANSI_STRING*, ULONG, void**);
1474 void WINAPI LdrInitializeThunk(HANDLE,ULONG,ULONG,ULONG);
1475 NTSTATUS WINAPI LdrLoadDll(LPCWSTR, DWORD, const UNICODE_STRING*, HMODULE*);
1476 void WINAPI LdrShutdownProcess(void);
1477 void WINAPI LdrShutdownThread(void);
1478 NTSTATUS WINAPI NtAccessCheck(PSECURITY_DESCRIPTOR,HANDLE,ACCESS_MASK,PGENERIC_MAPPING,PPRIVILEGE_SET,PULONG,PULONG,NTSTATUS*);
1479 NTSTATUS WINAPI NtAddAtom(const WCHAR*,ULONG,RTL_ATOM*);
1480 NTSTATUS WINAPI NtAdjustGroupsToken(HANDLE,BOOLEAN,PTOKEN_GROUPS,ULONG,PTOKEN_GROUPS,PULONG);
1481 NTSTATUS WINAPI NtAdjustPrivilegesToken(HANDLE,BOOLEAN,PTOKEN_PRIVILEGES,DWORD,PTOKEN_PRIVILEGES,PDWORD);
1482 NTSTATUS WINAPI NtAlertThread(HANDLE ThreadHandle);
1483 NTSTATUS WINAPI NtAllocateLocallyUniqueId(PLUID lpLuid);
1484 NTSTATUS WINAPI NtAllocateVirtualMemory(HANDLE,PVOID*,ULONG,ULONG*,ULONG,ULONG);
1485 NTSTATUS WINAPI NtCancelIoFile(HANDLE,PIO_STATUS_BLOCK);
1486 NTSTATUS WINAPI NtCancelTimer(HANDLE, BOOLEAN*);
1487 NTSTATUS WINAPI NtClearEvent(HANDLE);
1488 NTSTATUS WINAPI NtClose(HANDLE);
1489 NTSTATUS WINAPI NtCreateEvent(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES *,BOOLEAN,BOOLEAN);
1490 NTSTATUS WINAPI NtCreateFile(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,PLARGE_INTEGER,ULONG,ULONG,ULONG,ULONG,PVOID,ULONG);
1491 NTSTATUS WINAPI NtCreateIoCompletion(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,ULONG);
1492 NTSTATUS WINAPI NtCreateKey(PHKEY,ACCESS_MASK,const OBJECT_ATTRIBUTES*,ULONG,const UNICODE_STRING*,ULONG,PULONG);
1493 NTSTATUS WINAPI NtCreateMailslotFile(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,ULONG,ULONG,ULONG,PLARGE_INTEGER);
1494 NTSTATUS WINAPI NtCreateMutant(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,BOOLEAN);
1495 NTSTATUS WINAPI NtCreateNamedPipeFile(PHANDLE,ULONG,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,ULONG,ULONG,ULONG,ULONG,ULONG,ULONG,ULONG,ULONG,ULONG,PLARGE_INTEGER);
1496 NTSTATUS WINAPI NtCreateSection(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,const LARGE_INTEGER*,ULONG,ULONG,HANDLE);
1497 NTSTATUS WINAPI NtCreateSemaphore(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*,LONG,LONG);
1498 NTSTATUS WINAPI NtCreateTimer(HANDLE*, ACCESS_MASK, const OBJECT_ATTRIBUTES*, TIMER_TYPE);
1499 NTSTATUS WINAPI NtDelayExecution(BOOLEAN,const LARGE_INTEGER*);
1500 NTSTATUS WINAPI NtDeleteAtom(RTL_ATOM);
1501 NTSTATUS WINAPI NtDeleteFile(POBJECT_ATTRIBUTES);
1502 NTSTATUS WINAPI NtDeleteKey(HKEY);
1503 NTSTATUS WINAPI NtDeleteValueKey(HKEY,const UNICODE_STRING *);
1504 NTSTATUS WINAPI NtDeviceIoControlFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,PVOID,ULONG,PVOID,ULONG);
1505 NTSTATUS WINAPI NtDuplicateObject(HANDLE,HANDLE,HANDLE,PHANDLE,ACCESS_MASK,ULONG,ULONG);
1506 NTSTATUS WINAPI NtDuplicateToken(HANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,SECURITY_IMPERSONATION_LEVEL,TOKEN_TYPE,PHANDLE);
1507 NTSTATUS WINAPI NtEnumerateKey(HKEY,ULONG,KEY_INFORMATION_CLASS,void *,DWORD,DWORD *);
1508 NTSTATUS WINAPI NtEnumerateValueKey(HKEY,ULONG,KEY_VALUE_INFORMATION_CLASS,PVOID,ULONG,PULONG);
1509 NTSTATUS WINAPI NtFindAtom(const WCHAR*,ULONG,RTL_ATOM*);
1510 NTSTATUS WINAPI NtFlushBuffersFile(HANDLE,IO_STATUS_BLOCK*);
1511 NTSTATUS WINAPI NtFlushInstructionCache(HANDLE,LPCVOID,ULONG);
1512 NTSTATUS WINAPI NtFlushKey(HKEY);
1513 NTSTATUS WINAPI NtFlushVirtualMemory(HANDLE,LPCVOID*,ULONG*,ULONG);
1514 NTSTATUS WINAPI NtFreeVirtualMemory(HANDLE,PVOID*,ULONG*,ULONG);
1515 NTSTATUS WINAPI NtGetContextThread(HANDLE,CONTEXT*);
1516 NTSTATUS WINAPI NtImpersonateAnonymousToken(HANDLE);
1517 NTSTATUS WINAPI NtImpersonateClientOfPort(HANDLE,PPORT_MESSAGE);
1518 NTSTATUS WINAPI NtImpersonateThread(HANDLE,HANDLE,PSECURITY_QUALITY_OF_SERVICE);
1519 NTSTATUS WINAPI NtInitiatePowerAction(POWER_ACTION,SYSTEM_POWER_STATE,ULONG,BOOLEAN);
1520 NTSTATUS WINAPI NtLoadDriver(const UNICODE_STRING *);
1521 NTSTATUS WINAPI NtLoadKey(const OBJECT_ATTRIBUTES *,OBJECT_ATTRIBUTES *);
1522 NTSTATUS WINAPI NtLockFile(HANDLE,HANDLE,PIO_APC_ROUTINE,void*,PIO_STATUS_BLOCK,PLARGE_INTEGER,PLARGE_INTEGER,ULONG*,BOOLEAN,BOOLEAN);
1523 NTSTATUS WINAPI NtLockVirtualMemory(HANDLE,PVOID*,ULONG*,ULONG);
1524 NTSTATUS WINAPI NtMapViewOfSection(HANDLE,HANDLE,PVOID*,ULONG,ULONG,const LARGE_INTEGER*,ULONG*,SECTION_INHERIT,ULONG,ULONG);
1525 NTSTATUS WINAPI NtNotifyChangeKey(HKEY,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,BOOLEAN,PVOID,ULONG,BOOLEAN);
1526 NTSTATUS WINAPI NtOpenEvent(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES *);
1527 NTSTATUS WINAPI NtOpenFile(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,ULONG,ULONG);
1528 NTSTATUS WINAPI NtOpenIoCompletion(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES);
1529 NTSTATUS WINAPI NtOpenKey(PHKEY,ACCESS_MASK,const OBJECT_ATTRIBUTES *);
1530 NTSTATUS WINAPI NtOpenMutant(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*);
1531 NTSTATUS WINAPI NtOpenProcessToken(HANDLE,DWORD,HANDLE *);
1532 NTSTATUS WINAPI NtOpenSection(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*);
1533 NTSTATUS WINAPI NtOpenSemaphore(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*);
1534 NTSTATUS WINAPI NtOpenThread(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,const CLIENT_ID*);
1535 NTSTATUS WINAPI NtOpenThreadToken(HANDLE,DWORD,BOOLEAN,HANDLE *);
1536 NTSTATUS WINAPI NtOpenTimer(HANDLE*, ACCESS_MASK, const OBJECT_ATTRIBUTES*);
1537 NTSTATUS WINAPI NtPowerInformation(POWER_INFORMATION_LEVEL,PVOID,ULONG,PVOID,ULONG);
1538 NTSTATUS WINAPI NtPrivilegeCheck(HANDLE,PPRIVILEGE_SET,PBOOLEAN);
1539 NTSTATUS WINAPI NtProtectVirtualMemory(HANDLE,PVOID*,ULONG*,ULONG,ULONG*);
1540 NTSTATUS WINAPI NtPulseEvent(HANDLE,PULONG);
1541 NTSTATUS WINAPI NtQueueApcThread(HANDLE,PNTAPCFUNC,ULONG_PTR,ULONG_PTR,ULONG_PTR);
1542 NTSTATUS WINAPI NtQueryAttributesFile(const OBJECT_ATTRIBUTES*,FILE_BASIC_INFORMATION*);
1543 NTSTATUS WINAPI NtQueryDefaultLocale(BOOLEAN,LCID*);
1544 NTSTATUS WINAPI NtQueryDefaultUILanguage(LANGID*);
1545 NTSTATUS WINAPI NtQueryDirectoryFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,PVOID,ULONG,FILE_INFORMATION_CLASS,BOOLEAN,PUNICODE_STRING,BOOLEAN);
1546 NTSTATUS WINAPI NtQueryEaFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,BOOLEAN,PVOID,ULONG,PVOID,BOOLEAN);
1547 NTSTATUS WINAPI NtQueryFullAttributesFile(const OBJECT_ATTRIBUTES*,FILE_NETWORK_OPEN_INFORMATION*);
1548 NTSTATUS WINAPI NtQueryInformationAtom(RTL_ATOM,ATOM_INFORMATION_CLASS,RTL_ATOM_TABLE,ULONG,ULONG*);
1549 NTSTATUS WINAPI NtQueryInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,LONG,FILE_INFORMATION_CLASS);
1550 NTSTATUS WINAPI NtQueryInformationProcess(HANDLE,PROCESSINFOCLASS,PVOID,ULONG,PULONG);
1551 NTSTATUS WINAPI NtQueryInformationThread(HANDLE,THREADINFOCLASS,PVOID,ULONG,PULONG);
1552 NTSTATUS WINAPI NtQueryInformationToken(HANDLE,DWORD,LPVOID,DWORD,LPDWORD);
1553 NTSTATUS WINAPI NtQueryInstallUILanguage(LANGID*);
1554 NTSTATUS WINAPI NtQueryKey(HKEY,KEY_INFORMATION_CLASS,void *,DWORD,DWORD *);
1555 NTSTATUS WINAPI NtQueryMultipleValueKey(HKEY,PKEY_MULTIPLE_VALUE_INFORMATION,ULONG,PVOID,ULONG,PULONG);
1556 NTSTATUS WINAPI NtQueryObject(HANDLE, OBJECT_INFORMATION_CLASS, PVOID, ULONG, PULONG);
1557 NTSTATUS WINAPI NtQueryPerformanceCounter(PLARGE_INTEGER, PLARGE_INTEGER);
1558 NTSTATUS WINAPI NtQuerySecurityObject(HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,ULONG,PULONG);
1559 NTSTATUS WINAPI NtQuerySystemInformation(SYSTEM_INFORMATION_CLASS,PVOID,ULONG,PULONG);
1560 NTSTATUS WINAPI NtQuerySystemTime(PLARGE_INTEGER);
1561 NTSTATUS WINAPI NtQueryTimer(HANDLE,TIMER_INFORMATION_CLASS,PVOID,ULONG,PULONG);
1562 NTSTATUS WINAPI NtQueryValueKey(HKEY,const UNICODE_STRING *,KEY_VALUE_INFORMATION_CLASS,void *,DWORD,DWORD *);
1563 NTSTATUS WINAPI NtQueryVirtualMemory(HANDLE,LPCVOID,MEMORY_INFORMATION_CLASS,PVOID,ULONG,ULONG*);
1564 NTSTATUS WINAPI NtQueryVolumeInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,FS_INFORMATION_CLASS);
1565 void WINAPI NtRaiseException(PEXCEPTION_RECORD,PCONTEXT,BOOL);
1566 NTSTATUS WINAPI NtReadFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,PVOID,ULONG,PLARGE_INTEGER,PULONG);
1567 NTSTATUS WINAPI NtReadVirtualMemory(HANDLE,const void*,void*,SIZE_T,SIZE_T*);
1568 NTSTATUS WINAPI NtReleaseMutant(HANDLE,PLONG);
1569 NTSTATUS WINAPI NtReleaseSemaphore(HANDLE,ULONG,PULONG);
1570 NTSTATUS WINAPI NtRemoveIoCompletion(HANDLE,PULONG,PULONG,PIO_STATUS_BLOCK,PLARGE_INTEGER);
1571 NTSTATUS WINAPI NtReplaceKey(POBJECT_ATTRIBUTES,HKEY,POBJECT_ATTRIBUTES);
1572 NTSTATUS WINAPI NtResetEvent(HANDLE,PULONG);
1573 NTSTATUS WINAPI NtRestoreKey(HKEY,HANDLE,ULONG);
1574 NTSTATUS WINAPI NtResumeThread(HANDLE,PULONG);
1575 NTSTATUS WINAPI NtSaveKey(HKEY,HANDLE);
1576 NTSTATUS WINAPI NtSetContextThread(HANDLE,const CONTEXT*);
1577 NTSTATUS WINAPI NtSetDefaultLocale(BOOLEAN,LCID);
1578 NTSTATUS WINAPI NtSetDefaultUILanguage(LANGID);
1579 NTSTATUS WINAPI NtSetEaFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG);
1580 NTSTATUS WINAPI NtSetEvent(HANDLE,PULONG);
1581 NTSTATUS WINAPI NtSetInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,FILE_INFORMATION_CLASS);
1582 NTSTATUS WINAPI NtSetInformationKey(HKEY,const int,PVOID,ULONG);
1583 NTSTATUS WINAPI NtSetInformationObject(HANDLE, OBJECT_INFORMATION_CLASS, PVOID, ULONG);
1584 NTSTATUS WINAPI NtSetInformationThread(HANDLE,THREADINFOCLASS,LPCVOID,ULONG);
1585 NTSTATUS WINAPI NtSetInformationToken(HANDLE,TOKEN_INFORMATION_CLASS,PVOID,ULONG);
1586 NTSTATUS WINAPI NtSetIoCompletion(HANDLE,ULONG,ULONG,NTSTATUS,ULONG);
1587 NTSTATUS WINAPI NtSetSecurityObject(HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR);
1588 NTSTATUS WINAPI NtSetSystemTime(const LARGE_INTEGER*,LARGE_INTEGER*);
1589 NTSTATUS WINAPI NtSetTimer(HANDLE, const LARGE_INTEGER*, PTIMER_APC_ROUTINE, PVOID, BOOLEAN, ULONG, BOOLEAN*);
1590 NTSTATUS WINAPI NtSetValueKey(HKEY,const UNICODE_STRING *,ULONG,ULONG,const void *,ULONG);
1591 NTSTATUS WINAPI NtSignalAndWaitForSingleObject(HANDLE,HANDLE,BOOLEAN,const LARGE_INTEGER*);
1592 NTSTATUS WINAPI NtSuspendThread(HANDLE,PULONG);
1593 NTSTATUS WINAPI NtTerminateProcess(HANDLE,LONG);
1594 NTSTATUS WINAPI NtTerminateThread(HANDLE,LONG);
1595 NTSTATUS WINAPI NtUnloadDriver(const UNICODE_STRING *);
1596 NTSTATUS WINAPI NtUnloadKey(HKEY);
1597 NTSTATUS WINAPI NtUnlockFile(HANDLE,PIO_STATUS_BLOCK,PLARGE_INTEGER,PLARGE_INTEGER,PULONG);
1598 NTSTATUS WINAPI NtUnlockVirtualMemory(HANDLE,PVOID*,ULONG*,ULONG);
1599 NTSTATUS WINAPI NtUnmapViewOfSection(HANDLE,PVOID);
1600 NTSTATUS WINAPI NtWaitForSingleObject(HANDLE,BOOLEAN,const LARGE_INTEGER*);
1601 NTSTATUS WINAPI NtWaitForMultipleObjects(ULONG,const HANDLE*,BOOLEAN,BOOLEAN,const LARGE_INTEGER*);
1602 NTSTATUS WINAPI NtWriteFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,const void*,ULONG,PLARGE_INTEGER,PULONG);
1603 NTSTATUS WINAPI NtWriteVirtualMemory(HANDLE,void*,const void*,SIZE_T,SIZE_T*);
1604 NTSTATUS WINAPI NtYieldExecution(void);
1606 void WINAPI RtlAcquirePebLock(void);
1607 BYTE WINAPI RtlAcquireResourceExclusive(LPRTL_RWLOCK,BYTE);
1608 BYTE WINAPI RtlAcquireResourceShared(LPRTL_RWLOCK,BYTE);
1609 NTSTATUS WINAPI RtlAddAce(PACL,DWORD,DWORD,PACE_HEADER,DWORD);
1610 NTSTATUS WINAPI RtlAddAccessAllowedAce(PACL,DWORD,DWORD,PSID);
1611 NTSTATUS WINAPI RtlAddAccessAllowedAceEx(PACL,DWORD,DWORD,DWORD,PSID);
1612 NTSTATUS WINAPI RtlAddAccessDeniedAce(PACL,DWORD,DWORD,PSID);
1613 NTSTATUS WINAPI RtlAddAccessDeniedAceEx(PACL,DWORD,DWORD,DWORD,PSID);
1614 NTSTATUS WINAPI RtlAddAtomToAtomTable(RTL_ATOM_TABLE,const WCHAR*,RTL_ATOM*);
1615 PVOID WINAPI RtlAddVectoredExceptionHandler(ULONG,PVECTORED_EXCEPTION_HANDLER);
1616 DWORD WINAPI RtlAdjustPrivilege(DWORD,DWORD,DWORD,DWORD);
1617 NTSTATUS WINAPI RtlAllocateAndInitializeSid(PSID_IDENTIFIER_AUTHORITY,BYTE,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,PSID *);
1618 RTL_HANDLE * WINAPI RtlAllocateHandle(RTL_HANDLE_TABLE *,ULONG *);
1619 PVOID WINAPI RtlAllocateHeap(HANDLE,ULONG,ULONG);
1620 DWORD WINAPI RtlAnsiStringToUnicodeSize(const STRING *);
1621 NTSTATUS WINAPI RtlAnsiStringToUnicodeString(PUNICODE_STRING,PCANSI_STRING,BOOLEAN);
1622 NTSTATUS WINAPI RtlAppendAsciizToString(STRING *,LPCSTR);
1623 NTSTATUS WINAPI RtlAppendStringToString(STRING *,const STRING *);
1624 NTSTATUS WINAPI RtlAppendUnicodeStringToString(UNICODE_STRING *,const UNICODE_STRING *);
1625 NTSTATUS WINAPI RtlAppendUnicodeToString(UNICODE_STRING *,LPCWSTR);
1626 BOOLEAN WINAPI RtlAreAllAccessesGranted(ACCESS_MASK,ACCESS_MASK);
1627 BOOLEAN WINAPI RtlAreAnyAccessesGranted(ACCESS_MASK,ACCESS_MASK);
1628 BOOLEAN WINAPI RtlAreBitsSet(PCRTL_BITMAP,ULONG,ULONG);
1629 BOOLEAN WINAPI RtlAreBitsClear(PCRTL_BITMAP,ULONG,ULONG);
1631 NTSTATUS WINAPI RtlCharToInteger(PCSZ,ULONG,PULONG);
1632 NTSTATUS WINAPI RtlCheckRegistryKey(ULONG, PWSTR);
1633 void WINAPI RtlClearAllBits(PRTL_BITMAP);
1634 void WINAPI RtlClearBits(PRTL_BITMAP,ULONG,ULONG);
1635 ULONG WINAPI RtlCompactHeap(HANDLE,ULONG);
1636 LONG WINAPI RtlCompareString(const STRING*,const STRING*,BOOLEAN);
1637 LONG WINAPI RtlCompareUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
1638 DWORD WINAPI RtlComputeCrc32(DWORD,PBYTE,INT);
1639 NTSTATUS WINAPI RtlConvertSidToUnicodeString(PUNICODE_STRING,PSID,BOOLEAN);
1640 LONGLONG WINAPI RtlConvertLongToLargeInteger(LONG);
1641 ULONGLONG WINAPI RtlConvertUlongToLargeInteger(ULONG);
1642 void WINAPI RtlCopyLuid(PLUID,const LUID*);
1643 void WINAPI RtlCopyLuidAndAttributesArray(ULONG,const LUID_AND_ATTRIBUTES*,PLUID_AND_ATTRIBUTES);
1644 BOOLEAN WINAPI RtlCopySid(DWORD,PSID,PSID);
1645 void WINAPI RtlCopyString(STRING*,const STRING*);
1646 void WINAPI RtlCopyUnicodeString(UNICODE_STRING*,const UNICODE_STRING*);
1647 NTSTATUS WINAPI RtlCreateAcl(PACL,DWORD,DWORD);
1648 NTSTATUS WINAPI RtlCreateAtomTable(ULONG,RTL_ATOM_TABLE*);
1649 NTSTATUS WINAPI RtlCreateEnvironment(BOOLEAN, PWSTR*);
1650 HANDLE WINAPI RtlCreateHeap(ULONG,PVOID,ULONG,ULONG,PVOID,PRTL_HEAP_DEFINITION);
1651 NTSTATUS WINAPI RtlCreateProcessParameters(RTL_USER_PROCESS_PARAMETERS**,const UNICODE_STRING*,
1652 const UNICODE_STRING*,const UNICODE_STRING*,
1653 const UNICODE_STRING*,PWSTR,const UNICODE_STRING*,
1654 const UNICODE_STRING*,const UNICODE_STRING*,
1655 const UNICODE_STRING*);
1656 NTSTATUS WINAPI RtlCreateSecurityDescriptor(PSECURITY_DESCRIPTOR,DWORD);
1657 BOOLEAN WINAPI RtlCreateUnicodeString(PUNICODE_STRING,LPCWSTR);
1658 BOOLEAN WINAPI RtlCreateUnicodeStringFromAsciiz(PUNICODE_STRING,LPCSTR);
1659 NTSTATUS WINAPI RtlCreateUserThread(HANDLE,const SECURITY_DESCRIPTOR*,BOOLEAN,PVOID,SIZE_T,SIZE_T,PRTL_THREAD_START_ROUTINE,void*,HANDLE*,CLIENT_ID*);
1661 NTSTATUS WINAPI RtlDeleteAce(PACL,DWORD);
1662 NTSTATUS WINAPI RtlDeleteAtomFromAtomTable(RTL_ATOM_TABLE,RTL_ATOM);
1663 NTSTATUS WINAPI RtlDeleteCriticalSection(RTL_CRITICAL_SECTION *);
1664 NTSTATUS WINAPI RtlDeleteRegistryValue(ULONG, PCWSTR, PCWSTR);
1665 void WINAPI RtlDeleteResource(LPRTL_RWLOCK);
1666 DWORD WINAPI RtlDeleteSecurityObject(DWORD);
1667 PRTL_USER_PROCESS_PARAMETERS WINAPI RtlDeNormalizeProcessParams(RTL_USER_PROCESS_PARAMETERS*);
1668 NTSTATUS WINAPI RtlDestroyAtomTable(RTL_ATOM_TABLE);
1669 NTSTATUS WINAPI RtlDestroyEnvironment(PWSTR);
1670 NTSTATUS WINAPI RtlDestroyHandleTable(RTL_HANDLE_TABLE *);
1671 HANDLE WINAPI RtlDestroyHeap(HANDLE);
1672 void WINAPI RtlDestroyProcessParameters(RTL_USER_PROCESS_PARAMETERS*);
1673 DOS_PATHNAME_TYPE WINAPI RtlDetermineDosPathNameType_U(PCWSTR);
1674 BOOLEAN WINAPI RtlDoesFileExists_U(LPCWSTR);
1675 BOOLEAN WINAPI RtlDosPathNameToNtPathName_U(PCWSTR,PUNICODE_STRING,PWSTR*,CURDIR*);
1676 ULONG WINAPI RtlDosSearchPath_U(LPCWSTR, LPCWSTR, LPCWSTR, ULONG, LPWSTR, LPWSTR*);
1677 WCHAR WINAPI RtlDowncaseUnicodeChar(WCHAR);
1678 NTSTATUS WINAPI RtlDowncaseUnicodeString(UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
1679 void WINAPI RtlDumpResource(LPRTL_RWLOCK);
1680 NTSTATUS WINAPI RtlDuplicateUnicodeString(int,const UNICODE_STRING*,UNICODE_STRING*);
1682 NTSTATUS WINAPI RtlEmptyAtomTable(RTL_ATOM_TABLE,BOOLEAN);
1683 LONGLONG WINAPI RtlEnlargedIntegerMultiply(INT,INT);
1684 ULONGLONG WINAPI RtlEnlargedUnsignedMultiply(UINT,UINT);
1685 UINT WINAPI RtlEnlargedUnsignedDivide(ULONGLONG,UINT,UINT *);
1686 NTSTATUS WINAPI RtlEnterCriticalSection(RTL_CRITICAL_SECTION *);
1687 void WINAPI RtlEraseUnicodeString(UNICODE_STRING*);
1688 NTSTATUS WINAPI RtlEqualComputerName(const UNICODE_STRING*,const UNICODE_STRING*);
1689 NTSTATUS WINAPI RtlEqualDomainName(const UNICODE_STRING*,const UNICODE_STRING*);
1690 BOOLEAN WINAPI RtlEqualLuid(const LUID*,const LUID*);
1691 BOOL WINAPI RtlEqualPrefixSid(PSID,PSID);
1692 BOOL WINAPI RtlEqualSid(PSID,PSID);
1693 BOOLEAN WINAPI RtlEqualString(const STRING*,const STRING*,BOOLEAN);
1694 BOOLEAN WINAPI RtlEqualUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
1695 NTSTATUS WINAPI RtlExpandEnvironmentStrings_U(PWSTR, const UNICODE_STRING*, UNICODE_STRING*, ULONG*);
1696 LONGLONG WINAPI RtlExtendedMagicDivide(LONGLONG,LONGLONG,INT);
1697 LONGLONG WINAPI RtlExtendedIntegerMultiply(LONGLONG,INT);
1698 LONGLONG WINAPI RtlExtendedLargeIntegerDivide(LONGLONG,INT,INT *);
1700 NTSTATUS WINAPI RtlFindCharInUnicodeString(int,const UNICODE_STRING*,const UNICODE_STRING*,USHORT*);
1701 ULONG WINAPI RtlFindClearBits(PCRTL_BITMAP,ULONG,ULONG);
1702 ULONG WINAPI RtlFindClearBitsAndSet(PRTL_BITMAP,ULONG,ULONG);
1703 ULONG WINAPI RtlFindClearRuns(PCRTL_BITMAP,PRTL_BITMAP_RUN,ULONG,BOOLEAN);
1704 ULONG WINAPI RtlFindLastBackwardRunSet(PCRTL_BITMAP,ULONG,PULONG);
1705 ULONG WINAPI RtlFindLastBackwardRunClear(PCRTL_BITMAP,ULONG,PULONG);
1706 CCHAR WINAPI RtlFindLeastSignificantBit(ULONGLONG);
1707 ULONG WINAPI RtlFindLongestRunSet(PCRTL_BITMAP,PULONG);
1708 ULONG WINAPI RtlFindLongestRunClear(PCRTL_BITMAP,PULONG);
1709 NTSTATUS WINAPI RtlFindMessage(HMODULE,ULONG,ULONG,ULONG,const MESSAGE_RESOURCE_ENTRY**);
1710 CCHAR WINAPI RtlFindMostSignificantBit(ULONGLONG);
1711 ULONG WINAPI RtlFindNextForwardRunSet(PCRTL_BITMAP,ULONG,PULONG);
1712 ULONG WINAPI RtlFindNextForwardRunClear(PCRTL_BITMAP,ULONG,PULONG);
1713 ULONG WINAPI RtlFindSetBits(PCRTL_BITMAP,ULONG,ULONG);
1714 ULONG WINAPI RtlFindSetBitsAndClear(PRTL_BITMAP,ULONG,ULONG);
1715 ULONG WINAPI RtlFindSetRuns(PCRTL_BITMAP,PRTL_BITMAP_RUN,ULONG,BOOLEAN);
1716 BOOLEAN WINAPI RtlFirstFreeAce(PACL,PACE_HEADER *);
1717 NTSTATUS WINAPI RtlFormatCurrentUserKeyPath(PUNICODE_STRING);
1718 NTSTATUS WINAPI RtlFormatMessage(LPWSTR,UCHAR,BOOLEAN,BOOLEAN,BOOLEAN,va_list *,LPWSTR,ULONG);
1719 void WINAPI RtlFreeAnsiString(PANSI_STRING);
1720 BOOLEAN WINAPI RtlFreeHandle(RTL_HANDLE_TABLE *,RTL_HANDLE *);
1721 BOOLEAN WINAPI RtlFreeHeap(HANDLE,ULONG,PVOID);
1722 void WINAPI RtlFreeOemString(POEM_STRING);
1723 DWORD WINAPI RtlFreeSid(PSID);
1724 void WINAPI RtlFreeUnicodeString(PUNICODE_STRING);
1726 NTSTATUS WINAPI RtlGetAce(PACL,DWORD,LPVOID *);
1727 NTSTATUS WINAPI RtlGetControlSecurityDescriptor(PSECURITY_DESCRIPTOR, PSECURITY_DESCRIPTOR_CONTROL,LPDWORD);
1728 NTSTATUS WINAPI RtlGetCurrentDirectory_U(ULONG, LPWSTR);
1729 NTSTATUS WINAPI RtlGetDaclSecurityDescriptor(PSECURITY_DESCRIPTOR,PBOOLEAN,PACL *,PBOOLEAN);
1730 ULONG WINAPI RtlGetFullPathName_U(PCWSTR,ULONG,PWSTR,PWSTR*);
1731 NTSTATUS WINAPI RtlGetGroupSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID *,PBOOLEAN);
1732 NTSTATUS WINAPI RtlGetLastNtStatus(void);
1733 DWORD WINAPI RtlGetLastWin32Error(void);
1734 DWORD WINAPI RtlGetLongestNtPathLength(void);
1735 BOOLEAN WINAPI RtlGetNtProductType(LPDWORD);
1736 NTSTATUS WINAPI RtlGetOwnerSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID *,PBOOLEAN);
1737 ULONG WINAPI RtlGetProcessHeaps(ULONG,HANDLE*);
1738 NTSTATUS WINAPI RtlGetSaclSecurityDescriptor(PSECURITY_DESCRIPTOR,PBOOLEAN,PACL *,PBOOLEAN);
1739 NTSTATUS WINAPI RtlGetVersion(RTL_OSVERSIONINFOEXW*);
1741 PSID_IDENTIFIER_AUTHORITY WINAPI RtlIdentifierAuthoritySid(PSID);
1742 PVOID WINAPI RtlImageDirectoryEntryToData(HMODULE,BOOL,WORD,ULONG *);
1743 PIMAGE_NT_HEADERS WINAPI RtlImageNtHeader(HMODULE);
1744 PIMAGE_SECTION_HEADER WINAPI RtlImageRvaToSection(const IMAGE_NT_HEADERS *,HMODULE,DWORD);
1745 PVOID WINAPI RtlImageRvaToVa(const IMAGE_NT_HEADERS *,HMODULE,DWORD,IMAGE_SECTION_HEADER **);
1746 BOOL WINAPI RtlImpersonateSelf(SECURITY_IMPERSONATION_LEVEL);
1747 void WINAPI RtlInitString(PSTRING,PCSZ);
1748 void WINAPI RtlInitAnsiString(PANSI_STRING,PCSZ);
1749 void WINAPI RtlInitUnicodeString(PUNICODE_STRING,PCWSTR);
1750 NTSTATUS WINAPI RtlInitUnicodeStringEx(PUNICODE_STRING,PCWSTR);
1751 NTSTATUS WINAPI RtlInitializeCriticalSection(RTL_CRITICAL_SECTION *);
1752 NTSTATUS WINAPI RtlInitializeCriticalSectionAndSpinCount(RTL_CRITICAL_SECTION *,DWORD);
1753 void WINAPI RtlInitializeBitMap(PRTL_BITMAP,PULONG,ULONG);
1754 void WINAPI RtlInitializeHandleTable(ULONG,ULONG,RTL_HANDLE_TABLE *);
1755 void WINAPI RtlInitializeResource(LPRTL_RWLOCK);
1756 BOOL WINAPI RtlInitializeSid(PSID,PSID_IDENTIFIER_AUTHORITY,BYTE);
1758 NTSTATUS WINAPI RtlInt64ToUnicodeString(ULONGLONG,ULONG,UNICODE_STRING *);
1759 NTSTATUS WINAPI RtlIntegerToChar(ULONG,ULONG,ULONG,PCHAR);
1760 NTSTATUS WINAPI RtlIntegerToUnicodeString(ULONG,ULONG,UNICODE_STRING *);
1761 ULONG WINAPI RtlIsDosDeviceName_U(PCWSTR);
1762 BOOLEAN WINAPI RtlIsNameLegalDOS8Dot3(const UNICODE_STRING*,POEM_STRING,PBOOLEAN);
1763 BOOLEAN WINAPI RtlIsTextUnicode(LPCVOID,INT,INT *);
1764 BOOLEAN WINAPI RtlIsValidHandle(const RTL_HANDLE_TABLE *, const RTL_HANDLE *);
1765 BOOLEAN WINAPI RtlIsValidIndexHandle(const RTL_HANDLE_TABLE *, ULONG Index, RTL_HANDLE **);
1767 LONGLONG WINAPI RtlLargeIntegerAdd(LONGLONG,LONGLONG);
1768 LONGLONG WINAPI RtlLargeIntegerArithmeticShift(LONGLONG,INT);
1769 ULONGLONG WINAPI RtlLargeIntegerDivide( ULONGLONG,ULONGLONG,ULONGLONG *);
1770 LONGLONG WINAPI RtlLargeIntegerNegate(LONGLONG);
1771 LONGLONG WINAPI RtlLargeIntegerShiftLeft(LONGLONG,INT);
1772 LONGLONG WINAPI RtlLargeIntegerShiftRight(LONGLONG,INT);
1773 LONGLONG WINAPI RtlLargeIntegerSubtract(LONGLONG,LONGLONG);
1774 NTSTATUS WINAPI RtlLargeIntegerToChar(const ULONGLONG *,ULONG,ULONG,PCHAR);
1775 NTSTATUS WINAPI RtlLeaveCriticalSection(RTL_CRITICAL_SECTION *);
1776 DWORD WINAPI RtlLengthRequiredSid(DWORD);
1777 ULONG WINAPI RtlLengthSecurityDescriptor(PSECURITY_DESCRIPTOR);
1778 DWORD WINAPI RtlLengthSid(PSID);
1779 NTSTATUS WINAPI RtlLocalTimeToSystemTime(const LARGE_INTEGER*,PLARGE_INTEGER);
1780 BOOLEAN WINAPI RtlLockHeap(HANDLE);
1781 NTSTATUS WINAPI RtlLookupAtomInAtomTable(RTL_ATOM_TABLE,const WCHAR*,RTL_ATOM*);
1783 NTSTATUS WINAPI RtlMakeSelfRelativeSD(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,LPDWORD);
1784 void WINAPI RtlMapGenericMask(PACCESS_MASK,const GENERIC_MAPPING*);
1785 NTSTATUS WINAPI RtlMultiByteToUnicodeN(LPWSTR,DWORD,LPDWORD,LPCSTR,DWORD);
1786 NTSTATUS WINAPI RtlMultiByteToUnicodeSize(DWORD*,LPCSTR,UINT);
1788 DWORD WINAPI RtlNewSecurityObject(DWORD,DWORD,DWORD,DWORD,DWORD,DWORD);
1789 PRTL_USER_PROCESS_PARAMETERS WINAPI RtlNormalizeProcessParams(RTL_USER_PROCESS_PARAMETERS*);
1790 ULONG WINAPI RtlNtStatusToDosError(NTSTATUS);
1791 ULONG WINAPI RtlNtStatusToDosErrorNoTeb(NTSTATUS);
1792 ULONG WINAPI RtlNumberOfSetBits(PCRTL_BITMAP);
1793 ULONG WINAPI RtlNumberOfClearBits(PCRTL_BITMAP);
1795 UINT WINAPI RtlOemStringToUnicodeSize(const STRING*);
1796 NTSTATUS WINAPI RtlOemStringToUnicodeString(UNICODE_STRING*,const STRING*,BOOLEAN);
1797 NTSTATUS WINAPI RtlOemToUnicodeN(LPWSTR,DWORD,LPDWORD,LPCSTR,DWORD);
1798 DWORD WINAPI RtlOpenCurrentUser(ACCESS_MASK,PHKEY);
1800 NTSTATUS WINAPI RtlPinAtomInAtomTable(RTL_ATOM_TABLE,RTL_ATOM);
1801 BOOLEAN WINAPI RtlPrefixString(const STRING*,const STRING*,BOOLEAN);
1802 BOOLEAN WINAPI RtlPrefixUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
1804 NTSTATUS WINAPI RtlQueryAtomInAtomTable(RTL_ATOM_TABLE,RTL_ATOM,ULONG*,ULONG*,WCHAR*,ULONG*);
1805 NTSTATUS WINAPI RtlQueryEnvironmentVariable_U(PWSTR,PUNICODE_STRING,PUNICODE_STRING);
1806 NTSTATUS WINAPI RtlQueryInformationAcl(PACL,LPVOID,DWORD,ACL_INFORMATION_CLASS);
1807 NTSTATUS WINAPI RtlQueryRegistryValues(ULONG, PCWSTR, PRTL_QUERY_REGISTRY_TABLE, PVOID, PVOID);
1808 NTSTATUS WINAPI RtlQueryTimeZoneInformation(LPTIME_ZONE_INFORMATION);
1810 void WINAPI RtlRaiseException(PEXCEPTION_RECORD);
1811 void WINAPI RtlRaiseStatus(NTSTATUS);
1812 ULONG WINAPI RtlRandom(PULONG);
1813 PVOID WINAPI RtlReAllocateHeap(HANDLE,ULONG,PVOID,ULONG);
1814 void WINAPI RtlReleasePebLock(void);
1815 void WINAPI RtlReleaseResource(LPRTL_RWLOCK);
1816 ULONG WINAPI RtlRemoveVectoredExceptionHandler(PVOID);
1817 void WINAPI RtlRestoreLastWin32Error(DWORD);
1819 void WINAPI RtlSecondsSince1970ToTime(DWORD,LARGE_INTEGER *);
1820 void WINAPI RtlSecondsSince1980ToTime(DWORD,LARGE_INTEGER *);
1821 NTSTATUS WINAPI RtlSelfRelativeToAbsoluteSD(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,
1822 PDWORD,PACL,PDWORD,PACL,PDWORD,PSID,PDWORD,PSID,PDWORD);
1823 void WINAPI RtlSetAllBits(PRTL_BITMAP);
1824 void WINAPI RtlSetBits(PRTL_BITMAP,ULONG,ULONG);
1825 ULONG WINAPI RtlSetCriticalSectionSpinCount(RTL_CRITICAL_SECTION*,ULONG);
1826 NTSTATUS WINAPI RtlSetCurrentDirectory_U(const UNICODE_STRING*);
1827 void WINAPI RtlSetCurrentEnvironment(PWSTR, PWSTR*);
1828 NTSTATUS WINAPI RtlSetDaclSecurityDescriptor(PSECURITY_DESCRIPTOR,BOOLEAN,PACL,BOOLEAN);
1829 NTSTATUS WINAPI RtlSetEnvironmentVariable(PWSTR*,PUNICODE_STRING,PUNICODE_STRING);
1830 NTSTATUS WINAPI RtlSetOwnerSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID,BOOLEAN);
1831 NTSTATUS WINAPI RtlSetGroupSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID,BOOLEAN);
1832 void WINAPI RtlSetLastWin32Error(DWORD);
1833 void WINAPI RtlSetLastWin32ErrorAndNtStatusFromNtStatus(NTSTATUS);
1834 NTSTATUS WINAPI RtlSetSaclSecurityDescriptor(PSECURITY_DESCRIPTOR,BOOLEAN,PACL,BOOLEAN);
1835 NTSTATUS WINAPI RtlSetTimeZoneInformation(const TIME_ZONE_INFORMATION*);
1836 ULONG WINAPI RtlSizeHeap(HANDLE,ULONG,PVOID);
1837 LPDWORD WINAPI RtlSubAuthoritySid(PSID,DWORD);
1838 LPBYTE WINAPI RtlSubAuthorityCountSid(PSID);
1839 NTSTATUS WINAPI RtlSystemTimeToLocalTime(const LARGE_INTEGER*,PLARGE_INTEGER);
1841 void WINAPI RtlTimeToTimeFields(const LARGE_INTEGER*,PTIME_FIELDS);
1842 BOOLEAN WINAPI RtlTimeFieldsToTime(PTIME_FIELDS,PLARGE_INTEGER);
1843 void WINAPI RtlTimeToElapsedTimeFields(const LARGE_INTEGER *,PTIME_FIELDS);
1844 BOOLEAN WINAPI RtlTimeToSecondsSince1970(const LARGE_INTEGER *,LPDWORD);
1845 BOOLEAN WINAPI RtlTimeToSecondsSince1980(const LARGE_INTEGER *,LPDWORD);
1846 BOOL WINAPI RtlTryEnterCriticalSection(RTL_CRITICAL_SECTION *);
1848 ULONGLONG __cdecl RtlUlonglongByteSwap(ULONGLONG);
1849 DWORD WINAPI RtlUnicodeStringToAnsiSize(const UNICODE_STRING*);
1850 NTSTATUS WINAPI RtlUnicodeStringToAnsiString(PANSI_STRING,PCUNICODE_STRING,BOOLEAN);
1851 NTSTATUS WINAPI RtlUnicodeStringToInteger(const UNICODE_STRING *,ULONG,ULONG *);
1852 DWORD WINAPI RtlUnicodeStringToOemSize(const UNICODE_STRING*);
1853 NTSTATUS WINAPI RtlUnicodeStringToOemString(POEM_STRING,PCUNICODE_STRING,BOOLEAN);
1854 NTSTATUS WINAPI RtlUnicodeToMultiByteN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
1855 NTSTATUS WINAPI RtlUnicodeToMultiByteSize(PULONG,PCWSTR,ULONG);
1856 NTSTATUS WINAPI RtlUnicodeToOemN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
1857 ULONG WINAPI RtlUniform(PULONG);
1858 BOOLEAN WINAPI RtlUnlockHeap(HANDLE);
1859 void WINAPI RtlUnwind(PVOID,PVOID,PEXCEPTION_RECORD,PVOID);
1860 #ifdef __ia64__
1861 void WINAPI RtlUnwind2(FRAME_POINTERS,PVOID,PEXCEPTION_RECORD,PVOID,PCONTEXT);
1862 void WINAPI RtlUnwindEx(FRAME_POINTERS,PVOID,PEXCEPTION_RECORD,PVOID,PCONTEXT,PUNWIND_HISTORY_TABLE);
1863 #endif
1864 WCHAR WINAPI RtlUpcaseUnicodeChar(WCHAR);
1865 NTSTATUS WINAPI RtlUpcaseUnicodeString(UNICODE_STRING*,const UNICODE_STRING *,BOOLEAN);
1866 NTSTATUS WINAPI RtlUpcaseUnicodeStringToAnsiString(STRING*,const UNICODE_STRING*,BOOLEAN);
1867 NTSTATUS WINAPI RtlUpcaseUnicodeStringToCountedOemString(STRING*,const UNICODE_STRING*,BOOLEAN);
1868 NTSTATUS WINAPI RtlUpcaseUnicodeStringToOemString(STRING*,const UNICODE_STRING*,BOOLEAN);
1869 NTSTATUS WINAPI RtlUpcaseUnicodeToMultiByteN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
1870 NTSTATUS WINAPI RtlUpcaseUnicodeToOemN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
1871 CHAR WINAPI RtlUpperChar(CHAR);
1872 void WINAPI RtlUpperString(STRING *,const STRING *);
1874 NTSTATUS WINAPI RtlValidSecurityDescriptor(PSECURITY_DESCRIPTOR);
1875 BOOLEAN WINAPI RtlValidAcl(PACL);
1876 BOOLEAN WINAPI RtlValidSid(PSID);
1877 BOOLEAN WINAPI RtlValidateHeap(HANDLE,ULONG,LPCVOID);
1878 NTSTATUS WINAPI RtlVerifyVersionInfo(const RTL_OSVERSIONINFOEXW*,DWORD,DWORDLONG);
1880 NTSTATUS WINAPI RtlWalkHeap(HANDLE,PVOID);
1882 NTSTATUS WINAPI RtlpWaitForCriticalSection(RTL_CRITICAL_SECTION *);
1883 NTSTATUS WINAPI RtlpUnWaitCriticalSection(RTL_CRITICAL_SECTION *);
1885 /* Wine internal functions */
1887 extern NTSTATUS wine_nt_to_unix_file_name( const UNICODE_STRING *nameW, ANSI_STRING *unix_name_ret,
1888 UINT disposition, BOOLEAN check_case );
1890 /***********************************************************************
1891 * Inline functions
1894 #define InitializeObjectAttributes(p,n,a,r,s) \
1895 do { \
1896 (p)->Length = sizeof(OBJECT_ATTRIBUTES); \
1897 (p)->RootDirectory = r; \
1898 (p)->Attributes = a; \
1899 (p)->ObjectName = n; \
1900 (p)->SecurityDescriptor = s; \
1901 (p)->SecurityQualityOfService = NULL; \
1902 } while (0)
1904 #define NtCurrentProcess() ((HANDLE)-1)
1906 #define RtlFillMemory(Destination,Length,Fill) memset((Destination),(Fill),(Length))
1907 #define RtlMoveMemory(Destination,Source,Length) memmove((Destination),(Source),(Length))
1908 #define RtlStoreUlong(p,v) do { ULONG _v = (v); memcpy((p), &_v, sizeof(_v)); } while (0)
1909 #define RtlStoreUlonglong(p,v) do { ULONGLONG _v = (v); memcpy((p), &_v, sizeof(_v)); } while (0)
1910 #define RtlRetrieveUlong(p,s) memcpy((p), (s), sizeof(ULONG))
1911 #define RtlRetrieveUlonglong(p,s) memcpy((p), (s), sizeof(ULONGLONG))
1912 #define RtlZeroMemory(Destination,Length) memset((Destination),0,(Length))
1914 inline static BOOLEAN RtlCheckBit(PCRTL_BITMAP lpBits, ULONG ulBit)
1916 if (lpBits && ulBit < lpBits->SizeOfBitMap &&
1917 lpBits->Buffer[ulBit >> 5] & (1 << (ulBit & 31)))
1918 return TRUE;
1919 return FALSE;
1922 /* These are implemented as __fastcall, so we can't let Winelib apps link with them */
1923 inline static USHORT RtlUshortByteSwap(USHORT s)
1925 return (s >> 8) | (s << 8);
1927 inline static ULONG RtlUlongByteSwap(ULONG i)
1929 #if defined(__i386__) && defined(__GNUC__)
1930 ULONG ret;
1931 __asm__("bswap %0" : "=r" (ret) : "0" (i) );
1932 return ret;
1933 #else
1934 return ((ULONG)RtlUshortByteSwap((USHORT)i) << 16) | RtlUshortByteSwap((USHORT)(i >> 16));
1935 #endif
1938 /*************************************************************************
1939 * Loader functions and structures.
1941 * Those are not part of standard Winternl.h
1943 typedef struct _LDR_MODULE
1945 LIST_ENTRY InLoadOrderModuleList;
1946 LIST_ENTRY InMemoryOrderModuleList;
1947 LIST_ENTRY InInitializationOrderModuleList;
1948 void* BaseAddress;
1949 void* EntryPoint;
1950 ULONG SizeOfImage;
1951 UNICODE_STRING FullDllName;
1952 UNICODE_STRING BaseDllName;
1953 ULONG Flags;
1954 SHORT LoadCount;
1955 SHORT TlsIndex;
1956 HANDLE SectionHandle;
1957 ULONG CheckSum;
1958 ULONG TimeDateStamp;
1959 } LDR_MODULE, *PLDR_MODULE;
1961 /* those defines are (some of the) regular LDR_MODULE.Flags values */
1962 #define LDR_IMAGE_IS_DLL 0x00000004
1963 #define LDR_LOAD_IN_PROGRESS 0x00001000
1964 #define LDR_UNLOAD_IN_PROGRESS 0x00002000
1965 #define LDR_NO_DLL_CALLS 0x00040000
1966 #define LDR_PROCESS_ATTACHED 0x00080000
1967 #define LDR_MODULE_REBASED 0x00200000
1969 /* these ones is Wine specific */
1970 #define LDR_DONT_RESOLVE_REFS 0x40000000
1971 #define LDR_WINE_INTERNAL 0x80000000
1973 /* FIXME: to be checked */
1974 #define MAXIMUM_FILENAME_LENGTH 256
1976 typedef struct _SYSTEM_MODULE
1978 ULONG Reserved1;
1979 ULONG Reserved2;
1980 PVOID ImageBaseAddress;
1981 ULONG ImageSize;
1982 ULONG Flags;
1983 WORD Id;
1984 WORD Rank;
1985 WORD Unknown;
1986 WORD NameOffset;
1987 BYTE Name[MAXIMUM_FILENAME_LENGTH];
1988 } SYSTEM_MODULE, *PSYSTEM_MODULE;
1990 typedef struct _SYSTEM_MODULE_INFORMATION
1992 ULONG ModulesCount;
1993 SYSTEM_MODULE Modules[1]; /* FIXME: should be Modules[0] */
1994 } SYSTEM_MODULE_INFORMATION, *PSYSTEM_MODULE_INFORMATION;
1996 NTSTATUS WINAPI LdrDisableThreadCalloutsForDll(HMODULE);
1997 NTSTATUS WINAPI LdrFindEntryForAddress(const void*, PLDR_MODULE*);
1998 NTSTATUS WINAPI LdrLockLoaderLock(ULONG,ULONG*,ULONG*);
1999 NTSTATUS WINAPI LdrQueryProcessModuleInformation(SYSTEM_MODULE_INFORMATION*, ULONG, ULONG*);
2000 NTSTATUS WINAPI LdrUnloadDll(HMODULE);
2001 NTSTATUS WINAPI LdrUnlockLoaderLock(ULONG,ULONG);
2003 /* list manipulation macros */
2004 #define InitializeListHead(le) (void)((le)->Flink = (le)->Blink = (le))
2005 #define InsertHeadList(le,e) do { PLIST_ENTRY f = (le)->Flink; (e)->Flink = f; (e)->Blink = (le); f->Blink = (e); (le)->Flink = (e); } while (0)
2006 #define InsertTailList(le,e) do { PLIST_ENTRY b = (le)->Blink; (e)->Flink = (le); (e)->Blink = b; b->Flink = (e); (le)->Blink = (e); } while (0)
2007 #define IsListEmpty(le) ((le)->Flink == (le))
2008 #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)
2009 static inline PLIST_ENTRY RemoveHeadList(PLIST_ENTRY le)
2011 PLIST_ENTRY f, b, e;
2013 e = le->Flink;
2014 f = le->Flink->Flink;
2015 b = le->Flink->Blink;
2016 f->Blink = b;
2017 b->Flink = f;
2019 if (e != le) e->Flink = e->Blink = NULL;
2020 return e;
2022 static inline PLIST_ENTRY RemoveTailList(PLIST_ENTRY le)
2024 PLIST_ENTRY f, b, e;
2026 e = le->Blink;
2027 f = le->Blink->Flink;
2028 b = le->Blink->Blink;
2029 f->Blink = b;
2030 b->Flink = f;
2032 if (e != le) e->Flink = e->Blink = NULL;
2033 return e;
2036 #ifdef __cplusplus
2037 } /* extern "C" */
2038 #endif /* defined(__cplusplus) */
2040 #endif /* __WINE_WINTERNL_H */