IVdsLunMpio
COM公式ドキュメント
IVdsLunMpio インターフェース (vdshwprv.h) は、MPIO 拡張を備えた LUN に対してクエリおよび構成操作を実行するためのメソッドを提供します。
解説(Remarks)
プロバイダーが iSCSI プロバイダーである場合、またはプロバイダーが MPIO をサポートしない場合は、IVdsLunMpio インターフェースを実装すべきではありません。iSCSI プロバイダーがこのインターフェースを実装しても、VDS は iSCSI の MPIO 処理にサービス独自のルーチンを使用するため、これを無視します。
メソッド 4
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
IVdsLunMpio::GetPathInfo (vdshwprv.h) メソッドは、LUN への各パスに対応する VDS_PATH_INFO 構造体の配列を返します。
| ppPaths | VDS_PATH_INFO** | out | VDS_PATH_INFO 構造体の配列を受け取る変数のアドレスです。呼び出し側は、配列内の各要素および配列自体を CoTaskMemFree 関数を使用して解放する必要があります。 |
| plNumberOfPaths | INT* | out | ppPaths パラメーターで返される配列の要素数を受け取る変数のアドレスです。 このメソッドが返すパスの数は、 IVdsLunMpio::GetLoadBalancePolicy メソッドが返すパスの数と一致します。 |
戻り値
このメソッドは、E_INVALIDARG や E_OUTOFMEMORY などの標準的な HRESULT 値、および VDS 固有の戻り値を返すことができます。また、HRESULT_FROM_WIN32 マクロを使用して変換されたシステムエラーコードを返すこともあります。エラーは VDS 自体、または使用中の基盤となる VDS プロバイダーから発生する可能性があります。想定される戻り値には次のものがあります。
| リターンコード/値 | 説明 |
|---|---|
| パス情報が正常に返されました。 | |
|
プロバイダーのキャッシュが破損しています。これは、接続されているデバイスに関する情報をキャッシュするプロバイダー内部での ソフトウェアまたは通信の問題を示します。呼び出し側は、 IVdsHwProvider::Reenumerate メソッドに続いて IVdsHwProvider::Refresh メソッドを使用することで、キャッシュを復元できます。 |
|
LUN オブジェクトはもう存在しません。 |
|
LUN は失敗状態にあり、要求された操作を実行できません。 |
|
別の操作が進行中です。この操作は、以前の操作が完了するまで続行できません。 |
解説(Remarks)
ハードウェアプロバイダーは、 VDS_PATH_INFO の hbaPortProp.id に VDS_OBJECT_ID を返す必要はなく、これを GUID_NULL に設定するだけで構いません。この ID は、この呼び出しがアプリケーションに返される際にシステムによって設定されます。サービスが対応する HBA ポートを見つけられない場合は、GUID_NULL が 使用されます。アプリケーションはこれを、その HBA ポートが VDS にとって不明であることを意味すると解釈します。
IVdsLunMpio::GetLoadBalancePolicy (vdshwprv.h) メソッドは、LUN の現在のロードバランスポリシーを返します。
| pPolicy | VDS_LOADBALANCE_POLICY_ENUM* | out | ロードバランスポリシーを指定する VDS_LOADBALANCE_POLICY_ENUM 列挙値を受け取る変数へのポインターです。 |
| ppPaths | VDS_PATH_POLICY** | out | 呼び出し側から渡される VDS_PATH_POLICY 構造体の配列へのポインターです。呼び出し側は、この配列を CoTaskMemFree 関数を使用して解放する必要があります。 |
| plNumberOfPaths | INT* | out | ppPaths パラメーターで返される、パス固有のポリシー情報構造体の数を受け取る変数へのポインターです。 |
戻り値
このメソッドは、E_INVALIDARG や E_OUTOFMEMORY などの標準的な HRESULT 値、および VDS 固有の戻り値を返すことができます。また、HRESULT_FROM_WIN32 マクロを使用して変換されたシステムエラーコードを返すこともあります。エラーは VDS 自体、または使用中の基盤となる VDS プロバイダーから発生する可能性があります。想定される戻り値には次のものがあります。
| リターンコード/値 | 説明 |
|---|---|
| ロードバランスポリシーが正常に返されました。LUN にパスがない場合、配列は空になり、plNumberOfPaths パラメーターが指す値は 0 に設定され、 ppPaths パラメーターが指す値は NULL に設定されます。 | |
|
プロバイダーのキャッシュが破損しています。これは、接続されているデバイスに関する情報をキャッシュするプロバイダー内部での ソフトウェアまたは通信の問題を示します。呼び出し側は、 IVdsHwProvider::Reenumerate メソッドに続いて IVdsHwProvider::Refresh メソッドを使用することで、キャッシュを復元できます。 |
|
LUN オブジェクトはもう存在しません。 |
|
LUN は失敗状態にあり、要求された操作を実行できません。 |
|
別の操作が進行中です。この操作は、以前の操作が完了するまで続行できません。 |
解説(Remarks)
このメソッドが返すパスの数は、 IVdsLunMpio::GetPathInfo メソッドが返すパスの数と一致します。
IVdsLunMpio::SetLoadBalancePolicy (vdshwprv.h) メソッドは、LUN のロードバランスポリシーを設定します。
| policy | VDS_LOADBALANCE_POLICY_ENUM | in | VDS_LOADBALANCE_POLICY_ENUM 列挙によって列挙されるロードバランスポリシーです。 |
| pPaths | VDS_PATH_POLICY* | in | パス固有のポリシー情報を含む VDS_PATH_POLICY 構造体のメンバーの配列への ポインターです。 |
| lNumberOfPaths | INT | in | pPaths パラメーターが指す配列内の VDS_PATH_POLICY 構造体のメンバーの 数です。 |
戻り値
このメソッドは、E_INVALIDARG や E_OUTOFMEMORY などの標準的な HRESULT 値、および VDS 固有の戻り値を返すことができます。また、HRESULT_FROM_WIN32 マクロを使用して変換されたシステムエラーコードを返すこともあります。エラーは VDS 自体、または使用中の基盤となる VDS プロバイダーから発生する可能性があります。想定される戻り値には次のものがあります。
| リターンコード/値 | 説明 |
|---|---|
| ロードバランスポリシーが正常に設定されました。 | |
|
プロバイダーのキャッシュが破損しています。これは、接続されているデバイスに関する情報をキャッシュするプロバイダー内部での ソフトウェアまたは通信の問題を示します。呼び出し側は、 IVdsHwProvider::Reenumerate メソッドに続いて IVdsHwProvider::Refresh メソッドを使用することで、 キャッシュを復元できます。 |
|
LUN オブジェクトはもう存在しません。 |
|
LUN は失敗状態にあり、要求された操作を実行できません。 |
|
別の操作が進行中です。この操作は、以前の操作が完了するまで続行できません。 |
IVdsLunMpio::GetSupportedLbPolicies (vdshwprv.h) メソッドは、ハードウェアプロバイダーがサポートするロードバランスポリシーを取得します。
| pulLbFlags | DWORD* | out | サポートされるフラグ(VDS_PROVIDER_LBSUPPORT_FLAG 列挙によって列挙される)を受け取る ULONG のアドレスです。 |
戻り値
このメソッドは、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_IVdsLunMpio "{7C5FBAE3-333A-48A1-A982-33C15788CDE3}" #usecom global IVdsLunMpio IID_IVdsLunMpio "{}" #comfunc global IVdsLunMpio_GetPathInfo 3 var,var #comfunc global IVdsLunMpio_GetLoadBalancePolicy 4 var,var,var #comfunc global IVdsLunMpio_SetLoadBalancePolicy 5 int,var,int #comfunc global IVdsLunMpio_GetSupportedLbPolicies 6 var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IVdsLunMpio "{7C5FBAE3-333A-48A1-A982-33C15788CDE3}" #usecom global IVdsLunMpio IID_IVdsLunMpio "{}" #comfunc global IVdsLunMpio_GetPathInfo 3 sptr,sptr #comfunc global IVdsLunMpio_GetLoadBalancePolicy 4 sptr,sptr,sptr #comfunc global IVdsLunMpio_SetLoadBalancePolicy 5 int,sptr,int #comfunc global IVdsLunMpio_GetSupportedLbPolicies 6 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。