Структура VPB (wdm.h)
Структура блока параметров тома (VPB) используется для сопоставления объекта устройства, представляющего подключенный том файловой системы с объектом устройства, который представляет физическое или виртуальное устройство диска.
Синтаксис
typedef struct _VPB {
CSHORT Type;
CSHORT Size;
USHORT Flags;
USHORT VolumeLabelLength;
struct _DEVICE_OBJECT *DeviceObject;
struct _DEVICE_OBJECT *RealDevice;
ULONG SerialNumber;
ULONG ReferenceCount;
WCHAR VolumeLabel[MAXIMUM_VOLUME_LABEL_LENGTH / sizeof(WCHAR)];
} VPB, *PVPB;
Члены
Type
Элемент только для чтения, используемый системой для указания того, что структура является объектом VPB.
Size
Элемент только для чтения, используемый системой для указания того, что структура является объектом VPB.
Flags
Ценность | Значение |
---|---|
VPB_MOUNTED | Этот бит задается диспетчером ввода-вывода, чтобы указать, что файловая система подключена к логическому тому. |
VPB_LOCKED | Этот бит можно задать или очистить драйвер файловой системы, подключенный к логическому тому. При установке диспетчер ввода-вывода завершится сбоем всех последующих запросов на создание и открытие, предназначенные для логического тома. Файловые системы могут задать этот член в ответ на запросы приложений, чтобы заблокировать том, или если они временно хотят запретить выполнение любого запроса на создание или открытие. |
VPB_PERSISTENT | Этот бит можно задать или очистить драйверами файловой системы. Если задано, диспетчер ввода-вывода не удаляет структуру VPB, даже если ReferenceCount равно нулю. |
VPB_REMOVE_PENDING | Задайте диспетчером Plug and Play (PnP), чтобы указать, что базовое устройство удаляется. |
VPB_RAW_MOUNT | Указывает, что на устройстве может быть подключена только файловая система RAW. |
VPB_DIRECT_WRITES_ALLOWED | Указывает, что разрешены прямые операции записи в том. Этот флаг устанавливается диспетчером ввода-вывода при подключении файловой системы RAW или самой файловой системой, когда он определяет, что том можно безопасно записать в. Обычно это безопасно для записи в том при отключении файловой системы. |
VolumeLabelLength
Элемент чтения и записи, указывающий длину метки тома в байтах. Этот элемент должен быть задан драйвером файловой системы. Если том не имеет метки, этот элемент должен иметь значение нулю.
DeviceObject
Элемент чтения и записи, заданный драйвером файловой системы, который указывает на объект устройства типа FILE_DEVICE_DISK_FILE_SYSTEM. Этот объект устройства создается драйвером файловой системы для представления подключенного тома.
RealDevice
Элемент только для чтения, заданный диспетчером ввода-вывода, который указывает на объект устройства для физического или виртуального дискового устройства, содержащего подключенный логический том (указывает на DeviceObject).
SerialNumber
Элемент чтения и записи, указывающий серийный номер, связанный с томом файловой системы. Этот элемент должен быть задан драйвером файловой системы, если он доступен.
ReferenceCount
Элемент только для чтения, указывающий количество ссылок для структуры VPB. Если число ссылок для структуры VPB больше нуля, диспетчер операций ввода-вывода не освобождает структуру VPB. Помните, что ReferenceCount можно считать членом чтения и записи, если драйвер файловой системы должен хранить том, чтобы обработать запрос на удаление.
VolumeLabel[MAXIMUM_VOLUME_LABEL_LENGTH / sizeof(WCHAR)]
Элемент чтения и записи, заданный драйвером файловой системы, который указывает метку подключенного тома. Длина метки тома должна составлять 32 символов или меньше. В настоящее время MAXIMUM_VOLUME_LABEL_LENGTH определяется следующим образом:
#define MAXIMUM_VOLUME_LABEL_LENGTH (32 * sizeof(WCHAR));
Замечания
Объект блока параметров тома (VPB) используется для создания связи между объектом устройства физического диска и объектом устройства логического тома. То есть VPB сопоставляет объект тома файловой системы с устройством или разделом, на котором подключен том. Объект VPB существует только для объектов устройств, представляющих физический носитель, виртуальный носитель или логический носитель, который можно подключить.
Диспетчер ввода-вывода выделяет и освобождает память для структуры VPB из непагированного пула. Это выделение (или размещение сделки) происходит при создании объекта устройства (как описано ранее) путем вызова функций IoCreateDevice или IoVerifyVolume. То есть созданный объект устройства должен быть одним из следующих типов:
FILE_DEVICE_DISK
FILE_DEVICE_CD_ROM
FILE_DEVICE_TAPE
FILE_DEVICE_VIRTUAL_DISK
Дополнительные сведения о типах объектов устройств см. в разделе Указание типов устройств.
Драйверы должны вызывать IoAcquireVpbSpinLock перед доступом к любым применимым членам объекта VPB.
Непрозрачные члены должны считаться недоступными. Драйверы с зависимостями в расположениях элементов объекта или доступ к непрозрачным элементам могут не оставаться переносимыми и совместимыми с другими драйверами с течением времени.
Драйверы могут использовать элементы, доступные только для чтения, для получения соответствующих сведений. Драйверы не должны изменять элементы только для чтения или объект, на который указывает член, если элемент является указателем.
Требования
Требование | Ценность |
---|---|
заголовка | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h, FltKernel.h) |