Win32 API 日本語リファレンス
ホームSystem.Diagnostics.Debug › MINIDUMP_MODULE_CALLBACK

MINIDUMP_MODULE_CALLBACK

構造体
サイズx64: 104 バイト / x86: 92 バイトパッキング4

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

フィールド

フィールドサイズx64x86説明
FullPathLPWSTR8/4+0+0モジュールファイルの完全パスを示すワイド文字列。
BaseOfImageULONGLONG8+8+4メモリ上にロードされたモジュールのベースアドレスを示す。
SizeOfImageDWORD4+16+12ロードされたイメージのバイトサイズを示す。
CheckSumDWORD4+20+16モジュールのチェックサム値を示す。
TimeDateStampDWORD4+24+20モジュールのタイムスタンプ(リンク日時)を示す。
VersionInfoVS_FIXEDFILEINFO52+28+24モジュールのバージョン情報(VS_FIXEDFILEINFO)を保持する。
CvRecordvoid*8/4+80+76CodeView デバッグ情報レコードを指すポインタ。NULL の場合あり。
SizeOfCvRecordDWORD4+88+80CvRecord のバイト数を示す。
MiscRecordvoid*8/4+92+84その他のデバッグ情報レコードを指すポインタ。NULL の場合あり。
SizeOfMiscRecordDWORD4+100+88MiscRecord のバイト数を示す。

各言語での定義

#include <windows.h>

// VS_FIXEDFILEINFO  (x64 52 / x86 52 バイト)
typedef struct VS_FIXEDFILEINFO {
    DWORD dwSignature;
    DWORD dwStrucVersion;
    DWORD dwFileVersionMS;
    DWORD dwFileVersionLS;
    DWORD dwProductVersionMS;
    DWORD dwProductVersionLS;
    DWORD dwFileFlagsMask;
    VS_FIXEDFILEINFO_FILE_FLAGS dwFileFlags;
    VS_FIXEDFILEINFO_FILE_OS dwFileOS;
    DWORD dwFileType;
    DWORD dwFileSubtype;
    DWORD dwFileDateMS;
    DWORD dwFileDateLS;
} VS_FIXEDFILEINFO;

// MINIDUMP_MODULE_CALLBACK  (x64 104 / x86 92 バイト)
#pragma pack(push, 4)
typedef struct MINIDUMP_MODULE_CALLBACK {
    LPWSTR FullPath;
    ULONGLONG BaseOfImage;
    DWORD SizeOfImage;
    DWORD CheckSum;
    DWORD TimeDateStamp;
    VS_FIXEDFILEINFO VersionInfo;
    void* CvRecord;
    DWORD SizeOfCvRecord;
    void* MiscRecord;
    DWORD SizeOfMiscRecord;
} MINIDUMP_MODULE_CALLBACK;
#pragma pack(pop)
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct VS_FIXEDFILEINFO
{
    public uint dwSignature;
    public uint dwStrucVersion;
    public uint dwFileVersionMS;
    public uint dwFileVersionLS;
    public uint dwProductVersionMS;
    public uint dwProductVersionLS;
    public uint dwFileFlagsMask;
    public uint dwFileFlags;
    public uint dwFileOS;
    public uint dwFileType;
    public uint dwFileSubtype;
    public uint dwFileDateMS;
    public uint dwFileDateLS;
}

