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