Win32 API 日本語リファレンス
ホームStorage.VirtualDiskService › IVdsVolumeMF

IVdsVolumeMF

COM
IIDee2d5ded-6236-4169-931d-b9778ce03dc6継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

ボリュームオブジェクトに対してアクセスパスおよびファイルシステムの操作を実行するためのメソッドを提供します。

メソッド 10

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT GetFileSystemProperties(VDS_FILE_SYSTEM_PROP* pFileSystemProp)

現在のボリューム上のファイルシステムに関するプロパティの詳細を返します。

pFileSystemPropVDS_FILE_SYSTEM_PROP*out呼び出し側が割り当てて渡す VDS_FILE_SYSTEM_PROP 構造体のアドレスです。VDS は pwszLabel メンバー文字列のためのメモリを割り当てます。呼び出し側は CoTaskMemFree 関数を使用してこの文字列を解放する必要があります。

戻り値

このメソッドは、E_INVALIDARGE_OUTOFMEMORY などの標準的な HRESULT 値、および VDS 固有の戻り値 を返すことがあります。また、HRESULT_FROM_WIN32 マクロを使用して変換された システムエラーコード を返すこともあります。エラーは VDS 自体、または使用されている基盤の VDS プロバイダー から発生する可能性があります。戻り値には次のものが含まれます。

リターンコード/値 説明
S_OK
メソッドは正常に完了しました。
VDS_E_VOLUME_NOT_MOUNTED
0x8004244FL
ボリュームはオフラインにされました。
VDS_E_OBJECT_STATUS_FAILED
0x80042431L
ボリュームが失敗しました。
VDS_E_PACK_OFFLINE
0x80042444L
ボリュームを含むパックにアクセスできません。

解説(Remarks)

ボリュームが BitLocker によって暗号化されている場合、VDS_FILE_SYSTEM_PROP 構造体の type メンバーは、戻り時に VDS_FST_UNKNOWN に設定されます。

vtbl 4 HRESULT Format(VDS_FILE_SYSTEM_TYPE type, LPWSTR pwszLabel, DWORD dwUnitAllocationSize, BOOL bForce, BOOL bQuickFormat, BOOL bEnableCompression, IVdsAsync** ppAsync)

現在のボリューム上にファイルシステムをフォーマットします。

typeVDS_FILE_SYSTEM_TYPEin使用するファイルシステムを指定する VDS_FILE_SYSTEM_TYPE 列挙値です。VDS_FST_NTFSVDS_FST_FATVDS_FST_FAT32VDS_FST_UDF のいずれかである必要があります。
pwszLabelLPWSTRinファイルシステムのラベルを表す文字列です。
dwUnitAllocationSizeDWORDinファイルシステムのアロケーションユニットのサイズ(バイト単位)で、通常は 512 から 65536 の間です。
bForceBOOLinTRUE の場合、使用中であってもファイルシステムは無条件にフォーマットされます。 それ以外の場合、操作は失敗します。
bQuickFormatBOOLinTRUE の場合、VDS はクイックフォーマットを実行します(ボリューム上の各セクターの 検証は行いません)。
bEnableCompressionBOOLinTRUE の場合、新しくフォーマットされたファイルシステムで圧縮が有効になります。圧縮 は NTFS の機能であり、FAT および FAT32 では無視されます。
ppAsyncIVdsAsync**outIVdsAsync インターフェイスポインターのアドレスで、 VDS が戻り時に初期化します。呼び出し側はこのインターフェイスを解放する必要があります。このポインターを使用して、操作のキャンセル、完了の待機、または 状態の照会を行います。

戻り値

このメソッドは、E_INVALIDARGE_OUTOFMEMORY などの標準的な HRESULT 値、および VDS 固有の戻り値 を返すことがあります。また、HRESULT_FROM_WIN32 マクロを使用して変換された システムエラーコード を返すこともあります。エラーは VDS 自体、または使用されている基盤の VDS プロバイダー から発生する可能性があります。戻り値には次のものが含まれます。

