(wdm.h) 的 VPB 结构

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 此位由 I/O 管理器设置,指示文件系统已装载逻辑卷。
VPB_LOCKED 已装载逻辑卷的文件系统驱动程序可以设置或清除此位。 设置后,I/O 管理器将失败针对逻辑卷的所有后续创建/打开请求。 文件系统可以选择设置此成员,以响应应用程序请求锁定卷,或者如果它们暂时希望阻止任何创建/打开请求继续。
VPB_PERSISTENT 文件系统驱动程序可以设置或清除此位。 如果设置,即使 ReferenceCount 为零,I/O 管理器也不会删除 VPB 结构。
VPB_REMOVE_PENDING 由即插即用 (PnP) 管理器设置,以指示正在删除基础设备。
VPB_RAW_MOUNT 指示设备上只能装载 RAW 文件系统。
VPB_DIRECT_WRITES_ALLOWED 指示允许对卷执行直接写入操作。 此标志由 I/O 管理器在装载 RAW 文件系统时设置,或者由文件系统本身在确定卷可以安全写入时设置。 卸载文件系统时,写入卷通常是安全的。

VolumeLabelLength

一个读/写成员,指定卷标签的长度(以字节为单位)。 此成员必须由文件系统驱动程序设置。 如果卷没有标签,则必须将此成员设置为零。

DeviceObject

由文件系统驱动程序设置的读/写成员,指向 类型为 FILE_DEVICE_DISK_FILE_SYSTEM 的设备对象。 此设备对象由文件系统驱动程序创建,用于表示已装载的卷。

RealDevice

由 I/O 管理器设置的只读成员,该成员指向包含 DeviceObject) 所指向的可装载逻辑卷 (的物理或虚拟磁盘设备的设备对象。

SerialNumber

一个读/写成员,指定与文件系统卷关联的序列号。 此成员应由文件系统驱动程序设置(如果可用)。

ReferenceCount

一个只读成员,指定 VPB 结构的引用计数。 如果 VPB 结构的引用计数大于零,则 I/O 管理器不会解除分配 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 对象仅适用于表示物理媒体、虚拟媒体或可装载的逻辑媒体的设备对象。

I/O 管理器从非分页池中为 VPB 结构分配和解除分配内存。 当通过调用 IoCreateDeviceIoVerifyVolume 函数创建) 中所述的设备对象 (时,会发生此分配 (或解除分配) 。 也就是说,创建的设备对象必须是以下类型之一:

  • FILE_DEVICE_DISK

  • FILE_DEVICE_CD_ROM

  • FILE_DEVICE_TAPE

  • FILE_DEVICE_VIRTUAL_DISK

有关设备对象类型的详细信息,请参阅 指定设备类型

驱动程序必须先调用 IoAcquireVpbSpinLock ,然后才能访问 VPB 对象的任何适用成员。

不透明成员应被视为不可访问。 随着时间的推移,依赖于对象成员位置或访问不透明成员的驱动程序可能无法保持可移植和与其他驱动程序的互操作。

驱动程序可以使用只读成员来获取相关信息。 如果成员是指针,则驱动程序不得修改只读成员或成员指向的对象。

要求

要求
Header wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h、FltKernel.h)

另请参阅

DEVICE_OBJECT

FILE_OBJECT

如何装载卷