ホーム › System.Diagnostics.Etw › EVENT_TRACE_PROPERTIES
EVENT_TRACE_PROPERTIES
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| Wnode | WNODE_HEADER | 48 | +0 | +0 | WNODE_HEADERでセッション全体を識別する先頭ヘッダ。BufferSizeとGuid・Flagsを設定する。 |
| BufferSize | DWORD | 4 | +48 | +48 | 各トレースバッファのサイズ。単位はKBで指定する。 |
| MinimumBuffers | DWORD | 4 | +52 | +52 | 割り当てるバッファの最小数。 |
| MaximumBuffers | DWORD | 4 | +56 | +56 | 割り当てるバッファの最大数。 |
| MaximumFileSize | DWORD | 4 | +60 | +60 | ログファイルの最大サイズ。単位はMBで指定する。 |
| LogFileMode | DWORD | 4 | +64 | +64 | ログ動作モードのフラグ。循環・追記・リアルタイム等を指定する。 |
| FlushTimer | DWORD | 4 | +68 | +68 | バッファを強制フラッシュする間隔。単位は秒。0で既定値。 |
| EnableFlags | EVENT_TRACE_FLAG | 4 | +72 | +72 | 有効化するカーネルプロバイダのフラグ集合(EVENT_TRACE_FLAG)。 |
| Anonymous | _Anonymous_e__Union | 4 | +76 | +76 | AgeLimitとFlushThreshold等を含む共用体。バージョン依存の用途。 |
| NumberOfBuffers | DWORD | 4 | +80 | +80 | 現在割り当て済みのバッファ数。ETWが返す出力値。 |
| FreeBuffers | DWORD | 4 | +84 | +84 | 未使用の空きバッファ数。ETWが返す出力値。 |
| EventsLost | DWORD | 4 | +88 | +88 | 記録に失敗して失われたイベント数。出力値。 |
| BuffersWritten | DWORD | 4 | +92 | +92 | ディスクへ書き込まれたバッファ数。出力値。 |
| LogBuffersLost | DWORD | 4 | +96 | +96 | ログファイルへの書き込みに失敗したバッファ数。出力値。 |
| RealTimeBuffersLost | DWORD | 4 | +100 | +100 | リアルタイム配信で失われたバッファ数。出力値。 |
| LoggerThreadId | HANDLE | 8/4 | +104 | +104 | セッションを処理するロガースレッドのID。出力値。 |
| LogFileNameOffset | DWORD | 4 | +112 | +108 | 構造体先頭からログファイル名文字列までのバイトオフセット。0で未指定。 |
| LoggerNameOffset | DWORD | 4 | +116 | +112 | 構造体先頭からセッション名文字列までのバイトオフセット。 |
共用体: _Anonymous_e__Union x64 4B / x86 4B
| フィールド | 型 | サイズ | x64 | x86 |
|---|---|---|---|---|
| AgeLimit | INT | 4 | +0 | +0 |
| FlushThreshold | INT | 4 | +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 (x64 120 / x86 120 バイト)
typedef struct EVENT_TRACE_PROPERTIES {
WNODE_HEADER Wnode;
DWORD BufferSize;
DWORD MinimumBuffers;
DWORD MaximumBuffers;
DWORD MaximumFileSize;
DWORD LogFileMode;
DWORD FlushTimer;
EVENT_TRACE_FLAG EnableFlags;
_Anonymous_e__Union Anonymous;
DWORD NumberOfBuffers;
DWORD FreeBuffers;
DWORD EventsLost;
DWORD BuffersWritten;
DWORD LogBuffersLost;
DWORD RealTimeBuffersLost;
HANDLE LoggerThreadId;
DWORD LogFileNameOffset;
DWORD LoggerNameOffset;
} EVENT_TRACE_PROPERTIES;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
{
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 _Anonymous_e__Union Anonymous;
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;
}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
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 Anonymous As _Anonymous_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
End Structureimport 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(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),
("Anonymous", _Anonymous_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),
]#[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 {
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 Anonymous: _Anonymous_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,
}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 struct {
Wnode WNODE_HEADER
BufferSize uint32
MinimumBuffers uint32
MaximumBuffers uint32
MaximumFileSize uint32
LogFileMode uint32
FlushTimer uint32
EnableFlags uint32
Anonymous _Anonymous_e__Union
NumberOfBuffers uint32
FreeBuffers uint32
EventsLost uint32
BuffersWritten uint32
LogBuffersLost uint32
RealTimeBuffersLost uint32
LoggerThreadId uintptr
LogFileNameOffset uint32
LoggerNameOffset uint32
}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 = record
Wnode: WNODE_HEADER;
BufferSize: DWORD;
MinimumBuffers: DWORD;
MaximumBuffers: DWORD;
MaximumFileSize: DWORD;
LogFileMode: DWORD;
FlushTimer: DWORD;
EnableFlags: DWORD;
Anonymous: _Anonymous_e__Union;
NumberOfBuffers: DWORD;
FreeBuffers: DWORD;
EventsLost: DWORD;
BuffersWritten: DWORD;
LogBuffersLost: DWORD;
RealTimeBuffersLost: DWORD;
LoggerThreadId: Pointer;
LogFileNameOffset: DWORD;
LoggerNameOffset: DWORD;
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 = extern struct {
Wnode: WNODE_HEADER,
BufferSize: u32,
MinimumBuffers: u32,
MaximumBuffers: u32,
MaximumFileSize: u32,
LogFileMode: u32,
FlushTimer: u32,
EnableFlags: u32,
Anonymous: _Anonymous_e__Union,
NumberOfBuffers: u32,
FreeBuffers: u32,
EventsLost: u32,
BuffersWritten: u32,
LogBuffersLost: u32,
RealTimeBuffersLost: u32,
LoggerThreadId: ?*anyopaque,
LogFileNameOffset: u32,
LoggerNameOffset: u32,
};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 {.bycopy.} = object
Wnode: WNODE_HEADER
BufferSize: uint32
MinimumBuffers: uint32
MaximumBuffers: uint32
MaximumFileSize: uint32
LogFileMode: uint32
FlushTimer: uint32
EnableFlags: uint32
Anonymous: _Anonymous_e__Union
NumberOfBuffers: uint32
FreeBuffers: uint32
EventsLost: uint32
BuffersWritten: uint32
LogBuffersLost: uint32
RealTimeBuffersLost: uint32
LoggerThreadId: pointer
LogFileNameOffset: uint32
LoggerNameOffset: uint32struct WNODE_HEADER
{
uint BufferSize;
uint ProviderId;
_Anonymous1_e__Union Anonymous1;
_Anonymous2_e__Union Anonymous2;
GUID Guid;
uint ClientContext;
uint Flags;
}
struct EVENT_TRACE_PROPERTIES
{
WNODE_HEADER Wnode;
uint BufferSize;
uint MinimumBuffers;
uint MaximumBuffers;
uint MaximumFileSize;
uint LogFileMode;
uint FlushTimer;
uint EnableFlags;
_Anonymous_e__Union Anonymous;
uint NumberOfBuffers;
uint FreeBuffers;
uint EventsLost;
uint BuffersWritten;
uint LogBuffersLost;
uint RealTimeBuffersLost;
void* LoggerThreadId;
uint LogFileNameOffset;
uint LoggerNameOffset;
}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 サイズ: 120 バイト(x86)
dim st, 30 ; 4byte整数×30(構造体サイズ 120 / 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 も可)
; Anonymous : _Anonymous_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 も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; EVENT_TRACE_PROPERTIES サイズ: 120 バイト(x64)
dim st, 30 ; 4byte整数×30(構造体サイズ 120 / 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 も可)
; Anonymous : _Anonymous_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 も可)
; ※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
#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 Anonymous 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
#endstruct
stdim st, EVENT_TRACE_PROPERTIES ; NSTRUCT 変数を確保
st->BufferSize = 100
mes "BufferSize=" + st->BufferSize
; ※union フィールドは byte 列で確保(NSTRUCT は union 非対応)。必要に応じ手動でアクセス。