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

EVENT_TRACE_PROPERTIES_V2

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

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

フィールド

フィールドサイズx64x86説明
WnodeWNODE_HEADER48+0+0WNODE_HEADERのセッション識別ヘッダ。BufferSizeとGuid・Flagsを設定する。
BufferSizeDWORD4+48+48各トレースバッファのサイズ。単位はKB。
MinimumBuffersDWORD4+52+52割り当てるバッファの最小数。
MaximumBuffersDWORD4+56+56割り当てるバッファの最大数。
MaximumFileSizeDWORD4+60+60ログファイルの最大サイズ。単位はMB。
LogFileModeDWORD4+64+64ログ動作モードのフラグ。循環・追記・リアルタイム等を指定する。
FlushTimerDWORD4+68+68バッファを強制フラッシュする間隔。単位は秒。
EnableFlagsEVENT_TRACE_FLAG4+72+72有効化するカーネルプロバイダのフラグ集合(EVENT_TRACE_FLAG)。
Anonymous1_Anonymous1_e__Union4+76+76AgeLimitとFlushThresholdを含む共用体。
NumberOfBuffersDWORD4+80+80現在割り当て済みのバッファ数。出力値。
FreeBuffersDWORD4+84+84未使用の空きバッファ数。出力値。
EventsLostDWORD4+88+88失われたイベント数。出力値。
BuffersWrittenDWORD4+92+92書き込まれたバッファ数。出力値。
LogBuffersLostDWORD4+96+96ログ書き込みに失敗したバッファ数。出力値。
RealTimeBuffersLostDWORD4+100+100リアルタイム配信で失われたバッファ数。出力値。
LoggerThreadIdHANDLE8/4+104+104ロガースレッドのID。出力値。
LogFileNameOffsetDWORD4+112+108ログファイル名文字列へのバイトオフセット。
LoggerNameOffsetDWORD4+116+112セッション名文字列へのバイトオフセット。
Anonymous2_Anonymous2_e__Union8/4+120+116V2の制御フラグやFilteredVersion等を含む共用体。
FilterDescCountDWORD4+128+120FilterDesc配列に含まれるフィルタ記述子の数。
FilterDescEVENT_FILTER_DESCRIPTOR*8/4+136+124EVENT_FILTER_DESCRIPTOR配列へのポインタ。システムフィルタを指定する。NULL可。
Anonymous3_Anonymous3_e__Union8+144+128QpcDeltaTracking等のV2追加情報を含む共用体。

共用体: _Anonymous1_e__Union x64 4B / x86 4B

フィールドサイズx64x86
AgeLimitINT4+0+0
FlushThresholdINT4+0+0

共用体: _Anonymous2_e__Union x64 8B / x86 4B

フィールドサイズx64x86
Anonymous_Anonymous_e__Struct8/4+0+0
V2ControlDWORD4+0+0

共用体: _Anonymous3_e__Union x64 8B / x86 8B

フィールドサイズx64x86
Anonymous_Anonymous_e__Struct8/4+0+0
V2OptionsULONGLONG8+0+0

各言語での定義

#include <windows.h>

// WNODE_HEADER  (x64 48 / x86 48 バイト)
typedef struct WNODE_HEADER {
    DWORD BufferSize;
    DWORD ProviderId;
    _Anonymous1_e__Union Anonymous1;
    _Anonymous2_e__Union Anonymous2;
    GUID Guid;
    DWORD ClientContext;
    DWORD Flags;
} WNODE_HEADER;

