- Implement RtlInitializeUnicodePrefix and RtlNextUnicodePrefix. The UnicodePrefix...
[reactos.git] / reactos / include / ndk / rtlfuncs.h
index 4e5336f..120c9ea 100644 (file)
 #ifndef _RTLFUNCS_H
 #define _RTLFUNCS_H
 
-#include <ndk/rtltypes.h>
-#include <ndk/pstypes.h>
+/* DEPENDENCIES **************************************************************/
+#include <ntnls.h>
+#include "extypes.h"
+#include "rtltypes.h"
 
-/* FIXME: FILE NEEDS TO BE CLEANED UP AT THE END WHEN ALL THE FUNCTIONS HAVE BEEN ADDED */
+/* MACROS ********************************************************************/
+
+/* FIXME: Eventually move the ones in rtltypes.h here... */
 
 /*
- * VOID
- * InitializeListHead (
- *             PLIST_ENTRY     ListHead
- *             );
- *
- * FUNCTION: Initializes a double linked list
- * ARGUMENTS:
- *         ListHead = Caller supplied storage for the head of the list
+ * Splay Tree Macros
  */
-static __inline VOID
-InitializeListHead(
-       IN PLIST_ENTRY  ListHead)
-{
-       ListHead->Flink = ListHead->Blink = ListHead;
-}
+#define RtlIsLeftChild(Links) \
+    (RtlLeftChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
 
+#define RtlIsRoot(Links) \
+    (RtlParent(Links) == (PRTL_SPLAY_LINKS)(Links))
 
-/*
- * VOID
- * InsertHeadList (
- *             PLIST_ENTRY     ListHead,
- *             PLIST_ENTRY     Entry
- *             );
- *
- * FUNCTION: Inserts an entry in a double linked list
- * ARGUMENTS:
- *        ListHead = Head of the list
- *        Entry = Entry to insert
- */
-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;
-}
+#define RtlLeftChild(Links) \
+    (PRTL_SPLAY_LINKS)(Links)->LeftChild
+
+#define RtlParent(Links) \
+    (PRTL_SPLAY_LINKS)(Links)->Parent
 
+/* PROTOTYPES ****************************************************************/
 
 /*
- * VOID
- * InsertTailList (
- *             PLIST_ENTRY     ListHead,
- *             PLIST_ENTRY     Entry
- *             );
- *
- * FUNCTION:
- *     Inserts an entry in a double linked list
- *
- * ARGUMENTS:
- *     ListHead = Head of the list
- *     Entry = Entry to insert
+ * Splay Tree Functions
  */
-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;
-}
+NTSYSAPI
+PRTL_SPLAY_LINKS
+NTAPI
+RtlSplay(PRTL_SPLAY_LINKS Links);
 
-/*
- * BOOLEAN
- * IsListEmpty (
- *     PLIST_ENTRY     ListHead
- *     );
- *
- * FUNCTION:
- *     Checks if a double linked list is empty
- *
- * ARGUMENTS:
- *     ListHead = Head of the list
-*/
-#define IsListEmpty(ListHead) \
-       ((ListHead)->Flink == (ListHead))
+NTSYSAPI
+PRTL_SPLAY_LINKS
+NTAPI
+RtlDelete(PRTL_SPLAY_LINKS Links);
 
+NTSYSAPI
+VOID
+NTAPI
+RtlDeleteNoSplay(
+    PRTL_SPLAY_LINKS Links,
+    PRTL_SPLAY_LINKS *Root
+);
 
-/*
- * PSINGLE_LIST_ENTRY
- * PopEntryList (
- *     PSINGLE_LIST_ENTRY      ListHead
- *     );
- *
- * FUNCTION:
- *     Removes an entry from the head of a single linked list
- *
- * ARGUMENTS:
- *     ListHead = Head of the list
- *
- * RETURNS:
- *     The removed entry
- */
-#define PopEntryList(ListHead) \
-       (ListHead)->Next; \
-       { \
-               PSINGLE_LIST_ENTRY _FirstEntry; \
-               _FirstEntry = (ListHead)->Next; \
-               if (_FirstEntry != NULL) \
-                       (ListHead)->Next = _FirstEntry->Next; \
-       }
-
-#define PushEntryList(_ListHead, _Entry) \
-       (_Entry)->Next = (_ListHead)->Next; \
-       (_ListHead)->Next = (_Entry); \
+NTSYSAPI
+PRTL_SPLAY_LINKS
+NTAPI
+RtlSubtreeSuccessor(PRTL_SPLAY_LINKS Links);
 
-/*
- *BOOLEAN
- *RemoveEntryList (
- *     PLIST_ENTRY     Entry
- *     );
- *
- * FUNCTION:
- *     Removes an entry from a double linked list
- *
- * ARGUMENTS:
- *     ListEntry = Entry to remove
- */
-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);
-}
+NTSYSAPI
+PRTL_SPLAY_LINKS
+NTAPI
+RtlSubtreePredecessor(PRTL_SPLAY_LINKS Links);
+
+NTSYSAPI
+PRTL_SPLAY_LINKS
+NTAPI
+RtlRealSuccessor(PRTL_SPLAY_LINKS Links);
 
+NTSYSAPI
+PRTL_SPLAY_LINKS
+NTAPI
+RtlRealPredecessor(PRTL_SPLAY_LINKS Links);
 
 /*
- * PLIST_ENTRY
- * RemoveHeadList (
- *     PLIST_ENTRY     ListHead
- *     );
- *
- * FUNCTION:
- *     Removes the head entry from a double linked list
- *
- * ARGUMENTS:
- *     ListHead = Head of the list
- *
- * RETURNS:
- *     The removed entry
+ * Error and Exception Functions
  */
-static __inline PLIST_ENTRY 
-RemoveHeadList(
-  IN PLIST_ENTRY  ListHead)
-{
-  PLIST_ENTRY Flink;
-  PLIST_ENTRY Entry;
-
-  Entry = ListHead->Flink;
-  Flink = Entry->Flink;
-  ListHead->Flink = Flink;
-  Flink->Blink = ListHead;
-  return Entry;
-}
+NTSYSAPI
+PVOID
+NTAPI
+RtlAddVectoredExceptionHandler(
+    IN ULONG FirstHandler,
+    IN PVECTORED_EXCEPTION_HANDLER VectoredHandler
+);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlAssert(
+    PVOID FailedAssertion,
+    PVOID FileName,
+    ULONG LineNumber,
+    PCHAR Message
+);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlCaptureContext(OUT PCONTEXT ContextRecord);
+
+NTSYSAPI
+PVOID
+NTAPI
+RtlEncodePointer(IN PVOID Pointer);
+
+NTSYSAPI
+PVOID
+NTAPI
+RtlDecodePointer(IN PVOID Pointer);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlDispatchException(
+    IN PEXCEPTION_RECORD ExceptionRecord,
+    IN PCONTEXT Context
+);
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlNtStatusToDosError(IN NTSTATUS Status);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlRaiseException(IN PEXCEPTION_RECORD ExceptionRecord);
 
+NTSYSAPI
+VOID
+NTAPI
+RtlRaiseStatus(NTSTATUS Status);
+
+NTSYSAPI
+LONG
+NTAPI
+RtlUnhandledExceptionFilter(struct _EXCEPTION_POINTERS* ExceptionInfo);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlUnwind(
+    IN PVOID TargetFrame OPTIONAL,
+    IN PVOID TargetIp OPTIONAL,
+    IN PEXCEPTION_RECORD ExceptionRecord OPTIONAL,
+    IN PVOID ReturnValue
+);
 
 /*
- * PLIST_ENTRY
- * RemoveTailList (
- *     PLIST_ENTRY     ListHead
- *     );
- *
- * FUNCTION:
- *     Removes the tail entry from a double linked list
- *
- * ARGUMENTS:
- *     ListHead = Head of the list
- *
- * RETURNS:
- *     The removed entry
+ * Heap Functions
  */
-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;
-}
 
-/*
- * BOOLEAN
- * IsXstEntry (
- *  PLIST_ENTRY ListHead,
- *  PLIST_ENTRY Entry
- *  );
-*/
-#define IsFirstEntry(ListHead, Entry) ((ListHead)->Flink == Entry)
-  
-#define IsLastEntry(ListHead, Entry) ((ListHead)->Blink == Entry)
-
-                      
-#define RtlGetProcessHeap() (NtCurrentPeb()->ProcessHeap)
+NTSYSAPI
+PVOID
+NTAPI
+RtlAllocateHeap(
+    IN HANDLE HeapHandle,
+    IN ULONG Flags,
+    IN ULONG Size
+);
 
-#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));\
-}
+NTSYSAPI
+PVOID
+NTAPI
+RtlCreateHeap(
+    IN ULONG Flags,
+    IN PVOID BaseAddress OPTIONAL,
+    IN SIZE_T SizeToReserve OPTIONAL,
+    IN SIZE_T SizeToCommit OPTIONAL,
+    IN PVOID Lock OPTIONAL,
+    IN PRTL_HEAP_PARAMETERS Parameters OPTIONAL
+);
 
+ULONG
+NTAPI
+RtlCompactHeap(
+    HANDLE heap,
+    ULONG flags
+);
 
-#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));\
-}
+NTSYSAPI
+HANDLE
+NTAPI
+RtlDestroyHeap(HANDLE hheap);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlFreeHeap(
+    IN HANDLE HeapHandle,
+    IN ULONG Flags,
+    IN PVOID P
+);
 
+ULONG
+NTAPI
+RtlGetProcessHeaps(
+    ULONG HeapCount,
+    HANDLE *HeapArray
+);
 
-#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));\
-}
+PVOID
+NTAPI
+RtlReAllocateHeap(
+    HANDLE Heap,
+    ULONG Flags,
+    PVOID Ptr,
+    ULONG Size
+);
 
+BOOLEAN
+NTAPI
+RtlLockHeap(IN HANDLE Heap);
 
-#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
+NTAPI
+RtlUnlockHeap(IN HANDLE Heap);
 
 ULONG
-CDECL
-DbgPrint(
-  IN PCH  Format,
-  IN ...);
+NTAPI
+RtlSizeHeap(
+    IN PVOID HeapHandle,
+    IN ULONG Flags,
+    IN PVOID MemoryPointer
+);
+
+BOOLEAN
+NTAPI
+RtlValidateHeap(
+    HANDLE Heap,
+    ULONG Flags,
+    PVOID pmem
+);
+
+#define RtlGetProcessHeap() (NtCurrentPeb()->ProcessHeap)
 
