IGetAppTrackerData
COM公式ドキュメント
管理アプリケーションが、実行中の COM+ アプリケーションに関する統計情報を取得できるようにします。
解説(Remarks)
トラッカーデータを使用するアプリケーションは、通常、このデータを最新の状態に保つために Tracker Server を定期的にポーリングする必要があります。たとえば、トラッキングデータをユーザーに表示する管理アプリケーションでは、通常このデータをできる限りリアルタイムに近い状態にしたいと考えます。しかし、あまりに頻繁にポーリングすると、システム全体のパフォーマンスが低下する可能性があります。また、データを更新する COM+ アプリケーションは Tracker Server に即座に更新を送信するわけではないため、最良の場合でも多少の遅延(通常は数秒程度)が生じることに留意してください。
ポーリング頻度はグローバルなポリシーであり、管理者は、管理対象システムで使用している特定のツールセットについて、データの鮮度とパフォーマンスへの影響のバランスを取るために必要に応じて調整できます。PollingIntervalInSeconds で返される値は、トラッキングデータを取得してから同じデータを取得する次の呼び出しを行うまでにアプリケーションが待機すべき最小時間です。Tracker Server をポーリングするアプリケーションは、このメソッドを呼び出し、それに応じてポーリング動作を調整する必要があります。
ポーリング間隔は既定でトラッキングイベントの頻度(3 秒)と等しくなります。この値は、次の DWORD レジストリ値を書き込むことで調整できます。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\COM3\TrackingInfoPollingFrequency = 最小ポーリング間隔(秒)
メソッド 7
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
COM+ アプリケーションをホストしているすべてのプロセス、または指定したそれらのプロセスのサブセットについて、概要情報を取得します。
| PartitionId | GUID* | in | 結果をフィルターするパーティション ID。すべてのパーティションを対象とする場合は GUID_NULL。 |
| ApplicationId | GUID* | in | 結果をフィルターするアプリケーション ID。すべてのアプリケーションを対象とする場合は GUID_NULL。 |
| Flags | DWORD | in | 結果をフィルターし、返すデータを選択するための GetAppTrackerDataFlags 列挙体のフラグの組み合わせ。次のフラグがサポートされます: GATD_INCLUDE_PROCESS_EXE_NAME、GATD_INCLUDE_LIBRARY_APPS、GATD_INCLUDE_SWC。詳細については以下の解説を参照してください。 |
| NumApplicationProcesses | DWORD* | out | 戻り時に、PartitionId、ApplicationId、Flags で指定されたフィルター条件に一致するプロセスの数。 |
| ApplicationProcesses | ApplicationProcessSummary** | out | 戻り時に、一致するプロセスの ApplicationProcessSummary 構造体の配列。 |
戻り値
このメソッドは、標準の戻り値 E_INVALIDARG および E_OUTOFMEMORY のほか、次の値を返す場合があります。
| 戻りコード | 説明 |
|---|---|
| メソッドは正常に完了し、結果は ApplicationProcesses パラメーターに格納されています。 | |
| メソッドは正常に完了しましたが、フィルター条件に一致するプロセスはありませんでした。 |
解説(Remarks)
呼び出し元がトラッキング対象プロセスのサブセットのみの情報を必要とする場合、PartitionId、ApplicationId、Flags の各パラメーターを使用してフィルター条件を指定できます。
Flags に GATD_INCLUDE_LIBRARY_APPS も GATD_INCLUDE_SWC も設定されていない場合、結果には COM+ サーバーアプリケーションのインスタンスのみが含まれます。ApplicationId パラメーターを使用して特定の COM+ サーバーアプリケーションのインスタンスを選択でき、PartitionId パラメーターを使用して特定のパーティションの COM+ サーバーアプリケーションを選択できます。
GATD_INCLUDE_LIBRARY_APPS または GATD_INCLUDE_SWC のいずれかが設定されている場合、結果にはそれぞれ COM+ ライブラリアプリケーションをホストしているプロセス、または Services Without Components コンテキストをホストしているプロセスも含まれます。これらの場合、ApplicationId と PartitionId は、プロセスがホストしている(要求された種類の)すべてのアプリケーションに基づいてプロセスをフィルターします。プロセスに条件に一致するアプリケーションが少なくとも 1 つ含まれている場合、そのプロセスは結果に含まれます。
たとえば、次の COM+ アプリケーションがインストールされているとします。
- AppX は PartitionA のサーバーアプリケーションです。
- AppY は PartitionA のライブラリアプリケーションです。
- AppZ は PartitionB のサーバーアプリケーションです。
- AppX のインスタンスが含まれます。
- AppY のコンポーネントを作成したクライアントプロセスが含まれます。
- 他の COM+ コンポーネントを含まない AppZ のインスタンスは、AppZ が PartitionId で指定されたパーティションに存在しないため、含まれません。
- ただし、AppZ の別のインスタンスがあり、そのインスタンスが AppY のコンポーネントも作成している場合、サーバーアプリケーションが PartitionId で指定されたパーティションに存在しなくても、このプロセスは含まれます。GATD_INCLUDE_LIBRARY_APPS が設定されていなければ、このプロセスは含まれません。
COM+ アプリケーションをホストしている単一のプロセスに関する詳細情報を取得します。
| ApplicationInstanceId | GUID* | in | 選択するトラッキング対象プロセスを一意に識別するアプリケーションインスタンス GUID。代わりに ProcessId パラメーターで選択する場合は GUID_NULL。 |
| ProcessId | DWORD | in | 選択するプロセスを識別するプロセス ID。代わりに ApplicationInstanceId パラメーターで選択する場合は 0。 |
| Flags | DWORD | in | 返すデータを指定する GetAppTrackerDataFlags 列挙体のフラグの組み合わせ。次のフラグがサポートされます: GATD_INCLUDE_PROCESS_EXE_NAME(概要を取得する場合)。 |
| Summary | ApplicationProcessSummary* | outoptional | 戻り時に、プロセスの概要情報を格納する ApplicationProcessSummary 構造体。このパラメーターは NULL にできます。 |
| Statistics | ApplicationProcessStatistics* | outoptional | 戻り時に、プロセスの統計情報を格納する ApplicationProcessStatistics 構造体。このパラメーターは NULL にできます。 |
| RecycleInfo | ApplicationProcessRecycleInfo* | outoptional | 戻り時に、プロセスのリサイクルの詳細を格納する ApplicationProcessRecycleInfo 構造体。このパラメーターは NULL にできます。 |
| AnyComponentsHangMonitored | BOOL* | outoptional | 戻り時に、プロセス内のいずれかのコンポーネントがハング監視用に構成されているかどうかを示します。このパラメーターは NULL にできます。 |
戻り値
このメソッドは、標準の戻り値 E_INVALIDARG および E_OUTOFMEMORY のほか、次の値を返す場合があります。
| 戻りコード | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
| 指定されたプロセスが存在しないか、トラッキング対象の COM+ アプリケーションをホストしていません。 |
解説(Remarks)
プロセスは、そのアプリケーションインスタンス ID またはプロセス ID のいずれかで選択できますが、両方を同時に使用することはできません。プロセスが終了するとプロセス ID が再利用される可能性があるため、通常はアプリケーションインスタンス ID による選択が推奨されます。ただし、プログラムへのコマンドライン引数など、別のソースからプロセス ID を取得する場合は、プロセス ID による選択が役立つことがあります。
Summary、Statistics、RecycleInfo、AnyComponentsHangMonitored に NULL 以外の値を渡すことで、プロセスについて利用可能な情報の一部またはすべてを要求できます。これらのパラメーターのうち少なくとも 1 つは NULL 以外でなければなりません。
単一のプロセスでホストされているすべての COM+ アプリケーション、または指定したそれらのアプリケーションのサブセットについて、概要情報を取得します。
| ApplicationInstanceId | GUID* | in | 選択するトラッキング対象プロセスを一意に識別するアプリケーションインスタンス GUID。代わりに ProcessId パラメーターで選択する場合は GUID_NULL。 |
| ProcessId | DWORD | in | 選択するプロセスを識別するプロセス ID。代わりに ApplicationInstanceId で選択する場合は 0。 |
| PartitionId | GUID* | in | 結果をフィルターするパーティション ID。すべてのパーティションを対象とする場合は GUID_NULL。 |
| Flags | DWORD | in | 結果をフィルターし、返すデータを選択するための GetAppTrackerDataFlags 列挙体のフラグの組み合わせ。次のフラグがサポートされます: GATD_INCLUDE_LIBRARY_APPS、GATD_INCLUDE_SWC、GATD_INCLUDE_APPLICATION_NAME。詳細については以下の解説を参照してください。 |
| NumApplicationsInProcess | DWORD* | out | 戻り時に、PartitionId と Flags で指定されたフィルター条件に一致する、プロセス内のアプリケーションの数。 |
| Applications | ApplicationSummary** | out | 戻り時に、一致するアプリケーションの ApplicationSummary 構造体の配列。 |
戻り値
このメソッドは、標準の戻り値 E_INVALIDARG および E_OUTOFMEMORY のほか、次の値を返す場合があります。
| 戻りコード | 説明 |
|---|---|
| メソッドは正常に完了し、結果は Applications パラメーターに格納されています。 | |
| メソッドは正常に完了しましたが、フィルター条件に一致するプロセスはありませんでした。 | |
| 指定されたプロセスが存在しないか、トラッキング対象の COM+ アプリケーションをホストしていません。 |
解説(Remarks)
プロセスは、そのアプリケーションインスタンス ID またはプロセス ID のいずれかで選択できますが、両方を同時に使用することはできません。プロセスが終了するとプロセス ID が再利用される可能性があるため、通常はアプリケーションインスタンス ID による選択が推奨されます。ただし、プログラムへのコマンドライン引数など、別のソースからプロセス ID を取得する場合は、プロセス ID による選択が役立つことがあります。
Flags に GATD_INCLUDE_LIBRARY_APPS も GATD_INCLUDE_SWC も設定されていない場合、結果には COM+ サーバーアプリケーションのみが含まれます。GATD_INCLUDE_LIBRARY_APPS が設定されている場合、プロセス内の COM+ ライブラリアプリケーション(存在する場合)も含まれます。GATD_INCLUDE_SWC が設定されており、プロセスが 1 つ以上の Services Without Components コンテキストをホストしている場合、結果には SWC コンテキストの概要を示す単一の擬似アプリケーションエントリも含まれます。
単一のプロセスでホストされているすべての COM+ コンポーネント、または指定したそれらのコンポーネントのサブセットについて、概要情報を取得します。
| ApplicationInstanceId | GUID* | in | 選択するトラッキング対象プロセスを一意に識別するアプリケーションインスタンス GUID。代わりに ProcessId パラメーターで選択する場合は GUID_NULL。 |
| ProcessId | DWORD | in | 選択するプロセスを識別するプロセス ID。代わりに ApplicationInstanceId パラメーターで選択する場合は 0。 |
| PartitionId | GUID* | in | 結果をフィルターするパーティション ID。すべてのパーティションを対象とする場合は GUID_NULL。 |
| ApplicationId | GUID* | in | 結果をフィルターするアプリケーション ID。すべてのアプリケーションを対象とする場合は GUID_NULL。 |
| Flags | DWORD | in | 結果をフィルターし、返すデータを選択するための GetAppTrackerDataFlags 列挙体のフラグの組み合わせ。次のフラグがサポートされます: GATD_INCLUDE_LIBRARY_APPS、GATD_INCLUDE_SWC、GATD_INCLUDE_CLASS_NAME、GATD_INCLUDE_APPLICATION_NAME。詳細については以下の解説を参照してください。 |
| NumComponentsInProcess | DWORD* | out | 戻り時に、PartitionId、ApplicationId、Flags で指定されたフィルター条件に一致する、プロセス内のコンポーネントの数。 |
| Components | ComponentSummary** | out | 戻り時に、一致するコンポーネントの ComponentSummary 構造体の配列。 |
戻り値
このメソッドは、標準の戻り値 E_INVALIDARG および E_OUTOFMEMORY のほか、次の値を返す場合があります。
| 戻りコード | 説明 |
|---|---|
| メソッドは正常に完了し、結果は Components パラメーターに格納されています。 | |
| メソッドは正常に完了しましたが、フィルター条件に一致するコンポーネントはありませんでした。 | |
| 指定されたプロセスが存在しないか、トラッキング対象の COM+ アプリケーションをホストしていません。 |
解説(Remarks)
プロセスは、そのアプリケーションインスタンス ID またはプロセス ID のいずれかで選択できますが、両方を同時に使用することはできません。プロセスが終了するとプロセス ID が再利用される可能性があるため、通常はアプリケーションインスタンス ID による選択が推奨されます。ただし、プログラムへのコマンドライン引数など、別のソースからプロセス ID を取得する場合は、プロセス ID による選択が役立つことがあります。
Flags に GATD_INCLUDE_LIBRARY_APPS も GATD_INCLUDE_SWC も設定されていない場合、結果には COM+ サーバーアプリケーションのコンポーネントのみが含まれます。GATD_INCLUDE_LIBRARY_APPS が設定されている場合、プロセス内の COM+ ライブラリアプリケーションのコンポーネント(存在する場合)も含まれます。GATD_INCLUDE_SWC が設定されている場合、結果には Services Without Components コンテキストのエントリも含まれます。
ApplicationId を使用してアプリケーションを指定する場合(GUID_NULL に設定されていない場合)、GATD_INCLUDE_LIBRARY_APPS フラグと GATD_INCLUDE_SWC フラグは意味を持たず、それらを使用することは無効です。指定したアプリケーションのコンポーネントが、そのアプリケーションの種類にかかわらず返されます。
プロセス内でホストされている単一の COM+ コンポーネントに関する詳細情報を取得します。
| ApplicationInstanceId | GUID* | in | 選択するトラッキング対象プロセスを一意に識別するアプリケーションインスタンス GUID。代わりに ProcessId パラメーターで選択する場合は GUID_NULL。 |
| ProcessId | DWORD | in | 選択するプロセスを識別するプロセス ID。代わりに ApplicationInstanceId で選択する場合は 0。 |
| Clsid | GUID* | in | コンポーネントの CLSID。 |
| Flags | DWORD | in | 返すデータを選択するための GetAppTrackerDataFlags 列挙体のフラグの組み合わせ。次のフラグがサポートされます: GATD_INCLUDE_CLASS_NAME(概要を取得する場合)、GATD_INCLUDE_APPLICATION_NAME(概要を取得する場合)。 |
| Summary | ComponentSummary* | outoptional | 戻り時に、コンポーネントの概要情報を格納する ComponentSummary 構造体。このパラメーターは NULL にできます。 |
| Statistics | ComponentStatistics* | outoptional | 戻り時に、コンポーネントの統計情報を格納する ComponentStatistics 構造体。このパラメーターは NULL にできます。 |
| HangMonitorInfo | ComponentHangMonitorInfo* | outoptional | 戻り時に、コンポーネントのハング監視構成を格納する ComponentHangMonitorInfo 構造体。このパラメーターは NULL にできます。 |
戻り値
このメソッドは、標準の戻り値 E_INVALIDARG および E_OUTOFMEMORY のほか、次の値を返す場合があります。
| 戻りコード | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
| 指定されたプロセスが存在しないか、トラッキング対象の COM+ アプリケーションをホストしていません。 | |
| 指定されたコンポーネントは、指定されたプロセスに存在しません。 |
解説(Remarks)
プロセスは、そのアプリケーションインスタンス ID またはプロセス ID のいずれかで選択できますが、両方を同時に使用することはできません。プロセスが終了するとプロセス ID が再利用される可能性があるため、通常はアプリケーションインスタンス ID による選択が推奨されます。ただし、プログラムへのコマンドライン引数など、別のソースからプロセス ID を取得する場合は、プロセス ID による選択が役立つことがあります。
Summary、Statistics、HangMonitorInfo に NULL 以外の値を渡すことで、コンポーネントについて利用可能な情報の一部またはすべてを要求できます。これらのパラメーターのうち少なくとも 1 つは NULL 以外でなければなりません。
すべての COM+ アプリケーションのトラッキングデータを、コレクションオブジェクトの形式で取得します。
| TopLevelCollection | IUnknown** | out | 戻り時に、トラッカーデータのコレクションに対する IUnknown インターフェイス。 |
戻り値
このメソッドは、標準の戻り値 E_INVALIDARG、E_OUTOFMEMORY、S_OK を返す場合があります。
解説(Remarks)
このメソッドは主に、IComTrackingInfoEvents イベントインターフェイスをサブスクライブするアプリケーションが、コードへの変更を最小限に抑えて IGetAppTrackerData のサポートを追加できるようにすることを目的としています。このメソッドが返すオブジェクトは、サブスクライバーの IComTrackingInfoEvent::OnNewTrackingInfo メソッドの呼び出しで送信されるオブジェクトと同一であるため、このコレクションを走査および解析するコードを再利用できます。
アプリケーションは、このメソッドがサーバーの推奨ポーリング間隔(IGetAppTrackerData::GetSuggestedPollingInterval を参照)よりも頻繁に新しく更新されたトラッキングデータを返すことを期待すべきではありません。
このメソッドが返すコレクションオブジェクトには、他のメソッドを呼び出すことで取得できるすべてのトラッキングデータが含まれるわけではないことに注意してください。特に、リサイクルの詳細とハング監視構成は提供されません。
Tracker Server が推奨する最小ポーリング間隔を取得します。
| PollingIntervalInSeconds | DWORD* | out | Tracker Server の推奨ポーリング間隔(秒)。 |
戻り値
このメソッドは、標準の戻り値 E_INVALIDARG および S_OK を返す場合があります。
解説(Remarks)
トラッカーデータを使用するアプリケーションは、通常、このデータを最新の状態に保つために Tracker Server を定期的にポーリングする必要があります。たとえば、トラッキングデータをユーザーに表示する管理アプリケーションでは、通常このデータをできる限りリアルタイムに近い状態にしたいと考えます。しかし、あまりに頻繁にポーリングすると、システム全体のパフォーマンスが低下する可能性があります。また、データを更新する COM+ アプリケーションは Tracker Server に即座に更新を送信するわけではないため、最良の場合でも多少の遅延(通常は数秒程度)が生じることに留意してください。
ポーリング頻度はグローバルなポリシーであり、管理者は、管理対象システムで使用している特定のツールセットについて、データの鮮度とパフォーマンスへの影響のバランスを取るために必要に応じて調整できます。PollingIntervalInSeconds で返される値は、トラッキングデータを取得してから同じデータを取得する次の呼び出しを行うまでにアプリケーションが待機すべき最小時間です。Tracker Server をポーリングするアプリケーションは、このメソッドを呼び出し、それに応じてポーリング動作を調整する必要があります。
ポーリング間隔は既定でトラッキングイベントの頻度(3 秒)と等しくなります。この値は、次の REG_DWORD レジストリ値を書き込むことで調整できます。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\COM3\TrackingInfoPollingFrequency = 最小ポーリング間隔
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IGetAppTrackerData "{507C3AC8-3E12-4CB0-9366-653D3E050638}" #usecom global IGetAppTrackerData IID_IGetAppTrackerData "{}" #comfunc global IGetAppTrackerData_GetApplicationProcesses 3 var,var,int,var,var #comfunc global IGetAppTrackerData_GetApplicationProcessDetails 4 var,int,int,var,var,var,var #comfunc global IGetAppTrackerData_GetApplicationsInProcess 5 var,int,var,int,var,var #comfunc global IGetAppTrackerData_GetComponentsInProcess 6 var,int,var,var,int,var,var #comfunc global IGetAppTrackerData_GetComponentDetails 7 var,int,var,int,var,var,var #comfunc global IGetAppTrackerData_GetTrackerDataAsCollectionObject 8 sptr #comfunc global IGetAppTrackerData_GetSuggestedPollingInterval 9 var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IGetAppTrackerData "{507C3AC8-3E12-4CB0-9366-653D3E050638}" #usecom global IGetAppTrackerData IID_IGetAppTrackerData "{}" #comfunc global IGetAppTrackerData_GetApplicationProcesses 3 sptr,sptr,int,sptr,sptr #comfunc global IGetAppTrackerData_GetApplicationProcessDetails 4 sptr,int,int,sptr,sptr,sptr,sptr #comfunc global IGetAppTrackerData_GetApplicationsInProcess 5 sptr,int,sptr,int,sptr,sptr #comfunc global IGetAppTrackerData_GetComponentsInProcess 6 sptr,int,sptr,sptr,int,sptr,sptr #comfunc global IGetAppTrackerData_GetComponentDetails 7 sptr,int,sptr,int,sptr,sptr,sptr #comfunc global IGetAppTrackerData_GetTrackerDataAsCollectionObject 8 sptr #comfunc global IGetAppTrackerData_GetSuggestedPollingInterval 9 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。