IWbemCallResult
COM公式ドキュメント
IWbemServices インターフェイスの半非同期呼び出しに使用します。そのような呼び出しを行うと、呼び出された IWbemServices のメソッドは IWbemCallResult オブジェクトとともに即座に制御を返します。
メソッド 4
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
IWbemCallResult::GetResultObject メソッドは、IWbemServices::GetObject または IWbemServices::ExecMethod への以前の半非同期呼び出しから、オブジェクトの取得を試みます。
| lTimeout | INT | in | この呼び出しが制御を返すまでにブロックする最大時間をミリ秒単位で指定します。定数 WBEM_INFINITE (0xFFFFFFFF) を使用すると、オブジェクトが利用可能になるまで呼び出しはブロックされます。0 を使用すると、呼び出しはオブジェクトまたは状態コードのいずれかを即座に返します。 |
| ppResultObject | IWbemClassObject** | out | このパラメーターに NULL を指定することはできません。オブジェクトが利用可能になった時点で、そのコピーを受け取ります。返されたオブジェクトが不要になったら、IWbemClassObject::Release を呼び出す必要があります。エラー時には新しいオブジェクトは返されません。 |
戻り値
このメソッドは、メソッド呼び出しの状態を示す HRESULT を返します。以下に、HRESULT に格納される値を示します。
元の半非同期操作が失敗した場合 (オブジェクトが見つからなかった、メソッドを呼び出せなかった場合など)、このメソッドは、その関数の同期版が返したはずのエラーコードを返します。
エラー時には、COM 関数 GetErrorInfo を呼び出して詳細なエラー情報を取得できます。
ネットワークの問題により Windows Management へのリモート接続が失われた場合は、COM 固有のエラーコードが返されることもあります。
IWbemCallResult::GetResultString メソッドは、IWbemServices::PutInstance によって新しく作成されたインスタンスに割り当てられたオブジェクトパスを返します。
| lTimeout | INT | in | この呼び出しが制御を返すまでにブロックする最大時間をミリ秒単位で指定します。定数 WBEM_INFINITE (0xFFFFFFFF) を使用すると、オブジェクトパスが利用可能になるまで呼び出しはブロックされます。0 を使用すると、呼び出しはオブジェクトパスまたは状態コードのいずれかを即座に返します。 |
| pstrResultString | LPWSTR* | out | NULL を指定することはできません。このパラメーターは、新しく作成されたオブジェクトを指すオブジェクトパスへのポインターを受け取ります。返された文字列は、システム呼び出し SysFreeString を使用して解放する必要があります。エラー時には新しい文字列は返されません。 |
戻り値
このメソッドは、メソッド呼び出しの状態を示す HRESULT を返します。以下に、HRESULT に格納される値を示します。
エラー時には、COM 関数 GetErrorInfo を呼び出して詳細なエラー情報を取得できます。
ネットワークの問題により Windows Management へのリモート接続が失われた場合は、COM 固有のエラーコードが返されることもあります。
IWbemServices::OpenNamespace への半非同期呼び出しの結果として得られる IWbemServices ポインターを、それが利用可能になった時点で取得します。
| lTimeout | INT | in | この呼び出しが制御を返すまでにブロックする最大時間をミリ秒単位で指定します。定数 WBEM_INFINITE (0xFFFFFFFF) を使用すると、インターフェイスポインターが利用可能になるまで呼び出しはブロックされます。0 を使用すると、呼び出しはポインターまたは状態コードのいずれかを即座に返します。 |
| ppServices | IWbemServices** | out | NULL を指定することはできません。元の OpenNamespace の呼び出しで要求された IWbemServices インターフェイスへのポインターを、それが利用可能になった時点で受け取ります。呼び出し元は、返されたオブジェクトが不要になった時点で IWbemServices::Release を呼び出す必要があります。 エラー時には新しいオブジェクトは返されません。 |
戻り値
このメソッドは、メソッド呼び出しの状態を示す HRESULT を返します。以下に、HRESULT に格納される値を示します。
エラー時には、COM 関数 GetErrorInfo を呼び出して詳細なエラー情報を取得できます。
ネットワークの問題により Windows Management へのリモート接続が失われた場合は、COM 固有のエラーコードが返されることもあります。
IWbemCallResult::GetCallStatus メソッドは、現在未完了の半非同期呼び出しの状態を呼び出し元に返します。この呼び出しが WBEM_S_NO_ERROR を返した時点で、元の IWbemServices メソッドの呼び出しは完了しています。
| lTimeout | INT | in | この呼び出しが制御を返すまでにブロックする最大時間をミリ秒単位で指定します。定数 WBEM_INFINITE (0xFFFFFFFF) を使用すると、 IWbemServices メソッドへの元の半非同期呼び出しが完了するまで、呼び出しはブロックされます。0 (ゼロ) を使用すると、呼び出しは呼び出し状態を即座に返します。 |
| plStatus | INT* | out | このメソッドの HRESULT に WBEM_S_NO_ERROR が返された場合、このパラメーターは、 IWbemServices のいずれかのメソッド、すなわち OpenNamespace、 PutInstance、 PutClass、 GetObject、 DeleteInstance、 DeleteClass、 ExecMethod のいずれかへの呼び出しの最終的な結果状態を受け取ります。エラー時には、plStatus が指す値は使用されません。 |
戻り値
このメソッドは、メソッド呼び出しの状態を示す HRESULT を返します。以下に、HRESULT に格納される値を示します。
解説(Remarks)
エラー時には、COM 関数 GetErrorInfo を呼び出して詳細なエラー情報を取得できます。ネットワークの問題により Windows Management へのリモート接続が失われた場合は、COM 固有のエラーコードが返されることもあります。
IWbemServices のメソッドを半非同期に呼び出した後は、いつでも GetCallStatus を呼び出して、その呼び出しが完了したかどうかを確認できます。元の IWbemServices 操作の完了を示す WBEM_S_NO_ERROR が GetCallStatus から返された後、呼び出し結果を取得するために、次の規則に従って他の IWbemCallResult のメソッドの呼び出しが必要になる場合があります。
- IWbemServices::OpenNamespace の場合は、新しい IWbemServices ポインターを取得するために GetResultServices メソッドを呼び出す必要があります。
- IWbemServices::PutInstance の場合は、オブジェクトに割り当てられたオブジェクトパスを取得するために GetResultString メソッドを呼び出す必要があります。
- IWbemServices::GetObject の場合は、オブジェクトを取得するために GetResultObject メソッドを呼び出す必要があります。
- IWbemServices のメソッドである DeleteInstance、 DeleteClass、 ExecMethod の場合は、これらの操作に関する情報を返す呼び出しは GetCallStatus メソッドのみです。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IWbemCallResult "{44ACA675-E8FC-11D0-A07C-00C04FB68820}" #usecom global IWbemCallResult IID_IWbemCallResult "{}" #comfunc global IWbemCallResult_GetResultObject 3 int,sptr #comfunc global IWbemCallResult_GetResultString 4 int,var #comfunc global IWbemCallResult_GetResultServices 5 int,sptr #comfunc global IWbemCallResult_GetCallStatus 6 int,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IWbemCallResult "{44ACA675-E8FC-11D0-A07C-00C04FB68820}" #usecom global IWbemCallResult IID_IWbemCallResult "{}" #comfunc global IWbemCallResult_GetResultObject 3 int,sptr #comfunc global IWbemCallResult_GetResultString 4 int,sptr #comfunc global IWbemCallResult_GetResultServices 5 int,sptr #comfunc global IWbemCallResult_GetCallStatus 6 int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。