// EVENT_TRACE_PROPERTIES_V2  (x64 152 / x86 136 バイト)
typedef struct EVENT_TRACE_PROPERTIES_V2 {
    WNODE_HEADER Wnode;
    DWORD BufferSize;
    DWORD MinimumBuffers;
    DWORD MaximumBuffers;
    DWORD MaximumFileSize;
    DWORD LogFileMode;
    DWORD FlushTimer;
    EVENT_TRACE_FLAG EnableFlags;
    _Anonymous1_e__Union Anonymous1;
    DWORD NumberOfBuffers;
    DWORD FreeBuffers;
    DWORD EventsLost;
    DWORD BuffersWritten;
    DWORD LogBuffersLost;
    DWORD RealTimeBuffersLost;
    HANDLE LoggerThreadId;
    DWORD LogFileNameOffset;
    DWORD LoggerNameOffset;
    _Anonymous2_e__Union Anonymous2;
    DWORD FilterDescCount;
    EVENT_FILTER_DESCRIPTOR* FilterDesc;
    _Anonymous3_e__Union Anonymous3;
} EVENT_TRACE_PROPERTIES_V2;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WNODE_HEADER
{
    public uint BufferSize;
    public uint ProviderId;
    public _Anonymous1_e__Union Anonymous1;
    public _Anonymous2_e__Union Anonymous2;
    public Guid Guid;
    public uint ClientContext;
    public uint Flags;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct EVENT_TRACE_PROPERTIES_V2
{
    public WNODE_HEADER Wnode;
    public uint BufferSize;
    public uint MinimumBuffers;
    public uint MaximumBuffers;
    public uint MaximumFileSize;
    public uint LogFileMode;
    public uint FlushTimer;
    public uint EnableFlags;
    public _Anonymous1_e__Union Anonymous1;
    public uint NumberOfBuffers;
    public uint FreeBuffers;
    public uint EventsLost;
    public uint BuffersWritten;
    public uint LogBuffersLost;
    public uint RealTimeBuffersLost;
    public IntPtr LoggerThreadId;
    public uint LogFileNameOffset;
    public uint LoggerNameOffset;
    public _Anonymous2_e__Union Anonymous2;
    public uint FilterDescCount;
    public IntPtr FilterDesc;
    public _Anonymous3_e__Union Anonymous3;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WNODE_HEADER
    Public BufferSize As UInteger
    Public ProviderId As UInteger
    Public Anonymous1 As _Anonymous1_e__Union
    Public Anonymous2 As _Anonymous2_e__Union
    Public Guid As Guid
    Public ClientContext As UInteger
    Public Flags As UInteger
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure EVENT_TRACE_PROPERTIES_V2
    Public Wnode As WNODE_HEADER
    Public BufferSize As UInteger
    Public MinimumBuffers As UInteger
    Public MaximumBuffers As UInteger
    Public MaximumFileSize As UInteger
    Public LogFileMode As UInteger
    Public FlushTimer As UInteger
    Public EnableFlags As UInteger
    Public Anonymous1 As _Anonymous1_e__Union
    Public NumberOfBuffers As UInteger
    Public FreeBuffers As UInteger
    Public EventsLost As UInteger
    Public BuffersWritten As UInteger
    Public LogBuffersLost As UInteger
    Public RealTimeBuffersLost As UInteger
    Public LoggerThreadId As IntPtr
    Public LogFileNameOffset As UInteger
    Public LoggerNameOffset As UInteger
    Public Anonymous2 As _Anonymous2_e__Union
    Public FilterDescCount As UInteger
    Public FilterDesc As IntPtr
    Public Anonymous3 As _Anonymous3_e__Union
End Structure
import ctypes
from ctypes import wintypes

class WNODE_HEADER(ctypes.Structure):
    _fields_ = [
        ("BufferSize", wintypes.DWORD),
        ("ProviderId", wintypes.DWORD),
        ("Anonymous1", _Anonymous1_e__Union),
        ("Anonymous2", _Anonymous2_e__Union),
        ("Guid", GUID),
        ("ClientContext", wintypes.DWORD),
        ("Flags", wintypes.DWORD),
    ]

class EVENT_TRACE_PROPERTIES_V2(ctypes.Structure):
    _fields_ = [
        ("Wnode", WNODE_HEADER),
        ("BufferSize", wintypes.DWORD),
        ("MinimumBuffers", wintypes.DWORD),
        ("MaximumBuffers", wintypes.DWORD),
        ("MaximumFileSize", wintypes.DWORD),
        ("LogFileMode", wintypes.DWORD),
        ("FlushTimer", wintypes.DWORD),
        ("EnableFlags", wintypes.DWORD),
        ("Anonymous1", _Anonymous1_e__Union),
        ("NumberOfBuffers", wintypes.DWORD),
        ("FreeBuffers", wintypes.DWORD),
        ("EventsLost", wintypes.DWORD),
        ("BuffersWritten", wintypes.DWORD),
        ("LogBuffersLost", wintypes.DWORD),
        ("RealTimeBuffersLost", wintypes.DWORD),
        ("LoggerThreadId", ctypes.c_void_p),
        ("LogFileNameOffset", wintypes.DWORD),
        ("LoggerNameOffset", wintypes.DWORD),
        ("Anonymous2", _Anonymous2_e__Union),
        ("FilterDescCount", wintypes.DWORD),
        ("FilterDesc", ctypes.c_void_p),
        ("Anonymous3", _Anonymous3_e__Union),
    ]
#[repr(C)]
pub struct WNODE_HEADER {
    pub BufferSize: u32,
    pub ProviderId: u32,
    pub Anonymous1: _Anonymous1_e__Union,
    pub Anonymous2: _Anonymous2_e__Union,
    pub Guid: GUID,
    pub ClientContext: u32,
    pub Flags: u32,
}

#[repr(C)]
pub struct EVENT_TRACE_PROPERTIES_V2 {
    pub Wnode: WNODE_HEADER,
    pub BufferSize: u32,
    pub MinimumBuffers: u32,
    pub MaximumBuffers: u32,
    pub MaximumFileSize: u32,
    pub LogFileMode: u32,
    pub FlushTimer: u32,
    pub EnableFlags: u32,
    pub Anonymous1: _Anonymous1_e__Union,
    pub NumberOfBuffers: u32,
    pub FreeBuffers: u32,
    pub EventsLost: u32,
    pub BuffersWritten: u32,
    pub LogBuffersLost: u32,
    pub RealTimeBuffersLost: u32,
    pub LoggerThreadId: *mut core::ffi::c_void,
    pub LogFileNameOffset: u32,
    pub LoggerNameOffset: u32,
    pub Anonymous2: _Anonymous2_e__Union,
    pub FilterDescCount: u32,
    pub FilterDesc: *mut core::ffi::c_void,
    pub Anonymous3: _Anonymous3_e__Union,
}
import "golang.org/x/sys/windows"

type WNODE_HEADER struct {
	BufferSize uint32
	ProviderId uint32
	Anonymous1 _Anonymous1_e__Union
	Anonymous2 _Anonymous2_e__Union
	Guid windows.GUID
	ClientContext uint32
	Flags uint32
}

type EVENT_TRACE_PROPERTIES_V2 struct {
	Wnode WNODE_HEADER
	BufferSize uint32
	MinimumBuffers uint32
	MaximumBuffers uint32
	MaximumFileSize uint32
	LogFileMode uint32
	FlushTimer uint32
	EnableFlags uint32
	Anonymous1 _Anonymous1_e__Union
	NumberOfBuffers uint32
	FreeBuffers uint32
	EventsLost uint32
	BuffersWritten uint32
	LogBuffersLost uint32
	RealTimeBuffersLost uint32
	LoggerThreadId uintptr
	LogFileNameOffset uint32
	LoggerNameOffset uint32
	Anonymous2 _Anonymous2_e__Union
	FilterDescCount uint32
	FilterDesc uintptr
	Anonymous3 _Anonymous3_e__Union
}
type
  WNODE_HEADER = record
    BufferSize: DWORD;
    ProviderId: DWORD;
    Anonymous1: _Anonymous1_e__Union;
    Anonymous2: _Anonymous2_e__Union;
    Guid: TGUID;
    ClientContext: DWORD;
    Flags: DWORD;
  end;

  EVENT_TRACE_PROPERTIES_V2 = record
    Wnode: WNODE_HEADER;
    BufferSize: DWORD;
    MinimumBuffers: DWORD;
    MaximumBuffers: DWORD;
    MaximumFileSize: DWORD;
    LogFileMode: DWORD;
    FlushTimer: DWORD;
    EnableFlags: DWORD;
    Anonymous1: _Anonymous1_e__Union;
    NumberOfBuffers: DWORD;
    FreeBuffers: DWORD;
    EventsLost: DWORD;
    BuffersWritten: DWORD;
    LogBuffersLost: DWORD;
    RealTimeBuffersLost: DWORD;
    LoggerThreadId: Pointer;
    LogFileNameOffset: DWORD;
    LoggerNameOffset: DWORD;
    Anonymous2: _Anonymous2_e__Union;
    FilterDescCount: DWORD;
    FilterDesc: Pointer;
    Anonymous3: _Anonymous3_e__Union;
  end;
const WNODE_HEADER = extern struct {
    BufferSize: u32,
    ProviderId: u32,
    Anonymous1: _Anonymous1_e__Union,
    Anonymous2: _Anonymous2_e__Union,
    Guid: GUID,
    ClientContext: u32,
    Flags: u32,
};

const EVENT_TRACE_PROPERTIES_V2 = extern struct {
    Wnode: WNODE_HEADER,
    BufferSize: u32,
    MinimumBuffers: u32,
    MaximumBuffers: u32,
    MaximumFileSize: u32,
    LogFileMode: u32,
    FlushTimer: u32,
    EnableFlags: u32,
    Anonymous1: _Anonymous1_e__Union,
    NumberOfBuffers: u32,
    FreeBuffers: u32,
    EventsLost: u32,
    BuffersWritten: u32,
    LogBuffersLost: u32,
    RealTimeBuffersLost: u32,
    LoggerThreadId: ?*anyopaque,
    LogFileNameOffset: u32,
    LoggerNameOffset: u32,
    Anonymous2: _Anonymous2_e__Union,
    FilterDescCount: u32,
    FilterDesc: ?*anyopaque,
    Anonymous3: _Anonymous3_e__Union,
};
type
  WNODE_HEADER {.bycopy.} = object
    BufferSize: uint32
    ProviderId: uint32
    Anonymous1: _Anonymous1_e__Union
    Anonymous2: _Anonymous2_e__Union
    Guid: GUID
    ClientContext: uint32
    Flags: uint32

  EVENT_TRACE_PROPERTIES_V2 {.bycopy.} = object
    Wnode: WNODE_HEADER
    BufferSize: uint32
    MinimumBuffers: uint32
    MaximumBuffers: uint32
    MaximumFileSize: uint32
    LogFileMode: uint32
    FlushTimer: uint32
    EnableFlags: uint32
    Anonymous1: _Anonymous1_e__Union
    NumberOfBuffers: uint32
    FreeBuffers: uint32
    EventsLost: uint32
    BuffersWritten: uint32
    LogBuffersLost: uint32
    RealTimeBuffersLost: uint32
    LoggerThreadId: pointer
    LogFileNameOffset: uint32
    LoggerNameOffset: uint32
    Anonymous2: _Anonymous2_e__Union
    FilterDescCount: uint32
    FilterDesc: pointer
    Anonymous3: _Anonymous3_e__Union
struct WNODE_HEADER
{
    uint BufferSize;
    uint ProviderId;
    _Anonymous1_e__Union Anonymous1;
    _Anonymous2_e__Union Anonymous2;
    GUID Guid;
    uint ClientContext;
    uint Flags;
}

struct EVENT_TRACE_PROPERTIES_V2
{
    WNODE_HEADER Wnode;
    uint BufferSize;
    uint MinimumBuffers;
    uint MaximumBuffers;
    uint MaximumFileSize;
    uint LogFileMode;
    uint FlushTimer;
    uint EnableFlags;
    _Anonymous1_e__Union Anonymous1;
    uint NumberOfBuffers;
    uint FreeBuffers;
    uint EventsLost;
    uint BuffersWritten;
    uint LogBuffersLost;
    uint RealTimeBuffersLost;
    void* LoggerThreadId;
    uint LogFileNameOffset;
    uint LoggerNameOffset;
    _Anonymous2_e__Union Anonymous2;
    uint FilterDescCount;
    void* FilterDesc;
    _Anonymous3_e__Union Anonymous3;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; EVENT_TRACE_PROPERTIES_V2 サイズ: 136 バイト(x86)
dim st, 34    ; 4byte整数×34(構造体サイズ 136 / 4 切り上げ)
; Wnode : WNODE_HEADER (+0, 48byte)  varptr(st)+0 を基点に操作(48byte:入れ子/配列)
; BufferSize : DWORD (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; MinimumBuffers : DWORD (+52, 4byte)  st.13 = 値  /  値 = st.13   (lpoke/lpeek も可)
; MaximumBuffers : DWORD (+56, 4byte)  st.14 = 値  /  値 = st.14   (lpoke/lpeek も可)
; MaximumFileSize : DWORD (+60, 4byte)  st.15 = 値  /  値 = st.15   (lpoke/lpeek も可)
; LogFileMode : DWORD (+64, 4byte)  st.16 = 値  /  値 = st.16   (lpoke/lpeek も可)
; FlushTimer : DWORD (+68, 4byte)  st.17 = 値  /  値 = st.17   (lpoke/lpeek も可)
; EnableFlags : EVENT_TRACE_FLAG (+72, 4byte)  st.18 = 値  /  値 = st.18   (lpoke/lpeek も可)
; Anonymous1 : _Anonymous1_e__Union (+76, 4byte)  varptr(st)+76 を基点に操作(4byte:入れ子/配列)
; NumberOfBuffers : DWORD (+80, 4byte)  st.20 = 値  /  値 = st.20   (lpoke/lpeek も可)
; FreeBuffers : DWORD (+84, 4byte)  st.21 = 値  /  値 = st.21   (lpoke/lpeek も可)
; EventsLost : DWORD (+88, 4byte)  st.22 = 値  /  値 = st.22   (lpoke/lpeek も可)
; BuffersWritten : DWORD (+92, 4byte)  st.23 = 値  /  値 = st.23   (lpoke/lpeek も可)
; LogBuffersLost : DWORD (+96, 4byte)  st.24 = 値  /  値 = st.24   (lpoke/lpeek も可)
; RealTimeBuffersLost : DWORD (+100, 4byte)  st.25 = 値  /  値 = st.25   (lpoke/lpeek も可)
; LoggerThreadId : HANDLE (+104, 4byte)  st.26 = 値  /  値 = st.26   (lpoke/lpeek も可)
; LogFileNameOffset : DWORD (+108, 4byte)  st.27 = 値  /  値 = st.27   (lpoke/lpeek も可)
; LoggerNameOffset : DWORD (+112, 4byte)  st.28 = 値  /  値 = st.28   (lpoke/lpeek も可)
; Anonymous2 : _Anonymous2_e__Union (+116, 4byte)  varptr(st)+116 を基点に操作(4byte:入れ子/配列)
; FilterDescCount : DWORD (+120, 4byte)  st.30 = 値  /  値 = st.30   (lpoke/lpeek も可)
; FilterDesc : EVENT_FILTER_DESCRIPTOR* (+124, 4byte)  varptr(st)+124 を基点に操作(4byte:入れ子/配列)
; Anonymous3 : _Anonymous3_e__Union (+128, 8byte)  varptr(st)+128 を基点に操作(8byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; EVENT_TRACE_PROPERTIES_V2 サイズ: 152 バイト(x64)
dim st, 38    ; 4byte整数×38(構造体サイズ 152 / 4 切り上げ)
; Wnode : WNODE_HEADER (+0, 48byte)  varptr(st)+0 を基点に操作(48byte:入れ子/配列)
; BufferSize : DWORD (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; MinimumBuffers : DWORD (+52, 4byte)  st.13 = 値  /  値 = st.13   (lpoke/lpeek も可)
; MaximumBuffers : DWORD (+56, 4byte)  st.14 = 値  /  値 = st.14   (lpoke/lpeek も可)
; MaximumFileSize : DWORD (+60, 4byte)  st.15 = 値  /  値 = st.15   (lpoke/lpeek も可)
; LogFileMode : DWORD (+64, 4byte)  st.16 = 値  /  値 = st.16   (lpoke/lpeek も可)
; FlushTimer : DWORD (+68, 4byte)  st.17 = 値  /  値 = st.17   (lpoke/lpeek も可)
; EnableFlags : EVENT_TRACE_FLAG (+72, 4byte)  st.18 = 値  /  値 = st.18   (lpoke/lpeek も可)
; Anonymous1 : _Anonymous1_e__Union (+76, 4byte)  varptr(st)+76 を基点に操作(4byte:入れ子/配列)
; NumberOfBuffers : DWORD (+80, 4byte)  st.20 = 値  /  値 = st.20   (lpoke/lpeek も可)
; FreeBuffers : DWORD (+84, 4byte)  st.21 = 値  /  値 = st.21   (lpoke/lpeek も可)
; EventsLost : DWORD (+88, 4byte)  st.22 = 値  /  値 = st.22   (lpoke/lpeek も可)
; BuffersWritten : DWORD (+92, 4byte)  st.23 = 値  /  値 = st.23   (lpoke/lpeek も可)
; LogBuffersLost : DWORD (+96, 4byte)  st.24 = 値  /  値 = st.24   (lpoke/lpeek も可)
; RealTimeBuffersLost : DWORD (+100, 4byte)  st.25 = 値  /  値 = st.25   (lpoke/lpeek も可)
; LoggerThreadId : HANDLE (+104, 8byte)  qpoke st,104,値 / qpeek(st,104)  ※IronHSPのみ。3.7/3.8は lpoke st,104,下位 : lpoke st,108,上位
; LogFileNameOffset : DWORD (+112, 4byte)  st.28 = 値  /  値 = st.28   (lpoke/lpeek も可)
; LoggerNameOffset : DWORD (+116, 4byte)  st.29 = 値  /  値 = st.29   (lpoke/lpeek も可)
; Anonymous2 : _Anonymous2_e__Union (+120, 8byte)  varptr(st)+120 を基点に操作(8byte:入れ子/配列)
; FilterDescCount : DWORD (+128, 4byte)  st.32 = 値  /  値 = st.32   (lpoke/lpeek も可)
; FilterDesc : EVENT_FILTER_DESCRIPTOR* (+136, 8byte)  varptr(st)+136 を基点に操作(8byte:入れ子/配列)
; Anonymous3 : _Anonymous3_e__Union (+144, 8byte)  varptr(st)+144 を基点に操作(8byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global GUID, pack=1
    #field int Data1
    #field short Data2
    #field short Data3
    #field byte Data4 8
#endstruct

#defstruct global WNODE_HEADER
    #field int BufferSize
    #field int ProviderId
    #field byte Anonymous1 8
    #field byte Anonymous2 8
    #field GUID Guid
    #field int ClientContext
    #field int Flags
#endstruct

#defstruct global EVENT_TRACE_PROPERTIES_V2
    #field WNODE_HEADER Wnode
    #field int BufferSize
    #field int MinimumBuffers
    #field int MaximumBuffers
    #field int MaximumFileSize
    #field int LogFileMode
    #field int FlushTimer
    #field int EnableFlags
    #field byte Anonymous1 4
    #field int NumberOfBuffers
    #field int FreeBuffers
    #field int EventsLost
    #field int BuffersWritten
    #field int LogBuffersLost
    #field int RealTimeBuffersLost
    #field intptr LoggerThreadId
    #field int LogFileNameOffset
    #field int LoggerNameOffset
    #field byte Anonymous2 8
    #field int FilterDescCount
    #field intptr FilterDesc
    #field byte Anonymous3 8
#endstruct

stdim st, EVENT_TRACE_PROPERTIES_V2        ; NSTRUCT 変数を確保
st->BufferSize = 100
mes "BufferSize=" + st->BufferSize
; ※union フィールドは byte 列で確保(NSTRUCT は union 非対応)。必要に応じ手動でアクセス。