INetDiagHelper
COM公式ドキュメント
INetDiagHelper インターフェイスは、ネットワーク関連の問題の診断および解決に関連する情報を取得し提供するメソッドを提供します。
メソッド 18
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
Initialize メソッドは、仮説 (hypothesis) から Helper Class Extension へ属性を渡します。ヘルパークラスは、主要な診断関数で使用するためにこれらのパラメーターを保存する必要があります。このメソッドは、いずれの診断関数よりも前に呼び出す必要があります。
| celt | DWORD | in | HELPER_ATTRIBUTE 配列内の要素数へのポインターです。 |
| rgAttributes | HELPER_ATTRIBUTE* | in | HELPER_ATTRIBUTE 配列への参照です。 |
戻り値
| 戻り値 | 説明 |
|---|---|
| 操作は成功しました。 | |
| この操作を完了するのに十分なメモリがありません。 | |
| 1 つ以上のパラメーターが正しく指定されていません。 | |
| 呼び出し元には、診断または修復の操作を実行するための十分な特権がありません。 | |
| 診断または修復の操作は取り消されました。 |
Helper Class Extension は、関数内で発生した障害に固有の HRESULT を返す場合があります。
解説(Remarks)
Initialize メソッドは Helper Class Extension の構築時に必須です。
Helper Class Extension のインスタンスが見積もり (estimate) を提供できるようにします。
| ppInfo | DiagnosticsInfo** | out | DiagnosticsInfo 構造体へのポインターへのポインターです。 |
戻り値
| 戻り値 | 説明 |
|---|---|
| 操作は成功しました。 | |
| この操作を完了するのに十分なメモリがありません。 | |
| 1 つ以上のパラメーターが正しく指定されていません。 | |
| 呼び出し元には、診断または修復の操作を実行するための十分な特権がありません。 | |
| 診断または修復の操作は取り消されました。 |
Helper Class Extension は、関数内で発生した障害に固有の HRESULT を返す場合があります。
解説(Remarks)
GetDiagnosticsInfo メソッドは Helper Class Extension の構築時に必須です。
Helper Class Extension のキー属性を取得します。
| pcelt | DWORD* | out | HELPER_ATTRIBUTE 配列内の要素数へのポインターです。 |
| pprgAttributes | HELPER_ATTRIBUTE** | out | HELPER_ATTRIBUTE 構造体の配列へのポインターです。 |
戻り値
| 戻り値 | 説明 |
|---|---|
| 操作は成功しました。 | |
| この操作を完了するのに十分なメモリがありません。 | |
| 1 つ以上のパラメーターが正しく指定されていません。 | |
| このオプションのメソッドは実装されていません。 | |
| 呼び出し元には、診断または修復の操作を実行するための十分な特権がありません。 | |
| 診断または修復の操作は取り消されました。 |
Helper Class Extension は、関数内で発生した障害に固有の HRESULT を返す場合があります。
解説(Remarks)
このメソッドは Helper Class Extension の構築時には必須ではありません。
診断対象のコンポーネントが正常かどうかを確認します。
| pwszInstanceDescription | LPWSTR | in | 診断対象の情報に関するユーザーフレンドリーな説明を格納する null 終端文字列へのポインターです。たとえば、あるクラスが IP アドレスへの接続の問題を診断する場合、pwszInstanceDescription パラメーターにはホスト名が格納されます。 |
| ppwszDescription | LPWSTR* | out | コンポーネントが正常でないと判定された場合に、検出された問題の説明を格納する null 終端文字列へのポインターです。 |
| pDeferredTime | INT* | out | 診断をすぐに開始できない場合に延期する時間 (秒単位) へのポインターです。これは pStatus パラメーターが DS_DEFERRED に設定されている場合に使用されます。 |
| pStatus | DIAGNOSIS_STATUS* | out | 診断から返される DIAGNOSIS_STATUS へのポインターです。 |
戻り値
| 戻り値 | 説明 |
|---|---|
| 操作は成功しました。 | |
| この操作を完了するのに十分なメモリがありません。 | |
| 1 つ以上のパラメーターが正しく指定されていません。 | |
| 呼び出し元には、診断または修復の操作を実行するための十分な特権がありません。 | |
| 診断または修復の操作は取り消されました。 |
Helper Class Extension は、関数内で発生した障害に固有の HRESULT を返す場合があります。
解説(Remarks)
LowHealth メソッドは Helper Class Extension の構築時に必須です。
LowHealth が DS_CONFIRMED を返す場合、ppwszDescription には診断結果のユーザーフレンドリーな説明も格納されます。出力パラメーター pDeferredTime には、pStatus が DS_DEFERRED を返す場合に、この診断を延期する必要がある秒数が格納されます。
LowHealth が確定した場合、問題が他のコンポーネントに起因する可能性があるときは、GetLowerHypotheses メソッドで他のヘルパークラス向けの仮説を任意に生成することもできます。確定しなかった場合、NDF は HighUtilization を呼び出して問題をさらに診断する場合があります。
問題を診断できないものの、コンポーネントが正常であるとも確認できない場合、LowHealth は DS_INDETERMINATE を返すこともできます。この場合、他の仮説がいずれも確定しなければ、NDF はこれを DS_CONFIRMED として扱います。
対応するコンポーネントの使用率が高いかどうかを確認します。
| pwszInstanceDescription | LPWSTR | in | 診断対象の情報に関するユーザーフレンドリーな説明を格納する null 終端文字列へのポインターです。たとえば、あるクラスが IP アドレスへの接続の問題を診断する場合、pwszInstanceDescription パラメーターにはホスト名が格納されます。 |
| ppwszDescription | LPWSTR* | out | 高使用率の診断結果の説明を格納する null 終端文字列へのポインターです。 |
| pDeferredTime | INT* | out | 診断をすぐに開始できない場合に延期する時間 (秒単位) へのポインターです。これは pStatus パラメーターが DS_DEFERRED に設定されている場合に使用されます。 |
| pStatus | DIAGNOSIS_STATUS* | out | 診断から返される DIAGNOSIS_STATUS へのポインターです。 |
戻り値
| 戻り値 | 説明 |
|---|---|
| 操作は成功しました。 | |
| この操作を完了するのに十分なメモリがありません。 | |
| 1 つ以上のパラメーターが正しく指定されていません。 | |
| このオプションのメソッドは実装されていません。 | |
| 呼び出し元には、診断または修復の操作を実行するための十分な特権がありません。 | |
| 診断または修復の操作は取り消されました。 |
Helper Class Extension は、関数内で発生した障害に固有の HRESULT を返す場合があります。
解説(Remarks)
このメソッドは Helper Class Extension の構築時には必須ではありません。
ローカルコンポーネントにおける正常性低下 (low health) の考えられる原因についての仮説を生成します。
| pcelt | DWORD* | out | HYPOTHESIS 配列内の要素数へのポインターです。 |
| pprgHypotheses | HYPOTHESIS** | out | HYPOTHESIS 配列へのポインターです。 |
戻り値
| 戻り値 | 説明 |
|---|---|
| 操作は成功しました。 | |
| この操作を完了するのに十分なメモリがありません。 | |
| 1 つ以上のパラメーターが正しく指定されていません。 | |
| このオプションのメソッドは実装されていません。 | |
| 呼び出し元には、診断または修復の操作を実行するための十分な特権がありません。 | |
| 診断または修復の操作は取り消されました。 |
Helper Class Extension は、関数内で発生した障害に固有の HRESULT を返す場合があります。
解説(Remarks)
このメソッドは Helper Class Extension の構築時には必須ではありません。
Helper Class Extension に仮説の生成を要求します。
| pcelt | DWORD* | out | HYPOTHESIS 配列内の要素数へのポインターです。 |
| pprgHypotheses | HYPOTHESIS** | out | HYPOTHESIS 構造体の配列へのポインターです。 |
戻り値
| 戻り値 | 説明 |
|---|---|
| 操作は成功しました。 | |
| この操作を完了するのに十分なメモリがありません。 | |
| 1 つ以上のパラメーターが正しく指定されていません。 | |
| このオプションのメソッドは実装されていません。 | |
| 呼び出し元には、診断または修復の操作を実行するための十分な特権がありません。 | |
| 診断または修復の操作は取り消されました。 |
Helper Class Extension は、関数内で発生した障害に固有の HRESULT を返す場合があります。
解説(Remarks)
このメソッドは Helper Class Extension の構築時には必須ではありません。
高使用率の考えられる原因についての仮説を生成します。
| pcelt | DWORD* | out | HYPOTHESIS 配列内の要素数へのポインターです。 |
| pprgHypotheses | HYPOTHESIS** | out | HYPOTHESIS 構造体の配列へのポインターです。 |
戻り値
| 戻り値 | 説明 |
|---|---|
| 操作は成功しました。 | |
| この操作を完了するのに十分なメモリがありません。 | |
| 1 つ以上のパラメーターが正しく指定されていません。 | |
| このオプションのメソッドは実装されていません。 | |
| 呼び出し元には、診断または修復の操作を実行するための十分な特権がありません。 | |
| 診断または修復の操作は取り消されました。 |
Helper Class Extension は、関数内で発生した障害に固有の HRESULT を返す場合があります。
解説(Remarks)
このメソッドは Helper Class Extension の構築時には必須ではありません。
上流のネットワークコンポーネントにおける高使用率の考えられる原因についての仮説を生成します。
| pcelt | DWORD* | out | HYPOTHESIS 配列内の要素数へのポインターです。 |
| pprgHypotheses | HYPOTHESIS** | out | HYPOTHESIS 配列へのポインターです。 |
戻り値
| 戻り値 | 説明 |
|---|---|
| 操作は成功しました。 | |
| この操作を完了するのに十分なメモリがありません。 | |
| 1 つ以上のパラメーターが正しく指定されていません。 | |
| このオプションのメソッドは実装されていません。 | |
| 呼び出し元には、診断または修復の操作を実行するための十分な特権がありません。 | |
| 診断または修復の操作は取り消されました。 |
Helper Class Extension は、関数内で発生した障害に固有の HRESULT を返す場合があります。
解説(Remarks)
このメソッドは Helper Class Extension の構築時には必須ではありません。
入力パラメーターで指定された修復を実行します。
| pInfo | RepairInfo* | in | RepairInfo 構造体へのポインターです。 |
| pDeferredTime | INT* | out | 修復をすぐに開始できない場合に延期する時間 (秒単位) へのポインターです。これは pStatus パラメーターが DS_DEFERRED に設定されている場合にのみ有効です。 |
| pStatus | REPAIR_STATUS* | out | 修復から返される REPAIR_STATUS へのポインターです。 |
戻り値
| 戻り値 | 説明 |
|---|---|
| 操作は成功しました。 | |
| この操作を完了するのに十分なメモリがありません。 | |
| 1 つ以上のパラメーターが正しく指定されていません。 | |
| このオプションのメソッドは実装されていません。 | |
| 呼び出し元には、診断または修復の操作を実行するための十分な特権がありません。 | |
| 診断または修復の操作は取り消されました。 |
Helper Class Extension は、関数内で発生した障害に固有の HRESULT を返す場合があります。
解説(Remarks)
このメソッドは Helper Class Extension の構築時には必須ではありません。
修復が正常に完了した後に NDF によって呼び出されます。
| problem | PROBLEM_TYPE | in | ヘルパークラスが以前に診断した PROBLEM_TYPE です。 |
| pDeferredTime | INT* | out | 診断をすぐに開始できない場合に延期する時間 (秒単位) へのポインターです。これは pStatus メンバーが DS_DEFERRED に設定されている場合にのみ使用されます。 |
| pStatus | REPAIR_STATUS* | out | 診断から返される DIAGNOSIS_STATUS へのポインターです。 |
戻り値
| 戻り値 | 説明 |
|---|---|
| 操作は成功しました。 | |
| この操作を完了するのに十分なメモリがありません。 | |
| 1 つ以上のパラメーターが正しく指定されていません。 | |
| このオプションのメソッドは実装されていません。 | |
| 呼び出し元には、診断または修復の操作を実行するための十分な特権がありません。 | |
| 診断または修復の操作は取り消されました。 |
Helper Class Extension は、関数内で発生した障害に固有の HRESULT を返す場合があります。
解説(Remarks)
このメソッドは Helper Class Extension の構築時には必須ではありません。
このメソッドは、検証を妨げる障害が発生した場合にのみエラーコードを返します。コンポーネントが依然として正常でないことを伝えるには、必要に応じて pStatus パラメーターを使用するのが想定される方法です。問題が解決されたことを示すには DS_REJECTED を使用します。
指定された問題の種類について、Helper Class Extension が保持する修復情報を取得します。
| problem | PROBLEM_TYPE | in | ヘルパークラスが以前に診断した問題の種類を指定する PROBLEM_TYPE 値です。 |
| pcelt | DWORD* | out | RepairInfo 配列内の要素数へのポインターです。 |
| ppInfo | RepairInfo** | out | RepairInfo 構造体の配列へのポインターです。 |
戻り値
| 戻り値 | 説明 |
|---|---|
| 操作は成功しました。 | |
| この操作を完了するのに十分なメモリがありません。 | |
| 1 つ以上のパラメーターが正しく指定されていません。 | |
| このオプションのメソッドは実装されていません。 | |
| 呼び出し元には、診断または修復の操作を実行するための十分な特権がありません。 | |
| 診断または修復の操作は取り消されました。 |
Helper Class Extension は、関数内で発生した障害に固有の HRESULT を返す場合があります。
解説(Remarks)
このメソッドは Helper Class Extension の構築時には必須ではありません。
Helper Class Extension インスタンスの有効期間 (lifetime) を取得します。
| pLifeTime | LIFE_TIME* | out | LIFE_TIME 構造体へのポインターです。 |
戻り値
| 戻り値 | 説明 |
|---|---|
| 操作は成功しました。 | |
| この操作を完了するのに十分なメモリがありません。 | |
| 1 つ以上のパラメーターが正しく指定されていません。 | |
| このオプションのメソッドは実装されていません。 | |
| 呼び出し元には、診断または修復の操作を実行するための十分な特権がありません。 | |
| 診断または修復の操作は取り消されました。 |
Helper Class Extension は、関数内で発生した障害に固有の HRESULT を返す場合があります。
解説(Remarks)
このメソッドは Helper Class Extension の構築時には必須ではありません。
有効期間のデータは、問題インスタンスの時間的範囲を限定するために使用されます。これは、トレースやログ記録のような履歴に基づく診断を行う場合に特に有用で、指定した時間間隔中に発生したイベントへ診断範囲を絞り込むのに利用できます。
たとえば、Windows Filtering Platform (WFP) のヘルパークラスは、トレースログを確認してどのフィルターがパケットをブロックしたかを判定するために有効期間を使用します。既定では、ヘルパークラスインスタンスの有効期間は、依存先のヘルパークラスインスタンスの有効期間を継承します。
Helper Class Extension は、その期間内に発生したイベントに診断を限定できます。
| lifeTime | LIFE_TIME | in | LIFE_TIME 構造体です。 |
戻り値
| 戻り値 | 説明 |
|---|---|
| 操作は成功しました。 | |
| この操作を完了するのに十分なメモリがありません。 | |
| 1 つ以上のパラメーターが正しく指定されていません。 | |
| このオプションのメソッドは実装されていません。 | |
| 呼び出し元には、診断または修復の操作を実行するための十分な特権がありません。 | |
| 診断または修復の操作は取り消されました。 |
Helper Class Extension は、関数内で発生した障害に固有の HRESULT を返す場合があります。
解説(Remarks)
このメソッドは Helper Class Extension の構築時には必須ではありません。
診断および修復の操作のキャッシュされた結果が期限切れとなる時刻を指定します。
| pCacheTime | FILETIME* | out | FILETIME 構造体へのポインターです。 |
戻り値
| 戻り値 | 説明 |
|---|---|
| 操作は成功しました。 | |
| この操作を完了するのに十分なメモリがありません。 | |
| 1 つ以上のパラメーターが正しく指定されていません。 | |
| このオプションのメソッドは実装されていません。 | |
| 呼び出し元には、診断または修復の操作を実行するための十分な特権がありません。 | |
| 診断または修復の操作は取り消されました。 |
Helper Class Extension は、関数内で発生した障害に固有の HRESULT を返す場合があります。
解説(Remarks)
このメソッドは Helper Class Extension の構築時には必須ではありません。
既定の動作は現在時刻を返すことであり、その場合、結果はキャッシュされません。キャッシュ時間を設定すると、キャッシュ時間が期限切れになるまで NDF が拡張機能に問題の再診断を要求しなくなるため、診断の効率を高めることができます。
FILETIME 構造体は、1601 年 1 月 1 日 (UTC) からの 100 ナノ秒間隔の数を表す 64 ビット値です。
ヘルパークラス拡張機能が診断した問題に関する追加情報を取得します。
| pcelt | DWORD* | out | HELPER_ATTRIBUTE 配列内の要素数へのポインターです。 |
| pprgAttributes | HELPER_ATTRIBUTE** | out | HELPER_ATTRIBUTE 構造体の配列へのポインターです。 |
戻り値
| 戻り値 | 説明 |
|---|---|
| 操作は成功しました。 | |
| この操作を完了するのに十分なメモリがありません。 | |
| 1 つ以上のパラメーターが正しく指定されていません。 | |
| このオプションのメソッドは実装されていません。 | |
| 呼び出し元には、診断または修復の操作を実行するための十分な特権がありません。 | |
| 診断または修復の操作は取り消されました。 |
Helper Class Extension は、関数内で発生した障害に固有の HRESULT を返す場合があります。
解説(Remarks)
このメソッドは Helper Class Extension の構築時には必須ではありません。
診断および修復の過程で、ヘルパークラスは NDF による診断の処理を改善する属性を任意に NDF へ返すことができます。NDF へ返すことができる定義済みの属性は次のとおりです。
| 用語 | 説明 |
|---|---|
| werperameter (型: AT_UINT32) | 診断が失敗した場合に、ヘルパークラス固有の Windows エラー報告 (WER) のバケット化パラメーターを追加で指定するオプションの属性です。 |
| werfile (型: AT_STRING) | Windows エラー報告 (WER) のレポートにヘルパークラス固有のファイルを追加するためのオプションの属性です。 |
| rootcauseid (型: AT_GUID) | ヘルパークラスは、複数の問題を同時に診断できることがよくあります。拡張機能が、pszName パラメーターに rootcauseid を設定し、Guid フィールドに発生した特定の問題を識別する GUID を設定した AT_GUID 型の HelperAttribute を返すと、NDF における問題の分析を改善できます。これらの GUID はヘルパー拡張機能が独自に定義します。 |
進行中の診断または修復を取り消します。
戻り値
| 戻り値 | 説明 |
|---|---|
| 操作は成功しました。 | |
| この操作を完了するのに十分なメモリがありません。 | |
| 呼び出し元には、診断または修復の操作を実行するための十分な特権がありません。 | |
| 診断または修復の操作は取り消されました。 |
Helper Class Extension は、関数内で発生した障害に固有の HRESULT を返す場合があります。
解説(Remarks)
Cancel メソッドは Helper Class Extension の構築時に必須です。
診断または修復の操作の後に、Helper Class Extension がリソースをクリーンアップできるようにします。
戻り値
| 戻り値 | 説明 |
|---|---|
| 操作は成功しました。 | |
| この操作を完了するのに十分なメモリがありません。 | |
| 呼び出し元には、診断または修復の操作を実行するための十分な特権がありません。 | |
| 診断または修復の操作は取り消されました。 |
Helper Class Extension は、関数内で発生した障害に固有の HRESULT を返す場合があります。
解説(Remarks)
Cleanup メソッドは Helper Class Extension の構築時に必須です。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_INetDiagHelper "{C0B35746-EBF5-11D8-BBE9-505054503030}" #usecom global INetDiagHelper IID_INetDiagHelper "{}" #comfunc global INetDiagHelper_Initialize 3 int,var #comfunc global INetDiagHelper_GetDiagnosticsInfo 4 var #comfunc global INetDiagHelper_GetKeyAttributes 5 var,var #comfunc global INetDiagHelper_LowHealth 6 wstr,var,var,var #comfunc global INetDiagHelper_HighUtilization 7 wstr,var,var,var #comfunc global INetDiagHelper_GetLowerHypotheses 8 var,var #comfunc global INetDiagHelper_GetDownStreamHypotheses 9 var,var #comfunc global INetDiagHelper_GetHigherHypotheses 10 var,var #comfunc global INetDiagHelper_GetUpStreamHypotheses 11 var,var #comfunc global INetDiagHelper_Repair 12 var,var,var #comfunc global INetDiagHelper_Validate 13 int,var,var #comfunc global INetDiagHelper_GetRepairInfo 14 int,var,var #comfunc global INetDiagHelper_GetLifeTime 15 var #comfunc global INetDiagHelper_SetLifeTime 16 int #comfunc global INetDiagHelper_GetCacheTime 17 var #comfunc global INetDiagHelper_GetAttributes 18 var,var #comfunc global INetDiagHelper_Cancel 19 #comfunc global INetDiagHelper_Cleanup 20 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_INetDiagHelper "{C0B35746-EBF5-11D8-BBE9-505054503030}" #usecom global INetDiagHelper IID_INetDiagHelper "{}" #comfunc global INetDiagHelper_Initialize 3 int,sptr #comfunc global INetDiagHelper_GetDiagnosticsInfo 4 sptr #comfunc global INetDiagHelper_GetKeyAttributes 5 sptr,sptr #comfunc global INetDiagHelper_LowHealth 6 wstr,sptr,sptr,sptr #comfunc global INetDiagHelper_HighUtilization 7 wstr,sptr,sptr,sptr #comfunc global INetDiagHelper_GetLowerHypotheses 8 sptr,sptr #comfunc global INetDiagHelper_GetDownStreamHypotheses 9 sptr,sptr #comfunc global INetDiagHelper_GetHigherHypotheses 10 sptr,sptr #comfunc global INetDiagHelper_GetUpStreamHypotheses 11 sptr,sptr #comfunc global INetDiagHelper_Repair 12 sptr,sptr,sptr #comfunc global INetDiagHelper_Validate 13 int,sptr,sptr #comfunc global INetDiagHelper_GetRepairInfo 14 int,sptr,sptr #comfunc global INetDiagHelper_GetLifeTime 15 sptr #comfunc global INetDiagHelper_SetLifeTime 16 int #comfunc global INetDiagHelper_GetCacheTime 17 sptr #comfunc global INetDiagHelper_GetAttributes 18 sptr,sptr #comfunc global INetDiagHelper_Cancel 19 #comfunc global INetDiagHelper_Cleanup 20 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。