IVdsVolumeMF
COM公式ドキュメント
ボリュームオブジェクトに対してアクセスパスおよびファイルシステムの操作を実行するためのメソッドを提供します。
メソッド 10
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
現在のボリューム上のファイルシステムに関するプロパティの詳細を返します。
| pFileSystemProp | VDS_FILE_SYSTEM_PROP* | out | 呼び出し側が割り当てて渡す VDS_FILE_SYSTEM_PROP 構造体のアドレスです。VDS は pwszLabel メンバー文字列のためのメモリを割り当てます。呼び出し側は CoTaskMemFree 関数を使用してこの文字列を解放する必要があります。 |
戻り値
このメソッドは、E_INVALIDARG や E_OUTOFMEMORY などの標準的な HRESULT 値、および VDS 固有の戻り値 を返すことがあります。また、HRESULT_FROM_WIN32 マクロを使用して変換された システムエラーコード を返すこともあります。エラーは VDS 自体、または使用されている基盤の VDS プロバイダー から発生する可能性があります。戻り値には次のものが含まれます。
| リターンコード/値 | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
|
ボリュームはオフラインにされました。 |
|
ボリュームが失敗しました。 |
|
ボリュームを含むパックにアクセスできません。 |
解説(Remarks)
ボリュームが BitLocker によって暗号化されている場合、VDS_FILE_SYSTEM_PROP 構造体の type メンバーは、戻り時に VDS_FST_UNKNOWN に設定されます。
現在のボリューム上にファイルシステムをフォーマットします。
| type | VDS_FILE_SYSTEM_TYPE | in | 使用するファイルシステムを指定する VDS_FILE_SYSTEM_TYPE 列挙値です。VDS_FST_NTFS、VDS_FST_FAT、VDS_FST_FAT32、VDS_FST_UDF のいずれかである必要があります。 |
| pwszLabel | LPWSTR | in | ファイルシステムのラベルを表す文字列です。 |
| dwUnitAllocationSize | DWORD | in | ファイルシステムのアロケーションユニットのサイズ(バイト単位)で、通常は 512 から 65536 の間です。 |
| bForce | BOOL | in | TRUE の場合、使用中であってもファイルシステムは無条件にフォーマットされます。 それ以外の場合、操作は失敗します。 |
| bQuickFormat | BOOL | in | TRUE の場合、VDS はクイックフォーマットを実行します(ボリューム上の各セクターの 検証は行いません)。 |
| bEnableCompression | BOOL | in | TRUE の場合、新しくフォーマットされたファイルシステムで圧縮が有効になります。圧縮 は NTFS の機能であり、FAT および FAT32 では無視されます。 |
| ppAsync | IVdsAsync** | out | IVdsAsync インターフェイスポインターのアドレスで、 VDS が戻り時に初期化します。呼び出し側はこのインターフェイスを解放する必要があります。このポインターを使用して、操作のキャンセル、完了の待機、または 状態の照会を行います。 |
戻り値
このメソッドは、E_INVALIDARG や E_OUTOFMEMORY などの標準的な HRESULT 値、および VDS 固有の戻り値 を返すことがあります。また、HRESULT_FROM_WIN32 マクロを使用して変換された システムエラーコード を返すこともあります。エラーは VDS 自体、または使用されている基盤の VDS プロバイダー から発生する可能性があります。戻り値には次のものが含まれます。
| リターンコード/値 | 説明 |
|---|---|
| ファイルシステムは正常にフォーマットされました。 | |
|
呼び出し側がシステム、ブート、クラッシュダンプ、ハイバネーション、または ページファイルのボリュームをフォーマットしようとした場合、操作は拒否されます。 |
|
ボリュームが失敗しました。 |
|
ボリュームを含むパックにアクセスできません。オフラインのパック内のすべてのボリュームにはアクセスできません。 |
さらに、IVdsAsync インターフェイスは、 次の関連する警告およびエラーコードを返すことがあります。
| リターンコード/値 | 説明 |
|---|---|
|
ファイルシステムはフォーマットされましたが、圧縮されていません。 |
|
ファイルシステムに互換性がありません。 |
|
メディアに互換性がありません。 |
|
アクセスが拒否されました。 |
|
メディアは書き込み保護されています。 |
|
ラベルが無効です。 |
|
ボリュームはクイックフォーマットできません。 |
|
フォーマット中に IO エラーが発生しました。 |
|
ボリュームサイズが小さすぎてフォーマットできません。 |
|
ボリュームサイズが大きすぎてフォーマットできません。 |
|
クラスターサイズが小さすぎてフォーマットできません。 |
|
クラスターサイズが大きすぎてフォーマットできません。 |
|
クラスター数が多すぎて 32 ビット整数として表現できません。 |
|
type パラメーターの値が VDS_FST_NTFS、VDS_FST_FAT、VDS_FST_FAT32、VDS_FST_UDF のいずれでもありませんでした。 |
|
ボリュームの 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 を参照してください。
アクセスパスを追加します。
| pwszPath | LPWSTR | in | アクセスパスを示す文字列で、これはボリュームを開くために使用できるユーザーモードのパスです。アクセスパスには、ドライブ文字または NTFS ボリューム上の空のディレクトリへのパスを指定できます。アクセスパスの文字列には、末尾に バックスラッシュを含める必要があります(例: "F:")。 |
戻り値
このメソッドは、E_INVALIDARG や E_OUTOFMEMORY などの標準的な HRESULT 値、および VDS 固有の戻り値 を返すことがあります。また、HRESULT_FROM_WIN32 マクロを使用して変換された システムエラーコード を返すこともあります。エラーは VDS 自体、または使用されている基盤の VDS プロバイダー から発生する可能性があります。戻り値には次のものが含まれます。
| リターンコード/値 | 説明 |
|---|---|
| パスは正常に追加されました。 | |
| アクセスパスは正常に追加されましたが、エラーが発生しました。VDS は、ドライブ文字の追加時に、パーティションの GPT_BASIC_DATA_ATTRIBUTE_NO_DRIVE_LETTER 属性の更新に失敗したか、既定のネットワーク共有(F$ など)の 追加に失敗した可能性があります。詳細については、PARTITION_INFORMATION_GPT を参照してください。 | |
|
ボリュームが失敗しました。 |
|
ボリュームを含むパックにアクセスできません。 |
解説(Remarks)
VDS は、マウントされたフォルダー(ボリュームマウントポイントとも呼ばれます)を作成することでアクセスパスを追加します。マウントされたフォルダーは NTFS ボリュームでのみサポートされることに注意してください。詳細については、Mounted Folders を参照してください。
pwszPath パラメーターに、既に使用中のマウントされたフォルダーへのパス(ディレクトリが空であっても)が含まれている場合、または pwszPath に空でないディレクトリへのパスが含まれている場合、このメソッドは ERROR_DIR_NOT_EMPTY を返します。
現在のボリュームのアクセスパスの一覧と、存在する場合はドライブ文字を返します。
| pwszPathArray | LPWSTR** | out | CoTaskMemFree |
| plNumberOfAccessPaths | INT* | out | ボリューム上のアクセスパスの数へのポインターです。 |
戻り値
このメソッドは、E_INVALIDARG や E_OUTOFMEMORY などの標準的な HRESULT 値、および VDS 固有の戻り値 を返すことがあります。また、HRESULT_FROM_WIN32 マクロを使用して変換された システムエラーコード を返すこともあります。エラーは VDS 自体、または使用されている基盤の VDS プロバイダー から発生する可能性があります。戻り値には次のものが含まれます。
| リターンコード/値 | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
|
ボリュームが失敗しました。 |
|
ボリュームを含むパックにアクセスできません。 |
解説(Remarks)
ドライブ文字は、pwszPathArray の最初のアクセスパスとして現れます。
現在のボリュームのすべての再解析ポイントを返します。
| ppReparsePointProps | VDS_REPARSE_POINT_PROP** | out | VDS_REPARSE_POINT_PROP 構造体で定義されたプロパティの配列へのポインターを受け取るバッファーへのポインターです。 |
| plNumberOfReparsePointProps | INT* | out | 再解析ポイントプロパティの数を格納するバッファーへのポインターです。 |
戻り値
このメソッドは、E_INVALIDARG や E_OUTOFMEMORY などの標準的な HRESULT 値、および VDS 固有の戻り値 を返すことがあります。また、HRESULT_FROM_WIN32 マクロを使用して変換された システムエラーコード を返すこともあります。エラーは VDS 自体、または使用されている基盤の VDS プロバイダー から発生する可能性があります。戻り値には次のものが含まれます。
| リターンコード/値 | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
|
ボリュームが失敗しました。 |
|
ボリュームを含むパックにアクセスできません。 |
解説(Remarks)
再解析ポイントは、ソースボリュームの識別子とボリュームパスから成るタプルで表されます。このメソッドは、冗長なアクセスパスを返しません。
現在のボリュームからアクセスパスを削除します。
| pwszPath | LPWSTR | in | 削除するアクセスパスを含む文字列です。アクセスパスには、ドライブ文字または NTFS ボリューム上の空のディレクトリへのパスを指定できます。ドライブ文字の場合は、末尾にバックスラッシュを含める必要があります(例: "F:")。ディレクトリへのパスの場合は、末尾のバックスラッシュは不要です(例: "C:\MyFolder\MyDocuments")。 |
| bForce | BOOL | in | TRUE の場合、ボリュームが使用中であっても、アクセスパスは無条件に 削除されます。このパラメーターは、アクセスパスがドライブ文字である場合にのみ意味を持ちます。 |
戻り値
このメソッドは、E_INVALIDARG や E_OUTOFMEMORY などの標準的な HRESULT 値、および VDS 固有の戻り値 を返すことがあります。また、HRESULT_FROM_WIN32 マクロを使用して変換された システムエラーコード を返すこともあります。エラーは VDS 自体、または使用されている基盤の VDS プロバイダー から発生する可能性があります。戻り値には次のものが含まれます。
| リターンコード/値 | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
|
パスがシステムボリューム、ブートボリューム、クラッシュダンプボリューム、ハイバネーションボリューム、または ページファイルボリュームを指しています。これらのボリュームからはドライブ文字を削除できません。 |
|
指定されたパスが見つかりません。 |
|
アクセスパスは正常に削除されましたが、エラーが発生しました。VDS は、ドライブ文字の削除時に、パーティションの GUID パーティションテーブル (GPT) 属性の更新に失敗したか、既定のネットワーク共有(F$ など)の 削除に失敗した可能性があります。 |
|
ボリュームが失敗しました。 |
|
ボリュームを含むパックにアクセスできません。 |
解説(Remarks)
ボリュームに対して開いているハンドルがない場合、ドライブ文字はただちに削除されます。ただし、ボリュームに対して開いているハンドルがある場合、ボリュームをロックできないため、ドライブ文字はコンピューターの再起動時に削除されます。
ボリュームをマウントします。
戻り値
このメソッドは、E_OUTOFMEMORY などの標準的な HRESULT 値、および VDS 固有の戻り値 を返すことがあります。また、HRESULT_FROM_WIN32 マクロを使用して変換された システムエラーコード を返すこともあります。エラーは VDS 自体、または使用されている基盤の VDS プロバイダー から発生する可能性があります。戻り値には次のものが含まれます。
| リターンコード/値 | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
|
ボリュームオブジェクトにアクセスできません。 |
|
ボリュームを含むパックにアクセスできません。 |
マウントされたボリュームをマウント解除します。
| bForce | BOOL | in | TRUE の場合、使用中であってもボリュームはマウント解除されます。それ以外の場合、ボリュームが使用中であれば操作は失敗します。 |
| bPermanent | BOOL | in | TRUE の場合、ボリュームはアクセスパスが追加されるまでマウント解除されたままになります。 |
戻り値
このメソッドは、E_INVALIDARG や E_OUTOFMEMORY などの標準的な HRESULT 値、および VDS 固有の戻り値 を返すことがあります。また、HRESULT_FROM_WIN32 マクロを使用して変換された システムエラーコード を返すこともあります。エラーは VDS 自体、または使用されている基盤の VDS プロバイダー から発生する可能性があります。戻り値には次のものが含まれます。
| リターンコード/値 | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
|
ボリュームは既にマウント解除されています。 |
|
ボリュームをマウント解除できません。この操作をサポートしていません。 |
|
ボリュームは既にマウント解除されています。マウント可能になるまで、一時的にマウント解除することはできません。 |
|
ボリュームにはまだアクセスパスがあるため、マウント解除できません。 |
|
ボリュームは使用中のため、マウント解除できません。 |
解説(Remarks)
ボリュームをマウントするには、Mount メソッドを使用します。
ファイルシステムフラグを設定します。
| ulFlags | DWORD | in | VDS_FILE_SYSTEM_FLAG によって列挙されるフラグです。呼び出し側は VDS_FPF_COMPRESSED フラグを設定できます。 |
戻り値
このメソッドは、E_INVALIDARG や E_OUTOFMEMORY などの標準的な HRESULT 値、および VDS 固有の戻り値 を返すことがあります。また、HRESULT_FROM_WIN32 マクロを使用して変換された システムエラーコード を返すこともあります。エラーは VDS 自体、または使用されている基盤の VDS プロバイダー から発生する可能性があります。戻り値には次のものが含まれます。
| リターンコード/値 | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
|
ボリュームは非表示です。このメソッドは非表示のボリュームに対して呼び出すことはできません。 |
|
ボリュームが失敗しました。 |
|
ボリュームを含むパックにアクセスできません。 |
ファイルシステムフラグをクリアします。
| ulFlags | DWORD | in | VDS_FILE_SYSTEM_FLAG によって列挙されるフラグです。呼び出し側は VDS_FPF_COMPRESSED フラグをクリアできます。 |
戻り値
このメソッドは、E_INVALIDARG や E_OUTOFMEMORY などの標準的な HRESULT 値、および VDS 固有の戻り値 を返すことがあります。また、HRESULT_FROM_WIN32 マクロを使用して変換された システムエラーコード を返すこともあります。エラーは VDS 自体、または使用されている基盤の VDS プロバイダー から発生する可能性があります。戻り値には次のものが含まれます。
| リターンコード/値 | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
|
ボリュームは非表示です。このメソッドは非表示のボリュームに対して呼び出すことはできません。 |
|
ボリュームが失敗しました。 |
|
ボリュームを含むパックにアクセスできません。 |
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 指定が可能。#define global IID_IVdsVolumeMF "{EE2D5DED-6236-4169-931D-B9778CE03DC6}" #usecom global IVdsVolumeMF IID_IVdsVolumeMF "{}" #comfunc global IVdsVolumeMF_GetFileSystemProperties 3 sptr #comfunc global IVdsVolumeMF_Format 4 int,wstr,int,int,int,int,sptr #comfunc global IVdsVolumeMF_AddAccessPath 5 wstr #comfunc global IVdsVolumeMF_QueryAccessPaths 6 sptr,sptr #comfunc global IVdsVolumeMF_QueryReparsePoints 7 sptr,sptr #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が無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。