ホーム › System.Diagnostics.Etw › TRACE_EVENT_INFO
TRACE_EVENT_INFO
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| ProviderGuid | GUID | 16 | +0 | +0 | プロバイダーを識別する GUID です。 |
| EventGuid | GUID | 16 | +16 | +16 | イベントを含む MOF クラスを識別する GUID です。プロバイダーがマニフェストを使用してイベントを定義している場合、このメンバーは GUID_NULL になります。 |
| EventDescriptor | EVENT_DESCRIPTOR | 16 | +32 | +32 | イベントを記述する EVENT_DESCRIPTOR 構造体です。 |
| DecodingSource | DECODING_SOURCE | 4 | +48 | +48 | イベントのデータの解析に使用されたソース (インストルメンテーション マニフェストや WMI MOF クラスなど) を識別する DECODING_SOURCE 列挙型の値です。 |
| ProviderNameOffset | DWORD | 4 | +52 | +52 | この構造体の先頭から、プロバイダーの名前を含む NULL 終端の Unicode 文字列までのオフセットです。 |
| LevelNameOffset | DWORD | 4 | +56 | +56 | この構造体の先頭から、レベルの名前を含む NULL 終端の Unicode 文字列までのオフセットです。使用できる名前については、LevelType の「解説」を参照してください。 |
| ChannelNameOffset | DWORD | 4 | +60 | +60 | この構造体の先頭から、チャネルの名前を含む NULL 終端の Unicode 文字列までのオフセットです。使用できる名前については、ChannelType の「解説」を参照してください。 |
| KeywordsNameOffset | DWORD | 4 | +64 | +64 | この構造体の先頭から、キーワードの名前を含む NULL 終端の Unicode 文字列のリストまでのオフセットです。このリストは 2 つの NULL 文字で終端されます。使用できる名前については、KeywordType の「解説」を参照してください。 |
| TaskNameOffset | DWORD | 4 | +68 | +68 | この構造体の先頭から、タスクの名前を含む NULL 終端の Unicode 文字列までのオフセットです。使用できる名前については、TaskType の「解説」を参照してください。 |
| OpcodeNameOffset | DWORD | 4 | +72 | +72 | この構造体の先頭から、操作の名前を含む NULL 終端の Unicode 文字列までのオフセットです。使用できる名前については、OpcodeType の「解説」を参照してください。 |
| EventMessageOffset | DWORD | 4 | +76 | +76 | この構造体の先頭から、イベント メッセージ文字列を含む NULL 終端の Unicode 文字列までのオフセットです。メッセージ文字列が存在しない場合、オフセットは 0 になります。メッセージ文字列については、EventDefinitionType の message 属性を参照してください。 メッセージ文字列には挿入シーケンスを含めることができます (例: Unable to connect to the %1 printer.)。挿入シーケンスの番号は、置換に使用するイベント データ内のプロパティを識別します。 |
| ProviderMessageOffset | DWORD | 4 | +80 | +80 | この構造体の先頭から、ローカライズされたプロバイダー名を含む NULL 終端の Unicode 文字列までのオフセットです。 |
| BinaryXMLOffset | DWORD | 4 | +84 | +84 | 予約済みです。 |
| BinaryXMLSize | DWORD | 4 | +88 | +88 | 予約済みです。 |
| Anonymous1 | _Anonymous1_e__Union | 4 | +92 | +92 | EventNameOffsetまたはActivityIDNameOffsetを含む共用体。 |
| Anonymous2 | _Anonymous2_e__Union | 4 | +96 | +96 | EventAttributesOffsetまたはRelatedActivityIDNameOffsetを含む共用体。 |
| PropertyCount | DWORD | 4 | +100 | +100 | EventPropertyInfoArray 配列の要素数です。 |
| TopLevelPropertyCount | DWORD | 4 | +104 | +104 | EventPropertyInfoArray 配列内のプロパティのうち、最上位のプロパティの数です。この数に構造体のメンバーは含まれません。最上位のプロパティは、配列内でメンバーのプロパティよりも前に配置されます。 |
| Anonymous3 | _Anonymous3_e__Union | 8/4 | +112 | +108 | 予約フラグ(Tags等)を含む共用体。 |
| EventPropertyInfoArray | EVENT_PROPERTY_INFO | 32/20 | +120 | +112 | イベントのユーザー データの各プロパティに関する情報を提供する EVENT_PROPERTY_INFO 構造体の配列です。 |
共用体: _Anonymous1_e__Union x64 4B / x86 4B
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| EventNameOffset | DWORD | 4 | +0 | +0 | |
| ActivityIDNameOffset | DWORD | 4 | +0 | +0 | この構造体の先頭から、MOF クラス内のアクティビティ識別子のプロパティ名を含む NULL 終端の Unicode 文字列までのオフセットです。クラシック ETW イベントでのみサポートされます。 |
共用体: _Anonymous2_e__Union x64 4B / x86 4B
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| EventAttributesOffset | DWORD | 4 | +0 | +0 | |
| RelatedActivityIDNameOffset | DWORD | 4 | +0 | +0 | この構造体の先頭から、MOF クラス内の関連アクティビティ識別子のプロパティ名を含む NULL 終端の Unicode 文字列までのオフセットです。従来の ETW イベントでのみサポートされます。 |
共用体: _Anonymous3_e__Union x64 8B / x86 4B
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| Flags | TEMPLATE_FLAGS | 4 | +0 | +0 | 予約済みです。 |
| Anonymous | _Anonymous_e__Struct | 8/4 | +0 | +0 |
公式ドキュメント
イベントに関する情報を定義します。
解説(Remarks)
メンバーが定義されていない場合、オフセットの値は 0 になります。
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での定義
#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 Structureimport 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 非対応)。必要に応じ手動でアクセス。