UNICODE_STRING的拼接
2021-07-01
559
0
像普通的字符串使用strcat一样,UNICODE_STRING也支持拼接功能。UNICODE_STRING的拼接按源字符的类型分为以下几中:
RtlAppendUnicodeToString拼接
将一个宽字节接接到UNICODE_STRING中。这里使用RtlAppendUnicodeToString函数。
NTSTATUS status;
UNICODE_STRING dst; // 目标字符串
WCHAR dst_buf[256]; // 我们现在还不会分配内存,所以先定义缓冲区
// 把目标字符串初始化为拥有缓冲区长度为256的UNICODE_STRING空串
RtlInitEmptyUnicodeString(&dst,dst_buf,256*sizeof(WCHAR));
status = RtlAppendUnicodeToString(&dst,L"wwww.pnpon.com");
NTSTATUS是常见的返回值类型。如果函数成功,返回STATUS_SUCCESS。否则的话,是一个错误码。RtlAppendUnicodeToString在目标字符串空间不足的时候依然可以连接字符串,但是会返回一个警告性的错误STATUS_BUFFER_TOO_SMALL。
RtlAppendUnicodeStringToString拼接
另外一种情况是希望连接两个UNICODE_STRING,这种情况请调用RtlAppendUnicodeStringToString。这个函数的第二个参数也是一个UNICODE_STRING的指针。
NTSTATUS status;
UNICODE_STRING dst; // 目标字符串
WCHAR dst_buf[256]; // 我们现在还不会分配内存,所以先定义缓冲区
UNICODE_STRING src = RTL_CONSTANT_STRING(L"wwww.pnpon.com");
RtlInitEmptyUnicodeString(&dst, dst_buf, 256 * sizeof(WCHAR));
status = RtlAppendUnicodeStringToString(&dst, &src); // 字符串拷贝!
RtlAppendUnicodeStringToString在目标字符串空间不足的时候依然可以连接字符串,但是会返回一个警告性的错误STATUS_BUFFER_TOO_SMALL。
ANSI_STRING的拼接
对于ANSI_STRING类型,使用RtlAppendStringToString函数进行字符串拼接。
NTSTATUS status;
UNICODE_STRING dst;
CHAR dst_buf[256];
RtlInitEmptyString(dst, dst_buf, 256 * sizeof(CHAR));
status = RtlAppendStringToString(&dst, "www.pnpon.com");