RtlStringCbCopyW只复制字符串的第一个字符串为什么?

时间:2016-11-15 07:48:18

标签: unicode-string

我在将字符串从on类型复制到另一个类型时遇到问题。我在下面给出了问题的代码。

DbgPrint("Value of ProcessName =%wZ \n",&ProcessName);
//The Type of ProcessName is UNICODE_STRING

RtlStringCbCopyW(myBuffer,((MAX_PATH+90)*sizeof(WCHAR)),ProcessName.Buffer);
//try to copy from ProcessName.Buffer to myBuffer

DbgPrint("Value of MyBuffer =%s \n",MyBuffer);
//The Type of MyBuffer is Array of WCHAR

DbgPrint("Value of ProcessName.Buffer =%s \n",ProcessName.Buffer);

输出: -

Value of ProcesssName =\Device\HarddiskVolume1\Windows\explorer.exe
Value of MyBuffer =\
Value of ProcesssName.Buffer =\

为什么会这样?

1 个答案:

答案 0 :(得分:0)

此问题的格式%s中的格式无效DbgPrint - 您需要使用%S。你的案例中的字符串被复制正确,你只是错误地显示它 - %s假设ansi字符串在第一个\0字节后停止(在第一个WCHAR符号中)。但是在一般情况下,使用RtlStringCbCopyW是错误的 - 因为UNICODE_STRING不能以空值终止并且可以包含空字符。需要使用RtlCopyUnicodeString。最后这与driver minifilterkernel-mode仅与unicode-string

无关