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_STRING 结构的指针,用于保存转换后的 Unicode 字符串。 如果 AllocateDestinationStringTRUE,则例程分配一个新缓冲区来保存字符串数据,并将 DestinationStringBuffer 成员更新为指向新缓冲区。 否则,例程使用当前指定的缓冲区来保存字符串。

[in] SourceString

指向要转换为 Unicode 的 ANSI 字符串的指针。

[in] AllocateDestinationString

指定此例程是否应为目标字符串分配缓冲区空间。 如果存在,调用方必须通过调用 RtlFreeUnicodeString 解除分配缓冲区。

返回值

如果转换成功, RtlAnsiStringToUnicodeString 将返回STATUS_SUCCESS。 失败时,例程不会分配任何内存。

注解

转换符合当前系统区域设置信息。

如果调用方将 AllocateDestinationString 设置为 TRUE,则例程会将 DestinationStringBuffer 成员替换为指向它分配的缓冲区的指针。 即使例程返回错误状态代码,也可以覆盖旧值。

此例程未在头文件中声明。 但是,可以将以下声明复制到源代码:

NTSYSAPI
WCHAR
NTAPI
RtlAnsiCharToUnicodeChar(
    __inout PUCHAR *SourceCharacter
    );

可以使用以下例程将单字节和双字节字符转换为 Unicode 字符:

有关这些例程和其他字符串处理例程的详细信息,请参阅 Run-Time Library (RTL) 例程

RtlAnsiCharToUnicodeChar 存在安全缺陷。 请考虑改用 RtlAnsiStringToUnicodeString 例程。

如果输入时,SourceCharacter 指向包含双字节字符代码的第一个字节的单字节缓冲区, 则 RtlAnsiCharToUnicodeChar 在尝试读取第二个字节时将覆盖该缓冲区。

在系统启动时,操作系统根据区域设置确定用户语言,并安装相应的系统 ANSI 代码页。 RtlAnsiCharToUnicodeChar 使用此代码页将单字节或双字节字符转换为相应的 Unicode 字符。

如果系统 ANSI 代码页定义单字节字符集 (即 ANSI 字符集 ) ,RtlAnsiCharToUnicodeChar 只需将0x00范围内的 ANSI 字符 零扩展为零 ,0x7f生成相应的 Unicode 字符,从而加快转换操作的速度。 该例程0x5c将 ANSI 值转换为反斜杠字符 (“\”) ,即使单字节代码页将此字符定义为日元符号也是如此。

如果输入时*SourceCharacter 指向无效字符代码, 则 RtlAnsiCharToUnicodeChar 将返回 Unicode 空格字符代码,0x0020。 以下列表显示了无效字符代码的示例:

  • 字符代码的第一个字节是一个值,该值仅作为双字节字符代码的第二个字节有效。

  • 双字节字符代码的第二个字节是仅作为第一个字节有效的值。

要求

要求
目标平台 通用
标头 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