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

IVdsVdProvider

COM
IIDb481498c-8354-45f9-84a0-0bdd2832a91f継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

仮想ディスクを作成および管理するためのメソッドを定義します。

メソッド 5

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

vtbl 3 HRESULT QueryVDisks(IEnumVdsObject** ppEnum)

プロバイダーによって管理されているすべての仮想ディスクの一覧を返します。

ppEnumIEnumVdsObject**out仮想ディスクオブジェクトを列挙するために使用できる IEnumVdsObject インターフェイスポインターのアドレスです。詳細については、列挙オブジェクトの操作を参照してください。呼び出し元は、インターフェイスおよび各仮想ディスクオブジェクトが不要になったときに、IUnknown::Release メソッドを呼び出して解放する必要があります。 このパラメーターは必須であり、NULL にすることはできません。

戻り値

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

戻り値 説明
S_OK
メソッドは正常に完了しました。

解説(Remarks)

仮想ディスクプロバイダーがどの仮想ディスクも管理していない場合、このメソッドは空の列挙オブジェクトを返します。

vtbl 4 HRESULT CreateVDisk(VIRTUAL_STORAGE_TYPE* VirtualDeviceType, LPWSTR pPath, LPWSTR pStringSecurityDescriptor, CREATE_VIRTUAL_DISK_FLAG Flags, DWORD ProviderSpecificFlags, DWORD Reserved, VDS_CREATE_VDISK_PARAMETERS* pCreateDiskParameters, IVdsAsync** ppAsync)

仮想ディスクを作成します。

VirtualDeviceTypeVIRTUAL_STORAGE_TYPE*in作成する仮想ディスクの種類を指定する VIRTUAL_STORAGE_TYPE 構造体へのポインターです。
pPathLPWSTRin仮想ディスク用に作成されるバッキングファイルの名前とディレクトリパスを含む NULL 終端のワイド文字列です。
pStringSecurityDescriptorLPWSTRin仮想ディスクに適用されるセキュリティ記述子を含む NULL 終端のワイド文字列です。 このパラメーターが NULL の場合、呼び出し元のアクセストークン内のセキュリティ記述子が使用されます。
FlagsCREATE_VIRTUAL_DISK_FLAGin

仮想ディスクをどのように作成するかを指定する CREATE_VIRTUAL_DISK_FLAG 列挙値のビットマスクです。

意味
CREATE_VIRTUAL_DISK_FLAG_NONE
0x00000000
フラグは指定されていません。
CREATE_VIRTUAL_DISK_FLAG_FULL_PHYSICAL_ALLOCATION
0x00000001
仮想ディスクの仮想サイズに必要なすべての物理領域を事前に割り当てます。このフラグは固定サイズの仮想ディスクに対してのみ有効です。
ProviderSpecificFlagsDWORDin作成される仮想ディスクの種類に固有のフラグのビットマスクです。これらのフラグはプロバイダー固有です。Microsoft 仮想ディスクプロバイダーの場合、このパラメーターは 0 でなければなりません。
ReservedDWORDinこのパラメーターは予約されており、0 でなければなりません。
pCreateDiskParametersVDS_CREATE_VDISK_PARAMETERS*in仮想ディスクの作成パラメーターを含む VDS_CREATE_VDISK_PARAMETERS 構造体へのポインターです。
ppAsyncIVdsAsync**inoutIVdsAsync インターフェイスへのポインターであり、正常に完了すると、この操作を監視および制御するための IVdsAsync インターフェイスを受け取ります。呼び出し元は、受け取ったインターフェイスの使用が終わったら解放する必要があります。インターフェイスに対して IVdsAsync::Wait メソッドが呼び出され、成功を示す HRESULT 値が返された場合、VDS_ASYNC_OUTPUT 構造体で返されたインターフェイスは、各インターフェイスポインターに対して IUnknown::Release メソッドを呼び出して解放する必要があります。ただし、Wait が失敗を示す HRESULT 値を返した場合、または WaitpHrResult パラメーターが失敗を示す HRESULT 値を受け取った場合、VDS_ASYNC_OUTPUT 構造体内のインターフェイスポインターは NULL であり、解放する必要はありません。HRESULT 値が成功か失敗かは、Winerror.h で定義されている SUCCEEDED および FAILED マクロを使用して判定できます。

