-/*
- * 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 TO BE CLEANED UP AT THE END WHEN ALL THE FUNCTIONS HAVE BEEN ADDED */
+#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;
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;
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)
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)
{
return Entry;
}
-static __inline
+FORCEINLINE
PLIST_ENTRY
RemoveTailList(
IN PLIST_ENTRY ListHead)
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));\
-}
-
-#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));\
-}
+//
+// LUID Macros
+//
+#define RtlEqualLuid(L1, L2) (((L1)->HighPart == (L2)->HighPart) && \
+ ((L1)->LowPart == (L2)->LowPart))
-#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));\
-}
+#endif
-#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));\
-}
+//
+// RTL Splay Tree Functions
+//
+NTSYSAPI
+PRTL_SPLAY_LINKS
+NTAPI
+RtlSplay(PRTL_SPLAY_LINKS Links);
-/*
- * Debug Functions
- */
+NTSYSAPI
+PRTL_SPLAY_LINKS
+NTAPI
+RtlDelete(PRTL_SPLAY_LINKS Links);
-ULONG
-CDECL
-DbgPrint(
- IN PCH Format,
- IN ...
+NTSYSAPI
+VOID
+NTAPI
+RtlDeleteNoSplay(
+ PRTL_SPLAY_LINKS Links,
+ PRTL_SPLAY_LINKS *Root
);
-VOID
-STDCALL
-DbgBreakPoint(VOID);
+NTSYSAPI
+PRTL_SPLAY_LINKS
+NTAPI
+RtlSubtreeSuccessor(PRTL_SPLAY_LINKS Links);
+
+NTSYSAPI
+PRTL_SPLAY_LINKS
+NTAPI
+RtlSubtreePredecessor(PRTL_SPLAY_LINKS Links);
+
+NTSYSAPI
+PRTL_SPLAY_LINKS
+NTAPI
+RtlRealSuccessor(PRTL_SPLAY_LINKS Links);
+
+NTSYSAPI
+PRTL_SPLAY_LINKS
+NTAPI
+RtlRealPredecessor(PRTL_SPLAY_LINKS Links);
+
+#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,
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
+);
+
+ULONG
+NTAPI
+RtlCompactHeap(
+ HANDLE heap,
+ ULONG flags
);
-HANDLE
-STDCALL
+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,
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,
#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,
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
+NTAPI
+RtlAddAccessDeniedAce(
+ PACL Acl,
+ ULONG Revision,
+ ACCESS_MASK AccessMask,
+ PSID Sid
+);
+
NTSTATUS
-STDCALL
+NTAPI
+RtlAddAccessDeniedAceEx(
+ IN OUT PACL Acl,
+ IN ULONG Revision,
+ IN ULONG Flags,
+ IN ACCESS_MASK AccessMask,
+ IN PSID Sid
+);
+
+NTSTATUS
+NTAPI
+RtlAddAuditAccessAceEx(
+ IN OUT PACL Acl,
+ IN ULONG Revision,
+ IN ULONG Flags,
+ IN ACCESS_MASK AccessMask,
+ IN PSID Sid,
+ IN BOOLEAN Success,
+ IN BOOLEAN Failure
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlAddAce(
+ PACL Acl,
+ ULONG AceRevision,
+ ULONG StartingAceIndex,
+ PVOID AceList,
+ ULONG AceListLength
+);
+
+NTSTATUS
+NTAPI
+RtlAddAuditAccessAce(
+ PACL Acl,
+ ULONG Revision,
+ ACCESS_MASK AccessMask,
+ PSID Sid,
+ BOOLEAN Success,
+ BOOLEAN Failure
+);
+
+NTSTATUS
+NTAPI
+RtlAdjustPrivilege(
+ IN ULONG Privilege,
+ IN BOOLEAN NewValue,
+ IN BOOLEAN ForThread,
+ OUT PBOOLEAN OldValue
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
RtlAllocateAndInitializeSid(
IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority,
IN UCHAR SubAuthorityCount,
OUT PSID *Sid
);
+BOOLEAN
+NTAPI
+RtlAreAllAccessesGranted(
+ ACCESS_MASK GrantedAccess,
+ ACCESS_MASK DesiredAccess
+);
+
+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,
);
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
);
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlDeleteAce(
+ PACL Acl,
+ ULONG AceIndex
+);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlEqualPrefixSid(
+ PSID Sid1,
+ PSID Sid2
+);
+
+NTSYSAPI
BOOLEAN
-STDCALL
+NTAPI
RtlEqualSid (
IN PSID Sid1,
IN PSID Sid2
);
+BOOLEAN
+NTAPI
+RtlFirstFreeAce(
+ PACL Acl,
+ PACE* Ace
+);
+
+NTSYSAPI
PVOID
-STDCALL
+NTAPI
RtlFreeSid (
IN PSID Sid
);
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlGetAce(
+ PACL Acl,
+ ULONG AceIndex,
+ PVOID *Ace
+);
+
+NTSTATUS
+NTAPI
+RtlGetControlSecurityDescriptor(
+ PSECURITY_DESCRIPTOR SecurityDescriptor,
+ PSECURITY_DESCRIPTOR_CONTROL Control,
+ PULONG Revision
+);
+
+NTSYSAPI
NTSTATUS
-STDCALL
+NTAPI
RtlGetDaclSecurityDescriptor(
IN PSECURITY_DESCRIPTOR SecurityDescriptor,
OUT PBOOLEAN DaclPresent,
OUT PBOOLEAN DaclDefaulted
);
+NTSYSAPI
NTSTATUS
-STDCALL
+NTAPI
RtlGetSaclSecurityDescriptor(
PSECURITY_DESCRIPTOR SecurityDescriptor,
PBOOLEAN SaclPresent,
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
);
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlGetSecurityDescriptorRMControl(
+ PSECURITY_DESCRIPTOR SecurityDescriptor,
+ PUCHAR RMControl
+);
+
+NTSYSAPI
+PSID_IDENTIFIER_AUTHORITY
+NTAPI
+RtlIdentifierAuthoritySid(PSID Sid);
+
+NTSYSAPI
+NTSTATUS
+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);
-#if (VER_PRODUCTBUILD >= 2195)
+NTSYSAPI
+VOID
+NTAPI
+RtlMapGenericMask(
+ PACCESS_MASK AccessMask,
+ PGENERIC_MAPPING GenericMapping
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlQueryInformationAcl(
+ PACL Acl,
+ PVOID Information,
+ ULONG InformationLength,
+ ACL_INFORMATION_CLASS InformationClass
+);
+NTSYSAPI
NTSTATUS
-STDCALL
+NTAPI
RtlSelfRelativeToAbsoluteSD(
IN PSECURITY_DESCRIPTOR SelfRelativeSD,
OUT PSECURITY_DESCRIPTOR AbsoluteSD,
IN PULONG PrimaryGroupSize
);
-#endif /* (VER_PRODUCTBUILD >= 2195) */
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlSelfRelativeToAbsoluteSD2(
+ IN OUT PSECURITY_DESCRIPTOR SelfRelativeSD,
+ OUT PULONG BufferSize
+);
+NTSYSAPI
NTSTATUS
-STDCALL
+NTAPI
+RtlSetControlSecurityDescriptor(
+ IN PSECURITY_DESCRIPTOR SecurityDescriptor,
+ IN SECURITY_DESCRIPTOR_CONTROL ControlBitsOfInterest,
+ IN SECURITY_DESCRIPTOR_CONTROL ControlBitsToSet
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
RtlSetDaclSecurityDescriptor (
PSECURITY_DESCRIPTOR SecurityDescriptor,
BOOLEAN DaclPresent,
BOOLEAN DaclDefaulted
);
+NTSYSAPI
NTSTATUS
-STDCALL
+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
-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,
IN BOOLEAN SaclDefaulted
);
+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 SecurityDescriptorInput,
+ IN ULONG SecurityDescriptorLength,
+ IN SECURITY_INFORMATION RequiredInformation
+);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlValidSecurityDescriptor(IN PSECURITY_DESCRIPTOR SecurityDescriptor);
+
+NTSYSAPI
+BOOLEAN
+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,
IN OUT PCHAR String
);
-NTSTATUS
-STDCALL
+NTSYSAPI
+NTSTATUS
+NTAPI
RtlIntegerToUnicode(
IN ULONG Value,
IN ULONG Base OPTIONAL,
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,
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,
PWCHAR UnicodeString,
ULONG UnicodeSize
);
-
-/*
- * Unicode->MultiByte String Functions
- */
+
+//
+// Unicode->MultiByte String Functions
+//
+NTSYSAPI
NTSTATUS
-STDCALL
+NTAPI
RtlUnicodeToMultiByteN(
PCHAR MbString,
ULONG MbSize,
ULONG UnicodeSize
);
+NTSYSAPI
NTSTATUS
-STDCALL
+NTAPI
RtlUpcaseUnicodeToMultiByteN(
PCHAR MbString,
ULONG MbSize,
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,
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
+NTAPI
+RtlPrefixString(
+ PCANSI_STRING String1,
+ PCANSI_STRING String2,
+ BOOLEAN CaseInsensitive
+);
+NTSYSAPI
BOOLEAN
-STDCALL
+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,
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
+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 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
+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,
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
);
-/*
- * Critical Section/Resource Functions
- */
+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
+//
+NTSYSAPI
+NTSTATUS
+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
+);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlpUnWaitCriticalSection(
+ IN PRTL_CRITICAL_SECTION CriticalSection
+);
-/*
- * Compression Functions
- */
+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,
IN PVOID WorkSpace
);
+NTSYSAPI
NTSTATUS
-STDCALL
+NTAPI
RtlDecompressBuffer(
IN USHORT CompressionFormat,
OUT PUCHAR UncompressedBuffer,
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
);
-/*
- * PE Functions
- */
+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
+//
+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,
PULONG Size
);
+NTSYSAPI
ULONG
-STDCALL
+NTAPI
RtlImageRvaToVa(
PIMAGE_NT_HEADERS NtHeader,
PVOID BaseAddress,
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,
IN PVOID Environment
);
+NTSYSAPI
NTSTATUS
-STDCALL
+NTAPI
RtlWriteRegistryValue(
ULONG RelativeTo,
PCWSTR Path,
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,
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
-RtlIsNameLegalDOS8Dot3(
- IN PUNICODE_STRING UnicodeName,
- IN PANSI_STRING AnsiName,
- PBOOLEAN Unknown
-);
+#if defined(NTOS_MODE_USER) && !defined(NO_RTL_INLINES)
+
+//
+// Misc conversion functions
+//
+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
-STDCALL
-RtlIsTextUnicode(
- PVOID Buffer,
- ULONG Length,
- ULONG *Flags
+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
-STDCALL
+NTAPI
+RtlIpv6StringToAddressA(
+ IN LPSTR Name,
+ OUT PULONG Unknown,
+ OUT PVOID IpAddr
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlIpv6StringToAddressW(
+ IN LPWSTR Name,
+ OUT PULONG Unknown,
+ OUT PVOID IpAddr
+);
+
+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
+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