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

IVdsAdvancedDisk

COM
IID6e6f6b40-977c-4069-bddd-ac710059f8c0継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

パーティションの作成と削除、およびパーティション属性の変更を行います。

解説(Remarks)

パーティションとボリュームの関係は複雑であり、ディスクを管理するソフトウェアプロバイダー(ベーシックまたはダイナミック)の観点から説明するのが最も分かりやすいです。ベーシックプロバイダーは、次の3種類のパーティションをサポートします。

一般に、ダイナミックプロバイダーはボリュームをパーティションにマップしません。例外は、システムボリューム、ブートボリューム、および呼び出し側がこのマッピングを明示的に要求したボリュームです。 ダイナミックディスクに対して実行できる有効な操作は、GetPartitionPropertiesQueryPartitionsClean の各メソッドのみです。その他のすべてのメソッドは失敗します。Clean メソッドを除き、構成タイプの操作はダイナミックディスクでは無効です。

メソッド 10

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

vtbl 3 HRESULT GetPartitionProperties(ULONGLONG ullOffset, VDS_PARTITION_PROP* pPartitionProp)

パーティションオフセットで識別されるパーティションのプロパティを返します。

ullOffsetULONGLONGinパーティションオフセット。
pPartitionPropVDS_PARTITION_PROP*out呼び出し側が割り当てて渡す VDS_PARTITION_PROP 構造体のアドレス。

戻り値

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

戻りコード/値 説明
S_OK
メソッドは正常に完了しました。
VDS_E_OBJECT_NOT_FOUND
0x80042405L
パーティションが存在しません。

解説(Remarks)

このメソッドは、すべてのパーティションタイプの情報を返します。

vtbl 4 HRESULT QueryPartitions(VDS_PARTITION_PROP** ppPartitionPropArray, INT* plNumberOfPartitions)

現在のディスク上のすべてのパーティションの詳細を返します。

ppPartitionPropArrayVDS_PARTITION_PROP**out呼び出し側が渡す VDS_PARTITION_PROP 構造体の配列へのポインター。呼び出し側は、CoTaskMemFree 関数を使用してこの配列を解放する必要があります。
plNumberOfPartitionsINT*outppPartitionPropArray パラメーターで返される配列の要素数へのポインター。

戻り値

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

戻りコード 説明
S_OK
クエリは成功しました。
S_FALSE
ディスクにパーティションが含まれていません。

解説(Remarks)

ディスクに拡張パーティションが含まれている場合、このメソッドは、ディスク上に拡張パーティションがいくつあるかにかかわらず、最初の拡張パーティションのみを返します。 ディスクには、論理ドライブごとに1つの拡張パーティションが含まれます。論理ドライブの詳細については、Disk Object を参照してください。

vtbl 5 HRESULT CreatePartition(ULONGLONG ullOffset, ULONGLONG ullSize, CREATE_PARTITION_PARAMETERS* para, IVdsAsync** ppAsync)

ベーシックディスク上にパーティションを作成します。IVdsCreatePartitionEx::CreatePartitionEx メソッドがこのメソッドに代わるものです。

ullOffsetULONGLONGinパーティションオフセット。
ullSizeULONGLONGin新しいパーティションのサイズ(バイト単位)。
paraCREATE_PARTITION_PARAMETERS*inCREATE_PARTITION_PARAMETERS 構造体で定義されるパラメーターへのポインター。
ppAsyncIVdsAsync**outIVdsAsync インターフェースポインターのアドレス。VDS は戻り時にこれを初期化します。呼び出し側はインターフェースを解放する必要があります。このポインターを使用して、操作のキャンセル、完了待機、または状態の照会を行います。

戻り値

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

