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

TRACE_EVENT_INFO

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

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

フィールド

フィールドサイズx64x86説明
ProviderGuidGUID16+0+0イベントを発行したプロバイダのGUID。
EventGuidGUID16+16+16クラシックイベント用のGUID。MOF以外では未使用。
EventDescriptorEVENT_DESCRIPTOR16+32+32イベントを記述するEVENT_DESCRIPTOR。
DecodingSourceDECODING_SOURCE4+48+48イベントのデコード元種別(DECODING_SOURCE)。
ProviderNameOffsetDWORD4+52+52プロバイダ名文字列へのバイトオフセット。0で無し。
LevelNameOffsetDWORD4+56+56レベル名文字列へのバイトオフセット。0で無し。
ChannelNameOffsetDWORD4+60+60チャネル名文字列へのバイトオフセット。0で無し。
KeywordsNameOffsetDWORD4+64+64キーワード名文字列へのバイトオフセット。0で無し。
TaskNameOffsetDWORD4+68+68タスク名文字列へのバイトオフセット。0で無し。
OpcodeNameOffsetDWORD4+72+72オペコード名文字列へのバイトオフセット。0で無し。
EventMessageOffsetDWORD4+76+76イベントメッセージ文字列へのバイトオフセット。0で無し。
ProviderMessageOffsetDWORD4+80+80プロバイダメッセージ文字列へのバイトオフセット。0で無し。
BinaryXMLOffsetDWORD4+84+84バイナリXMLデータへのバイトオフセット。
BinaryXMLSizeDWORD4+88+88バイナリXMLデータのバイト数。
Anonymous1_Anonymous1_e__Union4+92+92EventNameOffsetまたはActivityIDNameOffsetを含む共用体。
Anonymous2_Anonymous2_e__Union4+96+96EventAttributesOffsetまたはRelatedActivityIDNameOffsetを含む共用体。
PropertyCountDWORD4+100+100イベントのプロパティ総数。
TopLevelPropertyCountDWORD4+104+104ネストされていない最上位プロパティの数。
Anonymous3_Anonymous3_e__Union8/4+112+108予約フラグ(Tags等)を含む共用体。
EventPropertyInfoArrayEVENT_PROPERTY_INFO32/20+120+112EVENT_PROPERTY_INFO配列の先頭。可変長。

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

フィールドサイズx64x86
EventNameOffsetDWORD4+0+0
ActivityIDNameOffsetDWORD4+0+0

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

フィールドサイズx64x86
EventAttributesOffsetDWORD4+0+0
RelatedActivityIDNameOffsetDWORD4+0+0

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

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

各言語での定義

#include <windows.h>

// EVENT_DESCRIPTOR  (x64 16 / x86 16 バイト)
typedef struct EVENT_DESCRIPTOR {
    WORD Id;
    BYTE Version;
    BYTE Channel;
    BYTE Level;
    BYTE Opcode;
    WORD Task;
    ULONGLONG Keyword;
} EVENT_DESCRIPTOR;

// EVENT_PROPERTY_INFO  (x64 32 / x86 20 バイト)
typedef struct EVENT_PROPERTY_INFO {
    PROPERTY_FLAGS Flags;
    DWORD NameOffset;
    _Anonymous1_e__Union Anonymous1;
    _Anonymous2_e__Union Anonymous2;
    _Anonymous3_e__Union Anonymous3;
    _Anonymous4_e__Union Anonymous4;
} EVENT_PROPERTY_INFO;

