Win32 API 日本語リファレンス
ホームSystem.Diagnostics.Etw › EVENT_FILTER_DESCRIPTOR

EVENT_FILTER_DESCRIPTOR

構造体
サイズx64: 16 バイト / x86: 16 バイト

サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。

フィールド

フィールドサイズx64x86説明
PtrULONGLONG8+0+0

Type メンバーで指定されたフィルターの種類に対応するフィルターデータへのポインターです。

Type メンバーに EVENT_FILTER_TYPE_PID が設定されている場合、Ptr メンバーはプロセス ID (PID) の配列を指します。

Type メンバーに EVENT_FILTER_TYPE_EVENT_ID が設定されている場合、Ptr メンバーは EVENT_FILTER_EVENT_ID 構造体を指します。この構造体には、イベント ID の配列と、指定したイベント ID に対してトレースを有効にするか無効にするかを決定するブール値が含まれます。

Type メンバーに EVENT_FILTER_TYPE_STACKWALK が設定されている場合、Ptr メンバーは EVENT_FILTER_EVENT_ID 構造体を指します。この構造体には、イベント ID の配列と、指定したイベント ID に対してスタックトレースを有効にするか無効にするかを決定するブール値が含まれます。

Type メンバーに EVENT_FILTER_TYPE_SCHEMATIZED が設定されている場合、フィルターの構成方法の詳細については EVENT_FILTER_HEADER 構造体を参照してください。

SizeDWORD4+8+8

データのサイズ (バイト単位) です。

データサイズの上限は、指定した Type メンバー (フィルターの種類) によって異なります。多くのフィルターの種類では、データサイズの上限はバイト単位で MAX_EVENT_FILTER_DATA_SIZE に制限されます。この値は evntprov.h ヘッダーファイルで 1024 と定義されています。

TypeDWORD4+12+12

フィルターを識別する、プロバイダー定義の値です。インストルメンテーションマニフェストで定義されたフィルターの場合は、このメンバーに EVENT_FILTER_TYPE_SCHEMATIZED を設定します。

