- Fix KeAttackProcess, KeStackAttachProcess, KeUnstackDetachProcess and KeDetachProce...
[reactos.git] / reactos / include / ndk / rtlfuncs.h
index ef39193..7d122be 100644 (file)
@@ -1,36 +1,52 @@
-/*
- * PROJECT:         ReactOS Native Headers
- * FILE:            include/ndk/rtlfuncs.h
- * PURPOSE:         Prototypes for Runtime Library Functions not defined in DDK/IFS
- * PROGRAMMER:      Alex Ionescu (alex@relsoft.net)
- * UPDATE HISTORY:
- *                  Created 06/10/04
- */
+/*++ NDK Version: 0095
+
+Copyright (c) Alex Ionescu.  All rights reserved.
+
+Header Name:
+
+    rtlfuncs.h
+
+Abstract:
+
+    Function definitions for the Run-Time Library
+
+Author:
+
+    Alex Ionescu (alex.ionescu@reactos.com)   06-Oct-2004
+
+--*/
+
 #ifndef _RTLFUNCS_H
 #define _RTLFUNCS_H
 
-/* DEPENDENCIES **************************************************************/
-#include <ndk/rtltypes.h>
-#include <ndk/pstypes.h>
-
-/* PROTOTYPES ****************************************************************/
+//
+// Dependencies
+//
+#include <umtypes.h>
+#include <ntnls.h>
+#include <extypes.h>
+#include <rtltypes.h>
 
-/* FIXME: FILE NEEDS SOME ALPHABETIZING AND REGROUP */
+#ifdef NTOS_MODE_USER
 
-/* List Macros */
-static __inline 
+//
+// List Functions
+//
+FORCEINLINE
 VOID
 InitializeListHead(
-    IN PLIST_ENTRY  ListHead)
+    IN PLIST_ENTRY ListHead
+)
 {
     ListHead->Flink = ListHead->Blink = ListHead;
 }
 
-static __inline 
+FORCEINLINE
 VOID
 InsertHeadList(
-    IN PLIST_ENTRY  ListHead,
-    IN PLIST_ENTRY  Entry)
+    IN PLIST_ENTRY ListHead,
+    IN PLIST_ENTRY Entry
+)
 {
     PLIST_ENTRY OldFlink;
     OldFlink = ListHead->Flink;
@@ -40,11 +56,12 @@ InsertHeadList(
     ListHead->Flink = Entry;
 }
 
-static __inline 
+FORCEINLINE
 VOID
 InsertTailList(
-    IN PLIST_ENTRY  ListHead,
-    IN PLIST_ENTRY  Entry)
+    IN PLIST_ENTRY ListHead,
+    IN PLIST_ENTRY Entry
+)
 {
     PLIST_ENTRY OldBlink;
     OldBlink = ListHead->Blink;
@@ -54,23 +71,42 @@ InsertTailList(
     ListHead->Blink = Entry;
 }
 
-#define IsListEmpty(ListHead) \
-    ((ListHead)->Flink == (ListHead))
+BOOLEAN
+FORCEINLINE
+IsListEmpty(
+    IN const LIST_ENTRY * ListHead
+)
+{
+    return (BOOLEAN)(ListHead->Flink == ListHead);
+}
 
-#define PopEntryList(ListHead) \
-    (ListHead)->Next; \
-    { \
-        PSINGLE_LIST_ENTRY _FirstEntry; \
-        _FirstEntry = (ListHead)->Next; \
-        if (_FirstEntry != NULL) \
-            (ListHead)->Next = _FirstEntry->Next; \
+FORCEINLINE
+PSINGLE_LIST_ENTRY
+PopEntryList(
+    PSINGLE_LIST_ENTRY ListHead
+)
+{
+    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); \
+    return FirstEntry;
+}
+
+FORCEINLINE
+VOID
+PushEntryList(
+    PSINGLE_LIST_ENTRY ListHead,
+    PSINGLE_LIST_ENTRY Entry
+)
+{
+    Entry->Next = ListHead->Next;
+    ListHead->Next = Entry;
+}
 
-static __inline 
+FORCEINLINE
 BOOLEAN
 RemoveEntryList(
     IN PLIST_ENTRY  Entry)
@@ -82,11 +118,11 @@ RemoveEntryList(
     OldBlink = Entry->Blink;
     OldFlink->Blink = OldBlink;
     OldBlink->Flink = OldFlink;
-    return (OldFlink == OldBlink);
+    return (BOOLEAN)(OldFlink == OldBlink);
 }
 
-static __inline 
-PLIST_ENTRY 
+FORCEINLINE
+PLIST_ENTRY
 RemoveHeadList(
     IN PLIST_ENTRY  ListHead)
 {
@@ -100,7 +136,7 @@ RemoveHeadList(
     return Entry;
 }
 
-static __inline 
+FORCEINLINE
 PLIST_ENTRY
 RemoveTailList(
     IN PLIST_ENTRY  ListHead)
@@ -115,111 +151,116 @@ RemoveTailList(
     return Entry;
 }
 
-#define IsFirstEntry(ListHead, Entry) \
-    ((ListHead)->Flink == Entry)
-  
-#define IsLastEntry(ListHead, Entry) \
-    ((ListHead)->Blink == Entry)
-    
-#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));\
-}
+//
+// LUID Macros
+//
+#define RtlEqualLuid(L1, L2) (((L1)->HighPart == (L2)->HighPart) && \
+                              ((L1)->LowPart  == (L2)->LowPart))
 
-#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));\
-}
+#endif
 
-#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));\
-}
+//
+// RTL Splay Tree Functions
+//
+NTSYSAPI
+PRTL_SPLAY_LINKS
+NTAPI
+RtlSplay(PRTL_SPLAY_LINKS Links);
 
-#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));\
-}
+NTSYSAPI
+PRTL_SPLAY_LINKS
+NTAPI
+RtlDelete(PRTL_SPLAY_LINKS Links);
 
-/*
- * Constant String Macro
- */
-#define RTL_CONSTANT_STRING(__SOURCE_STRING__) \
-{ \
- sizeof(__SOURCE_STRING__) - sizeof((__SOURCE_STRING__)[0]), \
- sizeof(__SOURCE_STRING__), \
- (__SOURCE_STRING__) \
-}
+NTSYSAPI
+VOID
+NTAPI
+RtlDeleteNoSplay(
+    PRTL_SPLAY_LINKS Links,
+    PRTL_SPLAY_LINKS *Root
+);
 
-/*
- * Debug Functions 
- */
+NTSYSAPI
+PRTL_SPLAY_LINKS
+NTAPI
+RtlSubtreeSuccessor(PRTL_SPLAY_LINKS Links);
 
-ULONG
-CDECL
-DbgPrint(
-    IN PCH  Format,
-    IN ...
-);
+NTSYSAPI
+PRTL_SPLAY_LINKS
+NTAPI
+RtlSubtreePredecessor(PRTL_SPLAY_LINKS Links);
 
