IVdsAdvancedDisk
COM公式ドキュメント
パーティションの作成と削除、およびパーティション属性の変更を行います。
解説(Remarks)
パーティションとボリュームの関係は複雑であり、ディスクを管理するソフトウェアプロバイダー(ベーシックまたはダイナミック)の観点から説明するのが最も分かりやすいです。ベーシックプロバイダーは、次の3種類のパーティションをサポートします。
- ボリュームではないパーティション。フォーマットすることもドライブ文字を割り当てることもできないためです。これらのパーティションは、MSR パーティション、LDM メタデータパーティション、および拡張パーティションです。
- 隠しボリュームに関連付けられたパーティション。フォーマットしてドライブ文字を割り当てることはできますが、ユーザーデータは保持しません。代わりに、システムはこれらのパーティションをブートやリカバリーなどに使用します。これらのパーティションには、OEM パーティション、GPT ディスク上の ESP パーティション、および不明なパーティションが含まれます。これらのパーティションをフォーマットするために IVdsVolume や IVdsVolumeMF インターフェースを使用することはできません。代わりに、AssignDriveLetter、DeleteDriveLetter、FormatPartition の各メソッドを公開する IVdsAdvancedDisk インターフェースを使用します。
- 前述の2つのカテゴリに該当しないパーティションは、ユーザーデータ、ファイル、およびユーザー用にインストールされたオペレーティングシステムを保持します。これらのパーティションは常にボリュームです。フォーマットしたり、ドライブ文字を割り当てたり、FindFirstVolume および FindNextVolume 関数で列挙したりできます。
メソッド 10
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
パーティションオフセットで識別されるパーティションのプロパティを返します。
| ullOffset | ULONGLONG | in | パーティションオフセット。 |
| pPartitionProp | VDS_PARTITION_PROP* | out | 呼び出し側が割り当てて渡す VDS_PARTITION_PROP 構造体のアドレス。 |
戻り値
このメソッドは、E_INVALIDARG や E_OUTOFMEMORY などの標準的な HRESULT 値、および VDS 固有の戻り値 を返すことがあります。また、HRESULT_FROM_WIN32 マクロを使用して変換された システムエラーコード を返すこともあります。エラーは、VDS 自体、または使用されている基盤の VDS プロバイダー から発生することがあります。返される可能性のある値には、次のものが含まれます。
| 戻りコード/値 | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
|
パーティションが存在しません。 |
解説(Remarks)
このメソッドは、すべてのパーティションタイプの情報を返します。
現在のディスク上のすべてのパーティションの詳細を返します。
| ppPartitionPropArray | VDS_PARTITION_PROP** | out | 呼び出し側が渡す VDS_PARTITION_PROP 構造体の配列へのポインター。呼び出し側は、CoTaskMemFree 関数を使用してこの配列を解放する必要があります。 |
| plNumberOfPartitions | INT* | out | ppPartitionPropArray パラメーターで返される配列の要素数へのポインター。 |
戻り値
このメソッドは、E_INVALIDARG や E_OUTOFMEMORY などの標準的な HRESULT 値、および VDS 固有の戻り値 を返すことがあります。また、HRESULT_FROM_WIN32 マクロを使用して変換された システムエラーコード を返すこともあります。エラーは、VDS 自体、または使用されている基盤の VDS プロバイダー から発生することがあります。返される可能性のある値には、次のものが含まれます。
| 戻りコード | 説明 |
|---|---|
| クエリは成功しました。 | |
| ディスクにパーティションが含まれていません。 |
解説(Remarks)
ディスクに拡張パーティションが含まれている場合、このメソッドは、ディスク上に拡張パーティションがいくつあるかにかかわらず、最初の拡張パーティションのみを返します。 ディスクには、論理ドライブごとに1つの拡張パーティションが含まれます。論理ドライブの詳細については、Disk Object を参照してください。
ベーシックディスク上にパーティションを作成します。IVdsCreatePartitionEx::CreatePartitionEx メソッドがこのメソッドに代わるものです。
| ullOffset | ULONGLONG | in | パーティションオフセット。 |
| ullSize | ULONGLONG | in | 新しいパーティションのサイズ(バイト単位)。 |
| para | CREATE_PARTITION_PARAMETERS* | in | CREATE_PARTITION_PARAMETERS 構造体で定義されるパラメーターへのポインター。 |
| ppAsync | IVdsAsync** | out | IVdsAsync インターフェースポインターのアドレス。VDS は戻り時にこれを初期化します。呼び出し側はインターフェースを解放する必要があります。このポインターを使用して、操作のキャンセル、完了待機、または状態の照会を行います。 |
戻り値
このメソッドは、E_INVALIDARG や E_OUTOFMEMORY などの標準的な HRESULT 値、および VDS 固有の戻り値 を返すことがあります。また、HRESULT_FROM_WIN32 マクロを使用して変換された システムエラーコード を返すこともあります。エラーは、VDS 自体、または使用されている基盤の VDS プロバイダー から発生することがあります。返される可能性のある値には、次のものが含まれます。
| 戻りコード/値 | 説明 |
|---|---|
| パーティションは正常に作成されました。 | |
|
リムーバブルドライブにメディアがありません。 |
|
メディアがこの操作をサポートしていません。たとえば、呼び出し側は CD-ROM 上にパーティションを作成できません。 |
|
リムーバブルメディア上に2番目のパーティションを作成することはサポートされていません。あるいは、このエラーは、ディスクがダイナミックディスクであることを示します。 |
|
呼び出し側が追加のプライマリパーティションまたは拡張パーティションを作成しようとしたときに、パーティションの最大数(プライマリ4つ、またはプライマリ3つと拡張1つ)が既に存在しています。 |
|
パーティションは正常に作成されましたが、VDS はブート構成データ(BCD)ストア内のブートオプションの更新に失敗しました。
Windows Server 2003: ブートオプションは、x86 または x64 システムでは boot.ini ファイルに、Itanium システムでは NVRAM に格納されます。 |
ベーシックディスクからパーティションを削除します。
| ullOffset | ULONGLONG | in | パーティションオフセット。 |
| bForce | BOOL | in | このパラメーターが TRUE に設定されている場合、VDS はすべてのパーティション(OEM、ESP、MSR を除く)を無条件に削除します。FALSE に設定されている場合、パーティションが使用中であれば操作は失敗します。ボリュームのロックまたはマウント解除の呼び出しが失敗した場合、パーティションは使用中とみなされます。 |
| bForceProtected | BOOL | in | このパラメーターが TRUE に設定されている場合、VDS はすべての保護されたパーティション(OEM、ESP、MSR を含む)を無条件に削除します。FALSE に設定されている場合、パーティションが保護されていれば操作は失敗します。 |
戻り値
このメソッドは、E_INVALIDARG や E_OUTOFMEMORY などの標準的な HRESULT 値、および VDS 固有の戻り値 を返すことがあります。また、HRESULT_FROM_WIN32 マクロを使用して変換された システムエラーコード を返すこともあります。エラーは、VDS 自体、または使用されている基盤の VDS プロバイダー から発生することがあります。返される可能性のある値には、次のものが含まれます。
| 戻りコード/値 | 説明 |
|---|---|
| パーティションは正常に削除されました。 | |
|
メディアがこの操作をサポートしていません。たとえば、CD-ROM 上のパーティションは削除できません。 |
|
この操作はダイナミックディスクではサポートされていません。 |
|
拡張パーティションが空ではありません。 |
|
この値はプロバイダーエラーを示します。操作は中止されます。 |
|
パーティションが使用中です。 |
|
パーティションは正常に削除されましたが、VDS はアクセスパスの削除に失敗しました。 |
|
パーティションは正常に削除されましたが、VDS はブート構成データ(BCD)ストア内のブートオプションの更新に失敗しました。
Windows Server 2003: ブートオプションは、x86 または x64 システムでは boot.ini ファイルに、Itanium システムでは NVRAM に格納されます。 |
パーティションの属性を変更します。
| ullOffset | ULONGLONG | in | パーティションオフセット。 |
| para | CHANGE_ATTRIBUTES_PARAMETERS* | in | CHANGE_ATTRIBUTES_PARAMETERS 構造体で定義される属性パラメーター。 |
戻り値
このメソッドは、E_INVALIDARG や E_OUTOFMEMORY などの標準的な HRESULT 値、および VDS 固有の戻り値 を返すことがあります。また、HRESULT_FROM_WIN32 マクロを使用して変換された システムエラーコード を返すこともあります。エラーは、VDS 自体、または使用されている基盤の VDS プロバイダー から発生することがあります。返される可能性のある値には、次のものが含まれます。
| 戻りコード/値 | 説明 |
|---|---|
| パラメーターは正常に変更されました。 | |
|
この操作はダイナミックディスクではサポートされていないか、またはディスクがリムーバブルです。 |
|
パーティションが拡張パーティションです。拡張パーティションには変更できる属性がありません。 |
|
パーティションが存在しません。 |
解説(Remarks)
GPT ディスクの場合、このメソッドは hidden(隠し)、read only(読み取り専用)、および no drive letter(ドライブ文字なし)の属性を変更します。MBR ディスクの場合、このメソッドはブートインジケータービットがアクティブかどうかを制御します。
既存の OEM、ESP、または不明なパーティションにドライブ文字を割り当てます。
| ullOffset | ULONGLONG | in | パーティションオフセット。 |
| wcLetter | WCHAR | in | 割り当てるドライブ文字。 |
戻り値
このメソッドは、E_INVALIDARG や E_OUTOFMEMORY などの標準的な HRESULT 値、および VDS 固有の戻り値 を返すことがあります。また、HRESULT_FROM_WIN32 マクロを使用して変換された システムエラーコード を返すこともあります。エラーは、VDS 自体、または使用されている基盤の VDS プロバイダー から発生することがあります。返される可能性のある値には、次のものが含まれます。
| 戻りコード/値 | 説明 |
|---|---|
| ドライブ文字は正常に割り当てられました。 | |
|
指定されたドライブ文字は、既に別のパーティションまたはボリュームに割り当てられています。 |
|
パーティションがリムーバブルメディア上にあります。あるいは、パーティションが OEM、ESP、または不明なパーティションではありません。 |
|
パーティションが存在しません。 |
解説(Remarks)
VDS がこのメソッドを実装します。
OEM、ESP、または不明なパーティションに割り当てられたドライブ文字を削除します。
| ullOffset | ULONGLONG | in | パーティションオフセット。 |
| wcLetter | WCHAR | in | 削除するドライブ文字。 |
戻り値
このメソッドは、E_INVALIDARG や E_OUTOFMEMORY などの標準的な HRESULT 値、および VDS 固有の戻り値 を返すことがあります。また、HRESULT_FROM_WIN32 マクロを使用して変換された システムエラーコード を返すこともあります。エラーは、VDS 自体、または使用されている基盤の VDS プロバイダー から発生することがあります。返される可能性のある値には、次のものが含まれます。
| 戻りコード/値 | 説明 |
|---|---|
| ドライブ文字は正常に削除されました。 | |
|
パーティションがリムーバブルメディア上にあります。あるいは、パーティションが OEM、ESP、または不明なパーティションではありません。 |
|
パーティションが存在しません。 |
解説(Remarks)
VDS がこのメソッドを実装します。
OEM、ESP、または不明なパーティションに割り当てられたドライブ文字を返します。
| ullOffset | ULONGLONG | in | パーティションオフセット。 |
| pwcLetter | LPWSTR | out | ドライブ文字を受け取るバッファーへのポインター。 |
戻り値
このメソッドは、E_INVALIDARG や E_OUTOFMEMORY などの標準的な HRESULT 値、および VDS 固有の戻り値 を返すことがあります。また、HRESULT_FROM_WIN32 マクロを使用して変換された システムエラーコード を返すこともあります。エラーは、VDS 自体、または使用されている基盤の VDS プロバイダー から発生することがあります。返される可能性のある値には、次のものが含まれます。
| 戻りコード/値 | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
|
パーティションがリムーバブルメディア上にあります。あるいは、パーティションが OEM、ESP、または不明なパーティションではありません。 |
|
パーティションが存在しません。 |
解説(Remarks)
VDS がこのメソッドを実装します。
既存の OEM、ESP、または不明なパーティションをフォーマットします。(IVdsAdvancedDisk.FormatPartition)
| ullOffset | ULONGLONG | in | パーティションオフセット。 |
| 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 プロバイダー から発生することがあります。返される可能性のある値には、次のものが含まれます。
| 戻りコード/値 | 説明 |
|---|---|
| パーティションは正常にフォーマットされました。 | |
|
ディスクがリムーバブルであるか、またはパーティションが OEM、ESP、不明のいずれのタイプでもありません。 |
|
パーティションが存在しません。 |
解説(Remarks)
VDS がこのメソッドを実装します。
このメソッドは、OEM、ESP、および不明なパーティションのみをフォーマットします。その他のパーティションについては、代わりに IVdsVolumeMF::Format または IVdsVolumeMF2::FormatEx メソッドを使用して、対応するボリュームをフォーマットする必要があります。OEM、ESP、および不明なパーティションはボリュームとして公開されないため、Format や FormatEx ではフォーマットできないことに注意してください。
このメソッドは、リムーバブルメディアのフォーマットには使用できません。
最小および最大のアロケーションユニットサイズ(クラスターサイズとも呼ばれます)などのファイルシステムの制限については、NTFS Technical Reference および FAT Technical Reference を参照してください。
OEM パーティションが FAT または FAT32 としてフォーマットされた場合、パーティションタイプは変更されません。NTFS でフォーマットされた場合、パーティションタイプは PARTITION_IFS (0x07) に変更されます。パーティションタイプの詳細については、CREATE_PARTITION_PARAMETERS を参照してください。
パーティション情報を削除し、ベーシックディスクまたはダイナミックディスクを未初期化状態にします。Windows Server 2003: Clean メソッドはリムーバブルデバイスではサポートされていません。
| bForce | BOOL | in | TRUE の場合、データボリュームまたは ESP パーティションを含むディスクをクリーンします。 | ||||||||||||
| bForceOEM | BOOL | in | TRUE の場合、次の表に示す既知の OEM パーティションを含む MBR ベースのディスクをクリーンするか、または任意の OEM パーティションを含む GPT ベースのディスクをクリーンします。GPT ベースのディスクでは、OEM パーティションには GPT_ATTRIBUTE_PLATFORM_REQUIRED フラグが設定されています。
| ||||||||||||
| bFullClean | BOOL | in | TRUE の場合、各セクターのデータをゼロで置き換えることによってディスク全体をクリーンします。そうでない場合、このメソッドはディスクの最初と最後の 1 メガバイトのみをクリーンします。 | ||||||||||||
| ppAsync | IVdsAsync** | out | IVdsAsync インターフェースポインターへのポインターのアドレス。VDS は戻り時にこれを初期化します。呼び出し側はインターフェースを解放する必要があります。このポインターを使用して、操作のキャンセル、完了待機、または状態の照会を行います。 |
戻り値
このメソッドは、E_INVALIDARG や E_OUTOFMEMORY などの標準的な HRESULT 値、および VDS 固有の戻り値 を返すことがあります。また、HRESULT_FROM_WIN32 マクロを使用して変換された システムエラーコード を返すこともあります。エラーは、VDS 自体、または使用されている基盤の VDS プロバイダー から発生することがあります。返される可能性のある値には、次のものが含まれます。
| 戻りコード/値 | 説明 |
|---|---|
| データは正常に削除され、ディスクは未初期化状態になりました。 | |
|
リムーバブルデバイスにメディアがありません。 |
|
ディスクが見つかりません。 |
|
次のいずれかの条件で操作が失敗しました:
|
|
パーティションテーブルはクリーンされましたが、フルクリーン中にすべてのセクターがクリーンされたわけではありません。あるいは、最初の 1 メガバイトと最後の 1 メガバイトの一部のセクターがクリーンされます。ただし、フルクリーンでない限り、残りのセクターはクリーンされません。 |
解説(Remarks)
このメソッドを呼び出す前に、呼び出し側は、ディスク上のマウントされているすべてのボリュームについて、ボリュームごとに IVdsVolumeMF::Dismount を呼び出してマウント解除する必要があります。
ディスク上のすべてのデータボリューム、既知の OEM パーティション、および ESP パーティションを最初に削除しない限り、このメソッドでは bForce パラメーター、bForceOEM パラメーター、またはその両方を使用してください。 この要件は、MSR、LDM メタデータパーティション、および不明な OEM パーティションなどのメタデータパーティションには適用されません。
Windows Server 2003: Clean メソッドはリムーバブルデバイスではサポートされていません。
実装者は、呼び出しが非同期操作を開始するかどうかにかかわらず、このメソッドについて IVdsAsync インターフェースへのポインターを返す必要があります。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IVdsAdvancedDisk "{6E6F6B40-977C-4069-BDDD-AC710059F8C0}" #usecom global IVdsAdvancedDisk IID_IVdsAdvancedDisk "{}" #comfunc global IVdsAdvancedDisk_GetPartitionProperties 3 int64,var #comfunc global IVdsAdvancedDisk_QueryPartitions 4 var,var #comfunc global IVdsAdvancedDisk_CreatePartition 5 int64,int64,var,sptr #comfunc global IVdsAdvancedDisk_DeletePartition 6 int64,int,int #comfunc global IVdsAdvancedDisk_ChangeAttributes 7 int64,var #comfunc global IVdsAdvancedDisk_AssignDriveLetter 8 int64,int #comfunc global IVdsAdvancedDisk_DeleteDriveLetter 9 int64,int #comfunc global IVdsAdvancedDisk_GetDriveLetter 10 int64,var #comfunc global IVdsAdvancedDisk_FormatPartition 11 int64,int,wstr,int,int,int,int,sptr #comfunc global IVdsAdvancedDisk_Clean 12 int,int,int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IVdsAdvancedDisk "{6E6F6B40-977C-4069-BDDD-AC710059F8C0}" #usecom global IVdsAdvancedDisk IID_IVdsAdvancedDisk "{}" #comfunc global IVdsAdvancedDisk_GetPartitionProperties 3 int64,sptr #comfunc global IVdsAdvancedDisk_QueryPartitions 4 sptr,sptr #comfunc global IVdsAdvancedDisk_CreatePartition 5 int64,int64,sptr,sptr #comfunc global IVdsAdvancedDisk_DeletePartition 6 int64,int,int #comfunc global IVdsAdvancedDisk_ChangeAttributes 7 int64,sptr #comfunc global IVdsAdvancedDisk_AssignDriveLetter 8 int64,int #comfunc global IVdsAdvancedDisk_DeleteDriveLetter 9 int64,int #comfunc global IVdsAdvancedDisk_GetDriveLetter 10 int64,sptr #comfunc global IVdsAdvancedDisk_FormatPartition 11 int64,int,wstr,int,int,int,int,sptr #comfunc global IVdsAdvancedDisk_Clean 12 int,int,int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。