// TRACE_EVENT_INFO  (x64 152 / x86 136 バイト)
typedef struct TRACE_EVENT_INFO {
    GUID ProviderGuid;
    GUID EventGuid;
    EVENT_DESCRIPTOR EventDescriptor;
    DECODING_SOURCE DecodingSource;
    DWORD ProviderNameOffset;
    DWORD LevelNameOffset;
    DWORD ChannelNameOffset;
    DWORD KeywordsNameOffset;
    DWORD TaskNameOffset;
    DWORD OpcodeNameOffset;
    DWORD EventMessageOffset;
    DWORD ProviderMessageOffset;
    DWORD BinaryXMLOffset;
    DWORD BinaryXMLSize;
    _Anonymous1_e__Union Anonymous1;
    _Anonymous2_e__Union Anonymous2;
    DWORD PropertyCount;
    DWORD TopLevelPropertyCount;
    _Anonymous3_e__Union Anonymous3;
    EVENT_PROPERTY_INFO EventPropertyInfoArray[1];
} TRACE_EVENT_INFO;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct EVENT_DESCRIPTOR
{
    public ushort Id;
    public byte Version;
    public byte Channel;
    public byte Level;
    public byte Opcode;
    public ushort Task;
    public ulong Keyword;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct EVENT_PROPERTY_INFO
{
    public int Flags;
    public uint NameOffset;
    public _Anonymous1_e__Union Anonymous1;
    public _Anonymous2_e__Union Anonymous2;
    public _Anonymous3_e__Union Anonymous3;
    public _Anonymous4_e__Union Anonymous4;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct TRACE_EVENT_INFO
{
    public Guid ProviderGuid;
    public Guid EventGuid;
    public EVENT_DESCRIPTOR EventDescriptor;
    public int DecodingSource;
    public uint ProviderNameOffset;
    public uint LevelNameOffset;
    public uint ChannelNameOffset;
    public uint KeywordsNameOffset;
    public uint TaskNameOffset;
    public uint OpcodeNameOffset;
    public uint EventMessageOffset;
    public uint ProviderMessageOffset;
    public uint BinaryXMLOffset;
    public uint BinaryXMLSize;
    public _Anonymous1_e__Union Anonymous1;
    public _Anonymous2_e__Union Anonymous2;
    public uint PropertyCount;
    public uint TopLevelPropertyCount;
    public _Anonymous3_e__Union Anonymous3;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 1)] public EVENT_PROPERTY_INFO[] EventPropertyInfoArray;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure EVENT_DESCRIPTOR
    Public Id As UShort
    Public Version As Byte
    Public Channel As Byte
    Public Level As Byte
    Public Opcode As Byte
    Public Task As UShort
    Public Keyword As ULong
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure EVENT_PROPERTY_INFO
    Public Flags As Integer
    Public NameOffset As UInteger
    Public Anonymous1 As _Anonymous1_e__Union
    Public Anonymous2 As _Anonymous2_e__Union
    Public Anonymous3 As _Anonymous3_e__Union
    Public Anonymous4 As _Anonymous4_e__Union
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure TRACE_EVENT_INFO
    Public ProviderGuid As Guid
    Public EventGuid As Guid
    Public EventDescriptor As EVENT_DESCRIPTOR
    Public DecodingSource As Integer
    Public ProviderNameOffset As UInteger
    Public LevelNameOffset As UInteger
    Public ChannelNameOffset As UInteger
    Public KeywordsNameOffset As UInteger
    Public TaskNameOffset As UInteger
    Public OpcodeNameOffset As UInteger
    Public EventMessageOffset As UInteger
    Public ProviderMessageOffset As UInteger
    Public BinaryXMLOffset As UInteger
    Public BinaryXMLSize As UInteger
    Public Anonymous1 As _Anonymous1_e__Union
    Public Anonymous2 As _Anonymous2_e__Union
    Public PropertyCount As UInteger
    Public TopLevelPropertyCount As UInteger
    Public Anonymous3 As _Anonymous3_e__Union
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=1)> Public EventPropertyInfoArray() As EVENT_PROPERTY_INFO
End Structure
import ctypes
from ctypes import wintypes

class EVENT_DESCRIPTOR(ctypes.Structure):
    _fields_ = [
        ("Id", ctypes.c_ushort),
        ("Version", ctypes.c_ubyte),
        ("Channel", ctypes.c_ubyte),
        ("Level", ctypes.c_ubyte),
        ("Opcode", ctypes.c_ubyte),
        ("Task", ctypes.c_ushort),
        ("Keyword", ctypes.c_ulonglong),
    ]

class EVENT_PROPERTY_INFO(ctypes.Structure):
    _fields_ = [
        ("Flags", ctypes.c_int),
        ("NameOffset", wintypes.DWORD),
        ("Anonymous1", _Anonymous1_e__Union),
        ("Anonymous2", _Anonymous2_e__Union),
        ("Anonymous3", _Anonymous3_e__Union),
        ("Anonymous4", _Anonymous4_e__Union),
    ]