-VOID
-STDCALL
-DbgBreakPoint(VOID);
+NTSYSAPI
+PRTL_SPLAY_LINKS
+NTAPI
+RtlRealSuccessor(PRTL_SPLAY_LINKS Links);
+
+NTSYSAPI
+PRTL_SPLAY_LINKS
+NTAPI
+RtlRealPredecessor(PRTL_SPLAY_LINKS Links);
+
+#define RtlIsLeftChild(Links) \
+    (RtlLeftChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
+
+#define RtlIsRightChild(Links) \
+    (RtlRightChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
+
+#define RtlRightChild(Links) \
+    ((PRTL_SPLAY_LINKS)(Links))->RightChild
+
+#define RtlIsRoot(Links) \
+    (RtlParent(Links) == (PRTL_SPLAY_LINKS)(Links))
+
+#define RtlLeftChild(Links) \
+    ((PRTL_SPLAY_LINKS)(Links))->LeftChild
 
+#define RtlParent(Links) \
+    ((PRTL_SPLAY_LINKS)(Links))->Parent
+
+#define RtlInitializeSplayLinks(Links)                  \
+    {                                                   \
+        PRTL_SPLAY_LINKS _SplayLinks;                   \
+        _SplayLinks = (PRTL_SPLAY_LINKS)(Links);        \
+        _SplayLinks->Parent = _SplayLinks;              \
+        _SplayLinks->LeftChild = NULL;                  \
+        _SplayLinks->RightChild = NULL;                 \
+    }
+
+#define RtlInsertAsLeftChild(ParentLinks,ChildLinks)    \
+    {                                                   \
+        PRTL_SPLAY_LINKS _SplayParent;                  \
+        PRTL_SPLAY_LINKS _SplayChild;                   \
+        _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
+        _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks);   \
+        _SplayParent->LeftChild = _SplayChild;          \
+        _SplayChild->Parent = _SplayParent;             \
+    }
+
+#define RtlInsertAsRightChild(ParentLinks,ChildLinks)   \
+    {                                                   \
+        PRTL_SPLAY_LINKS _SplayParent;                  \
+        PRTL_SPLAY_LINKS _SplayChild;                   \
+        _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
+        _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks);   \
+        _SplayParent->RightChild = _SplayChild;         \
+        _SplayChild->Parent = _SplayParent;             \
+    }
+
+//
+// Error and Exception Functions
+//
+NTSYSAPI
+PVOID
+NTAPI
+RtlAddVectoredExceptionHandler(
+    IN ULONG FirstHandler,
+    IN PVECTORED_EXCEPTION_HANDLER VectoredHandler
+);
+
+NTSYSAPI
 VOID
