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 構造体へのポインター。 AllocateDestinationString が TRUE の場合、ルーチンは文字列データを保持する新しいバッファーを割り当て、DestinationString の Buffer メンバーを更新して新しいバッファーを指します。 それ以外の場合、ルーチンは現在指定されているバッファーを使用して文字列を保持します。
[in] SourceString
Unicode に変換する ANSI 文字列へのポインター。
[in] AllocateDestinationString
このルーチンが宛先文字列のバッファー領域を割り当てる必要があるかどうかを指定します。 その場合、呼び出し元は RtlFreeUnicodeString を呼び出してバッファーの割り当てを解除する必要があります。
戻り値
変換が成功した場合、 RtlAnsiStringToUnicodeString はSTATUS_SUCCESSを返します。 失敗した場合、ルーチンはメモリを割り当てません。
注釈
変換は、現在のシステム ロケール情報に準拠しています。
呼び出し元が AllocateDestinationString を TRUE に設定した場合、ルーチンは DestinationString の Buffer メンバーを割り当てるバッファーへのポインターに置き換えます。 ルーチンからエラー状態コードが返された場合でも、古い値を上書きできます。
このルーチンは、ヘッダー ファイルでは宣言されていません。 ただし、次の宣言をソース コードにコピーできます。
NTSYSAPI
WCHAR
NTAPI
RtlAnsiCharToUnicodeChar(
__inout PUCHAR *SourceCharacter
);
次のルーチンを使用して、1 バイト文字と 2 バイト文字を Unicode 文字に変換できます。
RtlAnsiStringToUnicodeString
これらのルーチンとその他の文字列処理ルーチンの詳細については、「 ランタイム ライブラリ (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 |