-VOID
-STDCALL
-DbgBreakPoint(VOID);
 
+/*
+ * Security Functions
+ */
+NTSYSAPI
 NTSTATUS
-STDCALL
-RtlAbsoluteToSelfRelativeSD (
+NTAPI
+RtlAbsoluteToSelfRelativeSD(
     IN PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor,
-    IN OUT PSECURITY_DESCRIPTOR_RELATIVE SelfRelativeSecurityDescriptor,
+    IN OUT PSECURITY_DESCRIPTOR SelfRelativeSecurityDescriptor,
     IN PULONG BufferLength
 );
 
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlAddAccessAllowedAce(
+    PACL Acl,
+    ULONG Revision,
+    ACCESS_MASK AccessMask,
+    PSID Sid
+);
+
+NTSTATUS
+NTAPI
+RtlAddAccessAllowedAceEx(
+    IN OUT PACL pAcl,
+    IN ULONG dwAceRevision,
+    IN ULONG AceFlags,
+    IN ULONG AccessMask,
+    IN PSID pSid
+);
+
 NTSTATUS
-STDCALL
-RtlAddAccessAllowedAce (
+NTAPI
+RtlAddAccessDeniedAce(
     PACL Acl,
     ULONG Revision,
     ACCESS_MASK AccessMask,
     PSID Sid
 );
-            
+
+NTSTATUS
+NTAPI
+RtlAddAccessDeniedAceEx(
+    IN OUT PACL Acl,
+    IN ULONG Revision,
+    IN ULONG Flags,
+    IN ACCESS_MASK AccessMask,
+    IN PSID Sid
+);
+
+NTSTATUS
+NTAPI
+RtlAddAuditAccessAceEx(
+    IN OUT PACL Acl,
+    IN ULONG Revision,
+    IN ULONG Flags,
+    IN ACCESS_MASK AccessMask,
+    IN PSID Sid,
+    IN BOOLEAN Success,
+    IN BOOLEAN Failure
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlAddAce(
+    PACL Acl,
+    ULONG AceRevision,
+    ULONG StartingAceIndex,
+    PVOID AceList,
+    ULONG AceListLength
+);
+
+NTSTATUS
+NTAPI
+RtlAddAuditAccessAce(
+    PACL Acl,
+    ULONG Revision,
+    ACCESS_MASK AccessMask,
+    PSID Sid,
+    BOOLEAN Success,
+    BOOLEAN Failure
+);
+
+NTSTATUS
+NTAPI
+RtlAdjustPrivilege(
+    IN ULONG Privilege,
+    IN BOOLEAN NewValue,
+    IN BOOLEAN ForThread,
+    OUT PBOOLEAN OldValue
+);
+
+NTSYSAPI
 NTSTATUS
-STDCALL
-RtlAllocateAndInitializeSid (
+NTAPI
+RtlAllocateAndInitializeSid(
     IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority,
     IN UCHAR SubAuthorityCount,
     IN ULONG SubAuthority0,
@@ -347,62 +350,38 @@ RtlAllocateAndInitializeSid (
     OUT PSID *Sid
 );
 
-PVOID
-STDCALL
-RtlAllocateHeap (
-    IN HANDLE  HeapHandle,
-    IN ULONG   Flags,
-    IN ULONG   Size
-);
-
-NTSTATUS
-STDCALL
-RtlAppendUnicodeToString (
-    PUNICODE_STRING Destination,
-    PCWSTR Source
-);
-
-NTSTATUS
-STDCALL
-RtlAppendUnicodeStringToString (
-    PUNICODE_STRING    Destination,
-    PUNICODE_STRING    Source
+BOOLEAN
+NTAPI
+RtlAreAllAccessesGranted(
+    ACCESS_MASK GrantedAccess,
+    ACCESS_MASK DesiredAccess
 );
 
-NTSTATUS
-STDCALL
-RtlAddAtomToAtomTable (
-    IN PRTL_ATOM_TABLE AtomTable,
-    IN PWSTR AtomName,
-    OUT PRTL_ATOM Atom
+BOOLEAN
+NTAPI
+RtlAreAnyAccessesGranted(
+    ACCESS_MASK GrantedAccess,
+    ACCESS_MASK DesiredAccess
 );
 
+NTSYSAPI
 VOID
-STDCALL
-RtlAssert (
-       PVOID FailedAssertion,
-       PVOID FileName,
-       ULONG LineNumber,
-       PCHAR Message
-       );
-
-VOID
-STDCALL
+NTAPI
 RtlCopyLuid(
     IN PLUID LuidDest,
     IN PLUID LuidSrc
 );
 
-VOID 
-STDCALL
+VOID
+NTAPI
 RtlCopyLuidAndAttributesArray(
     ULONG Count,
     PLUID_AND_ATTRIBUTES Src,
     PLUID_AND_ATTRIBUTES Dest
 );
-        
-NTSTATUS 
-STDCALL
+
+NTSTATUS
+NTAPI
 RtlCopySidAndAttributesArray(
     ULONG Count,
     PSID_AND_ATTRIBUTES Src,
@@ -413,860 +392,1560 @@ RtlCopySidAndAttributesArray(
     PULONG RemainingSidAreaSize
 );
 
-SIZE_T 
-STDCALL
-RtlCompareMemory(IN const VOID *Source1,
-                 IN const VOID *Source2,
-                 IN SIZE_T Length);
-                 
-LONG
-STDCALL
-RtlCompareUnicodeString (
-    PUNICODE_STRING String1,
-    PUNICODE_STRING String2,
-    BOOLEAN CaseInsensitive
-);
-    
-BOOLEAN
-STDCALL
-RtlEqualUnicodeString (
-    PCUNICODE_STRING String1,
-    PCUNICODE_STRING String2,
-    BOOLEAN CaseInsensitive
-);
-                 
-VOID
-STDCALL
-RtlAcquirePebLock (
-       VOID
-       );
-
-VOID
-STDCALL
-RtlReleasePebLock (
-       VOID
-       );
-
-NTSTATUS
-STDCALL
-RtlCompressBuffer (
-    IN USHORT   CompressionFormatAndEngine,
-    IN PUCHAR   UncompressedBuffer,
-    IN ULONG    UncompressedBufferSize,
-    OUT PUCHAR  CompressedBuffer,
-    IN ULONG    CompressedBufferSize,
-    IN ULONG    UncompressedChunkSize,
-    OUT PULONG  FinalCompressedSize,
-    IN PVOID    WorkSpace
-);
-
 NTSTATUS
-STDCALL
-RtlConvertSidToUnicodeString (
+NTAPI
+RtlConvertSidToUnicodeString(
     OUT PUNICODE_STRING DestinationString,
-    IN PSID             Sid,
-    IN BOOLEAN          AllocateDestinationString
+    IN PSID Sid,
+    IN BOOLEAN AllocateDestinationString
 );
 
+NTSYSAPI
 NTSTATUS
-STDCALL
-RtlCopySid (
-    IN ULONG   Length,
-    IN PSID    Destination,
-    IN PSID    Source
+NTAPI
+RtlCopySid(
+    IN ULONG Length,
+    IN PSID Destination,
+    IN PSID Source
 );
 
-VOID STDCALL
-RtlCopyUnicodeString(PUNICODE_STRING DestinationString,
-                    PUNICODE_STRING SourceString);
-             
+NTSYSAPI
 NTSTATUS
-STDCALL
+NTAPI
 RtlCreateAcl(
     PACL Acl,
     ULONG AclSize,
     ULONG AclRevision
 );
 
-PVOID
-STDCALL
-RtlCreateHeap(
-    IN ULONG Flags,
-    IN PVOID BaseAddress OPTIONAL,
-    IN ULONG SizeToReserve OPTIONAL,
-    IN ULONG SizeToCommit OPTIONAL,
-    IN PVOID Lock OPTIONAL,
-    IN PRTL_HEAP_DEFINITION Definition OPTIONAL
-);
-          
-NTSTATUS
-STDCALL
-RtlCreateAtomTable(
-    IN ULONG TableSize,
-    IN OUT PRTL_ATOM_TABLE *AtomTable
-);
-
+NTSYSAPI
 NTSTATUS
-STDCALL
+NTAPI
 RtlCreateSecurityDescriptor(
     PSECURITY_DESCRIPTOR SecurityDescriptor,
     ULONG Revision
 );
 
-NTSTATUS STDCALL
+NTSYSAPI
+NTSTATUS
+NTAPI
 RtlCreateSecurityDescriptorRelative(
-    PSECURITY_DESCRIPTOR_RELATIVE SecurityDescriptor,
+    PISECURITY_DESCRIPTOR_RELATIVE SecurityDescriptor,
     ULONG Revision
 );
 
+NTSYSAPI
 NTSTATUS
-STDCALL
-RtlCreateUserThread (
-    IN HANDLE ProcessHandle,
-    IN PSECURITY_DESCRIPTOR SecurityDescriptor,
-    IN BOOLEAN CreateSuspended,
-    IN LONG StackZeroBits,
-    IN OUT PULONG StackReserve,
-    IN OUT PULONG StackCommit,
-    IN PTHREAD_START_ROUTINE StartAddress,
-    IN PVOID Parameter,
-    IN OUT PHANDLE ThreadHandle,
-    IN OUT PCLIENT_ID ClientId
+NTAPI
+RtlDeleteAce(
+    PACL Acl,
+    ULONG AceIndex
 );
 
+NTSYSAPI
 BOOLEAN
-STDCALL
-RtlCreateUnicodeString(
-    OUT PUNICODE_STRING DestinationString,
-    IN PCWSTR           SourceString
+NTAPI
+RtlEqualPrefixSid(
+    PSID Sid1,
+    PSID Sid2
 );
 
-NTSTATUS
-STDCALL
-RtlDecompressBuffer (
-    IN USHORT   CompressionFormat,
-    OUT PUCHAR  UncompressedBuffer,
-    IN ULONG    UncompressedBufferSize,
-    IN PUCHAR   CompressedBuffer,
-    IN ULONG    CompressedBufferSize,
-    OUT PULONG  FinalUncompressedSize
-);
-
-NTSTATUS
-STDCALL
-RtlExpandEnvironmentStrings_U (
-    PWSTR Environment,
-    PUNICODE_STRING Source,
-    PUNICODE_STRING Destination,
-    PULONG Length
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlEqualSid (
+    IN PSID Sid1,
+    IN PSID Sid2
 );
 
-PRTL_USER_PROCESS_PARAMETERS
-STDCALL
-RtlDeNormalizeProcessParams (
-    IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
+BOOLEAN
+NTAPI
+RtlFirstFreeAce(
+    PACL Acl,
+    PACE* Ace
 );
 
-PRTL_USER_PROCESS_PARAMETERS
-STDCALL
-RtlNormalizeProcessParams (
-    IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
+NTSYSAPI
+PVOID
+NTAPI
+RtlFreeSid (
+    IN PSID Sid
 );
 
+NTSYSAPI
 NTSTATUS
-STDCALL
-RtlDeleteAtomFromAtomTable (
-       IN PRTL_ATOM_TABLE AtomTable,
-       IN RTL_ATOM Atom
+NTAPI
+RtlGetAce(
+    PACL Acl,
+    ULONG AceIndex,
+    PVOID *Ace
 );
 
 NTSTATUS
-STDCALL
-RtlDeleteCriticalSection (
-     PRTL_CRITICAL_SECTION CriticalSection
+NTAPI
+RtlGetControlSecurityDescriptor(
+    PSECURITY_DESCRIPTOR SecurityDescriptor,
+    PSECURITY_DESCRIPTOR_CONTROL Control,
+    PULONG Revision
 );
 
-NTSTATUS 
-STDCALL
-RtlDestroyAtomTable (
-       IN PRTL_ATOM_TABLE AtomTable
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlGetDaclSecurityDescriptor(
+    IN PSECURITY_DESCRIPTOR SecurityDescriptor,
+    OUT PBOOLEAN DaclPresent,
+    OUT PACL *Dacl,
+    OUT PBOOLEAN DaclDefaulted
 );
 
+NTSYSAPI
 NTSTATUS
-STDCALL
-RtlEnterCriticalSection (
-     PRTL_CRITICAL_SECTION CriticalSection
+NTAPI
+RtlGetSaclSecurityDescriptor(
+    PSECURITY_DESCRIPTOR SecurityDescriptor,
+    PBOOLEAN SaclPresent,
+    PACL* Sacl,
+    PBOOLEAN SaclDefaulted
 );
 
-NTSTATUS 
-STDCALL
-RtlInitializeCriticalSection (
-     PRTL_CRITICAL_SECTION CriticalSection
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlGetGroupSecurityDescriptor(
+    IN PSECURITY_DESCRIPTOR SecurityDescriptor,
+    OUT PSID *Group,
+    OUT PBOOLEAN GroupDefaulted
 );
 
+NTSYSAPI
 NTSTATUS
-STDCALL
-RtlLeaveCriticalSection (
-     PRTL_CRITICAL_SECTION CriticalSection
+NTAPI
+RtlGetOwnerSecurityDescriptor(
+    IN PSECURITY_DESCRIPTOR SecurityDescriptor,
+    OUT PSID *Owner,
+    OUT PBOOLEAN OwnerDefaulted
 );
 
-VOID
-STDCALL
-RtlInitializeBitMap(
-  IN PRTL_BITMAP  BitMapHeader,
-  IN PULONG  BitMapBuffer,
-  IN ULONG  SizeOfBitMap); 
-  
-BOOLEAN
-STDCALL
-RtlAreBitsClear(
-  IN PRTL_BITMAP  BitMapHeader,
-  IN ULONG  StartingIndex,
-  IN ULONG  Length); 
-
+NTSYSAPI
 BOOLEAN
-STDCALL
-RtlAreBitsSet(
-  IN PRTL_BITMAP  BitMapHeader,
-  IN ULONG  StartingIndex,
-  IN ULONG  Length); 
-
-VOID
-STDCALL
-RtlClearBits (
-       IN      PRTL_BITMAP     BitMapHeader,
-       IN      ULONG           StartingIndex,
-       IN      ULONG           NumberToClear
-       );
+NTAPI
+RtlGetSecurityDescriptorRMControl(
+    PSECURITY_DESCRIPTOR SecurityDescriptor,
+    PUCHAR RMControl
+);
 
-ULONG
-STDCALL
-RtlFindClearBits (
-       PRTL_BITMAP     BitMapHeader,
-       ULONG           NumberToFind,
-       ULONG           HintIndex
-       );
+NTSYSAPI
+PSID_IDENTIFIER_AUTHORITY
+NTAPI
+RtlIdentifierAuthoritySid(PSID Sid);
 
-ULONG
-STDCALL
-RtlFindClearBitsAndSet (
-       PRTL_BITMAP     BitMapHeader,
-       ULONG           NumberToFind,
-       ULONG           HintIndex
-       );
-    
-NTSTATUS
-STDCALL
-RtlMultiByteToUnicodeN (
-    PWCHAR UnicodeString,
-    ULONG  UnicodeSize,
-    PULONG ResultSize,
-    const PCHAR  MbString,
-    ULONG  MbSize
-);
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlImpersonateSelf(IN SECURITY_IMPERSONATION_LEVEL ImpersonationLevel);
 
+NTSYSAPI
 NTSTATUS
-STDCALL
-RtlMultiByteToUnicodeSize (
-    PULONG UnicodeSize,
-    PCHAR  MbString,
-    ULONG  MbSize
+NTAPI
+RtlInitializeSid(
+    IN OUT PSID Sid,
+    IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority,
+    IN UCHAR SubAuthorityCount
 );
 
-BOOLEAN
-STDCALL
-RtlPrefixUnicodeString (
-       PUNICODE_STRING String1,
-       PUNICODE_STRING String2,
-       BOOLEAN         CaseInsensitive
-       );
-    
-CHAR STDCALL
-RtlUpperChar (CHAR Source);
-
-WCHAR
-STDCALL
-RtlUpcaseUnicodeChar (
-       WCHAR Source
-       );
-    
-NTSTATUS
-STDCALL
-RtlAnsiStringToUnicodeString (
-       PUNICODE_STRING DestinationString,
-       PANSI_STRING    SourceString,
-       BOOLEAN         AllocateDestinationString
-       );
-    
-ULONG
-STDCALL
-RtlAnsiStringToUnicodeSize (
-       PANSI_STRING    AnsiString
-       );
-
-NTSTATUS
-STDCALL
-RtlUnicodeToMultiByteN (
-       PCHAR   MbString,
-       ULONG   MbSize,
-       PULONG  ResultSize,
-       PWCHAR  UnicodeString,
-       ULONG   UnicodeSize
-       );
-    
+NTSYSAPI
 ULONG
-STDCALL
-RtlOemStringToUnicodeSize (
-       POEM_STRING     AnsiString
-       );
-    
-NTSTATUS
-STDCALL
-RtlOemStringToUnicodeString (
-       PUNICODE_STRING DestinationString,
-       POEM_STRING     SourceString,
-       BOOLEAN         AllocateDestinationString
-       );
-    
-PVOID
-STDCALL
-RtlImageDirectoryEntryToData (
-       PVOID   BaseAddress,
-       BOOLEAN bFlag,
-       ULONG   Directory,
-       PULONG  Size
-       );
-        
-NTSTATUS
-STDCALL
-RtlOpenCurrentUser(
-  IN  ACCESS_MASK  DesiredAccess,
-  OUT  PHANDLE  KeyHandle);
-    
-WCHAR STDCALL
-RtlDowncaseUnicodeChar(IN WCHAR Source);
+NTAPI
+RtlLengthRequiredSid(IN ULONG SubAuthorityCount);
 
-NTSTATUS
-STDCALL
-RtlUpcaseUnicodeToMultiByteN (
-       PCHAR   MbString,
-       ULONG   MbSize,
-       PULONG  ResultSize,
-       PWCHAR  UnicodeString,
-       ULONG   UnicodeSize
-       );
-    
-NTSTATUS
-STDCALL
-RtlUnicodeToMultiByteSize (
-       PULONG  MbSize,
-       PWCHAR  UnicodeString,
-       ULONG   UnicodeSize
-       );
-    
-NTSTATUS
-STDCALL
-RtlOemToUnicodeN(
-       PWSTR UnicodeString,
-       ULONG MaxBytesInUnicodeString,
-       PULONG BytesInUnicodeString,
-       IN PCHAR OemString,
-       ULONG BytesInOemString
-       );
-    
-NTSTATUS
-STDCALL
-RtlUnicodeToOemN (
-       PCHAR   OemString,
-       ULONG   OemSize,
-       PULONG  ResultSize,
-       PWCHAR  UnicodeString,
-       ULONG   UnicodeSize
-       );
-
-NTSTATUS
-STDCALL
-RtlUpcaseUnicodeStringToOemString (
-       IN OUT  POEM_STRING     DestinationString,
-       IN      PUNICODE_STRING SourceString,
-       IN      BOOLEAN         AllocateDestinationString
-       );
-        
-ULONG
-STDCALL
-RtlUnicodeStringToAnsiSize (
-       IN      PUNICODE_STRING UnicodeString
-       );
-    
+NTSYSAPI
 ULONG
-STDCALL
-RtlUnicodeStringToOemSize (
-       IN      PUNICODE_STRING UnicodeString
-       );
-    
-NTSTATUS
-STDCALL
-RtlUnicodeStringToAnsiString (
-       IN OUT  PANSI_STRING    DestinationString,
-       IN      PUNICODE_STRING SourceString,
-       IN      BOOLEAN         AllocateDestinationString
-       );
-    
-NTSTATUS
-STDCALL
-RtlUnicodeStringToInteger (
-       IN      PUNICODE_STRING String,
-       IN      ULONG           Base,
-       OUT     PULONG          Value
-       );
-    
-#ifndef _NTIFS_
-BOOLEAN
-STDCALL
-RtlEqualSid (
-    IN PSID Sid1,
-    IN PSID Sid2
-);
+NTAPI
+RtlLengthSid(IN PSID Sid);
 
+NTSYSAPI
 VOID
-STDCALL
-RtlFillMemoryUlong (
-    IN PVOID    Destination,
-    IN ULONG    Length,
-    IN ULONG    Fill
+NTAPI
+RtlMapGenericMask(
+    PACCESS_MASK AccessMask,
+    PGENERIC_MAPPING GenericMapping
 );
 
-#endif
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlQueryInformationAcl(
+    PACL Acl,
+    PVOID Information,
+    ULONG InformationLength,
+    ACL_INFORMATION_CLASS InformationClass
+);
 
+NTSYSAPI
 NTSTATUS
-STDCALL
-RtlFindMessage (
-       IN      PVOID                           BaseAddress,
-       IN      ULONG                           Type,
-       IN      ULONG                           Language,
-       IN      ULONG                           MessageId,
-       OUT     PRTL_MESSAGE_RESOURCE_ENTRY     *MessageResourceEntry
-       );
-       
-VOID
-STDCALL
-RtlFreeAnsiString (
-    IN PANSI_STRING AnsiString
+NTAPI
+RtlSelfRelativeToAbsoluteSD(
+    IN PSECURITY_DESCRIPTOR SelfRelativeSD,
+    OUT PSECURITY_DESCRIPTOR AbsoluteSD,
+    IN PULONG AbsoluteSDSize,
+    IN PACL Dacl,
+    IN PULONG DaclSize,
+    IN PACL Sacl,
+    IN PULONG SaclSize,
+    IN PSID Owner,
+    IN PULONG OwnerSize,
+    IN PSID PrimaryGroup,
+    IN PULONG PrimaryGroupSize
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlSelfRelativeToAbsoluteSD2(
+    IN OUT PSECURITY_DESCRIPTOR SelfRelativeSD,
+    OUT PULONG BufferSize
 );
 
-BOOLEAN
-STDCALL
-RtlFreeHeap (
-    IN HANDLE  HeapHandle,
-    IN ULONG   Flags,
-    IN PVOID   P
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlSetControlSecurityDescriptor(
+    IN PSECURITY_DESCRIPTOR SecurityDescriptor,
+    IN SECURITY_DESCRIPTOR_CONTROL ControlBitsOfInterest,
+    IN SECURITY_DESCRIPTOR_CONTROL ControlBitsToSet
 );
 
-PVOID
-STDCALL
-RtlFreeSid (
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlSetDaclSecurityDescriptor (
+    PSECURITY_DESCRIPTOR SecurityDescriptor,
+    BOOLEAN DaclPresent,
+    PACL Dacl,
+    BOOLEAN DaclDefaulted
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlSetGroupSecurityDescriptor(
+    IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
+    IN PSID Group,
+    IN BOOLEAN GroupDefaulted
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlSetInformationAcl(
+    PACL Acl,
+    PVOID Information,
+    ULONG InformationLength,
+    ACL_INFORMATION_CLASS InformationClass
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlSetOwnerSecurityDescriptor(
+    IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
+    IN PSID Owner,
+    IN BOOLEAN OwnerDefaulted
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlSetSaclSecurityDescriptor(
+    IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
+    IN BOOLEAN SaclPresent,
+    IN PACL Sacl,
+    IN BOOLEAN SaclDefaulted
+);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlSetSecurityDescriptorRMControl(
+    PSECURITY_DESCRIPTOR SecurityDescriptor,
+    PUCHAR RMControl
+);
+
+NTSYSAPI
+PUCHAR
+NTAPI
+RtlSubAuthorityCountSid(
     IN PSID Sid
 );
 
-VOID
-STDCALL
-RtlFreeUnicodeString(
-  IN PUNICODE_STRING  UnicodeString);
+NTSYSAPI
+PULONG
+NTAPI
+RtlSubAuthoritySid(
+    IN PSID Sid,
+    IN ULONG SubAuthority
+);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlValidRelativeSecurityDescriptor(
+    IN PSECURITY_DESCRIPTOR SecurityDescriptorInput,
+    IN ULONG SecurityDescriptorLength,
+    IN SECURITY_INFORMATION RequiredInformation
+);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlValidSecurityDescriptor(IN PSECURITY_DESCRIPTOR SecurityDescriptor);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlValidSid(IN PSID Sid);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlValidAcl(PACL Acl);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlDeleteSecurityObject(
+    IN PSECURITY_DESCRIPTOR *ObjectDescriptor
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlNewSecurityObject(
+    IN PSECURITY_DESCRIPTOR ParentDescriptor,
+    IN PSECURITY_DESCRIPTOR CreatorDescriptor,
+    OUT PSECURITY_DESCRIPTOR *NewDescriptor,
+    IN BOOLEAN IsDirectoryObject,
+    IN HANDLE Token,
+    IN PGENERIC_MAPPING GenericMapping
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlQuerySecurityObject(
+    IN PSECURITY_DESCRIPTOR ObjectDescriptor,
+    IN SECURITY_INFORMATION SecurityInformation,
+    OUT PSECURITY_DESCRIPTOR ResultantDescriptor,
+    IN ULONG DescriptorLength,
+    OUT PULONG ReturnLength
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlSetSecurityObject(
+    IN SECURITY_INFORMATION SecurityInformation,
+    IN PSECURITY_DESCRIPTOR ModificationDescriptor,
+    OUT PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor,
+    IN PGENERIC_MAPPING GenericMapping,
+    IN HANDLE Token
+);
+
+/*
+ * Single-Character Functions
+ */
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlLargeIntegerToChar(
+    IN PLARGE_INTEGER Value,
+    IN ULONG Base,
+    IN ULONG Length,
+    IN OUT PCHAR String
+);
+
+NTSYSAPI
+CHAR
+NTAPI
+RtlUpperChar(CHAR Source);
+
+NTSYSAPI
+WCHAR
+NTAPI
+RtlUpcaseUnicodeChar(WCHAR Source);
+
+NTSYSAPI
+WCHAR
+NTAPI
+RtlDowncaseUnicodeChar(IN WCHAR Source);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlIntegerToChar(
+    IN ULONG Value,
+    IN ULONG Base,
+    IN ULONG Length,
+    IN OUT PCHAR String
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlIntegerToUnicode(
+    IN ULONG Value,
+    IN ULONG Base  OPTIONAL,
+    IN ULONG Length OPTIONAL,
+    IN OUT LPWSTR String
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlIntegerToUnicodeString(
+    IN ULONG Value,
+    IN ULONG Base,
+    IN OUT PUNICODE_STRING String
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlCharToInteger(
+    PCSZ String,
+    ULONG Base,
+    PULONG Value
+);
+
+#if (defined(_M_IX86) && (_MSC_FULL_VER > 13009037)) || ((defined(_M_AMD64) || defined(_M_IA64)) && (_MSC_FULL_VER > 13009175))
+unsigned short __cdecl _byteswap_ushort(unsigned short);
+unsigned long  __cdecl _byteswap_ulong (unsigned long);
+unsigned __int64 __cdecl _byteswap_uint64(unsigned __int64);
+#pragma intrinsic(_byteswap_ushort)
+#pragma intrinsic(_byteswap_ulong)
+#pragma intrinsic(_byteswap_uint64)
+#define RtlUshortByteSwap(_x) _byteswap_ushort((USHORT)(_x))
+#define RtlUlongByteSwap(_x) _byteswap_ulong((_x))
+#define RtlUlonglongByteSwap(_x) _byteswap_uint64((_x))
+#else
+
+USHORT
+FASTCALL
+RtlUshortByteSwap(IN USHORT Source);
+
+ULONG
+FASTCALL
+RtlUlongByteSwap(IN ULONG Source);
+
+ULONGLONG
+FASTCALL
+RtlUlonglongByteSwap(IN ULONGLONG Source);
+
+#endif
+
+/*
+ * Unicode->Ansi String Functions
+ */
+NTSYSAPI
+ULONG
+NTAPI
+RtlxUnicodeStringToAnsiSize(IN PCUNICODE_STRING UnicodeString);
+
+#ifdef NTOS_MODE_USER
+#define RtlUnicodeStringToAnsiSize(STRING) (                  \
+    NLS_MB_CODE_PAGE_TAG ?                                    \
+    RtlxUnicodeStringToAnsiSize(STRING) :                     \
+    ((STRING)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \
+)
+#endif
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlUnicodeStringToAnsiString(
+    PANSI_STRING DestinationString,
+    PCUNICODE_STRING SourceString,
+    BOOLEAN AllocateDestinationString
+);
+
+/*
+ * Unicode->OEM String Functions
+ */
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlUpcaseUnicodeStringToOemString(
+    POEM_STRING DestinationString,
+    PCUNICODE_STRING SourceString,
+    BOOLEAN AllocateDestinationString
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlUpcaseUnicodeStringToCountedOemString(
+    IN OUT POEM_STRING DestinationString,
+    IN PCUNICODE_STRING SourceString,
+    IN BOOLEAN AllocateDestinationString
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlUnicodeStringToOemString(
+    POEM_STRING DestinationString,
+    PCUNICODE_STRING SourceString,
+    BOOLEAN AllocateDestinationString
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlUpcaseUnicodeToOemN(
+    PCHAR OemString,
+    ULONG OemSize,
+    PULONG ResultSize,
+    PWCHAR UnicodeString,
+    ULONG UnicodeSize
+);
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlxUnicodeStringToOemSize(IN PCUNICODE_STRING UnicodeString);
+
+#ifdef NTOS_MODE_USER
+#define RtlUnicodeStringToOemSize(STRING) (                   \
+    NLS_MB_OEM_CODE_PAGE_TAG ?                                \
+    RtlxUnicodeStringToOemSize(STRING) :                      \
+    ((STRING)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \
+)
+#define RtlUnicodeStringToCountedOemSize(STRING) (                    \
+    (ULONG)(RtlUnicodeStringToOemSize(STRING) - sizeof(ANSI_NULL)) \
+)
+#endif
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlUnicodeToOemN(
+    PCHAR OemString,
+    ULONG OemSize,
+    PULONG ResultSize,
+    PWCHAR UnicodeString,
+    ULONG UnicodeSize
+);
+
+/*
+ * Unicode->MultiByte String Functions
+ */
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlUnicodeToMultiByteN(
+    PCHAR MbString,
+    ULONG MbSize,
+    PULONG ResultSize,
+    PWCHAR UnicodeString,
+    ULONG UnicodeSize
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlUpcaseUnicodeToMultiByteN(
+    PCHAR MbString,
+    ULONG MbSize,
+    PULONG ResultSize,
+    PWCHAR UnicodeString,
+    ULONG UnicodeSize
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlUnicodeToMultiByteSize(
+    PULONG MbSize,
+    PWCHAR UnicodeString,
+    ULONG UnicodeSize
+);
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlxOemStringToUnicodeSize(IN PCOEM_STRING OemString);
+
+/*
+ * OEM to Unicode Functions
+ */
+#ifdef NTOS_MODE_USER
+#define RtlOemStringToUnicodeSize(STRING) (                  \
+    NLS_MB_OEM_CODE_PAGE_TAG ?                               \
+    RtlxOemStringToUnicodeSize(STRING) :                     \
+    ((STRING)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR)   \
+)
+#define RtlOemStringToCountedUnicodeSize(STRING) (                    \
+    (ULONG)(RtlOemStringToUnicodeSize(STRING) - sizeof(UNICODE_NULL)) \
+)
+#endif
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlOemStringToUnicodeString(
+    PUNICODE_STRING DestinationString,
+    PCOEM_STRING SourceString,
+    BOOLEAN AllocateDestinationString
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlOemToUnicodeN(
+    PWSTR UnicodeString,
+    ULONG MaxBytesInUnicodeString,
+    PULONG BytesInUnicodeString,
+    IN PCHAR OemString,
+    ULONG BytesInOemString
+);
+
+/*
+ * Ansi->Unicode String Functions
+ */
+NTSYSAPI
+ULONG
+NTAPI
+RtlxAnsiStringToUnicodeSize(
+    PCANSI_STRING AnsiString
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlAnsiStringToUnicodeString(
+    PUNICODE_STRING DestinationString,
+    PCANSI_STRING SourceString,
+    BOOLEAN AllocateDestinationString
+);
+
+#ifdef NTOS_MODE_USER
+#define RtlAnsiStringToUnicodeSize(STRING) (                 \
+    NLS_MB_CODE_PAGE_TAG ?                                   \
+    RtlxAnsiStringToUnicodeSize(STRING) :                    \
+    ((STRING)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR)   \
+)
+#endif
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlCreateUnicodeStringFromAsciiz(
+    OUT PUNICODE_STRING Destination,
+    IN PCSZ Source
+);
+
+/*
+ * Unicode String Functions
+ */
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlAppendUnicodeToString(
+    PUNICODE_STRING Destination,
+    PCWSTR Source
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlAppendUnicodeStringToString(
+    PUNICODE_STRING Destination,
+    PCUNICODE_STRING Source
+);
+
+NTSYSAPI
+LONG
+NTAPI
+RtlCompareUnicodeString(
+    PCUNICODE_STRING String1,
+    PCUNICODE_STRING String2,
+    BOOLEAN CaseInsensitive
+);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlCopyUnicodeString(
+    PUNICODE_STRING DestinationString,
+    PCUNICODE_STRING SourceString
+);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlCreateUnicodeString(
+    PUNICODE_STRING DestinationString,
+    PCWSTR SourceString
+);
+
+#ifdef NTOS_MODE_USER
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlDowncaseUnicodeString(
+    IN OUT PUNICODE_STRING UniDest,
+    IN PCUNICODE_STRING UniSource,
+    IN BOOLEAN AllocateDestinationString
+);
+#endif
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlDuplicateUnicodeString(
+    IN ULONG Flags,
+    IN PCUNICODE_STRING SourceString,
+    OUT PUNICODE_STRING DestinationString
+);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlEqualUnicodeString(
+    PCUNICODE_STRING String1,
+    PCUNICODE_STRING String2,
+    BOOLEAN CaseInsensitive
+);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlFreeUnicodeString(IN PUNICODE_STRING UnicodeString);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlHashUnicodeString(
+    IN CONST UNICODE_STRING *String,
+    IN BOOLEAN CaseInSensitive,
+    IN ULONG HashAlgorithm,
+    OUT PULONG HashValue
+);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlInitUnicodeString(
+  IN OUT PUNICODE_STRING DestinationString,
+  IN PCWSTR SourceString);
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlIsTextUnicode(
+    PVOID Buffer,
+    ULONG Length,
+    ULONG *Flags
+);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlPrefixUnicodeString(
+    PCUNICODE_STRING String1,
+    PCUNICODE_STRING String2,
+    BOOLEAN CaseInsensitive
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlUpcaseUnicodeString(
+    PUNICODE_STRING DestinationString,
+    PCUNICODE_STRING SourceString,
+    BOOLEAN AllocateDestinationString
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlUnicodeStringToInteger(
+    PCUNICODE_STRING String,
+    ULONG Base,
+    PULONG Value
+);
+
+/*
+ * Ansi String Functions
+ */
+NTSYSAPI
+VOID
+NTAPI
+RtlFreeAnsiString(IN PANSI_STRING AnsiString);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlInitAnsiString(
+    PANSI_STRING DestinationString,
+    PCSZ SourceString
+);
+
+/*
+ * OEM String Functions
+ */
+NTSYSAPI
+VOID
+NTAPI
+RtlFreeOemString(IN POEM_STRING OemString);
+
+/*
+ * MultiByte->Unicode String Functions
+ */
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlMultiByteToUnicodeN(
+    PWCHAR UnicodeString,
+    ULONG UnicodeSize,
+    PULONG ResultSize,
+    PCSTR MbString,
+    ULONG MbSize
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlMultiByteToUnicodeSize(
+    PULONG UnicodeSize,
+    PCSTR MbString,
+    ULONG MbSize
+);
+
+/*
+ * Atom Functions
+ */
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlAddAtomToAtomTable(
+    IN PRTL_ATOM_TABLE AtomTable,
+    IN PWSTR AtomName,
+    OUT PRTL_ATOM Atom
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlCreateAtomTable(
+    IN ULONG TableSize,
+    IN OUT PRTL_ATOM_TABLE *AtomTable
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlDeleteAtomFromAtomTable(
+    IN PRTL_ATOM_TABLE AtomTable,
+    IN RTL_ATOM Atom
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlDestroyAtomTable(IN PRTL_ATOM_TABLE AtomTable);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlQueryAtomInAtomTable(
+    IN PRTL_ATOM_TABLE AtomTable,
+    IN RTL_ATOM Atom,
+    IN OUT PULONG RefCount OPTIONAL,
+    IN OUT PULONG PinCount OPTIONAL,
+    IN OUT PWSTR AtomName OPTIONAL,
+    IN OUT PULONG NameLength OPTIONAL
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlLookupAtomInAtomTable(
+    IN PRTL_ATOM_TABLE AtomTable,
+    IN PWSTR AtomName,
+    OUT PRTL_ATOM Atom
+);
+
+/*
+ * Memory Functions
+ */
+NTSYSAPI
+VOID
+NTAPI
+RtlFillMemoryUlong(
+    IN PVOID Destination,
+    IN ULONG Length,
+    IN ULONG Fill
+);
+
+/*
+ * Process Management Functions
+ */
+NTSYSAPI
+VOID
+NTAPI
+RtlAcquirePebLock(VOID);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlCreateProcessParameters (
+    OUT PRTL_USER_PROCESS_PARAMETERS *ProcessParameters,
+    IN PUNICODE_STRING ImagePathName OPTIONAL,
+    IN PUNICODE_STRING DllPath OPTIONAL,
+    IN PUNICODE_STRING CurrentDirectory OPTIONAL,
+    IN PUNICODE_STRING CommandLine OPTIONAL,
+    IN PWSTR Environment OPTIONAL,
+    IN PUNICODE_STRING WindowTitle OPTIONAL,
+    IN PUNICODE_STRING DesktopInfo OPTIONAL,
+    IN PUNICODE_STRING ShellInfo OPTIONAL,
+    IN PUNICODE_STRING RuntimeInfo OPTIONAL
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlCreateUserProcess(
+    IN PUNICODE_STRING ImageFileName,
+    IN ULONG Attributes,
+    IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters,
+    IN PSECURITY_DESCRIPTOR ProcessSecutityDescriptor OPTIONAL,
+    IN PSECURITY_DESCRIPTOR ThreadSecurityDescriptor OPTIONAL,
+    IN HANDLE ParentProcess OPTIONAL,
+    IN BOOLEAN CurrentDirectory,
+    IN HANDLE DebugPort OPTIONAL,
+    IN HANDLE ExceptionPort OPTIONAL,
+    OUT PRTL_USER_PROCESS_INFORMATION ProcessInfo
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlCreateUserThread(
+    IN HANDLE ProcessHandle,
+    IN PSECURITY_DESCRIPTOR SecurityDescriptor,
+    IN BOOLEAN CreateSuspended,
+    IN LONG StackZeroBits,
+    IN ULONG StackReserve,
+    IN ULONG StackCommit,
+    IN PTHREAD_START_ROUTINE StartAddress,
+    IN PVOID Parameter,
+    IN OUT PHANDLE ThreadHandle,
+    IN OUT PCLIENT_ID ClientId
+);
+
+NTSYSAPI
+PRTL_USER_PROCESS_PARAMETERS
+NTAPI
+RtlDeNormalizeProcessParams(IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlDestroyProcessParameters(IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlExitUserThread(NTSTATUS Status);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlInitializeContext(
+    IN HANDLE ProcessHandle,
+    OUT PCONTEXT ThreadContext,
+    IN PVOID ThreadStartParam  OPTIONAL,
+    IN PTHREAD_START_ROUTINE ThreadStartAddress,
+    IN PINITIAL_TEB InitialTeb
+);
+
+NTSYSAPI
+PRTL_USER_PROCESS_PARAMETERS
+NTAPI
+RtlNormalizeProcessParams(IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlReleasePebLock(VOID);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlSetProcessIsCritical(
+    IN BOOLEAN NewValue,
+    OUT PBOOLEAN OldValue OPTIONAL,
+    IN BOOLEAN IsWinlogon
+);
+
+/*
+ * Environment/Path Functions
+ */
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlCreateEnvironment(
+    BOOLEAN Inherit,
+    PWSTR *Environment
+);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlDestroyEnvironment(PWSTR Environment);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlDoesFileExists_U(PWSTR FileName);
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlDetermineDosPathNameType_U(PCWSTR Path);
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlDosSearchPath_U(
+    WCHAR *sp,
+    WCHAR *name,
+    WCHAR *ext,
+    ULONG buf_sz,
+    WCHAR *buffer,
+    WCHAR **shortname
+);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlDosPathNameToNtPathName_U(
+    PWSTR DosName,
+    PUNICODE_STRING NtName,
+    PWSTR *ShortName,
+    PCURDIR CurrentDirectory
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlExpandEnvironmentStrings_U(
+    PWSTR Environment,
+    PUNICODE_STRING Source,
+    PUNICODE_STRING Destination,
+    PULONG Length
+);
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlGetCurrentDirectory_U(
+    ULONG MaximumLength,
+    PWSTR Buffer
+);
 
-VOID 
-STDCALL
-RtlFreeOemString(
-    IN POEM_STRING OemString
+NTSYSAPI
+ULONG
+NTAPI
+RtlGetFullPathName_U(
+    const WCHAR *dosname,
+    ULONG size,
+    WCHAR *buf,
+    WCHAR **shortname
 );
 
-NTSTATUS
-STDCALL
-RtlGetCompressionWorkSpaceSize (
-    IN USHORT   CompressionFormatAndEngine,
-    OUT PULONG  CompressBufferWorkSpaceSize,
-    OUT PULONG  CompressFragmentWorkSpaceSize
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlIsNameLegalDOS8Dot3(
+    IN PUNICODE_STRING UnicodeName,
+    IN PANSI_STRING AnsiName,
+    PBOOLEAN Unknown
 );
 
+NTSYSAPI
 NTSTATUS
-STDCALL
-RtlGetDaclSecurityDescriptor (
-    IN PSECURITY_DESCRIPTOR SecurityDescriptor,
-    OUT PBOOLEAN            DaclPresent,
-    OUT PACL                *Dacl,
-    OUT PBOOLEAN            DaclDefaulted
+NTAPI
+RtlQueryEnvironmentVariable_U(
+    PWSTR Environment,
+    PUNICODE_STRING Name,
+    PUNICODE_STRING Value
 );
 
+NTSYSAPI
 NTSTATUS
-STDCALL
-RtlGetGroupSecurityDescriptor (
-    IN PSECURITY_DESCRIPTOR SecurityDescriptor,
-    OUT PSID                *Group,
-    OUT PBOOLEAN            GroupDefaulted
-);
+NTAPI
+RtlSetCurrentDirectory_U(PUNICODE_STRING name);
 
+NTSYSAPI
 NTSTATUS
-STDCALL
-RtlGetOwnerSecurityDescriptor (
-    IN PSECURITY_DESCRIPTOR SecurityDescriptor,
-    OUT PSID                *Owner,
-    OUT PBOOLEAN            OwnerDefaulted
+NTAPI
+RtlSetEnvironmentVariable(
+    PWSTR *Environment,
+    PUNICODE_STRING Name,
+    PUNICODE_STRING Value
 );
 
-ULONG
-STDCALL
-RtlImageRvaToVa (
-    PIMAGE_NT_HEADERS NtHeader,
-    PVOID BaseAddress,
-    ULONG Rva,
-    PIMAGE_SECTION_HEADER *SectionHeader
+/*
+ * Critical Section/Resource Functions
+ */
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlDeleteCriticalSection (
+    IN PRTL_CRITICAL_SECTION CriticalSection
 );
 
-PIMAGE_NT_HEADERS
-STDCALL
-RtlImageNtHeader (
-    IN PVOID BaseAddress
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlEnterCriticalSection(
+    IN PRTL_CRITICAL_SECTION CriticalSection
 );
 
-PIMAGE_SECTION_HEADER
-STDCALL
-RtlImageRvaToSection (
-    PIMAGE_NT_HEADERS NtHeader,
-    PVOID BaseAddress,
-    ULONG Rva
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlInitializeCriticalSection(
+    IN PRTL_CRITICAL_SECTION CriticalSection
 );
 
+NTSYSAPI
 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
-RtlCharToInteger (
-       PCSZ    String,
-       ULONG   Base,
-       PULONG  Value
-       );
-
-    
-USHORT FASTCALL
-RtlUshortByteSwap (IN USHORT Source);
+NTAPI
+RtlInitializeCriticalSectionAndSpinCount(
+    IN PRTL_CRITICAL_SECTION CriticalSection,
+    IN ULONG SpinCount
+);
 
-ULONG
-STDCALL
-RtlIsTextUnicode (
-       PVOID   Buffer,
-       ULONG   Length,
-       ULONG   *Flags
-       );
-        
+NTSYSAPI
 NTSTATUS
-STDCALL
-RtlInitializeSid (
-    IN OUT PSID                     Sid,
-    IN PSID_IDENTIFIER_AUTHORITY    IdentifierAuthority,
-    IN UCHAR                        SubAuthorityCount
+NTAPI
+RtlLeaveCriticalSection(
+    IN PRTL_CRITICAL_SECTION CriticalSection
 );
 
+NTSYSAPI
 VOID
-STDCALL
-RtlInitNlsTables (
-    IN  PUSHORT AnsiTableBase,
-    IN  PUSHORT OemTableBase,
-    IN  PUSHORT CaseTableBase,
-    OUT PNLSTABLEINFO NlsTable
+NTAPI
+RtlpUnWaitCriticalSection(
+    IN PRTL_CRITICAL_SECTION CriticalSection
 );
 
-VOID
-STDCALL
-RtlInitCodePageTable (
-       IN      PUSHORT         TableBase,
-       OUT     PCPTABLEINFO    CodePageTable
-       );
-    
-NTSTATUS
-STDCALL
-RtlGetSaclSecurityDescriptor (
-    PSECURITY_DESCRIPTOR SecurityDescriptor,
-    PBOOLEAN SaclPresent,
-    PACL* Sacl,
-    PBOOLEAN SaclDefaulted
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlpWaitForCriticalSection(
+    IN PRTL_CRITICAL_SECTION CriticalSection
 );
 
-NTSTATUS
-STDCALL
-RtlQueryAtomInAtomTable (
-    IN PRTL_ATOM_TABLE AtomTable,
-    IN RTL_ATOM Atom,
-    IN OUT PULONG RefCount OPTIONAL,
-    IN OUT PULONG PinCount OPTIONAL,
-    IN OUT PWSTR AtomName OPTIONAL,
-    IN OUT PULONG NameLength OPTIONAL
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlAcquireResourceExclusive(
+    IN PRTL_RESOURCE Resource,
+    IN BOOLEAN Wait
 );
-    
-NTSTATUS
-STDCALL
-RtlLookupAtomInAtomTable (
-    IN PRTL_ATOM_TABLE AtomTable,
-    IN PWSTR AtomName,
-    OUT PRTL_ATOM Atom
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlAcquireResourceShared(
+    IN PRTL_RESOURCE Resource,
+    IN BOOLEAN Wait
 );
 
+NTSYSAPI
 VOID
-STDCALL
-RtlResetRtlTranslations (
-    IN PNLSTABLEINFO NlsTable
+NTAPI
+RtlConvertExclusiveToShared(
+    IN PRTL_RESOURCE Resource
 );
-                          
+
+NTSYSAPI
 VOID
-STDCALL
-RtlRaiseException (
-  IN PEXCEPTION_RECORD ExceptionRecord
+NTAPI
+RtlConvertSharedToExclusive(
+    IN PRTL_RESOURCE Resource
 );
 
+NTSYSAPI
 VOID
-STDCALL
-RtlInitUnicodeString(
-  IN OUT PUNICODE_STRING  DestinationString,
-  IN PCWSTR  SourceString);
+NTAPI
+RtlDeleteResource(
+    IN PRTL_RESOURCE Resource
+);
 
+NTSYSAPI
 VOID
-STDCALL
-RtlInitAnsiString (
-       PANSI_STRING    DestinationString,
-       PCSZ            SourceString
-       );
+NTAPI
+RtlDumpResource(
+    IN PRTL_RESOURCE Resource
+);
 
-BOOLEAN
-STDCALL
-RtlIsNameLegalDOS8Dot3 (
-    IN PUNICODE_STRING UnicodeName,
-    IN PANSI_STRING    AnsiName,
-    PBOOLEAN           Unknown
+NTSYSAPI
+VOID
+NTAPI
+RtlInitializeResource(
+    IN PRTL_RESOURCE Resource
 );
 
-ULONG
-STDCALL
-RtlLengthRequiredSid (
-    IN UCHAR SubAuthorityCount
+NTSYSAPI
+VOID
+NTAPI
+RtlReleaseResource(
+    IN PRTL_RESOURCE Resource
 );
 
-ULONG
-STDCALL
-RtlLengthSid (
-    IN PSID Sid
+/*
+ * Compression Functions
+ */
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlCompressBuffer(
+    IN USHORT CompressionFormatAndEngine,
+    IN PUCHAR UncompressedBuffer,
+    IN ULONG UncompressedBufferSize,
+    OUT PUCHAR CompressedBuffer,
+    IN ULONG CompressedBufferSize,
+    IN ULONG UncompressedChunkSize,
+    OUT PULONG FinalCompressedSize,
+    IN PVOID WorkSpace
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlDecompressBuffer(
+    IN USHORT CompressionFormat,
+    OUT PUCHAR UncompressedBuffer,
+    IN ULONG UncompressedBufferSize,
+    IN PUCHAR CompressedBuffer,
+    IN ULONG CompressedBufferSize,
+    OUT PULONG FinalUncompressedSize
 );
 
-ULONG
-STDCALL
-RtlNtStatusToDosError (
-    IN NTSTATUS Status
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlGetCompressionWorkSpaceSize(
+    IN USHORT CompressionFormatAndEngine,
+    OUT PULONG CompressBufferWorkSpaceSize,
+    OUT PULONG CompressFragmentWorkSpaceSize
 );
 
-NTSTATUS STDCALL
-RtlFormatCurrentUserKeyPath (IN OUT PUNICODE_STRING KeyPath);
+/*
+ * Debug Info Functions
+ */
+NTSYSAPI
+PDEBUG_BUFFER
+NTAPI
+RtlCreateQueryDebugBuffer(
+    IN ULONG Size,
+    IN BOOLEAN EventPair
+);
 
+NTSYSAPI
 NTSTATUS
-STDCALL
-RtlQueryEnvironmentVariable_U (
-       PWSTR           Environment,
-       PUNICODE_STRING Name,
-       PUNICODE_STRING Value
-       );
+NTAPI
+RtlDestroyQueryDebugBuffer(IN PDEBUG_BUFFER DebugBuffer);
 
+NTSYSAPI
 NTSTATUS
-STDCALL
-RtlQueryTimeZoneInformation (
-       IN OUT LPTIME_ZONE_INFORMATION TimeZoneInformation
+NTAPI
+RtlQueryProcessDebugInformation(
+    IN ULONG ProcessId,
+    IN ULONG DebugInfoClassMask,
+    IN OUT PDEBUG_BUFFER DebugBuffer
+);
+
+/*
+ * Bitmap Functions
+ */
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlAreBitsClear(
+    IN PRTL_BITMAP BitMapHeader,
+    IN ULONG StartingIndex,
+    IN ULONG Length
+);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlAreBitsSet(
+    IN PRTL_BITMAP BitMapHeader,
+    IN ULONG StartingIndex,
+    IN ULONG Length
+);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlClearBits(
+    IN PRTL_BITMAP BitMapHeader,
+    IN ULONG StartingIndex,
+    IN ULONG NumberToClear
+);
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlFindClearBits(
+    IN PRTL_BITMAP BitMapHeader,
+    IN ULONG NumberToFind,
+    IN ULONG HintIndex
 );
 
-VOID STDCALL RtlRaiseStatus(NTSTATUS Status);
-       
+NTSYSAPI
+ULONG
+NTAPI
+RtlFindClearBitsAndSet(
+    IN PRTL_BITMAP BitMapHeader,
+    IN ULONG NumberToFind,
+    IN ULONG HintIndex
+);
+
+NTSYSAPI
 VOID
-STDCALL
-RtlSecondsSince1970ToTime (
-    IN ULONG            SecondsSince1970,
-    OUT PLARGE_INTEGER  Time
+NTAPI
+RtlInitializeBitMap(
+    IN PRTL_BITMAP BitMapHeader,
+    IN PULONG BitMapBuffer,
+    IN ULONG SizeOfBitMap
 );
 
+NTSYSAPI
 VOID
-STDCALL
+NTAPI
 RtlSetBits (
-    PRTL_BITMAP BitMapHeader,
-    ULONG StartingIndex,
-    ULONG NumberToSet
+    IN PRTL_BITMAP BitMapHeader,
+    IN ULONG StartingIndex,
+    IN ULONG NumberToSet
 );
-    
-#if (VER_PRODUCTBUILD >= 2195)
 
+/*
+ * Timer Functions
+ */
+NTSYSAPI
 NTSTATUS
-STDCALL
-RtlSelfRelativeToAbsoluteSD (
-    IN PSECURITY_DESCRIPTOR     SelfRelativeSD,
-    OUT PSECURITY_DESCRIPTOR    AbsoluteSD,
-    IN PULONG                   AbsoluteSDSize,
-    IN PACL                     Dacl,
-    IN PULONG                   DaclSize,
-    IN PACL                     Sacl,
-    IN PULONG                   SaclSize,
-    IN PSID                     Owner,
-    IN PULONG                   OwnerSize,
-    IN PSID                     PrimaryGroup,
-    IN PULONG                   PrimaryGroupSize
-);
-
-#endif /* (VER_PRODUCTBUILD >= 2195) */
+NTAPI
+RtlCreateTimer(
+    HANDLE TimerQueue,
+    PHANDLE phNewTimer,
+    WAITORTIMERCALLBACKFUNC Callback,
+    PVOID Parameter,
+    ULONG DueTime,
+    ULONG Period,
+    ULONG Flags
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlCreateTimerQueue(PHANDLE TimerQueue);
 
+NTSYSAPI
 NTSTATUS
-STDCALL
-RtlSetDaclSecurityDescriptor (
-    PSECURITY_DESCRIPTOR SecurityDescriptor,
-    BOOLEAN DaclPresent,
-    PACL Dacl,
-    BOOLEAN DaclDefaulted
+NTAPI
+RtlDeleteTimer(
+    HANDLE TimerQueue,
+    HANDLE Timer,
+    HANDLE CompletionEvent
 );
 
+NTSYSAPI
 NTSTATUS
-STDCALL
-RtlSetGroupSecurityDescriptor (
-    IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
-    IN PSID                     Group,
-    IN BOOLEAN                  GroupDefaulted
+NTAPI
+RtlUpdateTimer(
+    HANDLE TimerQueue,
+    HANDLE Timer,
+    ULONG DueTime,
+    ULONG Period
 );
 
+NTSYSAPI
 NTSTATUS
-STDCALL
-RtlSetOwnerSecurityDescriptor (
-    IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
-    IN PSID                     Owner,
-    IN BOOLEAN                  OwnerDefaulted
+NTAPI
+RtlDeleteTimerQueueEx(
+    HANDLE TimerQueue,
+    HANDLE CompletionEvent
 );
 
+NTSYSAPI
 NTSTATUS
-STDCALL
-RtlSetSaclSecurityDescriptor (
-    IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
-    IN BOOLEAN                  SaclPresent,
-    IN PACL                     Sacl,
-    IN BOOLEAN                  SaclDefaulted
+NTAPI
+RtlDeleteTimerQueue(HANDLE TimerQueue);
+
+/*
+ * Debug Functions
+ */
+ULONG
+__cdecl
+DbgPrint(
+    IN PCH  Format,
+    IN ...
 );
 
-PUCHAR
-STDCALL
-RtlSubAuthorityCountSid (
-    IN PSID Sid
+VOID
+NTAPI
+DbgBreakPoint(VOID);
+
+/*
+ * Handle Table Functions
+ */
+NTSYSAPI
+PRTL_HANDLE_TABLE_ENTRY
+NTAPI
+RtlAllocateHandle(
+    IN PRTL_HANDLE_TABLE HandleTable,
+    IN OUT PULONG Index
 );
 
-PULONG
-STDCALL
-RtlSubAuthoritySid (
-    IN PSID    Sid,
-    IN ULONG   SubAuthority
-);
-
-NTSTATUS
-STDCALL
-RtlUpcaseUnicodeStringToCountedOemString (
-       IN OUT  POEM_STRING     DestinationString,
-       IN      PUNICODE_STRING SourceString,
-       IN      BOOLEAN         AllocateDestinationString
-       );
-    
-NTSTATUS STDCALL
-RtlSetTimeZoneInformation (IN OUT LPTIME_ZONE_INFORMATION TimeZoneInformation);
-
-NTSTATUS
-STDCALL
-RtlUpcaseUnicodeString (
-       IN OUT  PUNICODE_STRING DestinationString,
-       IN      PCUNICODE_STRING        SourceString,
-       IN      BOOLEAN         AllocateDestinationString
-       );
-
-NTSTATUS
-STDCALL
-RtlUnicodeStringToOemString (
-       IN OUT  POEM_STRING     DestinationString,
-       IN      PUNICODE_STRING SourceString,
-       IN      BOOLEAN         AllocateDestinationString
-       );
-       
-NTSTATUS
-STDCALL
-RtlUpcaseUnicodeToOemN (
-       PCHAR   OemString,
-       ULONG   OemSize,
-       PULONG  ResultSize,
-       PWCHAR  UnicodeString,
-       ULONG   UnicodeSize
-       );
-       
-       
-NTSTATUS STDCALL
-RtlLargeIntegerToChar (
-       IN      PLARGE_INTEGER  Value,
-       IN      ULONG           Base,
-       IN      ULONG           Length,
-       IN OUT  PCHAR           String
-       );
-    
-    NTSTATUS
-STDCALL
-RtlVerifyVersionInfo(
-       IN PRTL_OSVERSIONINFOEXW VersionInfo,
-       IN ULONG TypeMask,
-       IN ULONGLONG  ConditionMask
-       );
-    
-NTSTATUS
-STDCALL
-RtlGetVersion(
-  IN OUT PRTL_OSVERSIONINFOW  lpVersionInformation);
-       
-BOOLEAN 
-STDCALL
-RtlCreateUnicodeStringFromAsciiz (OUT PUNICODE_STRING Destination,
-                                 IN PCSZ Source);
-       
-                  
-BOOLEAN 
-STDCALL
-RtlTimeFieldsToTime (
-    PTIME_FIELDS TimeFields,
-    PLARGE_INTEGER Time
+NTSYSAPI
+VOID
+NTAPI
+RtlDestroyHandleTable(IN PRTL_HANDLE_TABLE HandleTable);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlFreeHandle(
+    IN PRTL_HANDLE_TABLE HandleTable,
+    IN PRTL_HANDLE_TABLE_ENTRY Handle
 );
 
+NTSYSAPI
 VOID
-STDCALL
-RtlTimeToTimeFields (
-    PLARGE_INTEGER Time,
-    PTIME_FIELDS TimeFields
+NTAPI
+RtlInitializeHandleTable(
+    IN ULONG TableSize,
+    IN ULONG HandleSize,
+    IN PRTL_HANDLE_TABLE HandleTable
+);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlIsValidHandle(
+    IN PRTL_HANDLE_TABLE HandleTable,
+    IN PRTL_HANDLE_TABLE_ENTRY Handle
+);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlIsValidIndexHandle(
+    IN PRTL_HANDLE_TABLE HandleTable,
+    IN ULONG Index,
+    OUT PRTL_HANDLE_TABLE_ENTRY *Handle
+);
+
+/*
+ * PE Functions
+ */
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlFindMessage(
+    IN PVOID BaseAddress,
+    IN ULONG Type,
+    IN ULONG Language,
+    IN ULONG MessageId,
+    OUT PRTL_MESSAGE_RESOURCE_ENTRY *MessageResourceEntry
+);
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlGetNtGlobalFlags(VOID);
+
+NTSYSAPI
+PVOID
+NTAPI
+RtlImageDirectoryEntryToData(
+    PVOID  BaseAddress,
+    BOOLEAN bFlag,
+    ULONG Directory,
+    PULONG Size
+);
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlImageRvaToVa(
+    PIMAGE_NT_HEADERS NtHeader,
+    PVOID BaseAddress,
+    ULONG Rva,
+    PIMAGE_SECTION_HEADER *SectionHeader
+);
+
+NTSYSAPI
+PIMAGE_NT_HEADERS
+NTAPI
+RtlImageNtHeader(IN PVOID BaseAddress);
+
+NTSYSAPI
+PIMAGE_SECTION_HEADER
+NTAPI
+RtlImageRvaToSection(
+    PIMAGE_NT_HEADERS NtHeader,
+    PVOID BaseAddress,
+    ULONG Rva
+);
+
+/*
+ * Registry Functions
+ */
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlCheckRegistryKey(
+    ULONG RelativeTo,
+    PWSTR Path
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlFormatCurrentUserKeyPath(IN OUT PUNICODE_STRING KeyPath);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlpNtOpenKey(
+    OUT HANDLE KeyHandle,
+    IN ACCESS_MASK DesiredAccess,
+    IN POBJECT_ATTRIBUTES ObjectAttributes,
+    IN ULONG Unused
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlOpenCurrentUser(
+    IN ACCESS_MASK DesiredAccess,
+    OUT PHANDLE KeyHandle
 );
 
+NTSYSAPI
 NTSTATUS
-STDCALL
-RtlQueryRegistryValues (
+NTAPI
+RtlQueryRegistryValues(
     IN ULONG RelativeTo,
     IN PCWSTR Path,
     IN PRTL_QUERY_REGISTRY_TABLE QueryTable,
@@ -1274,9 +1953,10 @@ RtlQueryRegistryValues (
     IN PVOID Environment
 );
 
+NTSYSAPI
 NTSTATUS
-STDCALL
-RtlWriteRegistryValue (
+NTAPI
+RtlWriteRegistryValue(
     ULONG RelativeTo,
     PCWSTR Path,
     PCWSTR ValueName,
@@ -1284,126 +1964,192 @@ RtlWriteRegistryValue (
     PVOID ValueData,
     ULONG ValueLength
 );
-             
+
+/*
+ * NLS Functions
+ */
+NTSYSAPI
+VOID
+NTAPI
+RtlInitNlsTables(
+    IN PUSHORT AnsiTableBase,
+    IN PUSHORT OemTableBase,
+    IN PUSHORT CaseTableBase,
+    OUT PNLSTABLEINFO NlsTable
+);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlInitCodePageTable(
+    IN PUSHORT TableBase,
+    OUT PCPTABLEINFO CodePageTable
+);
+
+NTSYSAPI
 VOID
-STDCALL
-RtlUnwind (
-  PEXCEPTION_REGISTRATION RegistrationFrame,
-  PVOID ReturnAddress,
-  PEXCEPTION_RECORD ExceptionRecord,
-  DWORD EaxValue
-);
-
-HANDLE STDCALL
-RtlDestroyHeap (HANDLE hheap);
-
-PVOID STDCALL
-RtlReAllocateHeap (
-       HANDLE Heap,
-       ULONG Flags,
-       PVOID Ptr,
-       ULONG Size
-       );
-BOOLEAN STDCALL
-RtlLockHeap (IN HANDLE Heap);
-
-BOOLEAN STDCALL
-RtlUnlockHeap (IN HANDLE Heap);
-
-ULONG STDCALL
-RtlSizeHeap(
-       IN PVOID HeapHandle, 
-       IN ULONG Flags, 
-       IN PVOID MemoryPointer
-       ); 
-    
-BOOLEAN STDCALL
-RtlValidateHeap (
-       HANDLE Heap,
-       ULONG   Flags,
-       PVOID   pmem
-       );
-    
+NTAPI
+RtlResetRtlTranslations(IN PNLSTABLEINFO NlsTable);
+
+/*
+ * Misc conversion functions
+ */
+#if defined(NTOS_MODE_USER) && !defined(NO_RTL_INLINES)
+static __inline
+LARGE_INTEGER
+NTAPI_INLINE
+RtlConvertLongToLargeInteger(LONG SignedInteger)
+{
+    LARGE_INTEGER Result;
+
+    Result.QuadPart = SignedInteger;
+    return Result;
+}
+
+static __inline
+LARGE_INTEGER
+NTAPI_INLINE
+RtlEnlargedIntegerMultiply(
+    LONG Multiplicand,
+    LONG Multiplier)
+{
+    LARGE_INTEGER Product;
+
+    Product.QuadPart = (LONGLONG)Multiplicand * (ULONGLONG)Multiplier;
+    return Product;
+}
+
+static __inline
+ULONG
+NTAPI_INLINE
+RtlEnlargedUnsignedDivide(
+    IN ULARGE_INTEGER Dividend,
+    IN ULONG Divisor,
+    IN PULONG Remainder OPTIONAL)
+{
+    ULONG Quotient;
+
+    Quotient = (ULONG)(Dividend.QuadPart / Divisor);
+    if (Remainder) {
+        *Remainder = (ULONG)(Dividend.QuadPart % Divisor);
+    }
+
+    return Quotient;
+}
+
+static __inline
+LARGE_INTEGER
+NTAPI_INLINE
+RtlEnlargedUnsignedMultiply(
+    ULONG Multiplicand,
+    ULONG Multiplier)
+{
+    LARGE_INTEGER Product;
+
+    Product.QuadPart = (ULONGLONG)Multiplicand * (ULONGLONG)Multiplier;
+    return Product;
+}
+#endif
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlUniform(PULONG Seed);
+
+/*
+ * Network Functions
+ */
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlIpv4StringToAddressW(
+    IN LPWSTR IpString,
+    IN ULONG Base,
+    OUT PULONG PtrToIpAddr,
+    OUT PULONG IpAddr
+);
+
+/*
+ * Time Functions
+ */
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlQueryTimeZoneInformation(LPTIME_ZONE_INFORMATION TimeZoneInformation);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlSecondsSince1970ToTime(
+    IN ULONG SecondsSince1970,
+    OUT PLARGE_INTEGER Time
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlSetTimeZoneInformation(LPTIME_ZONE_INFORMATION TimeZoneInformation);
+
+NTSYSAPI
 BOOLEAN
-STDCALL
-RtlValidSid (
-    IN PSID Sid
+NTAPI
+RtlTimeFieldsToTime(
+    PTIME_FIELDS TimeFields,
+    PLARGE_INTEGER Time
+);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlTimeToTimeFields(
+    PLARGE_INTEGER Time,
+    PTIME_FIELDS TimeFields
+);
+
+/*
+ * Version Functions
+ */
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlVerifyVersionInfo(
+    IN PRTL_OSVERSIONINFOEXW VersionInfo,
+    IN ULONG TypeMask,
+    IN ULONGLONG ConditionMask
 );
 
-BOOLEAN 
-STDCALL
-RtlValidAcl (
-    PACL Acl
-);
-
-/*  functions exported from NTOSKRNL.EXE which are considered RTL  */
-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);
-char * _strlwr(char *x);
-int _strnicmp(const char *s1, const char *s2, size_t n);
-char * _strnset(char* szToFill, int szFill, size_t sizeMaxFill);
-char * _strrev(char *s);
-char * _strset(char* szToFill, int szFill);
-char * _strupr(char *x);
-int _vsnprintf(char *buf, size_t cnt, const char *fmt, va_list args);
-int _wcsicmp (const wchar_t* cs, const wchar_t* ct);
-wchar_t * _wcslwr (wchar_t *x);
-int _wcsnicmp (const wchar_t * cs,const wchar_t * ct,size_t count);
-wchar_t* _wcsnset (wchar_t* wsToFill, wchar_t wcFill, size_t sizeMaxFill);
-wchar_t * _wcsrev(wchar_t *s);
-wchar_t *_wcsupr(wchar_t *x);
-
-int atoi(const char *str);
-long atol(const char *str);
-int isdigit(int c);
-int islower(int c);
-int isprint(int c);
-int isspace(int c);
-int isupper(int c);
-int isxdigit(int c);
-size_t mbstowcs (wchar_t *wcstr, const char *mbstr, size_t count);
-int mbtowc (wchar_t *wchar, const char *mbchar, size_t count);
-void * memchr(const void *s, int c, size_t n);
-void * memcpy(void *to, const void *from, size_t count);
-void * memmove(void *dest,const void *src, size_t count);
-void * memset(void *src, int val, size_t count);
-
-int rand(void);
-int sprintf(char * buf, const char *fmt, ...);
-void srand(unsigned seed);
-char * strcat(char *s, const char *append);
-char * strchr(const char *s, int c);
-int strcmp(const char *s1, const char *s2);
-char * strcpy(char *to, const char *from);
-size_t strlen(const char *str);
-char * strncat(char *dst, const char *src, size_t n);
-int strncmp(const char *s1, const char *s2, size_t n);
-char *strncpy(char *dst, const char *src, size_t n);
-char *strrchr(const char *s, int c);
-size_t strspn(const char *s1, const char *s2);
-char *strstr(const char *s, const char *find);
-int swprintf(wchar_t *buf, const wchar_t *fmt, ...);
-int tolower(int c);
-int toupper(int c);
-wchar_t towlower(wchar_t c);
-wchar_t towupper(wchar_t c);
-int vsprintf(char *buf, const char *fmt, va_list args);
-wchar_t * wcscat(wchar_t *dest, const wchar_t *src);
-wchar_t * wcschr(const wchar_t *str, wchar_t ch);
-int wcscmp(const wchar_t *cs, const wchar_t *ct);
-wchar_t* wcscpy(wchar_t* str1, const wchar_t* str2);
-size_t wcscspn(const wchar_t *str,const wchar_t *reject);
-size_t wcslen(const wchar_t *s);
-wchar_t * wcsncat(wchar_t *dest, const wchar_t *src, size_t count);
-int wcsncmp(const wchar_t *cs, const wchar_t *ct, size_t count);
-wchar_t * wcsncpy(wchar_t *dest, const wchar_t *src, size_t count);
-wchar_t * wcsrchr(const wchar_t *str, wchar_t ch);
-size_t wcsspn(const wchar_t *str,const wchar_t *accept);
-wchar_t *wcsstr(const wchar_t *s,const wchar_t *b);
-size_t wcstombs (char *mbstr, const wchar_t *wcstr, size_t count);
-int wctomb (char *mbchar, wchar_t wchar);
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlGetVersion(IN OUT PRTL_OSVERSIONINFOW lpVersionInformation);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlGetNtProductType(OUT PNT_PRODUCT_TYPE ProductType);
+
+static __inline struct _PEB* NtCurrentPeb (void) 
+{
+    struct _PEB * pPeb;
+
+#if defined(__GNUC__)
+
+    __asm__ __volatile__
+    (
+      "movl %%fs:0x30, %0\n" /* fs:30h == Teb->Peb */
+      : "=r" (pPeb) /* can't have two memory operands */
+      : /* no inputs */
+    );
+
+#elif defined(_MSC_VER)
 
+    __asm mov eax, fs:0x30;
+    __asm mov pPeb, eax
+
+#else
+#error Unknown compiler for inline assembler
+#endif
+
+    return pPeb;
+}
 #endif