リターンコード/値 説明
S_OK
ファイルシステムは正常にフォーマットされました。
VDS_E_OPERATION_DENIED
0x8004240AL
呼び出し側がシステム、ブート、クラッシュダンプ、ハイバネーション、または ページファイルのボリュームをフォーマットしようとした場合、操作は拒否されます。
VDS_E_OBJECT_STATUS_FAILED
0x80042431L
ボリュームが失敗しました。
VDS_E_PACK_OFFLINE
0x80042444L
ボリュームを含むパックにアクセスできません。オフラインのパック内のすべてのボリュームにはアクセスできません。

さらに、IVdsAsync インターフェイスは、 次の関連する警告およびエラーコードを返すことがあります。

リターンコード/値 説明
VDS_S_VOLUME_COMPRESS_FAILED
0x00042443L
ファイルシステムはフォーマットされましたが、圧縮されていません。
VDS_E_INCOMPATIBLE_FILE_SYSTEM
0x80042425L
ファイルシステムに互換性がありません。
VDS_E_INCOMPATIBLE_MEDIA
0x80042426L
メディアに互換性がありません。
VDS_E_ACCESS_DENIED
0x80042427L
アクセスが拒否されました。
VDS_E_MEDIA_WRITE_PROTECTED
0x80042428L
メディアは書き込み保護されています。
VDS_E_BAD_LABEL
0x80042429L
ラベルが無効です。
VDS_E_CANT_QUICK_FORMAT
0x8004242AL
ボリュームはクイックフォーマットできません。
VDS_E_IO_ERROR
0x8004242BL
フォーマット中に IO エラーが発生しました。
VDS_E_VOLUME_TOO_SMALL
0x8004242CL
ボリュームサイズが小さすぎてフォーマットできません。
VDS_E_VOLUME_TOO_BIG
0x8004242DL
ボリュームサイズが大きすぎてフォーマットできません。
VDS_E_CLUSTER_SIZE_TOO_SMALL
0x8004242EL
クラスターサイズが小さすぎてフォーマットできません。
VDS_E_CLUSTER_SIZE_TOO_BIG
0x8004242FL
クラスターサイズが大きすぎてフォーマットできません。
VDS_E_CLUSTER_COUNT_BEYOND_32BITS
0x80042430L
クラスター数が多すぎて 32 ビット整数として表現できません。
VDS_E_INVALID_FS_TYPE
0x80042561L
type パラメーターの値が VDS_FST_NTFSVDS_FST_FATVDS_FST_FAT32VDS_FST_UDF のいずれでもありませんでした。
VDS_E_CANT_INVALIDATE_FVE
0x80042592L
ボリュームの BitLocker 暗号化を無効にできませんでした。

解説(Remarks)

ダイナミックディスク上にブートボリュームを作成するには、ボリュームをフォーマットするために Format を呼び出す前に、IVdsVolume::SetFlags を呼び出して VDS_VF_INSTALLABLE フラグを設定する必要があります。

OEM パーティションが FAT または FAT32 としてフォーマットされる場合、パーティションの種類は変更されません。NTFS でフォーマットされる場合、パーティションの種類は PARTITION_IFS (0x07) に変更されます。パーティションの種類の詳細については、CREATE_PARTITION_PARAMETERS を参照してください。

このメソッドが BitLocker のボリューム全体の暗号化によって保護されたボリュームに対して呼び出された場合、ユーザーが再度有効にするまで、そのボリュームの BitLocker 暗号化は無効になります。

最小および最大のアロケーションユニットサイズ(クラスターサイズとも呼ばれます)などのファイルシステムの制限の詳細については、NTFS Technical Reference および FAT Technical Reference を参照してください。

vtbl 5 HRESULT AddAccessPath(LPWSTR pwszPath)

アクセスパスを追加します。

pwszPathLPWSTRinアクセスパスを示す文字列で、これはボリュームを開くために使用できるユーザーモードのパスです。アクセスパスには、ドライブ文字または NTFS ボリューム上の空のディレクトリへのパスを指定できます。アクセスパスの文字列には、末尾に バックスラッシュを含める必要があります(例: "F:")。

戻り値

