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 在此缓冲区中存储专用上下文信息,以防止名称冲突。

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

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

RtlGenerate8dot3Name 返回带大写字母字符的短文件名。 它为给定长名称中遇到的以下任何字符返回生成的短名称中的下划线:

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

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

要求

要求 价值
目标平台 普遍
标头 ntifs.h (include Ntifs.h)
NtosKrnl.lib
DLL NtosKrnl.exe
IRQL < DISPATCH_LEVEL

另请参阅

RtlIsNameLegalDOS8Dot3

RtlIsValidOemCharacter

UNICODE_STRING