[RTL]
[reactos.git] / reactos / include / ndk / rtlfuncs.h
index 47eb446..f0a1839 100644 (file)
@@ -25,6 +25,7 @@ Author:
 #include <umtypes.h>
 #include <ntnls.h>
 #include <rtltypes.h>
+#include <pstypes.h>
 #include <extypes.h>
 #include "in6addr.h"
 #include "inaddr.h"
@@ -77,8 +78,8 @@ InsertTailList(
     ListHead->Blink = Entry;
 }
 
-BOOLEAN
 FORCEINLINE
+BOOLEAN
 IsListEmpty(
     IN const LIST_ENTRY * ListHead
 )
@@ -195,14 +196,14 @@ RtlConvertUlongToLuid(ULONG Ulong)
 #if DBG
 
 #define ASSERT( exp ) \
-    ((!(exp)) ? \
+    ((void)((!(exp)) ? \
         (RtlAssert( #exp, __FILE__, __LINE__, NULL ),FALSE) : \
-        TRUE)
+        TRUE))
 
 #define ASSERTMSG( msg, exp ) \
-    ((!(exp)) ? \
+    ((void)((!(exp)) ? \
         (RtlAssert( #exp, __FILE__, __LINE__, msg ),FALSE) : \
-        TRUE)
+        TRUE))
 
 #else
 
@@ -327,6 +328,129 @@ RtlRealPredecessor(
         _SplayParent->RightChild = _SplayChild;         \
         _SplayChild->Parent = _SplayParent;             \
     }
+    
+//
+// RTL AVL Tree Functions
+//
+NTSYSAPI
+VOID
+NTAPI
+RtlInitializeGenericTableAvl(
+    OUT PRTL_AVL_TABLE Table,
+    IN PRTL_AVL_COMPARE_ROUTINE CompareRoutine,
+    IN PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine,
+    IN PRTL_AVL_FREE_ROUTINE FreeRoutine,
+    IN PVOID TableContext OPTIONAL
+);
+
+NTSYSAPI
+PVOID
+NTAPI
+RtlInsertElementGenericTableAvl(
+    IN PRTL_AVL_TABLE Table,
+    IN PVOID Buffer,
+    IN CLONG BufferSize,
+    OUT PBOOLEAN NewElement OPTIONAL
+);
+
+NTSYSAPI
+PVOID
+NTAPI
+RtlInsertElementGenericTableFullAvl(
+    IN PRTL_AVL_TABLE Table,
+    IN PVOID Buffer,
+    IN CLONG BufferSize,
+    OUT PBOOLEAN NewElement OPTIONAL,
+    IN PVOID NodeOrParent,
+    IN TABLE_SEARCH_RESULT SearchResult
+);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlDeleteElementGenericTableAvl(
+    IN PRTL_AVL_TABLE Table,
+    IN PVOID Buffer
+);
+
+NTSYSAPI
+PVOID
+NTAPI
+RtlLookupElementGenericTableAvl(
+    IN PRTL_AVL_TABLE Table,
+    IN PVOID Buffer
+);
+
+NTSYSAPI
+PVOID
+NTAPI
+RtlLookupElementGenericTableFullAvl(
+    IN PRTL_AVL_TABLE Table,
+    IN PVOID Buffer,
+    OUT PVOID *NodeOrParent,
+    OUT TABLE_SEARCH_RESULT *SearchResult
+);
+
+NTSYSAPI
+PVOID
+NTAPI
+RtlEnumerateGenericTableAvl(
+    IN PRTL_AVL_TABLE Table,
+    IN BOOLEAN Restart
+);
+
+NTSYSAPI
+PVOID
+NTAPI
+RtlEnumerateGenericTableWithoutSplayingAvl(
+    IN PRTL_AVL_TABLE Table,
+    IN OUT PVOID *RestartKey
+);
+
+NTSYSAPI
+PVOID
+NTAPI
+RtlLookupFirstMatchingElementGenericTableAvl(
+    IN PRTL_AVL_TABLE Table,
+    IN PVOID Buffer,
+    OUT PVOID *RestartKey
+);
+
+NTSYSAPI
+PVOID
+NTAPI
+RtlEnumerateGenericTableLikeADirectory(
+    IN PRTL_AVL_TABLE Table,
+    IN PRTL_AVL_MATCH_FUNCTION MatchFunction OPTIONAL,
+    IN PVOID MatchData OPTIONAL,
+    IN ULONG NextFlag,
+    IN OUT PVOID *RestartKey,
+    IN OUT PULONG DeleteCount,
+    IN PVOID Buffer
+);
+
+NTSYSAPI
+PVOID
+NTAPI
+RtlGetElementGenericTableAvl(
+    IN PRTL_AVL_TABLE Table,
+    IN ULONG I
+);
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlNumberGenericTableElementsAvl(
+    IN PRTL_AVL_TABLE Table
+);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlIsGenericTableEmptyAvl(
+    IN PRTL_AVL_TABLE Table
+);
+  
 #endif
 
 //
@@ -428,6 +552,7 @@ RtlRaiseException(
     IN PEXCEPTION_RECORD ExceptionRecord
 );
 
+DECLSPEC_NORETURN
 NTSYSAPI
 VOID
 NTAPI
@@ -480,7 +605,7 @@ NTAPI
 RtlAllocateHeap(
     IN HANDLE HeapHandle,
     IN ULONG Flags,
-    IN ULONG Size
+    IN SIZE_T Size
 );
 
 NTSYSAPI
@@ -538,7 +663,7 @@ RtlExtendHeap(
     IN HANDLE Heap,
     IN ULONG Flags,
     IN PVOID P,
-    IN ULONG Size
+    IN SIZE_T Size
 );
 
 NTSYSAPI
@@ -645,7 +770,7 @@ RtlSetUserFlagsHeap(
 );
 
 NTSYSAPI
-ULONG
+SIZE_T
 NTAPI
 RtlSizeHeap(
     IN PVOID HeapHandle,
@@ -669,7 +794,7 @@ RtlWalkHeap(
     IN HANDLE HeapHandle,
     IN PVOID HeapEntry
 );
-    
+
 #define RtlGetProcessHeap() (NtCurrentPeb()->ProcessHeap)
 
 //
@@ -1096,6 +1221,8 @@ RtlMapGenericMask(
     PGENERIC_MAPPING GenericMapping
 );
 
+#ifdef NTOS_MODE_USER
+
 NTSYSAPI
 NTSTATUS
 NTAPI
@@ -1106,6 +1233,8 @@ RtlQueryInformationAcl(
     ACL_INFORMATION_CLASS InformationClass
 );
 
+#endif
+
 NTSYSAPI
 VOID
 NTAPI
@@ -1175,6 +1304,8 @@ RtlSetGroupSecurityDescriptor(
     IN BOOLEAN GroupDefaulted
 );
 
+#ifdef NTOS_MODE_USER
+
 NTSYSAPI
 NTSTATUS
 NTAPI
@@ -1185,6 +1316,8 @@ RtlSetInformationAcl(
     ACL_INFORMATION_CLASS InformationClass
 );
 
+#endif
+
 NTSYSAPI
 NTSTATUS
 NTAPI
@@ -1361,6 +1494,8 @@ RtlCharToInteger(
 //
 // Byte Swap Functions
 //
+#ifdef NTOS_MODE_USER
+
 #if (defined(_M_IX86) && (_MSC_FULL_VER > 13009037)) || \
     ((defined(_M_AMD64) || \
      defined(_M_IA64)) && (_MSC_FULL_VER > 13009175))
@@ -1375,8 +1510,15 @@ unsigned __int64 __cdecl _byteswap_uint64(unsigned __int64);
 #define RtlUlongByteSwap(_x) _byteswap_ulong((_x))
 #define RtlUlonglongByteSwap(_x) _byteswap_uint64((_x))
 
+#elif defined (__GNUC__)
+
+#define RtlUshortByteSwap(_x) _byteswap_ushort((USHORT)(_x))
+#define RtlUlongByteSwap(_x) _byteswap_ulong((_x))
+#define RtlUlonglongByteSwap(_x) _byteswap_uint64((_x))
+
 #else
 
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
 NTSYSAPI
 USHORT
 FASTCALL
@@ -1391,8 +1533,10 @@ NTSYSAPI
 ULONGLONG
 FASTCALL
 RtlUlonglongByteSwap(IN ULONGLONG Source);
+#endif
 
 #endif
+#endif // NTOS_MODE_USER
 
 //
 // Unicode->Ansi String Functions
@@ -1458,7 +1602,7 @@ RtlUpcaseUnicodeToOemN(
     PCHAR OemString,
     ULONG OemSize,
     PULONG ResultSize,
-    PWCHAR UnicodeString,
+    PCWCH UnicodeString,
     ULONG UnicodeSize
 );
 
@@ -1488,7 +1632,7 @@ RtlUnicodeToOemN(
     PCHAR OemString,
     ULONG OemSize,
     PULONG ResultSize,
-    PWCHAR UnicodeString,
+    PCWCH UnicodeString,
     ULONG UnicodeSize
 );
 
@@ -1513,7 +1657,7 @@ RtlUpcaseUnicodeToMultiByteN(
     PCHAR MbString,
     ULONG MbSize,
     PULONG ResultSize,
-    PWCHAR UnicodeString,
+    PCWCH UnicodeString,
     ULONG UnicodeSize
 );
 
@@ -1522,7 +1666,7 @@ NTSTATUS
 NTAPI
 RtlUnicodeToMultiByteSize(
     PULONG MbSize,
-    PWCHAR UnicodeString,
+    PCWCH UnicodeString,
     ULONG UnicodeSize
 );
 
@@ -1550,7 +1694,7 @@ RtlOemToUnicodeN(
     PWSTR UnicodeString,
     ULONG MaxBytesInUnicodeString,
     PULONG BytesInUnicodeString,
-    IN PCHAR OemString,
+    IN PCCH OemString,
     ULONG BytesInOemString
 );
 
@@ -1669,6 +1813,18 @@ RtlDuplicateUnicodeString(
     OUT PUNICODE_STRING DestinationString
 );
 
+//
+// Memory Functions
+//
+NTSYSAPI
+VOID
+NTAPI
+RtlFillMemoryUlong(
+    IN PVOID Destination,
+    IN ULONG Length,
+    IN ULONG Fill
+);
+
 #endif
 
 NTSYSAPI
@@ -1725,7 +1881,7 @@ NTSYSAPI
 BOOLEAN
 NTAPI
 RtlIsTextUnicode(
-    LPCVOID Buffer,
+    PVOID Buffer,
     INT Length,
     INT *Flags
 );
@@ -1891,18 +2047,6 @@ RtlLookupAtomInAtomTable(
     OUT PRTL_ATOM Atom
 );
 
-//
-// Memory Functions
-//
-NTSYSAPI
-VOID
-NTAPI
-RtlFillMemoryUlong(
-    IN PVOID Destination,
-    IN ULONG Length,
-    IN ULONG Fill
-);
-
 //
 // Process Management Functions
 //
@@ -1992,6 +2136,11 @@ RtlInitializeContext(
     IN PINITIAL_TEB InitialTeb
 );
 
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlIsThreadWithinLoaderCallout(VOID);
+
 NTSYSAPI
 PRTL_USER_PROCESS_PARAMETERS
 NTAPI
@@ -2016,12 +2165,12 @@ RtlRemoteCall(
 );
 
 NTSYSAPI
-VOID
+NTSTATUS
 NTAPI
 RtlSetProcessIsCritical(
     IN BOOLEAN NewValue,
     OUT PBOOLEAN OldValue OPTIONAL,
-    IN BOOLEAN IsWinlogon
+    IN BOOLEAN NeedBreaks
 );
 
 NTSYSAPI
@@ -2605,7 +2754,29 @@ InterlockedPushListSList(
 NTSYSAPI
 VOID
 NTAPI
-RtlFreeRangeList(IN PRTL_RANGE_LIST RangeList);
+RtlInitializeRangeList(
+    IN OUT PRTL_RANGE_LIST RangeList
+);
+    
+NTSYSAPI
+VOID
+NTAPI
+RtlFreeRangeList(
+    IN PRTL_RANGE_LIST RangeList
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlAddRange(
+    IN OUT PRTL_RANGE_LIST RangeList,
+    IN ULONGLONG Start,
+    IN ULONGLONG End,
+    IN UCHAR Attributes,
+    IN ULONG Flags,
+    IN PVOID UserData OPTIONAL,
+    IN PVOID Owner OPTIONAL
+);
 
 //
 // Debug Functions
@@ -2627,6 +2798,7 @@ DbgPrintEx(
     IN ...
 );
 
+NTSYSAPI
 ULONG
 NTAPI
 DbgPrompt(
@@ -2641,10 +2813,10 @@ DbgBreakPoint(
     VOID
 );
 
-NTSTATUS
+VOID
 NTAPI
 DbgLoadImageSymbols(
-    IN PANSI_STRING Name,
+    IN PSTRING Name,
     IN PVOID Base,
     IN ULONG_PTR ProcessId
 );
@@ -2652,11 +2824,18 @@ DbgLoadImageSymbols(
 VOID
 NTAPI
 DbgUnLoadImageSymbols(
-    IN PANSI_STRING Name,
+    IN PSTRING Name,
     IN PVOID Base,
     IN ULONG_PTR ProcessId
 );
 
+VOID
+NTAPI
+DbgCommandString(
+    IN PCCH Name,
+    IN PCCH Command
+);
+
 //
 // Generic Table Functions
 //
@@ -2762,7 +2941,7 @@ RtlFindMessage(
     IN ULONG Type,
     IN ULONG Language,
     IN ULONG MessageId,
-    OUT PRTL_MESSAGE_RESOURCE_ENTRY *MessageResourceEntry
+    OUT PMESSAGE_RESOURCE_ENTRY *MessageResourceEntry
 );
 
 NTSYSAPI
@@ -2831,6 +3010,15 @@ LdrRelocateImageWithBias(
 //
 #ifdef NTOS_MODE_USER
 
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlActivateActivationContext(
+    IN ULONG Unknown,
+    IN HANDLE Handle,
+    OUT PULONG_PTR Cookie
+);
+
 NTSYSAPI
 VOID
 NTAPI
@@ -2854,6 +3042,14 @@ RtlAllocateActivationContextStack(
     IN PVOID *Context
 );
 
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlCreateActivationContext(
+    OUT PHANDLE Handle,
+    IN OUT PVOID ReturnedData
+);
+
 NTSYSAPI
 NTSTATUS
 NTAPI
@@ -2865,17 +3061,22 @@ NTSYSAPI
 VOID
 NTAPI
 RtlReleaseActivationContext(
-    IN PVOID *Context
+    IN HANDLE handle
 );
 
 NTSYSAPI
 NTSTATUS
 NTAPI
 RtlDeactivateActivationContext(
-    DWORD dwFlags,
+    ULONG dwFlags,
     ULONG_PTR ulCookie
 );
 
+NTSYSAPI
+VOID
+NTAPI
+RtlFreeThreadActivationContextStack(void);
+
 NTSYSAPI
 NTSTATUS
 NTAPI
@@ -2902,11 +3103,11 @@ NTSYSAPI
 NTSTATUS
 NTAPI
 RtlFindActivationContextSectionString(
-    IN PVOID Unknown0,
-    IN PVOID Unknown1,
+    IN ULONG dwFlags,
+    IN const GUID *ExtensionGuid,
     IN ULONG SectionType,
     IN PUNICODE_STRING SectionName,
-    IN PVOID Unknown2
+    IN OUT PVOID ReturnedData
 );
 
 NTSYSAPI
@@ -3117,7 +3318,7 @@ NTSYSAPI
 ULONG
 NTAPI
 RtlComputeCrc32(
-    IN USHORT PartialCrc,
+    IN ULONG InitialCrc,
     IN PUCHAR Buffer,
     IN ULONG Length
 );
@@ -3129,9 +3330,9 @@ NTSYSAPI
 NTSTATUS
 NTAPI
 RtlIpv4StringToAddressW(
-    IN PWCHAR String,
-    IN UCHAR Strict,
-    OUT PWCHAR Terminator,
+    IN PCWSTR String,
+    IN BOOLEAN Strict,
+    OUT LPWSTR *Terminator,
     OUT struct in_addr *Addr
 );
 
@@ -3268,6 +3469,44 @@ RtlFlushSecureMemoryCache(
 );
 #endif
 
+//
+// Boot Status Data Functions
+//
+#ifdef NTOS_MODE_USER
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlCreateBootStatusDataFile(
+    VOID
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlGetSetBootStatusData(
+    HANDLE FileHandle,
+    BOOLEAN WriteMode,
+    DWORD DataClass,
+    PVOID Buffer,
+    ULONG BufferSize,
+    DWORD DataClass2
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlLockBootStatusData(
+    OUT PHANDLE FileHandle
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlUnlockBootStatusData(
+    IN HANDLE FileHandle
+);
+#endif
+
 #ifdef __cplusplus
 }
 #endif