Функция 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->буфера также выделяется вызывающим объектом.
Этот параметр является необязательным и может быть NULL; однако оно должно быть неNULL, если BufferSizeNeedededNULL. Если этот параметр имеет значение NULL и BufferSizeNeeded не NULL, FltGetVolumeName сохраняет размер буфера, необходимый для запрошенного имени тома в параметре BufferSizeNeeded и возвращает STATUS_BUFFER_TOO_SMALL. См. примечания.
[out, optional] BufferSizeNeeded
Указатель на выделенную вызывающим переменную, которая получает размер в байтах запрошенного имени тома. Этот параметр является необязательным и может быть NULL; Однако оно должно быть неnull, если имя томаNULL, чтобы FltGetVolumeName может хранить размер буфера, необходимый для запрошенного имени тома.
Возвращаемое значение
FltGetVolumeName возвращает одно из следующих значений NTSTATUS:
Возвращаемый код | Описание |
---|---|
STATUS_SUCCESS | Структура UNICODE_STRING, указываемая volumeName, содержит имя тома в элементе буфера буфера для структуры и длины имени в байтах в элементе длины. |
STATUS_BUFFER_TOO_SMALL | Элемент буфера структуры UNICODE_STRING, на который указывает имя тома, слишком мал (как указано в элементе MaximumLength), чтобы содержать все имя тома. Это код ошибки. |
STATUS_INVALID_PARAMETER | Имя тома и BufferSizeNeed являются NULL. Это код ошибки. |
Замечания
Для успешного выполнения этой подпрограммы элемент буфера структуры 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 (include FltKernel.h) |
библиотеки | FltMgr.lib |
DLL | Fltmgr.sys |
IRQL | <= APC_LEVEL |