Windows内核编程基础篇之字符串的连接
UNICODE_STRING 字符串不再是简单的字符串。操作这个数据结构往往需要更多的耐心。读者会常常碰到这样的需求:要把两个字符串连接到一起。简单地追加一个字符串并不困难。重要的依然是保证目标字符串的空间的大小。下面是范例:
NTSTATUS status;
UNICODE_STRING dst; //--目标字符串
WCHAR dst_buf[256]; //我们现在还不会分配内存,所以先定义缓冲区。
UNICODE_STRING src = RTL_CONSTANT_STRING(L"my first string");
//-把目标字符串初始化为拥有缓冲区长度为256的UNICODE_STRING空串
RtlInitEmptyString(dst, dst_buf, sizeof(WCHAR) * 256);
RtlCopyUnicodeString(&dst, &src);
status = RtlAppendUnicodeToString(&dst, L"my first string");
if (status != STATUS_SUCCESS)
{
///..----do something
}
NTSTATUS是常见的返回值类型。如果函数成功,则返回STATUS_SUCCESS,否则,则是一个错误码。RtlAppendUnicodeToString 在目标字符串空间不足的时候依然可以连接字符串,但是会返回一个警告性的错误 STATUS_BUFFER_TOO_SMALL。
另外一种情况是希望 连 两个 UNICODE_STRING ,这种情况请掉用RtlAppendUnicodeStringToString。这个函数的第二个参数也是一个UNICODE_STRING的指针。
-——-摘自《[天书夜读-从汇编到Windows内核编程]》
-——————————————————- 补上 RtlAppendUnicodeStringToString 函数 解释 —————————————————————
语法:
NTSTATUS RtlAppendUnicodeStringToString(
_Inout_ PUNICODE_STRING Destination,
_In_ PCUNICODE_STRING Source
);
参数解释:
Destination [in, out] 指向一个Unicode_string 的缓冲区
Source [in] 指向待连接的UNICODE_STRING的缓冲区
函数更多详情,请参考:
https://msdn.microsoft.com/en-us/library/windows/hardware/ff561736(v=vs.85).aspx
还没有评论,来说两句吧...