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

MINIDUMP_MODULE_LIST

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

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

フィールド

フィールドサイズx64x86説明
NumberOfModulesDWORD4+0+0配列に含まれるモジュール数。
ModulesMINIDUMP_MODULE108+4+4モジュール情報(MINIDUMP_MODULE)の配列。

各言語での定義

#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_LOCATION_DESCRIPTOR  (x64 8 / x86 8 バイト)
#pragma pack(push, 4)
typedef struct MINIDUMP_LOCATION_DESCRIPTOR {
    DWORD DataSize;
    DWORD Rva;
} MINIDUMP_LOCATION_DESCRIPTOR;
#pragma pack(pop)

// MINIDUMP_MODULE  (x64 108 / x86 108 バイト)
#pragma pack(push, 4)
typedef struct MINIDUMP_MODULE {
    ULONGLONG BaseOfImage;
    DWORD SizeOfImage;
    DWORD CheckSum;
    DWORD TimeDateStamp;
    DWORD ModuleNameRva;
    VS_FIXEDFILEINFO VersionInfo;
    MINIDUMP_LOCATION_DESCRIPTOR CvRecord;
    MINIDUMP_LOCATION_DESCRIPTOR MiscRecord;
    ULONGLONG Reserved0;
    ULONGLONG Reserved1;
} MINIDUMP_MODULE;
#pragma pack(pop)

// MINIDUMP_MODULE_LIST  (x64 112 / x86 112 バイト)
#pragma pack(push, 4)
typedef struct MINIDUMP_MODULE_LIST {
    DWORD NumberOfModules;
    MINIDUMP_MODULE Modules[1];
} MINIDUMP_MODULE_LIST;
#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_LOCATION_DESCRIPTOR
{
    public uint DataSize;
    public uint Rva;
}

[StructLayout(LayoutKind.Sequential, Pack = 4, CharSet = CharSet.Unicode)]
public struct MINIDUMP_MODULE
{
    public ulong BaseOfImage;
    public uint SizeOfImage;
    public uint CheckSum;
    public uint TimeDateStamp;
    public uint ModuleNameRva;
    public VS_FIXEDFILEINFO VersionInfo;
    public MINIDUMP_LOCATION_DESCRIPTOR CvRecord;
    public MINIDUMP_LOCATION_DESCRIPTOR MiscRecord;
    public ulong Reserved0;
    public ulong Reserved1;
}

[StructLayout(LayoutKind.Sequential, Pack = 4, CharSet = CharSet.Unicode)]
public struct MINIDUMP_MODULE_LIST
{
    public uint NumberOfModules;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 1)] public MINIDUMP_MODULE[] Modules;
}
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_LOCATION_DESCRIPTOR
    Public DataSize As UInteger
    Public Rva As UInteger
End Structure

<StructLayout(LayoutKind.Sequential, Pack:=4, CharSet:=CharSet.Unicode)>
Public Structure MINIDUMP_MODULE
    Public BaseOfImage As ULong
    Public SizeOfImage As UInteger
    Public CheckSum As UInteger
    Public TimeDateStamp As UInteger
    Public ModuleNameRva As UInteger
    Public VersionInfo As VS_FIXEDFILEINFO
    Public CvRecord As MINIDUMP_LOCATION_DESCRIPTOR
    Public MiscRecord As MINIDUMP_LOCATION_DESCRIPTOR
    Public Reserved0 As ULong
    Public Reserved1 As ULong
End Structure

<StructLayout(LayoutKind.Sequential, Pack:=4, CharSet:=CharSet.Unicode)>
Public Structure MINIDUMP_MODULE_LIST
    Public NumberOfModules As UInteger
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=1)> Public Modules() As MINIDUMP_MODULE
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_LOCATION_DESCRIPTOR(ctypes.Structure):
    _pack_ = 4
    _fields_ = [
        ("DataSize", wintypes.DWORD),
        ("Rva", wintypes.DWORD),
    ]

class MINIDUMP_MODULE(ctypes.Structure):
    _pack_ = 4
    _fields_ = [
        ("BaseOfImage", ctypes.c_ulonglong),
        ("SizeOfImage", wintypes.DWORD),
        ("CheckSum", wintypes.DWORD),
        ("TimeDateStamp", wintypes.DWORD),
        ("ModuleNameRva", wintypes.DWORD),
        ("VersionInfo", VS_FIXEDFILEINFO),
        ("CvRecord", MINIDUMP_LOCATION_DESCRIPTOR),
        ("MiscRecord", MINIDUMP_LOCATION_DESCRIPTOR),
        ("Reserved0", ctypes.c_ulonglong),
        ("Reserved1", ctypes.c_ulonglong),
    ]

class MINIDUMP_MODULE_LIST(ctypes.Structure):
    _pack_ = 4
    _fields_ = [
        ("NumberOfModules", wintypes.DWORD),
        ("Modules", MINIDUMP_MODULE * 1),
    ]
#[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_LOCATION_DESCRIPTOR {
    pub DataSize: u32,
    pub Rva: u32,
}

#[repr(C, packed(4))]
pub struct MINIDUMP_MODULE {
    pub BaseOfImage: u64,
    pub SizeOfImage: u32,
    pub CheckSum: u32,
    pub TimeDateStamp: u32,
    pub ModuleNameRva: u32,
    pub VersionInfo: VS_FIXEDFILEINFO,
    pub CvRecord: MINIDUMP_LOCATION_DESCRIPTOR,
    pub MiscRecord: MINIDUMP_LOCATION_DESCRIPTOR,
    pub Reserved0: u64,
    pub Reserved1: u64,
}

