- Implement RtlGetLastNtStatus, RtlGetLastWin32Error, RtlRestoreLastWin32Error, RtlSe...
[reactos.git] / reactos / include / ntos / rtl.h
index efa6592..6623ea5 100755 (executable)
@@ -1,7 +1,6 @@
-/* $Id: rtl.h,v 1.4 2002/11/16 00:08:45 ekohl Exp $
+/* $Id$
  * 
  */
-
 #ifndef __DDK_RTL_H
 #define __DDK_RTL_H
 
@@ -13,7 +12,7 @@
 #endif /* __NTOSKRNL__ || __NTDRIVER__ || __NTHAL__ || __NTDLL__ || __NTAPP__ */
 
 #include <pe.h>
-
+#include <ole32/guiddef.h>
 
 #ifndef __USE_W32API
 
 #define RTL_QUERY_REGISTRY_DIRECT      (0x00000020)
 #define RTL_QUERY_REGISTRY_DELETE      (0x00000040)
 
+
+/*
+ * PURPOSE: Flags used by RtlIsTextUnicode and IsTextUnicode
+ */
+#define IS_TEXT_UNICODE_ASCII16                        (0x00000001)
+#define IS_TEXT_UNICODE_REVERSE_ASCII16                (0x00000010)
+#define IS_TEXT_UNICODE_STATISTICS             (0x00000002)
+#define IS_TEXT_UNICODE_REVERSE_STATISTICS     (0x00000020)
+#define IS_TEXT_UNICODE_CONTROLS               (0x00000004)
+#define IS_TEXT_UNICODE_REVERSE_CONTROLS       (0x00000040)
+#define IS_TEXT_UNICODE_SIGNATURE              (0x00000008)
+#define IS_TEXT_UNICODE_REVERSE_SIGNATURE      (0x00000080)
+#define IS_TEXT_UNICODE_ILLEGAL_CHARS          (0x00000100)
+#define IS_TEXT_UNICODE_ODD_LENGTH             (0x00000200)
+#define IS_TEXT_UNICODE_NULL_BYTES             (0x00001000)
+#define IS_TEXT_UNICODE_UNICODE_MASK           (0x0000000F)
+#define IS_TEXT_UNICODE_REVERSE_MASK           (0x000000F0)
+#define IS_TEXT_UNICODE_NOT_UNICODE_MASK       (0x00000F00)
+#define IS_TEXT_UNICODE_NOT_ASCII_MASK         (0x0000F000)
+
 /*
  * VOID
  * InitializeObjectAttributes (
  * ARGUMENTS:
  *         ListHead = Caller supplied storage for the head of the list
  */
