/** * PROJECT: ExectOS * COPYRIGHT: See COPYING.md in the top level directory * FILE: xtoskrnl/rtl/exports.cc * DESCRIPTION: C-compatible API wrappers for exported kernel functions * DEVELOPERS: Aiken Harris */ #include /** * Clears all bits in the bit map. * * @param BitMap * Supplies a pointer to the bit map. * * @return This routine does not return any value. * * @since NT 3.5 */ XTCLINK XTAPI VOID RtlClearAllBits(IN PRTL_BITMAP BitMap) { RTL::BitMap::ClearAllBits(BitMap); } /** * Clears a single bit in the bit map. * * @param BitMap * Supplies a pointer to the bit map. * * @param Bit * Specifies the number of the bit to be cleared. * * @return This routine does not return any value. * * @since NT 5.1 */ XTCLINK XTAPI VOID RtlClearBit(IN PRTL_BITMAP BitMap, IN ULONG_PTR Bit) { RTL::BitMap::ClearBit(BitMap, Bit); } /** * Clears a specified set of bits within a bit map. * * @param BitMap * Supplies a pointer to the bit map. * * @param StartingIndex * Supplies the starting index of the first bit to clear. * * @param Length * Supplies the length (number of bits) to clear. * * @return This routine does not return any value. * * @since NT 3.5 */ XTCLINK XTAPI VOID RtlClearBits(IN PRTL_BITMAP BitMap, IN ULONG_PTR StartingIndex, IN ULONG_PTR Length) { RTL::BitMap::ClearBits(BitMap, StartingIndex, Length); } /** * Searches the bit map for a contiguous region of set bits and clears them. * * @param BitMap * Supplies a pointer to the bit map. * * @param Length * Supplies the length of contiguous region (number of set bits) to look for. * * @param Index * Supplies the index of the first bit to start the search at a given position. * * @return This routine returns the bit map index position of the contiguous region found, or MAXULONG_PTR if not found. * * @since XT 1.0 */ XTCLINK XTAPI ULONG RtlClearSetBits(IN PRTL_BITMAP BitMap, IN ULONG_PTR Length, IN ULONG_PTR Index) { return RTL::BitMap::ClearSetBits(BitMap, Length, Index); } /** * Compares two GUIDs (Globally Unique Identifiers). * * @param Guid1 * Supplies the first GUID to compare. * * @param Guid2 * Supplies the second GUID to compare. * * @return This routine returns TRUE if the provided GUIDs are equal, or FALSE otherwise. * * @since XT 1.0 */ XTAPI BOOLEAN RtlCompareGuids(IN PGUID Guid1, IN PGUID Guid2) { return RTL::Guid::CompareGuids(Guid1, Guid2); } /** * This routine compares the first bytes of the specified memory buffers. * * @param LeftBuffer * Supplies a pointer to the first block of memory to compare. * * @param RightBuffer * Supplies a pointer to the second block of memory to compare. * * @param Length * Specifies a number of bytes to compare. * * @return This routine returns a number of bytes that are equal in both memory blocks. * * @since NT 3.5 */ XTCLINK XTAPI SIZE_T RtlCompareMemory(IN PCVOID LeftBuffer, IN PCVOID RightBuffer, IN SIZE_T Length) { return RTL::Memory::CompareMemory(LeftBuffer, RightBuffer, Length); } /** * Compares at most specified number of characters of two C strings. * * @param String1 * String to be compared. * * @param String2 * String to be compared. * * @param Length * Maximum number of characters to compare. If no limit set, it compares whole strings. * * @return Integral value indicating the relationship between the strings. * * @since XT 1.0 */ XTCLINK XTAPI SIZE_T RtlCompareString(IN PCSTR String1, IN PCSTR String2, IN SIZE_T Length) { return RTL::String::CompareString(String1, String2, Length); } /** * Compares at most specified number of characters of two C strings, while ignoring differences in case. * * @param String1 * String to be compared. * * @param String2 * String to be compared. * * @param Length * Maximum number of characters to compare. If no limit set, it compares whole strings. * * @return Integral value indicating the relationship between the strings. * * @since XT 1.0 */ XTCLINK XTAPI SIZE_T RtlCompareStringInsensitive(IN PCSTR String1, IN PCSTR String2, IN SIZE_T Length) { return RTL::String::CompareStringInsensitive(String1, String2, Length); } /** * Compares at most specified number of characters of two C wide strings. * * @param String1 * Wide string to be compared. * * @param String2 * Wide string to be compared. * * @param Length * Maximum number of characters to compare. If no limit set, it compares whole wide strings. * * @return Integral value indicating the relationship between the wide strings. * * @since XT 1.0 */ XTCLINK XTAPI SIZE_T RtlCompareWideString(IN PCWSTR String1, IN PCWSTR String2, IN SIZE_T Length) { return RTL::WideString::CompareWideString(String1, String2, Length); } /** * Compares at most specified number of characters of two C wide strings, while ignoring differences in case. * * @param String1 * Wide string to be compared. * * @param String2 * Wide string to be compared. * * @param Length * Maximum number of characters to compare. If no limit set, it compares whole wide strings. * * @return Integral value indicating the relationship between the wide strings. * * @since XT 1.0 */ XTCLINK XTAPI SIZE_T RtlCompareWideStringInsensitive(IN PCWSTR String1, IN PCWSTR String2, IN SIZE_T Length) { return RTL::WideString::CompareWideStringInsensitive(String1, String2, Length); } /** * Appends a copy of the source string to the end of the destination string. * * @param Destination * Supplies a pointer to the null-terminated string to append to. * * @param Source * Supplies a pointer to the null-terminated string to copy from. * * @param Count * Sets a maximum number of characters to copy. If no limit set, appends whole string. * * @return This routine returns a copy of a destination string. * * @since XT 1.0 */ XTCLINK XTAPI PCHAR RtlConcatenateString(OUT PCHAR Destination, IN PCHAR Source, IN SIZE_T Count) { return RTL::String::ConcatenateString(Destination, Source, Count); } /** * Appends a copy of the source wide string to the end of the destination wide string. * * @param Destination * Supplies a pointer to the null-terminated wide string to append to. * * @param Source * Supplies a pointer to the null-terminated wide string to copy from. * * @param Count * Sets a maximum number of wide characters to copy. If no limit set, appends whole wide string. * * @return This routine returns a copy of a destination wide string. * * @since XT 1.0 */ XTCLINK XTAPI PWCHAR RtlConcatenateWideString(OUT PWCHAR Destination, IN PWCHAR Source, IN SIZE_T Count) { return RTL::WideString::ConcatenateWideString(Destination, Source, Count); } /** * Converts the 32-bit signed value to a large integer. * * @param Value * Supplies the value to convert. * * @return This routine returns the large integer representation of the given value. * * @since XT 1.0 */ XTCLINK XTAPI LARGE_INTEGER RtlConvertToLargeInteger32(IN LONG Value) { return RTL::Math::ConvertToLargeInteger32(Value); } /** * Converts the 32-bit unsigned value to a large integer. * * @param Value * Supplies the value to convert. * * @return This routine returns the large integer representation of the given value. * * @since XT 1.0 */ XTCLINK XTAPI LARGE_INTEGER RtlConvertToLargeIntegerUnsigned32(IN ULONG Value) { return RTL::Math::ConvertToLargeIntegerUnsigned32(Value); } /** * This routine copies a block of memory. * * @param Destination * Supplies a pointer to the buffer where data will be copied to. * * @param Source * Supplies a pointer to the source buffer that will be copied. * * @param Length * Specifies the number of bytes to copy. * * @return This routine does not return any value. * * @since NT 3.5 */ XTCLINK XTAPI VOID RtlCopyMemory(OUT PVOID Destination, IN PCVOID Source, IN SIZE_T Length) { RTL::Memory::CopyMemory(Destination, Source, Length); } /** * Copies a string from a buffer into another buffer, ensuring that the destination string is NULL-terminated. * * @param Destination * Supplies a pointer to the destination buffer. * * @param Source * Supplies a pointer to the source buffer. * * @param Length * Supplies the length of the string to copy. * * @return This routine does not return any value. * * @since XT 1.0 */ XTCLINK XTAPI VOID RtlCopyString(IN PCHAR Destination, IN PCSTR Source, IN ULONG Length) { RTL::String::CopyString(Destination, Source, Length); } /** * Copies a wide string from a buffer into another buffer, ensuring that the destination string is NULL-terminated. * * @param Destination * Supplies a pointer to the destination buffer. * * @param Source * Supplies a pointer to the source buffer. * * @param Length * Supplies the length of the wide string to copy. * * @return This routine does not return any value. * * @since XT 1.0 */ XTCLINK XTAPI VOID RtlCopyWideString(IN PWCHAR Destination, IN PCWSTR Source, IN ULONG Length) { RTL::WideString::CopyWideString(Destination, Source, Length); } /** * Divides a signed large integer by a 32-bit divisor. * * @param Dividend * Supplies a large integer to be divided. * * @param Divisor * Supplies a 32-bit divisor. * * @param Remainder * Supplies a pointer that receives the divide remainder. * * @return This routine returns the quotient. * * @since XT 1.0 */ XTCLINK XTAPI LARGE_INTEGER RtlDivideLargeInteger(IN LARGE_INTEGER Dividend, IN ULONG Divisor, OUT PULONG Remainder) { return RTL::Math::DivideLargeInteger(Dividend, Divisor, Remainder); } /** * Searches the bit map for a contiguous region of clear bits. * * @param BitMap * Supplies a pointer to the bit map. * * @param Length * Supplies the length of contiguous region (number of clear bits) to look for. * * @param Index * Supplies the index of the first bit to start the search at a given position. * * @return This routine returns the bit map index position of the contiguous region found, or MAXULONG_PTR if not found. * * @since NT 3.5 */ XTCLINK XTAPI ULONG_PTR RtlFindClearBits(IN PRTL_BITMAP BitMap, IN ULONG_PTR Length, IN ULONG_PTR Index) { return RTL::BitMap::FindClearBits(BitMap, Length, Index); } /** * Searches the bit map for a contiguous region of set bits. * * @param BitMap * Supplies a pointer to the bit map. * * @param Length * Supplies the length of contiguous region (number of set bits) to look for. * * @param Index * Supplies the index of the first bit to start the search at a given position. * * @return This routine returns the bit map index position of the contiguous region found, or MAXULONG_PTR if not found. * * @since NT 3.5 */ XTCLINK XTAPI ULONG_PTR RtlFindSetBits(IN PRTL_BITMAP BitMap, IN ULONG_PTR Length, IN ULONG_PTR Index) { return RTL::BitMap::FindSetBits(BitMap, Length, Index); } /** * Finds the first occurrence of the search string in the source string. * * @param Source * Supplies a pointer to the source string. * * @param Search * Supplies a pointer to the search string. * * @return This routine returns a pointer to the first occurrence of the search string in the source string. * * @since XT 1.0 */ XTCLINK XTAPI PCSTR RtlFindString(IN PCSTR Source, IN PCSTR Search) { return RTL::String::FindString(Source, Search); } /** * Finds the first case-insensitive occurrence of the search string in the source string. * * @param Source * Supplies a pointer to the source string. * * @param Search * Supplies a pointer to the search string. * * @return This routine returns a pointer to the first occurrence of the search string in the source string. * * @since XT 1.0 */ XTCLINK XTAPI PCSTR RtlFindStringInsensitive(IN PCSTR Source, IN PCSTR Search) { return RTL::String::FindStringInsensitive(Source, Search); } /** * Finds the first occurrence of the search wide string in the source wide string. * * @param Source * Supplies a pointer to the source wide string. * * @param Search * Supplies a pointer to the search wide string. * * @return This routine returns a pointer to the first occurrence of the search wide string in the source wide string. * * @since XT 1.0 */ XTCLINK XTAPI PCWSTR RtlFindWideString(IN PCWSTR Source, IN PCWSTR Search) { return RTL::WideString::FindWideString(Source, Search); } /** * Finds the first case-insensitive occurrence of the search wide string in the source wide string. * * @param Source * Supplies a pointer to the source wide string. * * @param Search * Supplies a pointer to the search wide string. * * @return This routine returns a pointer to the first occurrence of the search wide string in the source wide string. * * @since XT 1.0 */ XTCLINK XTAPI PCWSTR RtlFindWideStringInsensitive(IN PCWSTR Source, IN PCWSTR Search) { return RTL::WideString::FindWideStringInsensitive(Source, Search); } /** * Initializes a bit map. * * @param BitMap * Supplies a pointer to the bit map to initialize. * * @param Buffer * Supplies a pointer to the buffer that will be used as a bit map. * * @param Size * Supplies a size of the bit map. * * @return This routine does not return any value. * * @since NT 3.5 */ XTCLINK XTAPI VOID RtlInitializeBitMap(IN PRTL_BITMAP BitMap, IN PULONG_PTR Buffer, IN ULONG Size) { RTL::BitMap::InitializeBitMap(BitMap, Buffer, Size); } /** * This routine initializes a structure representing the head of a double-linked list. * * @param ListHead * Pointer to a structure that serves as the list header. * * @return This routine does not return any value. * * @since XT 1.0 */ XTCLINK XTCDECL VOID RtlInitializeListHead(IN PLIST_ENTRY ListHead) { RTL::LinkedList::InitializeListHead(ListHead); } /** * This routine inserts an entry at the head of a doubly linked list. * * @param ListHead * Pointer to the head of the list. * * @param Entry * Pointer to the entry that will be inserted in the list. * * @return This routine does not return any value. * * @since XT 1.0 */ XTCLINK XTCDECL VOID RtlInsertHeadList(IN OUT PLIST_ENTRY ListHead, IN PLIST_ENTRY Entry) { RTL::LinkedList::InsertHeadList(ListHead, Entry); } /** * This routine inserts an entry at the tail of a doubly linked list. * * @param ListHead * Pointer to the head of the list. * * @param Entry * Pointer to the entry that will be inserted in the list. * * @return This routine does not return any value. * * @since XT 1.0 */ XTCLINK XTCDECL VOID RtlInsertTailList(IN OUT PLIST_ENTRY ListHead, IN PLIST_ENTRY Entry) { RTL::LinkedList::InsertTailList(ListHead, Entry); } /** * Indicates whether a doubly linked list structure is empty, or not initialized at all. * * @param ListHead * Pointer to a structure that represents the head of the list. * * @return TRUE if there are currently no entries in the list or FALSE otherwise. * * @since XT 1.0 */ XTCLINK XTCDECL BOOLEAN RtlListEmpty(IN PLIST_ENTRY ListHead) { return RTL::LinkedList::ListEmpty(ListHead); } /** * This routine detects a loop in a doubly linked list. * * @param ListHead * Pointer to a structure that represents the head of the list. * * @return TRUE if linked list contains a loop or FALSE otherwise. * * @since XT 1.0 */ XTCLINK XTCDECL BOOLEAN RtlListLoop(IN PLIST_ENTRY ListHead) { return RTL::LinkedList::ListLoop(ListHead); } /** * This routine copies a block of memory either forward of backward, depeding * if source and destination buffers overlap or not. * * @param Destination * Supplies a pointer to the buffer where data will be copied to. * * @param Source * Supplies a pointer to the source buffer that will be copied. * * @param Length * Specifies the number of bytes to copy. * * @return This routine does not return any value. * * @since NT 3.5 */ XTCLINK XTAPI VOID RtlMoveMemory(OUT PVOID Destination, IN PCVOID Source, IN SIZE_T Length) { RTL::Memory::MoveMemory(Destination, Source, Length); } /** * Multiplies a signed large integer by a signed integer. * * @param Multiplicand * Supplies a large integer to be multiplied. * * @param Multiplier * Supplies an integer by which the large integer is multiplied. * * @return This routine returns the result of the multiplication. * * @since XT 1.0 */ XTCLINK XTAPI LARGE_INTEGER RtlMultiplyLargeInteger(IN LARGE_INTEGER Multiplicand, IN LONG Multiplier) { return RTL::Math::MultiplyLargeInteger(Multiplicand, Multiplier); } /** * This routine removes an entry from a doubly linked list. * * @param Entry * Pointer to the entry that will be removed from the list. * * @return This routine does not return any value. * * @since XT 1.0 */ XTCLINK XTCDECL VOID RtlRemoveEntryList(IN PLIST_ENTRY Entry) { RTL::LinkedList::RemoveEntryList(Entry); } /** * Reverses a characters order in a string. It modifies the original, input variable. * * @param String * Supplies a pointer to the string to reverse. * * @param Length * Supplies the length of the string to reverse. * * @return This routine does not return any value. * * @since XT 1.0 */ XTCLINK XTAPI VOID RtlReverseString(IN OUT PCHAR String, IN ULONG Length) { RTL::String::ReverseString(String, Length); } /** * Reverses a characters order in a wide string. It modifies the original, input variable. * * @param String * Supplies a pointer to the wide string to reverse. * * @param Length * Supplies the length of the wide string to reverse. * * @return This routine does not return any value. * * @since XT 1.0 */ XTCLINK XTAPI VOID RtlReverseWideString(IN OUT PWCHAR String, IN ULONG Length) { RTL::WideString::ReverseWideString(String, Length); } /** * This routine compares the first bytes of the specified memory buffers. * * @param LeftBuffer * Supplies a pointer to the first block of memory to compare. * * @param RightBuffer * Supplies a pointer to the second block of memory to compare. * * @param Length * Specifies a number of bytes to compare. * * @return Returns TRUE if both buffers are equal up to the specified length, or FALSE otherwise. * * @since XT 1.0 */ XTCLINK XTAPI BOOLEAN RtlSameMemory(IN PCVOID LeftBuffer, IN PCVOID RightBuffer, IN SIZE_T Length) { return RTL::Memory::SameMemory(LeftBuffer, RightBuffer, Length); } /** * Sets all bits in the bit map. * * @param BitMap * Supplies a pointer to the bit map. * * @return This routine does not return any value. * * @since NT 3.5 */ XTCLINK XTAPI VOID RtlSetAllBits(IN PRTL_BITMAP BitMap) { RTL::BitMap::SetAllBits(BitMap); } /** * Sets a single bit in the bit map. * * @param BitMap * Supplies a pointer to the bit map. * * @param Bit * Specifies the number of the bit to be set. * * @return This routine does not return any value. * * @since NT 5.1 */ XTCLINK XTAPI VOID RtlSetBit(IN PRTL_BITMAP BitMap, IN ULONG_PTR Bit) { RTL::BitMap::SetBit(BitMap, Bit); } /** * Sets a specified set of bits within a bit map. * * @param BitMap * Supplies a pointer to the bit map. * * @param StartingIndex * Supplies the starting index of the first bit to set. * * @param Length * Supplies the length (number of bits) to set. * * @return This routine does not return any value. * * @since NT 3.5 */ XTCLINK XTAPI VOID RtlSetBits(IN PRTL_BITMAP BitMap, IN ULONG_PTR StartingIndex, IN ULONG_PTR Length) { RTL::BitMap::SetBits(BitMap, StartingIndex, Length); } /** * Searches the bit map for a contiguous region of clear bits and sets them. * * @param BitMap * Supplies a pointer to the bit map. * * @param Length * Supplies the length of contiguous region (number of clear bits) to look for. * * @param Index * Supplies the index of the first bit to start the search at a given position. * * @return This routine returns the bit map index position of the contiguous region found, or MAXULONG_PTR if not found. * * @since XT 1.0 */ XTCLINK XTAPI ULONG RtlSetClearBits(IN PRTL_BITMAP BitMap, IN ULONG_PTR Length, IN ULONG_PTR Index) { return RTL::BitMap::SetClearBits(BitMap, Length, Index); } /** * This routine fills a section of memory with a specified byte. * * @param Destination * Supplies a pointer to the buffer to fill. * * @param Byte * Supplies a pattern to fill memory. * * @param Length * Specifies a number of bytes to store in memory. * * @return This routine does not return any value. * * @since XT 1.0 */ XTCLINK XTAPI VOID RtlSetMemory(OUT PVOID Destination, IN UCHAR Byte, IN SIZE_T Length) { RTL::Memory::SetMemory(Destination, Byte, Length); } /** * Calculates the length of a given string. * * @param String * Pointer to the null-terminated string to be examined. * * @param MaxLength * Maximum number of characters to examine. If no limit set, it examines whole string. * * @return The length of the null-terminated string. * * @since: XT 1.0 */ XTCLINK XTAPI SIZE_T RtlStringLength(IN PCSTR String, IN SIZE_T MaxLength) { return RTL::String::StringLength(String, MaxLength); } /** * Converts a multibyte character string to its wide character representation. * * @param Destination * Pointer to wide character array where the wide string will be stored * * @param Source * Pointer to the first element of a multibyte string to convert. * * @param Length * Number of characters in the source string. * * @return Returns the number of wide characters written to the destination array on success, or -1 on error. * * @since XT 1.0 */ XTCLINK XTAPI SIZE_T RtlStringToWideString(OUT PWCHAR Destination, IN PCSTR *Source, IN SIZE_T Length) { return RTL::String::StringToWideString(Destination, Source, Length); } /** * Tests a state of a single bit in the bit map. * * @param BitMap * Supplies a pointer to the bit map. * * @param Bit * Specifies the number of the bit to be tested. * * @return This routine returns TRUE when bit is set, or FALSE otherwise. * * @since NT 5.1 */ XTCLINK XTAPI BOOLEAN RtlTestBit(IN PRTL_BITMAP BitMap, IN ULONG_PTR Bit) { return RTL::BitMap::TestBit(BitMap, Bit); } /** * Finds the next token in a null-terminated string. * * @param String * Pointer to the null-terminated string to tokenize. * * @param Delimiter * Pointer to the null-terminated string identifying delimiters. * * @param SavePtr * Pointer to an object used to store routine internal state. * * @return Pointer to the beginning of the next token or NULL if there are no more tokens. * * @since: XT 1.0 */ XTCLINK XTAPI PCHAR RtlTokenizeString(IN PCHAR String, IN PCSTR Delimiter, IN OUT PCHAR *SavePtr) { return RTL::String::TokenizeString(String, Delimiter, SavePtr); } /** * Finds the next token in a null-terminated wide string. * * @param String * Pointer to the null-terminated wide string to tokenize. * * @param Delimiter * Pointer to the null-terminated wide string identifying delimiters. * * @param SavePtr * Pointer to an object used to store routine internal state. * * @return Pointer to the beginning of the next token or NULL if there are no more tokens. * * @since: XT 1.0 */ XTCLINK XTAPI PWCHAR RtlTokenizeWideString(IN PWCHAR String, IN PCWSTR Delimiter, IN OUT PWCHAR *SavePtr) { return RTL::WideString::TokenizeWideString(String, Delimiter, SavePtr); } /** * Converts a character to lowercase. * * @param Character * Character to be converted. * * @return Converted character or original character if it was not uppercase. * * @since XT 1.0 */ XTCLINK XTAPI CHAR RtlToLowerCharacter(IN CHAR Character) { return RTL::String::ToLowerCharacter(Character); } /** * Converts a wide character to lowercase. * * @param Character * Wide character to be converted. * * @return Converted wide character or original character if it was not uppercase. * * @since XT 1.0 */ XTCLINK XTAPI WCHAR RtlToLowerWideCharacter(IN WCHAR Character) { return RTL::WideString::ToLowerWideCharacter(Character); } /** * Converts a character to uppercase. * * @param Character * Character to be converted. * * @return Converted character or original character if it was not lowercase. * * @since XT 1.0 */ XTCLINK XTAPI CHAR RtlToUpperCharacter(IN CHAR Character) { return RTL::String::ToUpperCharacter(Character); } /** * Converts a wide character to uppercase. * * @param Character * Wide character to be converted. * * @return Converted wide character or original character if it was not lowercase. * * @since XT 1.0 */ XTCLINK XTAPI WCHAR RtlToUpperWideCharacter(IN WCHAR Character) { return RTL::WideString::ToUpperWideCharacter(Character); } /** * Removes certain characters from a beginning of the string. * * @param String * Pointer to the null-terminated string to be trimmed. * * @return This routine returns a pointer to the left-trimmed string. * * @since XT 1.0 */ XTCLINK XTAPI PCHAR RtlTrimLeftString(IN PCHAR String) { return RTL::String::TrimLeftString(String); } /** * Removes certain characters from a beginning of the wide string. * * @param String * Pointer to the null-terminated wide string to be trimmed. * * @return This routine returns a pointer to the left-trimmed wide string. * * @since XT 1.0 */ XTCLINK XTAPI PWCHAR RtlTrimLeftWideString(IN PWCHAR String) { return RTL::WideString::TrimLeftWideString(String); } /** * Removes certain characters from the end of the string. * * @param String * Pointer to the null-terminated string to be trimmed. * * @return This routine returns a pointer to the right-trimmed string. * * @since XT 1.0 */ XTCLINK XTAPI PCHAR RtlTrimRightString(IN PCHAR String) { return RTL::String::TrimRightString(String); } /** * Removes certain characters from the end of the wide string. * * @param String * Pointer to the null-terminated wide string to be trimmed. * * @return This routine returns a pointer to the right-trimmed wide string. * * @since XT 1.0 */ XTCLINK XTAPI PWCHAR RtlTrimRightWideString(IN PWCHAR String) { return RTL::WideString::TrimRightWideString(String); } /** * Removes certain characters from the beginning and the end of the string. * * @param String * Pointer to the null-terminated string to be trimmed. * * @return This routine returns a pointer to the trimmed string. * * @since XT 1.0 */ XTCLINK XTAPI PCHAR RtlTrimString(IN PCHAR String) { return RTL::String::TrimLeftString(RTL::String::TrimRightString(String)); } /** * Removes certain characters from the beginning and the end of the wide string. * * @param String * Pointer to the null-terminated wide string to be trimmed. * * @return This routine returns a pointer to the trimmed wide string. * * @since XT 1.0 */ XTCLINK XTAPI PWCHAR RtlTrimWideString(IN PWCHAR String) { return RTL::WideString::TrimWideString(String); } /** * Calculates the length of a given wide string. * * @param String * Pointer to the null-terminated wide string to be examined. * * @param MaxLength * Maximum number of wide characters to examine. If no limit set, it examines whole string. * * @return The length of the null-terminated wide string. * * @since: XT 1.0 */ XTCLINK XTAPI SIZE_T RtlWideStringLength(IN PCWSTR String, IN SIZE_T MaxLength) { return RTL::WideString::WideStringLength(String, MaxLength); } /** * This routine fills a section of memory with zeroes. * * @param Destination * Supplies a pointer to the buffer to fill. * * @param Length * Specifies a number of bytes to be filled with zeroes. * * @return This routine does not return any value. * * @since NT 3.5 */ XTCLINK XTAPI VOID RtlZeroMemory(OUT PVOID Destination, IN SIZE_T Length) { RTL::Memory::ZeroMemory(Destination, Length); }