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 | このビットは、論理ボリュームをマウントしたファイル システム ドライバーによって設定またはクリアできます。 設定すると、I/O マネージャーは、論理ボリュームを対象とする後続のすべての作成/開く要求に失敗します。 ファイル システムは、ボリュームをロックするアプリケーション要求に応答してこのメンバーを設定するか、作成/開いている要求が続行されないように一時的に望む場合に、このメンバーを設定することを選択できます。 |
VPB_PERSISTENT | このビットは、ファイル システム ドライバーによって設定またはクリアできます。 設定した場合、 ReferenceCount が 0 の場合でも、I/O マネージャーは VPB 構造体を削除しません。 |
VPB_REMOVE_PENDING | 基になるデバイスが削除されていることを示すために、プラグ アンド プレイ (PnP) マネージャーによって設定されます。 |
VPB_RAW_MOUNT | RAW ファイル システムのみをデバイスにマウントできることを示します。 |
VPB_DIRECT_WRITES_ALLOWED | ボリュームへの直接書き込み操作が許可されることを示します。 このフラグは、RAW ファイル・システムがマウントされている場合は入出力マネージャーによって設定され、ボリュームの書き込みが安全であると判断された場合はファイル・システム自体によって設定されます。 通常、ファイル システムがマウント解除されたときにボリュームに書き込むのは安全です。 |
VolumeLabelLength
ボリューム ラベルの長さをバイト単位で指定する読み取り/書き込みメンバー。 このメンバーは、ファイル システム ドライバーによって設定する必要があります。 ボリュームにラベルがない場合は、このメンバーをゼロに設定する必要があります。
DeviceObject
FILE_DEVICE_DISK_FILE_SYSTEM型のデバイス オブジェクトを指す、ファイル システム ドライバーによって設定される読み取り/書き込 みメンバー。 このデバイス オブジェクトは、マウントされたボリュームを表すためにファイル システム ドライバーによって作成されます。
RealDevice
I/O マネージャーによって設定される読み取り専用メンバー。これは、マウント可能な論理ボリューム ( DeviceObject が指す) を含む物理または仮想ディスク デバイスのデバイス オブジェクトを指します。
SerialNumber
ファイル システム ボリュームに関連付けられているシリアル番号を指定する読み取り/書き込みメンバー。 このメンバーは、ファイル システム ドライバー (使用可能な場合) によって設定する必要があります。
ReferenceCount
VPB 構造体の参照カウントを指定する読み取り専用メンバー。 VPB 構造体の参照カウントが 0 より大きい場合、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 構造体のメモリを非ページ プールから割り当ておよび割り当て解除します。 この割り当て (または割り当て解除) は、 IoCreateDevice 関数または IoVerifyVolume 関数を呼び出すことによってデバイス オブジェクト (前述のように) が作成されるときに発生します。 つまり、作成されるデバイス オブジェクトは、次のいずれかの種類である必要があります。
FILE_DEVICE_DISK
FILE_DEVICE_CD_ROM
FILE_DEVICE_TAPE
FILE_DEVICE_VIRTUAL_DISK
デバイス オブジェクトの種類の詳細については、「デバイスの種類 の指定」を参照してください。
ドライバーは、VPB オブジェクトの該当するメンバーにアクセスする前に 、IoAcquireVpbSpinLock を呼び出す必要があります。
不透明なメンバーはアクセス不可と見なす必要があります。 オブジェクト メンバーの場所に依存しているドライバーや、不透明なメンバーへのアクセスを持つドライバーは、移植可能で、時間の経過と共に他のドライバーと相互運用できない可能性があります。
ドライバーは、読み取り専用メンバーを使用して関連情報を取得できます。 ドライバーは、メンバーがポインターである場合、読み取り専用メンバーまたはメンバーが指すオブジェクトを変更することはできません。
要件
要件 | 値 |
---|---|
Header | wdm.h (Wdm.h、Ntddk.h、Ntifs.h、FltKernel.h を含む) |