class TRACE_EVENT_INFO(ctypes.Structure):
    _fields_ = [
        ("ProviderGuid", GUID),
        ("EventGuid", GUID),
        ("EventDescriptor", EVENT_DESCRIPTOR),
        ("DecodingSource", ctypes.c_int),
        ("ProviderNameOffset", wintypes.DWORD),
        ("LevelNameOffset", wintypes.DWORD),
        ("ChannelNameOffset", wintypes.DWORD),
        ("KeywordsNameOffset", wintypes.DWORD),
        ("TaskNameOffset", wintypes.DWORD),
        ("OpcodeNameOffset", wintypes.DWORD),
        ("EventMessageOffset", wintypes.DWORD),
        ("ProviderMessageOffset", wintypes.DWORD),
        ("BinaryXMLOffset", wintypes.DWORD),
        ("BinaryXMLSize", wintypes.DWORD),
        ("Anonymous1", _Anonymous1_e__Union),
        ("Anonymous2", _Anonymous2_e__Union),
        ("PropertyCount", wintypes.DWORD),
        ("TopLevelPropertyCount", wintypes.DWORD),
        ("Anonymous3", _Anonymous3_e__Union),
        ("EventPropertyInfoArray", EVENT_PROPERTY_INFO * 1),
    ]
#[repr(C)]
pub struct EVENT_DESCRIPTOR {
    pub Id: u16,
    pub Version: u8,
    pub Channel: u8,
    pub Level: u8,
    pub Opcode: u8,
    pub Task: u16,
    pub Keyword: u64,
}

#[repr(C)]
pub struct EVENT_PROPERTY_INFO {
    pub Flags: i32,
    pub NameOffset: u32,
    pub Anonymous1: _Anonymous1_e__Union,
    pub Anonymous2: _Anonymous2_e__Union,
    pub Anonymous3: _Anonymous3_e__Union,
    pub Anonymous4: _Anonymous4_e__Union,
}

#[repr(C)]
pub struct TRACE_EVENT_INFO {
    pub ProviderGuid: GUID,
    pub EventGuid: GUID,
    pub EventDescriptor: EVENT_DESCRIPTOR,
    pub DecodingSource: i32,
    pub ProviderNameOffset: u32,
    pub LevelNameOffset: u32,
    pub ChannelNameOffset: u32,
    pub KeywordsNameOffset: u32,
    pub TaskNameOffset: u32,
    pub OpcodeNameOffset: u32,
    pub EventMessageOffset: u32,
    pub ProviderMessageOffset: u32,
    pub BinaryXMLOffset: u32,
    pub BinaryXMLSize: u32,
    pub Anonymous1: _Anonymous1_e__Union,
    pub Anonymous2: _Anonymous2_e__Union,
    pub PropertyCount: u32,
    pub TopLevelPropertyCount: u32,
    pub Anonymous3: _Anonymous3_e__Union,
    pub EventPropertyInfoArray: [EVENT_PROPERTY_INFO; 1],
}
import "golang.org/x/sys/windows"

type EVENT_DESCRIPTOR struct {
	Id uint16
	Version byte
	Channel byte
	Level byte
	Opcode byte
	Task uint16
	Keyword uint64
}

type EVENT_PROPERTY_INFO struct {
	Flags int32
	NameOffset uint32
	Anonymous1 _Anonymous1_e__Union
	Anonymous2 _Anonymous2_e__Union
	Anonymous3 _Anonymous3_e__Union
	Anonymous4 _Anonymous4_e__Union
}