[StructLayout(LayoutKind.Sequential, Pack = 4, CharSet = CharSet.Unicode)]
public struct MINIDUMP_MODULE_CALLBACK
{
    public IntPtr FullPath;
    public ulong BaseOfImage;
    public uint SizeOfImage;
    public uint CheckSum;
    public uint TimeDateStamp;
    public VS_FIXEDFILEINFO VersionInfo;
    public IntPtr CvRecord;
    public uint SizeOfCvRecord;
    public IntPtr MiscRecord;
    public uint SizeOfMiscRecord;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure VS_FIXEDFILEINFO
    Public dwSignature As UInteger
    Public dwStrucVersion As UInteger
    Public dwFileVersionMS As UInteger
    Public dwFileVersionLS As UInteger
    Public dwProductVersionMS As UInteger
    Public dwProductVersionLS As UInteger
    Public dwFileFlagsMask As UInteger
    Public dwFileFlags As UInteger
    Public dwFileOS As UInteger
    Public dwFileType As UInteger
    Public dwFileSubtype As UInteger
    Public dwFileDateMS As UInteger
    Public dwFileDateLS As UInteger
End Structure

<StructLayout(LayoutKind.Sequential, Pack:=4, CharSet:=CharSet.Unicode)>
Public Structure MINIDUMP_MODULE_CALLBACK
    Public FullPath As IntPtr
    Public BaseOfImage As ULong
    Public SizeOfImage As UInteger
    Public CheckSum As UInteger
    Public TimeDateStamp As UInteger
    Public VersionInfo As VS_FIXEDFILEINFO
    Public CvRecord As IntPtr
    Public SizeOfCvRecord As UInteger
    Public MiscRecord As IntPtr
    Public SizeOfMiscRecord As UInteger
End Structure
import ctypes
from ctypes import wintypes

class VS_FIXEDFILEINFO(ctypes.Structure):
    _fields_ = [
        ("dwSignature", wintypes.DWORD),
        ("dwStrucVersion", wintypes.DWORD),
        ("dwFileVersionMS", wintypes.DWORD),
        ("dwFileVersionLS", wintypes.DWORD),
        ("dwProductVersionMS", wintypes.DWORD),
        ("dwProductVersionLS", wintypes.DWORD),
        ("dwFileFlagsMask", wintypes.DWORD),
        ("dwFileFlags", wintypes.DWORD),
        ("dwFileOS", wintypes.DWORD),
        ("dwFileType", wintypes.DWORD),
        ("dwFileSubtype", wintypes.DWORD),
        ("dwFileDateMS", wintypes.DWORD),
        ("dwFileDateLS", wintypes.DWORD),
    ]

class MINIDUMP_MODULE_CALLBACK(ctypes.Structure):
    _pack_ = 4
    _fields_ = [
        ("FullPath", ctypes.c_void_p),
        ("BaseOfImage", ctypes.c_ulonglong),
        ("SizeOfImage", wintypes.DWORD),
        ("CheckSum", wintypes.DWORD),
        ("TimeDateStamp", wintypes.DWORD),
        ("VersionInfo", VS_FIXEDFILEINFO),
        ("CvRecord", ctypes.c_void_p),
        ("SizeOfCvRecord", wintypes.DWORD),
        ("MiscRecord", ctypes.c_void_p),
        ("SizeOfMiscRecord", wintypes.DWORD),
    ]
#[repr(C)]
pub struct VS_FIXEDFILEINFO {
    pub dwSignature: u32,
    pub dwStrucVersion: u32,
    pub dwFileVersionMS: u32,
    pub dwFileVersionLS: u32,
    pub dwProductVersionMS: u32,
    pub dwProductVersionLS: u32,
    pub dwFileFlagsMask: u32,
    pub dwFileFlags: u32,
    pub dwFileOS: u32,
    pub dwFileType: u32,
    pub dwFileSubtype: u32,
    pub dwFileDateMS: u32,
    pub dwFileDateLS: u32,
}

#[repr(C, packed(4))]
pub struct MINIDUMP_MODULE_CALLBACK {
    pub FullPath: *mut core::ffi::c_void,
    pub BaseOfImage: u64,
    pub SizeOfImage: u32,
    pub CheckSum: u32,
    pub TimeDateStamp: u32,
    pub VersionInfo: VS_FIXEDFILEINFO,
    pub CvRecord: *mut core::ffi::c_void,
    pub SizeOfCvRecord: u32,
    pub MiscRecord: *mut core::ffi::c_void,
    pub SizeOfMiscRecord: u32,
}
import "golang.org/x/sys/windows"

type VS_FIXEDFILEINFO struct {
	dwSignature uint32
	dwStrucVersion uint32
	dwFileVersionMS uint32
	dwFileVersionLS uint32
	dwProductVersionMS uint32
	dwProductVersionLS uint32
	dwFileFlagsMask uint32
	dwFileFlags uint32
	dwFileOS uint32
	dwFileType uint32
	dwFileSubtype uint32
	dwFileDateMS uint32
	dwFileDateLS uint32
}

type MINIDUMP_MODULE_CALLBACK struct {
	FullPath uintptr
	BaseOfImage uint64
	SizeOfImage uint32
	CheckSum uint32
	TimeDateStamp uint32
	VersionInfo VS_FIXEDFILEINFO
	CvRecord uintptr
	SizeOfCvRecord uint32
	MiscRecord uintptr
	SizeOfMiscRecord uint32
}
type
  VS_FIXEDFILEINFO = record
    dwSignature: DWORD;
    dwStrucVersion: DWORD;
    dwFileVersionMS: DWORD;
    dwFileVersionLS: DWORD;
    dwProductVersionMS: DWORD;
    dwProductVersionLS: DWORD;
    dwFileFlagsMask: DWORD;
    dwFileFlags: DWORD;
    dwFileOS: DWORD;
    dwFileType: DWORD;
    dwFileSubtype: DWORD;
    dwFileDateMS: DWORD;
    dwFileDateLS: DWORD;
  end;