このメソッドは、E_INVALIDARGE_OUTOFMEMORY などの標準的な HRESULT 値、および VDS 固有の戻り値 を返すことがあります。また、HRESULT_FROM_WIN32 マクロを使用して変換された システムエラーコード を返すこともあります。エラーは VDS 自体、または使用されている基盤の VDS プロバイダー から発生する可能性があります。戻り値には次のものが含まれます。

リターンコード/値 説明
S_OK
パスは正常に追加されました。
S_FALSE
アクセスパスは正常に追加されましたが、エラーが発生しました。VDS は、ドライブ文字の追加時に、パーティションの GPT_BASIC_DATA_ATTRIBUTE_NO_DRIVE_LETTER 属性の更新に失敗したか、既定のネットワーク共有(F$ など)の 追加に失敗した可能性があります。詳細については、PARTITION_INFORMATION_GPT を参照してください。
VDS_E_OBJECT_STATUS_FAILED
0x80042431L
ボリュームが失敗しました。
VDS_E_PACK_OFFLINE
0x80042444L
ボリュームを含むパックにアクセスできません。

解説(Remarks)

VDS は、マウントされたフォルダー(ボリュームマウントポイントとも呼ばれます)を作成することでアクセスパスを追加します。マウントされたフォルダーは NTFS ボリュームでのみサポートされることに注意してください。詳細については、Mounted Folders を参照してください。

pwszPath パラメーターに、既に使用中のマウントされたフォルダーへのパス(ディレクトリが空であっても)が含まれている場合、または pwszPath に空でないディレクトリへのパスが含まれている場合、このメソッドは ERROR_DIR_NOT_EMPTY を返します。

vtbl 6 HRESULT QueryAccessPaths(LPWSTR** pwszPathArray, INT* plNumberOfAccessPaths)

現在のボリュームのアクセスパスの一覧と、存在する場合はドライブ文字を返します。

pwszPathArrayLPWSTR**outCoTaskMemFree
plNumberOfAccessPathsINT*outボリューム上のアクセスパスの数へのポインターです。

戻り値

このメソッドは、E_INVALIDARGE_OUTOFMEMORY などの標準的な HRESULT 値、および VDS 固有の戻り値 を返すことがあります。また、HRESULT_FROM_WIN32 マクロを使用して変換された システムエラーコード を返すこともあります。エラーは VDS 自体、または使用されている基盤の VDS プロバイダー から発生する可能性があります。戻り値には次のものが含まれます。

リターンコード/値 説明
S_OK
メソッドは正常に完了しました。
VDS_E_OBJECT_STATUS_FAILED
0x80042431L
ボリュームが失敗しました。
VDS_E_PACK_OFFLINE
0x80042444L
ボリュームを含むパックにアクセスできません。

解説(Remarks)

ドライブ文字は、pwszPathArray の最初のアクセスパスとして現れます。

vtbl 7 HRESULT QueryReparsePoints(VDS_REPARSE_POINT_PROP** ppReparsePointProps, INT* plNumberOfReparsePointProps)

現在のボリュームのすべての再解析ポイントを返します。

ppReparsePointPropsVDS_REPARSE_POINT_PROP**outVDS_REPARSE_POINT_PROP 構造体で定義されたプロパティの配列へのポインターを受け取るバッファーへのポインターです。
plNumberOfReparsePointPropsINT*out再解析ポイントプロパティの数を格納するバッファーへのポインターです。

戻り値

このメソッドは、E_INVALIDARGE_OUTOFMEMORY などの標準的な HRESULT 値、および VDS 固有の戻り値 を返すことがあります。また、HRESULT_FROM_WIN32 マクロを使用して変換された システムエラーコード を返すこともあります。エラーは VDS 自体、または使用されている基盤の VDS プロバイダー から発生する可能性があります。戻り値には次のものが含まれます。

リターンコード/値 説明
S_OK
メソッドは正常に完了しました。
VDS_E_OBJECT_STATUS_FAILED
0x80042431L
ボリュームが失敗しました。
VDS_E_PACK_OFFLINE
0x80042444L
ボリュームを含むパックにアクセスできません。

解説(Remarks)

再解析ポイントは、ソースボリュームの識別子とボリュームパスから成るタプルで表されます。このメソッドは、冗長なアクセスパスを返しません。

