ITraceDataProvider
COMIDispatch (デュアル)comobj 経由でメソッド名による遅延バインド呼び出しができます(vtableインデックス不要)。公式ドキュメント
トレースセッションで有効にするトレースプロバイダーを指定します。
解説(Remarks)
特定のプロバイダーの表示名または GUID のみを取得したい場合や、そのプロバイダーとして登録されているプロセスの一覧のみを取得したい場合は、CoCreateInstance 関数を呼び出し、クラス識別子として __uuidof(TraceDataProvider) を、インターフェイス識別子として __uuidof(ITraceDataProvider) を渡すことで、このインターフェイスを取得できます。この目的でスクリプトからオブジェクトを作成するには、Pla.TraceDataProvider プログラム識別子を使用します。
インターフェイスを ITraceDataProviderCollection コレクションに追加する場合は、CoCreateInstance 関数を使用しないでください。
メソッド 19
vtbl = vtable インデックス(0始まり)。IDispatch 実装のため HSP ではメソッド名でも呼べます(上記)。低レベルの index 呼び出し用に vtbl も掲載。0〜2 は IUnknown。
プロバイダーの表示名を取得または設定します。(Get)
| name | LPWSTR* | out | 現在の表示名を受け取るポインタである。 |
プロバイダーの表示名を取得または設定します。(Put)
| name | LPWSTR | in | 表示名を設定する。 |
プロバイダーの GUID を取得または設定します。(Get)
| guid | GUID* | out | 現在のGUIDを受け取るポインタである。 |
プロバイダーの GUID を取得または設定します。(Put)
| guid | GUID | in | GUIDを設定する。 |
プロバイダーを有効にするために使用する情報のレベルを取得します。
| ppLevel | IValueMap** | out | トレースレベルを表す IValueMap を受け取るポインタである。 |
解説(Remarks)
ppLevel パラメーターは、イベントが生成する情報のレベルを指定するプロバイダー定義の値です。たとえば、この値を使用して、プロバイダーに生成させたいイベントの重大度レベル(情報、警告、エラー)を示すことができます。
レベル値の取得または設定には IValueMap インターフェイスを使用します。IValueMap::Value プロパティにはレベル値が格納されます。
また、IValueMap::Add メソッドを使用して 1 つ以上のレベル値を追加することもできます。IValueMapItem インターフェイスを使用する必要があるのは、レベルに名前を付けたい場合、またはレベルを追加・削除せずに有効化・無効化したい場合のみです。有効にできるレベルは 1 つだけです。
IValueMapItem::Key プロパティにはレベルの文字列表現(例: Information)が格納されます。IValueMapItem::Value プロパティにはレベル値が格納されます。IValueMapItem::Enabled プロパティは、レベルが有効かどうかを示します。
IValueMap::Value を使用してレベルを設定し、値マップコレクションに 1 つ以上の項目が含まれている場合、PLA はコレクション内で一致する値を検索し、それを有効にして他を無効にします。値が一覧に存在しない場合、PLA はそのレベルを追加します(項目には名前が付きません)。
プロバイダーに書き込ませたいイベントのカテゴリを決定するキーワードの一覧を取得します。
| ppKeywords | IValueMap** | out | いずれかに一致するキーワードを表す IValueMap を受け取るポインタである。 |
解説(Remarks)
キーワードは、プロバイダーに書き込ませたいイベントのカテゴリを決定します。イベントのキーワードビットのいずれかが、この KeywordsAny マスクに設定されたビットのいずれかと一致する場合、プロバイダーはそのイベントを書き込みます。
プロバイダーが提供するすべてのイベントを含めるには、このプロパティを 0 に設定します。特定のイベントのみを含めるには、このキーワードマスクをそれらの特定のイベントに設定します。たとえば、プロバイダーが初期化およびクリーンアップルーチン用のイベント(ビット 0)、ファイル操作用のイベント(ビット 1)、計算操作用のイベント(ビット 2)を定義している場合、このマスクを 5(ビット 0 と 2 を設定)に設定することで、これらのイベントのうち 2 つのみ、つまり初期化・クリーンアップイベントと計算イベントを受け取るように選択できます。
プロバイダーに書き込ませたいイベントのカテゴリをさらに制限するには、ITraceDataProvider::KeywordsAll プロパティも設定します。
プロバイダーがより複雑なイベントキーワードを定義している場合(たとえば、読み取り用にビット 0、ローカルアクセス用にビット 1 を設定するイベントと、読み取り用にビット 0、リモートアクセス用にビット 2 を設定する 2 つ目のイベントを定義している場合)、このマスクを 1 に設定してすべての読み取りイベントを受け取ることも、このマスクを 1 に、KeywordsAll マスクを 3 に設定してローカル読み取りのみを受け取ることもできます。
イベントのキーワードが 0 の場合、プロバイダーはこのマスクや KeywordsAll マスクに関係なく、そのイベントをセッションに書き込みます。
Windows Vista より前のオペレーティングシステム向けに書かれたプロバイダーの場合、キーワード値は有効化フラグにマッピングされます。
キーワード値の取得または設定には IValueMap インターフェイスを使用します。IValueMap::Value プロパティを使用してキーワード値(マップ内のすべての項目を OR 演算子で結合した値)を取得することも、マップ内の各項目を列挙して個々のキーワード値を取得することもできます。
同様に、キーワード値を設定する場合は、IValueMap::Value プロパティを呼び出してキーワード値を設定するか、IValueMap::Add メソッドを呼び出して個々のキーワード値を追加します。
IValueMap::Value を使用してキーワードを設定し、値マップに 1 つ以上の項目が含まれている場合、PLA はコレクション内で一致する値を検索し、それらを有効にして他を無効にします。値が一覧に存在しない場合、PLA はそのキーワードを追加します(項目には名前が付きません)。
IValueMapItem::Key プロパティにはキーワードの文字列表現が格納されます。IValueMapItem::Value プロパティにはキーワード値が格納されます。IValueMapItem::Enabled プロパティは、キーワードが有効かどうかを示します。IValueMapItem インターフェイスを使用する必要があるのは、キーワードに名前を付けたい場合、またはキーワードを追加・削除せずに有効化・無効化したい場合のみです。
プロバイダーに書き込ませたいイベントのカテゴリを制限するキーワードの一覧を取得します。
| ppKeywords | IValueMap** | out | すべてに一致するキーワードを表す IValueMap を受け取るポインタである。 |
解説(Remarks)
イベントのキーワードビットのいずれかが KeywordsAny プロパティに設定されたビットのいずれかと一致する場合、プロバイダーはそのイベントを書き込みます。 KeywordsAll プロパティで指定されたキーワードは、プロバイダーに書き込ませたいイベントのカテゴリをさらに制限します。イベントのキーワードが KeywordsAny の条件を満たす場合、プロバイダーは KeywordsAll マスク内のすべてのビットがイベントのキーワードに存在する場合にのみ、そのイベントを書き込みます。KeywordsAny が 0 の場合、KeywordsAll マスクは使用されません。
KeywordsAll と KeywordsAny の条件がどのように関連するかについて詳しくは、KeywordsAny の「解説」セクションを参照してください。
キーワード値の取得または設定には IValueMap インターフェイスを使用します。IValueMap::Value プロパティを使用してキーワード値(マップ内のすべての項目を OR 演算子で結合した値)を取得することも、マップ内の各項目を列挙して個々のキーワード値を取得することもできます。
同様に、キーワード値を設定する場合は、IValueMap::Value プロパティを呼び出してキーワード値を設定するか、IValueMap::Add メソッドを呼び出して個々のキーワード値を追加します。
IValueMap::Value を使用してキーワードを設定し、値マップに 1 つ以上の項目が含まれている場合、PLA はコレクション内で一致する値を検索し、それらを有効にして他を無効にします。値が一覧に存在しない場合、PLA はそのキーワードを追加します(項目には名前が付きません)。
IValueMapItem::Key プロパティにはキーワードの文字列表現が格納されます。IValueMapItem::Value プロパティにはキーワード値が格納されます。IValueMapItem::Enabled プロパティは、キーワードが有効かどうかを示します。IValueMapItem インターフェイスを使用する必要があるのは、キーワードに名前を付けたい場合、またはキーワードを追加・削除せずに有効化・無効化したい場合のみです。
Event Tracing for Windows (ETW) がイベントに含める拡張データ項目の一覧を取得します。
| ppProperties | IValueMap** | out | プロバイダーのプロパティを表す IValueMap を受け取るポインタである。 |
解説(Remarks)
このプロパティを使用して、イベントとともに次のデータ項目を要求します。
| データ項目 | 説明 |
|---|---|
| Sid (値 0x01) | ユーザーのセキュリティ識別子を含めます。 |
| SessionId (値 0x02) | セッション識別子を含めます。 |
| StackTrace (値 0x04) | スタックトレースを含めます。 |
拡張データ項目の取得または指定には IValueMap インターフェイスを使用します。IValueMap::Value プロパティには OR 演算子で結合された項目が格納されます。IValueMapItem::Key プロパティには拡張データ項目の文字列表現が格納されます。IValueMapItem::Value プロパティには拡張データ項目の値が格納されます。
フィルターデータをプロバイダーの有効化に使用するかどうかを決定する値を取得または設定します。(Get)
| FilterEnabled | VARIANT_BOOL* | out | 現在のフィルタが有効かどうかを受け取るポインタである。 |
フィルターデータをプロバイダーの有効化に使用するかどうかを決定する値を取得または設定します。(Put)
| FilterEnabled | VARIANT_BOOL | in | フィルタが有効かどうかを設定する。 |
プロバイダー定義のフィルタータイプを取得または設定します。(Get)
| pulType | DWORD* | out | フィルタの種類を受け取るポインタである。 |
プロバイダー定義のフィルタータイプを取得または設定します。(Put)
| ulType | DWORD | in | フィルタの種類を指定する。 |
フィルタリングの目的でトレースデータプロバイダーに送信される任意のデータを取得または設定します。(Get)
| ppData | SAFEARRAY** | out | フィルタデータを受け取るポインタである。 |
フィルタリングの目的でトレースデータプロバイダーに送信される任意のデータを取得または設定します。(Put)
| pData | SAFEARRAY* | in | 設定するフィルタデータを指定する。 |
登録済みプロバイダーに関する詳細を取得します。
| bstrName | LPWSTR | in | 登録済みプロバイダーの名前。名前は大文字と小文字を区別しません。プロバイダーの GUID の文字列形式を指定することもできます。 |
| bstrServer | LPWSTR | inoptional | プロバイダーが登録されているコンピューター。コンピューター名、完全修飾ドメイン名、または IP アドレスを指定できます。 |
戻り値
成功した場合は S_OK を返します。
解説(Remarks)
カーネルプロバイダーを指定するには、bstrName パラメーターを "Windows Kernel Trace" に設定します。
コンテキストロガーを指定するには、bstrName を "Circular Kernel Context Logger" に設定します。コンテキストロガーは、コンピューターの現在の状態のスナップショットを提供します。ロガーは(ファイルではなく)メモリ内の 100 メガバイトの循環ログに書き込みます。その内容をコンシューマーに公開するには、IDataCollectorSet::Commit メソッドを呼び出してセッションをフラッシュします。
プロバイダーに関する詳細をこのインスタンスにマージします。
| pFrom | IDispatch* | inoptional | このインスタンスにマージするプロバイダーのインターフェイス。 |
戻り値
成功した場合は S_OK を返します。
解説(Remarks)
プロバイダーのインターフェイス、またはそのプロバイダーを含むコレクションを指定できます。コレクションを指定した場合、このメソッドは一致するプロバイダーを検索します。
トレースデータプロバイダーのセキュリティ情報を設定します。
| Sddl | LPWSTR | in | オブジェクトのセキュリティ記述子を記述する文字列。詳しくは、Security Descriptor Definition Language を参照してください。 |
戻り値
成功した場合は S_OK を返します。
トレースデータプロバイダーのセキュリティ情報を取得します。
| SecurityInfo | DWORD | in | オブジェクトに関連するセキュリティ情報。詳しくは、SECURITY_INFORMATION データ型を参照してください。 |
| Sddl | LPWSTR* | out | オブジェクトのセキュリティ記述子を記述する文字列。詳しくは、Security Descriptor Definition Language を参照してください。 |
戻り値
成功した場合は S_OK を返します。
Event Tracing for Windows (ETW) プロバイダーとして登録されているプロセスの一覧を取得します。
| Processes | IValueMap** | out | ETW プロバイダーとして登録されているプロセスの一覧を含む IValueMap インターフェイス。IValueMapItem::Key プロパティにはバイナリの名前が格納され、IValueMapItem::Value プロパティにはプロセス識別子が格納されます。 |
戻り値
成功した場合は S_OK を返します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ITraceDataProvider "{03837512-098B-11D8-9414-505054503030}" #usecom global ITraceDataProvider IID_ITraceDataProvider "{03837513-098B-11D8-9414-505054503030}" #comfunc global ITraceDataProvider_get_DisplayName 7 var #comfunc global ITraceDataProvider_put_DisplayName 8 wstr #comfunc global ITraceDataProvider_get_Guid 9 var #comfunc global ITraceDataProvider_put_Guid 10 int #comfunc global ITraceDataProvider_get_Level 11 sptr #comfunc global ITraceDataProvider_get_KeywordsAny 12 sptr #comfunc global ITraceDataProvider_get_KeywordsAll 13 sptr #comfunc global ITraceDataProvider_get_Properties 14 sptr #comfunc global ITraceDataProvider_get_FilterEnabled 15 var #comfunc global ITraceDataProvider_put_FilterEnabled 16 int #comfunc global ITraceDataProvider_get_FilterType 17 var #comfunc global ITraceDataProvider_put_FilterType 18 int #comfunc global ITraceDataProvider_get_FilterData 19 var #comfunc global ITraceDataProvider_put_FilterData 20 var #comfunc global ITraceDataProvider_Query 21 wstr,wstr #comfunc global ITraceDataProvider_Resolve 22 sptr #comfunc global ITraceDataProvider_SetSecurity 23 wstr #comfunc global ITraceDataProvider_GetSecurity 24 int,var #comfunc global ITraceDataProvider_GetRegisteredProcesses 25 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。#define global IID_ITraceDataProvider "{03837512-098B-11D8-9414-505054503030}" #usecom global ITraceDataProvider IID_ITraceDataProvider "{03837513-098B-11D8-9414-505054503030}" #comfunc global ITraceDataProvider_get_DisplayName 7 sptr #comfunc global ITraceDataProvider_put_DisplayName 8 wstr #comfunc global ITraceDataProvider_get_Guid 9 sptr #comfunc global ITraceDataProvider_put_Guid 10 int #comfunc global ITraceDataProvider_get_Level 11 sptr #comfunc global ITraceDataProvider_get_KeywordsAny 12 sptr #comfunc global ITraceDataProvider_get_KeywordsAll 13 sptr #comfunc global ITraceDataProvider_get_Properties 14 sptr #comfunc global ITraceDataProvider_get_FilterEnabled 15 sptr #comfunc global ITraceDataProvider_put_FilterEnabled 16 int #comfunc global ITraceDataProvider_get_FilterType 17 sptr #comfunc global ITraceDataProvider_put_FilterType 18 int #comfunc global ITraceDataProvider_get_FilterData 19 sptr #comfunc global ITraceDataProvider_put_FilterData 20 sptr #comfunc global ITraceDataProvider_Query 21 wstr,wstr #comfunc global ITraceDataProvider_Resolve 22 sptr #comfunc global ITraceDataProvider_SetSecurity 23 wstr #comfunc global ITraceDataProvider_GetSecurity 24 int,sptr #comfunc global ITraceDataProvider_GetRegisteredProcesses 25 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。