IVdsVdProvider
COM公式ドキュメント
仮想ディスクを作成および管理するためのメソッドを定義します。
メソッド 5
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
プロバイダーによって管理されているすべての仮想ディスクの一覧を返します。
| ppEnum | IEnumVdsObject** | out | 仮想ディスクオブジェクトを列挙するために使用できる IEnumVdsObject インターフェイスポインターのアドレスです。詳細については、列挙オブジェクトの操作を参照してください。呼び出し元は、インターフェイスおよび各仮想ディスクオブジェクトが不要になったときに、IUnknown::Release メソッドを呼び出して解放する必要があります。 このパラメーターは必須であり、NULL にすることはできません。 |
戻り値
このメソッドは、E_INVALIDARG や E_OUTOFMEMORY などの標準的な HRESULT 値、および VDS 固有の戻り値を返すことがあります。また、HRESULT_FROM_WIN32 マクロを使用して変換されたシステムエラーコードを返すこともあります。エラーは、VDS 自体、または使用されている基盤の VDS プロバイダーから発生する可能性があります。返される可能性のある値には、次のものが含まれます。
| 戻り値 | 説明 |
|---|---|
| メソッドは正常に完了しました。 |
解説(Remarks)
仮想ディスクプロバイダーがどの仮想ディスクも管理していない場合、このメソッドは空の列挙オブジェクトを返します。
仮想ディスクを作成します。
| VirtualDeviceType | VIRTUAL_STORAGE_TYPE* | in | 作成する仮想ディスクの種類を指定する VIRTUAL_STORAGE_TYPE 構造体へのポインターです。 | ||||||
| pPath | LPWSTR | in | 仮想ディスク用に作成されるバッキングファイルの名前とディレクトリパスを含む NULL 終端のワイド文字列です。 | ||||||
| pStringSecurityDescriptor | LPWSTR | in | 仮想ディスクに適用されるセキュリティ記述子を含む NULL 終端のワイド文字列です。 このパラメーターが NULL の場合、呼び出し元のアクセストークン内のセキュリティ記述子が使用されます。 | ||||||
| Flags | CREATE_VIRTUAL_DISK_FLAG | in | 仮想ディスクをどのように作成するかを指定する CREATE_VIRTUAL_DISK_FLAG 列挙値のビットマスクです。
| ||||||
| ProviderSpecificFlags | DWORD | in | 作成される仮想ディスクの種類に固有のフラグのビットマスクです。これらのフラグはプロバイダー固有です。Microsoft 仮想ディスクプロバイダーの場合、このパラメーターは 0 でなければなりません。 | ||||||
| Reserved | DWORD | in | このパラメーターは予約されており、0 でなければなりません。 | ||||||
| pCreateDiskParameters | VDS_CREATE_VDISK_PARAMETERS* | in | 仮想ディスクの作成パラメーターを含む VDS_CREATE_VDISK_PARAMETERS 構造体へのポインターです。 | ||||||
| ppAsync | IVdsAsync** | inout | IVdsAsync インターフェイスへのポインターであり、正常に完了すると、この操作を監視および制御するための IVdsAsync インターフェイスを受け取ります。呼び出し元は、受け取ったインターフェイスの使用が終わったら解放する必要があります。インターフェイスに対して IVdsAsync::Wait メソッドが呼び出され、成功を示す HRESULT 値が返された場合、VDS_ASYNC_OUTPUT 構造体で返されたインターフェイスは、各インターフェイスポインターに対して IUnknown::Release メソッドを呼び出して解放する必要があります。ただし、Wait が失敗を示す HRESULT 値を返した場合、または Wait の pHrResult パラメーターが失敗を示す HRESULT 値を受け取った場合、VDS_ASYNC_OUTPUT 構造体内のインターフェイスポインターは NULL であり、解放する必要はありません。HRESULT 値が成功か失敗かは、Winerror.h で定義されている SUCCEEDED および FAILED マクロを使用して判定できます。 |
戻り値
このメソッドは、E_INVALIDARG や E_OUTOFMEMORY などの標準的な HRESULT 値、および VDS 固有の戻り値を返すことがあります。また、HRESULT_FROM_WIN32 マクロを使用して変換されたシステムエラーコードを返すこともあります。エラーは、VDS 自体、または使用されている基盤の VDS プロバイダーから発生する可能性があります。返される可能性のある値には、次のものが含まれます。
| 戻り値 | 説明 |
|---|---|
| メソッドは正常に完了しました。 |
解説(Remarks)
アプリケーションは、CoInitializeSecurity 関数を呼び出してプロセス全体のセキュリティを初期化する必要があります。dwImpLevel パラメーターは RPC_C_IMP_LEVEL_IMPERSONATE に設定する必要があります。
Windows Server 2008、Windows Vista および Windows Server 2003: これらの操作は、Windows 7 および Windows Server 2008 R2 までは必要ありません。
指定されたファイル名の仮想ディスクが存在しない場合は、作成されます。仮想ディスクが既に存在する場合、仮想ディスクプロバイダーはファイルを再作成せずに、既存の仮想ディスクオブジェクトへのインターフェイスポインターを返します。
既存の仮想ディスクファイルに対する仮想ディスクオブジェクトを作成します。
| VirtualDeviceType | VIRTUAL_STORAGE_TYPE* | in | VIRTUAL_STORAGE_TYPE 構造体のアドレスです。 |
| pPath | LPWSTR | in | 仮想ディスクのバッキングファイルの名前とディレクトリパスを含む NULL 終端のワイド文字列です。 |
| ppVDisk | IVdsVDisk** | inout | 新しく作成された仮想ディスクオブジェクトへの IVdsVDisk インターフェイスポインターを受け取る変数へのポインターです。呼び出し元は、インターフェイスポインターが不要になったときに IUnknown::Release メソッドを呼び出して解放する必要があります。 |
戻り値
このメソッドは、E_INVALIDARG や E_OUTOFMEMORY などの標準的な HRESULT 値、および VDS 固有の戻り値を返すことがあります。また、HRESULT_FROM_WIN32 マクロを使用して変換されたシステムエラーコードを返すこともあります。エラーは、VDS 自体、または使用されている基盤の VDS プロバイダーから発生する可能性があります。返される可能性のある値には、次のものが含まれます。
| 戻り値 | 説明 |
|---|---|
| メソッドは正常に完了しました。 |
IVdsVDisk インターフェイスポインターを指定して、仮想ディスクの IVdsDisk インターフェイスポインターを返します。
| pVDisk | IVdsVDisk* | in | 仮想ディスクの IVdsVDisk インターフェイスポインターです。 |
| ppDisk | IVdsDisk** | out | IVdsDisk インターフェイスポインターを受け取る変数へのポインターです。呼び出し元は、インターフェイスポインターが不要になったときに IUnknown::Release メソッドを呼び出して解放する必要があります。 |
戻り値
このメソッドは、E_INVALIDARG や E_OUTOFMEMORY などの標準的な HRESULT 値、および VDS 固有の戻り値を返すことがあります。また、HRESULT_FROM_WIN32 マクロを使用して変換されたシステムエラーコードを返すこともあります。エラーは、VDS 自体、または使用されている基盤の VDS プロバイダーから発生する可能性があります。返される可能性のある値には、次のものが含まれます。
| 戻り値 | 説明 |
|---|---|
| メソッドは正常に完了しました。 |
IVdsDisk インターフェイスポインターを指定して、仮想ディスクの IVdsVDisk インターフェイスポインターを返します。
| pDisk | IVdsDisk* | in | 仮想ディスクの IVdsVDisk インターフェイスポインターです。 |
| ppVDisk | IVdsVDisk** | out | IVdsVDisk インターフェイスポインターを受け取る変数へのポインターです。呼び出し元は、インターフェイスポインターが不要になったときに IUnknown::Release メソッドを呼び出して解放する必要があります。 |
戻り値
このメソッドは、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_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 指定が可能。#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 sptr,wstr,wstr,int,int,int,sptr,sptr #comfunc global IVdsVdProvider_AddVDisk 5 sptr,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が無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。