-STDCALL
+NTAPI
 RtlAssert(
     PVOID FailedAssertion,
     PVOID FileName,
@@ -227,64 +268,113 @@ RtlAssert(
     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
-STDCALL
+NTAPI
 RtlNtStatusToDosError(IN NTSTATUS Status);
 
+NTSYSAPI
 VOID
-STDCALL
+NTAPI
 RtlRaiseException(IN PEXCEPTION_RECORD ExceptionRecord);
 
-VOID 
-STDCALL 
+NTSYSAPI
+VOID
+NTAPI
 RtlRaiseStatus(NTSTATUS Status);
 
+NTSYSAPI
+LONG
+NTAPI
+RtlUnhandledExceptionFilter(struct _EXCEPTION_POINTERS* ExceptionInfo);
+
+NTSYSAPI
 VOID
-STDCALL
+NTAPI
 RtlUnwind(
-  PEXCEPTION_REGISTRATION RegistrationFrame,
-  PVOID ReturnAddress,
-  PEXCEPTION_RECORD ExceptionRecord,
-  DWORD EaxValue
+    IN PVOID TargetFrame OPTIONAL,
+    IN PVOID TargetIp OPTIONAL,
+    IN PEXCEPTION_RECORD ExceptionRecord OPTIONAL,
+    IN PVOID ReturnValue
 );
 
-/*
- * Heap Functions 
- */
+//
+// Heap Functions
+//
+NTSYSAPI
 PVOID
-STDCALL
+NTAPI
 RtlAllocateHeap(
     IN HANDLE HeapHandle,
     IN ULONG Flags,
     IN ULONG Size
 );
 
+NTSYSAPI
 PVOID
-STDCALL
+NTAPI
 RtlCreateHeap(
     IN ULONG Flags,
     IN PVOID BaseAddress OPTIONAL,
-    IN ULONG SizeToReserve OPTIONAL,
-    IN ULONG SizeToCommit OPTIONAL,
+    IN SIZE_T SizeToReserve OPTIONAL,
+    IN SIZE_T SizeToCommit OPTIONAL,
     IN PVOID Lock OPTIONAL,
-    IN PRTL_HEAP_DEFINITION Definition OPTIONAL
+    IN PRTL_HEAP_PARAMETERS Parameters OPTIONAL
 );
 
-HANDLE 
-STDCALL
+ULONG
+NTAPI
+RtlCompactHeap(
+    HANDLE heap,
+    ULONG flags
+);
+
+NTSYSAPI
+HANDLE
+NTAPI
 RtlDestroyHeap(HANDLE hheap);
 
+NTSYSAPI
 BOOLEAN
-STDCALL
+NTAPI
 RtlFreeHeap(
     IN HANDLE HeapHandle,
     IN ULONG Flags,
     IN PVOID P
 );
 
-PVOID 
-STDCALL
+ULONG
+NTAPI
+RtlGetProcessHeaps(
+    ULONG HeapCount,
+    HANDLE *HeapArray
+);
+
+PVOID
+NTAPI
 RtlReAllocateHeap(
     HANDLE Heap,
     ULONG Flags,
@@ -292,24 +382,24 @@ RtlReAllocateHeap(
     ULONG Size
 );
 
-BOOLEAN 
-STDCALL
+BOOLEAN
+NTAPI
 RtlLockHeap(IN HANDLE Heap);
 
-BOOLEAN 
-STDCALL
+BOOLEAN
+NTAPI
 RtlUnlockHeap(IN HANDLE Heap);
 
-ULONG 
-STDCALL
+ULONG
+NTAPI
 RtlSizeHeap(
-    IN PVOID HeapHandle, 
-    IN ULONG Flags, 
+    IN PVOID HeapHandle,
+    IN ULONG Flags,
     IN PVOID MemoryPointer
 );
-    
-BOOLEAN 
-STDCALL
+
+BOOLEAN
+NTAPI
 RtlValidateHeap(
     HANDLE Heap,
     ULONG Flags,
@@ -318,20 +408,21 @@ RtlValidateHeap(
 
 #define RtlGetProcessHeap() (NtCurrentPeb()->ProcessHeap)
 
-
-/*
- * Security Functions
- */
+//
+// Security Functions
+//
+NTSYSAPI
 NTSTATUS
-STDCALL
+NTAPI
 RtlAbsoluteToSelfRelativeSD(
     IN PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor,
-    IN OUT PSECURITY_DESCRIPTOR_RELATIVE SelfRelativeSecurityDescriptor,
+    IN OUT PSECURITY_DESCRIPTOR SelfRelativeSecurityDescriptor,
     IN PULONG BufferLength
 );
 
+NTSYSAPI
 NTSTATUS
-STDCALL
+NTAPI
 RtlAddAccessAllowedAce(
     PACL Acl,
     ULONG Revision,
@@ -339,18 +430,18 @@ RtlAddAccessAllowedAce(
     PSID Sid
 );
 
-NTSTATUS 
-STDCALL 
+NTSTATUS
+NTAPI
 RtlAddAccessAllowedAceEx(
     IN OUT PACL pAcl,
-    IN DWORD dwAceRevision,
-    IN DWORD AceFlags,
-    IN DWORD AccessMask,
+    IN ULONG dwAceRevision,
+    IN ULONG AceFlags,
+    IN ULONG AccessMask,
     IN PSID pSid
 );
 
-NTSTATUS 
-STDCALL
+NTSTATUS
+NTAPI
 RtlAddAccessDeniedAce(
     PACL Acl,
     ULONG Revision,
@@ -358,8 +449,8 @@ RtlAddAccessDeniedAce(
     PSID Sid
 );
 
-NTSTATUS 
-STDCALL
+NTSTATUS
+NTAPI
 RtlAddAccessDeniedAceEx(
     IN OUT PACL Acl,
     IN ULONG Revision,
@@ -368,8 +459,8 @@ RtlAddAccessDeniedAceEx(
     IN PSID Sid
 );
 
-NTSTATUS 
-STDCALL
+NTSTATUS
+NTAPI
 RtlAddAuditAccessAceEx(
     IN OUT PACL Acl,
     IN ULONG Revision,
@@ -380,18 +471,19 @@ RtlAddAuditAccessAceEx(
     IN BOOLEAN Failure
 );
 
-NTSTATUS 
-STDCALL
+NTSYSAPI
+NTSTATUS
+NTAPI
 RtlAddAce(
     PACL Acl,
-    ULONG Revision,
-    ULONG StartingIndex,
-    PACE AceList,
+    ULONG AceRevision,
+    ULONG StartingAceIndex,
+    PVOID AceList,
     ULONG AceListLength
 );
 
-NTSTATUS 
-STDCALL
+NTSTATUS
+NTAPI
 RtlAddAuditAccessAce(
     PACL Acl,
     ULONG Revision,
@@ -400,9 +492,19 @@ RtlAddAuditAccessAce(
     BOOLEAN Success,
     BOOLEAN Failure
 );
-          
+
+NTSTATUS
+NTAPI
+RtlAdjustPrivilege(
+    IN ULONG Privilege,
+    IN BOOLEAN NewValue,
+    IN BOOLEAN ForThread,
+    OUT PBOOLEAN OldValue
+);
+
+NTSYSAPI
 NTSTATUS
-STDCALL
+NTAPI
 RtlAllocateAndInitializeSid(
     IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority,
     IN UCHAR SubAuthorityCount,
@@ -417,37 +519,38 @@ RtlAllocateAndInitializeSid(
     OUT PSID *Sid
 );
 
-BOOLEAN 
-STDCALL
+BOOLEAN
+NTAPI
 RtlAreAllAccessesGranted(
     ACCESS_MASK GrantedAccess,
     ACCESS_MASK DesiredAccess
 );
 
-BOOLEAN 
-STDCALL
+BOOLEAN
+NTAPI
 RtlAreAnyAccessesGranted(
     ACCESS_MASK GrantedAccess,
     ACCESS_MASK DesiredAccess
 );
 
+NTSYSAPI
 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,
@@ -459,95 +562,105 @@ RtlCopySidAndAttributesArray(
 );
 
 NTSTATUS
-STDCALL
+NTAPI
 RtlConvertSidToUnicodeString(
     OUT PUNICODE_STRING DestinationString,
     IN PSID Sid,
     IN BOOLEAN AllocateDestinationString
 );
 
+NTSYSAPI
 NTSTATUS
-STDCALL
+NTAPI
 RtlCopySid(
     IN ULONG Length,
     IN PSID Destination,
     IN PSID Source
 );
 
+NTSYSAPI
 NTSTATUS
-STDCALL
+NTAPI
 RtlCreateAcl(
     PACL Acl,
     ULONG AclSize,
     ULONG AclRevision
 );
 
+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
 );
 
-NTSTATUS 
-STDCALL
+NTSYSAPI
+NTSTATUS
+NTAPI
 RtlDeleteAce(
     PACL Acl,
     ULONG AceIndex
 );
 
-BOOLEAN 
-STDCALL
+NTSYSAPI
+BOOLEAN
+NTAPI
 RtlEqualPrefixSid(
     PSID Sid1,
     PSID Sid2
 );
-         
+
+NTSYSAPI
 BOOLEAN
-STDCALL
+NTAPI
 RtlEqualSid (
     IN PSID Sid1,
     IN PSID Sid2
 );
 
-BOOLEAN 
-STDCALL
+BOOLEAN
+NTAPI
 RtlFirstFreeAce(
     PACL Acl,
     PACE* Ace
 );
 
+NTSYSAPI
 PVOID
-STDCALL
+NTAPI
 RtlFreeSid (
     IN PSID Sid
 );
 
-NTSTATUS 
-STDCALL
+NTSYSAPI
+NTSTATUS
+NTAPI
 RtlGetAce(
     PACL Acl,
     ULONG AceIndex,
-    PACE *Ace
+    PVOID *Ace
 );
 
-NTSTATUS 
-STDCALL
+NTSTATUS
+NTAPI
 RtlGetControlSecurityDescriptor(
     PSECURITY_DESCRIPTOR SecurityDescriptor,
     PSECURITY_DESCRIPTOR_CONTROL Control,
     PULONG Revision
 );
-                 
+
+NTSYSAPI
 NTSTATUS
-STDCALL
+NTAPI
 RtlGetDaclSecurityDescriptor(
     IN PSECURITY_DESCRIPTOR SecurityDescriptor,
     OUT PBOOLEAN DaclPresent,
@@ -555,8 +668,9 @@ RtlGetDaclSecurityDescriptor(
     OUT PBOOLEAN DaclDefaulted
 );
 
+NTSYSAPI
 NTSTATUS
-STDCALL
+NTAPI
 RtlGetSaclSecurityDescriptor(
     PSECURITY_DESCRIPTOR SecurityDescriptor,
     PBOOLEAN SaclPresent,
@@ -564,55 +678,72 @@ RtlGetSaclSecurityDescriptor(
     PBOOLEAN SaclDefaulted
 );
 
+NTSYSAPI
 NTSTATUS
-STDCALL
+NTAPI
 RtlGetGroupSecurityDescriptor(
     IN PSECURITY_DESCRIPTOR SecurityDescriptor,
     OUT PSID *Group,
     OUT PBOOLEAN GroupDefaulted
 );
 
+NTSYSAPI
 NTSTATUS
-STDCALL
+NTAPI
 RtlGetOwnerSecurityDescriptor(
     IN PSECURITY_DESCRIPTOR SecurityDescriptor,
     OUT PSID *Owner,
     OUT PBOOLEAN OwnerDefaulted
 );
 
-BOOLEAN 
-STDCALL
+NTSYSAPI
+BOOLEAN
+NTAPI
 RtlGetSecurityDescriptorRMControl(
     PSECURITY_DESCRIPTOR SecurityDescriptor,
     PUCHAR RMControl
 );
-                  
-PSID_IDENTIFIER_AUTHORITY 
-STDCALL
+
+NTSYSAPI
+PSID_IDENTIFIER_AUTHORITY
+NTAPI
 RtlIdentifierAuthoritySid(PSID Sid);
 
+NTSYSAPI
 NTSTATUS
-STDCALL
+NTAPI
 RtlImpersonateSelf(IN SECURITY_IMPERSONATION_LEVEL ImpersonationLevel);
 
+NTSYSAPI
 NTSTATUS
-STDCALL
+NTAPI
 RtlInitializeSid(
     IN OUT PSID Sid,
     IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority,
     IN UCHAR SubAuthorityCount
 );
 
+NTSYSAPI
 ULONG
-STDCALL
-RtlLengthRequiredSid(IN UCHAR SubAuthorityCount);
+NTAPI
+RtlLengthRequiredSid(IN ULONG SubAuthorityCount);
 
+NTSYSAPI
 ULONG
-STDCALL
+NTAPI
 RtlLengthSid(IN PSID Sid);
 
-NTSTATUS 
-STDCALL
+NTSYSAPI
+VOID
+NTAPI
+RtlMapGenericMask(
+    PACCESS_MASK AccessMask,
+    PGENERIC_MAPPING GenericMapping
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
 RtlQueryInformationAcl(
     PACL Acl,
     PVOID Information,
@@ -620,10 +751,11 @@ RtlQueryInformationAcl(
     ACL_INFORMATION_CLASS InformationClass
 );
 
+NTSYSAPI
 NTSTATUS
-STDCALL
+NTAPI
 RtlSelfRelativeToAbsoluteSD(
-    IN PSECURITY_DESCRIPTOR_RELATIVE SelfRelativeSD,
+    IN PSECURITY_DESCRIPTOR SelfRelativeSD,
     OUT PSECURITY_DESCRIPTOR AbsoluteSD,
     IN PULONG AbsoluteSDSize,
     IN PACL Dacl,
@@ -636,16 +768,26 @@ RtlSelfRelativeToAbsoluteSD(
     IN PULONG PrimaryGroupSize
 );
 
-NTSTATUS 
-STDCALL
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlSelfRelativeToAbsoluteSD2(
+    IN OUT PSECURITY_DESCRIPTOR SelfRelativeSD,
+    OUT PULONG BufferSize
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
 RtlSetControlSecurityDescriptor(
     IN PSECURITY_DESCRIPTOR SecurityDescriptor,
     IN SECURITY_DESCRIPTOR_CONTROL ControlBitsOfInterest,
     IN SECURITY_DESCRIPTOR_CONTROL ControlBitsToSet
 );
 
+NTSYSAPI
 NTSTATUS
-STDCALL
+NTAPI
 RtlSetDaclSecurityDescriptor (
     PSECURITY_DESCRIPTOR SecurityDescriptor,
     BOOLEAN DaclPresent,
@@ -653,16 +795,18 @@ RtlSetDaclSecurityDescriptor (
     BOOLEAN DaclDefaulted
 );
 
+NTSYSAPI
 NTSTATUS
-STDCALL
+NTAPI
 RtlSetGroupSecurityDescriptor(
     IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
     IN PSID Group,
     IN BOOLEAN GroupDefaulted
 );
 
-NTSTATUS 
-STDCALL
+NTSYSAPI
+NTSTATUS
+NTAPI
 RtlSetInformationAcl(
     PACL Acl,
     PVOID Information,
@@ -670,16 +814,18 @@ RtlSetInformationAcl(
     ACL_INFORMATION_CLASS InformationClass
 );
 
+NTSYSAPI
 NTSTATUS
-STDCALL
+NTAPI
 RtlSetOwnerSecurityDescriptor(
     IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
     IN PSID Owner,
     IN BOOLEAN OwnerDefaulted
 );
 
+NTSYSAPI
 NTSTATUS
-STDCALL
+NTAPI
 RtlSetSaclSecurityDescriptor(
     IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
     IN BOOLEAN SaclPresent,
@@ -687,72 +833,125 @@ RtlSetSaclSecurityDescriptor(
     IN BOOLEAN SaclDefaulted
 );
 
-VOID 
-STDCALL
+NTSYSAPI
+VOID
+NTAPI
 RtlSetSecurityDescriptorRMControl(
     PSECURITY_DESCRIPTOR SecurityDescriptor,
     PUCHAR RMControl
 );
 
+NTSYSAPI
 PUCHAR
-STDCALL
+NTAPI
 RtlSubAuthorityCountSid(
     IN PSID Sid
 );
 
+NTSYSAPI
 PULONG
-STDCALL
+NTAPI
 RtlSubAuthoritySid(
     IN PSID Sid,
     IN ULONG SubAuthority
 );
 
+NTSYSAPI
 BOOLEAN
-STDCALL
+NTAPI
 RtlValidRelativeSecurityDescriptor(
-    IN PSECURITY_DESCRIPTOR_RELATIVE SecurityDescriptorInput,
+    IN PSECURITY_DESCRIPTOR SecurityDescriptorInput,
     IN ULONG SecurityDescriptorLength,
     IN SECURITY_INFORMATION RequiredInformation
 );
 
-BOOLEAN 
-STDCALL
+NTSYSAPI
+BOOLEAN
+NTAPI
 RtlValidSecurityDescriptor(IN PSECURITY_DESCRIPTOR SecurityDescriptor);
 
+NTSYSAPI
 BOOLEAN
-STDCALL
+NTAPI
 RtlValidSid(IN PSID Sid);
 
-BOOLEAN 
-STDCALL
+NTSYSAPI
+BOOLEAN
+NTAPI
 RtlValidAcl(PACL Acl);
 
-/*
- * Single-Character Functions
- */
-NTSTATUS 
-STDCALL
+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
 );
-    
-CHAR 
-STDCALL
+
+NTSYSAPI
+CHAR
+NTAPI
 RtlUpperChar(CHAR Source);
 
+NTSYSAPI
 WCHAR
-STDCALL
+NTAPI
 RtlUpcaseUnicodeChar(WCHAR Source);
-    
-WCHAR 
-STDCALL
+
+NTSYSAPI
+WCHAR
+NTAPI
 RtlDowncaseUnicodeChar(IN WCHAR Source);
 
+NTSYSAPI
 NTSTATUS
-STDCALL
+NTAPI
 RtlIntegerToChar(
     IN ULONG Value,
     IN ULONG Base,
@@ -760,8 +959,9 @@ RtlIntegerToChar(
     IN OUT PCHAR String
 );
 
-NTSTATUS 
-STDCALL
+NTSYSAPI
+NTSTATUS
+NTAPI
 RtlIntegerToUnicode(
     IN ULONG Value,
     IN ULONG Base  OPTIONAL,
@@ -769,78 +969,117 @@ RtlIntegerToUnicode(
     IN OUT LPWSTR String
 );
 
+NTSYSAPI
 NTSTATUS
-STDCALL
+NTAPI
 RtlIntegerToUnicodeString(
     IN ULONG Value,
     IN ULONG Base,
     IN OUT PUNICODE_STRING String
 );
 
+NTSYSAPI
 NTSTATUS
-STDCALL
+NTAPI
 RtlCharToInteger(
     PCSZ String,
     ULONG Base,
     PULONG Value
 );
-    
-USHORT 
+
+//
+// Byte Swap Functions
+//
+#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);
 
-/*
- * Unicode->Ansi String Functions 
- */     
 ULONG
-STDCALL
-RtlUnicodeStringToAnsiSize(IN PUNICODE_STRING UnicodeString);
-   
+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
-STDCALL
+NTAPI
 RtlUnicodeStringToAnsiString(
     PANSI_STRING DestinationString,
-    PUNICODE_STRING SourceString,
+    PCUNICODE_STRING SourceString,
     BOOLEAN AllocateDestinationString
 );
 
-/*
- * Unicode->OEM String Functions
- */
+//
+// Unicode->OEM String Functions
+//
+NTSYSAPI
 NTSTATUS
-STDCALL
+NTAPI
 RtlUpcaseUnicodeStringToOemString(
     POEM_STRING DestinationString,
-    PUNICODE_STRING SourceString,
+    PCUNICODE_STRING SourceString,
     BOOLEAN AllocateDestinationString
 );
 
+NTSYSAPI
 NTSTATUS
-STDCALL
+NTAPI
 RtlUpcaseUnicodeStringToCountedOemString(
     IN OUT POEM_STRING DestinationString,
-    IN PUNICODE_STRING SourceString,
+    IN PCUNICODE_STRING SourceString,
     IN BOOLEAN AllocateDestinationString
 );
 
+NTSYSAPI
 NTSTATUS
-STDCALL
-RtlUpcaseUnicodeString(
-    PUNICODE_STRING DestinationString,
-    PCUNICODE_STRING SourceString,
-    BOOLEAN AllocateDestinationString
-);
-
-NTSTATUS
-STDCALL
+NTAPI
 RtlUnicodeStringToOemString(
     POEM_STRING DestinationString,
-    PUNICODE_STRING SourceString,
+    PCUNICODE_STRING SourceString,
     BOOLEAN AllocateDestinationString
 );
-    
+
+NTSYSAPI
 NTSTATUS
-STDCALL
+NTAPI
 RtlUpcaseUnicodeToOemN(
     PCHAR OemString,
     ULONG OemSize,
@@ -848,13 +1087,29 @@ RtlUpcaseUnicodeToOemN(
     PWCHAR UnicodeString,
     ULONG UnicodeSize
 );
-     
+
+NTSYSAPI
 ULONG
-STDCALL
-RtlUnicodeStringToOemSize(IN PUNICODE_STRING UnicodeString);
+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
-STDCALL
+NTAPI
 RtlUnicodeToOemN(
     PCHAR OemString,
     ULONG OemSize,
@@ -862,12 +1117,13 @@ RtlUnicodeToOemN(
     PWCHAR UnicodeString,
     ULONG UnicodeSize
 );
-    
-/*
- * Unicode->MultiByte String Functions 
- */
+
+//
+// Unicode->MultiByte String Functions
+//
+NTSYSAPI
 NTSTATUS
-STDCALL
+NTAPI
 RtlUnicodeToMultiByteN(
     PCHAR MbString,
     ULONG MbSize,
@@ -876,8 +1132,9 @@ RtlUnicodeToMultiByteN(
     ULONG UnicodeSize
 );
 
+NTSYSAPI
 NTSTATUS
-STDCALL
+NTAPI
 RtlUpcaseUnicodeToMultiByteN(
     PCHAR MbString,
     ULONG MbSize,
@@ -885,32 +1142,36 @@ RtlUpcaseUnicodeToMultiByteN(
     PWCHAR UnicodeString,
     ULONG UnicodeSize
 );
-    
+
+NTSYSAPI
 NTSTATUS
-STDCALL
+NTAPI
 RtlUnicodeToMultiByteSize(
     PULONG MbSize,
     PWCHAR UnicodeString,
     ULONG UnicodeSize
 );
 
-/*
- * OEM to Unicode Functions
- */    
+NTSYSAPI
 ULONG
-STDCALL
-RtlOemStringToUnicodeSize(POEM_STRING AnsiString);
-    
+NTAPI
+RtlxOemStringToUnicodeSize(IN PCOEM_STRING OemString);
+
+//
+// OEM to Unicode Functions
+//
+NTSYSAPI
 NTSTATUS
-STDCALL
+NTAPI
 RtlOemStringToUnicodeString(
     PUNICODE_STRING DestinationString,
-    POEM_STRING SourceString,
+    PCOEM_STRING SourceString,
     BOOLEAN AllocateDestinationString
 );
 
+NTSYSAPI
 NTSTATUS
-STDCALL
+NTAPI
 RtlOemToUnicodeN(
     PWSTR UnicodeString,
     ULONG MaxBytesInUnicodeString,
@@ -918,181 +1179,283 @@ RtlOemToUnicodeN(
     IN PCHAR OemString,
     ULONG BytesInOemString
 );
-    
-/*
- * Ansi->Multibyte String Functions
- */
-/*
- * Ansi->Unicode String 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
+
+//
+// Ansi->Unicode String Functions
+//
+NTSYSAPI
+ULONG
+NTAPI
+RtlxAnsiStringToUnicodeSize(
+    PCANSI_STRING AnsiString
+);
+
+NTSYSAPI
 NTSTATUS
-STDCALL
+NTAPI
 RtlAnsiStringToUnicodeString(
     PUNICODE_STRING DestinationString,
-    PANSI_STRING SourceString,
+    PCANSI_STRING SourceString,
     BOOLEAN AllocateDestinationString
 );
-    
-ULONG
-STDCALL
-RtlAnsiStringToUnicodeSize(
-    PANSI_STRING AnsiString
-);
-   
-BOOLEAN 
-STDCALL
+
+#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
- */
+//
+// Unicode String Functions
+//
+NTSYSAPI
 NTSTATUS
-STDCALL
+NTAPI
 RtlAppendUnicodeToString(
     PUNICODE_STRING Destination,
     PCWSTR Source
 );
 
+NTSYSAPI
 NTSTATUS
-STDCALL
+NTAPI
 RtlAppendUnicodeStringToString(
     PUNICODE_STRING Destination,
-    PUNICODE_STRING Source
+    PCUNICODE_STRING Source
 );
 
+NTSYSAPI
 LONG
-STDCALL
+NTAPI
 RtlCompareUnicodeString(
-    PUNICODE_STRING String1,
-    PUNICODE_STRING String2,
+    PCUNICODE_STRING String1,
+    PCUNICODE_STRING String2,
     BOOLEAN CaseInsensitive
 );
 
-VOID 
-STDCALL
+NTSYSAPI
+VOID
+NTAPI
 RtlCopyUnicodeString(
     PUNICODE_STRING DestinationString,
-    PUNICODE_STRING SourceString
+    PCUNICODE_STRING SourceString
 );
 
+NTSYSAPI
 BOOLEAN
-STDCALL
+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
-STDCALL
+NTAPI
 RtlEqualUnicodeString(
     PCUNICODE_STRING String1,
     PCUNICODE_STRING String2,
     BOOLEAN CaseInsensitive
 );
 
+NTSYSAPI
 VOID
-STDCALL
+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
-STDCALL
+NTAPI
 RtlInitUnicodeString(
-  IN OUT PUNICODE_STRING  DestinationString,
-  IN PCWSTR  SourceString);
+  IN OUT PUNICODE_STRING DestinationString,
+  IN PCWSTR SourceString);
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlIsTextUnicode(
+    PVOID Buffer,
+    ULONG Length,
+    ULONG *Flags
+);
 
+NTSYSAPI
 BOOLEAN
-STDCALL
+NTAPI
+RtlPrefixString(
+    PCANSI_STRING String1,
+    PCANSI_STRING String2,
+    BOOLEAN CaseInsensitive
+);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
 RtlPrefixUnicodeString(
-    PUNICODE_STRING String1,
-    PUNICODE_STRING String2,
+    PCUNICODE_STRING String1,
+    PCUNICODE_STRING String2,
     BOOLEAN CaseInsensitive
 );
 
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlUpcaseUnicodeString(
+    PUNICODE_STRING DestinationString,
+    PCUNICODE_STRING SourceString,
+    BOOLEAN AllocateDestinationString
+);
+
+NTSYSAPI
 NTSTATUS
-STDCALL
+NTAPI
 RtlUnicodeStringToInteger(
-    PUNICODE_STRING String,
+    PCUNICODE_STRING String,
     ULONG Base,
     PULONG Value
 );
 
-/*
- * Ansi String Functions
- */
+//
+// Ansi String Functions
+//
+NTSYSAPI
 VOID
-STDCALL
+NTAPI
 RtlFreeAnsiString(IN PANSI_STRING AnsiString);
 
+NTSYSAPI
 VOID
-STDCALL
+NTAPI
 RtlInitAnsiString(
     PANSI_STRING DestinationString,
     PCSZ SourceString
 );
-/*
- * OEM String Functions
- */
-VOID 
-STDCALL
+
+//
+// OEM String Functions
+//
+NTSYSAPI
+VOID
+NTAPI
 RtlFreeOemString(IN POEM_STRING OemString);
 
-/* 
- * MultiByte->Unicode String Functions
- */
+//
+// MultiByte->Unicode String Functions
+//
+NTSYSAPI
 NTSTATUS
-STDCALL
+NTAPI
 RtlMultiByteToUnicodeN(
     PWCHAR UnicodeString,
     ULONG UnicodeSize,
     PULONG ResultSize,
-    const PCHAR MbString,
+    PCSTR MbString,
     ULONG MbSize
 );
 
+NTSYSAPI
 NTSTATUS
-STDCALL
+NTAPI
 RtlMultiByteToUnicodeSize(
     PULONG UnicodeSize,
-    PCHAR MbString,
+    PCSTR MbString,
     ULONG MbSize
 );
 
-/*
- * Atom Functions
- */
+//
+// Atom Functions
+//
+NTSYSAPI
 NTSTATUS
-STDCALL
+NTAPI
 RtlAddAtomToAtomTable(
     IN PRTL_ATOM_TABLE AtomTable,
     IN PWSTR AtomName,
     OUT PRTL_ATOM Atom
 );
 
+NTSYSAPI
 NTSTATUS
-STDCALL
+NTAPI
 RtlCreateAtomTable(
     IN ULONG TableSize,
     IN OUT PRTL_ATOM_TABLE *AtomTable
 );
 
+NTSYSAPI
 NTSTATUS
-STDCALL
+NTAPI
 RtlDeleteAtomFromAtomTable(
     IN PRTL_ATOM_TABLE AtomTable,
     IN RTL_ATOM Atom
 );
 
-NTSTATUS 
-STDCALL
+NTSYSAPI
+NTSTATUS
+NTAPI
 RtlDestroyAtomTable(IN PRTL_ATOM_TABLE AtomTable);
 
+NTSYSAPI
 NTSTATUS
-STDCALL
+NTAPI
 RtlQueryAtomInAtomTable(
     IN PRTL_ATOM_TABLE AtomTable,
     IN RTL_ATOM Atom,
@@ -1101,81 +1464,190 @@ RtlQueryAtomInAtomTable(
     IN OUT PWSTR AtomName OPTIONAL,
     IN OUT PULONG NameLength OPTIONAL
 );
-    
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlPinAtomInAtomTable(
+    IN PRTL_ATOM_TABLE AtomTable,
+    IN RTL_ATOM Atom
+);     
+
+NTSYSAPI
 NTSTATUS
-STDCALL
+NTAPI
 RtlLookupAtomInAtomTable(
     IN PRTL_ATOM_TABLE AtomTable,
     IN PWSTR AtomName,
     OUT PRTL_ATOM Atom
 );
 
-/*
- * Memory Functions
- */
-SIZE_T 
-STDCALL
-RtlCompareMemory(
-    IN const VOID *Source1,
-    IN const VOID *Source2,
-    IN SIZE_T Length
-);
-                 
+//
+// Memory Functions
+//
+NTSYSAPI
 VOID
-STDCALL
+NTAPI
 RtlFillMemoryUlong(
     IN PVOID Destination,
     IN ULONG Length,
     IN ULONG Fill
 );
-                 
-/*
- * Process Management Functions
- */      
-VOID
-STDCALL
-RtlAcquirePebLock(VOID);
 
+//
+// Process Management Functions
+//
+NTSYSAPI
 VOID
-STDCALL
-RtlReleasePebLock(VOID);
+NTAPI
+RtlAcquirePebLock(VOID);
 
+NTSYSAPI
 NTSTATUS
-STDCALL
-RtlCreateEnvironment(
-    BOOLEAN Inherit,
-    PWSTR *Environment
-);
-
+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
-STDCALL
+NTAPI
 RtlCreateUserThread(
     IN HANDLE ProcessHandle,
     IN PSECURITY_DESCRIPTOR SecurityDescriptor,
     IN BOOLEAN CreateSuspended,
     IN LONG StackZeroBits,
-    IN OUT PULONG StackReserve,
-    IN OUT PULONG StackCommit,
+    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
-STDCALL
-RtlDeNormalizeProcessParams(
-    IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
+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
 );
 
+#define NtCurrentPeb() (NtCurrentTeb()->ProcessEnvironmentBlock)
+
+//
+// Environment/Path Functions
+//
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlCreateEnvironment(
+    BOOLEAN Inherit,
+    PWSTR *Environment
+);
+
+NTSYSAPI
 VOID
-STDCALL
-RtlDestroyEnvironment(
-    PWSTR Environment
+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
-STDCALL
+NTAPI
 RtlExpandEnvironmentStrings_U(
     PWSTR Environment,
     PUNICODE_STRING Source,
@@ -1183,60 +1655,173 @@ RtlExpandEnvironmentStrings_U(
     PULONG Length
 );
 
-PRTL_USER_PROCESS_PARAMETERS
-STDCALL
-RtlNormalizeProcessParams(
-    IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
+NTSYSAPI
+ULONG
+NTAPI
+RtlGetCurrentDirectory_U(
+    ULONG MaximumLength,
+    PWSTR Buffer
 );
 
+NTSYSAPI
+ULONG
+NTAPI
+RtlGetFullPathName_U(
+    const WCHAR *dosname,
+    ULONG size,
+    WCHAR *buf,
+    WCHAR **shortname
+);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlIsNameLegalDOS8Dot3(
+    IN PUNICODE_STRING UnicodeName,
+    IN PANSI_STRING AnsiName,
+    PBOOLEAN Unknown
+);
+
+NTSYSAPI
 NTSTATUS
-STDCALL
+NTAPI
 RtlQueryEnvironmentVariable_U(
     PWSTR Environment,
     PUNICODE_STRING Name,
     PUNICODE_STRING Value
 );
 
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlSetCurrentDirectory_U(PUNICODE_STRING name);
+
+NTSYSAPI
 NTSTATUS
-STDCALL
+NTAPI
 RtlSetEnvironmentVariable(
     PWSTR *Environment,
     PUNICODE_STRING Name,
     PUNICODE_STRING Value
 );
 
-/*
- * Critical Section/Resource Functions
- */
+//
+// Critical Section/Resource Functions
+//
+NTSYSAPI
 NTSTATUS
-STDCALL
+NTAPI
 RtlDeleteCriticalSection (
-     PRTL_CRITICAL_SECTION CriticalSection
+    IN PRTL_CRITICAL_SECTION CriticalSection
 );
+
+NTSYSAPI
 NTSTATUS
-STDCALL
+NTAPI
 RtlEnterCriticalSection(
-     PRTL_CRITICAL_SECTION CriticalSection
+    IN PRTL_CRITICAL_SECTION CriticalSection
 );
 
-NTSTATUS 
-STDCALL
+NTSYSAPI
+NTSTATUS
+NTAPI
 RtlInitializeCriticalSection(
-     PRTL_CRITICAL_SECTION CriticalSection
+    IN PRTL_CRITICAL_SECTION CriticalSection
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlInitializeCriticalSectionAndSpinCount(
+    IN PRTL_CRITICAL_SECTION CriticalSection,
+    IN ULONG SpinCount
 );
 
+NTSYSAPI
 NTSTATUS
-STDCALL
+NTAPI
 RtlLeaveCriticalSection(
-     PRTL_CRITICAL_SECTION CriticalSection
-); 
+    IN PRTL_CRITICAL_SECTION CriticalSection
+);
 
-/*
- * Compression Functions
- */
+NTSYSAPI
+VOID
+NTAPI
+RtlpUnWaitCriticalSection(
+    IN PRTL_CRITICAL_SECTION CriticalSection
+);
+
+NTSYSAPI
 NTSTATUS
-STDCALL
+NTAPI
+RtlpWaitForCriticalSection(
+    IN PRTL_CRITICAL_SECTION CriticalSection
+);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlAcquireResourceExclusive(
+    IN PRTL_RESOURCE Resource,
+    IN BOOLEAN Wait
+);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlAcquireResourceShared(
+    IN PRTL_RESOURCE Resource,
+    IN BOOLEAN Wait
+);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlConvertExclusiveToShared(
+    IN PRTL_RESOURCE Resource
+);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlConvertSharedToExclusive(
+    IN PRTL_RESOURCE Resource
+);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlDeleteResource(
+    IN PRTL_RESOURCE Resource
+);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlDumpResource(
+    IN PRTL_RESOURCE Resource
+);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlInitializeResource(
+    IN PRTL_RESOURCE Resource
+);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlReleaseResource(
+    IN PRTL_RESOURCE Resource
+);
+
+//
+// Compression Functions
+//
+NTSYSAPI
+NTSTATUS
+NTAPI
 RtlCompressBuffer(
     IN USHORT CompressionFormatAndEngine,
     IN PUCHAR UncompressedBuffer,
@@ -1248,8 +1833,9 @@ RtlCompressBuffer(
     IN PVOID WorkSpace
 );
 
+NTSYSAPI
 NTSTATUS
-STDCALL
+NTAPI
 RtlDecompressBuffer(
     IN USHORT CompressionFormat,
     OUT PUCHAR UncompressedBuffer,
@@ -1259,78 +1845,245 @@ RtlDecompressBuffer(
     OUT PULONG FinalUncompressedSize
 );
 
+NTSYSAPI
 NTSTATUS
-STDCALL
+NTAPI
 RtlGetCompressionWorkSpaceSize(
     IN USHORT CompressionFormatAndEngine,
     OUT PULONG CompressBufferWorkSpaceSize,
     OUT PULONG CompressFragmentWorkSpaceSize
 );
 
-/*
- * Bitmap Functions
- */
+//
+// Debug Info Functions
+//
+NTSYSAPI
+PRTL_DEBUG_BUFFER
+NTAPI
+RtlCreateQueryDebugBuffer(
+    IN ULONG Size,
+    IN BOOLEAN EventPair
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlDestroyQueryDebugBuffer(IN PRTL_DEBUG_BUFFER DebugBuffer);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlQueryProcessDebugInformation(
+    IN ULONG ProcessId,
+    IN ULONG DebugInfoClassMask,
+    IN OUT PRTL_DEBUG_BUFFER DebugBuffer
+);
+
+//
+// Bitmap Functions
+//
+NTSYSAPI
 BOOLEAN
-STDCALL
+NTAPI
 RtlAreBitsClear(
     IN PRTL_BITMAP BitMapHeader,
     IN ULONG StartingIndex,
     IN ULONG Length
 );
 
+NTSYSAPI
 BOOLEAN
-STDCALL
+NTAPI
 RtlAreBitsSet(
     IN PRTL_BITMAP BitMapHeader,
     IN ULONG StartingIndex,
     IN ULONG Length
 );
 
+NTSYSAPI
 VOID
-STDCALL
+NTAPI
 RtlClearBits(
     IN PRTL_BITMAP BitMapHeader,
     IN ULONG StartingIndex,
     IN ULONG NumberToClear
 );
 
+NTSYSAPI
 ULONG
-STDCALL
+NTAPI
 RtlFindClearBits(
-    PRTL_BITMAP BitMapHeader,
-    ULONG NumberToFind,
-    ULONG HintIndex
+    IN PRTL_BITMAP BitMapHeader,
+    IN ULONG NumberToFind,
+    IN ULONG HintIndex
 );
 
+NTSYSAPI
 ULONG
-STDCALL
+NTAPI
 RtlFindClearBitsAndSet(
-    PRTL_BITMAP BitMapHeader,
-    ULONG NumberToFind,
-    ULONG HintIndex
+    IN PRTL_BITMAP BitMapHeader,
+    IN ULONG NumberToFind,
+    IN ULONG HintIndex
 );
 
+NTSYSAPI
 VOID
-STDCALL
+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
+);
+
+//
+// Timer Functions
+//
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlCreateTimer(
+    HANDLE TimerQueue,
+    PHANDLE phNewTimer,
+    WAITORTIMERCALLBACKFUNC Callback,
+    PVOID Parameter,
+    ULONG DueTime,
+    ULONG Period,
+    ULONG Flags
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlCreateTimerQueue(PHANDLE TimerQueue);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlDeleteTimer(
+    HANDLE TimerQueue,
+    HANDLE Timer,
+    HANDLE CompletionEvent
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlUpdateTimer(
+    HANDLE TimerQueue,
+    HANDLE Timer,
+    ULONG DueTime,
+    ULONG Period
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlDeleteTimerQueueEx(
+    HANDLE TimerQueue,
+    HANDLE CompletionEvent
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlDeleteTimerQueue(HANDLE TimerQueue);
+
+//
+// Debug Functions
+//
+ULONG
+__cdecl
+DbgPrint(
+    IN PCH  Format,
+    IN ...
+);
+
+VOID
+NTAPI
+DbgBreakPoint(VOID);
+
+//
+// Handle Table Functions
+//
+NTSYSAPI
+PRTL_HANDLE_TABLE_ENTRY
+NTAPI
+RtlAllocateHandle(
+    IN PRTL_HANDLE_TABLE HandleTable,
+    IN OUT PULONG Index
+);
+
+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
+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
- */ 
+//
+// 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
-STDCALL
+NTAPI
 RtlImageDirectoryEntryToData(
     PVOID  BaseAddress,
     BOOLEAN bFlag,
@@ -1338,8 +2091,9 @@ RtlImageDirectoryEntryToData(
     PULONG Size
 );
 
+NTSYSAPI
 ULONG
-STDCALL
+NTAPI
 RtlImageRvaToVa(
     PIMAGE_NT_HEADERS NtHeader,
     PVOID BaseAddress,
@@ -1347,34 +2101,57 @@ RtlImageRvaToVa(
     PIMAGE_SECTION_HEADER *SectionHeader
 );
 
+NTSYSAPI
 PIMAGE_NT_HEADERS
-STDCALL
+NTAPI
 RtlImageNtHeader(IN PVOID BaseAddress);
 
+NTSYSAPI
 PIMAGE_SECTION_HEADER
-STDCALL
+NTAPI
 RtlImageRvaToSection(
     PIMAGE_NT_HEADERS NtHeader,
     PVOID BaseAddress,
     ULONG Rva
 );
 
-/*
- * Registry Functions
- */
-NTSTATUS 
-STDCALL
+//
+// 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
-STDCALL
+NTAPI
 RtlOpenCurrentUser(
     IN ACCESS_MASK DesiredAccess,
     OUT PHANDLE KeyHandle
 );
 
+NTSYSAPI
 NTSTATUS
-STDCALL
+NTAPI
 RtlQueryRegistryValues(
     IN ULONG RelativeTo,
     IN PCWSTR Path,
@@ -1383,8 +2160,9 @@ RtlQueryRegistryValues(
     IN PVOID Environment
 );
 
+NTSYSAPI
 NTSTATUS
-STDCALL
+NTAPI
 RtlWriteRegistryValue(
     ULONG RelativeTo,
     PCWSTR Path,
@@ -1394,21 +2172,12 @@ RtlWriteRegistryValue(
     ULONG ValueLength
 );
 
-NTSTATUS
-STDCALL
-RtlFindMessage (
-    IN    PVOID                BaseAddress,
-    IN    ULONG                Type,
-    IN    ULONG                Language,
-    IN    ULONG                MessageId,
-    OUT    PRTL_MESSAGE_RESOURCE_ENTRY    *MessageResourceEntry
-    );
-  
-/*
- * NLS Functions
- */      
+//
+// NLS Functions
+//
+NTSYSAPI
 VOID
-STDCALL
+NTAPI
 RtlInitNlsTables(
     IN PUSHORT AnsiTableBase,
     IN PUSHORT OemTableBase,
@@ -1416,190 +2185,199 @@ RtlInitNlsTables(
     OUT PNLSTABLEINFO NlsTable
 );
 
+NTSYSAPI
 VOID
-STDCALL
+NTAPI
 RtlInitCodePageTable(
     IN PUSHORT TableBase,
     OUT PCPTABLEINFO CodePageTable
 );
-   
+
+NTSYSAPI
 VOID
-STDCALL
+NTAPI
 RtlResetRtlTranslations(IN PNLSTABLEINFO NlsTable);
 
-/*
- * Misc String Functions
- */     
-BOOLEAN
-STDCALL
-RtlDosPathNameToNtPathName_U(
-    PWSTR DosName,
-    PUNICODE_STRING NtName,
-    PWSTR *ShortName,
-    PCURDIR CurrentDirectory
-);
-                 
-BOOLEAN
-STDCALL
-RtlIsNameLegalDOS8Dot3(
-    IN PUNICODE_STRING UnicodeName,
-    IN PANSI_STRING AnsiName,
-    PBOOLEAN Unknown
-);
+#if defined(NTOS_MODE_USER) && !defined(NO_RTL_INLINES)
 
-ULONG
-STDCALL
-RtlIsTextUnicode(
-    PVOID Buffer,
-    ULONG Length,
-    ULONG *Flags
-);
+//
+// Misc conversion functions
+//
+static __inline
+LARGE_INTEGER
+NTAPI_INLINE
+RtlConvertLongToLargeInteger(
+    LONG SignedInteger
+)
+{
+    LARGE_INTEGER Result;
 
-/*
- * Misc conversion functions
- */
-LARGE_INTEGER 
-STDCALL
-RtlConvertLongToLargeInteger(IN LONG SignedInteger);
+    Result.QuadPart = SignedInteger;
+    return Result;
+}
 
+static __inline
 LARGE_INTEGER
-STDCALL
+NTAPI_INLINE
 RtlEnlargedIntegerMultiply(
     LONG Multiplicand,
     LONG Multiplier
-);
+)
+{
+    LARGE_INTEGER Product;
+
+    Product.QuadPart = (LONGLONG)Multiplicand * (ULONGLONG)Multiplier;
+    return Product;
+}
 
+static __inline
 ULONG
-STDCALL
+NTAPI_INLINE
 RtlEnlargedUnsignedDivide(
-    ULARGE_INTEGER Dividend,
-    ULONG Divisor,
-    PULONG Remainder
-);
+    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
-STDCALL
+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
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlIpv6StringToAddressA(
+    IN LPSTR Name,
+    OUT PULONG Unknown,
+    OUT PVOID IpAddr
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlIpv6StringToAddressW(
+    IN LPWSTR Name,
+    OUT PULONG Unknown,
+    OUT PVOID IpAddr
 );
-    
-/*
- * Time Functions
- */
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlIpv6StringToAddressExA(
+    IN LPSTR AddressName,
+    IN PVOID Address,
+    IN PULONG ScopeId,
+    IN PWORD Port
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlIpv6StringToAddressExW(
+    IN LPWSTR AddressName,
+    IN PVOID Address,
+    IN PULONG ScopeId,
+    IN PWORD Port
+);
+
+
+//
+// Time Functions
+//
+NTSYSAPI
 NTSTATUS
-STDCALL
+NTAPI
 RtlQueryTimeZoneInformation(LPTIME_ZONE_INFORMATION TimeZoneInformation);
-    
+
+NTSYSAPI
 VOID
-STDCALL
+NTAPI
 RtlSecondsSince1970ToTime(
     IN ULONG SecondsSince1970,
     OUT PLARGE_INTEGER Time
 );
 
-NTSTATUS 
-STDCALL
+NTSYSAPI
+NTSTATUS
+NTAPI
 RtlSetTimeZoneInformation(LPTIME_ZONE_INFORMATION TimeZoneInformation);
-                      
-BOOLEAN 
-STDCALL
+
+NTSYSAPI
+BOOLEAN
+NTAPI
 RtlTimeFieldsToTime(
     PTIME_FIELDS TimeFields,
     PLARGE_INTEGER Time
 );
 
+NTSYSAPI
 VOID
-STDCALL
+NTAPI
 RtlTimeToTimeFields(
     PLARGE_INTEGER Time,
     PTIME_FIELDS TimeFields
 );
 
-/*
- * Version Functions
- */
+//
+// Version Functions
+//
+NTSYSAPI
 NTSTATUS
-STDCALL
+NTAPI
 RtlVerifyVersionInfo(
     IN PRTL_OSVERSIONINFOEXW VersionInfo,
     IN ULONG TypeMask,
     IN ULONGLONG ConditionMask
 );
-    
+
+NTSYSAPI
 NTSTATUS
-STDCALL
+NTAPI
 RtlGetVersion(IN OUT PRTL_OSVERSIONINFOW lpVersionInformation);
 
-/*
- * C Runtime Library Functions
- */
-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 isalpha(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
+BOOLEAN
+NTAPI
+RtlGetNtProductType(OUT PNT_PRODUCT_TYPE ProductType);
 
 #endif