Функция 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

Указатель на строку Юникода, содержащую длинное имя файла. Все ведущие точки в этом имени файла пропускаются во время создания соответствующего короткого имени.

[in] AllowExtendedCharacters

Задайте значение TRUE, если созданное короткое имя файла может содержать расширенные символы. Задайте значение FALSE, если созданное короткое имя файла должно содержать только символы в диапазоне ANSI или OEM текущей кодовой страницы от 0x20 (пробел) до 0x7f (DEL).

[in, out] Context

Указатель на буфер, выделенный вызывающим объектом, для использования rtlGenerate8dot3Name. Перед первым вызовом RtlGenerate8dot3Name для преобразования заданного длинного имени файла вызывающий объект отвечает за заполнение буфера нулями.

[in, out] Name8dot3

Указатель на буфер, выделенный вызывающим объектом, для получения сгенерированного короткого имени файла. Размер этого буфера должен составлять не менее 24 байт (12 символов Юникода).

Возвращаемое значение

Эта подпрограмма возвращает STATUS_SUCCESS, если короткое имя успешно создано. Он возвращает STATUS_FILE_SYSTEM_LIMITATION, если системе не удается создать уникальное короткое имя для заданного файла. Эта ошибка возвращается после 1 миллиона повторных попыток для одного заданного длинного имени.

Комментарии

RtlGenerate8dot3Name возвращает сгенерированное короткое имя не более восьми символов, за которым сразу же следует точка и еще до трех символов.

RtlGenerate8dot3Name можно вызывать повторно. Например, если изначально созданное короткое имя является дубликатом существующего имени файла, вызывающий объект может снова передать те же параметры в RtlGenerate8dot3Name . В этом случае буфер в контексте не следует повторно инициализировать с нулями. Этот буфер должен быть обнуляться только для первоначального вызова для преобразования заданного длинного имени. При неоднократных вызовах одного и того же длинного имени RtlGenerate8dot3Name сохраняет сведения о частном контексте в этом буфере, чтобы предотвратить конфликты имен.

Два вызова RtlGenerate8dot3Name с одинаковыми именами Name и Context не гарантированно возвращают одинаковый результат. Вызывающие должны предполагать, что сопоставление длинного и короткого имени является недетерминированным.

RtlGenerate8dot3Name преобразует заданное длинное имя с помощью текущей системной кодовой страницы, отменяя все недопустимые или лишние символы во входном длинном имени. Если параметр AllowExtendedCharacters имеет значение TRUE, символы ANSI или двухбайтовой кодировки (DBCS), сопоставленные с прописными буквами OEM, могут стать частью возвращаемого короткого имени.

RtlGenerate8dot3Name возвращает короткое имя файла с прописными буквами. Он возвращает символы подчеркивания в созданном коротком имени для любого из следующих символов, встречающихся в заданном длинном имени:

  • Двоеточие и точка с запятой
  • Запятыми
  • Знаки плюса и равенства
  • Квадратные скобки

Дополнительные сведения о других процедурах обработки строк см. в разделе Процедуры библиотеки времени выполнения (RTL).

Требования

Требование Значение
Целевая платформа Универсальное
Верхняя часть ntifs.h (включая Ntifs.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL < DISPATCH_LEVEL

См. также раздел

RtlIsNameLegalDOS8Dot3

RtlIsValidOemCharacter

UNICODE_STRING