ホーム › Security.DiagnosticDataQuery › DIAGNOSTIC_DATA_RECORD
DIAGNOSTIC_DATA_RECORD
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| rowId | LONGLONG | 8 | +0 | +0 | レコードの行 ID です。 |
| timestamp | ULONGLONG | 8 | +8 | +8 | レコードが処理された日時のタイムスタンプです。 |
| eventKeywords | ULONGLONG | 8 | +16 | +16 | このイベントに関連付けられたキーワードです。 |
| fullEventName | LPWSTR | 8/4 | +24 | +24 | 完全なイベント名です。 |
| providerGroupGuid | LPWSTR | 8/4 | +32 | +28 | このイベントのプロバイダー グループ GUID です。 |
| producerName | LPWSTR | 8/4 | +40 | +32 | このイベントに関連付けられたプロデューサーの名前です。 |
| privacyTags | INT* | 8/4 | +48 | +36 | このイベントのプライバシー タグ ID の一覧です。 |
| privacyTagCount | DWORD | 4 | +56 | +40 | このイベントに関連付けられたプライバシー タグの数です。 |
| categoryIds | INT* | 8/4 | +64 | +44 | このイベントに関連付けられたカテゴリの一覧です。 |
| categoryIdCount | DWORD | 4 | +72 | +48 | このイベントに関連付けられたカテゴリの数です。 |
| isCoreData | BOOL | 4 | +76 | +52 | このレコードがコア データの場合は TRUE、それ以外の場合は FALSE です。 |
| extra1 | LPWSTR | 8/4 | +80 | +56 | 拡張用予備文字列フィールド1。NULL可。 |
| extra2 | LPWSTR | 8/4 | +88 | +60 | 拡張用予備文字列フィールド2。NULL可。 |
| extra3 | LPWSTR | 8/4 | +96 | +64 | 拡張用予備文字列フィールド3。NULL可。 |
公式ドキュメント
このリソースは、個々の診断データ レコード(イベント)について説明します。
解説(Remarks)
- イベントとプロバイダーの詳細については、イベント トレース を参照してください。
- プロデューサーの定義方法については、DIAGNOSTIC_DATA_EVENT_PRODUCER_DESCRIPTION を参照してください。
- タグの定義方法については、DIAGNOSTIC_DATA_EVENT_TAG_DESCRIPTION を参照してください。
- カテゴリの定義方法については、DIAGNOSTIC_DATA_EVENT_CATEGORY_DESCRIPTION を参照してください。
- コア データの詳細については、プライバシーに関する声明 を参照してください。
出典・ライセンス: 上記「公式ドキュメント」の内容は 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>
// DIAGNOSTIC_DATA_RECORD (x64 104 / x86 72 バイト)
typedef struct DIAGNOSTIC_DATA_RECORD {
LONGLONG rowId;
ULONGLONG timestamp;
ULONGLONG eventKeywords;
LPWSTR fullEventName;
LPWSTR providerGroupGuid;
LPWSTR producerName;
INT* privacyTags;
DWORD privacyTagCount;
INT* categoryIds;
DWORD categoryIdCount;
BOOL isCoreData;
LPWSTR extra1;
LPWSTR extra2;
LPWSTR extra3;
} DIAGNOSTIC_DATA_RECORD;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DIAGNOSTIC_DATA_RECORD
{
public long rowId;
public ulong timestamp;
public ulong eventKeywords;
public IntPtr fullEventName;
public IntPtr providerGroupGuid;
public IntPtr producerName;
public IntPtr privacyTags;
public uint privacyTagCount;
public IntPtr categoryIds;
public uint categoryIdCount;
[MarshalAs(UnmanagedType.Bool)] public bool isCoreData;
public IntPtr extra1;
public IntPtr extra2;
public IntPtr extra3;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DIAGNOSTIC_DATA_RECORD
Public rowId As Long
Public timestamp As ULong
Public eventKeywords As ULong
Public fullEventName As IntPtr
Public providerGroupGuid As IntPtr
Public producerName As IntPtr
Public privacyTags As IntPtr
Public privacyTagCount As UInteger
Public categoryIds As IntPtr
Public categoryIdCount As UInteger
<MarshalAs(UnmanagedType.Bool)> Public isCoreData As Boolean
Public extra1 As IntPtr
Public extra2 As IntPtr
Public extra3 As IntPtr
End Structureimport ctypes
from ctypes import wintypes
class DIAGNOSTIC_DATA_RECORD(ctypes.Structure):
_fields_ = [
("rowId", ctypes.c_longlong),
("timestamp", ctypes.c_ulonglong),
("eventKeywords", ctypes.c_ulonglong),
("fullEventName", ctypes.c_void_p),
("providerGroupGuid", ctypes.c_void_p),
("producerName", ctypes.c_void_p),
("privacyTags", ctypes.c_void_p),
("privacyTagCount", wintypes.DWORD),
("categoryIds", ctypes.c_void_p),
("categoryIdCount", wintypes.DWORD),
("isCoreData", wintypes.BOOL),
("extra1", ctypes.c_void_p),
("extra2", ctypes.c_void_p),
("extra3", ctypes.c_void_p),
]#[repr(C)]
pub struct DIAGNOSTIC_DATA_RECORD {
pub rowId: i64,
pub timestamp: u64,
pub eventKeywords: u64,
pub fullEventName: *mut core::ffi::c_void,
pub providerGroupGuid: *mut core::ffi::c_void,
pub producerName: *mut core::ffi::c_void,
pub privacyTags: *mut core::ffi::c_void,
pub privacyTagCount: u32,
pub categoryIds: *mut core::ffi::c_void,
pub categoryIdCount: u32,
pub isCoreData: i32,
pub extra1: *mut core::ffi::c_void,
pub extra2: *mut core::ffi::c_void,
pub extra3: *mut core::ffi::c_void,
}import "golang.org/x/sys/windows"
type DIAGNOSTIC_DATA_RECORD struct {
rowId int64
timestamp uint64
eventKeywords uint64
fullEventName uintptr
providerGroupGuid uintptr
producerName uintptr
privacyTags uintptr
privacyTagCount uint32
categoryIds uintptr
categoryIdCount uint32
isCoreData int32
extra1 uintptr
extra2 uintptr
extra3 uintptr
}type
DIAGNOSTIC_DATA_RECORD = record
rowId: Int64;
timestamp: UInt64;
eventKeywords: UInt64;
fullEventName: Pointer;
providerGroupGuid: Pointer;
producerName: Pointer;
privacyTags: Pointer;
privacyTagCount: DWORD;
categoryIds: Pointer;
categoryIdCount: DWORD;
isCoreData: BOOL;
extra1: Pointer;
extra2: Pointer;
extra3: Pointer;
end;const DIAGNOSTIC_DATA_RECORD = extern struct {
rowId: i64,
timestamp: u64,
eventKeywords: u64,
fullEventName: ?*anyopaque,
providerGroupGuid: ?*anyopaque,
producerName: ?*anyopaque,
privacyTags: ?*anyopaque,
privacyTagCount: u32,
categoryIds: ?*anyopaque,
categoryIdCount: u32,
isCoreData: i32,
extra1: ?*anyopaque,
extra2: ?*anyopaque,
extra3: ?*anyopaque,
};type
DIAGNOSTIC_DATA_RECORD {.bycopy.} = object
rowId: int64
timestamp: uint64
eventKeywords: uint64
fullEventName: pointer
providerGroupGuid: pointer
producerName: pointer
privacyTags: pointer
privacyTagCount: uint32
categoryIds: pointer
categoryIdCount: uint32
isCoreData: int32
extra1: pointer
extra2: pointer
extra3: pointerstruct DIAGNOSTIC_DATA_RECORD
{
long rowId;
ulong timestamp;
ulong eventKeywords;
void* fullEventName;
void* providerGroupGuid;
void* producerName;
void* privacyTags;
uint privacyTagCount;
void* categoryIds;
uint categoryIdCount;
int isCoreData;
void* extra1;
void* extra2;
void* extra3;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; DIAGNOSTIC_DATA_RECORD サイズ: 72 バイト(x86)
dim st, 18 ; 4byte整数×18(構造体サイズ 72 / 4 切り上げ)
; rowId : LONGLONG (+0, 8byte) qpoke st,0,値 / qpeek(st,0) ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; timestamp : ULONGLONG (+8, 8byte) qpoke st,8,値 / qpeek(st,8) ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; eventKeywords : ULONGLONG (+16, 8byte) qpoke st,16,値 / qpeek(st,16) ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; fullEventName : LPWSTR (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; providerGroupGuid : LPWSTR (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; producerName : LPWSTR (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; privacyTags : INT* (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; privacyTagCount : DWORD (+40, 4byte) st.10 = 値 / 値 = st.10 (lpoke/lpeek も可)
; categoryIds : INT* (+44, 4byte) st.11 = 値 / 値 = st.11 (lpoke/lpeek も可)
; categoryIdCount : DWORD (+48, 4byte) st.12 = 値 / 値 = st.12 (lpoke/lpeek も可)
; isCoreData : BOOL (+52, 4byte) st.13 = 値 / 値 = st.13 (lpoke/lpeek も可)
; extra1 : LPWSTR (+56, 4byte) st.14 = 値 / 値 = st.14 (lpoke/lpeek も可)
; extra2 : LPWSTR (+60, 4byte) st.15 = 値 / 値 = st.15 (lpoke/lpeek も可)
; extra3 : LPWSTR (+64, 4byte) st.16 = 値 / 値 = st.16 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; DIAGNOSTIC_DATA_RECORD サイズ: 104 バイト(x64)
dim st, 26 ; 4byte整数×26(構造体サイズ 104 / 4 切り上げ)
; rowId : LONGLONG (+0, 8byte) qpoke st,0,値 / qpeek(st,0) ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; timestamp : ULONGLONG (+8, 8byte) qpoke st,8,値 / qpeek(st,8) ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; eventKeywords : ULONGLONG (+16, 8byte) qpoke st,16,値 / qpeek(st,16) ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; fullEventName : LPWSTR (+24, 8byte) qpoke st,24,値 / qpeek(st,24) ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; providerGroupGuid : LPWSTR (+32, 8byte) qpoke st,32,値 / qpeek(st,32) ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; producerName : LPWSTR (+40, 8byte) qpoke st,40,値 / qpeek(st,40) ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; privacyTags : INT* (+48, 8byte) qpoke st,48,値 / qpeek(st,48) ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; privacyTagCount : DWORD (+56, 4byte) st.14 = 値 / 値 = st.14 (lpoke/lpeek も可)
; categoryIds : INT* (+64, 8byte) qpoke st,64,値 / qpeek(st,64) ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; categoryIdCount : DWORD (+72, 4byte) st.18 = 値 / 値 = st.18 (lpoke/lpeek も可)
; isCoreData : BOOL (+76, 4byte) st.19 = 値 / 値 = st.19 (lpoke/lpeek も可)
; extra1 : LPWSTR (+80, 8byte) qpoke st,80,値 / qpeek(st,80) ※IronHSPのみ。3.7/3.8は lpoke st,80,下位 : lpoke st,84,上位
; extra2 : LPWSTR (+88, 8byte) qpoke st,88,値 / qpeek(st,88) ※IronHSPのみ。3.7/3.8は lpoke st,88,下位 : lpoke st,92,上位
; extra3 : LPWSTR (+96, 8byte) qpoke st,96,値 / qpeek(st,96) ※IronHSPのみ。3.7/3.8は lpoke st,96,下位 : lpoke st,100,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global DIAGNOSTIC_DATA_RECORD
#field int64 rowId
#field int64 timestamp
#field int64 eventKeywords
#field intptr fullEventName
#field intptr providerGroupGuid
#field intptr producerName
#field intptr privacyTags
#field int privacyTagCount
#field intptr categoryIds
#field int categoryIdCount
#field bool isCoreData
#field intptr extra1
#field intptr extra2
#field intptr extra3
#endstruct
stdim st, DIAGNOSTIC_DATA_RECORD ; NSTRUCT 変数を確保
st->rowId = 100
mes "rowId=" + st->rowId