我在将字符串从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 =\
为什么会这样?
答案 0 :(得分:0)
此问题的格式%s
中的格式无效DbgPrint
- 您需要使用%S
。你的案例中的字符串被复制正确,你只是错误地显示它 - %s
假设ansi字符串在第一个\0
字节后停止(在第一个WCHAR符号中)。但是在一般情况下,使用RtlStringCbCopyW
是错误的 - 因为UNICODE_STRING
不能以空值终止并且可以包含空字符。需要使用RtlCopyUnicodeString
。最后这与driver
minifilter
和kernel-mode
仅与unicode-string