戻り値

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

戻り値 説明
S_OK
メソッドは正常に完了しました。

解説(Remarks)

アプリケーションは、CoInitializeSecurity 関数を呼び出してプロセス全体のセキュリティを初期化する必要があります。dwImpLevel パラメーターは RPC_C_IMP_LEVEL_IMPERSONATE に設定する必要があります。

Windows Server 2008、Windows Vista および Windows Server 2003: これらの操作は、Windows 7 および Windows Server 2008 R2 までは必要ありません。

指定されたファイル名の仮想ディスクが存在しない場合は、作成されます。仮想ディスクが既に存在する場合、仮想ディスクプロバイダーはファイルを再作成せずに、既存の仮想ディスクオブジェクトへのインターフェイスポインターを返します。

vtbl 5 HRESULT AddVDisk(VIRTUAL_STORAGE_TYPE* VirtualDeviceType, LPWSTR pPath, IVdsVDisk** ppVDisk)

既存の仮想ディスクファイルに対する仮想ディスクオブジェクトを作成します。

VirtualDeviceTypeVIRTUAL_STORAGE_TYPE*inVIRTUAL_STORAGE_TYPE 構造体のアドレスです。
pPathLPWSTRin仮想ディスクのバッキングファイルの名前とディレクトリパスを含む NULL 終端のワイド文字列です。
ppVDiskIVdsVDisk**inout新しく作成された仮想ディスクオブジェクトへの IVdsVDisk インターフェイスポインターを受け取る変数へのポインターです。呼び出し元は、インターフェイスポインターが不要になったときに IUnknown::Release メソッドを呼び出して解放する必要があります。

戻り値

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

戻り値 説明
S_OK
メソッドは正常に完了しました。
vtbl 6 HRESULT GetDiskFromVDisk(IVdsVDisk* pVDisk, IVdsDisk** ppDisk)

IVdsVDisk インターフェイスポインターを指定して、仮想ディスクの IVdsDisk インターフェイスポインターを返します。

pVDiskIVdsVDisk*in仮想ディスクの IVdsVDisk インターフェイスポインターです。
ppDiskIVdsDisk**outIVdsDisk インターフェイスポインターを受け取る変数へのポインターです。呼び出し元は、インターフェイスポインターが不要になったときに IUnknown::Release メソッドを呼び出して解放する必要があります。

戻り値

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

戻り値 説明
S_OK
メソッドは正常に完了しました。
vtbl 7 HRESULT GetVDiskFromDisk(IVdsDisk* pDisk, IVdsVDisk** ppVDisk)

IVdsDisk インターフェイスポインターを指定して、仮想ディスクの IVdsVDisk インターフェイスポインターを返します。

pDiskIVdsDisk*in仮想ディスクの IVdsVDisk インターフェイスポインターです。
ppVDiskIVdsVDisk**outIVdsVDisk インターフェイスポインターを受け取る変数へのポインターです。呼び出し元は、インターフェイスポインターが不要になったときに IUnknown::Release メソッドを呼び出して解放する必要があります。

戻り値

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

戻り値 説明
S_OK
メソッドは正常に完了しました。
出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IVdsVdProvider "{B481498C-8354-45F9-84A0-0BDD2832A91F}"
#usecom global IVdsVdProvider IID_IVdsVdProvider "{}"
#comfunc global IVdsVdProvider_QueryVDisks       3 sptr
#comfunc global IVdsVdProvider_CreateVDisk       4 var,wstr,wstr,int,int,int,var,sptr
#comfunc global IVdsVdProvider_AddVDisk          5 var,wstr,sptr
#comfunc global IVdsVdProvider_GetDiskFromVDisk  6 sptr,sptr
#comfunc global IVdsVdProvider_GetVDiskFromDisk  7 sptr,sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。