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