Поделиться через


Функция 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 возвращает короткое имя файла с буквами в алфавитном регистре. Он возвращает символы подчеркивания в созданном коротком имени для любого из следующих символов, которые он встречает в заданном длинном имени:

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

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

Требования

Требование Ценность
целевая платформа Всеобщий
заголовка ntifs.h (include Ntifs.h)
библиотеки NtosKrnl.lib
DLL NtosKrnl.exe
IRQL < DISPATCH_LEVEL

См. также

RtlIsNameLegalDOS8Dot3

RtlIsValidOemCharacter

UNICODE_STRING