#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 RtlIsRightChild(Links) \
+ (RtlRightChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
+
+#define RtlRightChild(Links) \
+ ((PRTL_SPLAY_LINKS)(Links))->RightChild
+
+#define RtlIsRoot(Links) \
+ (RtlParent(Links) == (PRTL_SPLAY_LINKS)(Links))
+
+#define RtlLeftChild(Links) \
+ ((PRTL_SPLAY_LINKS)(Links))->LeftChild
+
+#define RtlParent(Links) \
+ ((PRTL_SPLAY_LINKS)(Links))->Parent
+
+#define RtlInitializeSplayLinks(Links) \
+ { \
+ PRTL_SPLAY_LINKS _SplayLinks; \
+ _SplayLinks = (PRTL_SPLAY_LINKS)(Links); \
+ _SplayLinks->Parent = _SplayLinks; \
+ _SplayLinks->LeftChild = NULL; \
+ _SplayLinks->RightChild = NULL; \
+ }
+
+#define RtlInsertAsLeftChild(ParentLinks,ChildLinks) \
+ { \
+ PRTL_SPLAY_LINKS _SplayParent; \
+ PRTL_SPLAY_LINKS _SplayChild; \
+ _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
+ _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \
+ _SplayParent->LeftChild = _SplayChild; \
+ _SplayChild->Parent = _SplayParent; \
+ }
+
+#define RtlInsertAsRightChild(ParentLinks,ChildLinks) \
+ { \
+ PRTL_SPLAY_LINKS _SplayParent; \
+ PRTL_SPLAY_LINKS _SplayChild; \
+ _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
+ _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \
+ _SplayParent->RightChild = _SplayChild; \
+ _SplayChild->Parent = _SplayParent; \
+ }
+
+/* PROTOTYPES ****************************************************************/
/*
- * 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
+ * Splay Tree Functions
*/
-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;
-}
+NTSYSAPI
+PRTL_SPLAY_LINKS
+NTAPI
+RtlSplay(PRTL_SPLAY_LINKS Links);
+NTSYSAPI
+PRTL_SPLAY_LINKS
+NTAPI
+RtlDelete(PRTL_SPLAY_LINKS Links);
-/*
- * 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
- */
-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
+VOID
+NTAPI
+RtlDeleteNoSplay(
+ PRTL_SPLAY_LINKS Links,
+ PRTL_SPLAY_LINKS *Root
+);
-/*
- * 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
+RtlSubtreeSuccessor(PRTL_SPLAY_LINKS Links);
+NTSYSAPI
+PRTL_SPLAY_LINKS
+NTAPI
+RtlSubtreePredecessor(PRTL_SPLAY_LINKS Links);
-/*
- * 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
+RtlRealSuccessor(PRTL_SPLAY_LINKS Links);
+
+NTSYSAPI
+PRTL_SPLAY_LINKS
+NTAPI
+RtlRealPredecessor(PRTL_SPLAY_LINKS Links);
/*
- *BOOLEAN
- *RemoveEntryList (
- * PLIST_ENTRY Entry
- * );
- *
- * FUNCTION:
- * Removes an entry from a double linked list
- *
- * ARGUMENTS:
- * ListEntry = Entry to remove
+ * Error and Exception Functions
*/
-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
+PVOID
+NTAPI
+RtlAddVectoredExceptionHandler(
+ IN ULONG FirstHandler,
+ IN PVECTORED_EXCEPTION_HANDLER VectoredHandler
+);
+NTSYSAPI
+VOID
+NTAPI
+RtlAssert(
+ PVOID FailedAssertion,
+ PVOID FileName,
+ ULONG LineNumber,
+ PCHAR Message
+);
-/*
- * 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
- */
-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
+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
+);
+NTSYSAPI
+HANDLE
+NTAPI
+RtlDestroyHeap(HANDLE hheap);
-#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
+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
-STDCALL
-RtlAllocateAndInitializeSid (
+NTAPI
+RtlAdjustPrivilege(
+ IN ULONG Privilege,
+ IN BOOLEAN NewValue,
+ IN BOOLEAN ForThread,
+ OUT PBOOLEAN OldValue
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlAllocateAndInitializeSid(
IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority,
IN UCHAR SubAuthorityCount,
IN ULONG SubAuthority0,
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,
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
-);
-
-NTSTATUS
-STDCALL
-RtlDecompressBuffer (
- IN USHORT CompressionFormat,
- OUT PUCHAR UncompressedBuffer,
- IN ULONG UncompressedBufferSize,
- IN PUCHAR CompressedBuffer,
- IN ULONG CompressedBufferSize,
- OUT PULONG FinalUncompressedSize
+NTAPI
+RtlEqualPrefixSid(
+ PSID Sid1,
+ PSID Sid2
);
-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
-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
+RtlQueryInformationAcl(
+ PACL Acl,
+ PVOID Information,
+ ULONG InformationLength,
+ ACL_INFORMATION_CLASS InformationClass
);
-BOOLEAN
-STDCALL
-RtlFreeHeap (
- IN HANDLE HeapHandle,
- IN ULONG Flags,
- IN PVOID P
+NTSYSAPI
+NTSTATUS
+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
);
-PVOID
-STDCALL
-RtlFreeSid (
- IN PSID Sid
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlSetControlSecurityDescriptor(
+ IN PSECURITY_DESCRIPTOR SecurityDescriptor,
+ IN SECURITY_DESCRIPTOR_CONTROL ControlBitsOfInterest,
+ IN SECURITY_DESCRIPTOR_CONTROL ControlBitsToSet
);
-VOID
-STDCALL
-RtlFreeUnicodeString(
- IN PUNICODE_STRING UnicodeString);
+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
+);
+
+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
+RtlPrefixString(
+ PCANSI_STRING String1,
+ PCANSI_STRING String2,
+ BOOLEAN CaseInsensitive
+);
+
+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
+RtlPinAtomInAtomTable(
+ IN PRTL_ATOM_TABLE AtomTable,
+ IN RTL_ATOM Atom
+);
+
+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
+);
-VOID
-STDCALL
-RtlFreeOemString(
- IN POEM_STRING OemString
+NTSYSAPI
+ULONG
+NTAPI
+RtlGetCurrentDirectory_U(
+ ULONG MaximumLength,
+ PWSTR Buffer
);
-NTSTATUS
-STDCALL
-RtlGetCompressionWorkSpaceSize (
- IN USHORT CompressionFormatAndEngine,
- OUT PULONG CompressBufferWorkSpaceSize,
- OUT PULONG CompressFragmentWorkSpaceSize
+NTSYSAPI
+ULONG
+NTAPI
+RtlGetFullPathName_U(
+ const WCHAR *dosname,
+ ULONG size,
+ WCHAR *buf,
+ WCHAR **shortname
);
-NTSTATUS
-STDCALL
-RtlGetDaclSecurityDescriptor (
- IN PSECURITY_DESCRIPTOR SecurityDescriptor,
- OUT PBOOLEAN DaclPresent,
- OUT PACL *Dacl,
- OUT PBOOLEAN DaclDefaulted
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlIsNameLegalDOS8Dot3(
+ IN PUNICODE_STRING UnicodeName,
+ IN PANSI_STRING AnsiName,
+ PBOOLEAN Unknown
);
+NTSYSAPI
NTSTATUS
-STDCALL
-RtlGetGroupSecurityDescriptor (
- IN PSECURITY_DESCRIPTOR SecurityDescriptor,
- OUT PSID *Group,
- OUT PBOOLEAN GroupDefaulted
+NTAPI
+RtlQueryEnvironmentVariable_U(
+ PWSTR Environment,
+ PUNICODE_STRING Name,
+ PUNICODE_STRING Value
);
+NTSYSAPI
NTSTATUS
-STDCALL
-RtlGetOwnerSecurityDescriptor (
- IN PSECURITY_DESCRIPTOR SecurityDescriptor,
- OUT PSID *Owner,
- OUT PBOOLEAN OwnerDefaulted
-);
+NTAPI
+RtlSetCurrentDirectory_U(PUNICODE_STRING name);
-ULONG
-STDCALL
-RtlImageRvaToVa (
- PIMAGE_NT_HEADERS NtHeader,
- PVOID BaseAddress,
- ULONG Rva,
- PIMAGE_SECTION_HEADER *SectionHeader
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlSetEnvironmentVariable(
+ PWSTR *Environment,
+ PUNICODE_STRING Name,
+ PUNICODE_STRING Value
);
-PIMAGE_NT_HEADERS
-STDCALL
-RtlImageNtHeader (
- IN PVOID BaseAddress
+/*
+ * Critical Section/Resource Functions
+ */
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlDeleteCriticalSection (
+ IN PRTL_CRITICAL_SECTION CriticalSection
);
-PIMAGE_SECTION_HEADER
-STDCALL
-RtlImageRvaToSection (
- PIMAGE_NT_HEADERS NtHeader,
- PVOID BaseAddress,
- ULONG Rva
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlEnterCriticalSection(
+ 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
+RtlInitializeCriticalSection(
+ IN PRTL_CRITICAL_SECTION CriticalSection
+);
-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
+RtlInitializeCriticalSectionAndSpinCount(
+ IN PRTL_CRITICAL_SECTION CriticalSection,
+ IN ULONG SpinCount
);
-VOID
-STDCALL
-RtlInitNlsTables (
- IN PUSHORT AnsiTableBase,
- IN PUSHORT OemTableBase,
- IN PUSHORT CaseTableBase,
- OUT PNLSTABLEINFO NlsTable
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlLeaveCriticalSection(
+ IN PRTL_CRITICAL_SECTION CriticalSection
);
+NTSYSAPI
VOID
-STDCALL
-RtlInitCodePageTable (
- IN PUSHORT TableBase,
- OUT PCPTABLEINFO CodePageTable
- );
-
-NTSTATUS
-STDCALL
-RtlGetSaclSecurityDescriptor (
- PSECURITY_DESCRIPTOR SecurityDescriptor,
- PBOOLEAN SaclPresent,
- PACL* Sacl,
- PBOOLEAN SaclDefaulted
+NTAPI
+RtlpUnWaitCriticalSection(
+ IN PRTL_CRITICAL_SECTION CriticalSection
);
+NTSYSAPI
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
+NTAPI
+RtlpWaitForCriticalSection(
+ IN PRTL_CRITICAL_SECTION CriticalSection
);
-
-NTSTATUS
-STDCALL
-RtlLookupAtomInAtomTable (
- IN PRTL_ATOM_TABLE AtomTable,
- IN PWSTR AtomName,
- OUT PRTL_ATOM Atom
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlAcquireResourceExclusive(
+ IN PRTL_RESOURCE Resource,
+ IN BOOLEAN Wait
);
+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
+PRTL_DEBUG_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 PRTL_DEBUG_BUFFER DebugBuffer);
+NTSYSAPI
NTSTATUS
-STDCALL
-RtlQueryTimeZoneInformation (
- IN OUT LPTIME_ZONE_INFORMATION TimeZoneInformation
+NTAPI
+RtlQueryProcessDebugInformation(
+ IN ULONG ProcessId,
+ IN ULONG DebugInfoClassMask,
+ IN OUT PRTL_DEBUG_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,
IN PVOID Environment
);
+NTSYSAPI
NTSTATUS
-STDCALL
-RtlWriteRegistryValue (
+NTAPI
+RtlWriteRegistryValue(
ULONG RelativeTo,
PCWSTR Path,
PCWSTR ValueName,
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