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 会将专用上下文信息存储在此缓冲区中,以防止名称冲突。
对具有相同 Name 和 Context 的 RtlGenerate8dot3Name 的两次调用不能保证返回相同的结果。 调用方应假定长名称到短名称的映射是不确定的。
RtlGenerate8dot3Name 使用当前系统代码页转换给定的长名称,从而放弃输入长名称中的任何无效或多余的字符。 当 AllowExtendedCharacters 设置为 TRUE 时, (DBCS) 映射到大写 OEM 字符的字符的 ANSI 或双字节字符集可以成为返回的短名称的一部分。
RtlGenerate8dot3Name 返回包含大写字母字符的短文件名。 对于在给定的长名称中遇到的以下任意字符,它将在生成的短名称中返回下划线:
- 冒号和分号
- 逗号
- 加号和等号
- 方括号
有关其他字符串处理例程的信息,请参阅 运行时库 (RTL) 例程。
要求
要求 | 值 |
---|---|
目标平台 | 通用 |
标头 | ntifs.h (包括 Ntifs.h) |
Library | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | < DISPATCH_LEVEL |