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 ,这种情况请掉用RtlAppendUnicodeStrin