-/*
- * 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 <ntnls.h>
+#include "extypes.h"
+#include "rtltypes.h"
-/* FIXME: FILE NEEDS SOME ALPHABETIZING AND REGROUP */
+#ifdef NTOS_MODE_USER
-/* List Macros */
-static __inline
+//
+// List Functions
+//
+FORCEINLINE
VOID
InitializeListHead(
- IN PLIST_ENTRY ListHead)
+ IN PLIST_ENTRY ListHead
+)
{
ListHead->Flink = ListHead->Blink = ListHead;
}
-static __inline
+FORCEINLINE
VOID
InsertHeadList(
- IN PLIST_ENTRY ListHead,
- IN PLIST_ENTRY Entry)
+ IN PLIST_ENTRY ListHead,
+ IN PLIST_ENTRY Entry
+)
{
PLIST_ENTRY OldFlink;
OldFlink = ListHead->Flink;
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));\
-}
+//
+// LUID Macros
+//
+#define RtlEqualLuid(L1, L2) (((L1)->HighPart == (L2)->HighPart) && \
+ ((L1)->LowPart == (L2)->LowPart))
-#define InsertDescendingListFIFO(ListHead, Type, ListEntryField, NewEntry, SortField)\
-{\
- PLIST_ENTRY current;\
-\
- current = (ListHead)->Flink;\
- while (current != (ListHead))\
- {\
- if (CONTAINING_RECORD(current, Type, ListEntryField)->SortField <\
- (NewEntry)->SortField)\
- {\
- break;\
- }\
- current = current->Flink;\
- }\
-\
- InsertTailList(current, &((NewEntry)->ListEntryField));\
-}
+#endif
-#define InsertAscendingList(ListHead, Type, ListEntryField, NewEntry, SortField)\
-{\
- PLIST_ENTRY current;\
-\
- current = (ListHead)->Flink;\
- while (current != (ListHead))\
- {\
- if (CONTAINING_RECORD(current, Type, ListEntryField)->SortField >=\
- (NewEntry)->SortField)\
- {\
- break;\
- }\
- current = current->Flink;\
- }\
-\
- InsertTailList(current, &((NewEntry)->ListEntryField));\
-}
+//
+// RTL Splay Tree Functions
+//
+NTSYSAPI
+PRTL_SPLAY_LINKS
+NTAPI
+RtlSplay(PRTL_SPLAY_LINKS Links);
-#define InsertDescendingList(ListHead, Type, ListEntryField, NewEntry, SortField)\
-{\
- PLIST_ENTRY current;\
-\
- current = (ListHead)->Flink;\
- while (current != (ListHead))\
- {\
- if (CONTAINING_RECORD(current, Type, ListEntryField)->SortField <=\
- (NewEntry)->SortField)\
- {\
- break;\
- }\
- current = current->Flink;\
- }\
-\
- InsertTailList(current, &((NewEntry)->ListEntryField));\
-}
+NTSYSAPI
+PRTL_SPLAY_LINKS
+NTAPI
+RtlDelete(PRTL_SPLAY_LINKS Links);
-/*
- * Constant String Macro
- */
-#define RTL_CONSTANT_STRING(__SOURCE_STRING__) \
-{ \
- sizeof(__SOURCE_STRING__) - sizeof((__SOURCE_STRING__)[0]), \
- sizeof(__SOURCE_STRING__), \
- (__SOURCE_STRING__) \
-}
+NTSYSAPI
+VOID
+NTAPI
+RtlDeleteNoSplay(
+ PRTL_SPLAY_LINKS Links,
+ PRTL_SPLAY_LINKS *Root
+);
+
+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
-/*
- * Error and Exception Functions
- */
+#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
-STDCALL
+NTAPI
RtlAddVectoredExceptionHandler(
IN ULONG FirstHandler,
- IN PRTL_VECTORED_EXCEPTION_HANDLER VectoredHandler
+ 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
-STDCALL
+NTAPI
RtlEncodePointer(IN PVOID Pointer);
+NTSYSAPI
PVOID
-STDCALL
+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
);
-DWORD
-STDCALL
+ULONG
+NTAPI
RtlCompactHeap(
HANDLE heap,
- DWORD flags
+ ULONG flags
);
-
-HANDLE
-STDCALL
+
+NTSYSAPI
+HANDLE
+NTAPI
RtlDestroyHeap(HANDLE hheap);
+NTSYSAPI
BOOLEAN
-STDCALL
+NTAPI
RtlFreeHeap(
IN HANDLE HeapHandle,
IN ULONG Flags,
);
ULONG
-STDCALL
+NTAPI
RtlGetProcessHeaps(
ULONG HeapCount,
HANDLE *HeapArray
);
-
-PVOID
-STDCALL
+
+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,
PSID Sid
);
-NTSTATUS
-STDCALL
+NTSTATUS
+NTAPI
RtlAddAccessAllowedAceEx(
IN OUT PACL pAcl,
- IN DWORD dwAceRevision,
- IN DWORD AceFlags,
- IN DWORD AccessMask,
+ IN ULONG dwAceRevision,
+ IN ULONG AceFlags,
+ IN ULONG AccessMask,
IN PSID pSid
);
-NTSTATUS
-STDCALL
+NTSTATUS
+NTAPI
RtlAddAccessDeniedAce(
PACL Acl,
ULONG Revision,
PSID Sid
);
-NTSTATUS
-STDCALL
+NTSTATUS
+NTAPI
RtlAddAccessDeniedAceEx(
IN OUT PACL Acl,
IN ULONG Revision,
IN PSID Sid
);
-NTSTATUS
-STDCALL
+NTSTATUS
+NTAPI
RtlAddAuditAccessAceEx(
IN OUT PACL Acl,
IN ULONG Revision,
IN BOOLEAN Failure
);
-NTSTATUS
-STDCALL
+NTSYSAPI
+NTSTATUS
+NTAPI
RtlAddAce(
PACL Acl,
- ULONG Revision,
- ULONG StartingIndex,
- PACE AceList,
+ ULONG AceRevision,
+ ULONG StartingAceIndex,
+ PVOID AceList,
ULONG AceListLength
);
-NTSTATUS
-STDCALL
+NTSTATUS
+NTAPI
RtlAddAuditAccessAce(
PACL Acl,
ULONG Revision,
BOOLEAN Success,
BOOLEAN Failure
);
-
+
NTSTATUS
-STDCALL
+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
-STDCALL
+BOOLEAN
+NTAPI
RtlAreAllAccessesGranted(
ACCESS_MASK GrantedAccess,
ACCESS_MASK DesiredAccess
);
-BOOLEAN
-STDCALL
+BOOLEAN
+NTAPI
RtlAreAnyAccessesGranted(
ACCESS_MASK GrantedAccess,
ACCESS_MASK DesiredAccess
);
+NTSYSAPI
VOID
-STDCALL
+NTAPI
RtlCopyLuid(
IN PLUID LuidDest,
IN PLUID LuidSrc
);
-VOID
-STDCALL
+VOID
+NTAPI
RtlCopyLuidAndAttributesArray(
ULONG Count,
PLUID_AND_ATTRIBUTES Src,
PLUID_AND_ATTRIBUTES Dest
);
-
-NTSTATUS
-STDCALL
+
+NTSTATUS
+NTAPI
RtlCopySidAndAttributesArray(
ULONG Count,
PSID_AND_ATTRIBUTES Src,
);
NTSTATUS
-STDCALL
+NTAPI
RtlConvertSidToUnicodeString(
OUT PUNICODE_STRING DestinationString,
IN PSID Sid,
IN BOOLEAN AllocateDestinationString
);
+NTSYSAPI
NTSTATUS
-STDCALL
+NTAPI
RtlCopySid(
IN ULONG Length,
IN PSID Destination,
IN PSID Source
);
+NTSYSAPI
NTSTATUS
-STDCALL
+NTAPI
RtlCreateAcl(
PACL Acl,
ULONG AclSize,
ULONG AclRevision
);
+NTSYSAPI
NTSTATUS
-STDCALL
+NTAPI
RtlCreateSecurityDescriptor(
PSECURITY_DESCRIPTOR SecurityDescriptor,
ULONG Revision
);
-NTSTATUS
-STDCALL
+NTSYSAPI
+NTSTATUS
+NTAPI
RtlCreateSecurityDescriptorRelative(
- PSECURITY_DESCRIPTOR_RELATIVE SecurityDescriptor,
+ PISECURITY_DESCRIPTOR_RELATIVE SecurityDescriptor,
ULONG Revision
);
-NTSTATUS
-STDCALL
+NTSYSAPI
+NTSTATUS
+NTAPI
RtlDeleteAce(
PACL Acl,
ULONG AceIndex
);
-BOOLEAN
-STDCALL
+NTSYSAPI
+BOOLEAN
+NTAPI
RtlEqualPrefixSid(
PSID Sid1,
PSID Sid2
);
-
+
+NTSYSAPI
BOOLEAN
-STDCALL
+NTAPI
RtlEqualSid (
IN PSID Sid1,
IN PSID Sid2
);
-BOOLEAN
-STDCALL
+BOOLEAN
+NTAPI
RtlFirstFreeAce(
PACL Acl,
PACE* Ace
);
+NTSYSAPI
PVOID
-STDCALL
+NTAPI
RtlFreeSid (
IN PSID Sid
);
-NTSTATUS
-STDCALL
+NTSYSAPI
+NTSTATUS
+NTAPI
RtlGetAce(
PACL Acl,
ULONG AceIndex,
- PACE *Ace
+ PVOID *Ace
);
-NTSTATUS
-STDCALL
+NTSTATUS
+NTAPI
RtlGetControlSecurityDescriptor(
PSECURITY_DESCRIPTOR SecurityDescriptor,
PSECURITY_DESCRIPTOR_CONTROL Control,
PULONG Revision
);
-
+
+NTSYSAPI
NTSTATUS
-STDCALL
+NTAPI
RtlGetDaclSecurityDescriptor(
IN PSECURITY_DESCRIPTOR SecurityDescriptor,
OUT PBOOLEAN DaclPresent,
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
);
-BOOLEAN
-STDCALL
+NTSYSAPI
+BOOLEAN
+NTAPI
RtlGetSecurityDescriptorRMControl(
PSECURITY_DESCRIPTOR SecurityDescriptor,
PUCHAR RMControl
);
-
-PSID_IDENTIFIER_AUTHORITY
-STDCALL
+
+NTSYSAPI
+PSID_IDENTIFIER_AUTHORITY
+NTAPI
RtlIdentifierAuthoritySid(PSID Sid);
+NTSYSAPI
NTSTATUS
-STDCALL
+NTAPI
RtlImpersonateSelf(IN SECURITY_IMPERSONATION_LEVEL ImpersonationLevel);
+NTSYSAPI
NTSTATUS
-STDCALL
+NTAPI
RtlInitializeSid(
IN OUT PSID Sid,
IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority,
IN UCHAR SubAuthorityCount
);
+NTSYSAPI
ULONG
-STDCALL
-RtlLengthRequiredSid(IN UCHAR SubAuthorityCount);
+NTAPI
+RtlLengthRequiredSid(IN ULONG SubAuthorityCount);
+NTSYSAPI
ULONG
-STDCALL
+NTAPI
RtlLengthSid(IN PSID Sid);
-VOID
-STDCALL
+NTSYSAPI
+VOID
+NTAPI
RtlMapGenericMask(
PACCESS_MASK AccessMask,
PGENERIC_MAPPING GenericMapping
);
-
-NTSTATUS
-STDCALL
+
+NTSYSAPI
+NTSTATUS
+NTAPI
RtlQueryInformationAcl(
PACL Acl,
PVOID Information,
ACL_INFORMATION_CLASS InformationClass
);
+NTSYSAPI
NTSTATUS
-STDCALL
+NTAPI
RtlSelfRelativeToAbsoluteSD(
- IN PSECURITY_DESCRIPTOR_RELATIVE SelfRelativeSD,
+ IN PSECURITY_DESCRIPTOR SelfRelativeSD,
OUT PSECURITY_DESCRIPTOR AbsoluteSD,
IN PULONG AbsoluteSDSize,
IN PACL Dacl,
IN PULONG PrimaryGroupSize
);
-NTSTATUS
-STDCALL
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlSelfRelativeToAbsoluteSD2(
+ IN OUT PSECURITY_DESCRIPTOR SelfRelativeSD,
+ OUT PULONG BufferSize
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
RtlSetControlSecurityDescriptor(
IN PSECURITY_DESCRIPTOR SecurityDescriptor,
IN SECURITY_DESCRIPTOR_CONTROL ControlBitsOfInterest,
IN SECURITY_DESCRIPTOR_CONTROL ControlBitsToSet
);
+NTSYSAPI
NTSTATUS
-STDCALL
+NTAPI
RtlSetDaclSecurityDescriptor (
PSECURITY_DESCRIPTOR SecurityDescriptor,
BOOLEAN DaclPresent,
BOOLEAN DaclDefaulted
);
+NTSYSAPI
NTSTATUS
-STDCALL
+NTAPI
RtlSetGroupSecurityDescriptor(
IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
IN PSID Group,
IN BOOLEAN GroupDefaulted
);
-NTSTATUS
-STDCALL
+NTSYSAPI
+NTSTATUS
+NTAPI
RtlSetInformationAcl(
PACL Acl,
PVOID Information,
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
);
-VOID
-STDCALL
+NTSYSAPI
+VOID
+NTAPI
RtlSetSecurityDescriptorRMControl(
PSECURITY_DESCRIPTOR SecurityDescriptor,
PUCHAR RMControl
);
+NTSYSAPI
PUCHAR
-STDCALL
+NTAPI
RtlSubAuthorityCountSid(
IN PSID Sid
);
+NTSYSAPI
PULONG
-STDCALL
+NTAPI
RtlSubAuthoritySid(
IN PSID Sid,
IN ULONG SubAuthority
);
+NTSYSAPI
BOOLEAN
-STDCALL
+NTAPI
RtlValidRelativeSecurityDescriptor(
- IN PSECURITY_DESCRIPTOR_RELATIVE SecurityDescriptorInput,
+ IN PSECURITY_DESCRIPTOR SecurityDescriptorInput,
IN ULONG SecurityDescriptorLength,
IN SECURITY_INFORMATION RequiredInformation
);
-BOOLEAN
-STDCALL
+NTSYSAPI
+BOOLEAN
+NTAPI
RtlValidSecurityDescriptor(IN PSECURITY_DESCRIPTOR SecurityDescriptor);
+NTSYSAPI
BOOLEAN
-STDCALL
+NTAPI
RtlValidSid(IN PSID Sid);
-BOOLEAN
-STDCALL
+NTSYSAPI
+BOOLEAN
+NTAPI
RtlValidAcl(PACL Acl);
-/*
- * Single-Character Functions
- */
-NTSTATUS
-STDCALL
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlDeleteSecurityObject(
+ IN PSECURITY_DESCRIPTOR *ObjectDescriptor
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlNewSecurityObject(
+ IN PSECURITY_DESCRIPTOR ParentDescriptor,
+ IN PSECURITY_DESCRIPTOR CreatorDescriptor,
+ OUT PSECURITY_DESCRIPTOR *NewDescriptor,
+ IN BOOLEAN IsDirectoryObject,
+ IN HANDLE Token,
+ IN PGENERIC_MAPPING GenericMapping
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlQuerySecurityObject(
+ IN PSECURITY_DESCRIPTOR ObjectDescriptor,
+ IN SECURITY_INFORMATION SecurityInformation,
+ OUT PSECURITY_DESCRIPTOR ResultantDescriptor,
+ IN ULONG DescriptorLength,
+ OUT PULONG ReturnLength
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlSetSecurityObject(
+ IN SECURITY_INFORMATION SecurityInformation,
+ IN PSECURITY_DESCRIPTOR ModificationDescriptor,
+ OUT PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor,
+ IN PGENERIC_MAPPING GenericMapping,
+ IN HANDLE Token
+);
+
+//
+// Single-Character Functions
+//
+NTSYSAPI
+NTSTATUS
+NTAPI
RtlLargeIntegerToChar(
IN PLARGE_INTEGER Value,
IN ULONG Base,
IN ULONG Length,
IN OUT PCHAR String
);
-
-CHAR
-STDCALL
+
+NTSYSAPI
+CHAR
+NTAPI
RtlUpperChar(CHAR Source);
+NTSYSAPI
WCHAR
-STDCALL
+NTAPI
RtlUpcaseUnicodeChar(WCHAR Source);
-
-WCHAR
-STDCALL
+
+NTSYSAPI
+WCHAR
+NTAPI
RtlDowncaseUnicodeChar(IN WCHAR Source);
+NTSYSAPI
NTSTATUS
-STDCALL
+NTAPI
RtlIntegerToChar(
IN ULONG Value,
IN ULONG Base,
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
-STDCALL
+NTAPI
+RtlPrefixString(
+ PCANSI_STRING String1,
+ PCANSI_STRING String2,
+ BOOLEAN CaseInsensitive
+);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
RtlPrefixUnicodeString(
- PUNICODE_STRING String1,
- PUNICODE_STRING String2,
+ PCUNICODE_STRING String1,
+ PCUNICODE_STRING String2,
BOOLEAN CaseInsensitive
);
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlUpcaseUnicodeString(
+ PUNICODE_STRING DestinationString,
+ PCUNICODE_STRING SourceString,
+ BOOLEAN AllocateDestinationString
+);
+
+NTSYSAPI
NTSTATUS
-STDCALL
+NTAPI
RtlUnicodeStringToInteger(
- PUNICODE_STRING String,
+ PCUNICODE_STRING String,
ULONG Base,
PULONG Value
);
-/*
- * Ansi String Functions
- */
+//
+// Ansi String Functions
+//
+NTSYSAPI
VOID
-STDCALL
+NTAPI
RtlFreeAnsiString(IN PANSI_STRING AnsiString);
+NTSYSAPI
VOID
-STDCALL
+NTAPI
RtlInitAnsiString(
PANSI_STRING DestinationString,
PCSZ SourceString
);
-
-/*
- * OEM String Functions
- */
-VOID
-STDCALL
+
+//
+// OEM String Functions
+//
+NTSYSAPI
+VOID
+NTAPI
RtlFreeOemString(IN POEM_STRING OemString);
-/*
- * MultiByte->Unicode String Functions
- */
+//
+// MultiByte->Unicode String Functions
+//
+NTSYSAPI
NTSTATUS
-STDCALL
+NTAPI
RtlMultiByteToUnicodeN(
PWCHAR UnicodeString,
ULONG UnicodeSize,
PULONG ResultSize,
- const PCHAR MbString,
+ PCSTR MbString,
ULONG MbSize
);
+NTSYSAPI
NTSTATUS
-STDCALL
+NTAPI
RtlMultiByteToUnicodeSize(
PULONG UnicodeSize,
- PCHAR MbString,
+ PCSTR MbString,
ULONG MbSize
);
-/*
- * Atom Functions
- */
+//
+// Atom Functions
+//
+NTSYSAPI
NTSTATUS
-STDCALL
+NTAPI
RtlAddAtomToAtomTable(
IN PRTL_ATOM_TABLE AtomTable,
IN PWSTR AtomName,
OUT PRTL_ATOM Atom
);
+NTSYSAPI
NTSTATUS
-STDCALL
+NTAPI
RtlCreateAtomTable(
IN ULONG TableSize,
IN OUT PRTL_ATOM_TABLE *AtomTable
);
+NTSYSAPI
NTSTATUS
-STDCALL
+NTAPI
RtlDeleteAtomFromAtomTable(
IN PRTL_ATOM_TABLE AtomTable,
IN RTL_ATOM Atom
);
-NTSTATUS
-STDCALL
+NTSYSAPI
+NTSTATUS
+NTAPI
RtlDestroyAtomTable(IN PRTL_ATOM_TABLE AtomTable);
+NTSYSAPI
NTSTATUS
-STDCALL
+NTAPI
RtlQueryAtomInAtomTable(
IN PRTL_ATOM_TABLE AtomTable,
IN RTL_ATOM Atom,
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
- */
-/* FIXME: Some of these will be split up into enviro/path functions */
+//
+// Process Management Functions
+//
+NTSYSAPI
VOID
-STDCALL
+NTAPI
RtlAcquirePebLock(VOID);
+NTSYSAPI
NTSTATUS
-STDCALL
+NTAPI
RtlCreateProcessParameters (
OUT PRTL_USER_PROCESS_PARAMETERS *ProcessParameters,
IN PUNICODE_STRING ImagePathName OPTIONAL,
IN PUNICODE_STRING ShellInfo OPTIONAL,
IN PUNICODE_STRING RuntimeInfo OPTIONAL
);
-
+
+NTSYSAPI
NTSTATUS
-STDCALL
+NTAPI
RtlCreateUserProcess(
IN PUNICODE_STRING ImageFileName,
IN ULONG Attributes,
IN BOOLEAN CurrentDirectory,
IN HANDLE DebugPort OPTIONAL,
IN HANDLE ExceptionPort OPTIONAL,
- OUT PRTL_PROCESS_INFO ProcessInfo
-);
-
-NTSTATUS
-STDCALL
-RtlDestroyProcessParameters(IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters);
-
-VOID
-STDCALL
-RtlReleasePebLock(VOID);
-
-NTSTATUS
-STDCALL
-RtlCreateEnvironment(
- BOOLEAN Inherit,
- PWSTR *Environment
+ OUT PRTL_USER_PROCESS_INFORMATION ProcessInfo
);
+NTSYSAPI
NTSTATUS
-STDCALL
+NTAPI
RtlCreateUserThread(
IN HANDLE ProcessHandle,
IN PSECURITY_DESCRIPTOR SecurityDescriptor,
IN BOOLEAN CreateSuspended,
IN LONG StackZeroBits,
- IN OUT PULONG StackReserve,
- IN OUT PULONG StackCommit,
+ IN ULONG StackReserve,
+ IN ULONG StackCommit,
IN PTHREAD_START_ROUTINE StartAddress,
IN PVOID Parameter,
IN OUT PHANDLE ThreadHandle,
IN OUT PCLIENT_ID ClientId
);
+NTSYSAPI
PRTL_USER_PROCESS_PARAMETERS
-STDCALL
-RtlDeNormalizeProcessParams(
- IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
+NTAPI
+RtlDeNormalizeProcessParams(IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlDestroyProcessParameters(IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlExitUserThread(NTSTATUS Status);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlInitializeContext(
+ IN HANDLE ProcessHandle,
+ OUT PCONTEXT ThreadContext,
+ IN PVOID ThreadStartParam OPTIONAL,
+ IN PTHREAD_START_ROUTINE ThreadStartAddress,
+ IN PINITIAL_TEB InitialTeb
);
+NTSYSAPI
+PRTL_USER_PROCESS_PARAMETERS
+NTAPI
+RtlNormalizeProcessParams(IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlReleasePebLock(VOID);
+
+NTSYSAPI
VOID
-STDCALL
-RtlDestroyEnvironment(
- PWSTR Environment
+NTAPI
+RtlSetProcessIsCritical(
+ IN BOOLEAN NewValue,
+ OUT PBOOLEAN OldValue OPTIONAL,
+ IN BOOLEAN IsWinlogon
);
-
+
+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;
+}
+
+//
+// Environment/Path Functions
+//
+NTSYSAPI
NTSTATUS
-STDCALL
-RtlExpandEnvironmentStrings_U(
- PWSTR Environment,
- PUNICODE_STRING Source,
- PUNICODE_STRING Destination,
- PULONG Length
+NTAPI
+RtlCreateEnvironment(
+ BOOLEAN Inherit,
+ PWSTR *Environment
);
+NTSYSAPI
+VOID
+NTAPI
+RtlDestroyEnvironment(PWSTR Environment);
+
+NTSYSAPI
BOOLEAN
-STDCALL
+NTAPI
RtlDoesFileExists_U(PWSTR FileName);
+NTSYSAPI
ULONG
-STDCALL
+NTAPI
RtlDetermineDosPathNameType_U(PCWSTR Path);
-
+
+NTSYSAPI
ULONG
-STDCALL
+NTAPI
RtlDosSearchPath_U(
WCHAR *sp,
WCHAR *name,
WCHAR *buffer,
WCHAR **shortname
);
-
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlDosPathNameToNtPathName_U(
+ PWSTR DosName,
+ PUNICODE_STRING NtName,
+ PWSTR *ShortName,
+ PCURDIR CurrentDirectory
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlExpandEnvironmentStrings_U(
+ PWSTR Environment,
+ PUNICODE_STRING Source,
+ PUNICODE_STRING Destination,
+ PULONG Length
+);
+
+NTSYSAPI
ULONG
-STDCALL
+NTAPI
RtlGetCurrentDirectory_U(
ULONG MaximumLength,
PWSTR Buffer
);
+NTSYSAPI
ULONG
-STDCALL
+NTAPI
RtlGetFullPathName_U(
const WCHAR *dosname,
ULONG size,
WCHAR **shortname
);
-PRTL_USER_PROCESS_PARAMETERS
-STDCALL
-RtlNormalizeProcessParams(
- IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlIsNameLegalDOS8Dot3(
+ IN PUNICODE_STRING UnicodeName,
+ IN PANSI_STRING AnsiName,
+ PBOOLEAN Unknown
);
+NTSYSAPI
NTSTATUS
-STDCALL
+NTAPI
RtlQueryEnvironmentVariable_U(
PWSTR Environment,
PUNICODE_STRING Name,
PUNICODE_STRING Value
);
+NTSYSAPI
NTSTATUS
-STDCALL
+NTAPI
RtlSetCurrentDirectory_U(PUNICODE_STRING name);
-
+
+NTSYSAPI
NTSTATUS
-STDCALL
+NTAPI
RtlSetEnvironmentVariable(
PWSTR *Environment,
PUNICODE_STRING Name,
PUNICODE_STRING Value
);
-/*
- * Critical Section/Resource Functions
- */
+//
+// Critical Section/Resource Functions
+//
+NTSYSAPI
NTSTATUS
-STDCALL
+NTAPI
RtlDeleteCriticalSection (
- PRTL_CRITICAL_SECTION CriticalSection
+ IN PRTL_CRITICAL_SECTION CriticalSection
);
-
+
+NTSYSAPI
NTSTATUS
-STDCALL
+NTAPI
RtlEnterCriticalSection(
- PRTL_CRITICAL_SECTION CriticalSection
+ IN PRTL_CRITICAL_SECTION CriticalSection
);
-NTSTATUS
-STDCALL
+NTSYSAPI
+NTSTATUS
+NTAPI
RtlInitializeCriticalSection(
- PRTL_CRITICAL_SECTION CriticalSection
+ IN PRTL_CRITICAL_SECTION CriticalSection
);
-NTSTATUS
-STDCALL
+NTSYSAPI
+NTSTATUS
+NTAPI
RtlInitializeCriticalSectionAndSpinCount(
- PRTL_CRITICAL_SECTION CriticalSection,
- ULONG SpinCount
+ IN PRTL_CRITICAL_SECTION CriticalSection,
+ IN ULONG SpinCount
);
+NTSYSAPI
NTSTATUS
-STDCALL
+NTAPI
RtlLeaveCriticalSection(
- PRTL_CRITICAL_SECTION CriticalSection
-);
+ IN PRTL_CRITICAL_SECTION CriticalSection
+);
-/*
- * Compression Functions
- */
+NTSYSAPI
+VOID
+NTAPI
+RtlpUnWaitCriticalSection(
+ IN PRTL_CRITICAL_SECTION CriticalSection
+);
+
+NTSYSAPI
+NTSTATUS
+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
-STDCALL
+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
);
-/*
- * Debug Info Functions
- */
-PDEBUG_BUFFER
-STDCALL
+//
+// Debug Info Functions
+//
+NTSYSAPI
+PRTL_DEBUG_BUFFER
+NTAPI
RtlCreateQueryDebugBuffer(
IN ULONG Size,
IN BOOLEAN EventPair
);
+NTSYSAPI
NTSTATUS
-STDCALL
-RtlDestroyQueryDebugBuffer(IN PDEBUG_BUFFER DebugBuffer);
+NTAPI
+RtlDestroyQueryDebugBuffer(IN PRTL_DEBUG_BUFFER DebugBuffer);
-NTSTATUS
-STDCALL
+NTSYSAPI
+NTSTATUS
+NTAPI
RtlQueryProcessDebugInformation(
IN ULONG ProcessId,
IN ULONG DebugInfoClassMask,
- IN OUT PDEBUG_BUFFER DebugBuffer
+ IN OUT PRTL_DEBUG_BUFFER DebugBuffer
);
-
-/*
- * Bitmap Functions
- */
+
+//
+// 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
- */
+//
+// Timer Functions
+//
+NTSYSAPI
NTSTATUS
-STDCALL
+NTAPI
RtlCreateTimer(
HANDLE TimerQueue,
- PHANDLE phNewTimer,
+ PHANDLE phNewTimer,
WAITORTIMERCALLBACKFUNC Callback,
PVOID Parameter,
- DWORD DueTime,
- DWORD Period,
+ ULONG DueTime,
+ ULONG Period,
ULONG Flags
);
+NTSYSAPI
NTSTATUS
-STDCALL
+NTAPI
RtlCreateTimerQueue(PHANDLE TimerQueue);
+NTSYSAPI
NTSTATUS
-STDCALL
+NTAPI
RtlDeleteTimer(
HANDLE TimerQueue,
HANDLE Timer,
HANDLE CompletionEvent
);
+NTSYSAPI
NTSTATUS
-STDCALL
+NTAPI
RtlUpdateTimer(
HANDLE TimerQueue,
HANDLE Timer,
ULONG Period
);
+NTSYSAPI
NTSTATUS
-STDCALL
+NTAPI
RtlDeleteTimerQueueEx(
HANDLE TimerQueue,
HANDLE CompletionEvent
);
+NTSYSAPI
NTSTATUS
-STDCALL
+NTAPI
RtlDeleteTimerQueue(HANDLE TimerQueue);
-/*
- * Debug Functions
- */
+//
+// Debug Functions
+//
ULONG
-CDECL
+__cdecl
DbgPrint(
IN PCH Format,
IN ...
);
VOID
-STDCALL
+NTAPI
DbgBreakPoint(VOID);
-/*
- * Handle Table Functions
- */
-PRTL_HANDLE
-STDCALL
-RtlAllocateHandle (
- IN PRTL_HANDLE_TABLE HandleTable,
- IN OUT PULONG Index
+//
+// Handle Table Functions
+//
+NTSYSAPI
+PRTL_HANDLE_TABLE_ENTRY
+NTAPI
+RtlAllocateHandle(
+ IN PRTL_HANDLE_TABLE HandleTable,
+ IN OUT PULONG Index
);
+NTSYSAPI
VOID
-STDCALL
-RtlDestroyHandleTable (IN PRTL_HANDLE_TABLE HandleTable);
+NTAPI
+RtlDestroyHandleTable(IN PRTL_HANDLE_TABLE HandleTable);
+NTSYSAPI
BOOLEAN
-STDCALL
-RtlFreeHandle (
- IN PRTL_HANDLE_TABLE HandleTable,
- IN PRTL_HANDLE Handle
+NTAPI
+RtlFreeHandle(
+ IN PRTL_HANDLE_TABLE HandleTable,
+ IN PRTL_HANDLE_TABLE_ENTRY Handle
);
+NTSYSAPI
VOID
-STDCALL
-RtlInitializeHandleTable (
- IN ULONG TableSize,
- IN ULONG HandleSize,
- IN PRTL_HANDLE_TABLE HandleTable
+NTAPI
+RtlInitializeHandleTable(
+ IN ULONG TableSize,
+ IN ULONG HandleSize,
+ IN PRTL_HANDLE_TABLE HandleTable
);
+NTSYSAPI
BOOLEAN
-STDCALL
-RtlIsValidHandle (
- IN PRTL_HANDLE_TABLE HandleTable,
- IN PRTL_HANDLE Handle
+NTAPI
+RtlIsValidHandle(
+ IN PRTL_HANDLE_TABLE HandleTable,
+ IN PRTL_HANDLE_TABLE_ENTRY Handle
);
+NTSYSAPI
BOOLEAN
-STDCALL
-RtlIsValidIndexHandle (
- IN PRTL_HANDLE_TABLE HandleTable,
- IN OUT PRTL_HANDLE *Handle,
- IN ULONG Index
-);
-
-/*
- * PE Functions
- */
-NTSTATUS
-STDCALL
+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,
OUT PRTL_MESSAGE_RESOURCE_ENTRY *MessageResourceEntry
);
-ULONG
-STDCALL
+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
- */
+//
+// Registry Functions
+//
+NTSYSAPI
NTSTATUS
-STDCALL
+NTAPI
RtlCheckRegistryKey(
ULONG RelativeTo,
PWSTR Path
);
-
-NTSTATUS
-STDCALL
+
+NTSYSAPI
+NTSTATUS
+NTAPI
RtlFormatCurrentUserKeyPath(IN OUT PUNICODE_STRING KeyPath);
-
-NTSTATUS
-STDCALL
+
+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,
PVOID ValueData,
ULONG ValueLength
);
-
-/*
- * 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
-RtlDosPathNameToNtPathName_U(
- PWSTR DosName,
- PUNICODE_STRING NtName,
- PWSTR *ShortName,
- PCURDIR CurrentDirectory
-);
-
-BOOLEAN
-STDCALL
-RtlIsNameLegalDOS8Dot3(
- IN PUNICODE_STRING UnicodeName,
- IN PANSI_STRING AnsiName,
- PBOOLEAN Unknown
-);
+#if defined(NTOS_MODE_USER) && !defined(NO_RTL_INLINES)
-ULONG
-STDCALL
-RtlIsTextUnicode(
- PVOID Buffer,
- ULONG Length,
- ULONG *Flags
-);
+//
+// Misc conversion functions
+//
+static __inline
+LARGE_INTEGER
+NTAPI_INLINE
+RtlConvertLongToLargeInteger(
+ LONG SignedInteger
+)
+{
+ LARGE_INTEGER Result;
-/*
- * Misc conversion functions
- */
-LARGE_INTEGER
-STDCALL
-RtlConvertLongToLargeInteger(IN LONG SignedInteger);
+ Result.QuadPart = SignedInteger;
+ return Result;
+}
+static __inline
LARGE_INTEGER
-STDCALL
+NTAPI_INLINE
RtlEnlargedIntegerMultiply(
LONG Multiplicand,
LONG Multiplier
-);
+)
+{
+ LARGE_INTEGER Product;
+ Product.QuadPart = (LONGLONG)Multiplicand * (ULONGLONG)Multiplier;
+ return Product;
+}
+
+static __inline
ULONG
-STDCALL
+NTAPI_INLINE
RtlEnlargedUnsignedDivide(
- ULARGE_INTEGER Dividend,
- ULONG Divisor,
- PULONG Remainder
-);
+ IN ULARGE_INTEGER Dividend,
+ IN ULONG Divisor,
+ IN PULONG Remainder OPTIONAL
+)
+{
+ ULONG Quotient;
+
+ Quotient = (ULONG)(Dividend.QuadPart / Divisor);
+ if (Remainder) {
+ *Remainder = (ULONG)(Dividend.QuadPart % Divisor);
+ }
+
+ return Quotient;
+}
+static __inline
LARGE_INTEGER
-STDCALL
+NTAPI_INLINE
RtlEnlargedUnsignedMultiply(
ULONG Multiplicand,
ULONG Multiplier
-);
-
-ULONG
-STDCALL
+)
+{
+ LARGE_INTEGER Product;
+
+ Product.QuadPart = (ULONGLONG)Multiplicand * (ULONGLONG)Multiplier;
+ return Product;
+}
+#endif
+
+NTSYSAPI
+ULONG
+NTAPI
RtlUniform(PULONG Seed);
-/*
- * Time Functions
- */
+//
+// Network Functions
+//
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlIpv4StringToAddressW(
+ IN LPWSTR IpString,
+ IN ULONG Base,
+ OUT PULONG PtrToIpAddr,
+ OUT PULONG IpAddr
+);
+
+//
+// Time Functions
+//
+NTSYSAPI
NTSTATUS
-STDCALL
+NTAPI
RtlQueryTimeZoneInformation(LPTIME_ZONE_INFORMATION TimeZoneInformation);
-
+
+NTSYSAPI
VOID
-STDCALL
+NTAPI
RtlSecondsSince1970ToTime(
IN ULONG SecondsSince1970,
OUT PLARGE_INTEGER Time
);
-NTSTATUS
-STDCALL
+NTSYSAPI
+NTSTATUS
+NTAPI
RtlSetTimeZoneInformation(LPTIME_ZONE_INFORMATION TimeZoneInformation);
-
-BOOLEAN
-STDCALL
+
+NTSYSAPI
+BOOLEAN
+NTAPI
RtlTimeFieldsToTime(
PTIME_FIELDS TimeFields,
PLARGE_INTEGER Time
);
+NTSYSAPI
VOID
-STDCALL
+NTAPI
RtlTimeToTimeFields(
PLARGE_INTEGER Time,
PTIME_FIELDS TimeFields
);
-/*
- * Version Functions
- */
+//
+// Version Functions
+//
+NTSYSAPI
NTSTATUS
-STDCALL
+NTAPI
RtlVerifyVersionInfo(
IN PRTL_OSVERSIONINFOEXW VersionInfo,
IN ULONG TypeMask,
IN ULONGLONG ConditionMask
);
-
+
+NTSYSAPI
NTSTATUS
-STDCALL
+NTAPI
RtlGetVersion(IN OUT PRTL_OSVERSIONINFOW lpVersionInformation);
-/*
- * C Runtime Library Functions
- */
-char *_itoa (int value, char *string, int radix);
-wchar_t *_itow (int value, wchar_t *string, int radix);
-int _snprintf(char * buf, size_t cnt, const char *fmt, ...);
-int _snwprintf(wchar_t *buf, size_t cnt, const wchar_t *fmt, ...);
-int _stricmp(const char *s1, const char *s2);
-char * _strlwr(char *x);
-int _strnicmp(const char *s1, const char *s2, size_t n);
-char * _strnset(char* szToFill, int szFill, size_t sizeMaxFill);
-char * _strrev(char *s);
-char * _strset(char* szToFill, int szFill);
-char * _strupr(char *x);
-int _vsnprintf(char *buf, size_t cnt, const char *fmt, va_list args);
-int _wcsicmp (const wchar_t* cs, const wchar_t* ct);
-wchar_t * _wcslwr (wchar_t *x);
-int _wcsnicmp (const wchar_t * cs,const wchar_t * ct,size_t count);
-wchar_t* _wcsnset (wchar_t* wsToFill, wchar_t wcFill, size_t sizeMaxFill);
-wchar_t * _wcsrev(wchar_t *s);
-wchar_t *_wcsupr(wchar_t *x);
-int atoi(const char *str);
-long atol(const char *str);
-int isdigit(int c);
-int isalpha(int c);
-int islower(int c);
-int isprint(int c);
-int isspace(int c);
-int isupper(int c);
-int isxdigit(int c);
-size_t mbstowcs (wchar_t *wcstr, const char *mbstr, size_t count);
-int mbtowc (wchar_t *wchar, const char *mbchar, size_t count);
-void * memchr(const void *s, int c, size_t n);
-void * memcpy(void *to, const void *from, size_t count);
-void * memmove(void *dest,const void *src, size_t count);
-void * memset(void *src, int val, size_t count);
-int rand(void);
-int sprintf(char * buf, const char *fmt, ...);
-void srand(unsigned seed);
-char * strcat(char *s, const char *append);
-char * strchr(const char *s, int c);
-int strcmp(const char *s1, const char *s2);
-char * strcpy(char *to, const char *from);
-size_t strlen(const char *str);
-char * strncat(char *dst, const char *src, size_t n);
-int strncmp(const char *s1, const char *s2, size_t n);
-char *strncpy(char *dst, const char *src, size_t n);
-char *strrchr(const char *s, int c);
-size_t strspn(const char *s1, const char *s2);
-char *strstr(const char *s, const char *find);
-int swprintf(wchar_t *buf, const wchar_t *fmt, ...);
-int tolower(int c);
-int toupper(int c);
-wchar_t towlower(wchar_t c);
-wchar_t towupper(wchar_t c);
-int vsprintf(char *buf, const char *fmt, va_list args);
-wchar_t * wcscat(wchar_t *dest, const wchar_t *src);
-wchar_t * wcschr(const wchar_t *str, wchar_t ch);
-int wcscmp(const wchar_t *cs, const wchar_t *ct);
-wchar_t* wcscpy(wchar_t* str1, const wchar_t* str2);
-size_t wcscspn(const wchar_t *str,const wchar_t *reject);
-size_t wcslen(const wchar_t *s);
-wchar_t * wcsncat(wchar_t *dest, const wchar_t *src, size_t count);
-int wcsncmp(const wchar_t *cs, const wchar_t *ct, size_t count);
-wchar_t * wcsncpy(wchar_t *dest, const wchar_t *src, size_t count);
-wchar_t * wcsrchr(const wchar_t *str, wchar_t ch);
-size_t wcsspn(const wchar_t *str,const wchar_t *accept);
-wchar_t *wcsstr(const wchar_t *s,const wchar_t *b);
-size_t wcstombs (char *mbstr, const wchar_t *wcstr, size_t count);
-int wctomb (char *mbchar, wchar_t wchar);
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlGetNtProductType(OUT PNT_PRODUCT_TYPE ProductType);
#endif