このメンバーに指定できる値は、evntprov.h ヘッダーファイルで定義されています。

  • EVENT_FILTER_TYPE_NONE (0x00000000)

    フィルターなし。

  • EVENT_FILTER_TYPE_SCHEMATIZED (0x80000000)

    スキーマ化されたフィルターです。

    これは、プロバイダー側フィルター処理とも呼ばれる従来のフィルター構成です。コントローラーは、EnableTraceEnableTraceEx、または EnableTraceEx2 の呼び出しでプロバイダーに渡されるバイナリオブジェクトとして、独自のフィルターセットを定義します。これらのフィルターを定義し解釈するのはコントローラーとプロバイダーの役割であり、コントローラーは該当するイベントのみをログに記録する必要があります。フィルター処理できる内容を表すバイナリオブジェクトの型と形式は定義されていないため、コントローラーとプロバイダーを密接に対応付ける必要があります。マニフェストで定義されたフィルターを取得するには、TdhEnumerateProviderFilters 関数を使用できます。

    スキーマ化されたフィルターの詳細については、Defining Filters を参照してください。

  • EVENT_FILTER_TYPE_SYSTEM_FLAGS (0x80000001)

    内部使用のために予約済みです。

  • EVENT_FILTER_TYPE_TRACEHANDLE (0x80000002)

    特定のトレースセッションのランダウンを取得するために使用します。EnableTraceEx 関数に渡す ControlCode パラメーターには EVENT_CONTROL_CODE_CAPTURE_STATE を設定し、ProviderId パラメーターには SystemTraceControlGuid を指定しなければなりません。EVENT_FILTER_DESCRIPTOR 構造体は、現在の ETW セッションを表す単一の TRACEHANDLE を指すようにします。そのセッションに対してランダウンが実行されます。

  • EVENT_FILTER_TYPE_PID (0x80000004)

    プロセス ID です。これはスコープフィルターの 1 つです。

    プロセス ID に基づいて ETW イベントをフィルター処理すると、指定したプロセス内のプロバイダーからのイベントのみを含むイベントストリーム (ファイルまたはリアルタイム) が得られます。プロバイダーは、指定された PID を持つプロセス内でのみ有効になります。PID のリストは、EnableTraceEx2 が呼び出された時点で実行中のプロセスの PID であり、その時点で (PID が指定された) すべてのプロセスでプロバイダーを有効にします。PID のリストはセッションに保存されません。そのため、プロセスが終了した後に再び現れても、そのプロセス内のプロバイダーがトレースセッションに対して自動的に有効になることはありません。プライベートロガーセッションはユーザーモードプロセス内で実行されるため、PID に基づくフィルターブロブはカーネルモードのロガーセッションでのみ有効です。

    フィルター処理できるプロセス ID の最大数は、evntprov.h ヘッダーファイルで 8 と定義されている MAX_EVENT_FILTER_PID_COUNT によって制限されます。

    プロセス ID フィルターを指定した場合、プロバイダーはユーザーモードプロセスでのみ有効になります。同じプロバイダーがカーネルモードドライバーによって登録されている場合、そのプロバイダーは有効になりません。

    これは、システム全体のプライベートロガーで EVENT_TRACE_PROPERTIES_V2 と共に使用します。

  • EVENT_FILTER_TYPE_EXECUTABLE_NAME (0x80000008)

    実行可能ファイル名です。これはスコープフィルターの 1 つです。

    これは、システム全体のプライベートロガーで EVENT_TRACE_PROPERTIES_V2 と共に使用します。

  • EVENT_FILTER_TYPE_PACKAGE_ID (0x80000010)

    パッケージ ID です。これはスコープフィルターの 1 つです

    これを使用すると、特定の Windows ストアアプリパッケージから生成されたイベントのみにプロバイダーを絞り込むことができます。

  • EVENT_FILTER_TYPE_PACKAGE_APP_ID (0x80000020)

    パッケージ相対アプリ ID (PRAID) です。これはスコープフィルターの 1 つです

    これを使用すると、特定の Windows ストアアプリパッケージから生成されたイベントのみにプロバイダーを絞り込むことができます。

  • EVENT_FILTER_TYPE_PAYLOAD (0x80000100)

    イベントペイロード (イベントの内容) です。

    イベントペイロードフィルターのデータサイズの上限は、バイト単位で MAX_EVENT_FILTER_PAYLOAD_SIZE に制限されます。この値は evntprov.h ヘッダーファイルで 4096 と定義されています。

  • EVENT_FILTER_TYPE_EVENT_ID (0x80000200)

    イベント ID です。

    この機能を使用すると、イベントのリストに対してフィルター処理を有効または無効にできます。指定するフィルターには EVENT_FILTER_EVENT_ID 構造体が含まれ、この構造体にはイベント ID の配列と、指定したイベントをフィルター処理の対象として有効にするか無効にするかを示すブール値が含まれます。イベントの書き込み呼び出しごとにこの配列を高速に走査し、そのイベントのログ記録を有効にするか無効にするかを判断します。

    TraceLogging プロバイダーに適用した場合、TraceLogging イベントには静的なイベント ID がないため、このフィルターは無視されます。

    EVENT_FILTER_EVENT_ID 構造体に指定できるイベント ID の最大数は、evntprov.h ヘッダーファイルで 64 と定義されている MAX_EVENT_FILTER_EVENT_ID_COUNT によって制限されます。

  • EVENT_FILTER_TYPE_EVENT_NAME (0x80000400)

    TraceLogging のイベント名です。

    この機能を使用すると、TraceLogging イベントを名前に基づいて有効または無効にできます。指定するフィルターには EVENT_FILTER_EVENT_NAME 構造体が含まれ、この構造体にはフィルター対象とするイベント名の配列、キーワードのビットマスク、レベルに加えて、記述されたイベントを有効にするか無効にするかを示すブール値が含まれます。TraceLogging 以外のプロバイダーに適用した場合、それらのイベントはペイロードに名前を持たないため、このフィルターは無視されます。

    注: Windows 10 バージョン 1709 以降で使用できます。

  • EVENT_FILTER_TYPE_STACKWALK (0x80001000)

    スタックウォークです。

    プロバイダーに対してスタックウォークを有効にすると、そのプロバイダーが生成するすべてのイベントについてスタックが取得されます。多くの場合、ユーザーが必要とするのは一部のイベントのスタックだけです。

    この機能を使用すると、イベントのリストに対してスタックウォークを有効または無効にできます。指定するフィルターには EVENT_FILTER_EVENT_ID 構造体が含まれ、この構造体にはイベント ID の配列と、指定したイベントに対してスタックの取得を有効にするか無効にするかを示すブール値が含まれます。イベントの書き込み呼び出しごとにこの配列を高速に走査し、スタックを取得するかどうかを判断します。

    TraceLogging プロバイダーに適用した場合、TraceLogging イベントには静的なイベント ID がないため、このフィルターは無視されます。

    このフィルターを使用する場合でも、プロバイダーからスタックを収集するには、プロバイダーを有効にする際に ENABLE_TRACE_PARAMETERS 構造体で EVENT_ENABLE_PROPERTY_STACK_TRACE を指定する必要があります。

    EVENT_FILTER_EVENT_ID 構造体に指定できるイベント ID の最大数は、evntprov.h ヘッダーファイルで 64 と定義されている MAX_EVENT_FILTER_EVENT_ID_COUNT によって制限されます。

    注: Windows 10 バージョン 1709 以降で使用できます。

  • EVENT_FILTER_TYPE_STACKWALK_NAME (0x80002000)

    TraceLogging のイベント名です。

    この機能を使用すると、TraceLogging イベントのスタック収集をイベント名に基づいてフィルター処理できます。指定するフィルターには EVENT_FILTER_EVENT_NAME 構造体が含まれ、この構造体にはフィルター対象とするイベント名の配列、キーワードのビットマスク、レベルに加えて、記述されたイベントに対してスタックを収集するかどうかを示すブール値が含まれます。

    TraceLogging 以外のプロバイダーに適用した場合、それらのイベントはペイロードに名前を持たないため、このフィルターは無視されます。

    このフィルターを使用する場合でも、プロバイダーからスタックを収集するには、プロバイダーを有効にする際に ENABLE_TRACE_PARAMETERS 構造体で EVENT_ENABLE_PROPERTY_STACK_TRACE を指定する必要があります。

    注: Windows 10 バージョン 1709 以降で使用できます。

  • EVENT_FILTER_TYPE_STACKWALK_LEVEL_KW (0x80004000)

    イベントのレベルとキーワードです。

    この機能を使用すると、イベントのスタック収集をレベルとキーワードに基づいてフィルター処理できます。指定するフィルターには EVENT_FILTER_LEVEL_KW 構造体が含まれ、この構造体にはフィルター対象とするキーワードのビットマスクとレベル、および記述されたイベントに対してスタックを収集するかどうかを示すブール値が含まれます。

    このフィルターを使用する場合でも、プロバイダーからスタックを収集するには、プロバイダーを有効にする際に ENABLE_TRACE_PARAMETERS 構造体で EVENT_ENABLE_PROPERTY_STACK_TRACE を指定する必要があります。

    注: Windows 10 バージョン 1709 以降で使用できます。

