- improve WsControl error checking
[wine.git] / include / winternl.h
blob74551ceca0852f11cd496f78327c00a54b8f3c83
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_WINTERNAL_H
22 #define __WINE_WINTERNAL_H
24 #include <windef.h>
25 #include <winnt.h>
26 #include <winreg.h>
28 #ifdef __cplusplus
29 extern "C" {
30 #endif /* defined(__cplusplus) */
33 /**********************************************************************
34 * Fundamental types and data structures
37 typedef LONG NTSTATUS;
39 typedef CONST char *PCSZ;
41 typedef short CSHORT;
42 typedef CSHORT *PCSHORT;
44 typedef struct _STRING {
45 USHORT Length;
46 USHORT MaximumLength;
47 PCHAR Buffer;
48 } STRING, *PSTRING;
50 typedef STRING ANSI_STRING;
51 typedef PSTRING PANSI_STRING;
52 typedef const STRING *PCANSI_STRING;
54 typedef STRING OEM_STRING;
55 typedef PSTRING POEM_STRING;
56 typedef const STRING *PCOEM_STRING;
58 typedef struct _UNICODE_STRING {
59 USHORT Length; /* bytes */
60 USHORT MaximumLength; /* bytes */
61 PWSTR Buffer;
62 } UNICODE_STRING, *PUNICODE_STRING;
64 typedef const UNICODE_STRING *PCUNICODE_STRING;
66 typedef struct _CLIENT_ID
68 HANDLE UniqueProcess;
69 HANDLE UniqueThread;
70 } CLIENT_ID, *PCLIENT_ID;
72 typedef struct _CURDIR
74 UNICODE_STRING DosPath;
75 PVOID Handle;
76 } CURDIR, *PCURDIR;
78 typedef struct RTL_DRIVE_LETTER_CURDIR
80 USHORT Flags;
81 USHORT Length;
82 ULONG TimeStamp;
83 UNICODE_STRING DosPath;
84 } RTL_DRIVE_LETTER_CURDIR, *PRTL_DRIVE_LETTER_CURDIR;
86 typedef struct _RTL_USER_PROCESS_PARAMETERS
88 ULONG AllocationSize;
89 ULONG Size;
90 ULONG Flags;
91 ULONG DebugFlags;
92 HANDLE hConsole;
93 ULONG ProcessGroup;
94 HANDLE hStdInput;
95 HANDLE hStdOutput;
96 HANDLE hStdError;
97 UNICODE_STRING CurrentDirectoryName;
98 HANDLE CurrentDirectoryHandle;
99 UNICODE_STRING DllPath;
100 UNICODE_STRING ImagePathName;
101 UNICODE_STRING CommandLine;
102 PWSTR Environment;
103 ULONG dwX;
104 ULONG dwY;
105 ULONG dwXSize;
106 ULONG dwYSize;
107 ULONG dwXCountChars;
108 ULONG dwYCountChars;
109 ULONG dwFillAttribute;
110 ULONG dwFlags;
111 ULONG wShowWindow;
112 UNICODE_STRING WindowTitle;
113 UNICODE_STRING Desktop;
114 UNICODE_STRING ShellInfo;
115 UNICODE_STRING RuntimeInfo;
116 RTL_DRIVE_LETTER_CURDIR DLCurrentDirectory[0x20];
117 } RTL_USER_PROCESS_PARAMETERS, *PRTL_USER_PROCESS_PARAMETERS;
120 typedef struct _PEB_LDR_DATA
122 ULONG Length;
123 BOOLEAN Initialized;
124 PVOID SsHandle;
125 LIST_ENTRY InLoadOrderModuleList;
126 LIST_ENTRY InMemoryOrderModuleList;
127 LIST_ENTRY InInitializationOrderModuleList;
128 } PEB_LDR_DATA, *PPEB_LDR_DATA;
130 /***********************************************************************
131 * PEB data structure
133 typedef struct _PEB
135 BYTE Reserved1[2]; /* 00 */
136 BYTE BeingDebugged; /* 02 */
137 BYTE Reserved2[5]; /* 03 */
138 HMODULE ImageBaseAddress; /* 08 */
139 PPEB_LDR_DATA LdrData; /* 0c */
140 RTL_USER_PROCESS_PARAMETERS *ProcessParameters; /* 10 */
141 PVOID __pad_14; /* 14 */
142 HANDLE ProcessHeap; /* 18 */
143 BYTE __pad_1c[204]; /* 1c */
144 PVOID Reserved3[59]; /* e8 */
145 ULONG SessionId; /* 1d4 */
146 } PEB, *PPEB;
149 /***********************************************************************
150 * TEB data structure
152 #if defined(_NTSYSTEM_) || defined(_KERNEL32_) /* hack, should go away */
153 # define WINE_NO_TEB
154 #endif
156 #ifndef WINE_NO_TEB /* don't define TEB if included from thread.h */
157 # ifndef WINE_TEB_DEFINED
158 # define WINE_TEB_DEFINED
159 typedef struct _TEB
161 NT_TIB Tib; /* 000 */
162 PVOID EnvironmentPointer; /* 01c */
163 CLIENT_ID ClientId; /* 020 */
164 PVOID ActiveRpcHandle; /* 028 */
165 PVOID ThreadLocalStoragePointer; /* 02c */
166 PPEB Peb; /* 030 */
167 ULONG LastErrorValue; /* 034 */
168 BYTE __pad038[140]; /* 038 */
169 ULONG CurrentLocale; /* 0c4 */
170 BYTE __pad0c8[1752]; /* 0c8 */
171 PVOID Reserved2[278]; /* 7a0 */
172 UNICODE_STRING StaticUnicodeString; /* bf8 used by advapi32 */
173 WCHAR StaticUnicodeBuffer[261]; /* c00 used by advapi32 */
174 PVOID DeallocationStack; /* e0c */
175 PVOID TlsSlots[64]; /* e10 */
176 BYTE Reserved3[8]; /* f10 */
177 PVOID Reserved4[26]; /* f18 */
178 PVOID ReservedForOle; /* f80 Windows 2000 only */
179 PVOID Reserved5[4]; /* f84 */
180 PVOID TlsExpansionSlots; /* f94 */
181 } TEB, *PTEB;
182 # endif /* WINE_TEB_DEFINED */
183 #endif /* WINE_NO_TEB */
185 /***********************************************************************
186 * Enums
189 typedef enum _FILE_INFORMATION_CLASS {
190 FileDirectoryInformation = 1,
191 FileFullDirectoryInformation,
192 FileBothDirectoryInformation,
193 FileBasicInformation,
194 FileStandardInformation,
195 FileInternalInformation,
196 FileEaInformation,
197 FileAccessInformation,
198 FileNameInformation,
199 FileRenameInformation,
200 FileLinkInformation,
201 FileNamesInformation,
202 FileDispositionInformation,
203 FilePositionInformation,
204 FileFullEaInformation,
205 FileModeInformation,
206 FileAlignmentInformation,
207 FileAllInformation,
208 FileAllocationInformation,
209 FileEndOfFileInformation,
210 FileAlternateNameInformation,
211 FileStreamInformation,
212 FilePipeInformation,
213 FilePipeLocalInformation,
214 FilePipeRemoteInformation,
215 FileMailslotQueryInformation,
216 FileMailslotSetInformation,
217 FileCompressionInformation,
218 FileObjectIdInformation,
219 FileCompletionInformation,
220 FileMoveClusterInformation,
221 FileQuotaInformation,
222 FileReparsePointInformation,
223 FileNetworkOpenInformation,
224 FileAttributeTagInformation,
225 FileTrackingInformation,
226 FileMaximumInformation
227 } FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;
229 typedef struct _FILE_BASIC_INFORMATION {
230 LARGE_INTEGER CreationTime;
231 LARGE_INTEGER LastAccessTime;
232 LARGE_INTEGER LastWriteTime;
233 LARGE_INTEGER ChangeTime;
234 ULONG FileAttributes;
235 } FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION;
237 typedef struct _FILE_STANDARD_INFORMATION {
238 LARGE_INTEGER AllocationSize;
239 LARGE_INTEGER EndOfFile;
240 ULONG NumberOfLinks;
241 BOOLEAN DeletePending;
242 BOOLEAN Directory;
243 } FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION;
245 typedef struct _FILE_POSITION_INFORMATION {
246 LARGE_INTEGER CurrentByteOffset;
247 } FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION;
249 typedef struct _FILE_ALIGNMENT_INFORMATION {
250 ULONG AlignmentRequirement;
251 } FILE_ALIGNMENT_INFORMATION, *PFILE_ALIGNMENT_INFORMATION;
253 typedef struct _FILE_NETWORK_OPEN_INFORMATION {
254 LARGE_INTEGER CreationTime;
255 LARGE_INTEGER LastAccessTime;
256 LARGE_INTEGER LastWriteTime;
257 LARGE_INTEGER ChangeTime;
258 LARGE_INTEGER AllocationSize;
259 LARGE_INTEGER EndOfFile;
260 ULONG FileAttributes;
261 } FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION;
263 typedef struct _FILE_FULL_EA_INFORMATION {
264 ULONG NextEntryOffset;
265 UCHAR Flags;
266 UCHAR EaNameLength;
267 USHORT EaValueLength;
268 CHAR EaName[1];
269 } FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION;
271 typedef struct _FILE_STREAM_INFORMATION
273 ULONG NextEntryOffset;
274 ULONG StreamNameLength;
275 LARGE_INTEGER StreamSize;
276 LARGE_INTEGER StreamAllocationSize;
277 WCHAR StreamName[1];
278 } FILE_STREAM_INFORMATION, *PFILE_STREAM_INFORMATION;
280 struct _FILE_ATTRIBUTE_TAG_INFORMATION
282 ULONG FileAttributes;
283 ULONG ReparseTag;
284 } FILE_ATTRIBUTE_TAG_INFORMATION, *PFILE_ATTRIBUTE_TAG_INFORMATION;
286 typedef enum _FSINFOCLASS {
287 FileFsVolumeInformation = 1,
288 FileFsLabelInformation,
289 FileFsSizeInformation,
290 FileFsDeviceInformation,
291 FileFsAttributeInformation,
292 FileFsControlInformation,
293 FileFsFullSizeInformation,
294 FileFsObjectIdInformation,
295 FileFsMaximumInformation
296 } FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS;
298 typedef enum _KEY_INFORMATION_CLASS {
299 KeyBasicInformation,
300 KeyNodeInformation,
301 KeyFullInformation
302 } KEY_INFORMATION_CLASS;
304 typedef enum _KEY_VALUE_INFORMATION_CLASS {
305 KeyValueBasicInformation,
306 KeyValueFullInformation,
307 KeyValuePartialInformation,
308 KeyValueFullInformationAlign64,
309 KeyValuePartialInformationAlign64
310 } KEY_VALUE_INFORMATION_CLASS;
312 typedef enum _OBJECT_INFORMATION_CLASS {
313 ObjectBasicInformation,
314 ObjectNameInformation,
315 ObjectTypeInformation,
316 ObjectAllInformation,
317 ObjectDataInformation
318 } OBJECT_INFORMATION_CLASS, *POBJECT_INFORMATION_CLASS;
320 typedef enum _PROCESSINFOCLASS {
321 ProcessBasicInformation = 0,
322 ProcessQuotaLimits = 1,
323 ProcessIoCounters = 2,
324 ProcessVmCounters = 3,
325 ProcessTimes = 4,
326 ProcessBasePriority = 5,
327 ProcessRaisePriority = 6,
328 ProcessDebugPort = 7,
329 ProcessExceptionPort = 8,
330 ProcessAccessToken = 9,
331 ProcessLdtInformation = 10,
332 ProcessLdtSize = 11,
333 ProcessDefaultHardErrorMode = 12,
334 ProcessIoPortHandlers = 13,
335 ProcessPooledUsageAndLimits = 14,
336 ProcessWorkingSetWatch = 15,
337 ProcessUserModeIOPL = 16,
338 ProcessEnableAlignmentFaultFixup = 17,
339 ProcessPriorityClass = 18,
340 ProcessWx86Information = 19,
341 ProcessHandleCount = 20,
342 ProcessAffinityMask = 21,
343 ProcessPriorityBoost = 22,
344 ProcessDeviceMap = 23,
345 ProcessSessionInformation = 24,
346 ProcessForegroundInformation = 25,
347 ProcessWow64Information = 26,
348 MaxProcessInfoClass
349 } PROCESSINFOCLASS;
351 typedef enum _SECTION_INHERIT {
352 ViewShare = 1,
353 ViewUnmap = 2
354 } SECTION_INHERIT;
356 typedef enum SYSTEM_INFORMATION_CLASS {
357 SystemBasicInformation = 0,
358 Unknown1,
359 SystemPerformanceInformation = 2,
360 SystemTimeOfDayInformation = 3, /* was SystemTimeInformation */
361 Unknown4,
362 SystemProcessInformation = 5,
363 Unknown6,
364 Unknown7,
365 SystemProcessorPerformanceInformation = 8,
366 Unknown9,
367 Unknown10,
368 SystemDriverInformation,
369 Unknown12,
370 Unknown13,
371 Unknown14,
372 Unknown15,
373 SystemHandleList,
374 Unknown17,
375 Unknown18,
376 Unknown19,
377 Unknown20,
378 SystemCacheInformation,
379 Unknown22,
380 SystemInterruptInformation = 23,
381 SystemExceptionInformation = 33,
382 SystemRegistryQuotaInformation = 37,
383 SystemLookasideInformation = 45
384 } SYSTEM_INFORMATION_CLASS, *PSYSTEM_INFORMATION_CLASS;
386 typedef enum _TIMER_TYPE {
387 NotificationTimer,
388 SynchronizationTimer
389 } TIMER_TYPE;
391 typedef enum _THREADINFOCLASS {
392 ThreadBasicInformation,
393 ThreadTimes,
394 ThreadPriority,
395 ThreadBasePriority,
396 ThreadAffinityMask,
397 ThreadImpersonationToken,
398 ThreadDescriptorTableEntry,
399 ThreadEnableAlignmentFaultFixup,
400 ThreadEventPair_Reusable,
401 ThreadQuerySetWin32StartAddress,
402 ThreadZeroTlsCell,
403 ThreadPerformanceCount,
404 ThreadAmILastThread,
405 ThreadIdealProcessor,
406 ThreadPriorityBoost,
407 ThreadSetTlsArrayAddress,
408 ThreadIsIoPending,
409 MaxThreadInfoClass
410 } THREADINFOCLASS;
412 typedef struct _THREAD_BASIC_INFORMATION
414 NTSTATUS ExitStatus;
415 PVOID TebBaseAddress;
416 CLIENT_ID ClientId;
417 ULONG AffinityMask;
418 LONG Priority;
419 LONG BasePriority;
420 } THREAD_BASIC_INFORMATION, *PTHREAD_BASIC_INFORMATION;
423 typedef enum _WINSTATIONINFOCLASS {
424 WinStationInformation = 8
425 } WINSTATIONINFOCLASS;
427 typedef enum
429 MemoryBasicInformation = 0
430 } MEMORY_INFORMATION_CLASS;
432 /* return type of RtlDetermineDosPathNameType_U (FIXME: not the correct names) */
433 typedef enum
435 INVALID_PATH = 0,
436 UNC_PATH, /* "//foo" */
437 ABSOLUTE_DRIVE_PATH, /* "c:/foo" */
438 RELATIVE_DRIVE_PATH, /* "c:foo" */
439 ABSOLUTE_PATH, /* "/foo" */
440 RELATIVE_PATH, /* "foo" */
441 DEVICE_PATH, /* "//./foo" */
442 UNC_DOT_PATH /* "//." */
443 } DOS_PATHNAME_TYPE;
445 /***********************************************************************
446 * IA64 specific types and data structures
449 #ifdef __ia64__
451 typedef struct _FRAME_POINTERS {
452 ULONGLONG MemoryStackFp;
453 ULONGLONG BackingStoreFp;
454 } FRAME_POINTERS, *PFRAME_POINTERS;
456 #define UNWIND_HISTORY_TABLE_SIZE 12
458 typedef struct _RUNTIME_FUNCTION {
459 ULONG BeginAddress;
460 ULONG EndAddress;
461 ULONG UnwindInfoAddress;
462 } RUNTIME_FUNCTION, *PRUNTIME_FUNCTION;
464 typedef struct _UNWIND_HISTORY_TABLE_ENTRY {
465 ULONG64 ImageBase;
466 ULONG64 Gp;
467 PRUNTIME_FUNCTION FunctionEntry;
468 } UNWIND_HISTORY_TABLE_ENTRY, *PUNWIND_HISTORY_TABLE_ENTRY;
470 typedef struct _UNWIND_HISTORY_TABLE {
471 ULONG Count;
472 UCHAR Search;
473 ULONG64 LowAddress;
474 ULONG64 HighAddress;
475 UNWIND_HISTORY_TABLE_ENTRY Entry[UNWIND_HISTORY_TABLE_SIZE];
476 } UNWIND_HISTORY_TABLE, *PUNWIND_HISTORY_TABLE;
478 #endif /* defined(__ia64__) */
480 /***********************************************************************
481 * Types and data structures
484 /* This is used by NtQuerySystemInformation */
485 /* FIXME: Isn't THREAD_INFO and THREADINFO the same structure? */
486 typedef struct {
487 FILETIME ftCreationTime;
488 DWORD dwUnknown1;
489 DWORD dwStartAddress;
490 DWORD dwOwningPID;
491 DWORD dwThreadID;
492 DWORD dwCurrentPriority;
493 DWORD dwBasePriority;
494 DWORD dwContextSwitches;
495 DWORD dwThreadState;
496 DWORD dwWaitReason;
497 DWORD dwUnknown2[5];
498 } THREADINFO, *PTHREADINFO;
500 /* FIXME: Isn't THREAD_INFO and THREADINFO the same structure? */
501 typedef struct _THREAD_INFO{
502 DWORD Unknown1[6];
503 DWORD ThreadID;
504 DWORD Unknown2[3];
505 DWORD Status;
506 DWORD WaitReason;
507 DWORD Unknown3[4];
508 } THREAD_INFO, PTHREAD_INFO;
510 /***********************************************************************
511 * Types and data structures
514 typedef struct _IO_STATUS_BLOCK {
515 union {
516 NTSTATUS Status;
517 PVOID Pointer;
518 } DUMMYUNIONNAME;
520 ULONG_PTR Information;
521 } IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
523 typedef void (WINAPI * PIO_APC_ROUTINE)(PVOID,PIO_STATUS_BLOCK,ULONG);
525 typedef struct _KEY_BASIC_INFORMATION {
526 LARGE_INTEGER LastWriteTime;
527 ULONG TitleIndex;
528 ULONG NameLength;
529 WCHAR Name[1];
530 } KEY_BASIC_INFORMATION, *PKEY_BASIC_INFORMATION;
532 typedef struct _KEY_NODE_INFORMATION
534 LARGE_INTEGER LastWriteTime;
535 ULONG TitleIndex;
536 ULONG ClassOffset;
537 ULONG ClassLength;
538 ULONG NameLength;
539 WCHAR Name[1];
540 /* Class[1]; */
541 } KEY_NODE_INFORMATION, *PKEY_NODE_INFORMATION;
543 typedef struct _KEY_FULL_INFORMATION
545 LARGE_INTEGER LastWriteTime;
546 ULONG TitleIndex;
547 ULONG ClassOffset;
548 ULONG ClassLength;
549 ULONG SubKeys;
550 ULONG MaxNameLen;
551 ULONG MaxClassLen;
552 ULONG Values;
553 ULONG MaxValueNameLen;
554 ULONG MaxValueDataLen;
555 WCHAR Class[1];
556 } KEY_FULL_INFORMATION, *PKEY_FULL_INFORMATION;
558 typedef struct _KEY_VALUE_ENTRY
560 PUNICODE_STRING ValueName;
561 ULONG DataLength;
562 ULONG DataOffset;
563 ULONG Type;
564 } KEY_VALUE_ENTRY, *PKEY_VALUE_ENTRY;
566 typedef struct _KEY_VALUE_BASIC_INFORMATION {
567 ULONG TitleIndex;
568 ULONG Type;
569 ULONG NameLength;
570 WCHAR Name[1];
571 } KEY_VALUE_BASIC_INFORMATION, *PKEY_VALUE_BASIC_INFORMATION;
573 typedef struct _KEY_VALUE_FULL_INFORMATION {
574 ULONG TitleIndex;
575 ULONG Type;
576 ULONG DataOffset;
577 ULONG DataLength;
578 ULONG NameLength;
579 WCHAR Name[1];
580 } KEY_VALUE_FULL_INFORMATION, *PKEY_VALUE_FULL_INFORMATION;
582 typedef struct _KEY_VALUE_PARTIAL_INFORMATION {
583 ULONG TitleIndex;
584 ULONG Type;
585 ULONG DataLength;
586 UCHAR Data[1];
587 } KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION;
589 typedef struct _OBJECT_ATTRIBUTES {
590 ULONG Length;
591 HANDLE RootDirectory;
592 PUNICODE_STRING ObjectName;
593 ULONG Attributes;
594 PVOID SecurityDescriptor; /* type SECURITY_DESCRIPTOR */
595 PVOID SecurityQualityOfService; /* type SECURITY_QUALITY_OF_SERVICE */
596 } OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;
598 typedef struct _OBJECT_DATA_INFORMATION {
599 BOOLEAN InheritHandle;
600 BOOLEAN ProtectFromClose;
601 } OBJECT_DATA_INFORMATION, *POBJECT_DATA_INFORMATION;
603 typedef struct _PROCESS_BASIC_INFORMATION {
604 #ifdef __WINESRC__
605 DWORD ExitStatus;
606 DWORD PebBaseAddress;
607 DWORD AffinityMask;
608 DWORD BasePriority;
609 ULONG UniqueProcessId;
610 ULONG InheritedFromUniqueProcessId;
611 #else
612 PVOID Reserved1;
613 PPEB PebBaseAddress;
614 PVOID Reserved2[2];
615 ULONG_PTR UniqueProcessId;
616 PVOID Reserved3;
617 #endif
618 } PROCESS_BASIC_INFORMATION, *PPROCESS_BASIC_INFORMATION;
620 typedef struct _PROCESS_INFO {
621 DWORD Offset; /* 00 offset to next PROCESS_INFO ok*/
622 DWORD ThreadCount; /* 04 number of ThreadInfo member ok */
623 DWORD Unknown1[6];
624 FILETIME CreationTime; /* 20 */
625 DWORD Unknown2[5];
626 PWCHAR ProcessName; /* 3c ok */
627 DWORD BasePriority;
628 DWORD ProcessID; /* 44 ok*/
629 DWORD ParentProcessID;
630 DWORD HandleCount;
631 DWORD Unknown3[2]; /* 50 */
632 ULONG PeakVirtualSize;
633 ULONG VirtualSize;
634 ULONG PageFaultCount;
635 ULONG PeakWorkingSetSize;
636 ULONG WorkingSetSize;
637 ULONG QuotaPeakPagedPoolUsage;
638 ULONG QuotaPagedPoolUsage;
639 ULONG QuotaPeakNonPagedPoolUsage;
640 ULONG QuotaNonPagedPoolUsage;
641 ULONG PagefileUsage;
642 ULONG PeakPagefileUsage;
643 DWORD PrivateBytes;
644 DWORD Unknown6[4];
645 THREAD_INFO ati[ANYSIZE_ARRAY]; /* 94 size=0x40*/
646 } PROCESS_INFO, PPROCESS_INFO;
648 typedef struct _RTL_HEAP_DEFINITION {
649 ULONG Length; /* = sizeof(RTL_HEAP_DEFINITION) */
651 ULONG Unknown[11];
652 } RTL_HEAP_DEFINITION, *PRTL_HEAP_DEFINITION;
654 typedef struct tagRTL_BITMAP {
655 ULONG SizeOfBitMap; /* Number of bits in the bitmap */
656 LPBYTE BitMapBuffer; /* Bitmap data, assumed sized to a DWORD boundary */
657 } RTL_BITMAP, *PRTL_BITMAP;
659 typedef const RTL_BITMAP *PCRTL_BITMAP;
661 typedef struct tagRTL_BITMAP_RUN {
662 ULONG StartOfRun; /* Bit position at which run starts - FIXME: Name? */
663 ULONG SizeOfRun; /* Size of the run in bits - FIXME: Name? */
664 } RTL_BITMAP_RUN, *PRTL_BITMAP_RUN;
666 typedef const RTL_BITMAP_RUN *PCRTL_BITMAP_RUN;
668 typedef struct _RTL_RWLOCK {
669 RTL_CRITICAL_SECTION rtlCS;
671 HANDLE hSharedReleaseSemaphore;
672 UINT uSharedWaiters;
674 HANDLE hExclusiveReleaseSemaphore;
675 UINT uExclusiveWaiters;
677 INT iNumberActive;
678 HANDLE hOwningThreadId;
679 DWORD dwTimeoutBoost;
680 PVOID pDebugInfo;
681 } RTL_RWLOCK, *LPRTL_RWLOCK;
683 /* System Information Class 0x00 */
684 typedef struct _SYSTEM_BASIC_INFORMATION {
685 #ifdef __WINESRC__
686 DWORD dwUnknown1;
687 ULONG uKeMaximumIncrement;
688 ULONG uPageSize;
689 ULONG uMmNumberOfPhysicalPages;
690 ULONG uMmLowestPhysicalPage;
691 ULONG uMmHighestPhysicalPage;
692 ULONG uAllocationGranularity;
693 PVOID pLowestUserAddress;
694 PVOID pMmHighestUserAddress;
695 ULONG uKeActiveProcessors;
696 BYTE bKeNumberProcessors;
697 BYTE bUnknown2;
698 WORD wUnknown3;
699 #else
700 BYTE Reserved1[24];
701 PVOID Reserved2[4];
702 CCHAR NumberOfProcessors;
703 #endif
704 } SYSTEM_BASIC_INFORMATION, *PSYSTEM_BASIC_INFORMATION;
706 /* System Information Class 0x15 */
707 typedef struct {
708 ULONG CurrentSize;
709 ULONG PeakSize;
710 ULONG PageFaultCount;
711 ULONG MinimumWorkingSet;
712 ULONG MaximumWorkingSet;
713 ULONG unused[4];
714 } SYSTEM_CACHE_INFORMATION;
716 typedef struct _SYSTEM_CONFIGURATION_INFO {
717 union {
718 ULONG OemId;
719 struct {
720 WORD ProcessorArchitecture;
721 WORD Reserved;
722 } tag1;
723 } tag2;
724 ULONG PageSize;
725 PVOID MinimumApplicationAddress;
726 PVOID MaximumApplicationAddress;
727 ULONG ActiveProcessorMask;
728 ULONG NumberOfProcessors;
729 ULONG ProcessorType;
730 ULONG AllocationGranularity;
731 WORD ProcessorLevel;
732 WORD ProcessorRevision;
733 } SYSTEM_CONFIGURATION_INFO, *PSYSTEM_CONFIGURATION_INFO;
735 /* System Information Class 0x0b */
736 typedef struct {
737 PVOID pvAddress;
738 DWORD dwUnknown1;
739 DWORD dwUnknown2;
740 DWORD dwEntryIndex;
741 DWORD dwUnknown3;
742 char szName[MAX_PATH + 1];
743 } SYSTEM_DRIVER_INFORMATION;
745 typedef struct _SYSTEM_EXCEPTION_INFORMATION {
746 BYTE Reserved1[16];
747 } SYSTEM_EXCEPTION_INFORMATION, *PSYSTEM_EXCEPTION_INFORMATION;
749 typedef struct _SYSTEM_LOOKASIDE_INFORMATION {
750 BYTE Reserved1[32];
751 } SYSTEM_LOOKASIDE_INFORMATION, *PSYSTEM_LOOKASIDE_INFORMATION;
753 typedef struct _SYSTEM_INTERRUPT_INFORMATION {
754 BYTE Reserved1[24];
755 } SYSTEM_INTERRUPT_INFORMATION, *PSYSTEM_INTERRUPT_INFORMATION;
757 /* System Information Class 0x10 */
758 typedef struct {
759 USHORT dwPID;
760 USHORT dwCreatorBackTraceIndex;
761 BYTE bObjectType;
762 BYTE bHandleAttributes;
763 USHORT usHandleOffset;
764 DWORD dwKeObject;
765 ULONG ulGrantedAccess;
766 } HANDLEINFO, *PHANDLEINFO; /* FIXME: SYSTEM_HANDLE_INFORMATION? */
768 typedef struct _SYSTEM_PERFORMANCE_INFORMATION {
769 BYTE Reserved1[312];
770 } SYSTEM_PERFORMANCE_INFORMATION, *PSYSTEM_PERFORMANCE_INFORMATION;
772 /* System Information Class 0x02 */
773 typedef struct _SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION {
774 #ifdef __WINESRC__
775 LARGE_INTEGER liIdleTime;
776 DWORD dwSpare[76];
777 #else
778 LARGE_INTEGER IdleTime;
779 LARGE_INTEGER KernelTime;
780 LARGE_INTEGER UserTime;
781 LARGE_INTEGER Reserved1[2];
782 ULONG Reserved2;
783 #endif
784 } SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION, *PSYSTEM_PROCESSOR_PERFORMANCE_INFORMATION;
786 /* System Information Class 0x05 */
787 typedef struct _SYSTEM_PROCESS_INFORMATION {
788 #ifdef __WINESRC__
789 DWORD dwOffset;
790 DWORD dwThreadCount;
791 DWORD dwUnknown1[6];
792 FILETIME ftCreationTime;
793 DWORD dwUnknown2[5];
794 WCHAR *pszProcessName;
795 DWORD dwBasePriority;
796 DWORD dwProcessID;
797 DWORD dwParentProcessID;
798 DWORD dwHandleCount;
799 DWORD dwUnknown3;
800 DWORD dwUnknown4;
801 DWORD dwVirtualBytesPeak;
802 DWORD dwVirtualBytes;
803 DWORD dwPageFaults;
804 DWORD dwWorkingSetPeak;
805 DWORD dwWorkingSet;
806 DWORD dwUnknown5;
807 DWORD dwPagedPool;
808 DWORD dwUnknown6;
809 DWORD dwNonPagedPool;
810 DWORD dwPageFileBytesPeak;
811 DWORD dwPrivateBytes;
812 DWORD dwPageFileBytes;
813 DWORD dwUnknown7[4];
814 THREADINFO ti[1];
815 #else
816 ULONG NextEntryOffset;
817 BYTE Reserved1[52];
818 PVOID Reserved2[3];
819 HANDLE UniqueProcessId;
820 PVOID Reserved3;
821 ULONG HandleCount;
822 BYTE Reserved4[4];
823 PVOID Reserved5[11];
824 SIZE_T PeakPagefileUsage;
825 SIZE_T PrivatePageCount;
826 LARGE_INTEGER Reserved6[6];
827 #endif
828 } SYSTEM_PROCESS_INFORMATION, *PSYSTEM_PROCESS_INFORMATION;
830 typedef struct _SYSTEM_REGISTRY_QUOTA_INFORMATION {
831 ULONG RegistryQuotaAllowed;
832 ULONG RegistryQuotaUsed;
833 PVOID Reserved1;
834 } SYSTEM_REGISTRY_QUOTA_INFORMATION, *PSYSTEM_REGISTRY_QUOTA_INFORMATION;
836 typedef struct _SYSTEM_TIME_ADJUSTMENT {
837 ULONG TimeAdjustment;
838 BOOLEAN TimeAdjustmentDisabled;
839 } SYSTEM_TIME_ADJUSTMENT, *PSYSTEM_TIME_ADJUSTMENT;
841 /* System Information Class 0x03 */
842 typedef struct _SYSTEM_TIMEOFDAY_INFORMATION {
843 #ifdef __WINESRC__
844 LARGE_INTEGER liKeBootTime;
845 LARGE_INTEGER liKeSystemTime;
846 LARGE_INTEGER liExpTimeZoneBias;
847 ULONG uCurrentTimeZoneId;
848 DWORD dwReserved;
849 #else
850 BYTE Reserved1[48];
851 #endif
852 } SYSTEM_TIMEOFDAY_INFORMATION, *PSYSTEM_TIMEOFDAY_INFORMATION; /* was SYSTEM_TIME_INFORMATION */
854 typedef struct _TIME_FIELDS
855 { CSHORT Year;
856 CSHORT Month;
857 CSHORT Day;
858 CSHORT Hour;
859 CSHORT Minute;
860 CSHORT Second;
861 CSHORT Milliseconds;
862 CSHORT Weekday;
863 } TIME_FIELDS, *PTIME_FIELDS;
865 typedef struct _WINSTATIONINFORMATIONW {
866 BYTE Reserved2[70];
867 ULONG LogonId;
868 BYTE Reserved3[1140];
869 } WINSTATIONINFORMATIONW, *PWINSTATIONINFORMATIONW;
871 typedef struct _VM_COUNTERS_ {
872 ULONG PeakVirtualSize;
873 ULONG VirtualSize;
874 ULONG PageFaultCount;
875 ULONG PeakWorkingSetSize;
876 ULONG WorkingSetSize;
877 ULONG QuotaPeakPagedPoolUsage;
878 ULONG QuotaPagedPoolUsage;
879 ULONG QuotaPeakNonPagedPoolUsage;
880 ULONG QuotaNonPagedPoolUsage;
881 ULONG PagefileUsage;
882 ULONG PeakPagefileUsage;
883 } VM_COUNTERS, *PVM_COUNTERS;
885 typedef BOOLEAN (WINAPI * PWINSTATIONQUERYINFORMATIONW)(HANDLE,ULONG,WINSTATIONINFOCLASS,PVOID,ULONG,PULONG);
887 typedef struct _LDR_RESOURCE_INFO
889 ULONG Type;
890 ULONG Name;
891 ULONG Language;
892 } LDR_RESOURCE_INFO, *PLDR_RESOURCE_INFO;
894 /***********************************************************************
895 * Defines
898 /* flags for NtCreateFile and NtOpenFile */
899 #define FILE_DIRECTORY_FLAG 0x00000001
900 #define FILE_WRITE_THROUGH 0x00000002
901 #define FILE_SEQUENTIAL_ONLY 0x00000004
902 #define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008
903 #define FILE_SYNCHRONOUS_IO_ALERT 0x00000010
904 #define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020
905 #define FILE_NON_DIRECTORY_FILE 0x00000040
906 #define FILE_CREATE_TREE_CONNECTION 0x00000080
908 /* status for NtCreateFile or NtOpenFile */
909 #define FILE_SUPERSEDED 0x00000000
910 #define FILE_OPENED 0x00000001
911 #define FILE_CREATED 0x00000002
912 #define FILE_OVERWRITTEN 0x00000003
913 #define FILE_EXISTS 0x00000004
914 #define FILE_DOES_NOT_EXIST 0x00000005
916 #if (_WIN32_WINNT >= 0x0501)
917 #define INTERNAL_TS_ACTIVE_CONSOLE_ID ( *((volatile ULONG*)(0x7ffe02d8)) )
918 #endif /* (_WIN32_WINNT >= 0x0501) */
920 #define LOGONID_CURRENT ((ULONG)-1)
922 #define OBJ_INHERIT 0x00000002L
923 #define OBJ_PERMANENT 0x00000010L
924 #define OBJ_EXCLUSIVE 0x00000020L
925 #define OBJ_CASE_INSENSITIVE 0x00000040L
926 #define OBJ_OPENIF 0x00000080L
927 #define OBJ_OPENLINK 0x00000100L
928 #define OBJ_KERNEL_HANDLE 0x00000200L
929 #define OBJ_VALID_ATTRIBUTES 0x000003F2L
931 #define SERVERNAME_CURRENT ((HANDLE)NULL)
933 typedef void (CALLBACK *PNTAPCFUNC)(ULONG_PTR,ULONG_PTR,ULONG_PTR); /* FIXME: not the right name */
935 /***********************************************************************
936 * Function declarations
939 extern LPSTR _strlwr(LPSTR str); /* FIXME: Doesn't belong here */
940 extern LPSTR _strupr(LPSTR str); /* FIXME: Doesn't belong here */
942 #if defined(__i386__) && defined(__GNUC__)
943 static inline void WINAPI DbgBreakPoint(void) { __asm__ __volatile__("int3"); }
944 static inline void WINAPI DbgUserBreakPoint(void) { __asm__ __volatile__("int3"); }
945 #else /* __i386__ && __GNUC__ */
946 void WINAPI DbgBreakPoint(void);
947 void WINAPI DbgUserBreakPoint(void);
948 #endif /* __i386__ && __GNUC__ */
949 void WINAPIV DbgPrint(LPCSTR fmt, ...);
951 NTSTATUS WINAPI LdrAccessResource(HMODULE,const IMAGE_RESOURCE_DATA_ENTRY*,void**,PULONG);
952 NTSTATUS WINAPI LdrFindResourceDirectory_U(HMODULE,const LDR_RESOURCE_INFO*,ULONG,const IMAGE_RESOURCE_DIRECTORY**);
953 NTSTATUS WINAPI LdrFindResource_U(HMODULE,const LDR_RESOURCE_INFO*,ULONG,const IMAGE_RESOURCE_DATA_ENTRY**);
954 void WINAPI LdrShutdownProcess(void);
955 void WINAPI LdrShutdownThread(void);
956 NTSTATUS WINAPI NtAccessCheck(PSECURITY_DESCRIPTOR,HANDLE,ACCESS_MASK,PGENERIC_MAPPING,PPRIVILEGE_SET,PULONG,PULONG,PBOOLEAN);
957 NTSTATUS WINAPI NtAdjustPrivilegesToken(HANDLE,BOOLEAN,PTOKEN_PRIVILEGES,DWORD,PTOKEN_PRIVILEGES,PDWORD);
958 NTSTATUS WINAPI NtAllocateVirtualMemory(HANDLE,PVOID*,PVOID,ULONG*,ULONG,ULONG);
959 NTSTATUS WINAPI NtCancelTimer(HANDLE, BOOLEAN*);
960 NTSTATUS WINAPI NtClearEvent(HANDLE);
961 NTSTATUS WINAPI NtClose(HANDLE);
962 NTSTATUS WINAPI NtCreateEvent(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES *,BOOLEAN,BOOLEAN);
963 NTSTATUS WINAPI NtCreateFile(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,PLARGE_INTEGER,ULONG,ULONG,ULONG,ULONG,PVOID,ULONG);
964 NTSTATUS WINAPI NtCreateKey(PHKEY,ACCESS_MASK,const OBJECT_ATTRIBUTES*,ULONG,const UNICODE_STRING*,ULONG,PULONG);
965 NTSTATUS WINAPI NtCreateSection(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,const LARGE_INTEGER*,ULONG,ULONG,HANDLE);
966 NTSTATUS WINAPI NtCreateSemaphore(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*,ULONG,ULONG);
967 NTSTATUS WINAPI NtCreateTimer(HANDLE*, ACCESS_MASK, const OBJECT_ATTRIBUTES*, TIMER_TYPE);
968 NTSTATUS WINAPI NtDelayExecution(BOOLEAN,const LARGE_INTEGER*);
969 NTSTATUS WINAPI NtDeleteKey(HKEY);
970 NTSTATUS WINAPI NtDeleteValueKey(HKEY,const UNICODE_STRING *);
971 NTSTATUS WINAPI NtDeviceIoControlFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,PVOID,ULONG,PVOID,ULONG);
972 NTSTATUS WINAPI NtDuplicateObject(HANDLE,HANDLE,HANDLE,PHANDLE,ACCESS_MASK,ULONG,ULONG);
973 NTSTATUS WINAPI NtEnumerateKey(HKEY,ULONG,KEY_INFORMATION_CLASS,void *,DWORD,DWORD *);
974 NTSTATUS WINAPI NtEnumerateValueKey(HKEY,ULONG,KEY_VALUE_INFORMATION_CLASS,PVOID,ULONG,PULONG);
975 NTSTATUS WINAPI NtFlushBuffersFile(HANDLE,IO_STATUS_BLOCK*);
976 NTSTATUS WINAPI NtFlushKey(HKEY);
977 NTSTATUS WINAPI NtFlushVirtualMemory(HANDLE,LPCVOID*,ULONG*,ULONG);
978 NTSTATUS WINAPI NtFreeVirtualMemory(HANDLE,PVOID*,ULONG*,ULONG);
979 NTSTATUS WINAPI NtGetContextThread(HANDLE,CONTEXT*);
980 NTSTATUS WINAPI NtLoadKey(const OBJECT_ATTRIBUTES *,const OBJECT_ATTRIBUTES *);
981 NTSTATUS WINAPI NtLockFile(HANDLE,HANDLE,PIO_APC_ROUTINE,void*,PIO_STATUS_BLOCK,PLARGE_INTEGER,PLARGE_INTEGER,ULONG*,BOOLEAN,BOOLEAN);
982 NTSTATUS WINAPI NtLockVirtualMemory(HANDLE,PVOID*,ULONG*,ULONG);
983 NTSTATUS WINAPI NtMapViewOfSection(HANDLE,HANDLE,PVOID*,ULONG,ULONG,const LARGE_INTEGER*,ULONG*,SECTION_INHERIT,ULONG,ULONG);
984 NTSTATUS WINAPI NtNotifyChangeKey(HKEY,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,BOOLEAN,PVOID,ULONG,BOOLEAN);
985 NTSTATUS WINAPI NtOpenEvent(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES *);
986 NTSTATUS WINAPI NtOpenFile(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,ULONG,ULONG);
987 NTSTATUS WINAPI NtOpenKey(PHKEY,ACCESS_MASK,const OBJECT_ATTRIBUTES *);
988 NTSTATUS WINAPI NtOpenProcessToken(HANDLE,DWORD,HANDLE *);
989 NTSTATUS WINAPI NtOpenSection(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*);
990 NTSTATUS WINAPI NtOpenThread(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,const CLIENT_ID*);
991 NTSTATUS WINAPI NtOpenThreadToken(HANDLE,DWORD,BOOLEAN,HANDLE *);
992 NTSTATUS WINAPI NtOpenTimer(HANDLE*, ACCESS_MASK, const OBJECT_ATTRIBUTES*);
993 NTSTATUS WINAPI NtProtectVirtualMemory(HANDLE,PVOID*,ULONG*,ULONG,ULONG*);
994 NTSTATUS WINAPI NtPulseEvent(HANDLE,PULONG);
995 NTSTATUS WINAPI NtQueueApcThread(HANDLE,PNTAPCFUNC,ULONG_PTR,ULONG_PTR,ULONG_PTR);
996 NTSTATUS WINAPI NtQueryDefaultLocale(BOOLEAN,LCID*);
997 NTSTATUS WINAPI NtQueryInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,LONG,FILE_INFORMATION_CLASS);
998 NTSTATUS WINAPI NtQueryInformationProcess(HANDLE,PROCESSINFOCLASS,PVOID,ULONG,PULONG);
999 NTSTATUS WINAPI NtQueryInformationThread(HANDLE,THREADINFOCLASS,PVOID,ULONG,PULONG);
1000 NTSTATUS WINAPI NtQueryInformationToken(HANDLE,DWORD,LPVOID,DWORD,LPDWORD);
1001 NTSTATUS WINAPI NtQueryKey(HKEY,KEY_INFORMATION_CLASS,void *,DWORD,DWORD *);
1002 NTSTATUS WINAPI NtQueryMultipleValueKey(HKEY,PVALENTW,ULONG,PVOID,ULONG,PULONG);
1003 NTSTATUS WINAPI NtQueryObject(HANDLE, OBJECT_INFORMATION_CLASS, PVOID, ULONG, PULONG);
1004 NTSTATUS WINAPI NtQuerySecurityObject(HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,ULONG,PULONG);
1005 NTSTATUS WINAPI NtQuerySystemInformation(SYSTEM_INFORMATION_CLASS,PVOID,ULONG,PULONG);
1006 NTSTATUS WINAPI NtQuerySystemTime(PLARGE_INTEGER);
1007 NTSTATUS WINAPI NtQueryValueKey(HKEY,const UNICODE_STRING *,KEY_VALUE_INFORMATION_CLASS,void *,DWORD,DWORD *);
1008 NTSTATUS WINAPI NtQueryVirtualMemory(HANDLE,LPCVOID,MEMORY_INFORMATION_CLASS,PVOID,ULONG,ULONG*);
1009 void WINAPI NtRaiseException(PEXCEPTION_RECORD,PCONTEXT,BOOL);
1010 NTSTATUS WINAPI NtReadFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,PVOID,ULONG,PLARGE_INTEGER,PULONG);
1011 NTSTATUS WINAPI NtReadVirtualMemory(HANDLE,const void*,void*,SIZE_T,SIZE_T*);
1012 NTSTATUS WINAPI NtReleaseSemaphore(HANDLE,ULONG,PULONG);
1013 NTSTATUS WINAPI NtReplaceKey(POBJECT_ATTRIBUTES,HKEY,POBJECT_ATTRIBUTES);
1014 NTSTATUS WINAPI NtResetEvent(HANDLE,PULONG);
1015 NTSTATUS WINAPI NtRestoreKey(HKEY,HANDLE,ULONG);
1016 NTSTATUS WINAPI NtResumeThread(HANDLE,PULONG);
1017 NTSTATUS WINAPI NtSaveKey(HKEY,HANDLE);
1018 NTSTATUS WINAPI NtSetContextThread(HANDLE,const CONTEXT*);
1019 NTSTATUS WINAPI NtSetDefaultLocale(BOOLEAN,LCID);
1020 NTSTATUS WINAPI NtSetEvent(HANDLE,PULONG);
1021 NTSTATUS WINAPI NtSetInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,FILE_INFORMATION_CLASS);
1022 NTSTATUS WINAPI NtSetInformationKey(HKEY,const int,PVOID,ULONG);
1023 NTSTATUS WINAPI NtSetInformationObject(HANDLE, OBJECT_INFORMATION_CLASS, PVOID, ULONG);
1024 NTSTATUS WINAPI NtSetSecurityObject(HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR);
1025 NTSTATUS WINAPI NtSetSystemTime(const LARGE_INTEGER*,LARGE_INTEGER*);
1026 NTSTATUS WINAPI NtSetTimer(HANDLE, const LARGE_INTEGER*, PTIMERAPCROUTINE, PVOID, BOOLEAN, ULONG, BOOLEAN*);
1027 NTSTATUS WINAPI NtSetValueKey(HKEY,const UNICODE_STRING *,ULONG,ULONG,const void *,ULONG);
1028 NTSTATUS WINAPI NtSuspendThread(HANDLE,PULONG);
1029 NTSTATUS WINAPI NtTerminateProcess(HANDLE,LONG);
1030 NTSTATUS WINAPI NtTerminateThread(HANDLE,LONG);
1031 NTSTATUS WINAPI NtUnloadKey(HKEY);
1032 NTSTATUS WINAPI NtUnlockFile(HANDLE,PIO_STATUS_BLOCK,PLARGE_INTEGER,PLARGE_INTEGER,PULONG);
1033 NTSTATUS WINAPI NtUnlockVirtualMemory(HANDLE,PVOID*,ULONG*,ULONG);
1034 NTSTATUS WINAPI NtUnmapViewOfSection(HANDLE,PVOID);
1035 NTSTATUS WINAPI NtWaitForSingleObject(HANDLE,BOOLEAN,const LARGE_INTEGER*);
1036 NTSTATUS WINAPI NtWaitForMultipleObjects(ULONG,const HANDLE*,BOOLEAN,BOOLEAN,const LARGE_INTEGER*);
1037 NTSTATUS WINAPI NtWriteFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,const void*,ULONG,PLARGE_INTEGER,PULONG);
1038 NTSTATUS WINAPI NtWriteVirtualMemory(HANDLE,void*,const void*,SIZE_T,SIZE_T*);
1040 void WINAPI RtlAcquirePebLock(void);
1041 BYTE WINAPI RtlAcquireResourceExclusive(LPRTL_RWLOCK,BYTE);
1042 BYTE WINAPI RtlAcquireResourceShared(LPRTL_RWLOCK,BYTE);
1043 NTSTATUS WINAPI RtlAddAce(PACL,DWORD,DWORD,PACE_HEADER,DWORD);
1044 NTSTATUS WINAPI RtlAddAccessAllowedAce(PACL,DWORD,DWORD,PSID);
1045 NTSTATUS WINAPI RtlAddAccessAllowedAceEx(PACL,DWORD,DWORD,DWORD,PSID);
1046 NTSTATUS WINAPI RtlAddAccessDeniedAce(PACL,DWORD,DWORD,PSID);
1047 NTSTATUS WINAPI RtlAddAccessDeniedAceEx(PACL,DWORD,DWORD,DWORD,PSID);
1048 DWORD WINAPI RtlAdjustPrivilege(DWORD,DWORD,DWORD,DWORD);
1049 BOOLEAN WINAPI RtlAllocateAndInitializeSid(PSID_IDENTIFIER_AUTHORITY,BYTE,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,PSID *);
1050 PVOID WINAPI RtlAllocateHeap(HANDLE,ULONG,ULONG);
1051 DWORD WINAPI RtlAnsiStringToUnicodeSize(const STRING *);
1052 NTSTATUS WINAPI RtlAnsiStringToUnicodeString(PUNICODE_STRING,PCANSI_STRING,BOOLEAN);
1053 NTSTATUS WINAPI RtlAppendAsciizToString(STRING *,LPCSTR);
1054 NTSTATUS WINAPI RtlAppendStringToString(STRING *,const STRING *);
1055 NTSTATUS WINAPI RtlAppendUnicodeStringToString(UNICODE_STRING *,const UNICODE_STRING *);
1056 NTSTATUS WINAPI RtlAppendUnicodeToString(UNICODE_STRING *,LPCWSTR);
1057 BOOLEAN WINAPI RtlAreAllAccessesGranted(ACCESS_MASK,ACCESS_MASK);
1058 BOOLEAN WINAPI RtlAreAnyAccessesGranted(ACCESS_MASK,ACCESS_MASK);
1059 BOOLEAN WINAPI RtlAreBitsSet(PCRTL_BITMAP,ULONG,ULONG);
1060 BOOLEAN WINAPI RtlAreBitsClear(PCRTL_BITMAP,ULONG,ULONG);
1062 NTSTATUS WINAPI RtlCharToInteger(PCSZ,ULONG,PULONG);
1063 void WINAPI RtlClearAllBits(PRTL_BITMAP);
1064 void WINAPI RtlClearBits(PRTL_BITMAP,ULONG,ULONG);
1065 ULONG WINAPI RtlCompactHeap(HANDLE,ULONG);
1066 LONG WINAPI RtlCompareString(const STRING*,const STRING*,BOOLEAN);
1067 LONG WINAPI RtlCompareUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
1068 DWORD WINAPI RtlComputeCrc32(DWORD,PBYTE,INT);
1069 NTSTATUS WINAPI RtlConvertSidToUnicodeString(PUNICODE_STRING,PSID,BOOLEAN);
1070 LONGLONG WINAPI RtlConvertLongToLargeInteger(LONG);
1071 ULONGLONG WINAPI RtlConvertUlongToLargeInteger(ULONG);
1072 void WINAPI RtlCopyLuid(PLUID,const LUID*);
1073 void WINAPI RtlCopyLuidAndAttributesArray(ULONG,const LUID_AND_ATTRIBUTES*,PLUID_AND_ATTRIBUTES);
1074 DWORD WINAPI RtlCopySid(DWORD,PSID,PSID);
1075 void WINAPI RtlCopyString(STRING*,const STRING*);
1076 void WINAPI RtlCopyUnicodeString(UNICODE_STRING*,const UNICODE_STRING*);
1077 NTSTATUS WINAPI RtlCreateAcl(PACL,DWORD,DWORD);
1078 NTSTATUS WINAPI RtlCreateEnvironment(BOOLEAN, PWSTR*);
1079 HANDLE WINAPI RtlCreateHeap(ULONG,PVOID,ULONG,ULONG,PVOID,PRTL_HEAP_DEFINITION);
1080 NTSTATUS WINAPI RtlCreateSecurityDescriptor(PSECURITY_DESCRIPTOR,DWORD);
1081 BOOLEAN WINAPI RtlCreateUnicodeString(PUNICODE_STRING,LPCWSTR);
1082 BOOLEAN WINAPI RtlCreateUnicodeStringFromAsciiz(PUNICODE_STRING,LPCSTR);
1084 NTSTATUS WINAPI RtlDeleteCriticalSection(RTL_CRITICAL_SECTION *);
1085 void WINAPI RtlDeleteResource(LPRTL_RWLOCK);
1086 DWORD WINAPI RtlDeleteSecurityObject(DWORD);
1087 NTSTATUS WINAPI RtlDestroyEnvironment(PWSTR);
1088 HANDLE WINAPI RtlDestroyHeap(HANDLE);
1089 DOS_PATHNAME_TYPE WINAPI RtlDetermineDosPathNameType_U(PCWSTR);
1090 BOOLEAN WINAPI RtlDoesFileExists_U(LPCWSTR);
1091 BOOLEAN WINAPI RtlDosPathNameToNtPathName_U(LPWSTR,PUNICODE_STRING,PWSTR*,CURDIR*);
1092 ULONG WINAPI RtlDosSearchPath_U(LPCWSTR, LPCWSTR, LPCWSTR, ULONG, LPWSTR, LPWSTR*);
1093 WCHAR WINAPI RtlDowncaseUnicodeChar(WCHAR);
1094 NTSTATUS WINAPI RtlDowncaseUnicodeString(UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
1095 void WINAPI RtlDumpResource(LPRTL_RWLOCK);
1096 NTSTATUS WINAPI RtlDuplicateUnicodeString(int,const UNICODE_STRING*,UNICODE_STRING*);
1098 LONGLONG WINAPI RtlEnlargedIntegerMultiply(INT,INT);
1099 ULONGLONG WINAPI RtlEnlargedUnsignedMultiply(UINT,UINT);
1100 UINT WINAPI RtlEnlargedUnsignedDivide(ULONGLONG,UINT,UINT *);
1101 NTSTATUS WINAPI RtlEnterCriticalSection(RTL_CRITICAL_SECTION *);
1102 void WINAPI RtlEraseUnicodeString(UNICODE_STRING*);
1103 NTSTATUS WINAPI RtlEqualComputerName(const UNICODE_STRING*,const UNICODE_STRING*);
1104 NTSTATUS WINAPI RtlEqualDomainName(const UNICODE_STRING*,const UNICODE_STRING*);
1105 BOOLEAN WINAPI RtlEqualLuid(const LUID*,const LUID*);
1106 BOOL WINAPI RtlEqualPrefixSid(PSID,PSID);
1107 BOOL WINAPI RtlEqualSid(PSID,PSID);
1108 BOOLEAN WINAPI RtlEqualString(const STRING*,const STRING*,BOOLEAN);
1109 BOOLEAN WINAPI RtlEqualUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
1110 NTSTATUS WINAPI RtlExpandEnvironmentStrings_U(PWSTR, const UNICODE_STRING*, UNICODE_STRING*, ULONG*);
1111 LONGLONG WINAPI RtlExtendedMagicDivide(LONGLONG,LONGLONG,INT);
1112 LONGLONG WINAPI RtlExtendedIntegerMultiply(LONGLONG,INT);
1113 LONGLONG WINAPI RtlExtendedLargeIntegerDivide(LONGLONG,INT,INT *);
1115 NTSTATUS WINAPI RtlFindCharInUnicodeString(int,const UNICODE_STRING*,const UNICODE_STRING*,USHORT*);
1116 ULONG WINAPI RtlFindClearBits(PCRTL_BITMAP,ULONG,ULONG);
1117 ULONG WINAPI RtlFindClearBitsAndSet(PRTL_BITMAP,ULONG,ULONG);
1118 ULONG WINAPI RtlFindClearRuns(PCRTL_BITMAP,PRTL_BITMAP_RUN,ULONG,BOOLEAN);
1119 ULONG WINAPI RtlFindLastBackwardRunSet(PCRTL_BITMAP,ULONG,PULONG);
1120 ULONG WINAPI RtlFindLastBackwardRunClear(PCRTL_BITMAP,ULONG,PULONG);
1121 CCHAR WINAPI RtlFindLeastSignificantBit(ULONGLONG);
1122 ULONG WINAPI RtlFindLongestRunSet(PCRTL_BITMAP,PULONG);
1123 ULONG WINAPI RtlFindLongestRunClear(PCRTL_BITMAP,PULONG);
1124 NTSTATUS WINAPI RtlFindMessage(HMODULE,ULONG,ULONG,ULONG,const MESSAGE_RESOURCE_ENTRY**);
1125 CCHAR WINAPI RtlFindMostSignificantBit(ULONGLONG);
1126 ULONG WINAPI RtlFindNextForwardRunSet(PCRTL_BITMAP,ULONG,PULONG);
1127 ULONG WINAPI RtlFindNextForwardRunClear(PCRTL_BITMAP,ULONG,PULONG);
1128 ULONG WINAPI RtlFindSetBits(PCRTL_BITMAP,ULONG,ULONG);
1129 ULONG WINAPI RtlFindSetBitsAndClear(PRTL_BITMAP,ULONG,ULONG);
1130 ULONG WINAPI RtlFindSetRuns(PCRTL_BITMAP,PRTL_BITMAP_RUN,ULONG,BOOLEAN);
1131 BOOLEAN WINAPI RtlFirstFreeAce(PACL,PACE_HEADER *);
1132 NTSTATUS WINAPI RtlFormatCurrentUserKeyPath(PUNICODE_STRING);
1133 void WINAPI RtlFreeAnsiString(PANSI_STRING);
1134 BOOLEAN WINAPI RtlFreeHeap(HANDLE,ULONG,PVOID);
1135 void WINAPI RtlFreeOemString(POEM_STRING);
1136 DWORD WINAPI RtlFreeSid(PSID);
1137 void WINAPI RtlFreeUnicodeString(PUNICODE_STRING);
1139 DWORD WINAPI RtlGetAce(PACL,DWORD,LPVOID *);
1140 NTSTATUS WINAPI RtlGetControlSecurityDescriptor(PSECURITY_DESCRIPTOR, PSECURITY_DESCRIPTOR_CONTROL,LPDWORD);
1141 NTSTATUS WINAPI RtlGetCurrentDirectory_U(ULONG, LPWSTR);
1142 NTSTATUS WINAPI RtlGetDaclSecurityDescriptor(PSECURITY_DESCRIPTOR,PBOOLEAN,PACL *,PBOOLEAN);
1143 ULONG WINAPI RtlGetFullPathName_U(PCWSTR,ULONG,PWSTR,PWSTR*);
1144 NTSTATUS WINAPI RtlGetGroupSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID *,PBOOLEAN);
1145 DWORD WINAPI RtlGetLongestNtPathLength(void);
1146 BOOLEAN WINAPI RtlGetNtProductType(LPDWORD);
1147 NTSTATUS WINAPI RtlGetOwnerSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID *,PBOOLEAN);
1148 ULONG WINAPI RtlGetProcessHeaps(ULONG,HANDLE*);
1149 NTSTATUS WINAPI RtlGetSaclSecurityDescriptor(PSECURITY_DESCRIPTOR,PBOOLEAN,PACL *,PBOOLEAN);
1151 PSID_IDENTIFIER_AUTHORITY WINAPI RtlIdentifierAuthoritySid(PSID);
1152 PVOID WINAPI RtlImageDirectoryEntryToData(HMODULE,BOOL,WORD,ULONG *);
1153 PIMAGE_NT_HEADERS WINAPI RtlImageNtHeader(HMODULE);
1154 PIMAGE_SECTION_HEADER WINAPI RtlImageRvaToSection(const IMAGE_NT_HEADERS *,HMODULE,DWORD);
1155 PVOID WINAPI RtlImageRvaToVa(const IMAGE_NT_HEADERS *,HMODULE,DWORD,IMAGE_SECTION_HEADER **);
1156 BOOL WINAPI RtlImpersonateSelf(SECURITY_IMPERSONATION_LEVEL);
1157 void WINAPI RtlInitString(PSTRING,PCSZ);
1158 void WINAPI RtlInitAnsiString(PANSI_STRING,PCSZ);
1159 void WINAPI RtlInitUnicodeString(PUNICODE_STRING,PCWSTR);
1160 NTSTATUS WINAPI RtlInitUnicodeStringEx(PUNICODE_STRING,PCWSTR);
1161 NTSTATUS WINAPI RtlInitializeCriticalSection(RTL_CRITICAL_SECTION *);
1162 NTSTATUS WINAPI RtlInitializeCriticalSectionAndSpinCount(RTL_CRITICAL_SECTION *,DWORD);
1163 void WINAPI RtlInitializeBitMap(PRTL_BITMAP,LPBYTE,ULONG);
1164 void WINAPI RtlInitializeResource(LPRTL_RWLOCK);
1165 BOOL WINAPI RtlInitializeSid(PSID,PSID_IDENTIFIER_AUTHORITY,BYTE);
1167 NTSTATUS WINAPI RtlInt64ToUnicodeString(ULONGLONG,ULONG,UNICODE_STRING *);
1168 NTSTATUS WINAPI RtlIntegerToChar(ULONG,ULONG,ULONG,PCHAR);
1169 NTSTATUS WINAPI RtlIntegerToUnicodeString(ULONG,ULONG,UNICODE_STRING *);
1170 ULONG WINAPI RtlIsDosDeviceName_U(PCWSTR);
1171 BOOLEAN WINAPI RtlIsNameLegalDOS8Dot3(const UNICODE_STRING*,POEM_STRING,PBOOLEAN);
1172 DWORD WINAPI RtlIsTextUnicode(LPVOID,DWORD,DWORD *);
1174 LONGLONG WINAPI RtlLargeIntegerAdd(LONGLONG,LONGLONG);
1175 LONGLONG WINAPI RtlLargeIntegerArithmeticShift(LONGLONG,INT);
1176 ULONGLONG WINAPI RtlLargeIntegerDivide( ULONGLONG,ULONGLONG,ULONGLONG *);
1177 LONGLONG WINAPI RtlLargeIntegerNegate(LONGLONG);
1178 LONGLONG WINAPI RtlLargeIntegerShiftLeft(LONGLONG,INT);
1179 LONGLONG WINAPI RtlLargeIntegerShiftRight(LONGLONG,INT);
1180 LONGLONG WINAPI RtlLargeIntegerSubtract(LONGLONG,LONGLONG);
1181 NTSTATUS WINAPI RtlLargeIntegerToChar(const ULONGLONG *,ULONG,ULONG,PCHAR);
1182 NTSTATUS WINAPI RtlLeaveCriticalSection(RTL_CRITICAL_SECTION *);
1183 DWORD WINAPI RtlLengthRequiredSid(DWORD);
1184 ULONG WINAPI RtlLengthSecurityDescriptor(PSECURITY_DESCRIPTOR);
1185 DWORD WINAPI RtlLengthSid(PSID);
1186 NTSTATUS WINAPI RtlLocalTimeToSystemTime(const LARGE_INTEGER*,PLARGE_INTEGER);
1187 BOOLEAN WINAPI RtlLockHeap(HANDLE);
1189 NTSTATUS WINAPI RtlMakeSelfRelativeSD(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,LPDWORD);
1190 void WINAPI RtlMapGenericMask(PACCESS_MASK,const GENERIC_MAPPING*);
1191 NTSTATUS WINAPI RtlMultiByteToUnicodeN(LPWSTR,DWORD,LPDWORD,LPCSTR,DWORD);
1192 NTSTATUS WINAPI RtlMultiByteToUnicodeSize(DWORD*,LPCSTR,UINT);
1194 DWORD WINAPI RtlNewSecurityObject(DWORD,DWORD,DWORD,DWORD,DWORD,DWORD);
1195 LPVOID WINAPI RtlNormalizeProcessParams(LPVOID);
1196 ULONG WINAPI RtlNtStatusToDosError(NTSTATUS);
1197 ULONG WINAPI RtlNumberOfSetBits(PCRTL_BITMAP);
1198 ULONG WINAPI RtlNumberOfClearBits(PCRTL_BITMAP);
1200 UINT WINAPI RtlOemStringToUnicodeSize(const STRING*);
1201 NTSTATUS WINAPI RtlOemStringToUnicodeString(UNICODE_STRING*,const STRING*,BOOLEAN);
1202 NTSTATUS WINAPI RtlOemToUnicodeN(LPWSTR,DWORD,LPDWORD,LPCSTR,DWORD);
1203 DWORD WINAPI RtlOpenCurrentUser(ACCESS_MASK,PHKEY);
1205 BOOLEAN WINAPI RtlPrefixString(const STRING*,const STRING*,BOOLEAN);
1206 BOOLEAN WINAPI RtlPrefixUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
1208 NTSTATUS WINAPI RtlQueryEnvironmentVariable_U(PWSTR,PUNICODE_STRING,PUNICODE_STRING);
1209 NTSTATUS WINAPI RtlQueryTimeZoneInformation(LPTIME_ZONE_INFORMATION);
1211 void WINAPI RtlRaiseException(PEXCEPTION_RECORD);
1212 void WINAPI RtlRaiseStatus(NTSTATUS);
1213 ULONG WINAPI RtlRandom(PULONG);
1214 PVOID WINAPI RtlReAllocateHeap(HANDLE,ULONG,PVOID,ULONG);
1215 void WINAPI RtlReleasePebLock(void);
1216 void WINAPI RtlReleaseResource(LPRTL_RWLOCK);
1218 void WINAPI RtlSecondsSince1970ToTime(DWORD,LARGE_INTEGER *);
1219 void WINAPI RtlSecondsSince1980ToTime(DWORD,LARGE_INTEGER *);
1220 void WINAPI RtlSetAllBits(PRTL_BITMAP);
1221 void WINAPI RtlSetBits(PRTL_BITMAP,ULONG,ULONG);
1222 NTSTATUS WINAPI RtlSetCurrentDirectory_U(const UNICODE_STRING*);
1223 void WINAPI RtlSetCurrentEnvironment(PWSTR, PWSTR*);
1224 NTSTATUS WINAPI RtlSetDaclSecurityDescriptor(PSECURITY_DESCRIPTOR,BOOLEAN,PACL,BOOLEAN);
1225 NTSTATUS WINAPI RtlSetEnvironmentVariable(PWSTR*,PUNICODE_STRING,PUNICODE_STRING);
1226 NTSTATUS WINAPI RtlSetOwnerSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID,BOOLEAN);
1227 NTSTATUS WINAPI RtlSetGroupSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID,BOOLEAN);
1228 NTSTATUS WINAPI RtlSetSaclSecurityDescriptor(PSECURITY_DESCRIPTOR,BOOLEAN,PACL,BOOLEAN);
1229 NTSTATUS WINAPI RtlSetTimeZoneInformation(const TIME_ZONE_INFORMATION*);
1230 ULONG WINAPI RtlSizeHeap(HANDLE,ULONG,PVOID);
1231 LPDWORD WINAPI RtlSubAuthoritySid(PSID,DWORD);
1232 LPBYTE WINAPI RtlSubAuthorityCountSid(PSID);
1233 NTSTATUS WINAPI RtlSystemTimeToLocalTime(const LARGE_INTEGER*,PLARGE_INTEGER);
1235 void WINAPI RtlTimeToTimeFields(const LARGE_INTEGER*,PTIME_FIELDS);
1236 BOOLEAN WINAPI RtlTimeFieldsToTime(PTIME_FIELDS,PLARGE_INTEGER);
1237 void WINAPI RtlTimeToElapsedTimeFields(const LARGE_INTEGER *,PTIME_FIELDS);
1238 BOOLEAN WINAPI RtlTimeToSecondsSince1970(const LARGE_INTEGER *,LPDWORD);
1239 BOOLEAN WINAPI RtlTimeToSecondsSince1980(const LARGE_INTEGER *,LPDWORD);
1240 BOOL WINAPI RtlTryEnterCriticalSection(RTL_CRITICAL_SECTION *);
1242 ULONGLONG __cdecl RtlUlonglongByteSwap(ULONGLONG);
1243 DWORD WINAPI RtlUnicodeStringToAnsiSize(const UNICODE_STRING*);
1244 NTSTATUS WINAPI RtlUnicodeStringToAnsiString(PANSI_STRING,PCUNICODE_STRING,BOOLEAN);
1245 NTSTATUS WINAPI RtlUnicodeStringToInteger(const UNICODE_STRING *,ULONG,ULONG *);
1246 DWORD WINAPI RtlUnicodeStringToOemSize(const UNICODE_STRING*);
1247 NTSTATUS WINAPI RtlUnicodeStringToOemString(POEM_STRING,PCUNICODE_STRING,BOOLEAN);
1248 NTSTATUS WINAPI RtlUnicodeToMultiByteN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
1249 NTSTATUS WINAPI RtlUnicodeToMultiByteSize(PULONG,PCWSTR,ULONG);
1250 NTSTATUS WINAPI RtlUnicodeToOemN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
1251 ULONG WINAPI RtlUniform(PULONG);
1252 BOOLEAN WINAPI RtlUnlockHeap(HANDLE);
1253 void WINAPI RtlUnwind(PVOID,PVOID,PEXCEPTION_RECORD,PVOID);
1254 #ifdef __ia64__
1255 void WINAPI RtlUnwind2(FRAME_POINTERS,PVOID,PEXCEPTION_RECORD,PVOID,PCONTEXT);
1256 void WINAPI RtlUnwindEx(FRAME_POINTERS,PVOID,PEXCEPTION_RECORD,PVOID,PCONTEXT,PUNWIND_HISTORY_TABLE);
1257 #endif
1258 WCHAR WINAPI RtlUpcaseUnicodeChar(WCHAR);
1259 NTSTATUS WINAPI RtlUpcaseUnicodeString(UNICODE_STRING*,const UNICODE_STRING *,BOOLEAN);
1260 NTSTATUS WINAPI RtlUpcaseUnicodeStringToAnsiString(STRING*,const UNICODE_STRING*,BOOLEAN);
1261 NTSTATUS WINAPI RtlUpcaseUnicodeStringToCountedOemString(STRING*,const UNICODE_STRING*,BOOLEAN);
1262 NTSTATUS WINAPI RtlUpcaseUnicodeStringToOemString(STRING*,const UNICODE_STRING*,BOOLEAN);
1263 NTSTATUS WINAPI RtlUpcaseUnicodeToMultiByteN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
1264 NTSTATUS WINAPI RtlUpcaseUnicodeToOemN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
1265 CHAR WINAPI RtlUpperChar(CHAR);
1266 void WINAPI RtlUpperString(STRING *,const STRING *);
1268 NTSTATUS WINAPI RtlValidSecurityDescriptor(PSECURITY_DESCRIPTOR);
1269 BOOLEAN WINAPI RtlValidAcl(PACL);
1270 BOOLEAN WINAPI RtlValidSid(PSID);
1271 BOOLEAN WINAPI RtlValidateHeap(HANDLE,ULONG,LPCVOID);
1273 NTSTATUS WINAPI RtlWalkHeap(HANDLE,PVOID);
1275 NTSTATUS WINAPI RtlpWaitForCriticalSection(RTL_CRITICAL_SECTION *);
1276 NTSTATUS WINAPI RtlpUnWaitCriticalSection(RTL_CRITICAL_SECTION *);
1278 /***********************************************************************
1279 * Inline functions
1282 #define InitializeObjectAttributes(p,n,a,r,s) \
1283 do { \
1284 (p)->Length = sizeof(OBJECT_ATTRIBUTES); \
1285 (p)->RootDirectory = r; \
1286 (p)->Attributes = a; \
1287 (p)->ObjectName = n; \
1288 (p)->SecurityDescriptor = s; \
1289 (p)->SecurityQualityOfService = NULL; \
1290 } while (0)
1292 #define NtCurrentProcess() ((HANDLE)-1)
1294 #define RtlFillMemory(Destination,Length,Fill) memset((Destination),(Fill),(Length))
1295 #define RtlMoveMemory(Destination,Source,Length) memmove((Destination),(Source),(Length))
1296 #define RtlStoreUlong(p,v) do { ULONG _v = (v); memcpy((p), &_v, sizeof(_v)); } while (0)
1297 #define RtlStoreUlonglong(p,v) do { ULONGLONG _v = (v); memcpy((p), &_v, sizeof(_v)); } while (0)
1298 #define RtlRetrieveUlong(p,s) memcpy((p), (s), sizeof(ULONG))
1299 #define RtlRetrieveUlonglong(p,s) memcpy((p), (s), sizeof(ULONGLONG))
1300 #define RtlZeroMemory(Destination,Length) memset((Destination),0,(Length))
1302 inline static BOOLEAN RtlCheckBit(PCRTL_BITMAP lpBits, ULONG ulBit)
1304 if (lpBits && ulBit < lpBits->SizeOfBitMap &&
1305 lpBits->BitMapBuffer[ulBit >> 3] & (1 << (ulBit & 7)))
1306 return TRUE;
1307 return FALSE;
1310 #define RtlClearAllBits(p) \
1311 do { \
1312 PRTL_BITMAP _p = (p); \
1313 memset(_p->BitMapBuffer,0,((_p->SizeOfBitMap + 31) & 0xffffffe0) >> 3); \
1314 } while (0)
1316 #define RtlInitializeBitMap(p,b,s) \
1317 do { \
1318 PRTL_BITMAP _p = (p); \
1319 _p->SizeOfBitMap = (s); \
1320 _p->BitMapBuffer = (b); \
1321 } while (0)
1323 #define RtlSetAllBits(p) \
1324 do { \
1325 PRTL_BITMAP _p = (p); \
1326 memset(_p->BitMapBuffer,0xff,((_p->SizeOfBitMap + 31) & 0xffffffe0) >> 3); \
1327 } while (0)
1329 /* These are implemented as __fastcall, so we can't let Winelib apps link with them */
1330 inline static USHORT RtlUshortByteSwap(USHORT s)
1332 return (s >> 8) | (s << 8);
1334 inline static ULONG RtlUlongByteSwap(ULONG i)
1336 #if defined(__i386__) && defined(__GNUC__)
1337 ULONG ret;
1338 __asm__("bswap %0" : "=r" (ret) : "0" (i) );
1339 return ret;
1340 #else
1341 return ((ULONG)RtlUshortByteSwap((USHORT)i) << 16) | RtlUshortByteSwap((USHORT)(i >> 16));
1342 #endif
1345 /*************************************************************************
1346 * Loader functions and structures.
1348 * Those are not part of standard Winternl.h
1350 typedef struct _LDR_MODULE
1352 LIST_ENTRY InLoadOrderModuleList;
1353 LIST_ENTRY InMemoryOrderModuleList;
1354 LIST_ENTRY InInitializationOrderModuleList;
1355 void* BaseAddress;
1356 void* EntryPoint;
1357 ULONG SizeOfImage;
1358 UNICODE_STRING FullDllName;
1359 UNICODE_STRING BaseDllName;
1360 ULONG Flags;
1361 SHORT LoadCount;
1362 SHORT TlsIndex;
1363 HANDLE SectionHandle;
1364 ULONG CheckSum;
1365 ULONG TimeDateStamp;
1366 } LDR_MODULE, *PLDR_MODULE;
1368 /* those defines are (some of the) regular LDR_MODULE.Flags values */
1369 #define LDR_IMAGE_IS_DLL 0x00000004
1370 #define LDR_LOAD_IN_PROGRESS 0x00001000
1371 #define LDR_UNLOAD_IN_PROGRESS 0x00002000
1372 #define LDR_NO_DLL_CALLS 0x00040000
1373 #define LDR_PROCESS_ATTACHED 0x00080000
1374 #define LDR_MODULE_REBASED 0x00200000
1376 /* these ones is Wine specific */
1377 #define LDR_DONT_RESOLVE_REFS 0x40000000
1378 #define LDR_WINE_INTERNAL 0x80000000
1380 /* FIXME: to be checked */
1381 #define MAXIMUM_FILENAME_LENGTH 256
1383 typedef struct _SYSTEM_MODULE
1385 ULONG Reserved1;
1386 ULONG Reserved2;
1387 PVOID ImageBaseAddress;
1388 ULONG ImageSize;
1389 ULONG Flags;
1390 WORD Id;
1391 WORD Rank;
1392 WORD Unknown;
1393 WORD NameOffset;
1394 BYTE Name[MAXIMUM_FILENAME_LENGTH];
1395 } SYSTEM_MODULE, *PSYSTEM_MODULE;
1397 typedef struct _SYSTEM_MODULE_INFORMATION
1399 ULONG ModulesCount;
1400 SYSTEM_MODULE Modules[1]; /* FIXME: should be Modules[0] */
1401 } SYSTEM_MODULE_INFORMATION, *PSYSTEM_MODULE_INFORMATION;
1403 NTSTATUS WINAPI LdrDisableThreadCalloutsForDll(HMODULE);
1404 NTSTATUS WINAPI LdrFindEntryForAddress(const void*, PLDR_MODULE*);
1405 NTSTATUS WINAPI LdrGetDllHandle(ULONG, ULONG, PUNICODE_STRING, HMODULE*);
1406 NTSTATUS WINAPI LdrGetProcedureAddress(HMODULE, PANSI_STRING, ULONG, void**);
1407 NTSTATUS WINAPI LdrLoadDll(LPCWSTR, DWORD, PUNICODE_STRING, HMODULE*);
1408 NTSTATUS WINAPI LdrLockLoaderLock(ULONG,ULONG*,ULONG*);
1409 NTSTATUS WINAPI LdrQueryProcessModuleInformation(SYSTEM_MODULE_INFORMATION*, ULONG, ULONG*);
1410 NTSTATUS WINAPI LdrUnloadDll(HMODULE);
1411 NTSTATUS WINAPI LdrUnlockLoaderLock(ULONG,ULONG);
1413 /* list manipulation macros */
1414 #define InitializeListHead(le) (void)((le)->Flink = (le)->Blink = (le))
1415 #define InsertHeadList(le,e) do { PLIST_ENTRY f = (le)->Flink; (e)->Flink = f; (e)->Blink = (le); f->Blink = (e); (le)->Flink = (e); } while (0)
1416 #define InsertTailList(le,e) do { PLIST_ENTRY b = (le)->Blink; (e)->Flink = (le); (e)->Blink = b; b->Flink = (e); (le)->Blink = (e); } while (0)
1417 #define IsListEmpty(le) ((le)->Flink == (le))
1418 #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)
1419 static inline PLIST_ENTRY RemoveHeadList(PLIST_ENTRY le)
1421 PLIST_ENTRY f, b, e;
1423 e = le->Flink;
1424 f = le->Flink->Flink;
1425 b = le->Flink->Blink;
1426 f->Blink = b;
1427 b->Flink = f;
1429 if (e != le) e->Flink = e->Blink = NULL;
1430 return e;
1432 static inline PLIST_ENTRY RemoveTailList(PLIST_ENTRY le)
1434 PLIST_ENTRY f, b, e;
1436 e = le->Blink;
1437 f = le->Blink->Flink;
1438 b = le->Blink->Blink;
1439 f->Blink = b;
1440 b->Flink = f;
1442 if (e != le) e->Flink = e->Blink = NULL;
1443 return e;
1446 #ifdef __cplusplus
1447 } /* extern "C" */
1448 #endif /* defined(__cplusplus) */
1450 #endif /* __WINE_WINTERNAL_H */