- Update NDK with proper (when possible) RTL structure names that were previously...
[reactos.git] / reactos / include / ndk / rtlfuncs.h
index d5bfe11..bd58ab5 100644 (file)
 
 /* DEPENDENCIES **************************************************************/
 #include <ntnls.h>
+#include "extypes.h"
+#include "rtltypes.h"
+
+/* MACROS ********************************************************************/
+
+/* FIXME: Eventually move the ones in rtltypes.h here... */
+
+/*
+ * Splay Tree Macros
+ */
+#define RtlIsLeftChild(Links) \
+    (RtlLeftChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
+
+#define RtlIsRightChild(Links) \
+    (RtlRightChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
+
+#define RtlRightChild(Links) \
+    ((PRTL_SPLAY_LINKS)(Links))->RightChild
+
+#define RtlIsRoot(Links) \
+    (RtlParent(Links) == (PRTL_SPLAY_LINKS)(Links))
+
+#define RtlLeftChild(Links) \
+    ((PRTL_SPLAY_LINKS)(Links))->LeftChild
+
+#define RtlParent(Links) \
+    ((PRTL_SPLAY_LINKS)(Links))->Parent
+
+#define RtlInitializeSplayLinks(Links)                  \
+    {                                                   \
+        PRTL_SPLAY_LINKS _SplayLinks;                   \
+        _SplayLinks = (PRTL_SPLAY_LINKS)(Links);        \
+        _SplayLinks->Parent = _SplayLinks;              \
+        _SplayLinks->LeftChild = NULL;                  \
+        _SplayLinks->RightChild = NULL;                 \
+    }
+
+#define RtlInsertAsLeftChild(ParentLinks,ChildLinks)    \
+    {                                                   \
+        PRTL_SPLAY_LINKS _SplayParent;                  \
+        PRTL_SPLAY_LINKS _SplayChild;                   \
+        _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
+        _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks);   \
+        _SplayParent->LeftChild = _SplayChild;          \
+        _SplayChild->Parent = _SplayParent;             \
+    }
+
+#define RtlInsertAsRightChild(ParentLinks,ChildLinks)   \
+    {                                                   \
+        PRTL_SPLAY_LINKS _SplayParent;                  \
+        PRTL_SPLAY_LINKS _SplayChild;                   \
+        _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
+        _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks);   \
+        _SplayParent->RightChild = _SplayChild;         \
+        _SplayChild->Parent = _SplayParent;             \
+    }
 
 /* PROTOTYPES ****************************************************************/
 
+/*
+ * Splay Tree Functions
+ */
+NTSYSAPI
+PRTL_SPLAY_LINKS
+NTAPI
+RtlSplay(PRTL_SPLAY_LINKS Links);
+
+NTSYSAPI
+PRTL_SPLAY_LINKS
+NTAPI
+RtlDelete(PRTL_SPLAY_LINKS Links);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlDeleteNoSplay(
+    PRTL_SPLAY_LINKS Links,
+    PRTL_SPLAY_LINKS *Root
+);
+
+NTSYSAPI
+PRTL_SPLAY_LINKS
+NTAPI
+RtlSubtreeSuccessor(PRTL_SPLAY_LINKS Links);
+
+NTSYSAPI
+PRTL_SPLAY_LINKS
+NTAPI
+RtlSubtreePredecessor(PRTL_SPLAY_LINKS Links);
+
+NTSYSAPI
+PRTL_SPLAY_LINKS
+NTAPI
+RtlRealSuccessor(PRTL_SPLAY_LINKS Links);
+
+NTSYSAPI
+PRTL_SPLAY_LINKS
+NTAPI
+RtlRealPredecessor(PRTL_SPLAY_LINKS Links);
+
 /*
  * Error and Exception Functions
  */
@@ -35,6 +132,11 @@ RtlAssert(
     PCHAR Message
 );
 
+NTSYSAPI
+VOID
+NTAPI
+RtlCaptureContext(OUT PCONTEXT ContextRecord);
+
 NTSYSAPI
 PVOID
 NTAPI
@@ -45,6 +147,14 @@ PVOID
 NTAPI
 RtlDecodePointer(IN PVOID Pointer);
 
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlDispatchException(
+    IN PEXCEPTION_RECORD ExceptionRecord,
+    IN PCONTEXT Context
+);
+
 NTSYSAPI
 ULONG
 NTAPI
