Windows内核编程基础篇之字符串的连接

我会带着你远行 2022-08-04 11:54 362阅读 0赞

UNICODE_STRING 字符串不再是简单的字符串。操作这个数据结构往往需要更多的耐心。读者会常常碰到这样的需求:要把两个字符串连接到一起。简单地追加一个字符串并不困难。重要的依然是保证目标字符串的空间的大小。下面是范例:

  1. NTSTATUS status;
  2. UNICODE_STRING dst; //--目标字符串
  3. WCHAR dst_buf[256]; //我们现在还不会分配内存,所以先定义缓冲区。
  4. UNICODE_STRING src = RTL_CONSTANT_STRING(L"my first string");
  5. //-把目标字符串初始化为拥有缓冲区长度为256的UNICODE_STRING空串
  6. RtlInitEmptyString(dst, dst_buf, sizeof(WCHAR) * 256);
  7. RtlCopyUnicodeString(&dst, &src);
  8. status = RtlAppendUnicodeToString(&dst, L"my first string");
  9. if (status != STATUS_SUCCESS)
  10. {
  11. ///..----do something
  12. }

NTSTATUS是常见的返回值类型。如果函数成功,则返回STATUS_SUCCESS,否则,则是一个错误码。RtlAppendUnicodeToString 在目标字符串空间不足的时候依然可以连接字符串,但是会返回一个警告性的错误 STATUS_BUFFER_TOO_SMALL。

另外一种情况是希望 连 两个 UNICODE_STRING ,这种情况请掉用RtlAppendUnicodeStringToString。这个函数的第二个参数也是一个UNICODE_STRING的指针。

-——-摘自《[天书夜读-从汇编到Windows内核编程]》

-——————————————————- 补上 RtlAppendUnicodeStringToString 函数 解释 —————————————————————

语法:

  1. NTSTATUS RtlAppendUnicodeStringToString(
  2. _Inout_ PUNICODE_STRING Destination,
  3. _In_ PCUNICODE_STRING Source
  4. );

参数解释:

Destination [in, out] 指向一个Unicode_string 的缓冲区

Source [in] 指向待连接的UNICODE_STRING的缓冲区

函数更多详情,请参考:

https://msdn.microsoft.com/en-us/library/windows/hardware/ff561736(v=vs.85).aspx

发表评论

表情:
评论列表 (有 0 条评论,362人围观)

还没有评论,来说两句吧...

相关阅读