将WCHAR *转换为UNICODE STRING

时间:2013-10-14 18:39:04

标签: kernel driver unicode-string wchar windows-kernel

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

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

谢谢!

2 个答案:

答案 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