共用方式為


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

磁碟區如何掛接