首先尝试Windows驱动程序开发。 假设WCHAR数组不以null结尾?如何将WCHAR数组(来自用户空间)转换为UNICODE_STRING(在内核模式下)?
我应该验证它是否以null结尾,如果它没有分配新的缓冲区(null为+2),然后使用RtlAnsiXXX函数?什么是正确的方法?
谢谢!
答案 0 :(得分:1)
要从wchar数组初始化UNICODE_STRING,请使用RtlInitUnicodeString。
WCHAR数组必须以空终止。
因此,如果您检查并且wchar-string未终止,则应分配新缓冲区(+ sizeof(WCHAR)为null),复制数组内容,然后调用RtlInitUnicodeString。
检查来自用户模式的wchar-string是否以空值终止我正在使用:
BOOLEAN IsStringTerminated(PWCHAR Array, USHORT ArrayLength, USHORT *StringLength)
{
BOOLEAN bStringIsTerminated = FALSE;
USHORT uiIndex = 0;
*StringLength = 0;
while(uiIndex < ArrayLength && bStringIsTerminated == FALSE)
{
if(Array[uiIndex] == L'\0')
{
*StringLength = uiIndex + 1;
bStringIsTerminated = TRUE;
}
else
{
uiIndex++;
}
}
return bStringIsTerminated;
}
答案 1 :(得分:0)
WCHAR数组 不 必须以NULL结尾。 UNICODE_STRING结构是为计数字符串设计的,因此适用于非NULL终止的WCHAR数组 - 当然,您必须知道长度。
例如,您可以使用 RtlInitEmptyUnicodeString 。