#define _RTLTYPES_H
/* DEPENDENCIES **************************************************************/
-#include "excpt.h"
-
-/* EXPORTED DATA *************************************************************/
+#include "pstypes.h"
/* CONSTANTS *****************************************************************/
#define MAXIMUM_LEADBYTES 12
#define PEB_BASE (0x7FFDF000)
+#define EXCEPTION_CHAIN_END ((PEXCEPTION_REGISTRATION_RECORD)-1)
#define EXCEPTION_CONTINUE_SEARCH 0
#define EXCEPTION_EXECUTE_HANDLER 1
#define VER_CONDITION_MASK 7
#define VER_NUM_BITS_PER_CONDITION_MASK 3
+#define RTL_CRITSECT_TYPE 0
+#define RTL_RESOURCE_TYPE 1
+
+#ifdef NTOS_MODE_USER
/* RTL String Hash Algorithms */
#define HASH_STRING_ALGORITHM_DEFAULT 0
#define HASH_STRING_ALGORITHM_X65599 1
#define HASH_STRING_ALGORITHM_INVALID 0xffffffff
-#ifdef NTOS_MODE_USER
+/* RtlDuplicateString settings */
+#define RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE 1
+#define RTL_DUPLICATE_UNICODE_STRING_ALLOCATE_NULL_STRING 2
+
+/* For Size conversion macros */
+#define NLS_MB_CODE_PAGE_TAG NlsMbCodePageTag
+#define NLS_MB_OEM_CODE_PAGE_TAG NlsMbOemCodePageTag
+#define NLS_OEM_LEAD_BYTE_INFO NlsOemLeadByteInfo
+
+#define MAX_ATOM_LEN 255 /* TCHARS not including nullterm */
+
/* List Macros */
static __inline
VOID
OldBlink = Entry->Blink;
OldFlink->Blink = OldBlink;
OldBlink->Flink = OldFlink;
- return (OldFlink == OldBlink);
+ return (BOOLEAN)(OldFlink == OldBlink);
}
static __inline
((L1)->LowPart == (L2)->LowPart))
#endif
-/* FIXME: Rename these */
-#define PDI_MODULES 0x01 /* The loaded modules of the process */
-#define PDI_BACKTRACE 0x02 /* The heap stack back traces */
-#define PDI_HEAPS 0x04 /* The heaps of the process */
-#define PDI_HEAP_TAGS 0x08 /* The heap tags */
-#define PDI_HEAP_BLOCKS 0x10 /* The heap blocks */
-#define PDI_LOCKS 0x20 /* The locks created by the process */
+/* RTL Debug Queries */
+#define RTL_DEBUG_QUERY_MODULES 0x01
+#define RTL_DEBUG_QUERY_BACKTRACES 0x02
+#define RTL_DEBUG_QUERY_HEAPS 0x04
+#define RTL_DEBUG_QUERY_HEAP_TAGS 0x08
+#define RTL_DEBUG_QUERY_HEAP_BLOCKS 0x10
+#define RTL_DEBUG_QUERY_LOCKS 0x20
/* RTL Handle Flags */
#define RTL_HANDLE_VALID 0x1
/* RTL Atom Flags */
#define RTL_ATOM_IS_PINNED 0x1
+/* EXPORTED DATA *************************************************************/
+#ifdef NTOS_MODE_USER
+extern BOOLEAN NTSYSAPI NLS_MB_CODE_PAGE_TAG;
+extern BOOLEAN NTSYSAPI NLS_MB_OEM_CODE_PAGE_TAG;
+#endif
+
/* ENUMERATIONS **************************************************************/
+#ifdef NTOS_MODE_USER
typedef enum _TABLE_SEARCH_RESULT
{
TableEmptyTree,
GenericGreaterThan,
GenericEqual
} RTL_GENERIC_COMPARE_RESULTS;
+#endif
-typedef enum
+typedef enum _RTL_PATH_TYPE
{
INVALID_PATH = 0,
UNC_PATH, /* "//foo" */
RELATIVE_PATH, /* "foo" */
DEVICE_PATH, /* "//./foo" */
UNC_DOT_PATH /* "//." */
-} DOS_PATHNAME_TYPE;
+} RTL_PATH_TYPE;
/* FUNCTION TYPES ************************************************************/
+#ifndef NTOS_MODE_USER
+typedef VOID (NTAPI *WAITORTIMERCALLBACKFUNC)(PVOID, BOOLEAN);
+
+#else
+
+typedef EXCEPTION_DISPOSITION
+(NTAPI *PEXCEPTION_ROUTINE)(
+ IN struct _EXCEPTION_RECORD *ExceptionRecord,
+ IN PVOID EstablisherFrame,
+ IN OUT struct _CONTEXT *ContextRecord,
+ IN OUT PVOID DispatcherContext
+);
+
+#endif
+
struct _RTL_AVL_TABLE;
struct _RTL_GENERIC_TABLE;
struct _RTL_RANGE;
IN PVOID UserParam
);
-typedef EXCEPTION_DISPOSITION
-(*PEXCEPTION_HANDLER)(
- struct _EXCEPTION_RECORD*,
- PVOID,
- struct _CONTEXT*,
- PVOID
-);
-
typedef LONG (NTAPI *PVECTORED_EXCEPTION_HANDLER)(
PEXCEPTION_POINTERS ExceptionPointers
);
-typedef DWORD (NTAPI *PTHREAD_START_ROUTINE)(
- LPVOID Parameter
+typedef ULONG (NTAPI *PTHREAD_START_ROUTINE)(
+ PVOID Parameter
);
typedef VOID
typedef PVOID
(NTAPI *PRTL_GENERIC_ALLOCATE_ROUTINE) (
struct _RTL_GENERIC_TABLE *Table,
- LONG ByteSize
+ CLONG ByteSize
);
typedef VOID
PVOID Buffer
);
-typedef VOID
+typedef PVOID
(NTAPI *PRTL_AVL_ALLOCATE_ROUTINE) (
struct _RTL_AVL_TABLE *Table,
- LONG ByteSize
+ CLONG ByteSize
);
typedef VOID
IN OUT PSIZE_T CommitSize
);
+#ifdef NTOS_MODE_USER
typedef BOOLEAN
(NTAPI *PRTL_CONFLICT_RANGE_CALLBACK) (
PVOID Context,
struct _RTL_RANGE *Range
);
+#endif
+
/* TYPES *********************************************************************/
#ifdef NTOS_MODE_USER
typedef struct _COMPRESSED_DATA_INFO
{
- USHORT CompressionFormatAndEngine;
- UCHAR CompressionUnitShift;
- UCHAR ChunkShift;
- UCHAR ClusterShift;
- UCHAR Reserved;
- USHORT NumberOfChunks;
- ULONG CompressedChunkSizes[ANYSIZE_ARRAY];
+ USHORT CompressionFormatAndEngine;
+ UCHAR CompressionUnitShift;
+ UCHAR ChunkShift;
+ UCHAR ClusterShift;
+ UCHAR Reserved;
+ USHORT NumberOfChunks;
+ ULONG CompressedChunkSizes[ANYSIZE_ARRAY];
} COMPRESSED_DATA_INFO, *PCOMPRESSED_DATA_INFO;
typedef struct _GENERATE_NAME_CONTEXT
{
- USHORT Checksum;
+ USHORT Checksum;
BOOLEAN CheckSumInserted;
- UCHAR NameLength;
- WCHAR NameBuffer[8];
- ULONG ExtensionLength;
- WCHAR ExtensionBuffer[4];
- ULONG LastIndexValue;
+ UCHAR NameLength;
+ WCHAR NameBuffer[8];
+ ULONG ExtensionLength;
+ WCHAR ExtensionBuffer[4];
+ ULONG LastIndexValue;
} GENERATE_NAME_CONTEXT, *PGENERATE_NAME_CONTEXT;
typedef struct _RTL_SPLAY_LINKS
} TIME_FIELDS, *PTIME_FIELDS;
#endif
+typedef EXCEPTION_DISPOSITION
+(*PEXCEPTION_HANDLER)(
+ struct _EXCEPTION_RECORD*,
+ PVOID,
+ struct _CONTEXT*,
+ PVOID
+);
+
typedef struct _ACE
{
ACE_HEADER Header;
ACCESS_MASK AccessMask;
} ACE, *PACE;
-/* FIXME: Review definitions and give these guys a better name */
-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;
-
-typedef struct _DEBUG_MODULE_INFORMATION
+typedef struct _RTL_PROCESS_MODULE_INFORMATION
{
ULONG Reserved[2];
PVOID Base;
USHORT LoadCount;
USHORT ModuleNameOffset;
CHAR ImageName[256];
-} DEBUG_MODULE_INFORMATION, *PDEBUG_MODULE_INFORMATION;
+} RTL_PROCESS_MODULE_INFORMATION, *PRTL_PROCESS_MODULE_INFORMATION;
+
+typedef struct _RTL_PROCESS_MODULES
+{
+ ULONG ModuleCount;
+ RTL_PROCESS_MODULE_INFORMATION ModuleEntry[1];
+} RTL_PROCESS_MODULES, *PRTL_PROCESS_MODULES;
-typedef struct _DEBUG_HEAP_INFORMATION
+typedef struct _RTL_PROCESS_HEAP_INFORMATION
{
PVOID Base;
ULONG Flags;
ULONG Reserved[7];
PVOID Tags;
PVOID Blocks;
-} DEBUG_HEAP_INFORMATION, *PDEBUG_HEAP_INFORMATION;
+} RTL_PROCESS_HEAP_INFORMATION, *PRTL_PROCESS_HEAP_INFORMATION;
+
+typedef struct _RTL_PROCESS_HEAPS
+{
+ ULONG HeapCount;
+ RTL_PROCESS_HEAP_INFORMATION HeapEntry[1];
+} RTL_PROCESS_HEAPS, *PRTL_PROCESS_HEAPS;
-typedef struct _DEBUG_LOCK_INFORMATION
+typedef struct _RTL_PROCESS_LOCK_INFORMATION
{
PVOID Address;
USHORT Type;
ULONG RecursionCount;
ULONG NumberOfSharedWaiters;
ULONG NumberOfExclusiveWaiters;
-} DEBUG_LOCK_INFORMATION, *PDEBUG_LOCK_INFORMATION;
+} RTL_PROCESS_LOCK_INFORMATION, *PRTL_PROCESS_LOCK_INFORMATION;
+
+typedef struct _RTL_PROCESS_LOCKS
+{
+ ULONG LockCount;
+ RTL_PROCESS_LOCK_INFORMATION LockEntry[1];
+} RTL_PROCESS_LOCKS, *PRTL_PROCESS_LOCKS;
+
+typedef struct _RTL_PROCESS_BACKTRACE_INFORMATION
+{
+ /* FIXME */
+ ULONG Unknown;
+} RTL_PROCESS_BACKTRACE_INFORMATION, *PRTL_PROCESS_BACKTRACE_INFORMATION;
+
+typedef struct _RTL_PROCESS_BACKTRACES
+{
+ ULONG BackTraceCount;
+ RTL_PROCESS_BACKTRACE_INFORMATION BackTraceEntry[1];
+} RTL_PROCESS_BACKTRACES, *PRTL_PROCESS_BACKTRACES;
+
+typedef struct _RTL_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;
+ PRTL_PROCESS_MODULES ModuleInformation;
+ PRTL_PROCESS_BACKTRACES BackTraceInformation;
+ PRTL_PROCESS_HEAPS HeapInformation;
+ PRTL_PROCESS_LOCKS LockInformation;
+ PVOID Reserved[8];
+} RTL_DEBUG_BUFFER, *PRTL_DEBUG_BUFFER;
typedef struct _RTL_HANDLE_TABLE_ENTRY
{
PRTL_HANDLE_TABLE_ENTRY MaxReservedHandles;
} RTL_HANDLE_TABLE, *PRTL_HANDLE_TABLE;
-typedef struct _LOCK_INFORMATION
-{
- ULONG LockCount;
- DEBUG_LOCK_INFORMATION LockEntry[1];
-} LOCK_INFORMATION, *PLOCK_INFORMATION;
-
-typedef struct _HEAP_INFORMATION
+typedef struct _EXCEPTION_REGISTRATION_RECORD
{
- ULONG HeapCount;
- DEBUG_HEAP_INFORMATION HeapEntry[1];
-} HEAP_INFORMATION, *PHEAP_INFORMATION;
-
-typedef struct _MODULE_INFORMATION
-{
- ULONG ModuleCount;
- DEBUG_MODULE_INFORMATION ModuleEntry[1];
-} MODULE_INFORMATION, *PMODULE_INFORMATION;
-/* END REVIEW AREA */
-
-#ifdef _INC_EXCPT
-typedef struct _EXCEPTION_REGISTRATION
-{
- struct _EXCEPTION_REGISTRATION *prev;
- PEXCEPTION_HANDLER handler;
-} EXCEPTION_REGISTRATION, *PEXCEPTION_REGISTRATION;
-#endif
-
-typedef EXCEPTION_REGISTRATION EXCEPTION_REGISTRATION_RECORD;
-typedef PEXCEPTION_REGISTRATION PEXCEPTION_REGISTRATION_RECORD;
+ struct _EXCEPTION_REGISTRATION_RECORD *Next;
+ PEXCEPTION_HANDLER Handler;
+} EXCEPTION_REGISTRATION_RECORD, *PEXCEPTION_REGISTRATION_RECORD;
typedef struct _CURDIR
{
UNICODE_STRING DosPath;
} RTL_DRIVE_LETTER_CURDIR, *PRTL_DRIVE_LETTER_CURDIR;
+#ifndef NTOS_MODE_USER
+typedef struct _RTL_CRITICAL_SECTION_DEBUG
+{
+ USHORT Type;
+ USHORT CreatorBackTraceIndex;
+ struct _RTL_CRITICAL_SECTION *CriticalSection;
+ LIST_ENTRY ProcessLocksList;
+ ULONG EntryCount;
+ ULONG ContentionCount;
+ ULONG Spare[2];
+} RTL_CRITICAL_SECTION_DEBUG, *PRTL_CRITICAL_SECTION_DEBUG, RTL_RESOURCE_DEBUG, *PRTL_RESOURCE_DEBUG;
+
+typedef struct _RTL_CRITICAL_SECTION
+{
+ PRTL_CRITICAL_SECTION_DEBUG DebugInfo;
+ LONG LockCount;
+ LONG RecursionCount;
+ HANDLE OwningThread;
+ HANDLE LockSemaphore;
+ ULONG_PTR SpinCount;
+} RTL_CRITICAL_SECTION, *PRTL_CRITICAL_SECTION;
+#endif
+
+#ifdef NTOS_MODE_USER
typedef struct _RTL_RANGE_LIST
{
LIST_ENTRY ListHead;
UCHAR Flags; /* RTL_RANGE_... flags */
} RTL_RANGE, *PRTL_RANGE;
+typedef struct _RANGE_LIST_ITERATOR
+{
+ PLIST_ENTRY RangeListHead;
+ PLIST_ENTRY MergedHead;
+ PVOID Current;
+ ULONG Stamp;
+} RTL_RANGE_LIST_ITERATOR, *PRTL_RANGE_LIST_ITERATOR;
+
+#endif
+
typedef struct _RTL_RESOURCE
{
RTL_CRITICAL_SECTION Lock;
ULONG ExclusiveWaiters;
LONG NumberActive;
HANDLE OwningThread;
- ULONG TimeoutBoost; /* ?? */
- PVOID DebugInfo; /* ?? */
+ ULONG TimeoutBoost;
+ PVOID DebugInfo;
} RTL_RESOURCE, *PRTL_RESOURCE;
-typedef struct _RANGE_LIST_ITERATOR
-{
- PLIST_ENTRY RangeListHead;
- PLIST_ENTRY MergedHead;
- PVOID Current;
- ULONG Stamp;
-} RTL_RANGE_LIST_ITERATOR, *PRTL_RANGE_LIST_ITERATOR;
-
typedef struct _RTL_MESSAGE_RESOURCE_ENTRY
{
USHORT Length;
{
USHORT HeaderSize;
USHORT CodePage;
- USHORT MaximumCharacterSize; /* SBCS = 1, DBCS = 2 */
+ USHORT MaximumCharacterSize;
USHORT DefaultChar;
USHORT UniDefaultChar;
USHORT TransDefaultChar;
PRTL_ATOM_TABLE_ENTRY Buckets[1];
} RTL_ATOM_TABLE, *PRTL_ATOM_TABLE;
-/* Let Kernel Drivers use this */
-#if !defined(_WINBASE_H) && !defined(_WINBASE_)
- typedef struct _SYSTEMTIME
- {
- WORD wYear;
- WORD wMonth;
- WORD wDayOfWeek;
- WORD wDay;
- WORD wHour;
- WORD wMinute;
- WORD wSecond;
- WORD wMilliseconds;
- } SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME;
-
- typedef struct _TIME_ZONE_INFORMATION
- {
- LONG Bias;
- WCHAR StandardName[32];
- SYSTEMTIME StandardDate;
- LONG StandardBias;
- WCHAR DaylightName[32];
- SYSTEMTIME DaylightDate;
- LONG DaylightBias;
- } TIME_ZONE_INFORMATION, *PTIME_ZONE_INFORMATION, *LPTIME_ZONE_INFORMATION;
-
- typedef enum _ACL_INFORMATION_CLASS
- {
- AclRevisionInformation = 1,
- AclSizeInformation
- } ACL_INFORMATION_CLASS;
-
- #define TIME_ZONE_ID_UNKNOWN 0
- #define TIME_ZONE_ID_STANDARD 1
- #define TIME_ZONE_ID_DAYLIGHT 2
- #define TIME_ZONE_ID_INVALID 0xFFFFFFFF
+#ifndef NTOS_MODE_USER
+
+typedef struct _SYSTEMTIME
+{
+ USHORT wYear;
+ USHORT wMonth;
+ USHORT wDayOfWeek;
+ USHORT wDay;
+ USHORT wHour;
+ USHORT wMinute;
+ USHORT wSecond;
+ USHORT wMilliseconds;
+} SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME;
+
+typedef struct _TIME_ZONE_INFORMATION
+{
+ LONG Bias;
+ WCHAR StandardName[32];
+ SYSTEMTIME StandardDate;
+ LONG StandardBias;
+ WCHAR DaylightName[32];
+ SYSTEMTIME DaylightDate;
+ LONG DaylightBias;
+} TIME_ZONE_INFORMATION, *PTIME_ZONE_INFORMATION, *LPTIME_ZONE_INFORMATION;
+
+typedef enum _ACL_INFORMATION_CLASS
+{
+ AclRevisionInformation = 1,
+ AclSizeInformation
+} ACL_INFORMATION_CLASS;
+
+#define TIME_ZONE_ID_UNKNOWN 0
+#define TIME_ZONE_ID_STANDARD 1
+#define TIME_ZONE_ID_DAYLIGHT 2
+#define TIME_ZONE_ID_INVALID 0xFFFFFFFF
#endif
#endif