Beware of the alt+fs slippery finger
[reactos.git] / reactos / include / ndk / rtltypes.h
index b278c94..280d5ff 100644 (file)
@@ -10,9 +10,7 @@
 #define _RTLTYPES_H
 
 /* DEPENDENCIES **************************************************************/
-#include "excpt.h"
-
-/* EXPORTED DATA *************************************************************/
+#include "pstypes.h"
 
 /* CONSTANTS *****************************************************************/
 #define MAXIMUM_LEADBYTES 12
@@ -29,6 +27,7 @@
 
 #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
@@ -162,7 +175,7 @@ RemoveEntryList(
     OldBlink = Entry->Blink;
     OldFlink->Blink = OldBlink;
     OldBlink->Flink = OldFlink;
-    return (OldFlink == OldBlink);
+    return (BOOLEAN)(OldFlink == OldBlink);
 }
 
 static __inline
@@ -215,13 +228,13 @@ RemoveTailList(
                               ((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
@@ -229,8 +242,15 @@ RemoveTailList(
 /* 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,
@@ -245,8 +265,9 @@ typedef enum _RTL_GENERIC_COMPARE_RESULTS
     GenericGreaterThan,
     GenericEqual
 } RTL_GENERIC_COMPARE_RESULTS;
+#endif
 
-typedef enum
+typedef enum _RTL_PATH_TYPE
 {
     INVALID_PATH = 0,
     UNC_PATH,              /* "//foo" */
@@ -256,9 +277,24 @@ typedef enum
     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;
@@ -269,20 +305,12 @@ typedef NTSTATUS
     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
@@ -315,7 +343,7 @@ typedef RTL_GENERIC_COMPARE_RESULTS
 typedef PVOID
 (NTAPI *PRTL_GENERIC_ALLOCATE_ROUTINE) (
     struct _RTL_GENERIC_TABLE *Table,
-    LONG ByteSize
+    CLONG ByteSize
 );
 
 typedef VOID
@@ -324,10 +352,10 @@ typedef VOID
     PVOID Buffer
 );
 
-typedef VOID
+typedef PVOID
 (NTAPI *PRTL_AVL_ALLOCATE_ROUTINE) (
     struct _RTL_AVL_TABLE *Table,
-    LONG ByteSize
+    CLONG ByteSize
 );
 
 typedef VOID
@@ -353,11 +381,14 @@ typedef NTSTATUS
     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
@@ -395,24 +426,24 @@ typedef struct _RTL_BITMAP_RUN
 
 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
@@ -504,34 +535,21 @@ typedef struct _TIME_FIELDS
 } 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;
@@ -542,9 +560,15 @@ typedef struct _DEBUG_MODULE_INFORMATION
     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;
@@ -557,9 +581,15 @@ typedef struct _DEBUG_HEAP_INFORMATION
     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;
@@ -571,7 +601,45 @@ typedef struct _DEBUG_LOCK_INFORMATION
     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
 {
@@ -590,35 +658,11 @@ typedef struct _RTL_HANDLE_TABLE
     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
 {
@@ -634,6 +678,30 @@ typedef struct RTL_DRIVE_LETTER_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;
@@ -652,6 +720,16 @@ typedef struct _RTL_RANGE
     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;
@@ -661,18 +739,10 @@ typedef struct _RTL_RESOURCE
     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;
@@ -697,7 +767,7 @@ typedef struct _NLS_FILE_HEADER
 {
     USHORT HeaderSize;
     USHORT CodePage;
-    USHORT MaximumCharacterSize;  /* SBCS = 1, DBCS = 2 */
+    USHORT MaximumCharacterSize;
     USHORT DefaultChar;
     USHORT UniDefaultChar;
     USHORT TransDefaultChar;
@@ -779,41 +849,41 @@ typedef struct _RTL_ATOM_TABLE
     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