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 此位由 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 管理器会设置此标志。 卸载文件系统时,通常可以安全地写入卷。

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 对象的任何适用成员。

不透明成员应被视为不可访问。 依赖于对象成员位置的驱动程序或对不透明成员的访问可能无法在一段时间内保持可移植性且与其他驱动程序互作。

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

要求

要求 价值
标头 wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h、FltKernel.h)

另请参阅

DEVICE_OBJECT

FILE_OBJECT

如何装载卷