@@ -69,10 +179,10 @@ NTSYSAPI
 VOID
 NTAPI
 RtlUnwind(
-    PEXCEPTION_REGISTRATION RegistrationFrame,
-    PVOID ReturnAddress,
-    PEXCEPTION_RECORD ExceptionRecord,
-    ULONG EaxValue
+    IN PVOID TargetFrame OPTIONAL,
+    IN PVOID TargetIp OPTIONAL,
+    IN PEXCEPTION_RECORD ExceptionRecord OPTIONAL,
+    IN PVOID ReturnValue
 );
 
 /*
@@ -524,6 +634,14 @@ RtlSelfRelativeToAbsoluteSD(
     IN PULONG PrimaryGroupSize
 );
 
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlSelfRelativeToAbsoluteSD2(
+    IN OUT PSECURITY_DESCRIPTOR SelfRelativeSD,
+    OUT PULONG BufferSize
+);
+
 NTSYSAPI
 NTSTATUS
 NTAPI
@@ -930,6 +1048,13 @@ RtlOemToUnicodeN(
 /*
  * Ansi->Unicode String Functions
  */
+NTSYSAPI
+ULONG
+NTAPI
+RtlxAnsiStringToUnicodeSize(
+    PCANSI_STRING AnsiString
+);
+
 NTSYSAPI
 NTSTATUS
 NTAPI
@@ -1059,6 +1184,15 @@ RtlIsTextUnicode(
     ULONG *Flags
 );
 
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlPrefixString(
+    PCANSI_STRING String1,
+    PCANSI_STRING String2,
+    BOOLEAN CaseInsensitive
+);
+
 NTSYSAPI
 BOOLEAN
 NTAPI
@@ -1178,6 +1312,14 @@ RtlQueryAtomInAtomTable(
     IN OUT PULONG NameLength OPTIONAL
 );
 
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlPinAtomInAtomTable(
+    IN PRTL_ATOM_TABLE AtomTable,
+    IN RTL_ATOM Atom
+);     
+
 NTSYSAPI
 NTSTATUS
 NTAPI
@@ -1291,6 +1433,15 @@ VOID
 NTAPI
 RtlReleasePebLock(VOID);
 
+NTSYSAPI
+VOID
+NTAPI
+RtlSetProcessIsCritical(
+    IN BOOLEAN NewValue,
+    OUT PBOOLEAN OldValue OPTIONAL,
+    IN BOOLEAN IsWinlogon
+);
+
 /*
  * Environment/Path Functions
  */
@@ -1552,7 +1703,7 @@ RtlGetCompressionWorkSpaceSize(
  * Debug Info Functions
  */
 NTSYSAPI
-PDEBUG_BUFFER
+PRTL_DEBUG_BUFFER
 NTAPI
 RtlCreateQueryDebugBuffer(
     IN ULONG Size,
@@ -1562,7 +1713,7 @@ RtlCreateQueryDebugBuffer(
 NTSYSAPI
 NTSTATUS
 NTAPI
-RtlDestroyQueryDebugBuffer(IN PDEBUG_BUFFER DebugBuffer);
+RtlDestroyQueryDebugBuffer(IN PRTL_DEBUG_BUFFER DebugBuffer);
 
 NTSYSAPI
 NTSTATUS
@@ -1570,7 +1721,7 @@ NTAPI
 RtlQueryProcessDebugInformation(
     IN ULONG ProcessId,
     IN ULONG DebugInfoClassMask,
-    IN OUT PDEBUG_BUFFER DebugBuffer
+    IN OUT PRTL_DEBUG_BUFFER DebugBuffer
 );
 
 /*
@@ -1957,6 +2108,19 @@ ULONG
 NTAPI
 RtlUniform(PULONG Seed);
 
+/*
+ * Network Functions
+ */
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlIpv4StringToAddressW(
+    IN LPWSTR IpString,
+    IN ULONG Base,
+    OUT PULONG PtrToIpAddr,
+    OUT PULONG IpAddr
+);
+
 /*
  * Time Functions
  */
@@ -2011,4 +2175,33 @@ NTSTATUS
 NTAPI
 RtlGetVersion(IN OUT PRTL_OSVERSIONINFOW lpVersionInformation);
 
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlGetNtProductType(OUT PNT_PRODUCT_TYPE ProductType);
+
+static __inline struct _PEB* NtCurrentPeb (void) 
+{
+    struct _PEB * pPeb;
+
+#if defined(__GNUC__)
+
+    __asm__ __volatile__
+    (
+      "movl %%fs:0x30, %0\n" /* fs:30h == Teb->Peb */
+      : "=r" (pPeb) /* can't have two memory operands */
+      : /* no inputs */
+    );
+
+#elif defined(_MSC_VER)
+
+    __asm mov eax, fs:0x30;
+    __asm mov pPeb, eax
+
+#else
+#error Unknown compiler for inline assembler
+#endif
+
+    return pPeb;
+}
 #endif