RtlAnsiStringToUnicodeString 関数 (wdm.h)

RtlAnsiStringToUnicodeString は、指定された ANSI ソース文字列を Unicode 文字列に変換します。

構文

NTSYSAPI NTSTATUS RtlAnsiStringToUnicodeString(
  [in, out] PUNICODE_STRING DestinationString,
  [in]      PCANSI_STRING   SourceString,
  [in]      BOOLEAN         AllocateDestinationString
);

パラメーター

[in, out] DestinationString

変換された Unicode 文字列を保持する UNICODE_STRING 構造体へのポインター。 AllocateDestinationStringTRUE の場合、ルーチンは文字列データを保持する新しいバッファーを割り当て、DestinationStringBuffer メンバーを更新して新しいバッファーを指します。 それ以外の場合、ルーチンは現在指定されているバッファーを使用して文字列を保持します。

[in] SourceString

Unicode に変換する ANSI 文字列へのポインター。

[in] AllocateDestinationString

このルーチンが宛先文字列のバッファー領域を割り当てる必要があるかどうかを指定します。 その場合、呼び出し元は RtlFreeUnicodeString を呼び出してバッファーの割り当てを解除する必要があります。

戻り値

変換が成功した場合、 RtlAnsiStringToUnicodeString はSTATUS_SUCCESSを返します。 失敗した場合、ルーチンはメモリを割り当てません。

注釈

変換は、現在のシステム ロケール情報に準拠しています。

呼び出し元が AllocateDestinationStringTRUE に設定した場合、ルーチンは DestinationStringBuffer メンバーを割り当てるバッファーへのポインターに置き換えます。 ルーチンからエラー状態コードが返された場合でも、古い値を上書きできます。

このルーチンは、ヘッダー ファイルでは宣言されていません。 ただし、次の宣言をソース コードにコピーできます。

NTSYSAPI
WCHAR
NTAPI
RtlAnsiCharToUnicodeChar(
    __inout PUCHAR *SourceCharacter
    );

次のルーチンを使用して、1 バイト文字と 2 バイト文字を Unicode 文字に変換できます。

これらのルーチンとその他の文字列処理ルーチンの詳細については、「 ランタイム ライブラリ (RTL) ルーチン」を参照してください。

RtlAnsiCharToUnicodeChar にはセキュリティ上の欠陥があります。 代わりに RtlAnsiStringToUnicodeString ルーチンを使用することを検討してください。

入力時に、*SourceCharacter が 2 バイト文字コードの最初のバイトを含む 1 バイトのバッファーを指している場合、 RtlAnsiCharToUnicodeChar は 2 番目のバイトを読み取ろうとしたときにバッファーをオーバーランします。

システムの起動時に、オペレーティング システムはロケール設定からユーザー言語を決定し、適切なシステム ANSI コード ページをインストールします。 RtlAnsiCharToUnicodeChar は、このコード ページを使用して、1 バイト文字または 2 バイト文字を対応する Unicode 文字に変換します。

システムの ANSI コード ページで 1 バイト文字セット (つまり ANSI 文字セット) が定義されている場合、 RtlAnsiCharToUnicodeChar は 、0x00範囲内の ANSI 文字を 0 から 0x7fに拡張するだけで変換操作を高速化し、対応する Unicode 文字を生成します。 このルーチンは、1 バイト コード ページで円記号としてこの文字が定義されている場合でも、ANSI 値0x5cを円記号 ("\") に変換します。

入力時に *SourceCharacter が無効な文字コードを指している場合、 RtlAnsiCharToUnicodeChar は Unicode スペース文字コード 0x0020を返します。 次の一覧は、無効な文字コードの例を示しています。

  • 文字コードの最初のバイトは、2 バイト文字コードの 2 番目のバイトとしてのみ有効な値です。

  • 2 バイト文字コードの 2 番目のバイトは、最初のバイトとしてのみ有効な値です。

要件

要件
対象プラットフォーム ユニバーサル
Header wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む)
Library NtosKrnl.lib
[DLL] NtosKrnl.exe
IRQL PASSIVE_LEVEL

こちらもご覧ください

ANSI_STRING

RtlAnsiStringToUnicodeSize

RtlFreeUnicodeString

RtlInitAnsiString

RtlUnicodeStringToAnsiString

UNICODE_STRING