ホーム › Security.DiagnosticDataQuery › DIAGNOSTIC_REPORT_SIGNATURE
DIAGNOSTIC_REPORT_SIGNATURE
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| eventName | WCHAR | 130 | +0 | +0 | レポートのイベント名文字列(固定長バッファ)。 |
| parameters | DIAGNOSTIC_REPORT_PARAMETER | 7780 | +130 | +130 | レポートシグネチャを構成するパラメータ配列。 |
各言語での定義
#include <windows.h>
// DIAGNOSTIC_REPORT_PARAMETER (x64 778 / x86 778 バイト)
typedef struct DIAGNOSTIC_REPORT_PARAMETER {
WCHAR name[129];
WCHAR value[260];
} DIAGNOSTIC_REPORT_PARAMETER;
// DIAGNOSTIC_REPORT_SIGNATURE (x64 7910 / x86 7910 バイト)
typedef struct DIAGNOSTIC_REPORT_SIGNATURE {
WCHAR eventName[65];
DIAGNOSTIC_REPORT_PARAMETER parameters[10];
} DIAGNOSTIC_REPORT_SIGNATURE;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DIAGNOSTIC_REPORT_PARAMETER
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 129)] public string name;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)] public string value;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DIAGNOSTIC_REPORT_SIGNATURE
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 65)] public string eventName;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)] public DIAGNOSTIC_REPORT_PARAMETER[] parameters;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DIAGNOSTIC_REPORT_PARAMETER
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=129)> Public name As String
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=260)> Public value As String
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DIAGNOSTIC_REPORT_SIGNATURE
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=65)> Public eventName As String
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=10)> Public parameters() As DIAGNOSTIC_REPORT_PARAMETER
End Structureimport ctypes
from ctypes import wintypes
class DIAGNOSTIC_REPORT_PARAMETER(ctypes.Structure):
_fields_ = [
("name", ctypes.c_wchar * 129),
("value", ctypes.c_wchar * 260),
]
class DIAGNOSTIC_REPORT_SIGNATURE(ctypes.Structure):
_fields_ = [
("eventName", ctypes.c_wchar * 65),
("parameters", DIAGNOSTIC_REPORT_PARAMETER * 10),
]#[repr(C)]
pub struct DIAGNOSTIC_REPORT_PARAMETER {
pub name: [u16; 129],
pub value: [u16; 260],
}
#[repr(C)]
pub struct DIAGNOSTIC_REPORT_SIGNATURE {
pub eventName: [u16; 65],
pub parameters: [DIAGNOSTIC_REPORT_PARAMETER; 10],
}import "golang.org/x/sys/windows"
type DIAGNOSTIC_REPORT_PARAMETER struct {
name [129]uint16
value [260]uint16
}
type DIAGNOSTIC_REPORT_SIGNATURE struct {
eventName [65]uint16
parameters [10]DIAGNOSTIC_REPORT_PARAMETER
}type
DIAGNOSTIC_REPORT_PARAMETER = record
name: array[0..128] of WideChar;
value: array[0..259] of WideChar;
end;
DIAGNOSTIC_REPORT_SIGNATURE = record
eventName: array[0..64] of WideChar;
parameters: array[0..9] of DIAGNOSTIC_REPORT_PARAMETER;
end;const DIAGNOSTIC_REPORT_PARAMETER = extern struct {
name: [129]u16,
value: [260]u16,
};
const DIAGNOSTIC_REPORT_SIGNATURE = extern struct {
eventName: [65]u16,
parameters: [10]DIAGNOSTIC_REPORT_PARAMETER,
};type
DIAGNOSTIC_REPORT_PARAMETER {.bycopy.} = object
name: array[129, uint16]
value: array[260, uint16]
DIAGNOSTIC_REPORT_SIGNATURE {.bycopy.} = object
eventName: array[65, uint16]
parameters: array[10, DIAGNOSTIC_REPORT_PARAMETER]struct DIAGNOSTIC_REPORT_PARAMETER
{
wchar[129] name;
wchar[260] value;
}
struct DIAGNOSTIC_REPORT_SIGNATURE
{
wchar[65] eventName;
DIAGNOSTIC_REPORT_PARAMETER[10] parameters;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; DIAGNOSTIC_REPORT_SIGNATURE サイズ: 7910 バイト(x64)
dim st, 1978 ; 4byte整数×1978(構造体サイズ 7910 / 4 切り上げ)
; eventName : WCHAR (+0, 130byte) varptr(st)+0 を基点に操作(130byte:入れ子/配列)
; parameters : DIAGNOSTIC_REPORT_PARAMETER (+130, 7780byte) varptr(st)+130 を基点に操作(7780byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global DIAGNOSTIC_REPORT_PARAMETER
#field wchar name 129
#field wchar value 260
#endstruct
#defstruct global DIAGNOSTIC_REPORT_SIGNATURE
#field wchar eventName 65
#field DIAGNOSTIC_REPORT_PARAMETER parameters 10
#endstruct
stdim st, DIAGNOSTIC_REPORT_SIGNATURE ; NSTRUCT 変数を確保