- Implement RtlGetLastNtStatus, RtlGetLastWin32Error, RtlRestoreLastWin32Error, RtlSe...
[reactos.git] / reactos / include / ntos / rtl.h
index 7f8450c..6623ea5 100755 (executable)
@@ -1,4 +1,4 @@
-/* $Id: rtl.h,v 1.27 2004/02/03 14:19:29 ekohl Exp $
+/* $Id$
  * 
  */
 #ifndef __DDK_RTL_H
  * 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
  *     );
@@ -236,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);
 }
 
 
@@ -269,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;
 }
 
 
@@ -323,42 +268,18 @@ RemoveHeadList (
  * RETURNS:
  *     The removed entry
  */
-/*
-#define RemoveTailList(ListHead) \
-       (ListHead)->Blink; \
-       {RemoveEntryList((ListHead)->Blink)}
-*/
-/*
-PLIST_ENTRY
-RemoveTailList (
-       PLIST_ENTRY     ListHead
-       );
-*/
-
-static
-inline
-PLIST_ENTRY
-RemoveTailList (
-       PLIST_ENTRY ListHead
-       )
+static __inline PLIST_ENTRY
+RemoveTailList(
+  IN PLIST_ENTRY  ListHead)
 {
-       PLIST_ENTRY Old;
-       PLIST_ENTRY OldFlink;
-       PLIST_ENTRY OldBlink;
-
-       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);
+  PLIST_ENTRY Blink;
+  PLIST_ENTRY Entry;
+
+  Entry = ListHead->Blink;
+  Blink = Entry->Blink;
+  ListHead->Blink = Blink;
+  Blink->Flink = ListHead;
+  return Entry;
 }
 
 
