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 表示允許對磁碟區的直接寫入作業。 當RAW檔系統掛接時,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

如何掛接磁碟區