type TRACE_EVENT_INFO struct {
	ProviderGuid windows.GUID
	EventGuid windows.GUID
	EventDescriptor EVENT_DESCRIPTOR
	DecodingSource int32
	ProviderNameOffset uint32
	LevelNameOffset uint32
	ChannelNameOffset uint32
	KeywordsNameOffset uint32
	TaskNameOffset uint32
	OpcodeNameOffset uint32
	EventMessageOffset uint32
	ProviderMessageOffset uint32
	BinaryXMLOffset uint32
	BinaryXMLSize uint32
	Anonymous1 _Anonymous1_e__Union
	Anonymous2 _Anonymous2_e__Union
	PropertyCount uint32
	TopLevelPropertyCount uint32
	Anonymous3 _Anonymous3_e__Union
	EventPropertyInfoArray [1]EVENT_PROPERTY_INFO
}
type
  EVENT_DESCRIPTOR = record
    Id: Word;
    Version: Byte;
    Channel: Byte;
    Level: Byte;
    Opcode: Byte;
    Task: Word;
    Keyword: UInt64;
  end;

  EVENT_PROPERTY_INFO = record
    Flags: Integer;
    NameOffset: DWORD;
    Anonymous1: _Anonymous1_e__Union;
    Anonymous2: _Anonymous2_e__Union;
    Anonymous3: _Anonymous3_e__Union;
    Anonymous4: _Anonymous4_e__Union;
  end;

  TRACE_EVENT_INFO = record
    ProviderGuid: TGUID;
    EventGuid: TGUID;
    EventDescriptor: EVENT_DESCRIPTOR;
    DecodingSource: Integer;
    ProviderNameOffset: DWORD;
    LevelNameOffset: DWORD;
    ChannelNameOffset: DWORD;
    KeywordsNameOffset: DWORD;
    TaskNameOffset: DWORD;
    OpcodeNameOffset: DWORD;
    EventMessageOffset: DWORD;
    ProviderMessageOffset: DWORD;
    BinaryXMLOffset: DWORD;
    BinaryXMLSize: DWORD;
    Anonymous1: _Anonymous1_e__Union;
    Anonymous2: _Anonymous2_e__Union;
    PropertyCount: DWORD;
    TopLevelPropertyCount: DWORD;
    Anonymous3: _Anonymous3_e__Union;
    EventPropertyInfoArray: array[0..0] of EVENT_PROPERTY_INFO;
  end;
const EVENT_DESCRIPTOR = extern struct {
    Id: u16,
    Version: u8,
    Channel: u8,
    Level: u8,
    Opcode: u8,
    Task: u16,
    Keyword: u64,
};

const EVENT_PROPERTY_INFO = extern struct {
    Flags: i32,
    NameOffset: u32,
    Anonymous1: _Anonymous1_e__Union,
    Anonymous2: _Anonymous2_e__Union,
    Anonymous3: _Anonymous3_e__Union,
    Anonymous4: _Anonymous4_e__Union,
};

const TRACE_EVENT_INFO = extern struct {
    ProviderGuid: GUID,
    EventGuid: GUID,
    EventDescriptor: EVENT_DESCRIPTOR,
    DecodingSource: i32,
    ProviderNameOffset: u32,
    LevelNameOffset: u32,
    ChannelNameOffset: u32,
    KeywordsNameOffset: u32,
    TaskNameOffset: u32,
    OpcodeNameOffset: u32,
    EventMessageOffset: u32,
    ProviderMessageOffset: u32,
    BinaryXMLOffset: u32,
    BinaryXMLSize: u32,
    Anonymous1: _Anonymous1_e__Union,
    Anonymous2: _Anonymous2_e__Union,
    PropertyCount: u32,
    TopLevelPropertyCount: u32,
    Anonymous3: _Anonymous3_e__Union,
    EventPropertyInfoArray: [1]EVENT_PROPERTY_INFO,
};
type
  EVENT_DESCRIPTOR {.bycopy.} = object
    Id: uint16
    Version: uint8
    Channel: uint8
    Level: uint8
    Opcode: uint8
    Task: uint16
    Keyword: uint64

  EVENT_PROPERTY_INFO {.bycopy.} = object
    Flags: int32
    NameOffset: uint32
    Anonymous1: _Anonymous1_e__Union
    Anonymous2: _Anonymous2_e__Union
    Anonymous3: _Anonymous3_e__Union
    Anonymous4: _Anonymous4_e__Union

  TRACE_EVENT_INFO {.bycopy.} = object
    ProviderGuid: GUID
    EventGuid: GUID
    EventDescriptor: EVENT_DESCRIPTOR
    DecodingSource: int32
    ProviderNameOffset: uint32
    LevelNameOffset: uint32
    ChannelNameOffset: uint32
    KeywordsNameOffset: uint32
    TaskNameOffset: uint32
    OpcodeNameOffset: uint32
    EventMessageOffset: uint32
    ProviderMessageOffset: uint32
    BinaryXMLOffset: uint32
    BinaryXMLSize: uint32
    Anonymous1: _Anonymous1_e__Union
    Anonymous2: _Anonymous2_e__Union
    PropertyCount: uint32
    TopLevelPropertyCount: uint32
    Anonymous3: _Anonymous3_e__Union
    EventPropertyInfoArray: array[1, EVENT_PROPERTY_INFO]
