0

まずはWindowsドライバ開発に挑戦。WCHAR配列がnullで終了していないと仮定して、WCHAR配列(ユーザー空間からのもの)をUNICODE_STRING(カーネルモード)に変換するにはどうすればよいですか?

null で終わるかどうか、および新しいバッファー (null の場合は +2) を割り当てないかどうかを確認してから、RtlAnsiXXX 関数を使用する必要がありますか? 適切な方法は何ですか?

ありがとう!

4

2 に答える 2

1

wchar 配列から UNICODE_STRING を初期化するには、RtlInitUnicodeString を使用します。

WCHAR 配列は null で終了する必要があります

したがって、チェックしたときに wchar-string が null で終了していない場合は、新しいバッファー (null の場合は +sizeof(WCHAR)) を割り当て、配列の内容をコピーしてから、RtlInitUnicodeString を呼び出す必要があります。

ユーザーモードの wchar-string が null で終了しているかどうかを確認するには、次を使用しています。

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 に答える