ホーム › System.SystemServices › RUNTIME_REPORT_PACKAGE_HEADER
RUNTIME_REPORT_PACKAGE_HEADER
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| Magic | DWORD | 4 | +0 | +0 | パッケージ識別用のマジック値。検証に使用する。 |
| PackageVersion | WORD | 2 | +4 | +4 | レポートパッケージ形式のバージョン番号。 |
| NumberOfReports | WORD | 2 | +6 | +6 | パッケージに含まれるレポート数。 |
| ReportTypesBitmap | ULONGLONG | 8 | +8 | +8 | 含まれるレポート種別を示すビットマップ。 |
| PackageSize | DWORD | 4 | +16 | +16 | パッケージ全体のサイズをバイト単位で示す。 |
| ReportDigestType | WORD | 2 | +20 | +20 | レポートダイジェスト(ハッシュ)の種別を示す。 |
| TotalReportDigestsSize | WORD | 2 | +22 | +22 | 全レポートダイジェスト領域の合計サイズ。 |
| Reserved | WORD | 2 | +24 | +24 | 将来用の予約フィールド。 |
| SignatureScheme | WORD | 2 | +26 | +26 | 署名方式の識別子。 |
| SignatureSize | DWORD | 4 | +28 | +28 | 署名データのサイズをバイト単位で示す。 |
| TotalAuthenticatedReportsSize | DWORD | 4 | +32 | +32 | 認証対象レポートデータの合計サイズ。 |
各言語での定義
#include <windows.h>
// RUNTIME_REPORT_PACKAGE_HEADER (x64 40 / x86 40 バイト)
typedef struct RUNTIME_REPORT_PACKAGE_HEADER {
DWORD Magic;
WORD PackageVersion;
WORD NumberOfReports;
ULONGLONG ReportTypesBitmap;
DWORD PackageSize;
WORD ReportDigestType;
WORD TotalReportDigestsSize;
WORD Reserved;
WORD SignatureScheme;
DWORD SignatureSize;
DWORD TotalAuthenticatedReportsSize;
} RUNTIME_REPORT_PACKAGE_HEADER;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct RUNTIME_REPORT_PACKAGE_HEADER
{
public uint Magic;
public ushort PackageVersion;
public ushort NumberOfReports;
public ulong ReportTypesBitmap;
public uint PackageSize;
public ushort ReportDigestType;
public ushort TotalReportDigestsSize;
public ushort Reserved;
public ushort SignatureScheme;
public uint SignatureSize;
public uint TotalAuthenticatedReportsSize;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure RUNTIME_REPORT_PACKAGE_HEADER
Public Magic As UInteger
Public PackageVersion As UShort
Public NumberOfReports As UShort
Public ReportTypesBitmap As ULong
Public PackageSize As UInteger
Public ReportDigestType As UShort
Public TotalReportDigestsSize As UShort
Public Reserved As UShort
Public SignatureScheme As UShort
Public SignatureSize As UInteger
Public TotalAuthenticatedReportsSize As UInteger
End Structureimport ctypes
from ctypes import wintypes
class RUNTIME_REPORT_PACKAGE_HEADER(ctypes.Structure):
_fields_ = [
("Magic", wintypes.DWORD),
("PackageVersion", ctypes.c_ushort),
("NumberOfReports", ctypes.c_ushort),
("ReportTypesBitmap", ctypes.c_ulonglong),
("PackageSize", wintypes.DWORD),
("ReportDigestType", ctypes.c_ushort),
("TotalReportDigestsSize", ctypes.c_ushort),
("Reserved", ctypes.c_ushort),
("SignatureScheme", ctypes.c_ushort),
("SignatureSize", wintypes.DWORD),
("TotalAuthenticatedReportsSize", wintypes.DWORD),
]#[repr(C)]
pub struct RUNTIME_REPORT_PACKAGE_HEADER {
pub Magic: u32,
pub PackageVersion: u16,
pub NumberOfReports: u16,
pub ReportTypesBitmap: u64,
pub PackageSize: u32,
pub ReportDigestType: u16,
pub TotalReportDigestsSize: u16,
pub Reserved: u16,
pub SignatureScheme: u16,
pub SignatureSize: u32,
pub TotalAuthenticatedReportsSize: u32,
}import "golang.org/x/sys/windows"
type RUNTIME_REPORT_PACKAGE_HEADER struct {
Magic uint32
PackageVersion uint16
NumberOfReports uint16
ReportTypesBitmap uint64
PackageSize uint32
ReportDigestType uint16
TotalReportDigestsSize uint16
Reserved uint16
SignatureScheme uint16
SignatureSize uint32
TotalAuthenticatedReportsSize uint32
}type
RUNTIME_REPORT_PACKAGE_HEADER = record
Magic: DWORD;
PackageVersion: Word;
NumberOfReports: Word;
ReportTypesBitmap: UInt64;
PackageSize: DWORD;
ReportDigestType: Word;
TotalReportDigestsSize: Word;
Reserved: Word;
SignatureScheme: Word;
SignatureSize: DWORD;
TotalAuthenticatedReportsSize: DWORD;
end;const RUNTIME_REPORT_PACKAGE_HEADER = extern struct {
Magic: u32,
PackageVersion: u16,
NumberOfReports: u16,
ReportTypesBitmap: u64,
PackageSize: u32,
ReportDigestType: u16,
TotalReportDigestsSize: u16,
Reserved: u16,
SignatureScheme: u16,
SignatureSize: u32,
TotalAuthenticatedReportsSize: u32,
};type
RUNTIME_REPORT_PACKAGE_HEADER {.bycopy.} = object
Magic: uint32
PackageVersion: uint16
NumberOfReports: uint16
ReportTypesBitmap: uint64
PackageSize: uint32
ReportDigestType: uint16
TotalReportDigestsSize: uint16
Reserved: uint16
SignatureScheme: uint16
SignatureSize: uint32
TotalAuthenticatedReportsSize: uint32struct RUNTIME_REPORT_PACKAGE_HEADER
{
uint Magic;
ushort PackageVersion;
ushort NumberOfReports;
ulong ReportTypesBitmap;
uint PackageSize;
ushort ReportDigestType;
ushort TotalReportDigestsSize;
ushort Reserved;
ushort SignatureScheme;
uint SignatureSize;
uint TotalAuthenticatedReportsSize;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; RUNTIME_REPORT_PACKAGE_HEADER サイズ: 40 バイト(x64)
dim st, 10 ; 4byte整数×10(構造体サイズ 40 / 4 切り上げ)
; Magic : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; PackageVersion : WORD (+4, 2byte) wpoke st,4,値 / 値 = wpeek(st,4)
; NumberOfReports : WORD (+6, 2byte) wpoke st,6,値 / 値 = wpeek(st,6)
; ReportTypesBitmap : ULONGLONG (+8, 8byte) qpoke st,8,値 / qpeek(st,8) ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; PackageSize : DWORD (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; ReportDigestType : WORD (+20, 2byte) wpoke st,20,値 / 値 = wpeek(st,20)
; TotalReportDigestsSize : WORD (+22, 2byte) wpoke st,22,値 / 値 = wpeek(st,22)
; Reserved : WORD (+24, 2byte) wpoke st,24,値 / 値 = wpeek(st,24)
; SignatureScheme : WORD (+26, 2byte) wpoke st,26,値 / 値 = wpeek(st,26)
; SignatureSize : DWORD (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; TotalAuthenticatedReportsSize : DWORD (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global RUNTIME_REPORT_PACKAGE_HEADER
#field int Magic
#field short PackageVersion
#field short NumberOfReports
#field int64 ReportTypesBitmap
#field int PackageSize
#field short ReportDigestType
#field short TotalReportDigestsSize
#field short Reserved
#field short SignatureScheme
#field int SignatureSize
#field int TotalAuthenticatedReportsSize
#endstruct
stdim st, RUNTIME_REPORT_PACKAGE_HEADER ; NSTRUCT 変数を確保
st->Magic = 100
mes "Magic=" + st->Magic