struct EVENT_DESCRIPTOR
{
    ushort Id;
    ubyte Version;
    ubyte Channel;
    ubyte Level;
    ubyte Opcode;
    ushort Task;
    ulong Keyword;
}

struct EVENT_PROPERTY_INFO
{
    int Flags;
    uint NameOffset;
    _Anonymous1_e__Union Anonymous1;
    _Anonymous2_e__Union Anonymous2;
    _Anonymous3_e__Union Anonymous3;
    _Anonymous4_e__Union Anonymous4;
}

struct TRACE_EVENT_INFO
{
    GUID ProviderGuid;
    GUID EventGuid;
    EVENT_DESCRIPTOR EventDescriptor;
    int DecodingSource;
    uint ProviderNameOffset;
    uint LevelNameOffset;
    uint ChannelNameOffset;
    uint KeywordsNameOffset;
    uint TaskNameOffset;
    uint OpcodeNameOffset;
    uint EventMessageOffset;
    uint ProviderMessageOffset;
    uint BinaryXMLOffset;
    uint BinaryXMLSize;
    _Anonymous1_e__Union Anonymous1;
    _Anonymous2_e__Union Anonymous2;
    uint PropertyCount;
    uint TopLevelPropertyCount;
    _Anonymous3_e__Union Anonymous3;
    EVENT_PROPERTY_INFO[1] EventPropertyInfoArray;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; TRACE_EVENT_INFO サイズ: 136 バイト(x86)
dim st, 34    ; 4byte整数×34(構造体サイズ 136 / 4 切り上げ)
; ProviderGuid : GUID (+0, 16byte)  varptr(st)+0 を基点に操作(16byte:入れ子/配列)
; EventGuid : GUID (+16, 16byte)  varptr(st)+16 を基点に操作(16byte:入れ子/配列)
; EventDescriptor : EVENT_DESCRIPTOR (+32, 16byte)  varptr(st)+32 を基点に操作(16byte:入れ子/配列)
; DecodingSource : DECODING_SOURCE (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; ProviderNameOffset : DWORD (+52, 4byte)  st.13 = 値  /  値 = st.13   (lpoke/lpeek も可)
; LevelNameOffset : DWORD (+56, 4byte)  st.14 = 値  /  値 = st.14   (lpoke/lpeek も可)
; ChannelNameOffset : DWORD (+60, 4byte)  st.15 = 値  /  値 = st.15   (lpoke/lpeek も可)
; KeywordsNameOffset : DWORD (+64, 4byte)  st.16 = 値  /  値 = st.16   (lpoke/lpeek も可)
; TaskNameOffset : DWORD (+68, 4byte)  st.17 = 値  /  値 = st.17   (lpoke/lpeek も可)
; OpcodeNameOffset : DWORD (+72, 4byte)  st.18 = 値  /  値 = st.18   (lpoke/lpeek も可)
; EventMessageOffset : DWORD (+76, 4byte)  st.19 = 値  /  値 = st.19   (lpoke/lpeek も可)
; ProviderMessageOffset : DWORD (+80, 4byte)  st.20 = 値  /  値 = st.20   (lpoke/lpeek も可)
; BinaryXMLOffset : DWORD (+84, 4byte)  st.21 = 値  /  値 = st.21   (lpoke/lpeek も可)
; BinaryXMLSize : DWORD (+88, 4byte)  st.22 = 値  /  値 = st.22   (lpoke/lpeek も可)
; Anonymous1 : _Anonymous1_e__Union (+92, 4byte)  varptr(st)+92 を基点に操作(4byte:入れ子/配列)
; Anonymous2 : _Anonymous2_e__Union (+96, 4byte)  varptr(st)+96 を基点に操作(4byte:入れ子/配列)
; PropertyCount : DWORD (+100, 4byte)  st.25 = 値  /  値 = st.25   (lpoke/lpeek も可)
; TopLevelPropertyCount : DWORD (+104, 4byte)  st.26 = 値  /  値 = st.26   (lpoke/lpeek も可)
; Anonymous3 : _Anonymous3_e__Union (+108, 4byte)  varptr(st)+108 を基点に操作(4byte:入れ子/配列)
; EventPropertyInfoArray : EVENT_PROPERTY_INFO (+112, 20byte)  varptr(st)+112 を基点に操作(20byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; TRACE_EVENT_INFO サイズ: 152 バイト(x64)
dim st, 38    ; 4byte整数×38(構造体サイズ 152 / 4 切り上げ)
; ProviderGuid : GUID (+0, 16byte)  varptr(st)+0 を基点に操作(16byte:入れ子/配列)
; EventGuid : GUID (+16, 16byte)  varptr(st)+16 を基点に操作(16byte:入れ子/配列)
; EventDescriptor : EVENT_DESCRIPTOR (+32, 16byte)  varptr(st)+32 を基点に操作(16byte:入れ子/配列)
; DecodingSource : DECODING_SOURCE (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; ProviderNameOffset : DWORD (+52, 4byte)  st.13 = 値  /  値 = st.13   (lpoke/lpeek も可)
; LevelNameOffset : DWORD (+56, 4byte)  st.14 = 値  /  値 = st.14   (lpoke/lpeek も可)
; ChannelNameOffset : DWORD (+60, 4byte)  st.15 = 値  /  値 = st.15   (lpoke/lpeek も可)
; KeywordsNameOffset : DWORD (+64, 4byte)  st.16 = 値  /  値 = st.16   (lpoke/lpeek も可)
; TaskNameOffset : DWORD (+68, 4byte)  st.17 = 値  /  値 = st.17   (lpoke/lpeek も可)
; OpcodeNameOffset : DWORD (+72, 4byte)  st.18 = 値  /  値 = st.18   (lpoke/lpeek も可)
; EventMessageOffset : DWORD (+76, 4byte)  st.19 = 値  /  値 = st.19   (lpoke/lpeek も可)
; ProviderMessageOffset : DWORD (+80, 4byte)  st.20 = 値  /  値 = st.20   (lpoke/lpeek も可)
; BinaryXMLOffset : DWORD (+84, 4byte)  st.21 = 値  /  値 = st.21   (lpoke/lpeek も可)
; BinaryXMLSize : DWORD (+88, 4byte)  st.22 = 値  /  値 = st.22   (lpoke/lpeek も可)
; Anonymous1 : _Anonymous1_e__Union (+92, 4byte)  varptr(st)+92 を基点に操作(4byte:入れ子/配列)
; Anonymous2 : _Anonymous2_e__Union (+96, 4byte)  varptr(st)+96 を基点に操作(4byte:入れ子/配列)
; PropertyCount : DWORD (+100, 4byte)  st.25 = 値  /  値 = st.25   (lpoke/lpeek も可)
; TopLevelPropertyCount : DWORD (+104, 4byte)  st.26 = 値  /  値 = st.26   (lpoke/lpeek も可)
; Anonymous3 : _Anonymous3_e__Union (+112, 8byte)  varptr(st)+112 を基点に操作(8byte:入れ子/配列)
; EventPropertyInfoArray : EVENT_PROPERTY_INFO (+120, 32byte)  varptr(st)+120 を基点に操作(32byte:入れ子/配列)
; ※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 EVENT_DESCRIPTOR
    #field short Id
    #field byte Version
    #field byte Channel
    #field byte Level
    #field byte Opcode
    #field short Task
    #field int64 Keyword
#endstruct

#defstruct global EVENT_PROPERTY_INFO
    #field int Flags
    #field int NameOffset
    #field byte Anonymous1 8
    #field byte Anonymous2 2
    #field byte Anonymous3 2
    #field byte Anonymous4 8
#endstruct

#defstruct global TRACE_EVENT_INFO
    #field GUID ProviderGuid
    #field GUID EventGuid
    #field EVENT_DESCRIPTOR EventDescriptor
    #field int DecodingSource
    #field int ProviderNameOffset
    #field int LevelNameOffset
    #field int ChannelNameOffset
    #field int KeywordsNameOffset
    #field int TaskNameOffset
    #field int OpcodeNameOffset
    #field int EventMessageOffset
    #field int ProviderMessageOffset
    #field int BinaryXMLOffset
    #field int BinaryXMLSize
    #field byte Anonymous1 4
    #field byte Anonymous2 4
    #field int PropertyCount
    #field int TopLevelPropertyCount
    #field byte Anonymous3 8
    #field EVENT_PROPERTY_INFO EventPropertyInfoArray 1
#endstruct

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