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

你可能感兴趣的:(Windows内核编程,字符串的连接)