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
30 #endif /* defined(__cplusplus) */
33 /***********************************************************************
43 PVOID ReservedForOle; /* Windows 2000 only */
45 PVOID TlsExpansionSlots;
49 /**********************************************************************
50 * Fundamental types and data structures
53 typedef LONG NTSTATUS;
55 typedef CONST char *PCSZ;
58 typedef CSHORT *PCSHORT;
60 typedef struct _STRING {
66 typedef STRING ANSI_STRING;
67 typedef PSTRING PANSI_STRING;
68 typedef const STRING *PCANSI_STRING;
70 typedef STRING OEM_STRING;
71 typedef PSTRING POEM_STRING;
72 typedef const STRING *PCOEM_STRING;
74 typedef struct _UNICODE_STRING {
75 USHORT Length; /* bytes */
76 USHORT MaximumLength; /* bytes */
78 } UNICODE_STRING, *PUNICODE_STRING;
80 typedef const UNICODE_STRING *PCUNICODE_STRING;
82 typedef struct _CLIENT_ID
86 } CLIENT_ID, *PCLIENT_ID;
88 typedef struct _CURDIR
90 UNICODE_STRING DosPath;
94 typedef struct RTL_DRIVE_LETTER_CURDIR
99 UNICODE_STRING DosPath;
100 } RTL_DRIVE_LETTER_CURDIR, *PRTL_DRIVE_LETTER_CURDIR;
102 typedef struct _RTL_USER_PROCESS_PARAMETERS
104 ULONG AllocationSize;
113 UNICODE_STRING CurrentDirectoryName;
114 HANDLE CurrentDirectoryHandle;
115 UNICODE_STRING DllPath;
116 UNICODE_STRING ImagePathName;
117 UNICODE_STRING CommandLine;
125 ULONG dwFillAttribute;
128 UNICODE_STRING WindowTitle;
129 UNICODE_STRING Desktop;
130 UNICODE_STRING ShellInfo;
131 UNICODE_STRING RuntimeInfo;
132 RTL_DRIVE_LETTER_CURDIR DLCurrentDirectory[0x20];
133 } RTL_USER_PROCESS_PARAMETERS, *PRTL_USER_PROCESS_PARAMETERS;
136 /***********************************************************************
141 BYTE Reserved1[2]; /* 00 */
142 BYTE BeingDebugged; /* 02 */
143 BYTE Reserved2[5]; /* 03 */
144 HMODULE ImageBaseAddress; /* 08 */
145 PVOID __pad_0c; /* 0c */
146 RTL_USER_PROCESS_PARAMETERS *ProcessParameters; /* 10 */
147 PVOID __pad_14; /* 14 */
148 HANDLE ProcessHeap; /* 18 */
149 BYTE __pad_1c[204]; /* 1c */
150 PVOID Reserved3[59]; /* e8 */
151 ULONG SessionId; /* 1d4 */
155 /***********************************************************************
159 typedef enum _FILE_INFORMATION_CLASS {
160 FileDirectoryInformation = 1,
161 FileFullDirectoryInformation,
162 FileBothDirectoryInformation,
163 FileBasicInformation,
164 FileStandardInformation,
165 FileInternalInformation,
167 FileAccessInformation,
169 FileRenameInformation,
171 FileNamesInformation,
172 FileDispositionInformation,
173 FilePositionInformation,
174 FileFullEaInformation,
176 FileAlignmentInformation,
178 FileAllocationInformation,
179 FileEndOfFileInformation,
180 FileAlternateNameInformation,
181 FileStreamInformation,
183 FilePipeLocalInformation,
184 FilePipeRemoteInformation,
185 FileMailslotQueryInformation,
186 FileMailslotSetInformation,
187 FileCompressionInformation,
188 FileObjectIdInformation,
189 FileCompletionInformation,
190 FileMoveClusterInformation,
191 FileQuotaInformation,
192 FileReparsePointInformation,
193 FileNetworkOpenInformation,
194 FileAttributeTagInformation,
195 FileTrackingInformation,
196 FileMaximumInformation
197 } FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;
199 typedef struct _FILE_BASIC_INFORMATION {
200 LARGE_INTEGER CreationTime;
201 LARGE_INTEGER LastAccessTime;
202 LARGE_INTEGER LastWriteTime;
203 LARGE_INTEGER ChangeTime;
204 ULONG FileAttributes;
205 } FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION;
207 typedef struct _FILE_STANDARD_INFORMATION {
208 LARGE_INTEGER AllocationSize;
209 LARGE_INTEGER EndOfFile;
211 BOOLEAN DeletePending;
213 } FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION;
215 typedef struct _FILE_POSITION_INFORMATION {
216 LARGE_INTEGER CurrentByteOffset;
217 } FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION;
219 typedef struct _FILE_ALIGNMENT_INFORMATION {
220 ULONG AlignmentRequirement;
221 } FILE_ALIGNMENT_INFORMATION, *PFILE_ALIGNMENT_INFORMATION;
223 typedef struct _FILE_NETWORK_OPEN_INFORMATION {
224 LARGE_INTEGER CreationTime;
225 LARGE_INTEGER LastAccessTime;
226 LARGE_INTEGER LastWriteTime;
227 LARGE_INTEGER ChangeTime;
228 LARGE_INTEGER AllocationSize;
229 LARGE_INTEGER EndOfFile;
230 ULONG FileAttributes;
231 } FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION;
233 typedef struct _FILE_FULL_EA_INFORMATION {
234 ULONG NextEntryOffset;
237 USHORT EaValueLength;
239 } FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION;
241 typedef struct _FILE_STREAM_INFORMATION
243 ULONG NextEntryOffset;
244 ULONG StreamNameLength;
245 LARGE_INTEGER StreamSize;
246 LARGE_INTEGER StreamAllocationSize;
248 } FILE_STREAM_INFORMATION, *PFILE_STREAM_INFORMATION;
250 struct _FILE_ATTRIBUTE_TAG_INFORMATION
252 ULONG FileAttributes;
254 } FILE_ATTRIBUTE_TAG_INFORMATION, *PFILE_ATTRIBUTE_TAG_INFORMATION;
256 typedef enum _FSINFOCLASS {
257 FileFsVolumeInformation = 1,
258 FileFsLabelInformation,
259 FileFsSizeInformation,
260 FileFsDeviceInformation,
261 FileFsAttributeInformation,
262 FileFsControlInformation,
263 FileFsFullSizeInformation,
264 FileFsObjectIdInformation,
265 FileFsMaximumInformation
266 } FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS;
268 typedef enum _KEY_INFORMATION_CLASS {
272 } KEY_INFORMATION_CLASS;
274 typedef enum _KEY_VALUE_INFORMATION_CLASS {
275 KeyValueBasicInformation,
276 KeyValueFullInformation,
277 KeyValuePartialInformation,
278 KeyValueFullInformationAlign64,
279 KeyValuePartialInformationAlign64
280 } KEY_VALUE_INFORMATION_CLASS;
282 typedef enum _OBJECT_INFORMATION_CLASS {
283 ObjectBasicInformation,
284 ObjectNameInformation,
285 ObjectTypeInformation,
286 ObjectAllInformation,
287 ObjectDataInformation
288 } OBJECT_INFORMATION_CLASS, *POBJECT_INFORMATION_CLASS;
290 typedef enum _PROCESSINFOCLASS {
291 ProcessBasicInformation = 0,
292 ProcessQuotaLimits = 1,
293 ProcessIoCounters = 2,
294 ProcessVmCounters = 3,
296 ProcessBasePriority = 5,
297 ProcessRaisePriority = 6,
298 ProcessDebugPort = 7,
299 ProcessExceptionPort = 8,
300 ProcessAccessToken = 9,
301 ProcessLdtInformation = 10,
303 ProcessDefaultHardErrorMode = 12,
304 ProcessIoPortHandlers = 13,
305 ProcessPooledUsageAndLimits = 14,
306 ProcessWorkingSetWatch = 15,
307 ProcessUserModeIOPL = 16,
308 ProcessEnableAlignmentFaultFixup = 17,
309 ProcessPriorityClass = 18,
310 ProcessWx86Information = 19,
311 ProcessHandleCount = 20,
312 ProcessAffinityMask = 21,
313 ProcessPriorityBoost = 22,
314 ProcessDeviceMap = 23,
315 ProcessSessionInformation = 24,
316 ProcessForegroundInformation = 25,
317 ProcessWow64Information = 26,
321 typedef enum _SECTION_INHERIT {
326 typedef enum SYSTEM_INFORMATION_CLASS {
327 SystemBasicInformation = 0,
329 SystemPerformanceInformation = 2,
330 SystemTimeOfDayInformation = 3, /* was SystemTimeInformation */
332 SystemProcessInformation = 5,
335 SystemProcessorPerformanceInformation = 8,
338 SystemDriverInformation,
348 SystemCacheInformation,
350 SystemInterruptInformation = 23,
351 SystemExceptionInformation = 33,
352 SystemRegistryQuotaInformation = 37,
353 SystemLookasideInformation = 45
354 } SYSTEM_INFORMATION_CLASS, *PSYSTEM_INFORMATION_CLASS;
356 typedef enum _TIMER_TYPE {
361 typedef enum _THREADINFOCLASS {
362 ThreadBasicInformation,
367 ThreadImpersonationToken,
368 ThreadDescriptorTableEntry,
369 ThreadEnableAlignmentFaultFixup,
370 ThreadEventPair_Reusable,
371 ThreadQuerySetWin32StartAddress,
373 ThreadPerformanceCount,
375 ThreadIdealProcessor,
377 ThreadSetTlsArrayAddress,
382 typedef enum _WINSTATIONINFOCLASS {
383 WinStationInformation = 8
384 } WINSTATIONINFOCLASS;
388 MemoryBasicInformation = 0
389 } MEMORY_INFORMATION_CLASS;
391 /* return type of RtlDetermineDosPathNameType_U (FIXME: not the correct names) */
395 UNC_PATH, /* "//foo" */
396 ABSOLUTE_DRIVE_PATH, /* "c:/foo" */
397 RELATIVE_DRIVE_PATH, /* "c:foo" */
398 ABSOLUTE_PATH, /* "/foo" */
399 RELATIVE_PATH, /* "foo" */
400 DEVICE_PATH, /* "//./foo" */
401 UNC_DOT_PATH /* "//." */
404 /***********************************************************************
405 * IA64 specific types and data structures
410 typedef struct _FRAME_POINTERS {
411 ULONGLONG MemoryStackFp;
412 ULONGLONG BackingStoreFp;
413 } FRAME_POINTERS, *PFRAME_POINTERS;
415 #define UNWIND_HISTORY_TABLE_SIZE 12
417 typedef struct _RUNTIME_FUNCTION {
420 ULONG UnwindInfoAddress;
421 } RUNTIME_FUNCTION, *PRUNTIME_FUNCTION;
423 typedef struct _UNWIND_HISTORY_TABLE_ENTRY {
426 PRUNTIME_FUNCTION FunctionEntry;
427 } UNWIND_HISTORY_TABLE_ENTRY, *PUNWIND_HISTORY_TABLE_ENTRY;
429 typedef struct _UNWIND_HISTORY_TABLE {
434 UNWIND_HISTORY_TABLE_ENTRY Entry[UNWIND_HISTORY_TABLE_SIZE];
435 } UNWIND_HISTORY_TABLE, *PUNWIND_HISTORY_TABLE;
437 #endif /* defined(__ia64__) */
439 /***********************************************************************
440 * Types and data structures
443 /* This is used by NtQuerySystemInformation */
444 /* FIXME: Isn't THREAD_INFO and THREADINFO the same structure? */
446 FILETIME ftCreationTime;
448 DWORD dwStartAddress;
451 DWORD dwCurrentPriority;
452 DWORD dwBasePriority;
453 DWORD dwContextSwitches;
457 } THREADINFO, *PTHREADINFO;
459 /* FIXME: Isn't THREAD_INFO and THREADINFO the same structure? */
460 typedef struct _THREAD_INFO{
467 } THREAD_INFO, PTHREAD_INFO;
469 /***********************************************************************
470 * Types and data structures
473 typedef struct _IO_STATUS_BLOCK {
479 ULONG_PTR Information;
480 } IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
482 typedef void (WINAPI * PIO_APC_ROUTINE)(PVOID,PIO_STATUS_BLOCK,ULONG);
484 typedef struct _KEY_BASIC_INFORMATION {
485 LARGE_INTEGER LastWriteTime;
489 } KEY_BASIC_INFORMATION, *PKEY_BASIC_INFORMATION;
491 typedef struct _KEY_NODE_INFORMATION
493 LARGE_INTEGER LastWriteTime;
500 } KEY_NODE_INFORMATION, *PKEY_NODE_INFORMATION;
502 typedef struct _KEY_FULL_INFORMATION
504 LARGE_INTEGER LastWriteTime;
512 ULONG MaxValueNameLen;
513 ULONG MaxValueDataLen;
515 } KEY_FULL_INFORMATION, *PKEY_FULL_INFORMATION;
517 typedef struct _KEY_VALUE_ENTRY
519 PUNICODE_STRING ValueName;
523 } KEY_VALUE_ENTRY, *PKEY_VALUE_ENTRY;
525 typedef struct _KEY_VALUE_BASIC_INFORMATION {
530 } KEY_VALUE_BASIC_INFORMATION, *PKEY_VALUE_BASIC_INFORMATION;
532 typedef struct _KEY_VALUE_FULL_INFORMATION {
539 } KEY_VALUE_FULL_INFORMATION, *PKEY_VALUE_FULL_INFORMATION;
541 typedef struct _KEY_VALUE_PARTIAL_INFORMATION {
546 } KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION;
548 typedef struct _OBJECT_ATTRIBUTES {
550 HANDLE RootDirectory;
551 PUNICODE_STRING ObjectName;
553 PVOID SecurityDescriptor; /* type SECURITY_DESCRIPTOR */
554 PVOID SecurityQualityOfService; /* type SECURITY_QUALITY_OF_SERVICE */
555 } OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;
557 typedef struct _OBJECT_DATA_INFORMATION {
558 BOOLEAN InheritHandle;
559 BOOLEAN ProtectFromClose;
560 } OBJECT_DATA_INFORMATION, *POBJECT_DATA_INFORMATION;
562 typedef struct _PROCESS_BASIC_INFORMATION {
565 DWORD PebBaseAddress;
568 ULONG UniqueProcessId;
569 ULONG InheritedFromUniqueProcessId;
574 ULONG_PTR UniqueProcessId;
577 } PROCESS_BASIC_INFORMATION, *PPROCESS_BASIC_INFORMATION;
579 typedef struct _PROCESS_INFO {
580 DWORD Offset; /* 00 offset to next PROCESS_INFO ok*/
581 DWORD ThreadCount; /* 04 number of ThreadInfo member ok */
583 FILETIME CreationTime; /* 20 */
585 PWCHAR ProcessName; /* 3c ok */
587 DWORD ProcessID; /* 44 ok*/
588 DWORD ParentProcessID;
590 DWORD Unknown3[2]; /* 50 */
591 ULONG PeakVirtualSize;
593 ULONG PageFaultCount;
594 ULONG PeakWorkingSetSize;
595 ULONG WorkingSetSize;
596 ULONG QuotaPeakPagedPoolUsage;
597 ULONG QuotaPagedPoolUsage;
598 ULONG QuotaPeakNonPagedPoolUsage;
599 ULONG QuotaNonPagedPoolUsage;
601 ULONG PeakPagefileUsage;
604 THREAD_INFO ati[ANYSIZE_ARRAY]; /* 94 size=0x40*/
605 } PROCESS_INFO, PPROCESS_INFO;
607 typedef struct _RTL_HEAP_DEFINITION {
608 ULONG Length; /* = sizeof(RTL_HEAP_DEFINITION) */
611 } RTL_HEAP_DEFINITION, *PRTL_HEAP_DEFINITION;
613 typedef struct tagRTL_BITMAP {
614 ULONG SizeOfBitMap; /* Number of bits in the bitmap */
615 LPBYTE BitMapBuffer; /* Bitmap data, assumed sized to a DWORD boundary */
616 } RTL_BITMAP, *PRTL_BITMAP;
618 typedef const RTL_BITMAP *PCRTL_BITMAP;
620 typedef struct tagRTL_BITMAP_RUN {
621 ULONG StartOfRun; /* Bit position at which run starts - FIXME: Name? */
622 ULONG SizeOfRun; /* Size of the run in bits - FIXME: Name? */
623 } RTL_BITMAP_RUN, *PRTL_BITMAP_RUN;
625 typedef const RTL_BITMAP_RUN *PCRTL_BITMAP_RUN;
627 typedef struct _RTL_RWLOCK {
628 RTL_CRITICAL_SECTION rtlCS;
630 HANDLE hSharedReleaseSemaphore;
633 HANDLE hExclusiveReleaseSemaphore;
634 UINT uExclusiveWaiters;
637 HANDLE hOwningThreadId;
638 DWORD dwTimeoutBoost;
640 } RTL_RWLOCK, *LPRTL_RWLOCK;
642 /* System Information Class 0x00 */
643 typedef struct _SYSTEM_BASIC_INFORMATION {
646 ULONG uKeMaximumIncrement;
648 ULONG uMmNumberOfPhysicalPages;
649 ULONG uMmLowestPhysicalPage;
650 ULONG uMmHighestPhysicalPage;
651 ULONG uAllocationGranularity;
652 PVOID pLowestUserAddress;
653 PVOID pMmHighestUserAddress;
654 ULONG uKeActiveProcessors;
655 BYTE bKeNumberProcessors;
661 CCHAR NumberOfProcessors;
663 } SYSTEM_BASIC_INFORMATION, *PSYSTEM_BASIC_INFORMATION;
665 /* System Information Class 0x15 */
669 ULONG PageFaultCount;
670 ULONG MinimumWorkingSet;
671 ULONG MaximumWorkingSet;
673 } SYSTEM_CACHE_INFORMATION;
675 typedef struct _SYSTEM_CONFIGURATION_INFO {
679 WORD ProcessorArchitecture;
684 PVOID MinimumApplicationAddress;
685 PVOID MaximumApplicationAddress;
686 ULONG ActiveProcessorMask;
687 ULONG NumberOfProcessors;
689 ULONG AllocationGranularity;
691 WORD ProcessorRevision;
692 } SYSTEM_CONFIGURATION_INFO, *PSYSTEM_CONFIGURATION_INFO;
694 /* System Information Class 0x0b */
701 char szName[MAX_PATH + 1];
702 } SYSTEM_DRIVER_INFORMATION;
704 typedef struct _SYSTEM_EXCEPTION_INFORMATION {
706 } SYSTEM_EXCEPTION_INFORMATION, *PSYSTEM_EXCEPTION_INFORMATION;
708 typedef struct _SYSTEM_LOOKASIDE_INFORMATION {
710 } SYSTEM_LOOKASIDE_INFORMATION, *PSYSTEM_LOOKASIDE_INFORMATION;
712 typedef struct _SYSTEM_INTERRUPT_INFORMATION {
714 } SYSTEM_INTERRUPT_INFORMATION, *PSYSTEM_INTERRUPT_INFORMATION;
716 /* System Information Class 0x10 */
719 USHORT dwCreatorBackTraceIndex;
721 BYTE bHandleAttributes;
722 USHORT usHandleOffset;
724 ULONG ulGrantedAccess;
725 } HANDLEINFO, *PHANDLEINFO; /* FIXME: SYSTEM_HANDLE_INFORMATION? */
727 typedef struct _SYSTEM_PERFORMANCE_INFORMATION {
729 } SYSTEM_PERFORMANCE_INFORMATION, *PSYSTEM_PERFORMANCE_INFORMATION;
731 /* System Information Class 0x02 */
732 typedef struct _SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION {
734 LARGE_INTEGER liIdleTime;
737 LARGE_INTEGER IdleTime;
738 LARGE_INTEGER KernelTime;
739 LARGE_INTEGER UserTime;
740 LARGE_INTEGER Reserved1[2];
743 } SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION, *PSYSTEM_PROCESSOR_PERFORMANCE_INFORMATION;
745 /* System Information Class 0x05 */
746 typedef struct _SYSTEM_PROCESS_INFORMATION {
751 FILETIME ftCreationTime;
753 WCHAR *pszProcessName;
754 DWORD dwBasePriority;
756 DWORD dwParentProcessID;
760 DWORD dwVirtualBytesPeak;
761 DWORD dwVirtualBytes;
763 DWORD dwWorkingSetPeak;
768 DWORD dwNonPagedPool;
769 DWORD dwPageFileBytesPeak;
770 DWORD dwPrivateBytes;
771 DWORD dwPageFileBytes;
775 ULONG NextEntryOffset;
778 HANDLE UniqueProcessId;
783 SIZE_T PeakPagefileUsage;
784 SIZE_T PrivatePageCount;
785 LARGE_INTEGER Reserved6[6];
787 } SYSTEM_PROCESS_INFORMATION, *PSYSTEM_PROCESS_INFORMATION;
789 typedef struct _SYSTEM_REGISTRY_QUOTA_INFORMATION {
790 ULONG RegistryQuotaAllowed;
791 ULONG RegistryQuotaUsed;
793 } SYSTEM_REGISTRY_QUOTA_INFORMATION, *PSYSTEM_REGISTRY_QUOTA_INFORMATION;
795 typedef struct _SYSTEM_TIME_ADJUSTMENT {
796 ULONG TimeAdjustment;
797 BOOLEAN TimeAdjustmentDisabled;
798 } SYSTEM_TIME_ADJUSTMENT, *PSYSTEM_TIME_ADJUSTMENT;
800 /* System Information Class 0x03 */
801 typedef struct _SYSTEM_TIMEOFDAY_INFORMATION {
803 LARGE_INTEGER liKeBootTime;
804 LARGE_INTEGER liKeSystemTime;
805 LARGE_INTEGER liExpTimeZoneBias;
806 ULONG uCurrentTimeZoneId;
811 } SYSTEM_TIMEOFDAY_INFORMATION, *PSYSTEM_TIMEOFDAY_INFORMATION; /* was SYSTEM_TIME_INFORMATION */
813 typedef struct _TIME_FIELDS
822 } TIME_FIELDS, *PTIME_FIELDS;
824 typedef struct _WINSTATIONINFORMATIONW {
827 BYTE Reserved3[1140];
828 } WINSTATIONINFORMATIONW, *PWINSTATIONINFORMATIONW;
830 typedef struct _VM_COUNTERS_ {
831 ULONG PeakVirtualSize;
833 ULONG PageFaultCount;
834 ULONG PeakWorkingSetSize;
835 ULONG WorkingSetSize;
836 ULONG QuotaPeakPagedPoolUsage;
837 ULONG QuotaPagedPoolUsage;
838 ULONG QuotaPeakNonPagedPoolUsage;
839 ULONG QuotaNonPagedPoolUsage;
841 ULONG PeakPagefileUsage;
842 } VM_COUNTERS, *PVM_COUNTERS;
844 typedef BOOLEAN (WINAPI * PWINSTATIONQUERYINFORMATIONW)(HANDLE,ULONG,WINSTATIONINFOCLASS,PVOID,ULONG,PULONG);
846 typedef struct _LDR_RESOURCE_INFO
851 } LDR_RESOURCE_INFO, *PLDR_RESOURCE_INFO;
853 /***********************************************************************
857 /* flags for NtCreateFile and NtOpenFile */
858 #define FILE_DIRECTORY_FLAG 0x00000001
859 #define FILE_WRITE_THROUGH 0x00000002
860 #define FILE_SEQUENTIAL_ONLY 0x00000004
861 #define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008
862 #define FILE_SYNCHRONOUS_IO_ALERT 0x00000010
863 #define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020
864 #define FILE_NON_DIRECTORY_FILE 0x00000040
865 #define FILE_CREATE_TREE_CONNECTION 0x00000080
867 /* status for NtCreateFile or NtOpenFile */
868 #define FILE_SUPERSEDED 0x00000000
869 #define FILE_OPENED 0x00000001
870 #define FILE_CREATED 0x00000002
871 #define FILE_OVERWRITTEN 0x00000003
872 #define FILE_EXISTS 0x00000004
873 #define FILE_DOES_NOT_EXIST 0x00000005
875 #if (_WIN32_WINNT >= 0x0501)
876 #define INTERNAL_TS_ACTIVE_CONSOLE_ID ( *((volatile ULONG*)(0x7ffe02d8)) )
877 #endif /* (_WIN32_WINNT >= 0x0501) */
879 #define LOGONID_CURRENT ((ULONG)-1)
881 #define OBJ_INHERIT 0x00000002L
882 #define OBJ_PERMANENT 0x00000010L
883 #define OBJ_EXCLUSIVE 0x00000020L
884 #define OBJ_CASE_INSENSITIVE 0x00000040L
885 #define OBJ_OPENIF 0x00000080L
886 #define OBJ_OPENLINK 0x00000100L
887 #define OBJ_KERNEL_HANDLE 0x00000200L
888 #define OBJ_VALID_ATTRIBUTES 0x000003F2L
890 #define SERVERNAME_CURRENT ((HANDLE)NULL)
892 typedef void (CALLBACK *PNTAPCFUNC)(ULONG_PTR,ULONG_PTR,ULONG_PTR); /* FIXME: not the right name */
894 /***********************************************************************
895 * Function declarations
898 extern LPSTR _strlwr(LPSTR str); /* FIXME: Doesn't belong here */
899 extern LPSTR _strupr(LPSTR str); /* FIXME: Doesn't belong here */
901 #if defined(__i386__) && defined(__GNUC__)
902 static inline void WINAPI DbgBreakPoint(void) { __asm__ __volatile__("int3"); }
903 static inline void WINAPI DbgUserBreakPoint(void) { __asm__ __volatile__("int3"); }
904 #else /* __i386__ && __GNUC__ */
905 void WINAPI DbgBreakPoint(void);
906 void WINAPI DbgUserBreakPoint(void);
907 #endif /* __i386__ && __GNUC__ */
908 void WINAPIV DbgPrint(LPCSTR fmt, ...);
910 NTSTATUS WINAPI LdrAccessResource(HMODULE,const IMAGE_RESOURCE_DATA_ENTRY*,void**,PULONG);
911 NTSTATUS WINAPI LdrFindResourceDirectory_U(HMODULE,const LDR_RESOURCE_INFO*,ULONG,const IMAGE_RESOURCE_DIRECTORY**);
912 NTSTATUS WINAPI LdrFindResource_U(HMODULE,const LDR_RESOURCE_INFO*,ULONG,const IMAGE_RESOURCE_DATA_ENTRY**);
913 void WINAPI LdrShutdownProcess(void);
914 void WINAPI LdrShutdownThread(void);
915 NTSTATUS WINAPI NtAccessCheck(PSECURITY_DESCRIPTOR,HANDLE,ACCESS_MASK,PGENERIC_MAPPING,PPRIVILEGE_SET,PULONG,PULONG,PBOOLEAN);
916 NTSTATUS WINAPI NtAdjustPrivilegesToken(HANDLE,BOOLEAN,PTOKEN_PRIVILEGES,DWORD,PTOKEN_PRIVILEGES,PDWORD);
917 NTSTATUS WINAPI NtAllocateVirtualMemory(HANDLE,PVOID*,PVOID,ULONG*,ULONG,ULONG);
918 NTSTATUS WINAPI NtCancelTimer(HANDLE, BOOLEAN*);
919 NTSTATUS WINAPI NtClearEvent(HANDLE);
920 NTSTATUS WINAPI NtClose(HANDLE);
921 NTSTATUS WINAPI NtCreateEvent(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES *,BOOLEAN,BOOLEAN);
922 NTSTATUS WINAPI NtCreateFile(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,PLARGE_INTEGER,ULONG,ULONG,ULONG,ULONG,PVOID,ULONG);
923 NTSTATUS WINAPI NtCreateKey(PHKEY,ACCESS_MASK,const OBJECT_ATTRIBUTES*,ULONG,const UNICODE_STRING*,ULONG,PULONG);
924 NTSTATUS WINAPI NtCreateSection(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,const LARGE_INTEGER*,ULONG,ULONG,HANDLE);
925 NTSTATUS WINAPI NtCreateSemaphore(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*,ULONG,ULONG);
926 NTSTATUS WINAPI NtCreateTimer(HANDLE*, ACCESS_MASK, const OBJECT_ATTRIBUTES*, TIMER_TYPE);
927 NTSTATUS WINAPI NtDeleteKey(HKEY);
928 NTSTATUS WINAPI NtDeleteValueKey(HKEY,const UNICODE_STRING *);
929 NTSTATUS WINAPI NtDeviceIoControlFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,PVOID,ULONG,PVOID,ULONG);
930 NTSTATUS WINAPI NtDuplicateObject(HANDLE,HANDLE,HANDLE,PHANDLE,ACCESS_MASK,ULONG,ULONG);
931 NTSTATUS WINAPI NtEnumerateKey(HKEY,ULONG,KEY_INFORMATION_CLASS,void *,DWORD,DWORD *);
932 NTSTATUS WINAPI NtEnumerateValueKey(HKEY,ULONG,KEY_VALUE_INFORMATION_CLASS,PVOID,ULONG,PULONG);
933 NTSTATUS WINAPI NtFlushBuffersFile(HANDLE,IO_STATUS_BLOCK*);
934 NTSTATUS WINAPI NtFlushKey(HKEY);
935 NTSTATUS WINAPI NtFlushVirtualMemory(HANDLE,LPCVOID*,ULONG*,ULONG);
936 NTSTATUS WINAPI NtFreeVirtualMemory(HANDLE,PVOID*,ULONG*,ULONG);
937 NTSTATUS WINAPI NtGetContextThread(HANDLE,CONTEXT*);
938 NTSTATUS WINAPI NtLoadKey(const OBJECT_ATTRIBUTES *,const OBJECT_ATTRIBUTES *);
939 NTSTATUS WINAPI NtLockVirtualMemory(HANDLE,PVOID*,ULONG*,ULONG);
940 NTSTATUS WINAPI NtMapViewOfSection(HANDLE,HANDLE,PVOID*,ULONG,ULONG,const LARGE_INTEGER*,ULONG*,SECTION_INHERIT,ULONG,ULONG);
941 NTSTATUS WINAPI NtNotifyChangeKey(HKEY,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,BOOLEAN,PVOID,ULONG,BOOLEAN);
942 NTSTATUS WINAPI NtOpenEvent(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES *);
943 NTSTATUS WINAPI NtOpenFile(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,ULONG,ULONG);
944 NTSTATUS WINAPI NtOpenKey(PHKEY,ACCESS_MASK,const OBJECT_ATTRIBUTES *);
945 NTSTATUS WINAPI NtOpenProcessToken(HANDLE,DWORD,HANDLE *);
946 NTSTATUS WINAPI NtOpenSection(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*);
947 NTSTATUS WINAPI NtOpenThread(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,const CLIENT_ID*);
948 NTSTATUS WINAPI NtOpenThreadToken(HANDLE,DWORD,BOOLEAN,HANDLE *);
949 NTSTATUS WINAPI NtOpenTimer(HANDLE*, ACCESS_MASK, const OBJECT_ATTRIBUTES*);
950 NTSTATUS WINAPI NtProtectVirtualMemory(HANDLE,PVOID*,ULONG*,ULONG,ULONG*);
951 NTSTATUS WINAPI NtPulseEvent(HANDLE,PULONG);
952 NTSTATUS WINAPI NtQueueApcThread(HANDLE,PNTAPCFUNC,ULONG_PTR,ULONG_PTR,ULONG_PTR);
953 NTSTATUS WINAPI NtQueryDefaultLocale(BOOLEAN,LCID*);
954 NTSTATUS WINAPI NtQueryInformationProcess(HANDLE,PROCESSINFOCLASS,PVOID,ULONG,PULONG);
955 NTSTATUS WINAPI NtQueryInformationThread(HANDLE,THREADINFOCLASS,PVOID,ULONG,PULONG);
956 NTSTATUS WINAPI NtQueryInformationToken(HANDLE,DWORD,LPVOID,DWORD,LPDWORD);
957 NTSTATUS WINAPI NtQueryKey(HKEY,KEY_INFORMATION_CLASS,void *,DWORD,DWORD *);
958 NTSTATUS WINAPI NtQueryMultipleValueKey(HKEY,PVALENTW,ULONG,PVOID,ULONG,PULONG);
959 NTSTATUS WINAPI NtQueryObject(HANDLE, OBJECT_INFORMATION_CLASS, PVOID, ULONG, PULONG);
960 NTSTATUS WINAPI NtQuerySecurityObject(HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,ULONG,PULONG);
961 NTSTATUS WINAPI NtQuerySystemInformation(SYSTEM_INFORMATION_CLASS,PVOID,ULONG,PULONG);
962 NTSTATUS WINAPI NtQuerySystemTime(PLARGE_INTEGER);
963 NTSTATUS WINAPI NtQueryValueKey(HKEY,const UNICODE_STRING *,KEY_VALUE_INFORMATION_CLASS,void *,DWORD,DWORD *);
964 NTSTATUS WINAPI NtQueryVirtualMemory(HANDLE,LPCVOID,MEMORY_INFORMATION_CLASS,PVOID,ULONG,ULONG*);
965 void WINAPI NtRaiseException(PEXCEPTION_RECORD,PCONTEXT,BOOL);
966 NTSTATUS WINAPI NtReadFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,PVOID,ULONG,PLARGE_INTEGER,PULONG);
967 NTSTATUS WINAPI NtReleaseSemaphore(HANDLE,ULONG,PULONG);
968 NTSTATUS WINAPI NtReplaceKey(POBJECT_ATTRIBUTES,HKEY,POBJECT_ATTRIBUTES);
969 NTSTATUS WINAPI NtResetEvent(HANDLE,PULONG);
970 NTSTATUS WINAPI NtRestoreKey(HKEY,HANDLE,ULONG);
971 NTSTATUS WINAPI NtResumeThread(HANDLE,PULONG);
972 NTSTATUS WINAPI NtSaveKey(HKEY,HANDLE);
973 NTSTATUS WINAPI NtSetContextThread(HANDLE,const CONTEXT*);
974 NTSTATUS WINAPI NtSetDefaultLocale(BOOLEAN,LCID);
975 NTSTATUS WINAPI NtSetEvent(HANDLE,PULONG);
976 NTSTATUS WINAPI NtSetInformationKey(HKEY,const int,PVOID,ULONG);
977 NTSTATUS WINAPI NtSetInformationObject(HANDLE, OBJECT_INFORMATION_CLASS, PVOID, ULONG);
978 NTSTATUS WINAPI NtSetSecurityObject(HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR);
979 NTSTATUS WINAPI NtSetSystemTime(const LARGE_INTEGER*,LARGE_INTEGER*);
980 NTSTATUS WINAPI NtSetTimer(HANDLE, const LARGE_INTEGER*, PTIMERAPCROUTINE, PVOID, BOOLEAN, ULONG, BOOLEAN*);
981 NTSTATUS WINAPI NtSetValueKey(HKEY,const UNICODE_STRING *,ULONG,ULONG,const void *,ULONG);
982 NTSTATUS WINAPI NtSuspendThread(HANDLE,PULONG);
983 NTSTATUS WINAPI NtTerminateProcess(HANDLE,LONG);
984 NTSTATUS WINAPI NtTerminateThread(HANDLE,LONG);
985 NTSTATUS WINAPI NtUnloadKey(HKEY);
986 NTSTATUS WINAPI NtUnlockVirtualMemory(HANDLE,PVOID*,ULONG*,ULONG);
987 NTSTATUS WINAPI NtUnmapViewOfSection(HANDLE,PVOID);
988 NTSTATUS WINAPI NtWaitForSingleObject(HANDLE,BOOLEAN,PLARGE_INTEGER);
989 NTSTATUS WINAPI NtWaitForMultipleObjects(ULONG,const HANDLE*,BOOLEAN,BOOLEAN,PLARGE_INTEGER);
991 void WINAPI RtlAcquirePebLock(void);
992 BYTE WINAPI RtlAcquireResourceExclusive(LPRTL_RWLOCK,BYTE);
993 BYTE WINAPI RtlAcquireResourceShared(LPRTL_RWLOCK,BYTE);
994 NTSTATUS WINAPI RtlAddAce(PACL,DWORD,DWORD,PACE_HEADER,DWORD);
995 NTSTATUS WINAPI RtlAddAccessAllowedAce(PACL,DWORD,DWORD,PSID);
996 NTSTATUS WINAPI RtlAddAccessAllowedAceEx(PACL,DWORD,DWORD,DWORD,PSID);
997 NTSTATUS WINAPI RtlAddAccessDeniedAce(PACL,DWORD,DWORD,PSID);
998 NTSTATUS WINAPI RtlAddAccessDeniedAceEx(PACL,DWORD,DWORD,DWORD,PSID);
999 DWORD WINAPI RtlAdjustPrivilege(DWORD,DWORD,DWORD,DWORD);
1000 BOOLEAN WINAPI RtlAllocateAndInitializeSid(PSID_IDENTIFIER_AUTHORITY,BYTE,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,PSID *);
1001 PVOID WINAPI RtlAllocateHeap(HANDLE,ULONG,ULONG);
1002 DWORD WINAPI RtlAnsiStringToUnicodeSize(const STRING *);
1003 NTSTATUS WINAPI RtlAnsiStringToUnicodeString(PUNICODE_STRING,PCANSI_STRING,BOOLEAN);
1004 NTSTATUS WINAPI RtlAppendAsciizToString(STRING *,LPCSTR);
1005 NTSTATUS WINAPI RtlAppendStringToString(STRING *,const STRING *);
1006 NTSTATUS WINAPI RtlAppendUnicodeStringToString(UNICODE_STRING *,const UNICODE_STRING *);
1007 NTSTATUS WINAPI RtlAppendUnicodeToString(UNICODE_STRING *,LPCWSTR);
1008 BOOLEAN WINAPI RtlAreAllAccessesGranted(ACCESS_MASK,ACCESS_MASK);
1009 BOOLEAN WINAPI RtlAreAnyAccessesGranted(ACCESS_MASK,ACCESS_MASK);
1010 BOOLEAN WINAPI RtlAreBitsSet(PCRTL_BITMAP,ULONG,ULONG);
1011 BOOLEAN WINAPI RtlAreBitsClear(PCRTL_BITMAP,ULONG,ULONG);
1013 NTSTATUS WINAPI RtlCharToInteger(PCSZ,ULONG,PULONG);
1014 void WINAPI RtlClearAllBits(PRTL_BITMAP);
1015 void WINAPI RtlClearBits(PRTL_BITMAP,ULONG,ULONG);
1016 ULONG WINAPI RtlCompactHeap(HANDLE,ULONG);
1017 LONG WINAPI RtlCompareString(const STRING*,const STRING*,BOOLEAN);
1018 LONG WINAPI RtlCompareUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
1019 DWORD WINAPI RtlComputeCrc32(DWORD,PBYTE,INT);
1020 NTSTATUS WINAPI RtlConvertSidToUnicodeString(PUNICODE_STRING,PSID,BOOLEAN);
1021 LONGLONG WINAPI RtlConvertLongToLargeInteger(LONG);
1022 ULONGLONG WINAPI RtlConvertUlongToLargeInteger(ULONG);
1023 void WINAPI RtlCopyLuid(PLUID,const LUID*);
1024 void WINAPI RtlCopyLuidAndAttributesArray(ULONG,const LUID_AND_ATTRIBUTES*,PLUID_AND_ATTRIBUTES);
1025 DWORD WINAPI RtlCopySid(DWORD,PSID,PSID);
1026 void WINAPI RtlCopyString(STRING*,const STRING*);
1027 void WINAPI RtlCopyUnicodeString(UNICODE_STRING*,const UNICODE_STRING*);
1028 NTSTATUS WINAPI RtlCreateAcl(PACL,DWORD,DWORD);
1029 NTSTATUS WINAPI RtlCreateEnvironment(BOOLEAN, PWSTR*);
1030 HANDLE WINAPI RtlCreateHeap(ULONG,PVOID,ULONG,ULONG,PVOID,PRTL_HEAP_DEFINITION);
1031 NTSTATUS WINAPI RtlCreateSecurityDescriptor(PSECURITY_DESCRIPTOR,DWORD);
1032 BOOLEAN WINAPI RtlCreateUnicodeString(PUNICODE_STRING,LPCWSTR);
1033 BOOLEAN WINAPI RtlCreateUnicodeStringFromAsciiz(PUNICODE_STRING,LPCSTR);
1035 NTSTATUS WINAPI RtlDeleteCriticalSection(RTL_CRITICAL_SECTION *);
1036 void WINAPI RtlDeleteResource(LPRTL_RWLOCK);
1037 DWORD WINAPI RtlDeleteSecurityObject(DWORD);
1038 NTSTATUS WINAPI RtlDestroyEnvironment(PWSTR);
1039 HANDLE WINAPI RtlDestroyHeap(HANDLE);
1040 DOS_PATHNAME_TYPE WINAPI RtlDetermineDosPathNameType_U(PCWSTR);
1041 BOOLEAN WINAPI RtlDoesFileExists_U(LPCWSTR);
1042 BOOLEAN WINAPI RtlDosPathNameToNtPathName_U(LPWSTR,PUNICODE_STRING,PWSTR*,CURDIR*);
1043 ULONG WINAPI RtlDosSearchPath_U(LPCWSTR, LPCWSTR, LPCWSTR, ULONG, LPWSTR, LPWSTR*);
1044 WCHAR WINAPI RtlDowncaseUnicodeChar(WCHAR);
1045 NTSTATUS WINAPI RtlDowncaseUnicodeString(UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
1046 void WINAPI RtlDumpResource(LPRTL_RWLOCK);
1047 NTSTATUS WINAPI RtlDuplicateUnicodeString(int,const UNICODE_STRING*,UNICODE_STRING*);
1049 LONGLONG WINAPI RtlEnlargedIntegerMultiply(INT,INT);
1050 ULONGLONG WINAPI RtlEnlargedUnsignedMultiply(UINT,UINT);
1051 UINT WINAPI RtlEnlargedUnsignedDivide(ULONGLONG,UINT,UINT *);
1052 NTSTATUS WINAPI RtlEnterCriticalSection(RTL_CRITICAL_SECTION *);
1053 void WINAPI RtlEraseUnicodeString(UNICODE_STRING*);
1054 NTSTATUS WINAPI RtlEqualComputerName(const UNICODE_STRING*,const UNICODE_STRING*);
1055 NTSTATUS WINAPI RtlEqualDomainName(const UNICODE_STRING*,const UNICODE_STRING*);
1056 BOOLEAN WINAPI RtlEqualLuid(const LUID*,const LUID*);
1057 BOOL WINAPI RtlEqualPrefixSid(PSID,PSID);
1058 BOOL WINAPI RtlEqualSid(PSID,PSID);
1059 BOOLEAN WINAPI RtlEqualString(const STRING*,const STRING*,BOOLEAN);
1060 BOOLEAN WINAPI RtlEqualUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
1061 NTSTATUS WINAPI RtlExpandEnvironmentStrings_U(PWSTR, const UNICODE_STRING*, UNICODE_STRING*, ULONG*);
1062 LONGLONG WINAPI RtlExtendedMagicDivide(LONGLONG,LONGLONG,INT);
1063 LONGLONG WINAPI RtlExtendedIntegerMultiply(LONGLONG,INT);
1064 LONGLONG WINAPI RtlExtendedLargeIntegerDivide(LONGLONG,INT,INT *);
1066 NTSTATUS WINAPI RtlFindCharInUnicodeString(int,const UNICODE_STRING*,const UNICODE_STRING*,USHORT*);
1067 ULONG WINAPI RtlFindClearBits(PCRTL_BITMAP,ULONG,ULONG);
1068 ULONG WINAPI RtlFindClearBitsAndSet(PRTL_BITMAP,ULONG,ULONG);
1069 ULONG WINAPI RtlFindClearRuns(PCRTL_BITMAP,PRTL_BITMAP_RUN,ULONG,BOOLEAN);
1070 ULONG WINAPI RtlFindLastBackwardRunSet(PCRTL_BITMAP,ULONG,PULONG);
1071 ULONG WINAPI RtlFindLastBackwardRunClear(PCRTL_BITMAP,ULONG,PULONG);
1072 CCHAR WINAPI RtlFindLeastSignificantBit(ULONGLONG);
1073 ULONG WINAPI RtlFindLongestRunSet(PCRTL_BITMAP,PULONG);
1074 ULONG WINAPI RtlFindLongestRunClear(PCRTL_BITMAP,PULONG);
1075 NTSTATUS WINAPI RtlFindMessage(HMODULE,ULONG,ULONG,ULONG,const MESSAGE_RESOURCE_ENTRY**);
1076 CCHAR WINAPI RtlFindMostSignificantBit(ULONGLONG);
1077 ULONG WINAPI RtlFindNextForwardRunSet(PCRTL_BITMAP,ULONG,PULONG);
1078 ULONG WINAPI RtlFindNextForwardRunClear(PCRTL_BITMAP,ULONG,PULONG);
1079 ULONG WINAPI RtlFindSetBits(PCRTL_BITMAP,ULONG,ULONG);
1080 ULONG WINAPI RtlFindSetBitsAndClear(PRTL_BITMAP,ULONG,ULONG);
1081 ULONG WINAPI RtlFindSetRuns(PCRTL_BITMAP,PRTL_BITMAP_RUN,ULONG,BOOLEAN);
1082 BOOLEAN WINAPI RtlFirstFreeAce(PACL,PACE_HEADER *);
1083 NTSTATUS WINAPI RtlFormatCurrentUserKeyPath(PUNICODE_STRING);
1084 void WINAPI RtlFreeAnsiString(PANSI_STRING);
1085 BOOLEAN WINAPI RtlFreeHeap(HANDLE,ULONG,PVOID);
1086 void WINAPI RtlFreeOemString(POEM_STRING);
1087 DWORD WINAPI RtlFreeSid(PSID);
1088 void WINAPI RtlFreeUnicodeString(PUNICODE_STRING);
1090 DWORD WINAPI RtlGetAce(PACL,DWORD,LPVOID *);
1091 NTSTATUS WINAPI RtlGetControlSecurityDescriptor(PSECURITY_DESCRIPTOR, PSECURITY_DESCRIPTOR_CONTROL,LPDWORD);
1092 NTSTATUS WINAPI RtlGetCurrentDirectory_U(ULONG, LPWSTR);
1093 NTSTATUS WINAPI RtlGetDaclSecurityDescriptor(PSECURITY_DESCRIPTOR,PBOOLEAN,PACL *,PBOOLEAN);
1094 ULONG WINAPI RtlGetFullPathName_U(PCWSTR,ULONG,PWSTR,PWSTR*);
1095 NTSTATUS WINAPI RtlGetGroupSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID *,PBOOLEAN);
1096 DWORD WINAPI RtlGetLongestNtPathLength(void);
1097 BOOLEAN WINAPI RtlGetNtProductType(LPDWORD);
1098 NTSTATUS WINAPI RtlGetOwnerSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID *,PBOOLEAN);
1099 ULONG WINAPI RtlGetProcessHeaps(ULONG,HANDLE*);
1100 NTSTATUS WINAPI RtlGetSaclSecurityDescriptor(PSECURITY_DESCRIPTOR,PBOOLEAN,PACL *,PBOOLEAN);
1102 PSID_IDENTIFIER_AUTHORITY WINAPI RtlIdentifierAuthoritySid(PSID);
1103 PVOID WINAPI RtlImageDirectoryEntryToData(HMODULE,BOOL,WORD,ULONG *);
1104 PIMAGE_NT_HEADERS WINAPI RtlImageNtHeader(HMODULE);
1105 PIMAGE_SECTION_HEADER WINAPI RtlImageRvaToSection(const IMAGE_NT_HEADERS *,HMODULE,DWORD);
1106 PVOID WINAPI RtlImageRvaToVa(const IMAGE_NT_HEADERS *,HMODULE,DWORD,IMAGE_SECTION_HEADER **);
1107 BOOL WINAPI RtlImpersonateSelf(SECURITY_IMPERSONATION_LEVEL);
1108 void WINAPI RtlInitString(PSTRING,PCSZ);
1109 void WINAPI RtlInitAnsiString(PANSI_STRING,PCSZ);
1110 void WINAPI RtlInitUnicodeString(PUNICODE_STRING,PCWSTR);
1111 NTSTATUS WINAPI RtlInitUnicodeStringEx(PUNICODE_STRING,PCWSTR);
1112 NTSTATUS WINAPI RtlInitializeCriticalSection(RTL_CRITICAL_SECTION *);
1113 NTSTATUS WINAPI RtlInitializeCriticalSectionAndSpinCount(RTL_CRITICAL_SECTION *,DWORD);
1114 void WINAPI RtlInitializeBitMap(PRTL_BITMAP,LPBYTE,ULONG);
1115 void WINAPI RtlInitializeResource(LPRTL_RWLOCK);
1116 BOOL WINAPI RtlInitializeSid(PSID,PSID_IDENTIFIER_AUTHORITY,BYTE);
1118 NTSTATUS WINAPI RtlInt64ToUnicodeString(ULONGLONG,ULONG,UNICODE_STRING *);
1119 NTSTATUS WINAPI RtlIntegerToChar(ULONG,ULONG,ULONG,PCHAR);
1120 NTSTATUS WINAPI RtlIntegerToUnicodeString(ULONG,ULONG,UNICODE_STRING *);
1121 ULONG WINAPI RtlIsDosDeviceName_U(PCWSTR);
1122 BOOLEAN WINAPI RtlIsNameLegalDOS8Dot3(const UNICODE_STRING*,POEM_STRING,PBOOLEAN);
1123 DWORD WINAPI RtlIsTextUnicode(LPVOID,DWORD,DWORD *);
1125 LONGLONG WINAPI RtlLargeIntegerAdd(LONGLONG,LONGLONG);
1126 LONGLONG WINAPI RtlLargeIntegerArithmeticShift(LONGLONG,INT);
1127 ULONGLONG WINAPI RtlLargeIntegerDivide( ULONGLONG,ULONGLONG,ULONGLONG *);
1128 LONGLONG WINAPI RtlLargeIntegerNegate(LONGLONG);
1129 LONGLONG WINAPI RtlLargeIntegerShiftLeft(LONGLONG,INT);
1130 LONGLONG WINAPI RtlLargeIntegerShiftRight(LONGLONG,INT);
1131 LONGLONG WINAPI RtlLargeIntegerSubtract(LONGLONG,LONGLONG);
1132 NTSTATUS WINAPI RtlLargeIntegerToChar(const ULONGLONG *,ULONG,ULONG,PCHAR);
1133 NTSTATUS WINAPI RtlLeaveCriticalSection(RTL_CRITICAL_SECTION *);
1134 DWORD WINAPI RtlLengthRequiredSid(DWORD);
1135 ULONG WINAPI RtlLengthSecurityDescriptor(PSECURITY_DESCRIPTOR);
1136 DWORD WINAPI RtlLengthSid(PSID);
1137 NTSTATUS WINAPI RtlLocalTimeToSystemTime(const LARGE_INTEGER*,PLARGE_INTEGER);
1138 BOOLEAN WINAPI RtlLockHeap(HANDLE);
1140 NTSTATUS WINAPI RtlMakeSelfRelativeSD(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,LPDWORD);
1141 void WINAPI RtlMapGenericMask(PACCESS_MASK,const GENERIC_MAPPING*);
1142 NTSTATUS WINAPI RtlMultiByteToUnicodeN(LPWSTR,DWORD,LPDWORD,LPCSTR,DWORD);
1143 NTSTATUS WINAPI RtlMultiByteToUnicodeSize(DWORD*,LPCSTR,UINT);
1145 DWORD WINAPI RtlNewSecurityObject(DWORD,DWORD,DWORD,DWORD,DWORD,DWORD);
1146 LPVOID WINAPI RtlNormalizeProcessParams(LPVOID);
1147 ULONG WINAPI RtlNtStatusToDosError(NTSTATUS);
1148 ULONG WINAPI RtlNumberOfSetBits(PCRTL_BITMAP);
1149 ULONG WINAPI RtlNumberOfClearBits(PCRTL_BITMAP);
1151 UINT WINAPI RtlOemStringToUnicodeSize(const STRING*);
1152 NTSTATUS WINAPI RtlOemStringToUnicodeString(UNICODE_STRING*,const STRING*,BOOLEAN);
1153 NTSTATUS WINAPI RtlOemToUnicodeN(LPWSTR,DWORD,LPDWORD,LPCSTR,DWORD);
1154 DWORD WINAPI RtlOpenCurrentUser(ACCESS_MASK,PHKEY);
1156 BOOLEAN WINAPI RtlPrefixString(const STRING*,const STRING*,BOOLEAN);
1157 BOOLEAN WINAPI RtlPrefixUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
1159 NTSTATUS WINAPI RtlQueryEnvironmentVariable_U(PWSTR,PUNICODE_STRING,PUNICODE_STRING);
1160 NTSTATUS WINAPI RtlQueryTimeZoneInformation(LPTIME_ZONE_INFORMATION);
1162 void WINAPI RtlRaiseException(PEXCEPTION_RECORD);
1163 void WINAPI RtlRaiseStatus(NTSTATUS);
1164 ULONG WINAPI RtlRandom(PULONG);
1165 PVOID WINAPI RtlReAllocateHeap(HANDLE,ULONG,PVOID,ULONG);
1166 void WINAPI RtlReleasePebLock(void);
1167 void WINAPI RtlReleaseResource(LPRTL_RWLOCK);
1169 void WINAPI RtlSecondsSince1970ToTime(DWORD,LARGE_INTEGER *);
1170 void WINAPI RtlSecondsSince1980ToTime(DWORD,LARGE_INTEGER *);
1171 void WINAPI RtlSetAllBits(PRTL_BITMAP);
1172 void WINAPI RtlSetBits(PRTL_BITMAP,ULONG,ULONG);
1173 NTSTATUS WINAPI RtlSetCurrentDirectory_U(const UNICODE_STRING*);
1174 void WINAPI RtlSetCurrentEnvironment(PWSTR, PWSTR*);
1175 NTSTATUS WINAPI RtlSetDaclSecurityDescriptor(PSECURITY_DESCRIPTOR,BOOLEAN,PACL,BOOLEAN);
1176 NTSTATUS WINAPI RtlSetEnvironmentVariable(PWSTR*,PUNICODE_STRING,PUNICODE_STRING);
1177 NTSTATUS WINAPI RtlSetOwnerSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID,BOOLEAN);
1178 NTSTATUS WINAPI RtlSetGroupSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID,BOOLEAN);
1179 NTSTATUS WINAPI RtlSetSaclSecurityDescriptor(PSECURITY_DESCRIPTOR,BOOLEAN,PACL,BOOLEAN);
1180 NTSTATUS WINAPI RtlSetTimeZoneInformation(const TIME_ZONE_INFORMATION*);
1181 ULONG WINAPI RtlSizeHeap(HANDLE,ULONG,PVOID);
1182 LPDWORD WINAPI RtlSubAuthoritySid(PSID,DWORD);
1183 LPBYTE WINAPI RtlSubAuthorityCountSid(PSID);
1184 NTSTATUS WINAPI RtlSystemTimeToLocalTime(const LARGE_INTEGER*,PLARGE_INTEGER);
1186 void WINAPI RtlTimeToTimeFields(const LARGE_INTEGER*,PTIME_FIELDS);
1187 BOOLEAN WINAPI RtlTimeFieldsToTime(PTIME_FIELDS,PLARGE_INTEGER);
1188 void WINAPI RtlTimeToElapsedTimeFields(const LARGE_INTEGER *,PTIME_FIELDS);
1189 BOOLEAN WINAPI RtlTimeToSecondsSince1970(const LARGE_INTEGER *,PULONG);
1190 BOOLEAN WINAPI RtlTimeToSecondsSince1980(const LARGE_INTEGER *,LPDWORD);
1191 BOOL WINAPI RtlTryEnterCriticalSection(RTL_CRITICAL_SECTION *);
1193 ULONGLONG __cdecl RtlUlonglongByteSwap(ULONGLONG);
1194 DWORD WINAPI RtlUnicodeStringToAnsiSize(const UNICODE_STRING*);
1195 NTSTATUS WINAPI RtlUnicodeStringToAnsiString(PANSI_STRING,PCUNICODE_STRING,BOOLEAN);
1196 NTSTATUS WINAPI RtlUnicodeStringToInteger(const UNICODE_STRING *,ULONG,ULONG *);
1197 DWORD WINAPI RtlUnicodeStringToOemSize(const UNICODE_STRING*);
1198 NTSTATUS WINAPI RtlUnicodeStringToOemString(POEM_STRING,PCUNICODE_STRING,BOOLEAN);
1199 NTSTATUS WINAPI RtlUnicodeToMultiByteN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
1200 NTSTATUS WINAPI RtlUnicodeToMultiByteSize(PULONG,PCWSTR,ULONG);
1201 NTSTATUS WINAPI RtlUnicodeToOemN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
1202 ULONG WINAPI RtlUniform(PULONG);
1203 BOOLEAN WINAPI RtlUnlockHeap(HANDLE);
1204 void WINAPI RtlUnwind(PVOID,PVOID,PEXCEPTION_RECORD,PVOID);
1206 void WINAPI RtlUnwind2(FRAME_POINTERS,PVOID,PEXCEPTION_RECORD,PVOID,PCONTEXT);
1207 void WINAPI RtlUnwindEx(FRAME_POINTERS,PVOID,PEXCEPTION_RECORD,PVOID,PCONTEXT,PUNWIND_HISTORY_TABLE);
1209 WCHAR WINAPI RtlUpcaseUnicodeChar(WCHAR);
1210 NTSTATUS WINAPI RtlUpcaseUnicodeString(UNICODE_STRING*,const UNICODE_STRING *,BOOLEAN);
1211 NTSTATUS WINAPI RtlUpcaseUnicodeStringToAnsiString(STRING*,const UNICODE_STRING*,BOOLEAN);
1212 NTSTATUS WINAPI RtlUpcaseUnicodeStringToCountedOemString(STRING*,const UNICODE_STRING*,BOOLEAN);
1213 NTSTATUS WINAPI RtlUpcaseUnicodeStringToOemString(STRING*,const UNICODE_STRING*,BOOLEAN);
1214 NTSTATUS WINAPI RtlUpcaseUnicodeToMultiByteN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
1215 NTSTATUS WINAPI RtlUpcaseUnicodeToOemN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
1216 CHAR WINAPI RtlUpperChar(CHAR);
1217 void WINAPI RtlUpperString(STRING *,const STRING *);
1219 NTSTATUS WINAPI RtlValidSecurityDescriptor(PSECURITY_DESCRIPTOR);
1220 BOOLEAN WINAPI RtlValidAcl(PACL);
1221 BOOLEAN WINAPI RtlValidSid(PSID);
1222 BOOLEAN WINAPI RtlValidateHeap(HANDLE,ULONG,LPCVOID);
1224 NTSTATUS WINAPI RtlWalkHeap(HANDLE,PVOID);
1226 NTSTATUS WINAPI RtlpWaitForCriticalSection(RTL_CRITICAL_SECTION *);
1227 NTSTATUS WINAPI RtlpUnWaitCriticalSection(RTL_CRITICAL_SECTION *);
1229 /***********************************************************************
1233 #define InitializeObjectAttributes(p,n,a,r,s) \
1235 (p)->Length = sizeof(OBJECT_ATTRIBUTES); \
1236 (p)->RootDirectory = r; \
1237 (p)->Attributes = a; \
1238 (p)->ObjectName = n; \
1239 (p)->SecurityDescriptor = s; \
1240 (p)->SecurityQualityOfService = NULL; \
1243 #define NtCurrentProcess() ((HANDLE)-1)
1245 #define RtlFillMemory(Destination,Length,Fill) memset((Destination),(Fill),(Length))
1246 #define RtlMoveMemory(Destination,Source,Length) memmove((Destination),(Source),(Length))
1247 #define RtlStoreUlong(p,v) do { ULONG _v = (v); memcpy((p), &_v, sizeof(_v)); } while (0)
1248 #define RtlStoreUlonglong(p,v) do { ULONGLONG _v = (v); memcpy((p), &_v, sizeof(_v)); } while (0)
1249 #define RtlRetrieveUlong(p,s) memcpy((p), (s), sizeof(ULONG))
1250 #define RtlRetrieveUlonglong(p,s) memcpy((p), (s), sizeof(ULONGLONG))
1251 #define RtlZeroMemory(Destination,Length) memset((Destination),0,(Length))
1253 inline static BOOLEAN RtlCheckBit(PCRTL_BITMAP lpBits, ULONG ulBit)
1255 if (lpBits && ulBit < lpBits->SizeOfBitMap &&
1256 lpBits->BitMapBuffer[ulBit >> 3] & (1 << (ulBit & 7)))
1261 #define RtlClearAllBits(p) \
1263 PRTL_BITMAP _p = (p); \
1264 memset(_p->BitMapBuffer,0,((_p->SizeOfBitMap + 31) & 0xffffffe0) >> 3); \
1267 #define RtlInitializeBitMap(p,b,s) \
1269 PRTL_BITMAP _p = (p); \
1270 _p->SizeOfBitMap = (s); \
1271 _p->BitMapBuffer = (b); \
1274 #define RtlSetAllBits(p) \
1276 PRTL_BITMAP _p = (p); \
1277 memset(_p->BitMapBuffer,0xff,((_p->SizeOfBitMap + 31) & 0xffffffe0) >> 3); \
1280 /* These are implemented as __fastcall, so we can't let Winelib apps link with them */
1281 inline static USHORT RtlUshortByteSwap(USHORT s)
1283 return (s >> 8) | (s << 8);
1285 inline static ULONG RtlUlongByteSwap(ULONG i)
1287 #if defined(__i386__) && defined(__GNUC__)
1289 __asm__("bswap %0" : "=r" (ret) : "0" (i) );
1292 return ((ULONG)RtlUshortByteSwap(i) << 16) | RtlUshortByteSwap(i >> 16);
1296 /*************************************************************************
1297 * Loader functions and structures.
1299 * Those are not part of standard Winternl.h
1301 typedef struct _LDR_MODULE
1303 LIST_ENTRY InLoadOrderModuleList;
1304 LIST_ENTRY InMemoryOrderModuleList;
1305 LIST_ENTRY InInitializationOrderModuleList;
1309 UNICODE_STRING FullDllName;
1310 UNICODE_STRING BaseDllName;
1314 HANDLE SectionHandle;
1316 ULONG TimeDateStamp;
1317 } LDR_MODULE, *PLDR_MODULE;
1319 /* those defines are (some of the) regular LDR_MODULE.Flags values */
1320 #define LDR_IMAGE_IS_DLL 0x00000004
1321 #define LDR_LOAD_IN_PROGRESS 0x00001000
1322 #define LDR_UNLOAD_IN_PROGRESS 0x00002000
1323 #define LDR_NO_DLL_CALLS 0x00040000
1324 #define LDR_PROCESS_ATTACHED 0x00080000
1325 #define LDR_MODULE_REBASED 0x00200000
1327 /* these ones is Wine specific */
1328 #define LDR_DONT_RESOLVE_REFS 0x40000000
1329 #define LDR_WINE_INTERNAL 0x80000000
1331 /* FIXME: to be checked */
1332 #define MAXIMUM_FILENAME_LENGTH 256
1334 typedef struct _SYSTEM_MODULE
1338 PVOID ImageBaseAddress;
1345 BYTE Name[MAXIMUM_FILENAME_LENGTH];
1346 } SYSTEM_MODULE, *PSYSTEM_MODULE;
1348 typedef struct _SYSTEM_MODULE_INFORMATION
1351 SYSTEM_MODULE Modules[1]; /* FIXME: should be Modules[0] */
1352 } SYSTEM_MODULE_INFORMATION, *PSYSTEM_MODULE_INFORMATION;
1354 NTSTATUS WINAPI LdrDisableThreadCalloutsForDll(HMODULE);
1355 NTSTATUS WINAPI LdrFindEntryForAddress(const void*, PLDR_MODULE*);
1356 NTSTATUS WINAPI LdrGetDllHandle(ULONG, ULONG, PUNICODE_STRING, HMODULE*);
1357 NTSTATUS WINAPI LdrGetProcedureAddress(HMODULE, PANSI_STRING, ULONG, void**);
1358 NTSTATUS WINAPI LdrLoadDll(LPCWSTR, DWORD, PUNICODE_STRING, HMODULE*);
1359 NTSTATUS WINAPI LdrLockLoaderLock(ULONG,ULONG*,ULONG*);
1360 NTSTATUS WINAPI LdrQueryProcessModuleInformation(SYSTEM_MODULE_INFORMATION*, ULONG, ULONG*);
1361 NTSTATUS WINAPI LdrUnloadDll(HMODULE);
1362 NTSTATUS WINAPI LdrUnlockLoaderLock(ULONG,ULONG);
1366 #endif /* defined(__cplusplus) */
1368 #endif /* __WINE_WINTERNAL_H */