#[repr(C, packed(4))]
pub struct MINIDUMP_MODULE_LIST {
    pub NumberOfModules: u32,
    pub Modules: [MINIDUMP_MODULE; 1],
}
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_LOCATION_DESCRIPTOR struct {
	DataSize uint32
	Rva uint32
}

type MINIDUMP_MODULE struct {
	BaseOfImage uint64
	SizeOfImage uint32
	CheckSum uint32
	TimeDateStamp uint32
	ModuleNameRva uint32
	VersionInfo VS_FIXEDFILEINFO
	CvRecord MINIDUMP_LOCATION_DESCRIPTOR
	MiscRecord MINIDUMP_LOCATION_DESCRIPTOR
	Reserved0 uint64
	Reserved1 uint64
}

type MINIDUMP_MODULE_LIST struct {
	NumberOfModules uint32
	Modules [1]MINIDUMP_MODULE
}
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_LOCATION_DESCRIPTOR = packed record
    DataSize: DWORD;
    Rva: DWORD;
  end;

  MINIDUMP_MODULE = packed record
    BaseOfImage: UInt64;
    SizeOfImage: DWORD;
    CheckSum: DWORD;
    TimeDateStamp: DWORD;
    ModuleNameRva: DWORD;
    VersionInfo: VS_FIXEDFILEINFO;
    CvRecord: MINIDUMP_LOCATION_DESCRIPTOR;
    MiscRecord: MINIDUMP_LOCATION_DESCRIPTOR;
    Reserved0: UInt64;
    Reserved1: UInt64;
  end;

  MINIDUMP_MODULE_LIST = packed record
    NumberOfModules: DWORD;
    Modules: array[0..0] of MINIDUMP_MODULE;
  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_LOCATION_DESCRIPTOR = extern struct {
    DataSize: u32,
    Rva: u32,
};

const MINIDUMP_MODULE = extern struct {
    BaseOfImage: u64,
    SizeOfImage: u32,
    CheckSum: u32,
    TimeDateStamp: u32,
    ModuleNameRva: u32,
    VersionInfo: VS_FIXEDFILEINFO,
    CvRecord: MINIDUMP_LOCATION_DESCRIPTOR,
    MiscRecord: MINIDUMP_LOCATION_DESCRIPTOR,
    Reserved0: u64,
    Reserved1: u64,
};

const MINIDUMP_MODULE_LIST = extern struct {
    NumberOfModules: u32,
    Modules: [1]MINIDUMP_MODULE,
};
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_LOCATION_DESCRIPTOR {.packed.} = object
    DataSize: uint32
    Rva: uint32

  MINIDUMP_MODULE {.packed.} = object
    BaseOfImage: uint64
    SizeOfImage: uint32
    CheckSum: uint32
    TimeDateStamp: uint32
    ModuleNameRva: uint32
    VersionInfo: VS_FIXEDFILEINFO
    CvRecord: MINIDUMP_LOCATION_DESCRIPTOR
    MiscRecord: MINIDUMP_LOCATION_DESCRIPTOR
    Reserved0: uint64
    Reserved1: uint64

  MINIDUMP_MODULE_LIST {.packed.} = object
    NumberOfModules: uint32
    Modules: array[1, MINIDUMP_MODULE]
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_LOCATION_DESCRIPTOR
{
    uint DataSize;
    uint Rva;
}

align(4)
struct MINIDUMP_MODULE
{
    ulong BaseOfImage;
    uint SizeOfImage;
    uint CheckSum;
    uint TimeDateStamp;
    uint ModuleNameRva;
    VS_FIXEDFILEINFO VersionInfo;
    MINIDUMP_LOCATION_DESCRIPTOR CvRecord;
    MINIDUMP_LOCATION_DESCRIPTOR MiscRecord;
    ulong Reserved0;
    ulong Reserved1;
}

align(4)
struct MINIDUMP_MODULE_LIST
{
    uint NumberOfModules;
    MINIDUMP_MODULE[1] Modules;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; MINIDUMP_MODULE_LIST サイズ: 112 バイト(x64)
dim st, 28    ; 4byte整数×28(構造体サイズ 112 / 4 切り上げ)
; NumberOfModules : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; Modules : MINIDUMP_MODULE (+4, 108byte)  varptr(st)+4 を基点に操作(108byte:入れ子/配列)
; ※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_LOCATION_DESCRIPTOR, pack=4
    #field int DataSize
    #field int Rva
#endstruct

#defstruct global MINIDUMP_MODULE, pack=4
    #field int64 BaseOfImage
    #field int SizeOfImage
    #field int CheckSum
    #field int TimeDateStamp
    #field int ModuleNameRva
    #field VS_FIXEDFILEINFO VersionInfo
    #field MINIDUMP_LOCATION_DESCRIPTOR CvRecord
    #field MINIDUMP_LOCATION_DESCRIPTOR MiscRecord
    #field int64 Reserved0
    #field int64 Reserved1
#endstruct

#defstruct global MINIDUMP_MODULE_LIST, pack=4
    #field int NumberOfModules
    #field MINIDUMP_MODULE Modules 1
#endstruct

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