戻りコード/値 説明
S_OK
パーティションは正常に作成されました。
VDS_E_NO_MEDIA
0x80042412L
リムーバブルドライブにメディアがありません。
VDS_E_INVALID_OPERATION
0x80042415L
メディアがこの操作をサポートしていません。たとえば、呼び出し側は CD-ROM 上にパーティションを作成できません。
VDS_E_NOT_SUPPORTED
0x80042400L
リムーバブルメディア上に2番目のパーティションを作成することはサポートされていません。あるいは、このエラーは、ディスクがダイナミックディスクであることを示します。
VDS_E_PARTITION_LIMIT_REACHED
0x80042407L
呼び出し側が追加のプライマリパーティションまたは拡張パーティションを作成しようとしたときに、パーティションの最大数(プライマリ4つ、またはプライマリ3つと拡張1つ)が既に存在しています。
VDS_S_UPDATE_BOOTFILE_FAILED
0x00042434L
パーティションは正常に作成されましたが、VDS はブート構成データ(BCD)ストア内のブートオプションの更新に失敗しました。

Windows Server 2003: ブートオプションは、x86 または x64 システムでは boot.ini ファイルに、Itanium システムでは NVRAM に格納されます。

vtbl 6 HRESULT DeletePartition(ULONGLONG ullOffset, BOOL bForce, BOOL bForceProtected)

ベーシックディスクからパーティションを削除します。

ullOffsetULONGLONGinパーティションオフセット。
bForceBOOLinこのパラメーターが TRUE に設定されている場合、VDS はすべてのパーティション(OEM、ESP、MSR を除く)を無条件に削除します。FALSE に設定されている場合、パーティションが使用中であれば操作は失敗します。ボリュームのロックまたはマウント解除の呼び出しが失敗した場合、パーティションは使用中とみなされます。
bForceProtectedBOOLinこのパラメーターが TRUE に設定されている場合、VDS はすべての保護されたパーティション(OEM、ESP、MSR を含む)を無条件に削除します。FALSE に設定されている場合、パーティションが保護されていれば操作は失敗します。

戻り値

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

戻りコード/値 説明
S_OK
パーティションは正常に削除されました。
VDS_E_INVALID_OPERATION
0x80042415L
メディアがこの操作をサポートしていません。たとえば、CD-ROM 上のパーティションは削除できません。
VDS_E_NOT_SUPPORTED
0x80042400L
この操作はダイナミックディスクではサポートされていません。
VDS_E_PARTITION_NOT_EMPTY
0x80042408L
拡張パーティションが空ではありません。
VDS_E_BAD_PROVIDER_DATA
0x80042441L
この値はプロバイダーエラーを示します。操作は中止されます。
VDS_E_DEVICE_IN_USE
0x80042413L
パーティションが使用中です。
VDS_S_ACCESS_PATH_NOT_DELETED
0x00044244L
パーティションは正常に削除されましたが、VDS はアクセスパスの削除に失敗しました。
VDS_S_UPDATE_BOOTFILE_FAILED
0x00042434L
パーティションは正常に削除されましたが、VDS はブート構成データ(BCD)ストア内のブートオプションの更新に失敗しました。

Windows Server 2003: ブートオプションは、x86 または x64 システムでは boot.ini ファイルに、Itanium システムでは NVRAM に格納されます。

vtbl 7 HRESULT ChangeAttributes(ULONGLONG ullOffset, CHANGE_ATTRIBUTES_PARAMETERS* para)

パーティションの属性を変更します。

ullOffsetULONGLONGinパーティションオフセット。
paraCHANGE_ATTRIBUTES_PARAMETERS*inCHANGE_ATTRIBUTES_PARAMETERS 構造体で定義される属性パラメーター。

戻り値

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

戻りコード/値 説明
S_OK
パラメーターは正常に変更されました。
VDS_E_NOT_SUPPORTED
0x80042400L
この操作はダイナミックディスクではサポートされていないか、またはディスクがリムーバブルです。
VDS_E_INVALID_OPERATION
0x80042415L
パーティションが拡張パーティションです。拡張パーティションには変更できる属性がありません。
VDS_E_OBJECT_NOT_FOUND
0x80042405L
パーティションが存在しません。

解説(Remarks)

GPT ディスクの場合、このメソッドは hidden(隠し)、read only(読み取り専用)、および no drive letter(ドライブ文字なし)の属性を変更します。MBR ディスクの場合、このメソッドはブートインジケータービットがアクティブかどうかを制御します。