  MINIDUMP_MODULE_CALLBACK = packed record
    FullPath: Pointer;
    BaseOfImage: UInt64;
    SizeOfImage: DWORD;
    CheckSum: DWORD;
    TimeDateStamp: DWORD;
    VersionInfo: VS_FIXEDFILEINFO;
    CvRecord: Pointer;
    SizeOfCvRecord: DWORD;
    MiscRecord: Pointer;
    SizeOfMiscRecord: DWORD;
  end;
const VS_FIXEDFILEINFO = extern struct {
    dwSignature: u32,
    dwStrucVersion: u32,
    dwFileVersionMS: u32,
    dwFileVersionLS: u32,
    dwProductVersionMS: u32,
    dwProductVersionLS: u32,
    dwFileFlagsMask: u32,
    dwFileFlags: u32,
    dwFileOS: u32,
    dwFileType: u32,
    dwFileSubtype: u32,
    dwFileDateMS: u32,
    dwFileDateLS: u32,
};

const MINIDUMP_MODULE_CALLBACK = extern struct {
    FullPath: ?*anyopaque,
    BaseOfImage: u64,
    SizeOfImage: u32,
    CheckSum: u32,
    TimeDateStamp: u32,
    VersionInfo: VS_FIXEDFILEINFO,
    CvRecord: ?*anyopaque,
    SizeOfCvRecord: u32,
    MiscRecord: ?*anyopaque,
    SizeOfMiscRecord: u32,
};
type
  VS_FIXEDFILEINFO {.bycopy.} = object
    dwSignature: uint32
    dwStrucVersion: uint32
    dwFileVersionMS: uint32
    dwFileVersionLS: uint32
    dwProductVersionMS: uint32
    dwProductVersionLS: uint32
    dwFileFlagsMask: uint32
    dwFileFlags: uint32
    dwFileOS: uint32
    dwFileType: uint32
    dwFileSubtype: uint32
    dwFileDateMS: uint32
    dwFileDateLS: uint32

