Операции над строками UNICODE_STRING - часть 3
Если требуемый размер буфера не составит труда вычислить как
(Destination->Length + AppendString->Length) * sizeof(WCHAR)
то расширение буфера строки-получателя — задача несколько более сложная. Хотя логично было бы иметь соответствующую системную функцию, однако в документации DDK o подобном вызове нет никакого упоминания.
Таблица 7.34. Прототип вызова RtlCompareUnicodeString
LONG RtlCompareUnicodeString | IRQL == PASSIVE_LEVEL |
Параметры | Выполняет сравнение строк UNICODE_STRING |
IN PUNICODE_STRING pString1 | Указатель на первую строку |
IN PUNICODE_STRING pString2 | Указатель на вторую строку |
BOOLEAN CaseInSensitive | TRUE — игнорировать регистр (верхний/нижний) |
Возвращаемое значение | 0 — строки идентичны < 0 — строка 1 меньше строки 2 |
Таблица 7.35. Прототип вызова RtlEqualUnicodeString
BOOLEAN RtlEqualUnicodeString | IRQL == PASSIVE_LEVEL |
Параметры | Выполняет сравнение строк UNICODE_STRING |
IN PUNICODE_STRING pString1 | Указатель на первую строку |
IN PUNICODE_STRING pString2 | Указатель на вторую строку |
BOOLEAN CaseInSensitive | TRUE — игнорировать регистр (верхний/нижний) |
Возвращаемое значение | TRUE — строки идентичны FALSE — строки различаются |
Таблица 7.36. Прототип вызова RtlInt64ToUnicodeString
NTSTATUS RtlInt64ToUnicodeString | IRQL == PASSIVE_LEVEL |
Параметры | Преобразует число int64 в UNICODE_STRING |
IN ULONGLONG Value | Исходное число |
IN ULONG Base | Формат: 16 — шестнадцатеричный, 8 — октавный, 2 — двоичный, 0 или 10 — десятичный. |
IN OUT PUNICODE_STRING s | Строка UNICODE_STRING |
Возвращаемое значение |
STATUS_SUCCESS STATUS_BUFFER_OVERFLOW — слишком мал размер буфера UNICODE_STRING STATUS_INVALID_PARAMETER — ошибочен параметр Base |
Аналогичный прототип вызова имеют также функции преобразования целых чисел без знака и указателей в строку UNICODE_STRING — RtlIntegerToUnicodeString