mirror of
https://github.com/reactos/wine.git
synced 2024-12-09 04:13:58 +00:00
1684 lines
63 KiB
C
1684 lines
63 KiB
C
/*
|
|
* Internal NT APIs and data structures
|
|
*
|
|
* Copyright (C) the Wine project
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
*/
|
|
|
|
#ifndef __WINE_WINTERNAL_H
|
|
#define __WINE_WINTERNAL_H
|
|
|
|
#include <windef.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif /* defined(__cplusplus) */
|
|
|
|
|
|
/**********************************************************************
|
|
* Fundamental types and data structures
|
|
*/
|
|
|
|
typedef LONG NTSTATUS;
|
|
|
|
typedef CONST char *PCSZ;
|
|
|
|
typedef short CSHORT;
|
|
typedef CSHORT *PCSHORT;
|
|
|
|
typedef struct _STRING {
|
|
USHORT Length;
|
|
USHORT MaximumLength;
|
|
PCHAR Buffer;
|
|
} STRING, *PSTRING;
|
|
|
|
typedef STRING ANSI_STRING;
|
|
typedef PSTRING PANSI_STRING;
|
|
typedef const STRING *PCANSI_STRING;
|
|
|
|
typedef STRING OEM_STRING;
|
|
typedef PSTRING POEM_STRING;
|
|
typedef const STRING *PCOEM_STRING;
|
|
|
|
typedef struct _UNICODE_STRING {
|
|
USHORT Length; /* bytes */
|
|
USHORT MaximumLength; /* bytes */
|
|
PWSTR Buffer;
|
|
} UNICODE_STRING, *PUNICODE_STRING;
|
|
|
|
typedef const UNICODE_STRING *PCUNICODE_STRING;
|
|
|
|
typedef struct _CLIENT_ID
|
|
{
|
|
HANDLE UniqueProcess;
|
|
HANDLE UniqueThread;
|
|
} CLIENT_ID, *PCLIENT_ID;
|
|
|
|
typedef struct _CURDIR
|
|
{
|
|
UNICODE_STRING DosPath;
|
|
PVOID Handle;
|
|
} CURDIR, *PCURDIR;
|
|
|
|
typedef struct RTL_DRIVE_LETTER_CURDIR
|
|
{
|
|
USHORT Flags;
|
|
USHORT Length;
|
|
ULONG TimeStamp;
|
|
UNICODE_STRING DosPath;
|
|
} RTL_DRIVE_LETTER_CURDIR, *PRTL_DRIVE_LETTER_CURDIR;
|
|
|
|
typedef struct tagRTL_BITMAP {
|
|
ULONG SizeOfBitMap; /* Number of bits in the bitmap */
|
|
LPBYTE BitMapBuffer; /* Bitmap data, assumed sized to a DWORD boundary */
|
|
} RTL_BITMAP, *PRTL_BITMAP;
|
|
|
|
typedef const RTL_BITMAP *PCRTL_BITMAP;
|
|
|
|
typedef struct tagRTL_BITMAP_RUN {
|
|
ULONG StartOfRun; /* Bit position at which run starts - FIXME: Name? */
|
|
ULONG SizeOfRun; /* Size of the run in bits - FIXME: Name? */
|
|
} RTL_BITMAP_RUN, *PRTL_BITMAP_RUN;
|
|
|
|
typedef const RTL_BITMAP_RUN *PCRTL_BITMAP_RUN;
|
|
|
|
typedef struct _RTL_USER_PROCESS_PARAMETERS
|
|
{
|
|
ULONG AllocationSize;
|
|
ULONG Size;
|
|
ULONG Flags;
|
|
ULONG DebugFlags;
|
|
HANDLE hConsole;
|
|
ULONG ProcessGroup;
|
|
HANDLE hStdInput;
|
|
HANDLE hStdOutput;
|
|
HANDLE hStdError;
|
|
CURDIR CurrentDirectory;
|
|
UNICODE_STRING DllPath;
|
|
UNICODE_STRING ImagePathName;
|
|
UNICODE_STRING CommandLine;
|
|
PWSTR Environment;
|
|
ULONG dwX;
|
|
ULONG dwY;
|
|
ULONG dwXSize;
|
|
ULONG dwYSize;
|
|
ULONG dwXCountChars;
|
|
ULONG dwYCountChars;
|
|
ULONG dwFillAttribute;
|
|
ULONG dwFlags;
|
|
ULONG wShowWindow;
|
|
UNICODE_STRING WindowTitle;
|
|
UNICODE_STRING Desktop;
|
|
UNICODE_STRING ShellInfo;
|
|
UNICODE_STRING RuntimeInfo;
|
|
RTL_DRIVE_LETTER_CURDIR DLCurrentDirectory[0x20];
|
|
} RTL_USER_PROCESS_PARAMETERS, *PRTL_USER_PROCESS_PARAMETERS;
|
|
|
|
/* value for Flags field (FIXME: not the correct name) */
|
|
#define PROCESS_PARAMS_FLAG_NORMALIZED 1
|
|
|
|
typedef struct _PEB_LDR_DATA
|
|
{
|
|
ULONG Length;
|
|
BOOLEAN Initialized;
|
|
PVOID SsHandle;
|
|
LIST_ENTRY InLoadOrderModuleList;
|
|
LIST_ENTRY InMemoryOrderModuleList;
|
|
LIST_ENTRY InInitializationOrderModuleList;
|
|
} PEB_LDR_DATA, *PPEB_LDR_DATA;
|
|
|
|
/***********************************************************************
|
|
* PEB data structure
|
|
*/
|
|
typedef struct _PEB
|
|
{
|
|
BYTE Reserved1[2]; /* 00 */
|
|
BYTE BeingDebugged; /* 02 */
|
|
BYTE Reserved2[5]; /* 03 */
|
|
HMODULE ImageBaseAddress; /* 08 */
|
|
PPEB_LDR_DATA LdrData; /* 0c */
|
|
RTL_USER_PROCESS_PARAMETERS *ProcessParameters; /* 10 */
|
|
PVOID __pad_14; /* 14 */
|
|
HANDLE ProcessHeap; /* 18 */
|
|
BYTE __pad_1c[36]; /* 1c */
|
|
PRTL_BITMAP TlsBitmap; /* 40 */
|
|
ULONG TlsBitmapBits[2]; /* 44 */
|
|
BYTE __pad_4c[156]; /* 4c */
|
|
PVOID Reserved3[59]; /* e8 */
|
|
ULONG SessionId; /* 1d4 */
|
|
} PEB, *PPEB;
|
|
|
|
|
|
/***********************************************************************
|
|
* TEB data structure
|
|
*/
|
|
#if defined(_NTSYSTEM_) || defined(_KERNEL32_) /* hack, should go away */
|
|
# define WINE_NO_TEB
|
|
#endif
|
|
|
|
#ifndef WINE_NO_TEB /* don't define TEB if included from thread.h */
|
|
# ifndef WINE_TEB_DEFINED
|
|
# define WINE_TEB_DEFINED
|
|
typedef struct _TEB
|
|
{
|
|
NT_TIB Tib; /* 000 */
|
|
PVOID EnvironmentPointer; /* 01c */
|
|
CLIENT_ID ClientId; /* 020 */
|
|
PVOID ActiveRpcHandle; /* 028 */
|
|
PVOID ThreadLocalStoragePointer; /* 02c */
|
|
PPEB Peb; /* 030 */
|
|
ULONG LastErrorValue; /* 034 */
|
|
BYTE __pad038[140]; /* 038 */
|
|
ULONG CurrentLocale; /* 0c4 */
|
|
BYTE __pad0c8[1752]; /* 0c8 */
|
|
PVOID Reserved2[278]; /* 7a0 */
|
|
UNICODE_STRING StaticUnicodeString; /* bf8 used by advapi32 */
|
|
WCHAR StaticUnicodeBuffer[261]; /* c00 used by advapi32 */
|
|
PVOID DeallocationStack; /* e0c */
|
|
PVOID TlsSlots[64]; /* e10 */
|
|
LIST_ENTRY TlsLinks; /* f10 */
|
|
PVOID Reserved4[26]; /* f18 */
|
|
PVOID ReservedForOle; /* f80 Windows 2000 only */
|
|
PVOID Reserved5[4]; /* f84 */
|
|
PVOID TlsExpansionSlots; /* f94 */
|
|
} TEB, *PTEB;
|
|
# endif /* WINE_TEB_DEFINED */
|
|
#endif /* WINE_NO_TEB */
|
|
|
|
/***********************************************************************
|
|
* Enums
|
|
*/
|
|
|
|
typedef enum _FILE_INFORMATION_CLASS {
|
|
FileDirectoryInformation = 1,
|
|
FileFullDirectoryInformation,
|
|
FileBothDirectoryInformation,
|
|
FileBasicInformation,
|
|
FileStandardInformation,
|
|
FileInternalInformation,
|
|
FileEaInformation,
|
|
FileAccessInformation,
|
|
FileNameInformation,
|
|
FileRenameInformation,
|
|
FileLinkInformation,
|
|
FileNamesInformation,
|
|
FileDispositionInformation,
|
|
FilePositionInformation,
|
|
FileFullEaInformation,
|
|
FileModeInformation,
|
|
FileAlignmentInformation,
|
|
FileAllInformation,
|
|
FileAllocationInformation,
|
|
FileEndOfFileInformation,
|
|
FileAlternateNameInformation,
|
|
FileStreamInformation,
|
|
FilePipeInformation,
|
|
FilePipeLocalInformation,
|
|
FilePipeRemoteInformation,
|
|
FileMailslotQueryInformation,
|
|
FileMailslotSetInformation,
|
|
FileCompressionInformation,
|
|
FileObjectIdInformation,
|
|
FileCompletionInformation,
|
|
FileMoveClusterInformation,
|
|
FileQuotaInformation,
|
|
FileReparsePointInformation,
|
|
FileNetworkOpenInformation,
|
|
FileAttributeTagInformation,
|
|
FileTrackingInformation,
|
|
FileMaximumInformation
|
|
} FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;
|
|
|
|
typedef struct _FILE_DIRECTORY_INFORMATION {
|
|
ULONG NextEntryOffset;
|
|
ULONG FileIndex;
|
|
LARGE_INTEGER CreationTime;
|
|
LARGE_INTEGER LastAccessTime;
|
|
LARGE_INTEGER LastWriteTime;
|
|
LARGE_INTEGER ChangeTime;
|
|
LARGE_INTEGER EndOfFile;
|
|
LARGE_INTEGER AllocationSize;
|
|
ULONG FileAttributes;
|
|
ULONG FileNameLength;
|
|
WCHAR FileName[ANYSIZE_ARRAY];
|
|
} FILE_DIRECTORY_INFORMATION, *PFILE_DIRECTORY_INFORMATION;
|
|
|
|
typedef struct _FILE_FULL_DIRECTORY_INFORMATION {
|
|
ULONG NextEntryOffset;
|
|
ULONG FileIndex;
|
|
LARGE_INTEGER CreationTime;
|
|
LARGE_INTEGER LastAccessTime;
|
|
LARGE_INTEGER LastWriteTime;
|
|
LARGE_INTEGER ChangeTime;
|
|
LARGE_INTEGER EndOfFile;
|
|
LARGE_INTEGER AllocationSize;
|
|
ULONG FileAttributes;
|
|
ULONG FileNameLength;
|
|
ULONG EaSize;
|
|
WCHAR FileName[ANYSIZE_ARRAY];
|
|
} FILE_FULL_DIRECTORY_INFORMATION, *PFILE_FULL_DIRECTORY_INFORMATION,
|
|
FILE_FULL_DIR_INFORMATION, *PFILE_FULL_DIR_INFORMATION;
|
|
|
|
typedef struct _FILE_BOTH_DIRECTORY_INFORMATION {
|
|
ULONG NextEntryOffset;
|
|
ULONG FileIndex;
|
|
LARGE_INTEGER CreationTime;
|
|
LARGE_INTEGER LastAccessTime;
|
|
LARGE_INTEGER LastWriteTime;
|
|
LARGE_INTEGER ChangeTime;
|
|
LARGE_INTEGER EndOfFile;
|
|
LARGE_INTEGER AllocationSize;
|
|
ULONG FileAttributes;
|
|
ULONG FileNameLength;
|
|
ULONG EaSize;
|
|
CHAR ShortNameLength;
|
|
WCHAR ShortName[12];
|
|
WCHAR FileName[ANYSIZE_ARRAY];
|
|
} FILE_BOTH_DIRECTORY_INFORMATION, *PFILE_BOTH_DIRECTORY_INFORMATION,
|
|
FILE_BOTH_DIR_INFORMATION, *PFILE_BOTH_DIR_INFORMATION;
|
|
|
|
typedef struct _FILE_BASIC_INFORMATION {
|
|
LARGE_INTEGER CreationTime;
|
|
LARGE_INTEGER LastAccessTime;
|
|
LARGE_INTEGER LastWriteTime;
|
|
LARGE_INTEGER ChangeTime;
|
|
ULONG FileAttributes;
|
|
} FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION;
|
|
|
|
typedef struct _FILE_STANDARD_INFORMATION {
|
|
LARGE_INTEGER AllocationSize;
|
|
LARGE_INTEGER EndOfFile;
|
|
ULONG NumberOfLinks;
|
|
BOOLEAN DeletePending;
|
|
BOOLEAN Directory;
|
|
} FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION;
|
|
|
|
typedef struct _FILE_POSITION_INFORMATION {
|
|
LARGE_INTEGER CurrentByteOffset;
|
|
} FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION;
|
|
|
|
typedef struct _FILE_ALIGNMENT_INFORMATION {
|
|
ULONG AlignmentRequirement;
|
|
} FILE_ALIGNMENT_INFORMATION, *PFILE_ALIGNMENT_INFORMATION;
|
|
|
|
typedef struct _FILE_NETWORK_OPEN_INFORMATION {
|
|
LARGE_INTEGER CreationTime;
|
|
LARGE_INTEGER LastAccessTime;
|
|
LARGE_INTEGER LastWriteTime;
|
|
LARGE_INTEGER ChangeTime;
|
|
LARGE_INTEGER AllocationSize;
|
|
LARGE_INTEGER EndOfFile;
|
|
ULONG FileAttributes;
|
|
} FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION;
|
|
|
|
typedef struct _FILE_FULL_EA_INFORMATION {
|
|
ULONG NextEntryOffset;
|
|
UCHAR Flags;
|
|
UCHAR EaNameLength;
|
|
USHORT EaValueLength;
|
|
CHAR EaName[1];
|
|
} FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION;
|
|
|
|
typedef struct _FILE_STREAM_INFORMATION
|
|
{
|
|
ULONG NextEntryOffset;
|
|
ULONG StreamNameLength;
|
|
LARGE_INTEGER StreamSize;
|
|
LARGE_INTEGER StreamAllocationSize;
|
|
WCHAR StreamName[1];
|
|
} FILE_STREAM_INFORMATION, *PFILE_STREAM_INFORMATION;
|
|
|
|
struct _FILE_ATTRIBUTE_TAG_INFORMATION
|
|
{
|
|
ULONG FileAttributes;
|
|
ULONG ReparseTag;
|
|
} FILE_ATTRIBUTE_TAG_INFORMATION, *PFILE_ATTRIBUTE_TAG_INFORMATION;
|
|
|
|
typedef enum _FSINFOCLASS {
|
|
FileFsVolumeInformation = 1,
|
|
FileFsLabelInformation,
|
|
FileFsSizeInformation,
|
|
FileFsDeviceInformation,
|
|
FileFsAttributeInformation,
|
|
FileFsControlInformation,
|
|
FileFsFullSizeInformation,
|
|
FileFsObjectIdInformation,
|
|
FileFsMaximumInformation
|
|
} FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS;
|
|
|
|
typedef enum _KEY_INFORMATION_CLASS {
|
|
KeyBasicInformation,
|
|
KeyNodeInformation,
|
|
KeyFullInformation
|
|
} KEY_INFORMATION_CLASS;
|
|
|
|
typedef enum _KEY_VALUE_INFORMATION_CLASS {
|
|
KeyValueBasicInformation,
|
|
KeyValueFullInformation,
|
|
KeyValuePartialInformation,
|
|
KeyValueFullInformationAlign64,
|
|
KeyValuePartialInformationAlign64
|
|
} KEY_VALUE_INFORMATION_CLASS;
|
|
|
|
typedef enum _OBJECT_INFORMATION_CLASS {
|
|
ObjectBasicInformation,
|
|
ObjectNameInformation,
|
|
ObjectTypeInformation,
|
|
ObjectAllInformation,
|
|
ObjectDataInformation
|
|
} OBJECT_INFORMATION_CLASS, *POBJECT_INFORMATION_CLASS;
|
|
|
|
typedef enum _PROCESSINFOCLASS {
|
|
ProcessBasicInformation = 0,
|
|
ProcessQuotaLimits = 1,
|
|
ProcessIoCounters = 2,
|
|
ProcessVmCounters = 3,
|
|
ProcessTimes = 4,
|
|
ProcessBasePriority = 5,
|
|
ProcessRaisePriority = 6,
|
|
ProcessDebugPort = 7,
|
|
ProcessExceptionPort = 8,
|
|
ProcessAccessToken = 9,
|
|
ProcessLdtInformation = 10,
|
|
ProcessLdtSize = 11,
|
|
ProcessDefaultHardErrorMode = 12,
|
|
ProcessIoPortHandlers = 13,
|
|
ProcessPooledUsageAndLimits = 14,
|
|
ProcessWorkingSetWatch = 15,
|
|
ProcessUserModeIOPL = 16,
|
|
ProcessEnableAlignmentFaultFixup = 17,
|
|
ProcessPriorityClass = 18,
|
|
ProcessWx86Information = 19,
|
|
ProcessHandleCount = 20,
|
|
ProcessAffinityMask = 21,
|
|
ProcessPriorityBoost = 22,
|
|
ProcessDeviceMap = 23,
|
|
ProcessSessionInformation = 24,
|
|
ProcessForegroundInformation = 25,
|
|
ProcessWow64Information = 26,
|
|
MaxProcessInfoClass
|
|
} PROCESSINFOCLASS;
|
|
|
|
typedef enum _SECTION_INHERIT {
|
|
ViewShare = 1,
|
|
ViewUnmap = 2
|
|
} SECTION_INHERIT;
|
|
|
|
typedef enum SYSTEM_INFORMATION_CLASS {
|
|
SystemBasicInformation = 0,
|
|
Unknown1,
|
|
SystemPerformanceInformation = 2,
|
|
SystemTimeOfDayInformation = 3, /* was SystemTimeInformation */
|
|
Unknown4,
|
|
SystemProcessInformation = 5,
|
|
Unknown6,
|
|
Unknown7,
|
|
SystemProcessorPerformanceInformation = 8,
|
|
Unknown9,
|
|
Unknown10,
|
|
SystemDriverInformation,
|
|
Unknown12,
|
|
Unknown13,
|
|
Unknown14,
|
|
Unknown15,
|
|
SystemHandleList,
|
|
Unknown17,
|
|
Unknown18,
|
|
Unknown19,
|
|
Unknown20,
|
|
SystemCacheInformation,
|
|
Unknown22,
|
|
SystemInterruptInformation = 23,
|
|
SystemDpcBehaviourInformation = 24,
|
|
SystemFullMemoryInformation = 25,
|
|
SystemNotImplemented6 = 25,
|
|
SystemLoadImage = 26,
|
|
SystemUnloadImage = 27,
|
|
SystemTimeAdjustmentInformation = 28,
|
|
SystemTimeAdjustment = 28,
|
|
SystemSummaryMemoryInformation = 29,
|
|
SystemNotImplemented7 = 29,
|
|
SystemNextEventIdInformation = 30,
|
|
SystemNotImplemented8 = 30,
|
|
SystemEventIdsInformation = 31,
|
|
SystemCrashDumpInformation = 32,
|
|
SystemExceptionInformation = 33,
|
|
SystemCrashDumpStateInformation = 34,
|
|
SystemKernelDebuggerInformation = 35,
|
|
SystemContextSwitchInformation = 36,
|
|
SystemRegistryQuotaInformation = 37,
|
|
SystemCurrentTimeZoneInformation = 44,
|
|
SystemTimeZoneInformation = 44,
|
|
SystemLookasideInformation = 45,
|
|
SystemSetTimeSlipEvent = 46,
|
|
SystemCreateSession = 47,
|
|
SystemDeleteSession = 48,
|
|
SystemInvalidInfoClass4 = 49,
|
|
SystemRangeStartInformation = 50,
|
|
SystemVerifierInformation = 51,
|
|
SystemAddVerifier = 52,
|
|
SystemSessionProcessesInformation = 53,
|
|
SystemInformationClassMax
|
|
} SYSTEM_INFORMATION_CLASS, *PSYSTEM_INFORMATION_CLASS;
|
|
|
|
typedef enum _TIMER_TYPE {
|
|
NotificationTimer,
|
|
SynchronizationTimer
|
|
} TIMER_TYPE;
|
|
|
|
typedef enum _THREADINFOCLASS {
|
|
ThreadBasicInformation,
|
|
ThreadTimes,
|
|
ThreadPriority,
|
|
ThreadBasePriority,
|
|
ThreadAffinityMask,
|
|
ThreadImpersonationToken,
|
|
ThreadDescriptorTableEntry,
|
|
ThreadEnableAlignmentFaultFixup,
|
|
ThreadEventPair_Reusable,
|
|
ThreadQuerySetWin32StartAddress,
|
|
ThreadZeroTlsCell,
|
|
ThreadPerformanceCount,
|
|
ThreadAmILastThread,
|
|
ThreadIdealProcessor,
|
|
ThreadPriorityBoost,
|
|
ThreadSetTlsArrayAddress,
|
|
ThreadIsIoPending,
|
|
MaxThreadInfoClass
|
|
} THREADINFOCLASS;
|
|
|
|
typedef struct _THREAD_BASIC_INFORMATION
|
|
{
|
|
NTSTATUS ExitStatus;
|
|
PVOID TebBaseAddress;
|
|
CLIENT_ID ClientId;
|
|
ULONG AffinityMask;
|
|
LONG Priority;
|
|
LONG BasePriority;
|
|
} THREAD_BASIC_INFORMATION, *PTHREAD_BASIC_INFORMATION;
|
|
|
|
|
|
typedef enum _WINSTATIONINFOCLASS {
|
|
WinStationInformation = 8
|
|
} WINSTATIONINFOCLASS;
|
|
|
|
typedef enum
|
|
{
|
|
MemoryBasicInformation = 0
|
|
} MEMORY_INFORMATION_CLASS;
|
|
|
|
/* return type of RtlDetermineDosPathNameType_U (FIXME: not the correct names) */
|
|
typedef enum
|
|
{
|
|
INVALID_PATH = 0,
|
|
UNC_PATH, /* "//foo" */
|
|
ABSOLUTE_DRIVE_PATH, /* "c:/foo" */
|
|
RELATIVE_DRIVE_PATH, /* "c:foo" */
|
|
ABSOLUTE_PATH, /* "/foo" */
|
|
RELATIVE_PATH, /* "foo" */
|
|
DEVICE_PATH, /* "//./foo" */
|
|
UNC_DOT_PATH /* "//." */
|
|
} DOS_PATHNAME_TYPE;
|
|
|
|
/***********************************************************************
|
|
* IA64 specific types and data structures
|
|
*/
|
|
|
|
#ifdef __ia64__
|
|
|
|
typedef struct _FRAME_POINTERS {
|
|
ULONGLONG MemoryStackFp;
|
|
ULONGLONG BackingStoreFp;
|
|
} FRAME_POINTERS, *PFRAME_POINTERS;
|
|
|
|
#define UNWIND_HISTORY_TABLE_SIZE 12
|
|
|
|
typedef struct _RUNTIME_FUNCTION {
|
|
ULONG BeginAddress;
|
|
ULONG EndAddress;
|
|
ULONG UnwindInfoAddress;
|
|
} RUNTIME_FUNCTION, *PRUNTIME_FUNCTION;
|
|
|
|
typedef struct _UNWIND_HISTORY_TABLE_ENTRY {
|
|
ULONG64 ImageBase;
|
|
ULONG64 Gp;
|
|
PRUNTIME_FUNCTION FunctionEntry;
|
|
} UNWIND_HISTORY_TABLE_ENTRY, *PUNWIND_HISTORY_TABLE_ENTRY;
|
|
|
|
typedef struct _UNWIND_HISTORY_TABLE {
|
|
ULONG Count;
|
|
UCHAR Search;
|
|
ULONG64 LowAddress;
|
|
ULONG64 HighAddress;
|
|
UNWIND_HISTORY_TABLE_ENTRY Entry[UNWIND_HISTORY_TABLE_SIZE];
|
|
} UNWIND_HISTORY_TABLE, *PUNWIND_HISTORY_TABLE;
|
|
|
|
#endif /* defined(__ia64__) */
|
|
|
|
/***********************************************************************
|
|
* Types and data structures
|
|
*/
|
|
|
|
/* This is used by NtQuerySystemInformation */
|
|
/* FIXME: Isn't THREAD_INFO and THREADINFO the same structure? */
|
|
typedef struct {
|
|
FILETIME ftKernelTime;
|
|
FILETIME ftUserTime;
|
|
FILETIME ftCreateTime;
|
|
DWORD dwTickCount;
|
|
DWORD dwStartAddress;
|
|
DWORD dwOwningPID;
|
|
DWORD dwThreadID;
|
|
DWORD dwCurrentPriority;
|
|
DWORD dwBasePriority;
|
|
DWORD dwContextSwitches;
|
|
DWORD dwThreadState;
|
|
DWORD dwWaitReason;
|
|
} THREADINFO, *PTHREADINFO;
|
|
|
|
/* FIXME: Isn't THREAD_INFO and THREADINFO the same structure? */
|
|
typedef struct _THREAD_INFO{
|
|
DWORD Unknown1[6];
|
|
DWORD ThreadID;
|
|
DWORD Unknown2[3];
|
|
DWORD Status;
|
|
DWORD WaitReason;
|
|
DWORD Unknown3[4];
|
|
} THREAD_INFO, PTHREAD_INFO;
|
|
|
|
/***********************************************************************
|
|
* Types and data structures
|
|
*/
|
|
|
|
typedef struct _IO_STATUS_BLOCK {
|
|
union {
|
|
NTSTATUS Status;
|
|
PVOID Pointer;
|
|
} DUMMYUNIONNAME;
|
|
|
|
ULONG_PTR Information;
|
|
} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
|
|
|
|
typedef void (WINAPI * PIO_APC_ROUTINE)(PVOID,PIO_STATUS_BLOCK,ULONG);
|
|
|
|
typedef struct _KEY_BASIC_INFORMATION {
|
|
LARGE_INTEGER LastWriteTime;
|
|
ULONG TitleIndex;
|
|
ULONG NameLength;
|
|
WCHAR Name[1];
|
|
} KEY_BASIC_INFORMATION, *PKEY_BASIC_INFORMATION;
|
|
|
|
typedef struct _KEY_NODE_INFORMATION
|
|
{
|
|
LARGE_INTEGER LastWriteTime;
|
|
ULONG TitleIndex;
|
|
ULONG ClassOffset;
|
|
ULONG ClassLength;
|
|
ULONG NameLength;
|
|
WCHAR Name[1];
|
|
/* Class[1]; */
|
|
} KEY_NODE_INFORMATION, *PKEY_NODE_INFORMATION;
|
|
|
|
typedef struct _KEY_FULL_INFORMATION
|
|
{
|
|
LARGE_INTEGER LastWriteTime;
|
|
ULONG TitleIndex;
|
|
ULONG ClassOffset;
|
|
ULONG ClassLength;
|
|
ULONG SubKeys;
|
|
ULONG MaxNameLen;
|
|
ULONG MaxClassLen;
|
|
ULONG Values;
|
|
ULONG MaxValueNameLen;
|
|
ULONG MaxValueDataLen;
|
|
WCHAR Class[1];
|
|
} KEY_FULL_INFORMATION, *PKEY_FULL_INFORMATION;
|
|
|
|
typedef struct _KEY_VALUE_ENTRY
|
|
{
|
|
PUNICODE_STRING ValueName;
|
|
ULONG DataLength;
|
|
ULONG DataOffset;
|
|
ULONG Type;
|
|
} KEY_VALUE_ENTRY, *PKEY_VALUE_ENTRY;
|
|
|
|
typedef struct _KEY_VALUE_BASIC_INFORMATION {
|
|
ULONG TitleIndex;
|
|
ULONG Type;
|
|
ULONG NameLength;
|
|
WCHAR Name[1];
|
|
} KEY_VALUE_BASIC_INFORMATION, *PKEY_VALUE_BASIC_INFORMATION;
|
|
|
|
typedef struct _KEY_VALUE_FULL_INFORMATION {
|
|
ULONG TitleIndex;
|
|
ULONG Type;
|
|
ULONG DataOffset;
|
|
ULONG DataLength;
|
|
ULONG NameLength;
|
|
WCHAR Name[1];
|
|
} KEY_VALUE_FULL_INFORMATION, *PKEY_VALUE_FULL_INFORMATION;
|
|
|
|
typedef struct _KEY_VALUE_PARTIAL_INFORMATION {
|
|
ULONG TitleIndex;
|
|
ULONG Type;
|
|
ULONG DataLength;
|
|
UCHAR Data[1];
|
|
} KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION;
|
|
|
|
typedef struct _OBJECT_ATTRIBUTES {
|
|
ULONG Length;
|
|
HANDLE RootDirectory;
|
|
PUNICODE_STRING ObjectName;
|
|
ULONG Attributes;
|
|
PVOID SecurityDescriptor; /* type SECURITY_DESCRIPTOR */
|
|
PVOID SecurityQualityOfService; /* type SECURITY_QUALITY_OF_SERVICE */
|
|
} OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;
|
|
|
|
typedef struct _OBJECT_DATA_INFORMATION {
|
|
BOOLEAN InheritHandle;
|
|
BOOLEAN ProtectFromClose;
|
|
} OBJECT_DATA_INFORMATION, *POBJECT_DATA_INFORMATION;
|
|
|
|
typedef struct _PROCESS_BASIC_INFORMATION {
|
|
#ifdef __WINESRC__
|
|
DWORD ExitStatus;
|
|
DWORD PebBaseAddress;
|
|
DWORD AffinityMask;
|
|
DWORD BasePriority;
|
|
ULONG UniqueProcessId;
|
|
ULONG InheritedFromUniqueProcessId;
|
|
#else
|
|
PVOID Reserved1;
|
|
PPEB PebBaseAddress;
|
|
PVOID Reserved2[2];
|
|
ULONG_PTR UniqueProcessId;
|
|
PVOID Reserved3;
|
|
#endif
|
|
} PROCESS_BASIC_INFORMATION, *PPROCESS_BASIC_INFORMATION;
|
|
|
|
typedef struct _PROCESS_INFO {
|
|
DWORD Offset; /* 00 offset to next PROCESS_INFO ok*/
|
|
DWORD ThreadCount; /* 04 number of ThreadInfo member ok */
|
|
DWORD Unknown1[6];
|
|
FILETIME CreationTime; /* 20 */
|
|
DWORD Unknown2[5];
|
|
PWCHAR ProcessName; /* 3c ok */
|
|
DWORD BasePriority;
|
|
DWORD ProcessID; /* 44 ok*/
|
|
DWORD ParentProcessID;
|
|
DWORD HandleCount;
|
|
DWORD Unknown3[2]; /* 50 */
|
|
ULONG PeakVirtualSize;
|
|
ULONG VirtualSize;
|
|
ULONG PageFaultCount;
|
|
ULONG PeakWorkingSetSize;
|
|
ULONG WorkingSetSize;
|
|
ULONG QuotaPeakPagedPoolUsage;
|
|
ULONG QuotaPagedPoolUsage;
|
|
ULONG QuotaPeakNonPagedPoolUsage;
|
|
ULONG QuotaNonPagedPoolUsage;
|
|
ULONG PagefileUsage;
|
|
ULONG PeakPagefileUsage;
|
|
DWORD PrivateBytes;
|
|
DWORD Unknown6[4];
|
|
THREAD_INFO ati[ANYSIZE_ARRAY]; /* 94 size=0x40*/
|
|
} PROCESS_INFO, PPROCESS_INFO;
|
|
|
|
typedef struct _RTL_HEAP_DEFINITION {
|
|
ULONG Length; /* = sizeof(RTL_HEAP_DEFINITION) */
|
|
|
|
ULONG Unknown[11];
|
|
} RTL_HEAP_DEFINITION, *PRTL_HEAP_DEFINITION;
|
|
|
|
typedef struct _RTL_RWLOCK {
|
|
RTL_CRITICAL_SECTION rtlCS;
|
|
|
|
HANDLE hSharedReleaseSemaphore;
|
|
UINT uSharedWaiters;
|
|
|
|
HANDLE hExclusiveReleaseSemaphore;
|
|
UINT uExclusiveWaiters;
|
|
|
|
INT iNumberActive;
|
|
HANDLE hOwningThreadId;
|
|
DWORD dwTimeoutBoost;
|
|
PVOID pDebugInfo;
|
|
} RTL_RWLOCK, *LPRTL_RWLOCK;
|
|
|
|
/* System Information Class 0x00 */
|
|
typedef struct _SYSTEM_BASIC_INFORMATION {
|
|
#ifdef __WINESRC__
|
|
DWORD dwUnknown1;
|
|
ULONG uKeMaximumIncrement;
|
|
ULONG uPageSize;
|
|
ULONG uMmNumberOfPhysicalPages;
|
|
ULONG uMmLowestPhysicalPage;
|
|
ULONG uMmHighestPhysicalPage;
|
|
ULONG uAllocationGranularity;
|
|
PVOID pLowestUserAddress;
|
|
PVOID pMmHighestUserAddress;
|
|
ULONG uKeActiveProcessors;
|
|
BYTE bKeNumberProcessors;
|
|
BYTE bUnknown2;
|
|
WORD wUnknown3;
|
|
#else
|
|
BYTE Reserved1[24];
|
|
PVOID Reserved2[4];
|
|
CCHAR NumberOfProcessors;
|
|
#endif
|
|
} SYSTEM_BASIC_INFORMATION, *PSYSTEM_BASIC_INFORMATION;
|
|
|
|
/* System Information Class 0x15 */
|
|
typedef struct {
|
|
ULONG CurrentSize;
|
|
ULONG PeakSize;
|
|
ULONG PageFaultCount;
|
|
ULONG MinimumWorkingSet;
|
|
ULONG MaximumWorkingSet;
|
|
ULONG unused[4];
|
|
} SYSTEM_CACHE_INFORMATION;
|
|
|
|
typedef struct _SYSTEM_CONFIGURATION_INFO {
|
|
union {
|
|
ULONG OemId;
|
|
struct {
|
|
WORD ProcessorArchitecture;
|
|
WORD Reserved;
|
|
} tag1;
|
|
} tag2;
|
|
ULONG PageSize;
|
|
PVOID MinimumApplicationAddress;
|
|
PVOID MaximumApplicationAddress;
|
|
ULONG ActiveProcessorMask;
|
|
ULONG NumberOfProcessors;
|
|
ULONG ProcessorType;
|
|
ULONG AllocationGranularity;
|
|
WORD ProcessorLevel;
|
|
WORD ProcessorRevision;
|
|
} SYSTEM_CONFIGURATION_INFO, *PSYSTEM_CONFIGURATION_INFO;
|
|
|
|
/* System Information Class 0x0b */
|
|
typedef struct {
|
|
PVOID pvAddress;
|
|
DWORD dwUnknown1;
|
|
DWORD dwUnknown2;
|
|
DWORD dwEntryIndex;
|
|
DWORD dwUnknown3;
|
|
char szName[MAX_PATH + 1];
|
|
} SYSTEM_DRIVER_INFORMATION;
|
|
|
|
typedef struct _SYSTEM_EXCEPTION_INFORMATION {
|
|
BYTE Reserved1[16];
|
|
} SYSTEM_EXCEPTION_INFORMATION, *PSYSTEM_EXCEPTION_INFORMATION;
|
|
|
|
typedef struct _SYSTEM_LOOKASIDE_INFORMATION {
|
|
BYTE Reserved1[32];
|
|
} SYSTEM_LOOKASIDE_INFORMATION, *PSYSTEM_LOOKASIDE_INFORMATION;
|
|
|
|
typedef struct _SYSTEM_INTERRUPT_INFORMATION {
|
|
BYTE Reserved1[24];
|
|
} SYSTEM_INTERRUPT_INFORMATION, *PSYSTEM_INTERRUPT_INFORMATION;
|
|
|
|
typedef struct _SYSTEM_KERNEL_DEBUGGER_INFORMATION {
|
|
BOOLEAN DebuggerEnabled;
|
|
BOOLEAN DebuggerNotPresent;
|
|
} SYSTEM_KERNEL_DEBUGGER_INFORMATION, *PSYSTEM_KERNEL_DEBUGGER_INFORMATION;
|
|
|
|
/* System Information Class 0x10 */
|
|
typedef struct {
|
|
USHORT dwPID;
|
|
USHORT dwCreatorBackTraceIndex;
|
|
BYTE bObjectType;
|
|
BYTE bHandleAttributes;
|
|
USHORT usHandleOffset;
|
|
DWORD dwKeObject;
|
|
ULONG ulGrantedAccess;
|
|
} HANDLEINFO, *PHANDLEINFO; /* FIXME: SYSTEM_HANDLE_INFORMATION? */
|
|
|
|
typedef struct _SYSTEM_PERFORMANCE_INFORMATION {
|
|
BYTE Reserved1[312];
|
|
} SYSTEM_PERFORMANCE_INFORMATION, *PSYSTEM_PERFORMANCE_INFORMATION;
|
|
|
|
/* System Information Class 0x02 */
|
|
typedef struct _SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION {
|
|
#ifdef __WINESRC__
|
|
LARGE_INTEGER liIdleTime;
|
|
DWORD dwSpare[10];
|
|
#else
|
|
LARGE_INTEGER IdleTime;
|
|
LARGE_INTEGER KernelTime;
|
|
LARGE_INTEGER UserTime;
|
|
LARGE_INTEGER Reserved1[2];
|
|
ULONG Reserved2;
|
|
#endif
|
|
} SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION, *PSYSTEM_PROCESSOR_PERFORMANCE_INFORMATION;
|
|
|
|
/* System Information Class 0x05 */
|
|
typedef struct _SYSTEM_PROCESS_INFORMATION {
|
|
#ifdef __WINESRC__
|
|
DWORD dwOffset;
|
|
DWORD dwThreadCount;
|
|
DWORD dwUnknown1[6];
|
|
FILETIME ftCreationTime;
|
|
DWORD dwUnknown2[5];
|
|
WCHAR *pszProcessName;
|
|
DWORD dwBasePriority;
|
|
DWORD dwProcessID;
|
|
DWORD dwParentProcessID;
|
|
DWORD dwHandleCount;
|
|
DWORD dwUnknown3;
|
|
DWORD dwUnknown4;
|
|
DWORD dwVirtualBytesPeak;
|
|
DWORD dwVirtualBytes;
|
|
DWORD dwPageFaults;
|
|
DWORD dwWorkingSetPeak;
|
|
DWORD dwWorkingSet;
|
|
DWORD dwUnknown5;
|
|
DWORD dwPagedPool;
|
|
DWORD dwUnknown6;
|
|
DWORD dwNonPagedPool;
|
|
DWORD dwPageFileBytesPeak;
|
|
DWORD dwPrivateBytes;
|
|
DWORD dwPageFileBytes;
|
|
DWORD dwUnknown7[4];
|
|
THREADINFO ti[1];
|
|
#else
|
|
ULONG NextEntryOffset;
|
|
BYTE Reserved1[52];
|
|
PVOID Reserved2[3];
|
|
HANDLE UniqueProcessId;
|
|
PVOID Reserved3;
|
|
ULONG HandleCount;
|
|
BYTE Reserved4[4];
|
|
PVOID Reserved5[11];
|
|
SIZE_T PeakPagefileUsage;
|
|
SIZE_T PrivatePageCount;
|
|
LARGE_INTEGER Reserved6[6];
|
|
#endif
|
|
} SYSTEM_PROCESS_INFORMATION, *PSYSTEM_PROCESS_INFORMATION;
|
|
|
|
typedef struct _SYSTEM_REGISTRY_QUOTA_INFORMATION {
|
|
ULONG RegistryQuotaAllowed;
|
|
ULONG RegistryQuotaUsed;
|
|
PVOID Reserved1;
|
|
} SYSTEM_REGISTRY_QUOTA_INFORMATION, *PSYSTEM_REGISTRY_QUOTA_INFORMATION;
|
|
|
|
typedef struct _SYSTEM_TIME_ADJUSTMENT {
|
|
ULONG TimeAdjustment;
|
|
BOOLEAN TimeAdjustmentDisabled;
|
|
} SYSTEM_TIME_ADJUSTMENT, *PSYSTEM_TIME_ADJUSTMENT;
|
|
|
|
/* System Information Class 0x03 */
|
|
typedef struct _SYSTEM_TIMEOFDAY_INFORMATION {
|
|
#ifdef __WINESRC__
|
|
LARGE_INTEGER liKeBootTime;
|
|
LARGE_INTEGER liKeSystemTime;
|
|
LARGE_INTEGER liExpTimeZoneBias;
|
|
ULONG uCurrentTimeZoneId;
|
|
DWORD dwReserved;
|
|
#else
|
|
BYTE Reserved1[48];
|
|
#endif
|
|
} SYSTEM_TIMEOFDAY_INFORMATION, *PSYSTEM_TIMEOFDAY_INFORMATION; /* was SYSTEM_TIME_INFORMATION */
|
|
|
|
typedef struct _TIME_FIELDS
|
|
{ CSHORT Year;
|
|
CSHORT Month;
|
|
CSHORT Day;
|
|
CSHORT Hour;
|
|
CSHORT Minute;
|
|
CSHORT Second;
|
|
CSHORT Milliseconds;
|
|
CSHORT Weekday;
|
|
} TIME_FIELDS, *PTIME_FIELDS;
|
|
|
|
typedef struct _WINSTATIONINFORMATIONW {
|
|
BYTE Reserved2[70];
|
|
ULONG LogonId;
|
|
BYTE Reserved3[1140];
|
|
} WINSTATIONINFORMATIONW, *PWINSTATIONINFORMATIONW;
|
|
|
|
typedef struct _VM_COUNTERS_ {
|
|
ULONG PeakVirtualSize;
|
|
ULONG VirtualSize;
|
|
ULONG PageFaultCount;
|
|
ULONG PeakWorkingSetSize;
|
|
ULONG WorkingSetSize;
|
|
ULONG QuotaPeakPagedPoolUsage;
|
|
ULONG QuotaPagedPoolUsage;
|
|
ULONG QuotaPeakNonPagedPoolUsage;
|
|
ULONG QuotaNonPagedPoolUsage;
|
|
ULONG PagefileUsage;
|
|
ULONG PeakPagefileUsage;
|
|
} VM_COUNTERS, *PVM_COUNTERS;
|
|
|
|
typedef BOOLEAN (WINAPI * PWINSTATIONQUERYINFORMATIONW)(HANDLE,ULONG,WINSTATIONINFOCLASS,PVOID,ULONG,PULONG);
|
|
|
|
typedef struct _LDR_RESOURCE_INFO
|
|
{
|
|
ULONG Type;
|
|
ULONG Name;
|
|
ULONG Language;
|
|
} LDR_RESOURCE_INFO, *PLDR_RESOURCE_INFO;
|
|
|
|
|
|
/* debug buffer definitions */
|
|
|
|
typedef struct _DEBUG_BUFFER {
|
|
HANDLE SectionHandle;
|
|
PVOID SectionBase;
|
|
PVOID RemoteSectionBase;
|
|
ULONG SectionBaseDelta;
|
|
HANDLE EventPairHandle;
|
|
ULONG Unknown[2];
|
|
HANDLE RemoteThreadHandle;
|
|
ULONG InfoClassMask;
|
|
ULONG SizeOfInfo;
|
|
ULONG AllocatedSize;
|
|
ULONG SectionSize;
|
|
PVOID ModuleInformation;
|
|
PVOID BackTraceInformation;
|
|
PVOID HeapInformation;
|
|
PVOID LockInformation;
|
|
PVOID Reserved[8];
|
|
} DEBUG_BUFFER, *PDEBUG_BUFFER;
|
|
|
|
#define PDI_MODULES 0x01
|
|
#define PDI_BACKTRACE 0x02
|
|
#define PDI_HEAPS 0x04
|
|
#define PDI_HEAP_TAGS 0x08
|
|
#define PDI_HEAP_BLOCKS 0x10
|
|
#define PDI_LOCKS 0x20
|
|
|
|
typedef struct _DEBUG_MODULE_INFORMATION {
|
|
ULONG Reserved[2];
|
|
ULONG Base;
|
|
ULONG Size;
|
|
ULONG Flags;
|
|
USHORT Index;
|
|
USHORT Unknown;
|
|
USHORT LoadCount;
|
|
USHORT ModuleNameOffset;
|
|
CHAR ImageName[256];
|
|
} DEBUG_MODULE_INFORMATION, *PDEBUG_MODULE_INFORMATION;
|
|
|
|
typedef struct _DEBUG_HEAP_INFORMATION {
|
|
ULONG Base;
|
|
ULONG Flags;
|
|
USHORT Granularity;
|
|
USHORT Unknown;
|
|
ULONG Allocated;
|
|
ULONG Committed;
|
|
ULONG TagCount;
|
|
ULONG BlockCount;
|
|
ULONG Reserved[7];
|
|
PVOID Tags;
|
|
PVOID Blocks;
|
|
} DEBUG_HEAP_INFORMATION, *PDEBUG_HEAP_INFORMATION;
|
|
|
|
typedef struct _DEBUG_LOCK_INFORMATION {
|
|
PVOID Address;
|
|
USHORT Type;
|
|
USHORT CreatorBackTraceIndex;
|
|
ULONG OwnerThreadId;
|
|
ULONG ActiveCount;
|
|
ULONG ContentionCount;
|
|
ULONG EntryCount;
|
|
ULONG RecursionCount;
|
|
ULONG NumberOfSharedWaiters;
|
|
ULONG NumberOfExclusiveWaiters;
|
|
} DEBUG_LOCK_INFORMATION, *PDEBUG_LOCK_INFORMATION;
|
|
|
|
typedef struct _PORT_MESSAGE_HEADER {
|
|
USHORT DataSize;
|
|
USHORT MessageSize;
|
|
USHORT MessageType;
|
|
USHORT VirtualRangesOffset;
|
|
CLIENT_ID ClientId;
|
|
ULONG MessageId;
|
|
ULONG SectionSize;
|
|
} PORT_MESSAGE_HEADER, *PPORT_MESSAGE_HEADER, PORT_MESSAGE, *PPORT_MESSAGE;
|
|
|
|
/***********************************************************************
|
|
* Defines
|
|
*/
|
|
|
|
/* flags for NtCreateFile and NtOpenFile */
|
|
#define FILE_DIRECTORY_FILE 0x00000001
|
|
#define FILE_WRITE_THROUGH 0x00000002
|
|
#define FILE_SEQUENTIAL_ONLY 0x00000004
|
|
#define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008
|
|
#define FILE_SYNCHRONOUS_IO_ALERT 0x00000010
|
|
#define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020
|
|
#define FILE_NON_DIRECTORY_FILE 0x00000040
|
|
#define FILE_CREATE_TREE_CONNECTION 0x00000080
|
|
#define FILE_COMPLETE_IF_OPLOCKED 0x00000100
|
|
#define FILE_NO_EA_KNOWLEDGE 0x00000200
|
|
#define FILE_OPEN_FOR_RECOVERY 0x00000400
|
|
#define FILE_RANDOM_ACCESS 0x00000800
|
|
#define FILE_DELETE_ON_CLOSE 0x00001000
|
|
#define FILE_OPEN_BY_FILE_ID 0x00002000
|
|
#define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000
|
|
#define FILE_NO_COMPRESSION 0x00008000
|
|
#define FILE_RESERVE_OPFILTER 0x00100000
|
|
#define FILE_TRANSACTED_MODE 0x00200000
|
|
#define FILE_OPEN_OFFLINE_FILE 0x00400000
|
|
|
|
#define FILE_ATTRIBUTE_VALID_FLAGS 0x00007fb7
|
|
#define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x000031a7
|
|
|
|
/* status for NtCreateFile or NtOpenFile */
|
|
#define FILE_SUPERSEDED 0
|
|
#define FILE_OPENED 1
|
|
#define FILE_CREATED 2
|
|
#define FILE_OVERWRITTEN 3
|
|
#define FILE_EXISTS 4
|
|
#define FILE_DOES_NOT_EXIST 5
|
|
|
|
/* disposition for NtCreateFile */
|
|
#define FILE_SUPERSEDE 0
|
|
#define FILE_OPEN 1
|
|
#define FILE_CREATE 2
|
|
#define FILE_OPEN_IF 3
|
|
#define FILE_OVERWRITE 4
|
|
#define FILE_OVERWRITE_IF 5
|
|
#define FILE_MAXIMUM_DISPOSITION 5
|
|
|
|
/* Characteristics of a File System */
|
|
#define FILE_REMOVABLE_MEDIA 0x00000001
|
|
#define FILE_READ_ONLY_DEVICE 0x00000002
|
|
#define FILE_FLOPPY_DISKETTE 0x00000004
|
|
#define FILE_WRITE_ONE_MEDIA 0x00000008
|
|
#define FILE_REMOTE_DEVICE 0x00000010
|
|
#define FILE_DEVICE_IS_MOUNTED 0x00000020
|
|
#define FILE_VIRTUAL_VOLUME 0x00000040
|
|
|
|
#if (_WIN32_WINNT >= 0x0501)
|
|
#define INTERNAL_TS_ACTIVE_CONSOLE_ID ( *((volatile ULONG*)(0x7ffe02d8)) )
|
|
#endif /* (_WIN32_WINNT >= 0x0501) */
|
|
|
|
#define LOGONID_CURRENT ((ULONG)-1)
|
|
|
|
#define OBJ_INHERIT 0x00000002L
|
|
#define OBJ_PERMANENT 0x00000010L
|
|
#define OBJ_EXCLUSIVE 0x00000020L
|
|
#define OBJ_CASE_INSENSITIVE 0x00000040L
|
|
#define OBJ_OPENIF 0x00000080L
|
|
#define OBJ_OPENLINK 0x00000100L
|
|
#define OBJ_KERNEL_HANDLE 0x00000200L
|
|
#define OBJ_VALID_ATTRIBUTES 0x000003F2L
|
|
|
|
#define SERVERNAME_CURRENT ((HANDLE)NULL)
|
|
|
|
typedef void (CALLBACK *PNTAPCFUNC)(ULONG_PTR,ULONG_PTR,ULONG_PTR); /* FIXME: not the right name */
|
|
typedef void (CALLBACK *PRTL_THREAD_START_ROUTINE)(LPVOID); /* FIXME: not the right name */
|
|
|
|
|
|
/* DbgPrintEx default levels */
|
|
#define DPFLTR_ERROR_LEVEL 0
|
|
#define DPFLTR_WARNING_LEVEL 1
|
|
#define DPFLTR_TRACE_LEVEL 2
|
|
#define DPFLTR_INFO_LEVEL 3
|
|
#define DPFLTR_MASK 0x8000000
|
|
|
|
/***********************************************************************
|
|
* Function declarations
|
|
*/
|
|
|
|
extern LPSTR _strlwr(LPSTR str); /* FIXME: Doesn't belong here */
|
|
extern LPSTR _strupr(LPSTR str); /* FIXME: Doesn't belong here */
|
|
|
|
#if defined(__i386__) && defined(__GNUC__)
|
|
static inline void WINAPI DbgBreakPoint(void) { __asm__ __volatile__("int3"); }
|
|
static inline void WINAPI DbgUserBreakPoint(void) { __asm__ __volatile__("int3"); }
|
|
#else /* __i386__ && __GNUC__ */
|
|
void WINAPI DbgBreakPoint(void);
|
|
void WINAPI DbgUserBreakPoint(void);
|
|
#endif /* __i386__ && __GNUC__ */
|
|
NTSTATUS WINAPIV DbgPrint(LPCSTR fmt, ...);
|
|
NTSTATUS WINAPIV DbgPrintEx(ULONG iComponentId, ULONG Level, LPCSTR fmt, ...);
|
|
|
|
NTSTATUS WINAPI LdrAccessResource(HMODULE,const IMAGE_RESOURCE_DATA_ENTRY*,void**,PULONG);
|
|
NTSTATUS WINAPI LdrFindResourceDirectory_U(HMODULE,const LDR_RESOURCE_INFO*,ULONG,const IMAGE_RESOURCE_DIRECTORY**);
|
|
NTSTATUS WINAPI LdrFindResource_U(HMODULE,const LDR_RESOURCE_INFO*,ULONG,const IMAGE_RESOURCE_DATA_ENTRY**);
|
|
NTSTATUS WINAPI LdrGetDllHandle(ULONG, ULONG, const UNICODE_STRING*, HMODULE*);
|
|
NTSTATUS WINAPI LdrGetProcedureAddress(HMODULE, const ANSI_STRING*, ULONG, void**);
|
|
void WINAPI LdrInitializeThunk(HANDLE,ULONG,ULONG,ULONG);
|
|
NTSTATUS WINAPI LdrLoadDll(LPCWSTR, DWORD, const UNICODE_STRING*, HMODULE*);
|
|
void WINAPI LdrShutdownProcess(void);
|
|
void WINAPI LdrShutdownThread(void);
|
|
NTSTATUS WINAPI NtAccessCheck(PSECURITY_DESCRIPTOR,HANDLE,ACCESS_MASK,PGENERIC_MAPPING,PPRIVILEGE_SET,PULONG,PULONG,PBOOLEAN);
|
|
NTSTATUS WINAPI NtAdjustPrivilegesToken(HANDLE,BOOLEAN,PTOKEN_PRIVILEGES,DWORD,PTOKEN_PRIVILEGES,PDWORD);
|
|
NTSTATUS WINAPI NtAllocateVirtualMemory(HANDLE,PVOID*,PVOID,ULONG*,ULONG,ULONG);
|
|
NTSTATUS WINAPI NtCancelTimer(HANDLE, BOOLEAN*);
|
|
NTSTATUS WINAPI NtClearEvent(HANDLE);
|
|
NTSTATUS WINAPI NtClose(HANDLE);
|
|
NTSTATUS WINAPI NtCreateEvent(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES *,BOOLEAN,BOOLEAN);
|
|
NTSTATUS WINAPI NtCreateFile(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,PLARGE_INTEGER,ULONG,ULONG,ULONG,ULONG,PVOID,ULONG);
|
|
NTSTATUS WINAPI NtCreateKey(PHKEY,ACCESS_MASK,const OBJECT_ATTRIBUTES*,ULONG,const UNICODE_STRING*,ULONG,PULONG);
|
|
NTSTATUS WINAPI NtCreateSection(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,const LARGE_INTEGER*,ULONG,ULONG,HANDLE);
|
|
NTSTATUS WINAPI NtCreateSemaphore(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*,ULONG,ULONG);
|
|
NTSTATUS WINAPI NtCreateTimer(HANDLE*, ACCESS_MASK, const OBJECT_ATTRIBUTES*, TIMER_TYPE);
|
|
NTSTATUS WINAPI NtDelayExecution(BOOLEAN,const LARGE_INTEGER*);
|
|
NTSTATUS WINAPI NtDeleteKey(HKEY);
|
|
NTSTATUS WINAPI NtDeleteValueKey(HKEY,const UNICODE_STRING *);
|
|
NTSTATUS WINAPI NtDeviceIoControlFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,PVOID,ULONG,PVOID,ULONG);
|
|
NTSTATUS WINAPI NtDuplicateObject(HANDLE,HANDLE,HANDLE,PHANDLE,ACCESS_MASK,ULONG,ULONG);
|
|
NTSTATUS WINAPI NtEnumerateKey(HKEY,ULONG,KEY_INFORMATION_CLASS,void *,DWORD,DWORD *);
|
|
NTSTATUS WINAPI NtEnumerateValueKey(HKEY,ULONG,KEY_VALUE_INFORMATION_CLASS,PVOID,ULONG,PULONG);
|
|
NTSTATUS WINAPI NtFlushBuffersFile(HANDLE,IO_STATUS_BLOCK*);
|
|
NTSTATUS WINAPI NtFlushKey(HKEY);
|
|
NTSTATUS WINAPI NtFlushVirtualMemory(HANDLE,LPCVOID*,ULONG*,ULONG);
|
|
NTSTATUS WINAPI NtFreeVirtualMemory(HANDLE,PVOID*,ULONG*,ULONG);
|
|
NTSTATUS WINAPI NtGetContextThread(HANDLE,CONTEXT*);
|
|
NTSTATUS WINAPI NtImpersonateAnonymousToken(HANDLE);
|
|
NTSTATUS WINAPI NtImpersonateClientOfPort(HANDLE,PPORT_MESSAGE);
|
|
NTSTATUS WINAPI NtImpersonateThread(HANDLE,HANDLE,PSECURITY_QUALITY_OF_SERVICE);
|
|
NTSTATUS WINAPI NtLoadKey(const OBJECT_ATTRIBUTES *,const OBJECT_ATTRIBUTES *);
|
|
NTSTATUS WINAPI NtLockFile(HANDLE,HANDLE,PIO_APC_ROUTINE,void*,PIO_STATUS_BLOCK,PLARGE_INTEGER,PLARGE_INTEGER,ULONG*,BOOLEAN,BOOLEAN);
|
|
NTSTATUS WINAPI NtLockVirtualMemory(HANDLE,PVOID*,ULONG*,ULONG);
|
|
NTSTATUS WINAPI NtMapViewOfSection(HANDLE,HANDLE,PVOID*,ULONG,ULONG,const LARGE_INTEGER*,ULONG*,SECTION_INHERIT,ULONG,ULONG);
|
|
NTSTATUS WINAPI NtNotifyChangeKey(HKEY,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,BOOLEAN,PVOID,ULONG,BOOLEAN);
|
|
NTSTATUS WINAPI NtOpenEvent(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES *);
|
|
NTSTATUS WINAPI NtOpenFile(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,ULONG,ULONG);
|
|
NTSTATUS WINAPI NtOpenKey(PHKEY,ACCESS_MASK,const OBJECT_ATTRIBUTES *);
|
|
NTSTATUS WINAPI NtOpenProcessToken(HANDLE,DWORD,HANDLE *);
|
|
NTSTATUS WINAPI NtOpenSection(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*);
|
|
NTSTATUS WINAPI NtOpenThread(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,const CLIENT_ID*);
|
|
NTSTATUS WINAPI NtOpenThreadToken(HANDLE,DWORD,BOOLEAN,HANDLE *);
|
|
NTSTATUS WINAPI NtOpenTimer(HANDLE*, ACCESS_MASK, const OBJECT_ATTRIBUTES*);
|
|
NTSTATUS WINAPI NtProtectVirtualMemory(HANDLE,PVOID*,ULONG*,ULONG,ULONG*);
|
|
NTSTATUS WINAPI NtPulseEvent(HANDLE,PULONG);
|
|
NTSTATUS WINAPI NtQueueApcThread(HANDLE,PNTAPCFUNC,ULONG_PTR,ULONG_PTR,ULONG_PTR);
|
|
NTSTATUS WINAPI NtQueryAttributesFile(const OBJECT_ATTRIBUTES*,FILE_BASIC_INFORMATION*);
|
|
NTSTATUS WINAPI NtQueryDefaultLocale(BOOLEAN,LCID*);
|
|
NTSTATUS WINAPI NtQueryDirectoryFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,PVOID,ULONG,FILE_INFORMATION_CLASS,BOOLEAN,PUNICODE_STRING,BOOLEAN);
|
|
NTSTATUS WINAPI NtQueryFullAttributesFile(const OBJECT_ATTRIBUTES*,FILE_NETWORK_OPEN_INFORMATION*);
|
|
NTSTATUS WINAPI NtQueryInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,LONG,FILE_INFORMATION_CLASS);
|
|
NTSTATUS WINAPI NtQueryInformationProcess(HANDLE,PROCESSINFOCLASS,PVOID,ULONG,PULONG);
|
|
NTSTATUS WINAPI NtQueryInformationThread(HANDLE,THREADINFOCLASS,PVOID,ULONG,PULONG);
|
|
NTSTATUS WINAPI NtQueryInformationToken(HANDLE,DWORD,LPVOID,DWORD,LPDWORD);
|
|
NTSTATUS WINAPI NtQueryKey(HKEY,KEY_INFORMATION_CLASS,void *,DWORD,DWORD *);
|
|
NTSTATUS WINAPI NtQueryMultipleValueKey(HKEY,PVALENTW,ULONG,PVOID,ULONG,PULONG);
|
|
NTSTATUS WINAPI NtQueryObject(HANDLE, OBJECT_INFORMATION_CLASS, PVOID, ULONG, PULONG);
|
|
NTSTATUS WINAPI NtQuerySecurityObject(HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,ULONG,PULONG);
|
|
NTSTATUS WINAPI NtQuerySystemInformation(SYSTEM_INFORMATION_CLASS,PVOID,ULONG,PULONG);
|
|
NTSTATUS WINAPI NtQuerySystemTime(PLARGE_INTEGER);
|
|
NTSTATUS WINAPI NtQueryValueKey(HKEY,const UNICODE_STRING *,KEY_VALUE_INFORMATION_CLASS,void *,DWORD,DWORD *);
|
|
NTSTATUS WINAPI NtQueryVirtualMemory(HANDLE,LPCVOID,MEMORY_INFORMATION_CLASS,PVOID,ULONG,ULONG*);
|
|
NTSTATUS WINAPI NtQueryVolumeInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,FS_INFORMATION_CLASS);
|
|
void WINAPI NtRaiseException(PEXCEPTION_RECORD,PCONTEXT,BOOL);
|
|
NTSTATUS WINAPI NtReadFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,PVOID,ULONG,PLARGE_INTEGER,PULONG);
|
|
NTSTATUS WINAPI NtReadVirtualMemory(HANDLE,const void*,void*,SIZE_T,SIZE_T*);
|
|
NTSTATUS WINAPI NtReleaseSemaphore(HANDLE,ULONG,PULONG);
|
|
NTSTATUS WINAPI NtReplaceKey(POBJECT_ATTRIBUTES,HKEY,POBJECT_ATTRIBUTES);
|
|
NTSTATUS WINAPI NtResetEvent(HANDLE,PULONG);
|
|
NTSTATUS WINAPI NtRestoreKey(HKEY,HANDLE,ULONG);
|
|
NTSTATUS WINAPI NtResumeThread(HANDLE,PULONG);
|
|
NTSTATUS WINAPI NtSaveKey(HKEY,HANDLE);
|
|
NTSTATUS WINAPI NtSetContextThread(HANDLE,const CONTEXT*);
|
|
NTSTATUS WINAPI NtSetDefaultLocale(BOOLEAN,LCID);
|
|
NTSTATUS WINAPI NtSetEvent(HANDLE,PULONG);
|
|
NTSTATUS WINAPI NtSetInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,FILE_INFORMATION_CLASS);
|
|
NTSTATUS WINAPI NtSetInformationKey(HKEY,const int,PVOID,ULONG);
|
|
NTSTATUS WINAPI NtSetInformationObject(HANDLE, OBJECT_INFORMATION_CLASS, PVOID, ULONG);
|
|
NTSTATUS WINAPI NtSetInformationThread(HANDLE,THREADINFOCLASS,LPCVOID,ULONG);
|
|
NTSTATUS WINAPI NtSetSecurityObject(HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR);
|
|
NTSTATUS WINAPI NtSetSystemTime(const LARGE_INTEGER*,LARGE_INTEGER*);
|
|
NTSTATUS WINAPI NtSetTimer(HANDLE, const LARGE_INTEGER*, PTIMERAPCROUTINE, PVOID, BOOLEAN, ULONG, BOOLEAN*);
|
|
NTSTATUS WINAPI NtSetValueKey(HKEY,const UNICODE_STRING *,ULONG,ULONG,const void *,ULONG);
|
|
NTSTATUS WINAPI NtSuspendThread(HANDLE,PULONG);
|
|
NTSTATUS WINAPI NtTerminateProcess(HANDLE,LONG);
|
|
NTSTATUS WINAPI NtTerminateThread(HANDLE,LONG);
|
|
NTSTATUS WINAPI NtUnloadKey(HKEY);
|
|
NTSTATUS WINAPI NtUnlockFile(HANDLE,PIO_STATUS_BLOCK,PLARGE_INTEGER,PLARGE_INTEGER,PULONG);
|
|
NTSTATUS WINAPI NtUnlockVirtualMemory(HANDLE,PVOID*,ULONG*,ULONG);
|
|
NTSTATUS WINAPI NtUnmapViewOfSection(HANDLE,PVOID);
|
|
NTSTATUS WINAPI NtWaitForSingleObject(HANDLE,BOOLEAN,const LARGE_INTEGER*);
|
|
NTSTATUS WINAPI NtWaitForMultipleObjects(ULONG,const HANDLE*,BOOLEAN,BOOLEAN,const LARGE_INTEGER*);
|
|
NTSTATUS WINAPI NtWriteFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,const void*,ULONG,PLARGE_INTEGER,PULONG);
|
|
NTSTATUS WINAPI NtWriteVirtualMemory(HANDLE,void*,const void*,SIZE_T,SIZE_T*);
|
|
|
|
void WINAPI RtlAcquirePebLock(void);
|
|
BYTE WINAPI RtlAcquireResourceExclusive(LPRTL_RWLOCK,BYTE);
|
|
BYTE WINAPI RtlAcquireResourceShared(LPRTL_RWLOCK,BYTE);
|
|
NTSTATUS WINAPI RtlAddAce(PACL,DWORD,DWORD,PACE_HEADER,DWORD);
|
|
NTSTATUS WINAPI RtlAddAccessAllowedAce(PACL,DWORD,DWORD,PSID);
|
|
NTSTATUS WINAPI RtlAddAccessAllowedAceEx(PACL,DWORD,DWORD,DWORD,PSID);
|
|
NTSTATUS WINAPI RtlAddAccessDeniedAce(PACL,DWORD,DWORD,PSID);
|
|
NTSTATUS WINAPI RtlAddAccessDeniedAceEx(PACL,DWORD,DWORD,DWORD,PSID);
|
|
PVOID WINAPI RtlAddVectoredExceptionHandler(ULONG,PVECTORED_EXCEPTION_HANDLER);
|
|
DWORD WINAPI RtlAdjustPrivilege(DWORD,DWORD,DWORD,DWORD);
|
|
BOOLEAN WINAPI RtlAllocateAndInitializeSid(PSID_IDENTIFIER_AUTHORITY,BYTE,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,PSID *);
|
|
PVOID WINAPI RtlAllocateHeap(HANDLE,ULONG,ULONG);
|
|
DWORD WINAPI RtlAnsiStringToUnicodeSize(const STRING *);
|
|
NTSTATUS WINAPI RtlAnsiStringToUnicodeString(PUNICODE_STRING,PCANSI_STRING,BOOLEAN);
|
|
NTSTATUS WINAPI RtlAppendAsciizToString(STRING *,LPCSTR);
|
|
NTSTATUS WINAPI RtlAppendStringToString(STRING *,const STRING *);
|
|
NTSTATUS WINAPI RtlAppendUnicodeStringToString(UNICODE_STRING *,const UNICODE_STRING *);
|
|
NTSTATUS WINAPI RtlAppendUnicodeToString(UNICODE_STRING *,LPCWSTR);
|
|
BOOLEAN WINAPI RtlAreAllAccessesGranted(ACCESS_MASK,ACCESS_MASK);
|
|
BOOLEAN WINAPI RtlAreAnyAccessesGranted(ACCESS_MASK,ACCESS_MASK);
|
|
BOOLEAN WINAPI RtlAreBitsSet(PCRTL_BITMAP,ULONG,ULONG);
|
|
BOOLEAN WINAPI RtlAreBitsClear(PCRTL_BITMAP,ULONG,ULONG);
|
|
|
|
NTSTATUS WINAPI RtlCharToInteger(PCSZ,ULONG,PULONG);
|
|
void WINAPI RtlClearAllBits(PRTL_BITMAP);
|
|
void WINAPI RtlClearBits(PRTL_BITMAP,ULONG,ULONG);
|
|
ULONG WINAPI RtlCompactHeap(HANDLE,ULONG);
|
|
LONG WINAPI RtlCompareString(const STRING*,const STRING*,BOOLEAN);
|
|
LONG WINAPI RtlCompareUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
|
|
DWORD WINAPI RtlComputeCrc32(DWORD,PBYTE,INT);
|
|
NTSTATUS WINAPI RtlConvertSidToUnicodeString(PUNICODE_STRING,PSID,BOOLEAN);
|
|
LONGLONG WINAPI RtlConvertLongToLargeInteger(LONG);
|
|
ULONGLONG WINAPI RtlConvertUlongToLargeInteger(ULONG);
|
|
void WINAPI RtlCopyLuid(PLUID,const LUID*);
|
|
void WINAPI RtlCopyLuidAndAttributesArray(ULONG,const LUID_AND_ATTRIBUTES*,PLUID_AND_ATTRIBUTES);
|
|
DWORD WINAPI RtlCopySid(DWORD,PSID,PSID);
|
|
void WINAPI RtlCopyString(STRING*,const STRING*);
|
|
void WINAPI RtlCopyUnicodeString(UNICODE_STRING*,const UNICODE_STRING*);
|
|
NTSTATUS WINAPI RtlCreateAcl(PACL,DWORD,DWORD);
|
|
NTSTATUS WINAPI RtlCreateEnvironment(BOOLEAN, PWSTR*);
|
|
HANDLE WINAPI RtlCreateHeap(ULONG,PVOID,ULONG,ULONG,PVOID,PRTL_HEAP_DEFINITION);
|
|
NTSTATUS WINAPI RtlCreateProcessParameters(RTL_USER_PROCESS_PARAMETERS**,const UNICODE_STRING*,
|
|
const UNICODE_STRING*,const UNICODE_STRING*,
|
|
const UNICODE_STRING*,PWSTR,const UNICODE_STRING*,
|
|
const UNICODE_STRING*,const UNICODE_STRING*,
|
|
const UNICODE_STRING*);
|
|
NTSTATUS WINAPI RtlCreateSecurityDescriptor(PSECURITY_DESCRIPTOR,DWORD);
|
|
BOOLEAN WINAPI RtlCreateUnicodeString(PUNICODE_STRING,LPCWSTR);
|
|
BOOLEAN WINAPI RtlCreateUnicodeStringFromAsciiz(PUNICODE_STRING,LPCSTR);
|
|
NTSTATUS WINAPI RtlCreateUserThread(HANDLE,const SECURITY_DESCRIPTOR*,BOOLEAN,PVOID,SIZE_T,SIZE_T,PRTL_THREAD_START_ROUTINE,void*,HANDLE*,CLIENT_ID*);
|
|
|
|
NTSTATUS WINAPI RtlDeleteAce(PACL,DWORD);
|
|
NTSTATUS WINAPI RtlDeleteCriticalSection(RTL_CRITICAL_SECTION *);
|
|
void WINAPI RtlDeleteResource(LPRTL_RWLOCK);
|
|
DWORD WINAPI RtlDeleteSecurityObject(DWORD);
|
|
PRTL_USER_PROCESS_PARAMETERS WINAPI RtlDeNormalizeProcessParams(RTL_USER_PROCESS_PARAMETERS*);
|
|
NTSTATUS WINAPI RtlDestroyEnvironment(PWSTR);
|
|
HANDLE WINAPI RtlDestroyHeap(HANDLE);
|
|
void WINAPI RtlDestroyProcessParameters(RTL_USER_PROCESS_PARAMETERS*);
|
|
DOS_PATHNAME_TYPE WINAPI RtlDetermineDosPathNameType_U(PCWSTR);
|
|
BOOLEAN WINAPI RtlDoesFileExists_U(LPCWSTR);
|
|
BOOLEAN WINAPI RtlDosPathNameToNtPathName_U(PCWSTR,PUNICODE_STRING,PWSTR*,CURDIR*);
|
|
ULONG WINAPI RtlDosSearchPath_U(LPCWSTR, LPCWSTR, LPCWSTR, ULONG, LPWSTR, LPWSTR*);
|
|
WCHAR WINAPI RtlDowncaseUnicodeChar(WCHAR);
|
|
NTSTATUS WINAPI RtlDowncaseUnicodeString(UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
|
|
void WINAPI RtlDumpResource(LPRTL_RWLOCK);
|
|
NTSTATUS WINAPI RtlDuplicateUnicodeString(int,const UNICODE_STRING*,UNICODE_STRING*);
|
|
|
|
LONGLONG WINAPI RtlEnlargedIntegerMultiply(INT,INT);
|
|
ULONGLONG WINAPI RtlEnlargedUnsignedMultiply(UINT,UINT);
|
|
UINT WINAPI RtlEnlargedUnsignedDivide(ULONGLONG,UINT,UINT *);
|
|
NTSTATUS WINAPI RtlEnterCriticalSection(RTL_CRITICAL_SECTION *);
|
|
void WINAPI RtlEraseUnicodeString(UNICODE_STRING*);
|
|
NTSTATUS WINAPI RtlEqualComputerName(const UNICODE_STRING*,const UNICODE_STRING*);
|
|
NTSTATUS WINAPI RtlEqualDomainName(const UNICODE_STRING*,const UNICODE_STRING*);
|
|
BOOLEAN WINAPI RtlEqualLuid(const LUID*,const LUID*);
|
|
BOOL WINAPI RtlEqualPrefixSid(PSID,PSID);
|
|
BOOL WINAPI RtlEqualSid(PSID,PSID);
|
|
BOOLEAN WINAPI RtlEqualString(const STRING*,const STRING*,BOOLEAN);
|
|
BOOLEAN WINAPI RtlEqualUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
|
|
NTSTATUS WINAPI RtlExpandEnvironmentStrings_U(PWSTR, const UNICODE_STRING*, UNICODE_STRING*, ULONG*);
|
|
LONGLONG WINAPI RtlExtendedMagicDivide(LONGLONG,LONGLONG,INT);
|
|
LONGLONG WINAPI RtlExtendedIntegerMultiply(LONGLONG,INT);
|
|
LONGLONG WINAPI RtlExtendedLargeIntegerDivide(LONGLONG,INT,INT *);
|
|
|
|
NTSTATUS WINAPI RtlFindCharInUnicodeString(int,const UNICODE_STRING*,const UNICODE_STRING*,USHORT*);
|
|
ULONG WINAPI RtlFindClearBits(PCRTL_BITMAP,ULONG,ULONG);
|
|
ULONG WINAPI RtlFindClearBitsAndSet(PRTL_BITMAP,ULONG,ULONG);
|
|
ULONG WINAPI RtlFindClearRuns(PCRTL_BITMAP,PRTL_BITMAP_RUN,ULONG,BOOLEAN);
|
|
ULONG WINAPI RtlFindLastBackwardRunSet(PCRTL_BITMAP,ULONG,PULONG);
|
|
ULONG WINAPI RtlFindLastBackwardRunClear(PCRTL_BITMAP,ULONG,PULONG);
|
|
CCHAR WINAPI RtlFindLeastSignificantBit(ULONGLONG);
|
|
ULONG WINAPI RtlFindLongestRunSet(PCRTL_BITMAP,PULONG);
|
|
ULONG WINAPI RtlFindLongestRunClear(PCRTL_BITMAP,PULONG);
|
|
NTSTATUS WINAPI RtlFindMessage(HMODULE,ULONG,ULONG,ULONG,const MESSAGE_RESOURCE_ENTRY**);
|
|
CCHAR WINAPI RtlFindMostSignificantBit(ULONGLONG);
|
|
ULONG WINAPI RtlFindNextForwardRunSet(PCRTL_BITMAP,ULONG,PULONG);
|
|
ULONG WINAPI RtlFindNextForwardRunClear(PCRTL_BITMAP,ULONG,PULONG);
|
|
ULONG WINAPI RtlFindSetBits(PCRTL_BITMAP,ULONG,ULONG);
|
|
ULONG WINAPI RtlFindSetBitsAndClear(PRTL_BITMAP,ULONG,ULONG);
|
|
ULONG WINAPI RtlFindSetRuns(PCRTL_BITMAP,PRTL_BITMAP_RUN,ULONG,BOOLEAN);
|
|
BOOLEAN WINAPI RtlFirstFreeAce(PACL,PACE_HEADER *);
|
|
NTSTATUS WINAPI RtlFormatCurrentUserKeyPath(PUNICODE_STRING);
|
|
NTSTATUS WINAPI RtlFormatMessage(LPWSTR,UCHAR,BOOLEAN,BOOLEAN,BOOLEAN,va_list *,LPWSTR,ULONG);
|
|
void WINAPI RtlFreeAnsiString(PANSI_STRING);
|
|
BOOLEAN WINAPI RtlFreeHeap(HANDLE,ULONG,PVOID);
|
|
void WINAPI RtlFreeOemString(POEM_STRING);
|
|
DWORD WINAPI RtlFreeSid(PSID);
|
|
void WINAPI RtlFreeUnicodeString(PUNICODE_STRING);
|
|
|
|
DWORD WINAPI RtlGetAce(PACL,DWORD,LPVOID *);
|
|
NTSTATUS WINAPI RtlGetControlSecurityDescriptor(PSECURITY_DESCRIPTOR, PSECURITY_DESCRIPTOR_CONTROL,LPDWORD);
|
|
NTSTATUS WINAPI RtlGetCurrentDirectory_U(ULONG, LPWSTR);
|
|
NTSTATUS WINAPI RtlGetDaclSecurityDescriptor(PSECURITY_DESCRIPTOR,PBOOLEAN,PACL *,PBOOLEAN);
|
|
ULONG WINAPI RtlGetFullPathName_U(PCWSTR,ULONG,PWSTR,PWSTR*);
|
|
NTSTATUS WINAPI RtlGetGroupSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID *,PBOOLEAN);
|
|
DWORD WINAPI RtlGetLastWin32Error(void);
|
|
DWORD WINAPI RtlGetLongestNtPathLength(void);
|
|
BOOLEAN WINAPI RtlGetNtProductType(LPDWORD);
|
|
NTSTATUS WINAPI RtlGetOwnerSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID *,PBOOLEAN);
|
|
ULONG WINAPI RtlGetProcessHeaps(ULONG,HANDLE*);
|
|
NTSTATUS WINAPI RtlGetSaclSecurityDescriptor(PSECURITY_DESCRIPTOR,PBOOLEAN,PACL *,PBOOLEAN);
|
|
NTSTATUS WINAPI RtlGetVersion(RTL_OSVERSIONINFOEXW*);
|
|
|
|
PSID_IDENTIFIER_AUTHORITY WINAPI RtlIdentifierAuthoritySid(PSID);
|
|
PVOID WINAPI RtlImageDirectoryEntryToData(HMODULE,BOOL,WORD,ULONG *);
|
|
PIMAGE_NT_HEADERS WINAPI RtlImageNtHeader(HMODULE);
|
|
PIMAGE_SECTION_HEADER WINAPI RtlImageRvaToSection(const IMAGE_NT_HEADERS *,HMODULE,DWORD);
|
|
PVOID WINAPI RtlImageRvaToVa(const IMAGE_NT_HEADERS *,HMODULE,DWORD,IMAGE_SECTION_HEADER **);
|
|
BOOL WINAPI RtlImpersonateSelf(SECURITY_IMPERSONATION_LEVEL);
|
|
void WINAPI RtlInitString(PSTRING,PCSZ);
|
|
void WINAPI RtlInitAnsiString(PANSI_STRING,PCSZ);
|
|
void WINAPI RtlInitUnicodeString(PUNICODE_STRING,PCWSTR);
|
|
NTSTATUS WINAPI RtlInitUnicodeStringEx(PUNICODE_STRING,PCWSTR);
|
|
NTSTATUS WINAPI RtlInitializeCriticalSection(RTL_CRITICAL_SECTION *);
|
|
NTSTATUS WINAPI RtlInitializeCriticalSectionAndSpinCount(RTL_CRITICAL_SECTION *,DWORD);
|
|
void WINAPI RtlInitializeBitMap(PRTL_BITMAP,LPBYTE,ULONG);
|
|
void WINAPI RtlInitializeResource(LPRTL_RWLOCK);
|
|
BOOL WINAPI RtlInitializeSid(PSID,PSID_IDENTIFIER_AUTHORITY,BYTE);
|
|
|
|
NTSTATUS WINAPI RtlInt64ToUnicodeString(ULONGLONG,ULONG,UNICODE_STRING *);
|
|
NTSTATUS WINAPI RtlIntegerToChar(ULONG,ULONG,ULONG,PCHAR);
|
|
NTSTATUS WINAPI RtlIntegerToUnicodeString(ULONG,ULONG,UNICODE_STRING *);
|
|
ULONG WINAPI RtlIsDosDeviceName_U(PCWSTR);
|
|
BOOLEAN WINAPI RtlIsNameLegalDOS8Dot3(const UNICODE_STRING*,POEM_STRING,PBOOLEAN);
|
|
DWORD WINAPI RtlIsTextUnicode(LPVOID,DWORD,DWORD *);
|
|
|
|
LONGLONG WINAPI RtlLargeIntegerAdd(LONGLONG,LONGLONG);
|
|
LONGLONG WINAPI RtlLargeIntegerArithmeticShift(LONGLONG,INT);
|
|
ULONGLONG WINAPI RtlLargeIntegerDivide( ULONGLONG,ULONGLONG,ULONGLONG *);
|
|
LONGLONG WINAPI RtlLargeIntegerNegate(LONGLONG);
|
|
LONGLONG WINAPI RtlLargeIntegerShiftLeft(LONGLONG,INT);
|
|
LONGLONG WINAPI RtlLargeIntegerShiftRight(LONGLONG,INT);
|
|
LONGLONG WINAPI RtlLargeIntegerSubtract(LONGLONG,LONGLONG);
|
|
NTSTATUS WINAPI RtlLargeIntegerToChar(const ULONGLONG *,ULONG,ULONG,PCHAR);
|
|
NTSTATUS WINAPI RtlLeaveCriticalSection(RTL_CRITICAL_SECTION *);
|
|
DWORD WINAPI RtlLengthRequiredSid(DWORD);
|
|
ULONG WINAPI RtlLengthSecurityDescriptor(PSECURITY_DESCRIPTOR);
|
|
DWORD WINAPI RtlLengthSid(PSID);
|
|
NTSTATUS WINAPI RtlLocalTimeToSystemTime(const LARGE_INTEGER*,PLARGE_INTEGER);
|
|
BOOLEAN WINAPI RtlLockHeap(HANDLE);
|
|
|
|
NTSTATUS WINAPI RtlMakeSelfRelativeSD(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,LPDWORD);
|
|
void WINAPI RtlMapGenericMask(PACCESS_MASK,const GENERIC_MAPPING*);
|
|
NTSTATUS WINAPI RtlMultiByteToUnicodeN(LPWSTR,DWORD,LPDWORD,LPCSTR,DWORD);
|
|
NTSTATUS WINAPI RtlMultiByteToUnicodeSize(DWORD*,LPCSTR,UINT);
|
|
|
|
DWORD WINAPI RtlNewSecurityObject(DWORD,DWORD,DWORD,DWORD,DWORD,DWORD);
|
|
PRTL_USER_PROCESS_PARAMETERS WINAPI RtlNormalizeProcessParams(RTL_USER_PROCESS_PARAMETERS*);
|
|
ULONG WINAPI RtlNtStatusToDosError(NTSTATUS);
|
|
ULONG WINAPI RtlNtStatusToDosErrorNoTeb(NTSTATUS);
|
|
ULONG WINAPI RtlNumberOfSetBits(PCRTL_BITMAP);
|
|
ULONG WINAPI RtlNumberOfClearBits(PCRTL_BITMAP);
|
|
|
|
UINT WINAPI RtlOemStringToUnicodeSize(const STRING*);
|
|
NTSTATUS WINAPI RtlOemStringToUnicodeString(UNICODE_STRING*,const STRING*,BOOLEAN);
|
|
NTSTATUS WINAPI RtlOemToUnicodeN(LPWSTR,DWORD,LPDWORD,LPCSTR,DWORD);
|
|
DWORD WINAPI RtlOpenCurrentUser(ACCESS_MASK,PHKEY);
|
|
|
|
BOOLEAN WINAPI RtlPrefixString(const STRING*,const STRING*,BOOLEAN);
|
|
BOOLEAN WINAPI RtlPrefixUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
|
|
|
|
NTSTATUS WINAPI RtlQueryEnvironmentVariable_U(PWSTR,PUNICODE_STRING,PUNICODE_STRING);
|
|
NTSTATUS WINAPI RtlQueryInformationAcl(PACL,LPVOID,DWORD,ACL_INFORMATION_CLASS);
|
|
NTSTATUS WINAPI RtlQueryTimeZoneInformation(LPTIME_ZONE_INFORMATION);
|
|
|
|
void WINAPI RtlRaiseException(PEXCEPTION_RECORD);
|
|
void WINAPI RtlRaiseStatus(NTSTATUS);
|
|
ULONG WINAPI RtlRandom(PULONG);
|
|
PVOID WINAPI RtlReAllocateHeap(HANDLE,ULONG,PVOID,ULONG);
|
|
void WINAPI RtlReleasePebLock(void);
|
|
void WINAPI RtlReleaseResource(LPRTL_RWLOCK);
|
|
ULONG WINAPI RtlRemoveVectoredExceptionHandler(PVOID);
|
|
void WINAPI RtlRestoreLastWin32Error(DWORD);
|
|
|
|
void WINAPI RtlSecondsSince1970ToTime(DWORD,LARGE_INTEGER *);
|
|
void WINAPI RtlSecondsSince1980ToTime(DWORD,LARGE_INTEGER *);
|
|
NTSTATUS WINAPI RtlSelfRelativeToAbsoluteSD(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,
|
|
PDWORD,PACL,PDWORD,PACL,PDWORD,PSID,PDWORD,PSID,PDWORD);
|
|
void WINAPI RtlSetAllBits(PRTL_BITMAP);
|
|
void WINAPI RtlSetBits(PRTL_BITMAP,ULONG,ULONG);
|
|
NTSTATUS WINAPI RtlSetCurrentDirectory_U(const UNICODE_STRING*);
|
|
void WINAPI RtlSetCurrentEnvironment(PWSTR, PWSTR*);
|
|
NTSTATUS WINAPI RtlSetDaclSecurityDescriptor(PSECURITY_DESCRIPTOR,BOOLEAN,PACL,BOOLEAN);
|
|
NTSTATUS WINAPI RtlSetEnvironmentVariable(PWSTR*,PUNICODE_STRING,PUNICODE_STRING);
|
|
NTSTATUS WINAPI RtlSetOwnerSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID,BOOLEAN);
|
|
NTSTATUS WINAPI RtlSetGroupSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID,BOOLEAN);
|
|
void WINAPI RtlSetLastWin32Error(DWORD);
|
|
NTSTATUS WINAPI RtlSetSaclSecurityDescriptor(PSECURITY_DESCRIPTOR,BOOLEAN,PACL,BOOLEAN);
|
|
NTSTATUS WINAPI RtlSetTimeZoneInformation(const TIME_ZONE_INFORMATION*);
|
|
ULONG WINAPI RtlSizeHeap(HANDLE,ULONG,PVOID);
|
|
LPDWORD WINAPI RtlSubAuthoritySid(PSID,DWORD);
|
|
LPBYTE WINAPI RtlSubAuthorityCountSid(PSID);
|
|
NTSTATUS WINAPI RtlSystemTimeToLocalTime(const LARGE_INTEGER*,PLARGE_INTEGER);
|
|
|
|
void WINAPI RtlTimeToTimeFields(const LARGE_INTEGER*,PTIME_FIELDS);
|
|
BOOLEAN WINAPI RtlTimeFieldsToTime(PTIME_FIELDS,PLARGE_INTEGER);
|
|
void WINAPI RtlTimeToElapsedTimeFields(const LARGE_INTEGER *,PTIME_FIELDS);
|
|
BOOLEAN WINAPI RtlTimeToSecondsSince1970(const LARGE_INTEGER *,LPDWORD);
|
|
BOOLEAN WINAPI RtlTimeToSecondsSince1980(const LARGE_INTEGER *,LPDWORD);
|
|
BOOL WINAPI RtlTryEnterCriticalSection(RTL_CRITICAL_SECTION *);
|
|
|
|
ULONGLONG __cdecl RtlUlonglongByteSwap(ULONGLONG);
|
|
DWORD WINAPI RtlUnicodeStringToAnsiSize(const UNICODE_STRING*);
|
|
NTSTATUS WINAPI RtlUnicodeStringToAnsiString(PANSI_STRING,PCUNICODE_STRING,BOOLEAN);
|
|
NTSTATUS WINAPI RtlUnicodeStringToInteger(const UNICODE_STRING *,ULONG,ULONG *);
|
|
DWORD WINAPI RtlUnicodeStringToOemSize(const UNICODE_STRING*);
|
|
NTSTATUS WINAPI RtlUnicodeStringToOemString(POEM_STRING,PCUNICODE_STRING,BOOLEAN);
|
|
NTSTATUS WINAPI RtlUnicodeToMultiByteN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
|
|
NTSTATUS WINAPI RtlUnicodeToMultiByteSize(PULONG,PCWSTR,ULONG);
|
|
NTSTATUS WINAPI RtlUnicodeToOemN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
|
|
ULONG WINAPI RtlUniform(PULONG);
|
|
BOOLEAN WINAPI RtlUnlockHeap(HANDLE);
|
|
void WINAPI RtlUnwind(PVOID,PVOID,PEXCEPTION_RECORD,PVOID);
|
|
#ifdef __ia64__
|
|
void WINAPI RtlUnwind2(FRAME_POINTERS,PVOID,PEXCEPTION_RECORD,PVOID,PCONTEXT);
|
|
void WINAPI RtlUnwindEx(FRAME_POINTERS,PVOID,PEXCEPTION_RECORD,PVOID,PCONTEXT,PUNWIND_HISTORY_TABLE);
|
|
#endif
|
|
WCHAR WINAPI RtlUpcaseUnicodeChar(WCHAR);
|
|
NTSTATUS WINAPI RtlUpcaseUnicodeString(UNICODE_STRING*,const UNICODE_STRING *,BOOLEAN);
|
|
NTSTATUS WINAPI RtlUpcaseUnicodeStringToAnsiString(STRING*,const UNICODE_STRING*,BOOLEAN);
|
|
NTSTATUS WINAPI RtlUpcaseUnicodeStringToCountedOemString(STRING*,const UNICODE_STRING*,BOOLEAN);
|
|
NTSTATUS WINAPI RtlUpcaseUnicodeStringToOemString(STRING*,const UNICODE_STRING*,BOOLEAN);
|
|
NTSTATUS WINAPI RtlUpcaseUnicodeToMultiByteN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
|
|
NTSTATUS WINAPI RtlUpcaseUnicodeToOemN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
|
|
CHAR WINAPI RtlUpperChar(CHAR);
|
|
void WINAPI RtlUpperString(STRING *,const STRING *);
|
|
|
|
NTSTATUS WINAPI RtlValidSecurityDescriptor(PSECURITY_DESCRIPTOR);
|
|
BOOLEAN WINAPI RtlValidAcl(PACL);
|
|
BOOLEAN WINAPI RtlValidSid(PSID);
|
|
BOOLEAN WINAPI RtlValidateHeap(HANDLE,ULONG,LPCVOID);
|
|
NTSTATUS WINAPI RtlVerifyVersionInfo(const RTL_OSVERSIONINFOEXW*,DWORD,DWORDLONG);
|
|
|
|
NTSTATUS WINAPI RtlWalkHeap(HANDLE,PVOID);
|
|
|
|
NTSTATUS WINAPI RtlpWaitForCriticalSection(RTL_CRITICAL_SECTION *);
|
|
NTSTATUS WINAPI RtlpUnWaitCriticalSection(RTL_CRITICAL_SECTION *);
|
|
|
|
/***********************************************************************
|
|
* Inline functions
|
|
*/
|
|
|
|
#define InitializeObjectAttributes(p,n,a,r,s) \
|
|
do { \
|
|
(p)->Length = sizeof(OBJECT_ATTRIBUTES); \
|
|
(p)->RootDirectory = r; \
|
|
(p)->Attributes = a; \
|
|
(p)->ObjectName = n; \
|
|
(p)->SecurityDescriptor = s; \
|
|
(p)->SecurityQualityOfService = NULL; \
|
|
} while (0)
|
|
|
|
#define NtCurrentProcess() ((HANDLE)-1)
|
|
|
|
#define RtlFillMemory(Destination,Length,Fill) memset((Destination),(Fill),(Length))
|
|
#define RtlMoveMemory(Destination,Source,Length) memmove((Destination),(Source),(Length))
|
|
#define RtlStoreUlong(p,v) do { ULONG _v = (v); memcpy((p), &_v, sizeof(_v)); } while (0)
|
|
#define RtlStoreUlonglong(p,v) do { ULONGLONG _v = (v); memcpy((p), &_v, sizeof(_v)); } while (0)
|
|
#define RtlRetrieveUlong(p,s) memcpy((p), (s), sizeof(ULONG))
|
|
#define RtlRetrieveUlonglong(p,s) memcpy((p), (s), sizeof(ULONGLONG))
|
|
#define RtlZeroMemory(Destination,Length) memset((Destination),0,(Length))
|
|
|
|
inline static BOOLEAN RtlCheckBit(PCRTL_BITMAP lpBits, ULONG ulBit)
|
|
{
|
|
if (lpBits && ulBit < lpBits->SizeOfBitMap &&
|
|
lpBits->BitMapBuffer[ulBit >> 3] & (1 << (ulBit & 7)))
|
|
return TRUE;
|
|
return FALSE;
|
|
}
|
|
|
|
#define RtlClearAllBits(p) \
|
|
do { \
|
|
PRTL_BITMAP _p = (p); \
|
|
memset(_p->BitMapBuffer,0,((_p->SizeOfBitMap + 31) & 0xffffffe0) >> 3); \
|
|
} while (0)
|
|
|
|
#define RtlInitializeBitMap(p,b,s) \
|
|
do { \
|
|
PRTL_BITMAP _p = (p); \
|
|
_p->SizeOfBitMap = (s); \
|
|
_p->BitMapBuffer = (b); \
|
|
} while (0)
|
|
|
|
#define RtlSetAllBits(p) \
|
|
do { \
|
|
PRTL_BITMAP _p = (p); \
|
|
memset(_p->BitMapBuffer,0xff,((_p->SizeOfBitMap + 31) & 0xffffffe0) >> 3); \
|
|
} while (0)
|
|
|
|
/* These are implemented as __fastcall, so we can't let Winelib apps link with them */
|
|
inline static USHORT RtlUshortByteSwap(USHORT s)
|
|
{
|
|
return (s >> 8) | (s << 8);
|
|
}
|
|
inline static ULONG RtlUlongByteSwap(ULONG i)
|
|
{
|
|
#if defined(__i386__) && defined(__GNUC__)
|
|
ULONG ret;
|
|
__asm__("bswap %0" : "=r" (ret) : "0" (i) );
|
|
return ret;
|
|
#else
|
|
return ((ULONG)RtlUshortByteSwap((USHORT)i) << 16) | RtlUshortByteSwap((USHORT)(i >> 16));
|
|
#endif
|
|
}
|
|
|
|
/*************************************************************************
|
|
* Loader functions and structures.
|
|
*
|
|
* Those are not part of standard Winternl.h
|
|
*/
|
|
typedef struct _LDR_MODULE
|
|
{
|
|
LIST_ENTRY InLoadOrderModuleList;
|
|
LIST_ENTRY InMemoryOrderModuleList;
|
|
LIST_ENTRY InInitializationOrderModuleList;
|
|
void* BaseAddress;
|
|
void* EntryPoint;
|
|
ULONG SizeOfImage;
|
|
UNICODE_STRING FullDllName;
|
|
UNICODE_STRING BaseDllName;
|
|
ULONG Flags;
|
|
SHORT LoadCount;
|
|
SHORT TlsIndex;
|
|
HANDLE SectionHandle;
|
|
ULONG CheckSum;
|
|
ULONG TimeDateStamp;
|
|
} LDR_MODULE, *PLDR_MODULE;
|
|
|
|
/* those defines are (some of the) regular LDR_MODULE.Flags values */
|
|
#define LDR_IMAGE_IS_DLL 0x00000004
|
|
#define LDR_LOAD_IN_PROGRESS 0x00001000
|
|
#define LDR_UNLOAD_IN_PROGRESS 0x00002000
|
|
#define LDR_NO_DLL_CALLS 0x00040000
|
|
#define LDR_PROCESS_ATTACHED 0x00080000
|
|
#define LDR_MODULE_REBASED 0x00200000
|
|
|
|
/* these ones is Wine specific */
|
|
#define LDR_DONT_RESOLVE_REFS 0x40000000
|
|
#define LDR_WINE_INTERNAL 0x80000000
|
|
|
|
/* FIXME: to be checked */
|
|
#define MAXIMUM_FILENAME_LENGTH 256
|
|
|
|
typedef struct _SYSTEM_MODULE
|
|
{
|
|
ULONG Reserved1;
|
|
ULONG Reserved2;
|
|
PVOID ImageBaseAddress;
|
|
ULONG ImageSize;
|
|
ULONG Flags;
|
|
WORD Id;
|
|
WORD Rank;
|
|
WORD Unknown;
|
|
WORD NameOffset;
|
|
BYTE Name[MAXIMUM_FILENAME_LENGTH];
|
|
} SYSTEM_MODULE, *PSYSTEM_MODULE;
|
|
|
|
typedef struct _SYSTEM_MODULE_INFORMATION
|
|
{
|
|
ULONG ModulesCount;
|
|
SYSTEM_MODULE Modules[1]; /* FIXME: should be Modules[0] */
|
|
} SYSTEM_MODULE_INFORMATION, *PSYSTEM_MODULE_INFORMATION;
|
|
|
|
NTSTATUS WINAPI LdrDisableThreadCalloutsForDll(HMODULE);
|
|
NTSTATUS WINAPI LdrFindEntryForAddress(const void*, PLDR_MODULE*);
|
|
NTSTATUS WINAPI LdrLockLoaderLock(ULONG,ULONG*,ULONG*);
|
|
NTSTATUS WINAPI LdrQueryProcessModuleInformation(SYSTEM_MODULE_INFORMATION*, ULONG, ULONG*);
|
|
NTSTATUS WINAPI LdrUnloadDll(HMODULE);
|
|
NTSTATUS WINAPI LdrUnlockLoaderLock(ULONG,ULONG);
|
|
|
|
/* list manipulation macros */
|
|
#define InitializeListHead(le) (void)((le)->Flink = (le)->Blink = (le))
|
|
#define InsertHeadList(le,e) do { PLIST_ENTRY f = (le)->Flink; (e)->Flink = f; (e)->Blink = (le); f->Blink = (e); (le)->Flink = (e); } while (0)
|
|
#define InsertTailList(le,e) do { PLIST_ENTRY b = (le)->Blink; (e)->Flink = (le); (e)->Blink = b; b->Flink = (e); (le)->Blink = (e); } while (0)
|
|
#define IsListEmpty(le) ((le)->Flink == (le))
|
|
#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)
|
|
static inline PLIST_ENTRY RemoveHeadList(PLIST_ENTRY le)
|
|
{
|
|
PLIST_ENTRY f, b, e;
|
|
|
|
e = le->Flink;
|
|
f = le->Flink->Flink;
|
|
b = le->Flink->Blink;
|
|
f->Blink = b;
|
|
b->Flink = f;
|
|
|
|
if (e != le) e->Flink = e->Blink = NULL;
|
|
return e;
|
|
}
|
|
static inline PLIST_ENTRY RemoveTailList(PLIST_ENTRY le)
|
|
{
|
|
PLIST_ENTRY f, b, e;
|
|
|
|
e = le->Blink;
|
|
f = le->Blink->Flink;
|
|
b = le->Blink->Blink;
|
|
f->Blink = b;
|
|
b->Flink = f;
|
|
|
|
if (e != le) e->Flink = e->Blink = NULL;
|
|
return e;
|
|
}
|
|
|
|
#ifdef __cplusplus
|
|
} /* extern "C" */
|
|
#endif /* defined(__cplusplus) */
|
|
|
|
#endif /* __WINE_WINTERNAL_H */
|