  MINIDUMP_MODULE_CALLBACK {.packed.} = object
    FullPath: pointer
    BaseOfImage: uint64
    SizeOfImage: uint32
    CheckSum: uint32
    TimeDateStamp: uint32
    VersionInfo: VS_FIXEDFILEINFO
    CvRecord: pointer
    SizeOfCvRecord: uint32
    MiscRecord: pointer
    SizeOfMiscRecord: uint32
struct VS_FIXEDFILEINFO
{
    uint dwSignature;
    uint dwStrucVersion;
    uint dwFileVersionMS;
    uint dwFileVersionLS;
    uint dwProductVersionMS;
    uint dwProductVersionLS;
    uint dwFileFlagsMask;
    uint dwFileFlags;
    uint dwFileOS;
    uint dwFileType;
    uint dwFileSubtype;
    uint dwFileDateMS;
    uint dwFileDateLS;
}

align(4)
struct MINIDUMP_MODULE_CALLBACK
{
    void* FullPath;
    ulong BaseOfImage;
    uint SizeOfImage;
    uint CheckSum;
    uint TimeDateStamp;
    VS_FIXEDFILEINFO VersionInfo;
    void* CvRecord;
    uint SizeOfCvRecord;
    void* MiscRecord;
    uint SizeOfMiscRecord;
}

HSP用 定義

HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; MINIDUMP_MODULE_CALLBACK サイズ: 92 バイト(x86)
dim st, 23    ; 4byte整数×23(構造体サイズ 92 / 4 切り上げ)
; FullPath : LPWSTR (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; BaseOfImage : ULONGLONG (+4, 8byte)  qpoke st,4,値 / qpeek(st,4)  ※IronHSPのみ。3.7/3.8は lpoke st,4,下位 : lpoke st,8,上位
; SizeOfImage : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; CheckSum : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; TimeDateStamp : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; VersionInfo : VS_FIXEDFILEINFO (+24, 52byte)  varptr(st)+24 を基点に操作(52byte:入れ子/配列)
; CvRecord : void* (+76, 4byte)  st.19 = 値  /  値 = st.19   (lpoke/lpeek も可)
; SizeOfCvRecord : DWORD (+80, 4byte)  st.20 = 値  /  値 = st.20   (lpoke/lpeek も可)
; MiscRecord : void* (+84, 4byte)  st.21 = 値  /  値 = st.21   (lpoke/lpeek も可)
; SizeOfMiscRecord : DWORD (+88, 4byte)  st.22 = 値  /  値 = st.22   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; MINIDUMP_MODULE_CALLBACK サイズ: 104 バイト(x64)
dim st, 26    ; 4byte整数×26(構造体サイズ 104 / 4 切り上げ)
; FullPath : LPWSTR (+0, 8byte)  qpoke st,0,値 / qpeek(st,0)  ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; BaseOfImage : ULONGLONG (+8, 8byte)  qpoke st,8,値 / qpeek(st,8)  ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; SizeOfImage : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; CheckSum : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; TimeDateStamp : DWORD (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; VersionInfo : VS_FIXEDFILEINFO (+28, 52byte)  varptr(st)+28 を基点に操作(52byte:入れ子/配列)
; CvRecord : void* (+80, 8byte)  qpoke st,80,値 / qpeek(st,80)  ※IronHSPのみ。3.7/3.8は lpoke st,80,下位 : lpoke st,84,上位
; SizeOfCvRecord : DWORD (+88, 4byte)  st.22 = 値  /  値 = st.22   (lpoke/lpeek も可)
; MiscRecord : void* (+92, 8byte)  qpoke st,92,値 / qpeek(st,92)  ※IronHSPのみ。3.7/3.8は lpoke st,92,下位 : lpoke st,96,上位
; SizeOfMiscRecord : DWORD (+100, 4byte)  st.25 = 値  /  値 = st.25   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global VS_FIXEDFILEINFO
    #field int dwSignature
    #field int dwStrucVersion
    #field int dwFileVersionMS
    #field int dwFileVersionLS
    #field int dwProductVersionMS
    #field int dwProductVersionLS
    #field int dwFileFlagsMask
    #field int dwFileFlags
    #field int dwFileOS
    #field int dwFileType
    #field int dwFileSubtype
    #field int dwFileDateMS
    #field int dwFileDateLS
#endstruct

#defstruct global MINIDUMP_MODULE_CALLBACK, pack=4
    #field intptr FullPath
    #field int64 BaseOfImage
    #field int SizeOfImage
    #field int CheckSum
    #field int TimeDateStamp
    #field VS_FIXEDFILEINFO VersionInfo
    #field intptr CvRecord
    #field int SizeOfCvRecord
    #field intptr MiscRecord
    #field int SizeOfMiscRecord
#endstruct

stdim st, MINIDUMP_MODULE_CALLBACK        ; NSTRUCT 変数を確保
st->BaseOfImage = 100
mes "BaseOfImage=" + st->BaseOfImage