vtbl 8 HRESULT AssignDriveLetter(ULONGLONG ullOffset, WCHAR wcLetter)

既存の OEM、ESP、または不明なパーティションにドライブ文字を割り当てます。

ullOffsetULONGLONGinパーティションオフセット。
wcLetterWCHARin割り当てるドライブ文字。

戻り値

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

戻りコード/値 説明
S_OK
ドライブ文字は正常に割り当てられました。
VDS_E_DRIVE_LETTER_NOT_FREE
0x8004255CL
指定されたドライブ文字は、既に別のパーティションまたはボリュームに割り当てられています。
VDS_E_INVALID_OPERATION
0x80042415L
パーティションがリムーバブルメディア上にあります。あるいは、パーティションが OEM、ESP、または不明なパーティションではありません。
VDS_E_OBJECT_NOT_FOUND
0x80042405L
パーティションが存在しません。

解説(Remarks)

VDS がこのメソッドを実装します。

vtbl 9 HRESULT DeleteDriveLetter(ULONGLONG ullOffset, WCHAR wcLetter)

OEM、ESP、または不明なパーティションに割り当てられたドライブ文字を削除します。

ullOffsetULONGLONGinパーティションオフセット。
wcLetterWCHARin削除するドライブ文字。

戻り値

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

戻りコード/値 説明
S_OK
ドライブ文字は正常に削除されました。
VDS_E_INVALID_OPERATION
0x80042415L
パーティションがリムーバブルメディア上にあります。あるいは、パーティションが OEM、ESP、または不明なパーティションではありません。
VDS_E_OBJECT_NOT_FOUND
0x80042405L
パーティションが存在しません。

解説(Remarks)

VDS がこのメソッドを実装します。

vtbl 10 HRESULT GetDriveLetter(ULONGLONG ullOffset, LPWSTR pwcLetter)

OEM、ESP、または不明なパーティションに割り当てられたドライブ文字を返します。

ullOffsetULONGLONGinパーティションオフセット。
pwcLetterLPWSTRoutドライブ文字を受け取るバッファーへのポインター。

戻り値

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

戻りコード/値 説明
S_OK
メソッドは正常に完了しました。
VDS_E_INVALID_OPERATION
0x80042415L
パーティションがリムーバブルメディア上にあります。あるいは、パーティションが OEM、ESP、または不明なパーティションではありません。
VDS_E_OBJECT_NOT_FOUND
0x80042405L
パーティションが存在しません。

解説(Remarks)

VDS がこのメソッドを実装します。

vtbl 11 HRESULT FormatPartition(ULONGLONG ullOffset, VDS_FILE_SYSTEM_TYPE type, LPWSTR pwszLabel, DWORD dwUnitAllocationSize, BOOL bForce, BOOL bQuickFormat, BOOL bEnableCompression, IVdsAsync** ppAsync)

既存の OEM、ESP、または不明なパーティションをフォーマットします。(IVdsAdvancedDisk.FormatPartition)

ullOffsetULONGLONGinパーティションオフセット。
typeVDS_FILE_SYSTEM_TYPEin使用するファイルシステムを指定する VDS_FILE_SYSTEM_TYPE 列挙値。次のいずれかである必要があります: VDS_FST_NTFSVDS_FST_FATVDS_FST_FAT32、または VDS_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_INVALID_OPERATION
0x80042415L
ディスクがリムーバブルであるか、またはパーティションが OEM、ESP、不明のいずれのタイプでもありません。
VDS_E_OBJECT_NOT_FOUND
0x80042405L
パーティションが存在しません。

解説(Remarks)

VDS がこのメソッドを実装します。

このメソッドは、OEM、ESP、および不明なパーティションのみをフォーマットします。その他のパーティションについては、代わりに IVdsVolumeMF::Format または IVdsVolumeMF2::FormatEx メソッドを使用して、対応するボリュームをフォーマットする必要があります。OEM、ESP、および不明なパーティションはボリュームとして公開されないため、FormatFormatEx ではフォーマットできないことに注意してください。