@@ -454,21 +375,19 @@ RemoveTailList (
   
 #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
@@ -478,12 +397,6 @@ RtlEqualUnicodeString (
        BOOLEAN         CaseInSensitive
        );
 
-VOID
-STDCALL
-RtlGetCallersAddress (
-       PVOID   * CallersAddress
-       );
-
 NTSTATUS
 STDCALL
 RtlQueryRegistryValues (
@@ -545,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
@@ -609,7 +521,7 @@ PushEntryList (
 
 NTSTATUS STDCALL
 RtlAbsoluteToSelfRelativeSD (PSECURITY_DESCRIPTOR AbsSD,
-                            PSECURITY_DESCRIPTOR RelSD,
+                            PSECURITY_DESCRIPTOR_RELATIVE RelSD,
                             PULONG BufferLength);
 
 NTSTATUS STDCALL
@@ -618,6 +530,16 @@ RtlAddAccessAllowedAce (PACL Acl,
                        ACCESS_MASK AccessMask,
                        PSID Sid);
 
+NTSTATUS 
+STDCALL 
+RtlAddAccessAllowedAceEx(
+       IN OUT PACL pAcl,
+       IN DWORD dwAceRevision,
+       IN DWORD AceFlags,
+       IN DWORD AccessMask,
+       IN PSID pSid);
+
+
 NTSTATUS STDCALL
 RtlAddAccessDeniedAce (PACL Acl,
                       ULONG Revision,
@@ -649,7 +571,7 @@ RtlAddRange (IN OUT PRTL_RANGE_LIST RangeList,
             IN ULONGLONG Start,
             IN ULONGLONG End,
             IN UCHAR Attributes,
-            IN ULONG Flags,
+            IN ULONG Flags,  /* RTL_RANGE_LIST_ADD_... flags */
             IN PVOID UserData OPTIONAL,
             IN PVOID Owner OPTIONAL);
 
@@ -744,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 (
@@ -765,6 +704,13 @@ RtlClearAllBits (
        IN      PRTL_BITMAP     BitMapHeader
        );
 
+VOID
+STDCALL
+RtlClearBit (
+       PRTL_BITMAP BitMapHeader,
+       ULONG BitNumber
+       );
+
 VOID
 STDCALL
 RtlClearBits (
@@ -773,11 +719,10 @@ RtlClearBits (
        IN      ULONG           NumberToClear
        );
 
-DWORD
-STDCALL
+ULONG STDCALL
 RtlCompactHeap (
-       HANDLE  hheap,
-       DWORD   flags
+       HANDLE Heap,
+       ULONG   Flags
        );
 
 LONG
@@ -907,9 +852,19 @@ NTSTATUS STDCALL
 RtlCreateSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor,
                             ULONG Revision);
 
+NTSTATUS STDCALL
+RtlCreateSecurityDescriptorRelative (PSECURITY_DESCRIPTOR_RELATIVE SecurityDescriptor,
+                                    ULONG Revision);
+
+NTSTATUS
+STDCALL
+RtlCreateSystemVolumeInformationFolder(
+       IN  PUNICODE_STRING VolumeRootPath
+       );
+
 BOOLEAN STDCALL
 RtlCreateUnicodeString (OUT PUNICODE_STRING Destination,
-                       IN PWSTR Source);
+                       IN PCWSTR Source);
 
 BOOLEAN STDCALL
 RtlCreateUnicodeStringFromAsciiz (OUT PUNICODE_STRING Destination,
@@ -926,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,
@@ -953,6 +914,12 @@ 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);
@@ -961,6 +928,28 @@ 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
 RtlDeleteOwnersRanges (IN OUT PRTL_RANGE_LIST RangeList,
                       IN PVOID Owner);
@@ -981,9 +970,17 @@ RtlDescribeChunk(IN USHORT CompressionFormat,
 NTSTATUS STDCALL
 RtlDestroyAtomTable (IN PRTL_ATOM_TABLE AtomTable);
 
-BOOL STDCALL
+HANDLE STDCALL
 RtlDestroyHeap (HANDLE hheap);
 
+NTSTATUS
+STDCALL
+RtlDispatchException(
+       PEXCEPTION_RECORD pExcptRec, 
+       CONTEXT * pContext 
+       );
+
+
 NTSTATUS
 STDCALL
 RtlDowncaseUnicodeString (
@@ -1021,6 +1018,46 @@ 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);
@@ -1084,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 (
@@ -1180,7 +1251,7 @@ RtlFreeOemString (IN POEM_STRING OemString);
 VOID STDCALL
 RtlFreeRangeList (IN PRTL_RANGE_LIST RangeList);
 
-PSID STDCALL
+PVOID STDCALL
 RtlFreeSid (PSID Sid);
 
 VOID STDCALL
@@ -1197,6 +1268,13 @@ RtlGetAce (PACL Acl,
           ULONG AceIndex,
           PACE *Ace);
 
+VOID
+STDCALL
+RtlGetCallersAddress(
+       OUT PVOID *CallersAddress,
+       OUT PVOID *CallersCaller
+       );
+
 NTSTATUS STDCALL
 RtlGetCompressionWorkSpaceSize (IN USHORT CompressionFormatAndEngine,
                                OUT PULONG CompressBufferAndWorkSpaceSize,
@@ -1217,6 +1295,20 @@ VOID STDCALL
 RtlGetDefaultCodePage (OUT PUSHORT AnsiCodePage,
                       OUT PUSHORT OemCodePage);
 
+PVOID
+STDCALL
+RtlGetElementGenericTable(
+       PRTL_GENERIC_TABLE Table,
+       ULONG I
+       );
+
+PVOID
+STDCALL
+RtlGetElementGenericTableAvl (
+       PRTL_AVL_TABLE Table,
+       ULONG I
+       );
+
 NTSTATUS STDCALL
 RtlGetFirstRange (IN PRTL_RANGE_LIST RangeList,
                  OUT PRTL_RANGE_LIST_ITERATOR Iterator,
@@ -1227,11 +1319,23 @@ 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,
@@ -1243,10 +1347,34 @@ RtlGetSaclSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor,
                              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
+RtlHashUnicodeString(
+       IN const UNICODE_STRING *String,
+       IN BOOLEAN CaseInSensitive,
+       IN ULONG HashAlgorithm,
+       OUT PULONG HashValue
+       );
+
 PSID_IDENTIFIER_AUTHORITY STDCALL
 RtlIdentifierAuthoritySid (PSID Sid);
 
@@ -1296,11 +1424,24 @@ RtlInitCodePageTable (
        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 (
@@ -1336,20 +1477,30 @@ NTSTATUS
 STDCALL
 RtlInitializeContext (
        IN      HANDLE                  ProcessHandle,
-       IN      PCONTEXT                Context,
-       IN      PVOID                   Parameter,
-       IN      PTHREAD_START_ROUTINE   StartAddress,
-       IN OUT  PUSER_STACK             UserStack
+       OUT     PCONTEXT                ThreadContext,
+       IN      PVOID                   ThreadStartParam  OPTIONAL,
+       IN      PTHREAD_START_ROUTINE   ThreadStartAddress,
+       IN      PINITIAL_TEB            InitialTeb
        );
 
 VOID
 STDCALL
 RtlInitializeGenericTable (
-       IN OUT  PRTL_GENERIC_TABLE      Table,
-       IN      PVOID                   CompareRoutine,
-       IN      PVOID                   AllocateRoutine,
-       IN      PVOID                   FreeRoutine,
-       IN      ULONG                   UserParameter
+       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
@@ -1358,10 +1509,57 @@ RtlInitializeRangeList (IN OUT PRTL_RANGE_LIST RangeList);
 PVOID
 STDCALL
 RtlInsertElementGenericTable (
-       IN OUT  PRTL_GENERIC_TABLE      Table,
-       IN      PVOID                   Element,
-       IN      ULONG                   ElementSize,
-       IN      ULONG                   Unknown4
+       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
@@ -1373,6 +1571,15 @@ RtlIntegerToChar (
        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 (
@@ -1385,8 +1592,154 @@ NTSTATUS STDCALL
 RtlInvertRangeList (OUT PRTL_RANGE_LIST InvertedRangeList,
                    IN PRTL_RANGE_LIST RangeList);
 
-BOOLEAN STDCALL
-RtlIsGenericTableEmpty (IN PRTL_GENERIC_TABLE Table);
+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
+       );
+
+NTSTATUS
+STDCALL
+RtlIpv4StringToAddressExA(
+       IN LPSTR IpString,
+       IN ULONG Base,
+       OUT PULONG IpAddr,
+       OUT PULONG Port
+       );
+
+NTSTATUS
+STDCALL
+RtlIpv4StringToAddressW(
+       IN LPWSTR IpString, 
+       IN ULONG Base, 
+       OUT PVOID PtrToIpAddr,
+       OUT ULONG IpAddr
+       );
+
+NTSTATUS
+STDCALL
+RtlIpv4StringToAddressExW(
+       IN LPWSTR IpString,
+       IN ULONG Base,
+       OUT PULONG IpAddr,
+       OUT PULONG Port
+       );
+
+NTSTATUS
+STDCALL
+RtlIpv6AddressToStringA(
+       PULONG IP,
+       LPSTR Buffer
+       );
+
+NTSTATUS
+STDCALL
+RtlIpv6AddressToStringExA(
+       PULONG IP,
+       PULONG Port,
+       LPSTR Buffer,
+       PULONG MaxSize
+       );
+
+NTSTATUS
+STDCALL
+RtlIpv6AddressToStringW(
+       PULONG IP,
+       LPWSTR Buffer
+       );
+
+NTSTATUS
+STDCALL
+RtlIpv6AddressToStringExW(
+       PULONG IP,
+       PULONG Port,
+       LPWSTR Buffer,
+       PULONG MaxSize
+       );
+
+NTSTATUS
+STDCALL
+RtlIpv6StringToAddressA(
+       IN LPSTR IpString,
+       IN ULONG Base,
+       OUT PVOID PtrToIpAddr,
+       OUT ULONG IpAddr
+       );
+
+NTSTATUS
+STDCALL
+RtlIpv6StringToAddressExA(
+       IN LPSTR IpString,
+       IN ULONG Base,
+       OUT PULONG IpAddr,
+       OUT PULONG Port
+       );
+
+NTSTATUS
+STDCALL
+RtlIpv6StringToAddressW(
+       IN LPWSTR IpString,
+       IN ULONG Base,
+       OUT PVOID PtrToIpAddr,
+       OUT ULONG IpAddr
+       );
+
+NTSTATUS
+STDCALL
+RtlIpv6StringToAddressExW(
+       IN LPWSTR IpString,
+       IN ULONG Base,
+       OUT PULONG IpAddr,
+       OUT PULONG Port
+       );
+
+BOOLEAN
+STDCALL
+RtlIsGenericTableEmpty (
+       PRTL_GENERIC_TABLE Table
+       );
+
+BOOLEAN
+STDCALL
+RtlIsGenericTableEmptyAvl (
+       PRTL_AVL_TABLE Table
+       );
+
 
 BOOLEAN STDCALL
 RtlIsNameLegalDOS8Dot3 (IN PUNICODE_STRING UnicodeName,
@@ -1411,6 +1764,12 @@ RtlIsTextUnicode (
        ULONG   *Flags
        );
 
+BOOLEAN
+STDCALL
+RtlIsValidOemCharacter (
+       IN PWCHAR Char
+       );
+
 LARGE_INTEGER
 STDCALL
 RtlLargeIntegerAdd (
@@ -1602,26 +1961,67 @@ RtlLengthSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor);
 ULONG STDCALL
 RtlLengthSid (PSID Sid);
 
-BOOL
+NTSTATUS
 STDCALL
-RtlLockHeap (
-       HANDLE  hheap
+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
+RtlLookupElementGenericTable (
+       PRTL_GENERIC_TABLE Table,
+       PVOID Buffer
+       );
+
+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
+RtlLookupElementGenericTableFullAvl (
+       PRTL_AVL_TABLE Table,
+       PVOID Buffer,
+       OUT PVOID *NodeOrParent,
+       OUT TABLE_SEARCH_RESULT *SearchResult
+       );
+
 NTSTATUS STDCALL
 RtlMakeSelfRelativeSD (PSECURITY_DESCRIPTOR AbsSD,
-                      PSECURITY_DESCRIPTOR RelSD,
+                      PSECURITY_DESCRIPTOR_RELATIVE RelSD,
                       PULONG BufferLength);
 
 VOID STDCALL
 RtlMapGenericMask (PACCESS_MASK AccessMask,
                   PGENERIC_MAPPING GenericMapping);
 
+NTSTATUS
+STDCALL
+RtlMapSecurityErrorToNtStatus(
+       IN ULONG SecurityError
+       );
+
 NTSTATUS STDCALL
 RtlMergeRangeLists (OUT PRTL_RANGE_LIST MergedRangeList,
                    IN PRTL_RANGE_LIST RangeList1,
@@ -1646,6 +2046,13 @@ RtlMultiByteToUnicodeSize (
        ULONG  MbSize
        );
 
+PUNICODE_PREFIX_TABLE_ENTRY
+STDCALL
+RtlNextUnicodePrefix (
+       PUNICODE_PREFIX_TABLE PrefixTable,
+       BOOLEAN Restart
+       );
+
 DWORD
 STDCALL
 RtlNtStatusToDosError (
@@ -1666,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 (
@@ -1698,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
@@ -1712,6 +2126,13 @@ RtlPinAtomInAtomTable (
        IN      RTL_ATOM        Atom
        );
 
+VOID
+FASTCALL
+RtlPrefetchMemoryNonTemporal(
+       IN PVOID Source,
+       IN SIZE_T Length
+       );
+
 BOOLEAN
 STDCALL
 RtlPrefixString (
@@ -1751,16 +2172,43 @@ RtlQueryTimeZoneInformation (IN OUT PTIME_ZONE_INFORMATION TimeZoneInformation);
 VOID STDCALL
 RtlRaiseException (IN PEXCEPTION_RECORD ExceptionRecord);
 
+VOID STDCALL
+RtlRaiseStatus(NTSTATUS Status);
+
 ULONG STDCALL
 RtlRandom (PULONG Seed);
 
-LPVOID
+ULONG
+STDCALL
+RtlRandomEx(
+       PULONG Seed
+       ); 
+
+PRTL_SPLAY_LINKS
 STDCALL
+RtlRealPredecessor (
+       PRTL_SPLAY_LINKS Links
+       );
+
+PRTL_SPLAY_LINKS
+STDCALL
+RtlRealSuccessor (
+       PRTL_SPLAY_LINKS Links
+       );
+
+PVOID STDCALL
 RtlReAllocateHeap (
-       HANDLE  hheap,
-       DWORD   flags,
-       LPVOID  ptr,
-       DWORD   size
+       HANDLE Heap,
+       ULONG Flags,
+       PVOID Ptr,
+       ULONG Size
+       );
+
+VOID
+STDCALL
+RtlRemoveUnicodePrefix (
+       PUNICODE_PREFIX_TABLE PrefixTable,
+       PUNICODE_PREFIX_TABLE_ENTRY PrefixTableEntry
        );
 
 NTSTATUS
@@ -1776,6 +2224,9 @@ RtlReserveChunk (
 VOID STDCALL
 RtlResetRtlTranslations (IN PNLSTABLEINFO NlsTable);
 
+VOID STDCALL
+RtlRestoreLastWin32Error(IN ULONG Error);
+
 /*
  * VOID
  * RtlRetrieveUlong (
@@ -1784,7 +2235,7 @@ RtlResetRtlTranslations (IN PNLSTABLEINFO NlsTable);
  *     );
  */
 #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]; \
@@ -1804,7 +2255,7 @@ RtlResetRtlTranslations (IN PNLSTABLEINFO NlsTable);
  *     );
  */
 #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]; \
@@ -1823,7 +2274,7 @@ RtlSecondsSince1980ToTime (ULONG SecondsSince1980,
                           PLARGE_INTEGER Time);
 
 NTSTATUS STDCALL
-RtlSelfRelativeToAbsoluteSD (PSECURITY_DESCRIPTOR RelSD,
+RtlSelfRelativeToAbsoluteSD (PSECURITY_DESCRIPTOR_RELATIVE RelSD,
                             PSECURITY_DESCRIPTOR AbsSD,
                             PULONG AbsSDSize,
                             PACL Dacl,
@@ -1835,9 +2286,28 @@ RtlSelfRelativeToAbsoluteSD (PSECURITY_DESCRIPTOR RelSD,
                             PSID Group,
                             PULONG GroupSize);
 
+NTSTATUS
+STDCALL
+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
+RtlSetBit (
+       PRTL_BITMAP BitMapHeader,
+       ULONG BitNumber
+       );
+
 VOID
 STDCALL
 RtlSetBits (
@@ -1846,6 +2316,11 @@ RtlSetBits (
        ULONG           NumberToSet
        );
 
+NTSTATUS STDCALL
+RtlSetControlSecurityDescriptor(IN PSECURITY_DESCRIPTOR SecurityDescriptor,
+                               IN SECURITY_DESCRIPTOR_CONTROL ControlBitsOfInterest,
+                               IN SECURITY_DESCRIPTOR_CONTROL ControlBitsToSet);
+
 NTSTATUS STDCALL
 RtlSetDaclSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor,
                              BOOLEAN DaclPresent,
@@ -1857,6 +2332,18 @@ 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,
@@ -1868,21 +2355,24 @@ RtlSetSaclSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor,
                              PACL Sacl,
                              BOOLEAN SaclDefaulted);
 
-NTSTATUS STDCALL
-RtlSetInformationAcl (PACL Acl,
-                     PVOID Information,
-                     ULONG InformationLength,
-                     ACL_INFORMATION_CLASS InformationClass);
+VOID STDCALL
+RtlSetSecurityDescriptorRMControl(PSECURITY_DESCRIPTOR SecurityDescriptor,
+                                 PUCHAR RMControl);
 
 NTSTATUS STDCALL
 RtlSetTimeZoneInformation (IN OUT PTIME_ZONE_INFORMATION TimeZoneInformation);
 
-DWORD
+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
        );
 
 /*
@@ -1893,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)); \
        } \
@@ -1913,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)); \
@@ -1938,11 +2428,25 @@ RtlSubAuthoritySid (PSID Sid,
 PUCHAR STDCALL
 RtlSubAuthorityCountSid (PSID Sid);
 
-PRTL_SPLAY_LINKS STDCALL
-RtlSubtreePredecessor (IN PRTL_SPLAY_LINKS Links);
+PRTL_SPLAY_LINKS
+STDCALL
+RtlSubtreePredecessor (
+       PRTL_SPLAY_LINKS Links
+       );
+
+PRTL_SPLAY_LINKS
+STDCALL
+RtlSubtreeSuccessor (
+       PRTL_SPLAY_LINKS Links
+       );
+
+BOOLEAN
+STDCALL
+RtlTestBit (
+       PRTL_BITMAP BitMapHeader,
+       ULONG BitNumber
+       );
 
-PRTL_SPLAY_LINKS STDCALL
-RtlSubtreeSuccessor (IN PRTL_SPLAY_LINKS Links);
 
 BOOLEAN STDCALL
 RtlTimeFieldsToTime (PTIME_FIELDS TimeFields,
@@ -1962,6 +2466,13 @@ RtlTimeToSecondsSince1980 (
        PULONG SecondsSince1980
        );
 
+VOID
+STDCALL
+RtlTimeToElapsedTimeFields( 
+       PLARGE_INTEGER Time, 
+       PTIME_FIELDS TimeFields 
+       );
+
 VOID
 STDCALL
 RtlTimeToTimeFields (
@@ -1969,6 +2480,7 @@ RtlTimeToTimeFields (
        PTIME_FIELDS    TimeFields
        );
 
+
 ULONG FASTCALL
 RtlUlongByteSwap (IN ULONG Source);
 
@@ -2061,10 +2573,13 @@ RtlUnicodeToOemN (
 ULONG STDCALL
 RtlUniform (PULONG Seed);
 
-BOOL
+BOOLEAN STDCALL
+RtlUnlockHeap (IN HANDLE Heap);
+
+NTSTATUS
 STDCALL
-RtlUnlockHeap (
-       HANDLE  hheap
+RtlUnlockBootStatusData(
+       HANDLE Filehandle
        );
 
 VOID
@@ -2158,20 +2673,58 @@ RtlUshortByteSwap (IN USHORT Source);
 BOOLEAN STDCALL
 RtlValidAcl (PACL Acl);
 
-BOOL
-STDCALL
+BOOLEAN STDCALL
 RtlValidateHeap (
-       HANDLE  hheap,
-       DWORD   flags,
+       HANDLE Heap,
+       ULONG   Flags,
        PVOID   pmem
        );
 
+BOOLEAN
+STDCALL
+RtlValidRelativeSecurityDescriptor (
+       IN PSECURITY_DESCRIPTOR_RELATIVE SecurityDescriptorInput,
+       IN ULONG SecurityDescriptorLength,
+       IN SECURITY_INFORMATION RequiredInformation
+       );
+
 BOOLEAN STDCALL
 RtlValidSecurityDescriptor (IN PSECURITY_DESCRIPTOR SecurityDescriptor);
 
 BOOLEAN STDCALL
 RtlValidSid (IN PSID Sid);
 
+/*
+NTSTATUS
+STDCALL
+RtlVerifyVersionInfo(
+       IN PRTL_OSVERSIONINFOEXW VersionInfo,
+       IN ULONG TypeMask,
+       IN ULONGLONG  ConditionMask
+       );
+*/
+
+NTSTATUS
+STDCALL
+RtlVolumeDeviceToDosName(
+       IN  PVOID VolumeDeviceObject,
+       OUT PUNICODE_STRING DosName
+       );
+
+ULONG
+STDCALL
+RtlWalkFrameChain (
+       OUT PVOID *Callers,
+       IN ULONG Count,
+       IN ULONG Flags
+       );
+
+BOOLEAN STDCALL
+RtlZeroHeap(
+    IN PVOID HeapHandle,
+    IN ULONG Flags
+    );
+
 ULONG
 STDCALL
 RtlxAnsiStringToUnicodeSize (
@@ -2196,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
@@ -2367,3 +3021,5 @@ int wctomb (char *mbchar, wchar_t wchar);
 #endif /* __NTOSKRNL__ || __NTDRIVER__ || __NTHAL__ || __NTDLL__ || __NTAPP__ */
 
 #endif /* __DDK_RTL_H */
+
+