Win32 API 日本語リファレンス
ホームSystem.SystemServices › RUNTIME_REPORT_PACKAGE_HEADER

RUNTIME_REPORT_PACKAGE_HEADER

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

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

フィールド

フィールドサイズx64x86説明
MagicDWORD4+0+0パッケージ識別用のマジック値。検証に使用する。
PackageVersionWORD2+4+4レポートパッケージ形式のバージョン番号。
NumberOfReportsWORD2+6+6パッケージに含まれるレポート数。
ReportTypesBitmapULONGLONG8+8+8含まれるレポート種別を示すビットマップ。
PackageSizeDWORD4+16+16パッケージ全体のサイズをバイト単位で示す。
ReportDigestTypeWORD2+20+20レポートダイジェスト(ハッシュ)の種別を示す。
TotalReportDigestsSizeWORD2+22+22全レポートダイジェスト領域の合計サイズ。
ReservedWORD2+24+24将来用の予約フィールド。
SignatureSchemeWORD2+26+26署名方式の識別子。
SignatureSizeDWORD4+28+28署名データのサイズをバイト単位で示す。
TotalAuthenticatedReportsSizeDWORD4+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 Structure
import 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: uint32
struct 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