-#define InitializeListHead(ListHead) \
-{ \
-       (ListHead)->Flink = (ListHead); \
-       (ListHead)->Blink = (ListHead); \
+static __inline VOID
+InitializeListHead(
+       IN PLIST_ENTRY  ListHead)
+{
+       ListHead->Flink = ListHead->Blink = ListHead;
 }
 
 
  *        ListHead = Head of the list
  *        Entry = Entry to insert
  */
-#define InsertHeadList(ListHead, ListEntry) \
-{ \
-       PLIST_ENTRY OldFlink; \
-       OldFlink = (ListHead)->Flink; \
-       (ListEntry)->Flink = OldFlink; \
-       (ListEntry)->Blink = (ListHead); \
-       OldFlink->Blink = (ListEntry); \
-       (ListHead)->Flink = (ListEntry); \
-       assert((ListEntry) != NULL); \
-       assert((ListEntry)->Blink!=NULL); \
-       assert((ListEntry)->Blink->Flink == (ListEntry)); \
-       assert((ListEntry)->Flink != NULL); \
-       assert((ListEntry)->Flink->Blink == (ListEntry)); \
+static __inline VOID
+InsertHeadList(
+       IN PLIST_ENTRY  ListHead,
+       IN PLIST_ENTRY  Entry)
+{
+       PLIST_ENTRY OldFlink;
+       OldFlink = ListHead->Flink;
+       Entry->Flink = OldFlink;
+       Entry->Blink = ListHead;
+       OldFlink->Blink = Entry;
+       ListHead->Flink = Entry;
 }
 
 
  *     ListHead = Head of the list
  *     Entry = Entry to insert
  */
-#define InsertTailList(ListHead, ListEntry) \
-{ \
-       PLIST_ENTRY OldBlink; \
-       OldBlink = (ListHead)->Blink; \
-       (ListEntry)->Flink = (ListHead); \
-       (ListEntry)->Blink = OldBlink; \
-       OldBlink->Flink = (ListEntry); \
-       (ListHead)->Blink = (ListEntry); \
-       assert((ListEntry) != NULL); \
-       assert((ListEntry)->Blink != NULL); \
-       assert((ListEntry)->Blink->Flink == (ListEntry)); \
-       assert((ListEntry)->Flink != NULL); \
-       assert((ListEntry)->Flink->Blink == (ListEntry)); \
+static __inline VOID
+InsertTailList(
+       IN PLIST_ENTRY  ListHead,
+       IN PLIST_ENTRY  Entry)
+{
+       PLIST_ENTRY OldBlink;
+       OldBlink = ListHead->Blink;
+       Entry->Flink = ListHead;
+       Entry->Blink = OldBlink;
+       OldBlink->Flink = Entry;
+       ListHead->Blink = Entry;
 }
 
 /*
  * RETURNS:
  *     The removed entry
  */
-/*
 #define PopEntryList(ListHead) \
        (ListHead)->Next; \
        { \
-               PSINGLE_LIST_ENTRY FirstEntry; \
-               FirstEntry = (ListHead)->Next; \
-               if (FirstEntry != NULL) \
-               { \
-                       (ListHead)->Next = FirstEntry->Next; \
-               } \
+               PSINGLE_LIST_ENTRY _FirstEntry; \
+               _FirstEntry = (ListHead)->Next; \
+               if (_FirstEntry != NULL) \
+                       (ListHead)->Next = _FirstEntry->Next; \
        }
-*/
-static inline PSINGLE_LIST_ENTRY
-PopEntryList(PSINGLE_LIST_ENTRY ListHead)
-{
-  PSINGLE_LIST_ENTRY ListEntry;
-
-  ListEntry = ListHead->Next;
-  if (ListEntry!=NULL)
-  {
-    ListHead->Next = ListEntry->Next;
-  }
-
-  return(ListEntry);
-}
 
 #define RtlCopyMemory(Destination,Source,Length) \
        memcpy((Destination),(Source),(Length))
 
-static
-inline
-VOID
-PushEntryList (
-       PSINGLE_LIST_ENTRY      ListHead,
-       PSINGLE_LIST_ENTRY      Entry
-       )
-{
-       Entry->Next = ListHead->Next;
-       ListHead->Next = Entry;
-}
+#define PushEntryList(_ListHead, _Entry) \
+       (_Entry)->Next = (_ListHead)->Next; \
+       (_ListHead)->Next = (_Entry); \
 
 /*
- *VOID
+ *BOOLEAN
  *RemoveEntryList (
  *     PLIST_ENTRY     Entry
  *     );
@@ -217,21 +208,18 @@ PushEntryList (
  * ARGUMENTS:
  *     ListEntry = Entry to remove
  */
-#define RemoveEntryList(ListEntry) \
-{ \
-       PLIST_ENTRY OldFlink; \
-       PLIST_ENTRY OldBlink; \
-       assert((ListEntry) != NULL); \
-       assert((ListEntry)->Blink!=NULL); \
-       assert((ListEntry)->Blink->Flink == (ListEntry)); \
-       assert((ListEntry)->Flink != NULL); \
-       assert((ListEntry)->Flink->Blink == (ListEntry)); \
-       OldFlink = (ListEntry)->Flink; \
-       OldBlink = (ListEntry)->Blink; \
-       OldFlink->Blink = OldBlink; \
-       OldBlink->Flink = OldFlink; \
-        (ListEntry)->Flink = NULL; \
-        (ListEntry)->Blink = NULL; \
+static __inline BOOLEAN
+RemoveEntryList(
+  IN PLIST_ENTRY  Entry)
+{
+  PLIST_ENTRY OldFlink;
+  PLIST_ENTRY OldBlink;
+
+  OldFlink = Entry->Flink;
+  OldBlink = Entry->Blink;
+  OldFlink->Blink = OldBlink;
+  OldBlink->Flink = OldFlink;
+  return (OldFlink == OldBlink);
 }
 
 
@@ -250,42 +238,18 @@ PushEntryList (
  * RETURNS:
  *     The removed entry
  */
-/*
-#define RemoveHeadList(ListHead) \
-       (ListHead)->Flink; \
-       {RemoveEntryList((ListHead)->Flink)}
-*/
-/*
-PLIST_ENTRY
-RemoveHeadList (
-       PLIST_ENTRY     ListHead
-       );
-*/
-
-static
-inline
-PLIST_ENTRY
-RemoveHeadList (
-       PLIST_ENTRY     ListHead
-       )
+static __inline PLIST_ENTRY 
+RemoveHeadList(
+  IN PLIST_ENTRY  ListHead)
 {
-       PLIST_ENTRY Old;
-       PLIST_ENTRY OldFlink;
-       PLIST_ENTRY OldBlink;
-
-       Old = ListHead->Flink;
-
-       OldFlink = ListHead->Flink->Flink;
-       OldBlink = ListHead->Flink->Blink;
-       OldFlink->Blink = OldBlink;
-       OldBlink->Flink = OldFlink;
-        if (Old != ListHead)
-     {
-        Old->Flink = NULL;
-        Old->Blink = NULL;
-     }
-   
-       return(Old);
+  PLIST_ENTRY Flink;
+  PLIST_ENTRY Entry;
+
+  Entry = ListHead->Flink;
+  Flink = Entry->Flink;
+  ListHead->Flink = Flink;
+  Flink->Blink = ListHead;
+  return Entry;
 }
 
 
@@ -304,58 +268,126 @@ RemoveHeadList (
  * RETURNS:
  *     The removed entry
  */
+static __inline PLIST_ENTRY
+RemoveTailList(
+  IN PLIST_ENTRY  ListHead)
+{
+  PLIST_ENTRY Blink;
+  PLIST_ENTRY Entry;
+
+  Entry = ListHead->Blink;
+  Blink = Entry->Blink;
+  ListHead->Blink = Blink;
+  Blink->Flink = ListHead;
+  return Entry;
+}
+
+
 /*
-#define RemoveTailList(ListHead) \
-       (ListHead)->Blink; \
-       {RemoveEntryList((ListHead)->Blink)}
-*/
-/*
-PLIST_ENTRY
-RemoveTailList (
-       PLIST_ENTRY     ListHead
-       );
-*/
+ * FIFO versions are slower but ensures that entries with equal SortField value
+ * are placed in FIFO order (assuming that entries are removed from Head).
+ */
 
-static
-inline
-PLIST_ENTRY
-RemoveTailList (
-       PLIST_ENTRY ListHead
-       )
-{
-       PLIST_ENTRY Old;
-       PLIST_ENTRY OldFlink;
-       PLIST_ENTRY OldBlink;
+#define InsertAscendingListFIFO(ListHead, Type, ListEntryField, NewEntry, SortField)\
+{\
+  PLIST_ENTRY current;\
+\
+  current = (ListHead)->Flink;\
+  while (current != (ListHead))\
+  {\
+    if (CONTAINING_RECORD(current, Type, ListEntryField)->SortField >\
+        (NewEntry)->SortField)\
+    {\
+      break;\
+    }\
+    current = current->Flink;\
+  }\
+\
+  InsertTailList(current, &((NewEntry)->ListEntryField));\
+}
 
-       Old = ListHead->Blink;
-
-       OldFlink = ListHead->Blink->Flink;
-       OldBlink = ListHead->Blink->Blink;
-       OldFlink->Blink = OldBlink;
-       OldBlink->Flink = OldFlink;
-   if (Old != ListHead)
-     {
-        Old->Flink = NULL;
-        Old->Blink = NULL;
-     }
-   
-       return(Old);
+
+#define InsertDescendingListFIFO(ListHead, Type, ListEntryField, NewEntry, SortField)\
+{\
+  PLIST_ENTRY current;\
+\
+  current = (ListHead)->Flink;\
+  while (current != (ListHead))\
+  {\
+    if (CONTAINING_RECORD(current, Type, ListEntryField)->SortField <\
+        (NewEntry)->SortField)\
+    {\
+      break;\
+    }\
+    current = current->Flink;\
+  }\
+\
+  InsertTailList(current, &((NewEntry)->ListEntryField));\
+}
+
+
+#define InsertAscendingList(ListHead, Type, ListEntryField, NewEntry, SortField)\
+{\
+  PLIST_ENTRY current;\
+\
+  current = (ListHead)->Flink;\
+  while (current != (ListHead))\
+  {\
+    if (CONTAINING_RECORD(current, Type, ListEntryField)->SortField >=\
+        (NewEntry)->SortField)\
+    {\
+      break;\
+    }\
+    current = current->Flink;\
+  }\
+\
+  InsertTailList(current, &((NewEntry)->ListEntryField));\
+}
+
+
+#define InsertDescendingList(ListHead, Type, ListEntryField, NewEntry, SortField)\
+{\
+  PLIST_ENTRY current;\
+\
+  current = (ListHead)->Flink;\
+  while (current != (ListHead))\
+  {\
+    if (CONTAINING_RECORD(current, Type, ListEntryField)->SortField <=\
+        (NewEntry)->SortField)\
+    {\
+      break;\
+    }\
+    current = current->Flink;\
+  }\
+\
+  InsertTailList(current, &((NewEntry)->ListEntryField));\
 }
 
+
+/*
+ * BOOLEAN
+ * IsXstEntry (
+ *  PLIST_ENTRY ListHead,
+ *  PLIST_ENTRY Entry
+ *  );
+*/
+#define IsFirstEntry(ListHead, Entry) ((ListHead)->Flink == Entry)
+  
+#define IsLastEntry(ListHead, Entry) ((ListHead)->Blink == Entry)
+  
+#define RtlEqualMemory(Destination,Source,Length)   (!memcmp((Destination), (Source), (Length)))
+
 NTSTATUS
 STDCALL
 RtlAppendUnicodeToString (
        PUNICODE_STRING Destination,
-       PWSTR           Source
+       PCWSTR          Source
        );
 
-ULONG
-STDCALL
-RtlCompareMemory (
-       PVOID   Source1,
-       PVOID   Source2,
-       ULONG   Length
-       );
+SIZE_T STDCALL
+RtlCompareMemory(IN const VOID *Source1,
+                 IN const VOID *Source2,
+                 IN SIZE_T Length);
 
 BOOLEAN
 STDCALL
@@ -365,16 +397,11 @@ RtlEqualUnicodeString (
        BOOLEAN         CaseInSensitive
        );
 
-VOID
-RtlGetCallersAddress (
-       PVOID   * CallersAddress
-       );
-
 NTSTATUS
 STDCALL
 RtlQueryRegistryValues (
        IN      ULONG                           RelativeTo,
-       IN      PWSTR                           Path,
+       IN      PCWSTR                          Path,
        IN      PRTL_QUERY_REGISTRY_TABLE       QueryTable,
        IN      PVOID                           Context,
        IN      PVOID                           Environment
@@ -384,8 +411,8 @@ NTSTATUS
 STDCALL
 RtlWriteRegistryValue (
        ULONG   RelativeTo,
-       PWSTR   Path,
-       PWSTR   ValueName,
+       PCWSTR  Path,
+       PCWSTR  ValueName,
        ULONG   ValueType,
        PVOID   ValueData,
        ULONG   ValueLength
@@ -393,8 +420,8 @@ RtlWriteRegistryValue (
 
 NTSTATUS STDCALL
 RtlDeleteRegistryValue(IN ULONG RelativeTo,
-                      IN PWSTR Path,
-                      IN PWSTR ValueName);
+                      IN PCWSTR Path,
+                      IN PCWSTR ValueName);
 
 VOID STDCALL
 RtlMoveMemory (PVOID Destination, CONST VOID* Source, ULONG Length);
@@ -431,8 +458,7 @@ RtlZeroMemory (PVOID Destination, ULONG Length);
 #define RTL_REGISTRY_WINDOWS_NT 3
 #define RTL_REGISTRY_DEVICEMAP  4
 #define RTL_REGISTRY_USER       5
-#define RTL_REGISTRY_ENUM       6   // ReactOS specific: Used internally in kernel only
-#define RTL_REGISTRY_MAXIMUM    7
+#define RTL_REGISTRY_MAXIMUM    6
 
 #define RTL_REGISTRY_HANDLE     0x40000000
 #define RTL_REGISTRY_OPTIONAL   0x80000000
@@ -459,91 +485,26 @@ RtlZeroMemory (PVOID Destination, ULONG Length);
 #define LONG_MOST_SIGNIFICANT_BIT      3
 
 
-
-#if defined(__NTOSKRNL__) || defined(__NTDLL__)
+#define NLS_ANSI_CODE_PAGE       NlsAnsiCodePage
+#define NLS_LEAD_BYTE_INFO       NlsLeadByteInfo
 #define NLS_MB_CODE_PAGE_TAG     NlsMbCodePageTag
 #define NLS_MB_OEM_CODE_PAGE_TAG NlsMbOemCodePageTag
+#define NLS_OEM_LEAD_BYTE_INFO   NlsOemLeadByteInfo
+
+#if defined(__NTOSKRNL__) || defined(__NTDLL__)
+extern USHORT  EXPORTED NlsAnsiCodePage;
+extern PUSHORT EXPORTED NlsLeadByteInfo;
+extern BOOLEAN EXPORTED NlsMbCodePageTag;
+extern BOOLEAN EXPORTED NlsMbOemCodePageTag;
+extern PUSHORT EXPORTED NlsOemLeadByteInfo;
 #else
-#define NLS_MB_CODE_PAGE_TAG     (*NlsMbCodePageTag)
-#define NLS_MB_OEM_CODE_PAGE_TAG (*NlsMbOemCodePageTag)
+extern USHORT  IMPORTED NlsAnsiCodePage;
+extern PUSHORT IMPORTED NlsLeadByteInfo;
+extern BOOLEAN IMPORTED NlsMbCodePageTag;
+extern BOOLEAN IMPORTED NlsMbOemCodePageTag;
+extern PUSHORT IMPORTED NlsOemLeadByteInfo;
 #endif /* __NTOSKRNL__ || __NTDLL__ */
 
-extern BOOLEAN NLS_MB_CODE_PAGE_TAG;
-extern BOOLEAN NLS_MB_OEM_CODE_PAGE_TAG;
-
-
-/*
- * NOTE: ReactOS extensions
- */
-#define RtlMin(X,Y) (((X) < (Y))? (X) : (Y))
-#define RtlMax(X,Y) (((X) > (Y))? (X) : (Y))
-#define RtlMin3(X,Y,Z) (((X) < (Y)) ? RtlMin(X,Z) : RtlMin(Y,Z))
-#define RtlMax3(X,Y,Z) (((X) > (Y)) ? RtlMax(X,Z) : RtlMax(Y,Z))
-
-
-/*
- * VOID
- * InitializeUnicodeString(PUNICODE_STRING DestinationString,
- *                         USHORT Lenght,
- *                         USHORT MaximumLength,
- *                         PCWSTR Buffer);
- *
- * Initialize n UNICODE_STRING from its fields. Use when you know the values of
- * all the fields in advance
- */
-
-#define InitializeUnicodeString(__PDEST_STRING__,__LENGTH__,__MAXLENGTH__,__BUFFER__) \
-{ \
-  (__PDEST_STRING__)->Length = (__LENGTH__); \
-  (__PDEST_STRING__)->MaximumLength = (__MAXLENGTH__); \
-  (__PDEST_STRING__)->Buffer = (__BUFFER__); \
-}
-
-
-/*
- * VOID
- * RtlInitUnicodeStringFromLiteral(PUNICODE_STRING DestinationString,
- *                                 PCWSTR SourceString);
- *
- * Initialize a UNICODE_STRING from a wide string literal. WARNING: use only with
- * string literals and statically initialized arrays, it will calculate the wrong
- * length otherwise
- */
-
-#define RtlInitUnicodeStringFromLiteral(__PDEST_STRING__,__SOURCE_STRING__) \
- InitializeUnicodeString( \
-  (__PDEST_STRING__), \
-  sizeof(__SOURCE_STRING__) - sizeof(WCHAR), \
-  sizeof(__SOURCE_STRING__), \
-  (__SOURCE_STRING__) \
-)
-
-
-/*
- * Static initializer for UNICODE_STRING variables.
- *
- * Usage:
- *    UNICODE_STRING wstr = UNICODE_STRING_INITIALIZER(L"string");
- */
-
-#define UNICODE_STRING_INITIALIZER(__SOURCE_STRING__) \
-{ \
-  sizeof((__SOURCE_STRING__)) - sizeof(WCHAR), \
-  sizeof((__SOURCE_STRING__)), \
-  (__SOURCE_STRING__) \
-}
-
-
-/*
- * Initializer for empty UNICODE_STRING variables.
- *
- * Usage:
- *    UNICODE_STRING wstr = EMPTY_UNICODE_STRING;
- */
-
-#define EMPTY_UNICODE_STRING {0, 0, NULL}
-
-
 /*
 VOID
 PushEntryList (
@@ -558,101 +519,74 @@ PushEntryList (
 */
 
 
-#ifndef __USE_W32API
-
-
-/*
- * An ReactOS extension
- */
-static
-inline
-PSINGLE_LIST_ENTRY
- PopEntrySList(
-       PSLIST_HEADER   ListHead
-       )
-{
-       PSINGLE_LIST_ENTRY ListEntry;
-
-       ListEntry = ListHead->s.Next.Next;
-       if (ListEntry!=NULL)
-       {
-               ListHead->s.Next.Next = ListEntry->Next;
-    ListHead->s.Depth++;
-    ListHead->s.Sequence++;
-  }
-       return ListEntry;
-}
+NTSTATUS STDCALL
+RtlAbsoluteToSelfRelativeSD (PSECURITY_DESCRIPTOR AbsSD,
+                            PSECURITY_DESCRIPTOR_RELATIVE RelSD,
+                            PULONG BufferLength);
 
+NTSTATUS STDCALL
+RtlAddAccessAllowedAce (PACL Acl,
+                       ULONG Revision,
+                       ACCESS_MASK AccessMask,
+                       PSID Sid);
 
-/*
- * An ReactOS extension
- */
-static
-inline
-VOID
-PushEntrySList (
-       PSLIST_HEADER   ListHead,
-       PSINGLE_LIST_ENTRY      Entry
-       )
-{
-       Entry->Next = ListHead->s.Next.Next;
-       ListHead->s.Next.Next = Entry;
-  ListHead->s.Depth++;
-  ListHead->s.Sequence++;
-}
+NTSTATUS 
+STDCALL 
+RtlAddAccessAllowedAceEx(
+       IN OUT PACL pAcl,
+       IN DWORD dwAceRevision,
+       IN DWORD AceFlags,
+       IN DWORD AccessMask,
+       IN PSID pSid);
 
-#else /* __USE_W32API */
 
-/*
- * An ReactOS extension
- */
-static
-inline
-PSINGLE_LIST_ENTRY
- PopEntrySList(
-       PSLIST_HEADER   ListHead
-       )
-{
-       PSINGLE_LIST_ENTRY ListEntry;
-
-       ListEntry = ListHead->Next.Next;
-       if (ListEntry!=NULL)
-       {
-               ListHead->Next.Next = ListEntry->Next;
-    ListHead->Depth++;
-    ListHead->Sequence++;
-  }
-       return ListEntry;
-}
+NTSTATUS STDCALL
+RtlAddAccessDeniedAce (PACL Acl,
+                      ULONG Revision,
+                      ACCESS_MASK AccessMask,
+                      PSID Sid);
 
+NTSTATUS STDCALL
+RtlAddAce (PACL Acl,
+          ULONG Revision,
+          ULONG StartingIndex,
+          PACE AceList,
+          ULONG AceListLength);
 
-/*
- * An ReactOS extension
- */
-static
-inline
-VOID
-PushEntrySList (
-       PSLIST_HEADER   ListHead,
-       PSINGLE_LIST_ENTRY      Entry
-       )
-{
-       Entry->Next = ListHead->Next.Next;
-       ListHead->Next.Next = Entry;
-  ListHead->Depth++;
-  ListHead->Sequence++;
-}
+NTSTATUS STDCALL
+RtlAddAtomToAtomTable (IN PRTL_ATOM_TABLE AtomTable,
+                      IN PWSTR AtomName,
+                      OUT PRTL_ATOM Atom);
 
-#endif /* __USE_W32API */
+NTSTATUS STDCALL
+RtlAddAuditAccessAce (PACL Acl,
+                     ULONG Revision,
+                     ACCESS_MASK AccessMask,
+                     PSID Sid,
+                     BOOLEAN Success,
+                     BOOLEAN Failure);
 
+NTSTATUS STDCALL
+RtlAddRange (IN OUT PRTL_RANGE_LIST RangeList,
+            IN ULONGLONG Start,
+            IN ULONGLONG End,
+            IN UCHAR Attributes,
+            IN ULONG Flags,  /* RTL_RANGE_LIST_ADD_... flags */
+            IN PVOID UserData OPTIONAL,
+            IN PVOID Owner OPTIONAL);
 
-NTSTATUS
-STDCALL
-RtlAddAtomToAtomTable (
-       IN      PRTL_ATOM_TABLE AtomTable,
-       IN      PWSTR           AtomName,
-       OUT     PRTL_ATOM       Atom
-       );
+NTSTATUS STDCALL
+RtlAllocateAndInitializeSid (IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority,
+                            IN UCHAR SubAuthorityCount,
+                            IN ULONG SubAuthority0,
+                            IN ULONG SubAuthority1,
+                            IN ULONG SubAuthority2,
+                            IN ULONG SubAuthority3,
+                            IN ULONG SubAuthority4,
+                            IN ULONG SubAuthority5,
+                            IN ULONG SubAuthority6,
+                            IN ULONG SubAuthority7,
+                            OUT PSID *Sid);
 
 PVOID STDCALL
 RtlAllocateHeap (
@@ -661,11 +595,8 @@ RtlAllocateHeap (
        ULONG   Size
        );
 
-WCHAR
-STDCALL
-RtlAnsiCharToUnicodeChar (
-       CHAR    AnsiChar
-       );
+WCHAR STDCALL
+RtlAnsiCharToUnicodeChar (IN CHAR AnsiChar);
 
 ULONG
 STDCALL
@@ -702,6 +633,14 @@ RtlAppendUnicodeStringToString (
        PUNICODE_STRING Source
        );
 
+BOOLEAN STDCALL
+RtlAreAllAccessesGranted (ACCESS_MASK GrantedAccess,
+                         ACCESS_MASK DesiredAccess);
+
+BOOLEAN STDCALL
+RtlAreAnyAccessesGranted (ACCESS_MASK GrantedAccess,
+                         ACCESS_MASK DesiredAccess);
+
 BOOLEAN
 STDCALL
 RtlAreBitsClear (
@@ -727,6 +666,23 @@ RtlAssert (
        PCHAR Message
        );
 
+VOID
+STDCALL
+RtlCaptureContext (
+       OUT PCONTEXT ContextRecord
+       );
+
+USHORT
+STDCALL
+RtlCaptureStackBackTrace (
+       IN ULONG FramesToSkip,
+       IN ULONG FramesToCapture,
+       OUT PVOID *BackTrace,
+       OUT PULONG BackTraceHash OPTIONAL
+       );
+
+
+
 NTSTATUS
 STDCALL
 RtlCharToInteger (
@@ -748,6 +704,13 @@ RtlClearAllBits (
        IN      PRTL_BITMAP     BitMapHeader
        );
 
+VOID
+STDCALL
+RtlClearBit (
+       PRTL_BITMAP BitMapHeader,
+       ULONG BitNumber
+       );
+
 VOID
 STDCALL
 RtlClearBits (
@@ -756,11 +719,10 @@ RtlClearBits (
        IN      ULONG           NumberToClear
        );
 
-DWORD
-STDCALL
+ULONG STDCALL
 RtlCompactHeap (
-       HANDLE  hheap,
-       DWORD   flags
+       HANDLE Heap,
+       ULONG   Flags
        );
 
 LONG
@@ -776,7 +738,7 @@ STDCALL
 RtlCompareUnicodeString (
        PUNICODE_STRING String1,
        PUNICODE_STRING String2,
-       BOOLEAN         BaseInsensitive
+       BOOLEAN         CaseInsensitive
        );
 
 NTSTATUS STDCALL
@@ -799,15 +761,15 @@ RtlCompressChunks(IN PUCHAR UncompressedBuffer,
                  IN PVOID WorkSpace);
 
 LARGE_INTEGER STDCALL
-RtlConvertLongToLargeInteger(IN LONG SignedInteger);
+RtlConvertLongToLargeInteger (IN LONG SignedInteger);
 
 NTSTATUS STDCALL
-RtlConvertSidToUnicodeString(IN OUT PUNICODE_STRING String,
-                            IN PSID Sid,
-                            IN BOOLEAN AllocateString);
+RtlConvertSidToUnicodeString (IN OUT PUNICODE_STRING String,
+                             IN PSID Sid,
+                             IN BOOLEAN AllocateString);
 
 LARGE_INTEGER STDCALL
-RtlConvertUlongToLargeInteger(IN ULONG UnsignedInteger);
+RtlConvertUlongToLargeInteger (IN ULONG UnsignedInteger);
 
 #if 0
 VOID
@@ -836,6 +798,10 @@ RtlCopyLuidAndAttributesArray(ULONG Count,
                              PLUID_AND_ATTRIBUTES Src,
                              PLUID_AND_ATTRIBUTES Dest);
 
+NTSTATUS STDCALL
+RtlCopyRangeList (OUT PRTL_RANGE_LIST CopyRangeList,
+                 IN PRTL_RANGE_LIST RangeList);
+
 NTSTATUS STDCALL
 RtlCopySid(ULONG BufferLength,
           PSID Dest,
@@ -858,6 +824,11 @@ VOID STDCALL
 RtlCopyUnicodeString(PUNICODE_STRING DestinationString,
                     PUNICODE_STRING SourceString);
 
+NTSTATUS STDCALL
+RtlCreateAcl (PACL Acl,
+             ULONG AclSize,
+             ULONG AclRevision);
+
 NTSTATUS STDCALL
 RtlCreateAtomTable(IN ULONG TableSize,
                   IN OUT PRTL_ATOM_TABLE *AtomTable);
@@ -867,41 +838,42 @@ STDCALL
 RtlCreateHeap (
        ULONG                   Flags,
        PVOID                   BaseAddress,
-       ULONG                   SizeToReserve,     // dwMaximumSize
-       ULONG                   SizeToCommit,      // dwInitialSize
+       ULONG                   SizeToReserve,     /* dwMaximumSize */
+       ULONG                   SizeToCommit,      /* dwInitialSize */
        PVOID                   Unknown,
        PRTL_HEAP_DEFINITION    Definition
        );
 
-NTSTATUS
-STDCALL
-RtlCreateRegistryKey (
-       ULONG   RelativeTo,
-       PWSTR   Path
-       );
+NTSTATUS STDCALL
+RtlCreateRegistryKey (ULONG RelativeTo,
+                     PWSTR Path);
+
+NTSTATUS STDCALL
+RtlCreateSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor,
+                            ULONG Revision);
+
+NTSTATUS STDCALL
+RtlCreateSecurityDescriptorRelative (PSECURITY_DESCRIPTOR_RELATIVE SecurityDescriptor,
+                                    ULONG Revision);
 
 NTSTATUS
 STDCALL
-RtlCreateSecurityDescriptor (
-       PSECURITY_DESCRIPTOR    SecurityDescriptor,
-       ULONG                   Revision
+RtlCreateSystemVolumeInformationFolder(
+       IN  PUNICODE_STRING VolumeRootPath
        );
 
-BOOLEAN
-STDCALL
-RtlCreateUnicodeString (
-       OUT     PUNICODE_STRING Destination,
-       IN      PWSTR           Source
-       );
+BOOLEAN STDCALL
+RtlCreateUnicodeString (OUT PUNICODE_STRING Destination,
+                       IN PCWSTR Source);
 
 BOOLEAN STDCALL
-RtlCreateUnicodeStringFromAsciiz (OUT  PUNICODE_STRING Destination,
-                                 IN    PCSZ            Source);
+RtlCreateUnicodeStringFromAsciiz (OUT PUNICODE_STRING Destination,
+                                 IN PCSZ Source);
 
 NTSTATUS
 STDCALL
 RtlCustomCPToUnicodeN (
-       PRTL_NLS_DATA   NlsData,
+       IN      PCPTABLEINFO    CustomCP,
        PWCHAR          UnicodeString,
        ULONG           UnicodeSize,
        PULONG          ResultSize,
@@ -909,6 +881,12 @@ RtlCustomCPToUnicodeN (
        ULONG           CustomSize
        );
 
+BOOLEAN STDCALL
+RtlCutoverTimeToSystemTime(IN PTIME_FIELDS CutoverTimeFields,
+                           OUT PLARGE_INTEGER SystemTime,
+                           IN PLARGE_INTEGER CurrentTime,
+                           IN BOOLEAN ThisYearsCutoverOnly);
+
 NTSTATUS STDCALL
 RtlDecompressBuffer(IN USHORT CompressionFormat,
                    OUT PUCHAR UncompressedBuffer,
@@ -936,9 +914,51 @@ RtlDecompressFragment(IN USHORT CompressionFormat,
                      OUT PULONG FinalUncompressedSize,
                      IN PVOID WorkSpace);
 
+PRTL_SPLAY_LINKS
+STDCALL
+RtlDelete (
+       PRTL_SPLAY_LINKS Links
+       );
+
+NTSTATUS STDCALL
+RtlDeleteAce (PACL Acl,
+             ULONG AceIndex);
+
+NTSTATUS STDCALL
+RtlDeleteAtomFromAtomTable (IN PRTL_ATOM_TABLE AtomTable,
+                           IN RTL_ATOM Atom);
+
+BOOLEAN
+STDCALL
+RtlDeleteElementGenericTable (
+       PRTL_GENERIC_TABLE Table,
+       PVOID Buffer
+       );
+
+BOOLEAN
+STDCALL
+RtlDeleteElementGenericTableAvl (
+       PRTL_AVL_TABLE Table,
+       PVOID Buffer
+       );
+
+VOID
+STDCALL
+RtlDeleteNoSplay (
+       PRTL_SPLAY_LINKS Links,
+       PRTL_SPLAY_LINKS *Root
+       );
+
+
 NTSTATUS STDCALL
-RtlDeleteAtomFromAtomTable(IN PRTL_ATOM_TABLE AtomTable,
-                          IN RTL_ATOM Atom);
+RtlDeleteOwnersRanges (IN OUT PRTL_RANGE_LIST RangeList,
+                      IN PVOID Owner);
+
+NTSTATUS STDCALL
+RtlDeleteRange (IN OUT PRTL_RANGE_LIST RangeList,
+               IN ULONGLONG Start,
+               IN ULONGLONG End,
+               IN PVOID Owner);
 
 NTSTATUS STDCALL
 RtlDescribeChunk(IN USHORT CompressionFormat,
@@ -948,10 +968,18 @@ RtlDescribeChunk(IN USHORT CompressionFormat,
                 OUT PULONG ChunkSize);
 
 NTSTATUS STDCALL
-RtlDestroyAtomTable(IN PRTL_ATOM_TABLE AtomTable);
+RtlDestroyAtomTable (IN PRTL_ATOM_TABLE AtomTable);
+
+HANDLE STDCALL
+RtlDestroyHeap (HANDLE hheap);
+
+NTSTATUS
+STDCALL
+RtlDispatchException(
+       PEXCEPTION_RECORD pExcptRec, 
+       CONTEXT * pContext 
+       );
 
-BOOL STDCALL
-RtlDestroyHeap(HANDLE hheap);
 
 NTSTATUS
 STDCALL
@@ -990,6 +1018,54 @@ RtlEnlargedUnsignedMultiply (
        ULONG   Multiplier
        );
 
+PVOID
+STDCALL
+RtlEnumerateGenericTable (
+       PRTL_GENERIC_TABLE Table,
+       BOOLEAN Restart
+       );
+       
+PVOID
+STDCALL
+RtlEnumerateGenericTableAvl (
+       PRTL_AVL_TABLE Table,
+       BOOLEAN Restart
+       );
+
+PVOID
+STDCALL
+RtlEnumerateGenericTableLikeADirectory (
+       IN PRTL_AVL_TABLE Table,
+       IN PRTL_AVL_MATCH_FUNCTION MatchFunction,
+       IN PVOID MatchData,
+       IN ULONG NextFlag,
+       IN OUT PVOID *RestartKey,
+       IN OUT PULONG DeleteCount,
+       IN OUT PVOID Buffer
+       );
+
+PVOID
+STDCALL
+RtlEnumerateGenericTableWithoutSplaying (
+       PRTL_GENERIC_TABLE Table,
+       PVOID *RestartKey
+       );
+
+PVOID
+STDCALL
+RtlEnumerateGenericTableWithoutSplayingAvl (
+       PRTL_AVL_TABLE Table,
+       PVOID *RestartKey
+       );
+
+BOOLEAN STDCALL
+RtlEqualPrefixSid (PSID Sid1,
+                  PSID Sid2);
+
+BOOLEAN STDCALL
+RtlEqualSid (PSID Sid1,
+            PSID Sid2);
+
 BOOLEAN
 STDCALL
 RtlEqualString (
@@ -1045,6 +1121,40 @@ RtlFindClearBitsAndSet (
        ULONG           HintIndex
        );
 
+ULONG
+STDCALL
+RtlFindClearRuns (
+       PRTL_BITMAP BitMapHeader,
+       PRTL_BITMAP_RUN RunArray,
+       ULONG SizeOfRunArray,
+       BOOLEAN LocateLongestRuns
+       );
+
+ULONG
+STDCALL
+RtlFindLastBackwardRunClear (
+       IN PRTL_BITMAP BitMapHeader,
+       IN ULONG FromIndex,
+       IN PULONG StartingRunIndex
+       );
+
+ULONG
+STDCALL
+RtlFindNextForwardRunClear (
+       IN PRTL_BITMAP BitMapHeader,
+       IN ULONG FromIndex,
+       IN PULONG StartingRunIndex
+       );
+       
+
+PUNICODE_PREFIX_TABLE_ENTRY
+STDCALL
+RtlFindUnicodePrefix (
+       PUNICODE_PREFIX_TABLE PrefixTable,
+       PUNICODE_STRING FullName,
+       ULONG CaseInsensitiveIndex
+       );
+
 ULONG
 STDCALL
 RtlFindFirstRunClear (
@@ -1059,6 +1169,9 @@ RtlFindFirstRunSet (
        PULONG          StartingIndex
        );
 
+CCHAR STDCALL
+RtlFindLeastSignificantBit (IN ULONGLONG Set);
+
 ULONG
 STDCALL
 RtlFindLongestRunClear (
@@ -1083,6 +1196,21 @@ RtlFindMessage (
        OUT     PRTL_MESSAGE_RESOURCE_ENTRY     *MessageResourceEntry
        );
 
+CCHAR STDCALL
+RtlFindMostSignificantBit (IN ULONGLONG Set);
+
+NTSTATUS STDCALL
+RtlFindRange (IN PRTL_RANGE_LIST RangeList,
+             IN ULONGLONG Minimum,
+             IN ULONGLONG Maximum,
+             IN ULONG Length,
+             IN ULONG Alignment,
+             IN ULONG Flags,
+             IN UCHAR AttributeAvailableMask,
+             IN PVOID Context OPTIONAL,
+             IN PRTL_CONFLICT_RANGE_CALLBACK Callback OPTIONAL,
+             OUT PULONGLONG Start);
+
 ULONG
 STDCALL
 RtlFindSetBits (
@@ -1099,17 +1227,15 @@ RtlFindSetBitsAndClear (
        ULONG           HintIndex
        );
 
-NTSTATUS
-STDCALL
-RtlFormatCurrentUserKeyPath (
-       IN OUT  PUNICODE_STRING KeyPath
-       );
+BOOLEAN STDCALL
+RtlFirstFreeAce (PACL Acl,
+                PACE* Ace);
 
-VOID
-STDCALL
-RtlFreeAnsiString (
-       PANSI_STRING    AnsiString
-       );
+NTSTATUS STDCALL
+RtlFormatCurrentUserKeyPath (IN OUT PUNICODE_STRING KeyPath);
+
+VOID STDCALL
+RtlFreeAnsiString (IN PANSI_STRING AnsiString);
 
 BOOLEAN
 STDCALL
@@ -1119,36 +1245,139 @@ RtlFreeHeap (
        PVOID   Address
        );
 
+VOID STDCALL
+RtlFreeOemString (IN POEM_STRING OemString);
+
+VOID STDCALL
+RtlFreeRangeList (IN PRTL_RANGE_LIST RangeList);
+
+PVOID STDCALL
+RtlFreeSid (PSID Sid);
+
+VOID STDCALL
+RtlFreeUnicodeString (IN PUNICODE_STRING UnicodeString);
+
+VOID STDCALL
+RtlGenerate8dot3Name (IN PUNICODE_STRING Name,
+                     IN BOOLEAN AllowExtendedCharacters,
+                     IN OUT PGENERATE_NAME_CONTEXT Context,
+                     OUT PUNICODE_STRING Name8dot3);
+
+NTSTATUS STDCALL
+RtlGetAce (PACL Acl,
+          ULONG AceIndex,
+          PACE *Ace);
+
 VOID
 STDCALL
-RtlFreeOemString (
-       POEM_STRING     OemString
+RtlGetCallersAddress(
+       OUT PVOID *CallersAddress,
+       OUT PVOID *CallersCaller
        );
 
-VOID
+NTSTATUS STDCALL
+RtlGetCompressionWorkSpaceSize (IN USHORT CompressionFormatAndEngine,
+                               OUT PULONG CompressBufferAndWorkSpaceSize,
+                               OUT PULONG CompressFragmentWorkSpaceSize);
+
+NTSTATUS STDCALL
+RtlGetControlSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor,
+                                PSECURITY_DESCRIPTOR_CONTROL Control,
+                                PULONG Revision);
+
+NTSTATUS STDCALL
+RtlGetDaclSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor,
+                             PBOOLEAN DaclPresent,
+                             PACL* Dacl,
+                             PBOOLEAN DaclDefaulted);
+
+VOID STDCALL
+RtlGetDefaultCodePage (OUT PUSHORT AnsiCodePage,
+                      OUT PUSHORT OemCodePage);
+
+PVOID
 STDCALL
-RtlFreeUnicodeString (
-       PUNICODE_STRING UnicodeString
+RtlGetElementGenericTable(
+       PRTL_GENERIC_TABLE Table,
+       ULONG I
        );
 
-VOID STDCALL
-RtlGenerate8dot3Name(IN PUNICODE_STRING Name,
-                    IN BOOLEAN AllowExtendedCharacters,
-                    IN OUT PGENERATE_NAME_CONTEXT Context,
-                    OUT PUNICODE_STRING Name8dot3);
+PVOID
+STDCALL
+RtlGetElementGenericTableAvl (
+       PRTL_AVL_TABLE Table,
+       ULONG I
+       );
 
 NTSTATUS STDCALL
-RtlGetCompressionWorkSpaceSize(IN USHORT CompressionFormatAndEngine,
-                              OUT PULONG CompressBufferAndWorkSpaceSize,
-                              OUT PULONG CompressFragmentWorkSpaceSize);
+RtlGetFirstRange (IN PRTL_RANGE_LIST RangeList,
+                 OUT PRTL_RANGE_LIST_ITERATOR Iterator,
+                 OUT PRTL_RANGE *Range);
 
-VOID
+NTSTATUS STDCALL
+RtlGetGroupSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor,
+                              PSID* Group,
+                              PBOOLEAN GroupDefaulted);
+
+NTSTATUS STDCALL
+RtlGetLastNtStatus(VOID);
+
+ULONG STDCALL
+RtlGetLastWin32Error(VOID);
+
+NTSTATUS STDCALL
+RtlGetNextRange (IN OUT PRTL_RANGE_LIST_ITERATOR Iterator,
+                OUT PRTL_RANGE *Range,
+                IN BOOLEAN MoveForwards);
+
+ULONG
+STDCALL
+RtlGetNtGlobalFlags (
+       VOID
+       ); 
+
+NTSTATUS STDCALL
+RtlGetOwnerSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor,
+                              PSID* Owner,
+                              PBOOLEAN OwnerDefaulted);
+
+NTSTATUS STDCALL
+RtlGetSaclSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor,
+                             PBOOLEAN SaclPresent,
+                             PACL* Sacl,
+                             PBOOLEAN SaclDefaulted);
+
+BOOLEAN STDCALL
+RtlGetSecurityDescriptorRMControl(PSECURITY_DESCRIPTOR SecurityDescriptor,
+                                 PUCHAR RMControl);
+
+NTSTATUS
+STDCALL
+RtlGetSetBootStatusData(
+       HANDLE Filehandle,
+       BOOLEAN WriteMode,
+       DWORD DataClass,
+       PVOID Buffer,
+       ULONG BufferSize,
+       DWORD DataClass2
+       );
+
+NTSTATUS STDCALL
+RtlGUIDFromString (IN PUNICODE_STRING GuidString,
+                  OUT GUID* Guid);
+
+NTSTATUS
 STDCALL
-RtlGetDefaultCodePage (
-       PUSHORT AnsiCodePage,
-       PUSHORT OemCodePage
+RtlHashUnicodeString(
+       IN const UNICODE_STRING *String,
+       IN BOOLEAN CaseInSensitive,
+       IN ULONG HashAlgorithm,
+       OUT PULONG HashValue
        );
 
+PSID_IDENTIFIER_AUTHORITY STDCALL
+RtlIdentifierAuthoritySid (PSID Sid);
+
 PVOID
 STDCALL
 RtlImageDirectoryEntryToData (
@@ -1161,111 +1390,385 @@ RtlImageDirectoryEntryToData (
 PIMAGE_NT_HEADERS
 STDCALL
 RtlImageNtHeader (
-       PVOID   BaseAddress
+       IN      PVOID   BaseAddress
+       );
+
+PIMAGE_SECTION_HEADER
+STDCALL
+RtlImageRvaToSection (
+       PIMAGE_NT_HEADERS       NtHeader,
+       PVOID                   BaseAddress,
+       ULONG                   Rva
+       );
+
+ULONG
+STDCALL
+RtlImageRvaToVa (
+       PIMAGE_NT_HEADERS       NtHeader,
+       PVOID                   BaseAddress,
+       ULONG                   Rva,
+       PIMAGE_SECTION_HEADER   *SectionHeader
+       );
+
+VOID
+STDCALL
+RtlInitAnsiString (
+       PANSI_STRING    DestinationString,
+       PCSZ            SourceString
+       );
+
+VOID
+STDCALL
+RtlInitCodePageTable (
+       IN      PUSHORT         TableBase,
+       OUT     PCPTABLEINFO    CodePageTable
+       );
+
+VOID
+STDCALL
+RtlInitializeUnicodePrefix (
+       PUNICODE_PREFIX_TABLE PrefixTable
+       );
+
+NTSTATUS STDCALL
+RtlInitializeSid (PSID Sid,
+                 PSID_IDENTIFIER_AUTHORITY IdentifierAuthority,
+                 UCHAR SubAuthorityCount);
+
+VOID
+STDCALL
+RtlInitializeBitMap(
+  IN PRTL_BITMAP  BitMapHeader,
+  IN PULONG  BitMapBuffer,
+  IN ULONG  SizeOfBitMap); 
+  
+VOID
+STDCALL
+RtlInitNlsTables (
+       IN      PUSHORT         AnsiTableBase,
+       IN      PUSHORT         OemTableBase,
+       IN      PUSHORT         CaseTableBase,
+       OUT     PNLSTABLEINFO   NlsTable
+       );
+
+VOID
+STDCALL
+RtlInitString (
+       PSTRING DestinationString,
+       PCSZ    SourceString
+       );
+
+VOID
+STDCALL
+RtlInitUnicodeString (
+       PUNICODE_STRING DestinationString,
+       PCWSTR          SourceString
+       );
+
+VOID
+STDCALL
+RtlInitializeBitMap (
+       IN OUT  PRTL_BITMAP     BitMapHeader,
+       IN      PULONG          BitMapBuffer,
+       IN      ULONG           SizeOfBitMap
+       );
+
+NTSTATUS
+STDCALL
+RtlInitializeContext (
+       IN      HANDLE                  ProcessHandle,
+       OUT     PCONTEXT                ThreadContext,
+       IN      PVOID                   ThreadStartParam  OPTIONAL,
+       IN      PTHREAD_START_ROUTINE   ThreadStartAddress,
+       IN      PINITIAL_TEB            InitialTeb
+       );
+
+VOID
+STDCALL
+RtlInitializeGenericTable (
+       PRTL_GENERIC_TABLE Table,
+       PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine,
+       PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine,
+       PRTL_GENERIC_FREE_ROUTINE FreeRoutine,
+       PVOID TableContext
+       );
+
+VOID
+STDCALL
+RtlInitializeGenericTableAvl (
+       PRTL_AVL_TABLE Table,
+       PRTL_AVL_COMPARE_ROUTINE CompareRoutine,
+       PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine,
+       PRTL_AVL_FREE_ROUTINE FreeRoutine,
+       PVOID TableContext
+       );
+
+VOID STDCALL
+RtlInitializeRangeList (IN OUT PRTL_RANGE_LIST RangeList);
+
+PVOID
+STDCALL
+RtlInsertElementGenericTable (
+       PRTL_GENERIC_TABLE Table,
+       PVOID Buffer,
+       ULONG BufferSize,
+       PBOOLEAN NewElement OPTIONAL
+       );
+
+PVOID
+STDCALL
+RtlInsertElementGenericTableAvl (
+       PRTL_AVL_TABLE Table,
+       PVOID Buffer,
+       ULONG BufferSize,
+       PBOOLEAN NewElement OPTIONAL
+       );
+
+PVOID
+STDCALL
+RtlInsertElementGenericTableFull (
+       PRTL_GENERIC_TABLE Table,
+       PVOID Buffer,
+       ULONG BufferSize,
+       PBOOLEAN NewElement OPTIONAL,
+       PVOID NodeOrParent,
+       TABLE_SEARCH_RESULT SearchResult
+       );
+
+PVOID
+STDCALL
+RtlInsertElementGenericTableFullAvl (
+       PRTL_AVL_TABLE Table,
+       PVOID Buffer,
+       ULONG BufferSize,
+       PBOOLEAN NewElement OPTIONAL,
+       PVOID NodeOrParent,
+       TABLE_SEARCH_RESULT SearchResult
+       );
+
+BOOLEAN
+STDCALL
+RtlInsertUnicodePrefix (
+       PUNICODE_PREFIX_TABLE PrefixTable,
+       PUNICODE_STRING Prefix,
+       PUNICODE_PREFIX_TABLE_ENTRY PrefixTableEntry
+       );
+
+NTSTATUS
+STDCALL
+RtlInt64ToUnicodeString (
+       IN ULONGLONG Value,
+       IN ULONG Base OPTIONAL,
+       IN OUT PUNICODE_STRING String
+       );
+
+NTSTATUS
+STDCALL
+RtlIntegerToChar (
+       IN      ULONG   Value,
+       IN      ULONG   Base,
+       IN      ULONG   Length,
+       IN OUT  PCHAR   String
+       );
+
+NTSTATUS 
+STDCALL
+RtlIntegerToUnicode(
+       IN ULONG Value,
+       IN ULONG Base  OPTIONAL,
+       IN ULONG Length OPTIONAL,
+       IN OUT LPWSTR String
+       );
+
+NTSTATUS
+STDCALL
+RtlIntegerToUnicodeString (
+       IN      ULONG           Value,
+       IN      ULONG           Base,
+       IN OUT  PUNICODE_STRING String
+       );
+
+NTSTATUS STDCALL
+RtlInvertRangeList (OUT PRTL_RANGE_LIST InvertedRangeList,
+                   IN PRTL_RANGE_LIST RangeList);
+
+LPSTR
+STDCALL
+RtlIpv4AddressToStringA(
+       PULONG IP,
+       LPSTR Buffer
+       );
+
+NTSTATUS
+STDCALL
+RtlIpv4AddressToStringExA(
+       PULONG IP,
+       PULONG Port,
+       LPSTR Buffer,
+       PULONG MaxSize
+       );
+
+LPWSTR
+STDCALL
+RtlIpv4AddressToStringW(
+       PULONG IP,
+       LPWSTR Buffer
+       );
+
+NTSTATUS
+STDCALL
+RtlIpv4AddressToStringExW(
+       PULONG IP,
+       PULONG Port,
+       LPWSTR Buffer,
+       PULONG MaxSize
+       );
+
+NTSTATUS
+STDCALL
+RtlIpv4StringToAddressA(
+       IN LPSTR IpString,
+       IN ULONG Base,
+       OUT PVOID PtrToIpAddr,
+       OUT ULONG IpAddr
        );
 
-PIMAGE_SECTION_HEADER
+NTSTATUS
 STDCALL
-RtlImageRvaToSection (
-       PIMAGE_NT_HEADERS       NtHeader,
-       PVOID                   BaseAddress,
-       ULONG                   Rva
+RtlIpv4StringToAddressExA(
+       IN LPSTR IpString,
+       IN ULONG Base,
+       OUT PULONG IpAddr,
+       OUT PULONG Port
        );
 
-ULONG
+NTSTATUS
 STDCALL
-RtlImageRvaToVa (
-       PIMAGE_NT_HEADERS       NtHeader,
-       PVOID                   BaseAddress,
-       ULONG                   Rva,
-       PIMAGE_SECTION_HEADER   *SectionHeader
+RtlIpv4StringToAddressW(
+       IN LPWSTR IpString, 
+       IN ULONG Base, 
+       OUT PVOID PtrToIpAddr,
+       OUT ULONG IpAddr
        );
 
-VOID
+NTSTATUS
 STDCALL
-RtlInitAnsiString (
-       PANSI_STRING    DestinationString,
-       PCSZ            SourceString
+RtlIpv4StringToAddressExW(
+       IN LPWSTR IpString,
+       IN ULONG Base,
+       OUT PULONG IpAddr,
+       OUT PULONG Port
        );
 
-VOID
+NTSTATUS
 STDCALL
-RtlInitString (
-       PSTRING DestinationString,
-       PCSZ    SourceString
+RtlIpv6AddressToStringA(
+       PULONG IP,
+       LPSTR Buffer
        );
 
-VOID
+NTSTATUS
 STDCALL
-RtlInitUnicodeString (
-       PUNICODE_STRING DestinationString,
-       PCWSTR          SourceString
+RtlIpv6AddressToStringExA(
+       PULONG IP,
+       PULONG Port,
+       LPSTR Buffer,
+       PULONG MaxSize
        );
 
-VOID
+NTSTATUS
 STDCALL
-RtlInitializeBitMap (
-       IN OUT  PRTL_BITMAP     BitMapHeader,
-       IN      PULONG          BitMapBuffer,
-       IN      ULONG           SizeOfBitMap
+RtlIpv6AddressToStringW(
+       PULONG IP,
+       LPWSTR Buffer
        );
 
 NTSTATUS
 STDCALL
-RtlInitializeContext (
-       IN      HANDLE                  ProcessHandle,
-       IN      PCONTEXT                Context,
-       IN      PVOID                   Parameter,
-       IN      PTHREAD_START_ROUTINE   StartAddress,
-       IN OUT  PINITIAL_TEB            InitialTeb
+RtlIpv6AddressToStringExW(
+       PULONG IP,
+       PULONG Port,
+       LPWSTR Buffer,
+       PULONG MaxSize
        );
 
-VOID
+NTSTATUS
 STDCALL
-RtlInitializeGenericTable (
-       IN OUT  PRTL_GENERIC_TABLE      Table,
-       IN      PVOID                   CompareRoutine,
-       IN      PVOID                   AllocateRoutine,
-       IN      PVOID                   FreeRoutine,
-       IN      ULONG                   UserParameter
+RtlIpv6StringToAddressA(
+       IN LPSTR IpString,
+       IN ULONG Base,
+       OUT PVOID PtrToIpAddr,
+       OUT ULONG IpAddr
        );
 
-PVOID
+NTSTATUS
 STDCALL
-RtlInsertElementGenericTable (
-       IN OUT  PRTL_GENERIC_TABLE      Table,
-       IN      PVOID                   Element,
-       IN      ULONG                   ElementSize,
-       IN      ULONG                   Unknown4
+RtlIpv6StringToAddressExA(
+       IN LPSTR IpString,
+       IN ULONG Base,
+       OUT PULONG IpAddr,
+       OUT PULONG Port
        );
 
 NTSTATUS
 STDCALL
-RtlIntegerToChar (
-       IN      ULONG   Value,
-       IN      ULONG   Base,
-       IN      ULONG   Length,
-       IN OUT  PCHAR   String
+RtlIpv6StringToAddressW(
+       IN LPWSTR IpString,
+       IN ULONG Base,
+       OUT PVOID PtrToIpAddr,
+       OUT ULONG IpAddr
        );
 
 NTSTATUS
 STDCALL
-RtlIntegerToUnicodeString (
-       IN      ULONG           Value,
-       IN      ULONG           Base,
-       IN OUT  PUNICODE_STRING String
+RtlIpv6StringToAddressExW(
+       IN LPWSTR IpString,
+       IN ULONG Base,
+       OUT PULONG IpAddr,
+       OUT PULONG Port
        );
 
 BOOLEAN
 STDCALL
 RtlIsGenericTableEmpty (
-       IN      PRTL_GENERIC_TABLE      Table
+       PRTL_GENERIC_TABLE Table
+       );
+
+BOOLEAN
+STDCALL
+RtlIsGenericTableEmptyAvl (
+       PRTL_AVL_TABLE Table
        );
 
+
 BOOLEAN STDCALL
-RtlIsNameLegalDOS8Dot3(IN PUNICODE_STRING UnicodeName,
-                      IN PANSI_STRING AnsiName,
-                      OUT PBOOLEAN SpacesFound);
+RtlIsNameLegalDOS8Dot3 (IN PUNICODE_STRING UnicodeName,
+                       IN PANSI_STRING AnsiName,
+                       OUT PBOOLEAN SpacesFound);
+
+NTSTATUS STDCALL
+RtlIsRangeAvailable (IN PRTL_RANGE_LIST RangeList,
+                    IN ULONGLONG Start,
+                    IN ULONGLONG End,
+                    IN ULONG Flags,
+                    IN UCHAR AttributeAvailableMask,
+                    IN PVOID Context OPTIONAL,
+                    IN PRTL_CONFLICT_RANGE_CALLBACK Callback OPTIONAL,
+                    OUT PBOOLEAN Available);
+
+ULONG
+STDCALL
+RtlIsTextUnicode (
+       PVOID   Buffer,
+       ULONG   Length,
+       ULONG   *Flags
+       );
+
+BOOLEAN
+STDCALL
+RtlIsValidOemCharacter (
+       IN PWCHAR Char
+       );
 
 LARGE_INTEGER
 STDCALL
@@ -1449,33 +1952,89 @@ RtlLargeIntegerSubtract (
        LARGE_INTEGER   Subtrahend
        );
 
-ULONG
+ULONG STDCALL
+RtlLengthRequiredSid (UCHAR SubAuthorityCount);
+
+ULONG STDCALL
+RtlLengthSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor);
+
+ULONG STDCALL
+RtlLengthSid (PSID Sid);
+
+NTSTATUS
+STDCALL
+RtlLockBootStatusData(
+       HANDLE Filehandle
+       );
+
+BOOLEAN STDCALL
+RtlLockHeap (IN HANDLE Heap);
+
+NTSTATUS STDCALL
+RtlLookupAtomInAtomTable (IN PRTL_ATOM_TABLE AtomTable,
+                         IN PWSTR AtomName,
+                         OUT PRTL_ATOM Atom);
+
+PVOID
 STDCALL
-RtlLengthSecurityDescriptor (
-       PSECURITY_DESCRIPTOR    SecurityDescriptor
+RtlLookupElementGenericTable (
+       PRTL_GENERIC_TABLE Table,
+       PVOID Buffer
        );
 
-BOOL
+PVOID
+STDCALL
+RtlLookupElementGenericTableAvl (
+       PRTL_AVL_TABLE Table,
+       PVOID Buffer
+       );
+
+PVOID
+STDCALL
+RtlLookupElementGenericTableFull (
+       PRTL_GENERIC_TABLE Table,
+       PVOID Buffer,
+       OUT PVOID *NodeOrParent,
+       OUT TABLE_SEARCH_RESULT *SearchResult
+       );
+
+PVOID
 STDCALL
-RtlLockHeap (
-       HANDLE  hheap
+RtlLookupElementGenericTableFullAvl (
+       PRTL_AVL_TABLE Table,
+       PVOID Buffer,
+       OUT PVOID *NodeOrParent,
+       OUT TABLE_SEARCH_RESULT *SearchResult
        );
 
+NTSTATUS STDCALL
+RtlMakeSelfRelativeSD (PSECURITY_DESCRIPTOR AbsSD,
+                      PSECURITY_DESCRIPTOR_RELATIVE RelSD,
+                      PULONG BufferLength);
+
+VOID STDCALL
+RtlMapGenericMask (PACCESS_MASK AccessMask,
+                  PGENERIC_MAPPING GenericMapping);
+
 NTSTATUS
 STDCALL
-RtlLookupAtomInAtomTable (
-       IN      PRTL_ATOM_TABLE AtomTable,
-       IN      PWSTR           AtomName,
-       OUT     PRTL_ATOM       Atom
+RtlMapSecurityErrorToNtStatus(
+       IN ULONG SecurityError
        );
 
+NTSTATUS STDCALL
+RtlMergeRangeLists (OUT PRTL_RANGE_LIST MergedRangeList,
+                   IN PRTL_RANGE_LIST RangeList1,
+                   IN PRTL_RANGE_LIST RangeList2,
+                   IN ULONG Flags);
+
 NTSTATUS
 STDCALL
 RtlMultiByteToUnicodeN (
        PWCHAR UnicodeString,
        ULONG  UnicodeSize,
        PULONG ResultSize,
-       PCHAR  MbString,
+       const PCHAR  MbString,
        ULONG  MbSize
        );
 
@@ -1487,6 +2046,13 @@ RtlMultiByteToUnicodeSize (
        ULONG  MbSize
        );
 
+PUNICODE_PREFIX_TABLE_ENTRY
+STDCALL
+RtlNextUnicodePrefix (
+       PUNICODE_PREFIX_TABLE PrefixTable,
+       BOOLEAN Restart
+       );
+
 DWORD
 STDCALL
 RtlNtStatusToDosError (
@@ -1507,10 +2073,17 @@ RtlNtStatusToPsxErrno (
 
 ULONG
 STDCALL
-RtlNumberGenericTableElements (
-       IN      PRTL_GENERIC_TABLE      Table
+RtlNumberGenericTableElements(
+       PRTL_GENERIC_TABLE Table
+       );
+
+ULONG
+STDCALL
+RtlNumberGenericTableElementsAvl (
+       PRTL_AVL_TABLE Table
        );
 
+
 ULONG
 STDCALL
 RtlNumberOfClearBits (
@@ -1539,12 +2112,12 @@ RtlOemStringToUnicodeString (
 
 NTSTATUS
 STDCALL
-RtlOemToUnicodeN (
-       PWCHAR  UnicodeString,
-       ULONG   UnicodeSize,
-       PULONG  ResultSize,
-       PCHAR   OemString,
-       ULONG   OemSize
+RtlOemToUnicodeN(
+       PWSTR UnicodeString,
+       ULONG MaxBytesInUnicodeString,
+       PULONG BytesInUnicodeString,
+       IN PCHAR OemString,
+       ULONG BytesInOemString
        );
 
 NTSTATUS STDCALL
@@ -1553,6 +2126,13 @@ RtlPinAtomInAtomTable (
        IN      RTL_ATOM        Atom
        );
 
+VOID
+FASTCALL
+RtlPrefetchMemoryNonTemporal(
+       IN PVOID Source,
+       IN SIZE_T Length
+       );
+
 BOOLEAN
 STDCALL
 RtlPrefixString (
@@ -1580,33 +2160,72 @@ RtlQueryAtomInAtomTable (
        IN OUT  PULONG          NameLength OPTIONAL
        );
 
-NTSTATUS
+NTSTATUS STDCALL
+RtlQueryInformationAcl (PACL Acl,
+                       PVOID Information,
+                       ULONG InformationLength,
+                       ACL_INFORMATION_CLASS InformationClass);
+
+NTSTATUS STDCALL
+RtlQueryTimeZoneInformation (IN OUT PTIME_ZONE_INFORMATION TimeZoneInformation);
+
+VOID STDCALL
+RtlRaiseException (IN PEXCEPTION_RECORD ExceptionRecord);
+
+VOID STDCALL
+RtlRaiseStatus(NTSTATUS Status);
+
+ULONG STDCALL
+RtlRandom (PULONG Seed);
+
+ULONG
+STDCALL
+RtlRandomEx(
+       PULONG Seed
+       ); 
+
+PRTL_SPLAY_LINKS
 STDCALL
-RtlQueryTimeZoneInformation (
-       IN OUT  PTIME_ZONE_INFORMATION  TimeZoneInformation
+RtlRealPredecessor (
+       PRTL_SPLAY_LINKS Links
+       );
+
+PRTL_SPLAY_LINKS
+STDCALL
+RtlRealSuccessor (
+       PRTL_SPLAY_LINKS Links
+       );
+
+PVOID STDCALL
+RtlReAllocateHeap (
+       HANDLE Heap,
+       ULONG Flags,
+       PVOID Ptr,
+       ULONG Size
        );
 
 VOID
 STDCALL
-RtlRaiseException (
-       IN      PEXCEPTION_RECORD       ExceptionRecord
+RtlRemoveUnicodePrefix (
+       PUNICODE_PREFIX_TABLE PrefixTable,
+       PUNICODE_PREFIX_TABLE_ENTRY PrefixTableEntry
        );
 
-LPVOID
+NTSTATUS
 STDCALL
-RtlReAllocateHeap (
-       HANDLE  hheap,
-       DWORD   flags,
-       LPVOID  ptr,
-       DWORD   size
+RtlReserveChunk (
+       IN      USHORT  CompressionFormat,
+       IN OUT  PUCHAR  *CompressedBuffer,
+       IN      PUCHAR  EndOfCompressedBufferPlus1,
+       OUT     PUCHAR  *ChunkBuffer,
+       IN      ULONG   ChunkSize
        );
 
-NTSTATUS STDCALL
-RtlReserveChunk(IN USHORT CompressionFormat,
-               IN OUT PUCHAR *CompressedBuffer,
-               IN PUCHAR EndOfCompressedBufferPlus1,
-               OUT PUCHAR *ChunkBuffer,
-               IN ULONG ChunkSize);
+VOID STDCALL
+RtlResetRtlTranslations (IN PNLSTABLEINFO NlsTable);
+
+VOID STDCALL
+RtlRestoreLastWin32Error(IN ULONG Error);
 
 /*
  * VOID
@@ -1616,7 +2235,7 @@ RtlReserveChunk(IN USHORT CompressionFormat,
  *     );
  */
 #define RtlRetrieveUlong(DestAddress,SrcAddress) \
-       if ((ULONG)(SrcAddress) & LONG_MASK) \
+       if ((ULONG_PTR)(SrcAddress) & LONG_MASK) \
        { \
                ((PUCHAR)(DestAddress))[0]=((PUCHAR)(SrcAddress))[0]; \
                ((PUCHAR)(DestAddress))[1]=((PUCHAR)(SrcAddress))[1]; \
@@ -1636,7 +2255,7 @@ RtlReserveChunk(IN USHORT CompressionFormat,
  *     );
  */
 #define RtlRetrieveUshort(DestAddress,SrcAddress) \
-       if ((ULONG)(SrcAddress) & SHORT_MASK) \
+       if ((ULONG_PTR)(SrcAddress) & SHORT_MASK) \
        { \
                ((PUCHAR)(DestAddress))[0]=((PUCHAR)(SrcAddress))[0]; \
                ((PUCHAR)(DestAddress))[1]=((PUCHAR)(SrcAddress))[1]; \
@@ -1646,24 +2265,47 @@ RtlReserveChunk(IN USHORT CompressionFormat,
                *((PUSHORT)(DestAddress))=*((PUSHORT)(SrcAddress)); \
        }
 
-VOID
-STDCALL
-RtlSecondsSince1970ToTime (
-       ULONG SecondsSince1970,
-       PLARGE_INTEGER Time
-       );
+VOID STDCALL
+RtlSecondsSince1970ToTime (ULONG SecondsSince1970,
+                          PLARGE_INTEGER Time);
 
-VOID
+VOID STDCALL
+RtlSecondsSince1980ToTime (ULONG SecondsSince1980,
+                          PLARGE_INTEGER Time);
+
+NTSTATUS STDCALL
+RtlSelfRelativeToAbsoluteSD (PSECURITY_DESCRIPTOR_RELATIVE RelSD,
+                            PSECURITY_DESCRIPTOR AbsSD,
+                            PULONG AbsSDSize,
+                            PACL Dacl,
+                            PULONG DaclSize,
+                            PACL Sacl,
+                            PULONG SaclSize,
+                            PSID Owner,
+                            PULONG OwnerSize,
+                            PSID Group,
+                            PULONG GroupSize);
+
+NTSTATUS
 STDCALL
-RtlSecondsSince1980ToTime (
-       ULONG SecondsSince1980,
-       PLARGE_INTEGER Time
+RtlSelfRelativeToAbsoluteSD2(
+       PSECURITY_DESCRIPTOR_RELATIVE SelfRelativeSecurityDescriptor,
+       PULONG BufferSize
        );
 
+VOID STDCALL
+RtlSetAllBits (IN PRTL_BITMAP BitMapHeader);
+
+NTSTATUS STDCALL
+RtlSetAttributesSecurityDescriptor(IN PSECURITY_DESCRIPTOR SecurityDescriptor,
+                                  IN SECURITY_DESCRIPTOR_CONTROL Control,
+                                  OUT PULONG Revision);
+
 VOID
 STDCALL
-RtlSetAllBits (
-       IN      PRTL_BITMAP     BitMapHeader
+RtlSetBit (
+       PRTL_BITMAP BitMapHeader,
+       ULONG BitNumber
        );
 
 VOID
@@ -1674,27 +2316,63 @@ RtlSetBits (
        ULONG           NumberToSet
        );
 
-NTSTATUS
-STDCALL
-RtlSetDaclSecurityDescriptor (
-       PSECURITY_DESCRIPTOR    SecurityDescriptor,
-       BOOLEAN                 DaclPresent,
-       PACL                    Dacl,
-       BOOLEAN                 DaclDefaulted
-       );
+NTSTATUS STDCALL
+RtlSetControlSecurityDescriptor(IN PSECURITY_DESCRIPTOR SecurityDescriptor,
+                               IN SECURITY_DESCRIPTOR_CONTROL ControlBitsOfInterest,
+                               IN SECURITY_DESCRIPTOR_CONTROL ControlBitsToSet);
 
-NTSTATUS
-STDCALL
-RtlSetTimeZoneInformation (
-       IN OUT  PTIME_ZONE_INFORMATION  TimeZoneInformation
-       );
+NTSTATUS STDCALL
+RtlSetDaclSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor,
+                             BOOLEAN DaclPresent,
+                             PACL Dacl,
+                             BOOLEAN DaclDefaulted);
 
-DWORD
+NTSTATUS STDCALL
+RtlSetGroupSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor,
+                              PSID Group,
+                              BOOLEAN GroupDefaulted);
+
+NTSTATUS STDCALL
+RtlSetInformationAcl (PACL Acl,
+                     PVOID Information,
+                     ULONG InformationLength,
+                     ACL_INFORMATION_CLASS InformationClass);
+
+VOID STDCALL
+RtlSetLastWin32Error(IN ULONG Error);
+
+VOID STDCALL
+RtlSetLastWin32ErrorAndNtStatusFromNtStatus(IN NTSTATUS Status);
+
+NTSTATUS STDCALL
+RtlSetOwnerSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor,
+                              PSID Owner,
+                              BOOLEAN OwnerDefaulted);
+
+NTSTATUS STDCALL
+RtlSetSaclSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor,
+                             BOOLEAN SaclPresent,
+                             PACL Sacl,
+                             BOOLEAN SaclDefaulted);
+
+VOID STDCALL
+RtlSetSecurityDescriptorRMControl(PSECURITY_DESCRIPTOR SecurityDescriptor,
+                                 PUCHAR RMControl);
+
+NTSTATUS STDCALL
+RtlSetTimeZoneInformation (IN OUT PTIME_ZONE_INFORMATION TimeZoneInformation);
+
+ULONG STDCALL
+RtlSizeHeap(
+       IN PVOID HeapHandle, 
+       IN ULONG Flags, 
+       IN PVOID MemoryPointer
+       ); 
+
+PRTL_SPLAY_LINKS
 STDCALL
-RtlSizeHeap (
-       HANDLE  hheap,
-       DWORD   flags,
-       PVOID   pmem
+RtlSplay (
+       PRTL_SPLAY_LINKS Links
        );
 
 /*
@@ -1705,10 +2383,10 @@ RtlSizeHeap (
  *     );
  */
 #define RtlStoreUlong(Address,Value) \
-       if ((ULONG)(Address) & LONG_MASK) \
+       if ((ULONG_PTR)(Address) & LONG_MASK) \
        { \
                ((PUCHAR)(Address))[LONG_LEAST_SIGNIFICANT_BIT]=(UCHAR)(FIRSTBYTE(Value)); \
-               ((PUCHAR)(Address))[LONG_3RD_MOST_SIGNIFICANT_BIT]=(UCHAR)(FIRSTBYTE(Value)); \
+               ((PUCHAR)(Address))[LONG_3RD_MOST_SIGNIFICANT_BIT]=(UCHAR)(SECONDBYTE(Value)); \
                ((PUCHAR)(Address))[LONG_2ND_MOST_SIGNIFICANT_BIT]=(UCHAR)(THIRDBYTE(Value)); \
                ((PUCHAR)(Address))[LONG_MOST_SIGNIFICANT_BIT]=(UCHAR)(FOURTHBYTE(Value)); \
        } \
@@ -1725,7 +2403,7 @@ RtlSizeHeap (
  *     );
  */
 #define RtlStoreUshort(Address,Value) \
-       if ((ULONG)(Address) & SHORT_MASK) \
+       if ((ULONG_PTR)(Address) & SHORT_MASK) \
        { \
                ((PUCHAR)(Address))[SHORT_LEAST_SIGNIFICANT_BIT]=(UCHAR)(FIRSTBYTE(Value)); \
                ((PUCHAR)(Address))[SHORT_MOST_SIGNIFICANT_BIT]=(UCHAR)(SECONDBYTE(Value)); \
@@ -1735,13 +2413,45 @@ RtlSizeHeap (
                *((PUSHORT)(Address))=(USHORT)(Value); \
        }
 
+NTSTATUS STDCALL
+RtlStringFromGUID (IN REFGUID Guid,
+                  OUT PUNICODE_STRING GuidString);
+
+PULONG STDCALL
+RtlSubAuthoritySid (PSID Sid,
+                   ULONG SubAuthority);
+
+PULONG STDCALL
+RtlSubAuthoritySid (PSID Sid,
+                   ULONG SubAuthority);
+
+PUCHAR STDCALL
+RtlSubAuthorityCountSid (PSID Sid);
+
+PRTL_SPLAY_LINKS
+STDCALL
+RtlSubtreePredecessor (
+       PRTL_SPLAY_LINKS Links
+       );
+
+PRTL_SPLAY_LINKS
+STDCALL
+RtlSubtreeSuccessor (
+       PRTL_SPLAY_LINKS Links
+       );
+
 BOOLEAN
 STDCALL
-RtlTimeFieldsToTime (
-       PTIME_FIELDS    TimeFields,
-       PLARGE_INTEGER  Time
+RtlTestBit (
+       PRTL_BITMAP BitMapHeader,
+       ULONG BitNumber
        );
 
+
+BOOLEAN STDCALL
+RtlTimeFieldsToTime (PTIME_FIELDS TimeFields,
+                    PLARGE_INTEGER Time);
+
 BOOLEAN
 STDCALL
 RtlTimeToSecondsSince1970 (
@@ -1756,6 +2466,13 @@ RtlTimeToSecondsSince1980 (
        PULONG SecondsSince1980
        );
 
+VOID
+STDCALL
+RtlTimeToElapsedTimeFields( 
+       PLARGE_INTEGER Time, 
+       PTIME_FIELDS TimeFields 
+       );
+
 VOID
 STDCALL
 RtlTimeToTimeFields (
@@ -1763,6 +2480,13 @@ RtlTimeToTimeFields (
        PTIME_FIELDS    TimeFields
        );
 
+
+ULONG FASTCALL
+RtlUlongByteSwap (IN ULONG Source);
+
+ULONGLONG FASTCALL
+RtlUlonglongByteSwap (IN ULONGLONG Source);
+
 ULONG
 STDCALL
 RtlUnicodeStringToAnsiSize (
@@ -1810,7 +2534,7 @@ RtlUnicodeStringToOemString (
 NTSTATUS
 STDCALL
 RtlUnicodeToCustomCPN (
-       PRTL_NLS_DATA   NlsData,
+       IN      PCPTABLEINFO    CustomCP,
        PCHAR           MbString,
        ULONG           MbSize,
        PULONG          ResultSize,
@@ -1846,10 +2570,16 @@ RtlUnicodeToOemN (
        ULONG   UnicodeSize
        );
 
-BOOL
+ULONG STDCALL
+RtlUniform (PULONG Seed);
+
+BOOLEAN STDCALL
+RtlUnlockHeap (IN HANDLE Heap);
+
+NTSTATUS
 STDCALL
-RtlUnlockHeap (
-       HANDLE  hheap
+RtlUnlockBootStatusData(
+       HANDLE Filehandle
        );
 
 VOID
@@ -1871,7 +2601,7 @@ NTSTATUS
 STDCALL
 RtlUpcaseUnicodeString (
        IN OUT  PUNICODE_STRING DestinationString,
-       IN      PUNICODE_STRING SourceString,
+       IN      PCUNICODE_STRING        SourceString,
        IN      BOOLEAN         AllocateDestinationString
        );
 
@@ -1902,7 +2632,7 @@ RtlUpcaseUnicodeStringToOemString (
 NTSTATUS
 STDCALL
 RtlUpcaseUnicodeToCustomCPN (
-       PRTL_NLS_DATA   NlsData,
+       IN      PCPTABLEINFO    CustomCP,
        PCHAR           MbString,
        ULONG           MbSize,
        PULONG          ResultSize,
@@ -1930,35 +2660,70 @@ RtlUpcaseUnicodeToOemN (
        ULONG   UnicodeSize
        );
 
-CHAR
+CHAR STDCALL
+RtlUpperChar (CHAR Source);
+
+VOID STDCALL
+RtlUpperString (PSTRING DestinationString,
+               PSTRING SourceString);
+
+USHORT FASTCALL
+RtlUshortByteSwap (IN USHORT Source);
+
+BOOLEAN STDCALL
+RtlValidAcl (PACL Acl);
+
+BOOLEAN STDCALL
+RtlValidateHeap (
+       HANDLE Heap,
+       ULONG   Flags,
+       PVOID   pmem
+       );
+
+BOOLEAN
 STDCALL
-RtlUpperChar (
-       CHAR    Source
+RtlValidRelativeSecurityDescriptor (
+       IN PSECURITY_DESCRIPTOR_RELATIVE SecurityDescriptorInput,
+       IN ULONG SecurityDescriptorLength,
+       IN SECURITY_INFORMATION RequiredInformation
        );
 
-VOID
+BOOLEAN STDCALL
+RtlValidSecurityDescriptor (IN PSECURITY_DESCRIPTOR SecurityDescriptor);
+
+BOOLEAN STDCALL
+RtlValidSid (IN PSID Sid);
+
+/*
+NTSTATUS
 STDCALL
-RtlUpperString (
-       PSTRING DestinationString,
-       PSTRING SourceString
+RtlVerifyVersionInfo(
+       IN PRTL_OSVERSIONINFOEXW VersionInfo,
+       IN ULONG TypeMask,
+       IN ULONGLONG  ConditionMask
        );
+*/
 
-BOOL
+NTSTATUS
 STDCALL
-RtlValidateHeap (
-       HANDLE  hheap,
-       DWORD   flags,
-       PVOID   pmem
+RtlVolumeDeviceToDosName(
+       IN  PVOID VolumeDeviceObject,
+       OUT PUNICODE_STRING DosName
        );
 
-BOOLEAN
+ULONG
 STDCALL
-RtlValidSecurityDescriptor (
-       PSECURITY_DESCRIPTOR    SecurityDescriptor
+RtlWalkFrameChain (
+       OUT PVOID *Callers,
+       IN ULONG Count,
+       IN ULONG Flags
        );
 
 BOOLEAN STDCALL
-RtlValidSid(IN PSID Sid);
+RtlZeroHeap(
+    IN PVOID HeapHandle,
+    IN ULONG Flags
+    );
 
 ULONG
 STDCALL
@@ -1984,7 +2749,108 @@ RtlxUnicodeStringToOemSize (
        IN      PUNICODE_STRING UnicodeString
        );
 
+NTSTATUS
+FASTCALL
+RtlpOemStringToCountedUnicodeString(
+   IN OUT PUNICODE_STRING UniDest,
+   IN POEM_STRING OemSource,
+   IN BOOLEAN AllocateDestinationString,
+   IN POOL_TYPE PoolType);
+   
+NTSTATUS 
+FASTCALL
+RtlpUpcaseUnicodeString(
+   IN OUT PUNICODE_STRING UniDest,
+   IN PCUNICODE_STRING UniSource,
+   IN BOOLEAN  AllocateDestinationString,
+   IN POOL_TYPE PoolType);
+   
+NTSTATUS 
+FASTCALL
+RtlpUpcaseUnicodeStringToAnsiString(
+   IN OUT PANSI_STRING AnsiDest,
+   IN PUNICODE_STRING UniSource,
+   IN BOOLEAN  AllocateDestinationString,
+   IN POOL_TYPE PoolType);
+   
+NTSTATUS 
+FASTCALL
+RtlpUpcaseUnicodeStringToCountedOemString(
+   IN OUT POEM_STRING OemDest,
+   IN PUNICODE_STRING UniSource,
+   IN BOOLEAN AllocateDestinationString,
+   IN POOL_TYPE PoolType);
+   
+NTSTATUS 
+FASTCALL
+RtlpUpcaseUnicodeStringToOemString (
+   IN OUT POEM_STRING OemDest,
+   IN PUNICODE_STRING UniSource,
+   IN BOOLEAN  AllocateDestinationString,
+   IN POOL_TYPE PoolType);
+   
+NTSTATUS 
+FASTCALL
+RtlpDowncaseUnicodeString(
+   IN OUT PUNICODE_STRING UniDest,
+   IN PUNICODE_STRING UniSource,
+   IN BOOLEAN AllocateDestinationString,
+   IN POOL_TYPE PoolType);
+   
+NTSTATUS
+FASTCALL
+RtlpAnsiStringToUnicodeString(
+   IN OUT PUNICODE_STRING DestinationString,
+   IN PANSI_STRING SourceString,
+   IN BOOLEAN AllocateDestinationString,
+   IN POOL_TYPE PoolType);   
+   
+NTSTATUS
+FASTCALL
+RtlpUnicodeStringToAnsiString(
+   IN OUT PANSI_STRING AnsiDest,
+   IN PUNICODE_STRING UniSource,
+   IN BOOLEAN AllocateDestinationString,
+   IN POOL_TYPE PoolType);
+   
+NTSTATUS
+FASTCALL
+RtlpOemStringToUnicodeString(
+   IN OUT PUNICODE_STRING UniDest,
+   IN POEM_STRING OemSource,
+   IN BOOLEAN AllocateDestinationString,
+   IN POOL_TYPE PoolType);
+
+NTSTATUS
+FASTCALL
+RtlpUnicodeStringToOemString(
+   IN OUT POEM_STRING OemDest,
+   IN PUNICODE_STRING UniSource,
+   IN BOOLEAN  AllocateDestinationString,
+   IN POOL_TYPE PoolType);
+   
+BOOLEAN
+FASTCALL
+RtlpCreateUnicodeString(
+   IN OUT PUNICODE_STRING UniDest,
+   IN PCWSTR  Source,
+   IN POOL_TYPE PoolType);   
+
+NTSTATUS
+FASTCALL
+RtlpUnicodeStringToCountedOemString(
+   IN OUT POEM_STRING OemDest,
+   IN PUNICODE_STRING UniSource,
+   IN BOOLEAN AllocateDestinationString,
+   IN POOL_TYPE PoolType);
 
+NTSTATUS STDCALL
+RtlpDuplicateUnicodeString(
+   INT AddNull,
+   IN PUNICODE_STRING SourceString,
+   PUNICODE_STRING DestinationString,
+   POOL_TYPE PoolType);
+   
 /* Register io functions */
 
 UCHAR
@@ -2075,79 +2941,12 @@ WRITE_REGISTER_BUFFER_ULONG (
        );
 
 
-NTSTATUS STDCALL RtlCreateAcl(PACL Acl, ULONG AclSize, ULONG AclRevision);
-NTSTATUS STDCALL RtlQueryInformationAcl (PACL Acl, PVOID Information, ULONG InformationLength, ACL_INFORMATION_CLASS InformationClass);
-NTSTATUS STDCALL RtlSetInformationAcl (PACL Acl, PVOID Information, ULONG InformationLength, ACL_INFORMATION_CLASS InformationClass);
-BOOLEAN STDCALL RtlValidAcl (PACL Acl);
-
-NTSTATUS STDCALL RtlAddAccessAllowedAce(PACL Acl, ULONG Revision, ACCESS_MASK AccessMask, PSID Sid);
-NTSTATUS STDCALL RtlAddAccessDeniedAce(PACL Acl, ULONG Revision, ACCESS_MASK AccessMask, PSID Sid);
-NTSTATUS STDCALL RtlAddAce(PACL Acl, ULONG Revision, ULONG StartingIndex, PACE AceList, ULONG AceListLength);
-NTSTATUS STDCALL RtlAddAuditAccessAce (PACL Acl, ULONG Revision, ACCESS_MASK AccessMask, PSID Sid, BOOLEAN Success, BOOLEAN Failure);
-NTSTATUS STDCALL RtlDeleteAce(PACL Acl, ULONG AceIndex);
-BOOLEAN STDCALL RtlFirstFreeAce(PACL Acl, PACE* Ace);
-NTSTATUS STDCALL RtlGetAce(PACL Acl, ULONG AceIndex, PACE *Ace);
-
-NTSTATUS STDCALL RtlAbsoluteToSelfRelativeSD (PSECURITY_DESCRIPTOR AbsSD, PSECURITY_DESCRIPTOR RelSD, PULONG BufferLength);
-NTSTATUS STDCALL RtlMakeSelfRelativeSD (PSECURITY_DESCRIPTOR AbsSD, PSECURITY_DESCRIPTOR RelSD, PULONG BufferLength);
-NTSTATUS STDCALL RtlCreateSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor, ULONG Revision);
-BOOLEAN STDCALL RtlValidSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor);
-ULONG STDCALL RtlLengthSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor);
-NTSTATUS STDCALL RtlSetDaclSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor, BOOLEAN DaclPresent, PACL Dacl, BOOLEAN DaclDefaulted);
-NTSTATUS STDCALL RtlGetDaclSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor, PBOOLEAN DaclPresent, PACL* Dacl, PBOOLEAN DaclDefauted);
-NTSTATUS STDCALL RtlSetOwnerSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor, PSID Owner, BOOLEAN OwnerDefaulted);
-NTSTATUS STDCALL RtlGetOwnerSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor, PSID* Owner, PBOOLEAN OwnerDefaulted);
-NTSTATUS STDCALL RtlSetGroupSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor, PSID Group, BOOLEAN GroupDefaulted);
-NTSTATUS STDCALL RtlGetGroupSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor, PSID* Group, PBOOLEAN GroupDefaulted);
-NTSTATUS STDCALL RtlGetControlSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor, PSECURITY_DESCRIPTOR_CONTROL Control, PULONG Revision);
-NTSTATUS STDCALL RtlSetSaclSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor, BOOLEAN SaclPresent, PACL Sacl, BOOLEAN SaclDefaulted);
-NTSTATUS STDCALL RtlGetSaclSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor, PBOOLEAN SaclPresent, PACL* Sacl, PBOOLEAN SaclDefauted);
-NTSTATUS STDCALL RtlSelfRelativeToAbsoluteSD (PSECURITY_DESCRIPTOR RelSD,
-                                             PSECURITY_DESCRIPTOR AbsSD,
-                                             PDWORD AbsSDSize,
-                                             PACL Dacl,
-                                             PDWORD DaclSize,
-                                             PACL Sacl,
-                                             PDWORD SaclSize,
-                                             PSID Owner,
-                                             PDWORD OwnerSize,
-                                             PSID Group,
-                                             PDWORD GroupSize);
-
-NTSTATUS STDCALL RtlAllocateAndInitializeSid (PSID_IDENTIFIER_AUTHORITY IdentifierAuthority,
-                                             UCHAR SubAuthorityCount,
-                                             ULONG SubAuthority0,
-                                             ULONG SubAuthority1,
-                                             ULONG SubAuthority2,
-                                             ULONG SubAuthority3,
-                                             ULONG SubAuthority4,
-                                             ULONG SubAuthority5,
-                                             ULONG SubAuthority6,
-                                             ULONG SubAuthority7,
-                                             PSID *Sid);
-ULONG STDCALL RtlLengthRequiredSid (UCHAR SubAuthorityCount);
-PSID_IDENTIFIER_AUTHORITY STDCALL RtlIdentifierAuthoritySid (PSID Sid);
-NTSTATUS STDCALL RtlInitializeSid (PSID Sid, PSID_IDENTIFIER_AUTHORITY IdentifierAuthority, UCHAR SubAuthorityCount);
-PULONG STDCALL RtlSubAuthoritySid (PSID Sid, ULONG SubAuthority);
-BOOLEAN STDCALL RtlEqualPrefixSid (PSID Sid1, PSID Sid2);
-BOOLEAN STDCALL RtlEqualSid(PSID Sid1, PSID Sid2);
-PSID STDCALL RtlFreeSid (PSID Sid);
-ULONG STDCALL RtlLengthSid (PSID Sid);
-PULONG STDCALL RtlSubAuthoritySid (PSID Sid, ULONG SubAuthority);
-PUCHAR STDCALL RtlSubAuthorityCountSid (PSID Sid);
-BOOLEAN STDCALL RtlValidSid (PSID Sid);
-NTSTATUS STDCALL RtlConvertSidToUnicodeString (PUNICODE_STRING String, PSID Sid, BOOLEAN AllocateBuffer);
-
-BOOLEAN STDCALL RtlAreAllAccessesGranted (ACCESS_MASK GrantedAccess, ACCESS_MASK DesiredAccess);
-BOOLEAN STDCALL RtlAreAnyAccessesGranted (ACCESS_MASK GrantedAccess, ACCESS_MASK DesiredAccess);
-VOID STDCALL RtlMapGenericMask (PACCESS_MASK AccessMask, PGENERIC_MAPPING GenericMapping);
-
-
 /*  functions exported from NTOSKRNL.EXE which are considered RTL  */
 
 #if defined(__NTOSKRNL__) || defined(__NTDRIVER__) || defined(__NTHAL__) || defined(__NTDLL__) || defined(__NTAPP__)
 
 char *_itoa (int value, char *string, int radix);
+wchar_t *_itow (int value, wchar_t *string, int radix);
 int _snprintf(char * buf, size_t cnt, const char *fmt, ...);
 int _snwprintf(wchar_t *buf, size_t cnt, const wchar_t *fmt, ...);
 int _stricmp(const char *s1, const char *s2);
@@ -2222,3 +3021,5 @@ int wctomb (char *mbchar, wchar_t wchar);
 #endif /* __NTOSKRNL__ || __NTDRIVER__ || __NTHAL__ || __NTDLL__ || __NTAPP__ */
 
 #endif /* __DDK_RTL_H */
+
+