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


Функция FltGetVolumeName (fltkernel.h)

Подпрограмма FltGetVolumeName получает имя тома для заданного тома.

Синтаксис

NTSTATUS FLTAPI FltGetVolumeName(
  [in]                PFLT_VOLUME     Volume,
  [in, out, optional] PUNICODE_STRING VolumeName,
  [out, optional]     PULONG          BufferSizeNeeded
);

Параметры

[in] Volume

Непрозрачный указатель на том. Этот параметр является обязательным и не может иметь значение NULL.

[in, out, optional] VolumeName

Указатель на структуру, выделенную вызывающим объектом UNICODE_STRING , которая содержит имя объекта непостояного устройства тома (например, "\Device\HarddiskVolume1"), когда возвращается STATUS_SUCCESS. Имейте в виду, что пул для VolumeName-Buffer> также выделяется вызывающим объектом.

Этот параметр является необязательным и может иметь значение NULL; однако если bufferSizeNeeded имеет значение NULL, оно должно быть не равно NULL. Если этот параметр имеет значение NULL , а BufferSizeNeeded не равен NULL, FltGetVolumeName сохраняет размер буфера, необходимый для запрошенного имени тома, в параметре BufferSizeNeeded и возвращает STATUS_BUFFER_TOO_SMALL. См. заметки.

[out, optional] BufferSizeNeeded

Указатель на переменную, выделенную вызывающим объектом, которая получает размер запрошенного имени тома в байтах. Этот параметр является необязательным и может иметь значение NULL; Однако, если VolumeName имеет значение NULL, оно должно быть не равно NULL, чтобы fltGetVolumeName хранил размер буфера, необходимый для запрошенного имени тома.

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

FltGetVolumeName возвращает одно из следующих значений NTSTATUS:

Код возврата Описание
STATUS_SUCCESS Структура UNICODE_STRING, на которую указывает Имя_тома, содержит имя тома в элементе Buffer для структуры и длину имени в байтах в элементе Length .
STATUS_BUFFER_TOO_SMALL Элемент Buffer структуры UNICODE_STRING, на который указывает Имя_тома, слишком мал (на что указывает его член MaximumLength ) для хранения всего имени тома. Это код ошибки.
STATUS_INVALID_PARAMETER VolumeName и BufferSizeNeeded имеют значение NULL. Это код ошибки.

Комментарии

Для успешного выполнения этой подпрограммы элемент Buffer структуры UNICODE_STRING (на который указывает Имя_тома) должен быть достаточно большим, как указано в его члене MaximumLength , чтобы содержать всю строку имени тома.

В следующем псевдокоде показан один из возможных способов успешного получения имени тома, если bufferSizeNeeded неизвестен:

  • Вызовите FltGetVolumeName , чтобы определить необходимый пул для буфера и требуемый размер для MaximumLength. Пример: FltGetVolumeName(VolumePtr, NULL, &VolumeNameSize);

  • Выделите VolumeNameSize байты пула для буфера и задайте для параметра MaximumLength значение VolumeNameSize.

  • Вызовите FltGetVolumeName еще раз, чтобы получить имя тома. Пример: FltGetVolumeName(VolumePtr, &VolumeNameStruct, NULL);

VolumeNameStruct.Buffer содержит строку имени тома Юникода длиной VolumeNameStruct.Length в байтах.

Чтобы получить имя GUID тома для заданного тома, вызовите FltGetVolumeGuidName.

Чтобы получить указатель непрозрачного тома для тома с заданным именем, вызовите FltGetVolumeFromName.

Дополнительные сведения о томе, как присвоить имя тому, см. в разделе Поддержка запросов диспетчера подключений в драйвере класса хранения**.

Требования

Требование Значение
Целевая платформа Универсальное
Верхняя часть fltkernel.h (включая FltKernel.h)
Библиотека FltMgr.lib
DLL Fltmgr.sys
IRQL <= APC_LEVEL

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

FilterGetDosName

FltGetVolumeFromName

FltGetVolumeGuidName

UNICODE_STRING