UINCODE_STRING
初始化:
// UNICODE_STRING u_src; // 此时的 UNICODE_STRING 里面的 Buffer 指针是指向全局常量区, 操作它(比如拷贝)时很可能会出现蓝屏
UNICODE_STRING u_src = {0}; // 这样初始化的方式.是将UNICODE_STRING的 Buffer指针指向栈内存
RtlInitUnicodeString(&src,"hello");
/ 在堆上初始化
UNICODE_STRING ustr = {0};
ULONG length = (wcslen(L"HelloWorld") + ) * sizeof(WCHAR);
ustr.Buffer = ExAllocatePoolWithTag(PagedPool,MAX_PATH 8 sizeof(WCHAR),"niBI");
if (ustr.Buffer == NULL)
return ;
清空缓存
RtlZeroMemory(ustr.Buffer,MAX_PATH *sizeof(WCHAR));
wcscpy(ustr.Buffer,L"HelloWorld");
ustr.length = length;
ustr.Maximumlength = MAX_PATH * sizeof(WCHAR);
DbgPrint("%wZ",&ustr);
ExFreePool(ustr.Buffer);
UNICODE_STRING 转 PWCHAR:
NTSTRSAFEDDI RtlStringCbCopyUnicodeString(
NTSTRSAFE_PWSTR pszDest,
size_t cbDest,
PCUNICODE_STRING SourceString
);
拼接两个 UNICODE_STRING:
NTSTRSAFEDDI RtlUnicodeStringCat(
PUNICODE_STRING DestinationString,
PCUNICODE_STRING SourceString
);
// 按字节数拼接(不完整拼接)
NTSTRSAFEDDI RtlUnicodeStringCbCatN(
PUNICODE_STRING DestinationString,
PCUNICODE_STRING SourceString,
size_t cbToAppend
);
使用 pwchar 拼接 UNICODE_STRING:
NTSTRSAFEDDI RtlUnicodeStringCatString(
PUNICODE_STRING DestinationString,
NTSTRSAFE_PCWSTR pszSrc
);
其他 pchar、pwchar 操作
RtlStringcbCatA() 字符串拼接
RtlStringcbCopy() 字符串拷贝
RtlStringcbLength() 求长度
RtlStringcbPrnt() 字符串打印