0

首先尝试Windows驱动程序开发。假设 WCHAR 数组不是以空值结尾的,如何将 WCHAR 数组(来自用户空间)转换为 UNICODE_STRING(在内核模式下) ?

我是否应该验证它是否以 null 结尾并且它是否没有分配新的缓冲区(为 null 增加 2)然后使用 RtlAnsiXXX 函数?什么是正确的方法?

谢谢!

4

2 回答 2

1

要从 wchar 数组初始化 UNICODE_STRING,请使用 RtlInitUnicodeString。

WCHAR 数组必须以 null 结尾

因此,如果您检查并且 wchar-string 不是以 null 结尾的,您应该分配一个新缓冲区(+sizeof(WCHAR) for 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;
}
于 2013-10-14T19:12:30.930 回答
0

WCHAR 数组不必以 NULL 结尾。UNICODE_STRING 结构是为计数字符串设计的,因此,它适用于非 NULL 终止的 WCHAR 数组——当然,您必须知道长度。

例如,您可以使用RtlInitEmptyUnicodeString

于 2013-11-01T13:41:45.270 回答