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() 字符串打印
本文详细介绍了Windows内核编程中UNICODE_STRING结构体的初始化、堆分配、清空、拼接等操作,包括静态和动态初始化方法,并提供了相关函数如RtlInitUnicodeString、RtlUnicodeStringCat的示例。此外,还展示了如何从UNICODE_STRING转换为PWCHAR以及如何拼接UNICODE_STRING。

3402

被折叠的 条评论
为什么被折叠?