vtbl 8 HRESULT DeleteAccessPath(LPWSTR pwszPath, BOOL bForce)

現在のボリュームからアクセスパスを削除します。

pwszPathLPWSTRin削除するアクセスパスを含む文字列です。アクセスパスには、ドライブ文字または NTFS ボリューム上の空のディレクトリへのパスを指定できます。ドライブ文字の場合は、末尾にバックスラッシュを含める必要があります(例: "F:")。ディレクトリへのパスの場合は、末尾のバックスラッシュは不要です(例: "C:\MyFolder\MyDocuments")。
bForceBOOLinTRUE の場合、ボリュームが使用中であっても、アクセスパスは無条件に 削除されます。このパラメーターは、アクセスパスがドライブ文字である場合にのみ意味を持ちます。

戻り値

このメソッドは、E_INVALIDARGE_OUTOFMEMORY などの標準的な HRESULT 値、および VDS 固有の戻り値 を返すことがあります。また、HRESULT_FROM_WIN32 マクロを使用して変換された システムエラーコード を返すこともあります。エラーは VDS 自体、または使用されている基盤の VDS プロバイダー から発生する可能性があります。戻り値には次のものが含まれます。

リターンコード/値 説明
S_OK
メソッドは正常に完了しました。
VDS_E_OPERATION_DENIED
0x8004240AL
パスがシステムボリューム、ブートボリューム、クラッシュダンプボリューム、ハイバネーションボリューム、または ページファイルボリュームを指しています。これらのボリュームからはドライブ文字を削除できません。
VDS_E_PATH_NOT_FOUND
0x80042416L
指定されたパスが見つかりません。
VDS_E_DEVICE_IN_USE
0x80042413L
アクセスパスは正常に削除されましたが、エラーが発生しました。VDS は、ドライブ文字の削除時に、パーティションの GUID パーティションテーブル (GPT) 属性の更新に失敗したか、既定のネットワーク共有(F$ など)の 削除に失敗した可能性があります。
VDS_E_OBJECT_STATUS_FAILED
0x80042431L
ボリュームが失敗しました。
VDS_E_PACK_OFFLINE
0x80042444L
ボリュームを含むパックにアクセスできません。

解説(Remarks)

ボリュームに対して開いているハンドルがない場合、ドライブ文字はただちに削除されます。ただし、ボリュームに対して開いているハンドルがある場合、ボリュームをロックできないため、ドライブ文字はコンピューターの再起動時に削除されます。

vtbl 9 HRESULT Mount()

ボリュームをマウントします。

戻り値

このメソッドは、E_OUTOFMEMORY などの標準的な HRESULT 値、および VDS 固有の戻り値 を返すことがあります。また、HRESULT_FROM_WIN32 マクロを使用して変換された システムエラーコード を返すこともあります。エラーは VDS 自体、または使用されている基盤の VDS プロバイダー から発生する可能性があります。戻り値には次のものが含まれます。

リターンコード/値 説明
S_OK
メソッドは正常に完了しました。
VDS_E_OBJECT_STATUS_FAILED
0x80042431L
ボリュームオブジェクトにアクセスできません。
VDS_E_PACK_OFFLINE
0x80042444L
ボリュームを含むパックにアクセスできません。
vtbl 10 HRESULT Dismount(BOOL bForce, BOOL bPermanent)

マウントされたボリュームをマウント解除します。

bForceBOOLinTRUE の場合、使用中であってもボリュームはマウント解除されます。それ以外の場合、ボリュームが使用中であれば操作は失敗します。
bPermanentBOOLinTRUE の場合、ボリュームはアクセスパスが追加されるまでマウント解除されたままになります。

戻り値

このメソッドは、E_INVALIDARGE_OUTOFMEMORY などの標準的な HRESULT 値、および VDS 固有の戻り値 を返すことがあります。また、HRESULT_FROM_WIN32 マクロを使用して変換された システムエラーコード を返すこともあります。エラーは VDS 自体、または使用されている基盤の VDS プロバイダー から発生する可能性があります。戻り値には次のものが含まれます。