このメソッドは、リムーバブルメディアのフォーマットには使用できません。

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

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

vtbl 12 HRESULT Clean(BOOL bForce, BOOL bForceOEM, BOOL bFullClean, IVdsAsync** ppAsync)

パーティション情報を削除し、ベーシックディスクまたはダイナミックディスクを未初期化状態にします。Windows Server 2003: Clean メソッドはリムーバブルデバイスではサポートされていません。

bForceBOOLinTRUE の場合、データボリュームまたは ESP パーティションを含むディスクをクリーンします。
bForceOEMBOOLin

TRUE の場合、次の表に示す既知の OEM パーティションを含む MBR ベースのディスクをクリーンするか、または任意の OEM パーティションを含む GPT ベースのディスクをクリーンします。GPT ベースのディスクでは、OEM パーティションには GPT_ATTRIBUTE_PLATFORM_REQUIRED フラグが設定されています。

パーティションタイプ 説明
0x12 EISA パーティション。
0x84 ラップトップ用の休止状態パーティション。
0xA0 一部の HP ラップトップ用の診断パーティション。
0xDE Dell が定義したパーティション。
0xFE IBM IML パーティション。
bFullCleanBOOLinTRUE の場合、各セクターのデータをゼロで置き換えることによってディスク全体をクリーンします。そうでない場合、このメソッドはディスクの最初と最後の 1 メガバイトのみをクリーンします。
ppAsyncIVdsAsync**outIVdsAsync インターフェースポインターへのポインターのアドレス。VDS は戻り時にこれを初期化します。呼び出し側はインターフェースを解放する必要があります。このポインターを使用して、操作のキャンセル、完了待機、または状態の照会を行います。

戻り値

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

戻りコード/値 説明
S_OK
データは正常に削除され、ディスクは未初期化状態になりました。
VDS_E_NO_MEDIA
0x80042412L
リムーバブルデバイスにメディアがありません。
VDS_E_MISSING_DISK
0x80042454L
ディスクが見つかりません。
VDS_E_OPERATION_DENIED
0x8004240AL
次のいずれかの条件で操作が失敗しました:
  • ディスクに OEM パーティションが含まれており、bForceOEM が false です。
  • ディスクにボリュームまたは ESP パーティションが含まれており、bForceFALSE です。
  • bForceTRUE または FALSE のいずれであるかにかかわらず、ディスクにシステムボリュームのいずれかが含まれています。システムボリュームは、次のいずれかの項目です:
    • オペレーティングシステムローダーを含むボリューム。
    • system32 ディレクトリを含むブートボリューム。
    • ページファイルまたは休止状態ファイルを含むボリューム、あるいはクラッシュダンプとして使用されるボリューム。
    • ESP パーティション(システムがブートするパーティション)。
VDS_S_DISK_PARTIALLY_CLEANED
0x0004241AL
パーティションテーブルはクリーンされましたが、フルクリーン中にすべてのセクターがクリーンされたわけではありません。あるいは、最初の 1 メガバイトと最後の 1 メガバイトの一部のセクターがクリーンされます。ただし、フルクリーンでない限り、残りのセクターはクリーンされません。

解説(Remarks)

このメソッドを呼び出す前に、呼び出し側は、ディスク上のマウントされているすべてのボリュームについて、ボリュームごとに IVdsVolumeMF::Dismount を呼び出してマウント解除する必要があります。

ディスク上のすべてのデータボリューム、既知の OEM パーティション、および ESP パーティションを最初に削除しない限り、このメソッドでは bForce パラメーター、bForceOEM パラメーター、またはその両方を使用してください。 この要件は、MSR、LDM メタデータパーティション、および不明な OEM パーティションなどのメタデータパーティションには適用されません。

Windows Server 2003: Clean メソッドはリムーバブルデバイスではサポートされていません。

実装者は、呼び出しが非同期操作を開始するかどうかにかかわらず、このメソッドについて IVdsAsync インターフェースへのポインターを返す必要があります。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_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 指定が可能。