RtlGenerate8dot3Name 函数 (ntifs.h)

RtlGenerate8dot3Name 例程为指定的长文件名生成短 (8.3) 名称。

语法

NTSYSAPI NTSTATUS RtlGenerate8dot3Name(
  [in]      PCUNICODE_STRING       Name,
  [in]      BOOLEAN                AllowExtendedCharacters,
  [in, out] PGENERATE_NAME_CONTEXT Context,
  [in, out] PUNICODE_STRING        Name8dot3
);

参数

[in] Name

指向包含文件的长名称的 Unicode 字符串的指针。 在生成相应的短名称期间,将跳过此文件名中的任何前导句点。

[in] AllowExtendedCharacters

如果生成的短文件名可以包含扩展字符,则设置为 TRUE。 如果生成的短文件名必须仅包含当前代码页的 ANSI 或 OEM 范围(从0x20 (空间) 到 0x7f (DEL) )中的字符,则设置为 FALSE。

[in, out] Context

指向调用方分配的缓冲区的指针,供 RtlGenerate8dot3Name 使用。 在首次调用 RtlGenerate8dot3Name 以转换给定的长文件名之前,调用方负责用零填充缓冲区。

[in, out] Name8dot3

指向调用方分配的缓冲区的指针,用于接收生成的短文件名。 此缓冲区的大小必须至少为 24 个字节 (12 个 Unicode 字符) 。

返回值

如果成功生成短名称,此例程将返回STATUS_SUCCESS。 如果系统无法为给定文件生成唯一的短名称,它将返回STATUS_FILE_SYSTEM_LIMITATION。 对于单个给定的长名称,它会在重试 100 万次后返回此错误。

注解

RtlGenerate8dot3Name 返回生成的短名称,最多包含 8 个字符,后跟句点和最多三个字符。

可以重复调用 RtlGenerate8dot3Name。 例如,如果最初生成的短名称是现有文件名的副本,则调用方可以再次将相同的参数传递给 RtlGenerate8dot3Name 。 在这种情况下,不应使用零重新初始化 Context 上的缓冲区。 仅对于转换给定长名称的初始调用,此缓冲区应为零。 重复调用同一长名称时, RtlGenerate8dot3Name 会将专用上下文信息存储在此缓冲区中,以防止名称冲突。

具有相同 NameContextRtlGenerate8dot3Name 的两次调用不能保证返回相同的结果。 调用方应假定长名称到短名称的映射是不确定的。

RtlGenerate8dot3Name 使用当前系统代码页转换给定的长名称,从而放弃输入长名称中的任何无效或多余的字符。 当 AllowExtendedCharacters 设置为 TRUE 时, (DBCS) 映射到大写 OEM 字符的字符的 ANSI 或双字节字符集可以成为返回的短名称的一部分。

RtlGenerate8dot3Name 返回包含大写字母字符的短文件名。 对于在给定的长名称中遇到的以下任意字符,它将在生成的短名称中返回下划线:

  • 冒号和分号
  • 逗号
  • 加号和等号
  • 方括号

有关其他字符串处理例程的信息,请参阅 运行时库 (RTL) 例程

要求

要求
目标平台 通用
标头 ntifs.h (包括 Ntifs.h)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL < DISPATCH_LEVEL

另请参阅

RtlIsNameLegalDOS8Dot3

RtlIsValidOemCharacter

UNICODE_STRING