リターンコード/値 説明
S_OK
メソッドは正常に完了しました。
VDS_E_VOLUME_TEMPORARILY_DISMOUNTED
0x8004245CL
ボリュームは既にマウント解除されています。
VDS_E_NOT_SUPPORTED
0x80042400L
ボリュームをマウント解除できません。この操作をサポートしていません。
VDS_E_VOLUME_PERMANENTLY_DISMOUNTED
0x8004245DL
ボリュームは既にマウント解除されています。マウント可能になるまで、一時的にマウント解除することはできません。
VDS_E_VOLUME_HAS_PATH
0x8004245EL
ボリュームにはまだアクセスパスがあるため、マウント解除できません。
VDS_E_DEVICE_IN_USE
0x80042413L
ボリュームは使用中のため、マウント解除できません。

解説(Remarks)

ボリュームをマウントするには、Mount メソッドを使用します。

vtbl 11 HRESULT SetFileSystemFlags(DWORD ulFlags)

ファイルシステムフラグを設定します。

ulFlagsDWORDinVDS_FILE_SYSTEM_FLAG によって列挙されるフラグです。呼び出し側は VDS_FPF_COMPRESSED フラグを設定できます。

戻り値

このメソッドは、E_INVALIDARGE_OUTOFMEMORY などの標準的な HRESULT 値、および VDS 固有の戻り値 を返すことがあります。また、HRESULT_FROM_WIN32 マクロを使用して変換された システムエラーコード を返すこともあります。エラーは VDS 自体、または使用されている基盤の VDS プロバイダー から発生する可能性があります。戻り値には次のものが含まれます。

リターンコード/値 説明
S_OK
メソッドは正常に完了しました。
VDS_E_INVALID_OPERATION
0x80042415L
ボリュームは非表示です。このメソッドは非表示のボリュームに対して呼び出すことはできません。
VDS_E_OBJECT_STATUS_FAILED
0x80042431L
ボリュームが失敗しました。
VDS_E_PACK_OFFLINE
0x80042444L
ボリュームを含むパックにアクセスできません。
vtbl 12 HRESULT ClearFileSystemFlags(DWORD ulFlags)

ファイルシステムフラグをクリアします。

ulFlagsDWORDinVDS_FILE_SYSTEM_FLAG によって列挙されるフラグです。呼び出し側は VDS_FPF_COMPRESSED フラグをクリアできます。

戻り値

このメソッドは、E_INVALIDARGE_OUTOFMEMORY などの標準的な HRESULT 値、および VDS 固有の戻り値 を返すことがあります。また、HRESULT_FROM_WIN32 マクロを使用して変換された システムエラーコード を返すこともあります。エラーは VDS 自体、または使用されている基盤の VDS プロバイダー から発生する可能性があります。戻り値には次のものが含まれます。

リターンコード/値 説明
S_OK
メソッドは正常に完了しました。
VDS_E_INVALID_OPERATION
0x80042415L
ボリュームは非表示です。このメソッドは非表示のボリュームに対して呼び出すことはできません。
VDS_E_OBJECT_STATUS_FAILED
0x80042431L
ボリュームが失敗しました。
VDS_E_PACK_OFFLINE
0x80042444L
ボリュームを含むパックにアクセスできません。
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

出力引数:
#define global IID_IVdsVolumeMF "{EE2D5DED-6236-4169-931D-B9778CE03DC6}"
#usecom global IVdsVolumeMF IID_IVdsVolumeMF "{}"
#comfunc global IVdsVolumeMF_GetFileSystemProperties  3 var
#comfunc global IVdsVolumeMF_Format                   4 int,wstr,int,int,int,int,sptr
#comfunc global IVdsVolumeMF_AddAccessPath            5 wstr
#comfunc global IVdsVolumeMF_QueryAccessPaths         6 var,var
#comfunc global IVdsVolumeMF_QueryReparsePoints       7 var,var
#comfunc global IVdsVolumeMF_DeleteAccessPath         8 wstr,int
#comfunc global IVdsVolumeMF_Mount                    9
#comfunc global IVdsVolumeMF_Dismount                 10 int,int
#comfunc global IVdsVolumeMF_SetFileSystemFlags       11 int
#comfunc global IVdsVolumeMF_ClearFileSystemFlags     12 int
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。