公式ドキュメント

EVENT_FILTER_DESCRIPTOR 構造体は、セッションがプロバイダーの有効化コールバック関数に渡すフィルターデータを定義します。

解説(Remarks)

データのレイアウトとその用途はプロバイダーが決定します。

Windows 8.1、Windows Server 2012 R2 以降では、イベントペイロード、スコープ、スタックウォークの各フィルターを EnableTraceEx2 関数、ENABLE_TRACE_PARAMETERS 構造体、および EVENT_FILTER_DESCRIPTOR 構造体で使用して、ロガーセッション内の特定の条件でフィルター処理できます。イベントペイロードフィルターの詳細については、EnableTraceEx2TdhCreatePayloadFilterTdhAggregatePayloadFilters の各関数と、ENABLE_TRACE_PARAMETERS および PAYLOAD_FILTER_PREDICATE 構造体を参照してください。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

#include <windows.h>

// EVENT_FILTER_DESCRIPTOR  (x64 16 / x86 16 バイト)
typedef struct EVENT_FILTER_DESCRIPTOR {
    ULONGLONG Ptr;
    DWORD Size;
    DWORD Type;
} EVENT_FILTER_DESCRIPTOR;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct EVENT_FILTER_DESCRIPTOR
{
    public ulong Ptr;
    public uint Size;
    public uint Type;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure EVENT_FILTER_DESCRIPTOR
    Public Ptr As ULong
    Public Size As UInteger
    Public Type As UInteger
End Structure
import ctypes
from ctypes import wintypes

class EVENT_FILTER_DESCRIPTOR(ctypes.Structure):
    _fields_ = [
        ("Ptr", ctypes.c_ulonglong),
        ("Size", wintypes.DWORD),
        ("Type", wintypes.DWORD),
    ]
#[repr(C)]
pub struct EVENT_FILTER_DESCRIPTOR {
    pub Ptr: u64,
    pub Size: u32,
    pub Type: u32,
}
import "golang.org/x/sys/windows"

type EVENT_FILTER_DESCRIPTOR struct {
	Ptr uint64
	Size uint32
	Type uint32
}
type
  EVENT_FILTER_DESCRIPTOR = record
    Ptr: UInt64;
    Size: DWORD;
    Type: DWORD;
  end;
const EVENT_FILTER_DESCRIPTOR = extern struct {
    Ptr: u64,
    Size: u32,
    Type: u32,
};
type
  EVENT_FILTER_DESCRIPTOR {.bycopy.} = object
    Ptr: uint64
    Size: uint32
    Type: uint32
struct EVENT_FILTER_DESCRIPTOR
{
    ulong Ptr;
    uint Size;
    uint Type;
}

HSP用 定義

HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; EVENT_FILTER_DESCRIPTOR サイズ: 16 バイト(x64)
dim st, 4    ; 4byte整数×4(構造体サイズ 16 / 4 切り上げ)
; Ptr : ULONGLONG (+0, 8byte)  qpoke st,0,値 / qpeek(st,0)  ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; Size : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; Type : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global EVENT_FILTER_DESCRIPTOR
    #field int64 Ptr
    #field int Size
    #field int Type
#endstruct

stdim st, EVENT_FILTER_DESCRIPTOR        ; NSTRUCT 変数を確保
st->Ptr = 100
mes "Ptr=" + st->Ptr