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

IMAGE_VXD_HEADER

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

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

フィールド

フィールドサイズx64x86説明
e32_magicWORD2+0+0LE/LXヘッダーのマジック値。
e32_borderBYTE1+2+2バイトオーダー(0でリトルエンディアン)。
e32_worderBYTE1+3+3ワードオーダー(0でリトルエンディアン)。
e32_levelDWORD4+4+4リンカフォーマットレベル。
e32_cpuWORD2+8+8対象CPU種別。
e32_osWORD2+10+10対象OS種別。
e32_verDWORD4+12+12モジュールバージョン。
e32_mflagsDWORD4+16+16モジュールフラグ。
e32_mpagesDWORD4+20+20モジュール内の物理ページ数。
e32_startobjDWORD4+24+24エントリポイントを含むオブジェクト番号。
e32_eipDWORD4+28+28エントリポイントのEIPオフセット。
e32_stackobjDWORD4+32+32スタックを含むオブジェクト番号。
e32_espDWORD4+36+36初期ESP値。
e32_pagesizeDWORD4+40+40ページサイズ。
e32_lastpagesizeDWORD4+44+44最終ページのサイズ。
e32_fixupsizeDWORD4+48+48フィックスアップ情報のサイズ。
e32_fixupsumDWORD4+52+52フィックスアップ情報のチェックサム。
e32_ldrsizeDWORD4+56+56ローダーセクションのサイズ。
e32_ldrsumDWORD4+60+60ローダーセクションのチェックサム。
e32_objtabDWORD4+64+64オブジェクトテーブルのオフセット。
e32_objcntDWORD4+68+68オブジェクトテーブルのエントリ数。
e32_objmapDWORD4+72+72オブジェクトページマップのオフセット。
e32_itermapDWORD4+76+76オブジェクト反復データマップのオフセット。
e32_rsrctabDWORD4+80+80リソーステーブルのオフセット。
e32_rsrccntDWORD4+84+84リソーステーブルのエントリ数。
e32_restabDWORD4+88+88常駐名テーブルのオフセット。
e32_enttabDWORD4+92+92エントリテーブルのオフセット。
e32_dirtabDWORD4+96+96モジュールディレクティブテーブルのオフセット。
e32_dircntDWORD4+100+100モジュールディレクティブのエントリ数。
e32_fpagetabDWORD4+104+104ページごとのフィックスアップテーブルのオフセット。
e32_frectabDWORD4+108+108フィックスアップレコードテーブルのオフセット。
e32_impmodDWORD4+112+112インポートモジュール名テーブルのオフセット。
e32_impmodcntDWORD4+116+116インポートモジュール名テーブルのエントリ数。
e32_impprocDWORD4+120+120インポート関数名テーブルのオフセット。
e32_pagesumDWORD4+124+124ページごとのチェックサムテーブルのオフセット。
e32_datapageDWORD4+128+128列挙データページのオフセット。
e32_preloadDWORD4+132+132プリロードするページ数。
e32_nrestabDWORD4+136+136非常駐名テーブルのファイルオフセット。
e32_cbnrestabDWORD4+140+140非常駐名テーブルのサイズ。
e32_nressumDWORD4+144+144非常駐名テーブルのチェックサム。
e32_autodataDWORD4+148+148自動データセグメントのオブジェクト番号。
e32_debuginfoDWORD4+152+152デバッグ情報のオフセット。
e32_debuglenDWORD4+156+156デバッグ情報の長さ。
e32_instpreloadDWORD4+160+160プリロードページ内のインスタンスページ数。
e32_instdemandDWORD4+164+164デマンドロードページ内のインスタンスページ数。
e32_heapsizeDWORD4+168+16816ビットアプリ用ヒープサイズ。
e32_res3BYTE12+172+172予約バイト配列。
e32_winresoffDWORD4+184+184Windowsリソースのオフセット。
e32_winreslenDWORD4+188+188Windowsリソースの長さ。
e32_devidWORD2+192+192デバイスID。
e32_ddkverWORD2+194+194DDKバージョン。

各言語での定義

#include <windows.h>

// IMAGE_VXD_HEADER  (x64 196 / x86 196 バイト)
#pragma pack(push, 2)
typedef struct IMAGE_VXD_HEADER {
    WORD e32_magic;
    BYTE e32_border;
    BYTE e32_worder;
    DWORD e32_level;
    WORD e32_cpu;
    WORD e32_os;
    DWORD e32_ver;
    DWORD e32_mflags;
    DWORD e32_mpages;
    DWORD e32_startobj;
    DWORD e32_eip;
    DWORD e32_stackobj;
    DWORD e32_esp;
    DWORD e32_pagesize;
    DWORD e32_lastpagesize;
    DWORD e32_fixupsize;
    DWORD e32_fixupsum;
    DWORD e32_ldrsize;
    DWORD e32_ldrsum;
    DWORD e32_objtab;
    DWORD e32_objcnt;
    DWORD e32_objmap;
    DWORD e32_itermap;
    DWORD e32_rsrctab;
    DWORD e32_rsrccnt;
    DWORD e32_restab;
    DWORD e32_enttab;
    DWORD e32_dirtab;
    DWORD e32_dircnt;
    DWORD e32_fpagetab;
    DWORD e32_frectab;
    DWORD e32_impmod;
    DWORD e32_impmodcnt;
    DWORD e32_impproc;
    DWORD e32_pagesum;
    DWORD e32_datapage;
    DWORD e32_preload;
    DWORD e32_nrestab;
    DWORD e32_cbnrestab;
    DWORD e32_nressum;
    DWORD e32_autodata;
    DWORD e32_debuginfo;
    DWORD e32_debuglen;
    DWORD e32_instpreload;
    DWORD e32_instdemand;
    DWORD e32_heapsize;
    BYTE e32_res3[12];
    DWORD e32_winresoff;
    DWORD e32_winreslen;
    WORD e32_devid;
    WORD e32_ddkver;
} IMAGE_VXD_HEADER;
#pragma pack(pop)
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, Pack = 2, CharSet = CharSet.Unicode)]
public struct IMAGE_VXD_HEADER
{
    public ushort e32_magic;
    public byte e32_border;
    public byte e32_worder;
    public uint e32_level;
    public ushort e32_cpu;
    public ushort e32_os;
    public uint e32_ver;
    public uint e32_mflags;
    public uint e32_mpages;
    public uint e32_startobj;
    public uint e32_eip;
    public uint e32_stackobj;
    public uint e32_esp;
    public uint e32_pagesize;
    public uint e32_lastpagesize;
    public uint e32_fixupsize;
    public uint e32_fixupsum;
    public uint e32_ldrsize;
    public uint e32_ldrsum;
    public uint e32_objtab;
    public uint e32_objcnt;
    public uint e32_objmap;
    public uint e32_itermap;
    public uint e32_rsrctab;
    public uint e32_rsrccnt;
    public uint e32_restab;
    public uint e32_enttab;
    public uint e32_dirtab;
    public uint e32_dircnt;
    public uint e32_fpagetab;
    public uint e32_frectab;
    public uint e32_impmod;
    public uint e32_impmodcnt;
    public uint e32_impproc;
    public uint e32_pagesum;
    public uint e32_datapage;
    public uint e32_preload;
    public uint e32_nrestab;
    public uint e32_cbnrestab;
    public uint e32_nressum;
    public uint e32_autodata;
    public uint e32_debuginfo;
    public uint e32_debuglen;
    public uint e32_instpreload;
    public uint e32_instdemand;
    public uint e32_heapsize;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)] public byte[] e32_res3;
    public uint e32_winresoff;
    public uint e32_winreslen;
    public ushort e32_devid;
    public ushort e32_ddkver;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, Pack:=2, CharSet:=CharSet.Unicode)>
Public Structure IMAGE_VXD_HEADER
    Public e32_magic As UShort
    Public e32_border As Byte
    Public e32_worder As Byte
    Public e32_level As UInteger
    Public e32_cpu As UShort
    Public e32_os As UShort
    Public e32_ver As UInteger
    Public e32_mflags As UInteger
    Public e32_mpages As UInteger
    Public e32_startobj As UInteger
    Public e32_eip As UInteger
    Public e32_stackobj As UInteger
    Public e32_esp As UInteger
    Public e32_pagesize As UInteger
    Public e32_lastpagesize As UInteger
    Public e32_fixupsize As UInteger
    Public e32_fixupsum As UInteger
    Public e32_ldrsize As UInteger
    Public e32_ldrsum As UInteger
    Public e32_objtab As UInteger
    Public e32_objcnt As UInteger
    Public e32_objmap As UInteger
    Public e32_itermap As UInteger
    Public e32_rsrctab As UInteger
    Public e32_rsrccnt As UInteger
    Public e32_restab As UInteger
    Public e32_enttab As UInteger
    Public e32_dirtab As UInteger
    Public e32_dircnt As UInteger
    Public e32_fpagetab As UInteger
    Public e32_frectab As UInteger
    Public e32_impmod As UInteger
    Public e32_impmodcnt As UInteger
    Public e32_impproc As UInteger
    Public e32_pagesum As UInteger
    Public e32_datapage As UInteger
    Public e32_preload As UInteger
    Public e32_nrestab As UInteger
    Public e32_cbnrestab As UInteger
    Public e32_nressum As UInteger
    Public e32_autodata As UInteger
    Public e32_debuginfo As UInteger
    Public e32_debuglen As UInteger
    Public e32_instpreload As UInteger
    Public e32_instdemand As UInteger
    Public e32_heapsize As UInteger
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=12)> Public e32_res3() As Byte
    Public e32_winresoff As UInteger
    Public e32_winreslen As UInteger
    Public e32_devid As UShort
    Public e32_ddkver As UShort
End Structure
import ctypes
from ctypes import wintypes

class IMAGE_VXD_HEADER(ctypes.Structure):
    _pack_ = 2
    _fields_ = [
        ("e32_magic", ctypes.c_ushort),
        ("e32_border", ctypes.c_ubyte),
        ("e32_worder", ctypes.c_ubyte),
        ("e32_level", wintypes.DWORD),
        ("e32_cpu", ctypes.c_ushort),
        ("e32_os", ctypes.c_ushort),
        ("e32_ver", wintypes.DWORD),
        ("e32_mflags", wintypes.DWORD),
        ("e32_mpages", wintypes.DWORD),
        ("e32_startobj", wintypes.DWORD),
        ("e32_eip", wintypes.DWORD),
        ("e32_stackobj", wintypes.DWORD),
        ("e32_esp", wintypes.DWORD),
        ("e32_pagesize", wintypes.DWORD),
        ("e32_lastpagesize", wintypes.DWORD),
        ("e32_fixupsize", wintypes.DWORD),
        ("e32_fixupsum", wintypes.DWORD),
        ("e32_ldrsize", wintypes.DWORD),
        ("e32_ldrsum", wintypes.DWORD),
        ("e32_objtab", wintypes.DWORD),
        ("e32_objcnt", wintypes.DWORD),
        ("e32_objmap", wintypes.DWORD),
        ("e32_itermap", wintypes.DWORD),
        ("e32_rsrctab", wintypes.DWORD),
        ("e32_rsrccnt", wintypes.DWORD),
        ("e32_restab", wintypes.DWORD),
        ("e32_enttab", wintypes.DWORD),
        ("e32_dirtab", wintypes.DWORD),
        ("e32_dircnt", wintypes.DWORD),
        ("e32_fpagetab", wintypes.DWORD),
        ("e32_frectab", wintypes.DWORD),
        ("e32_impmod", wintypes.DWORD),
        ("e32_impmodcnt", wintypes.DWORD),
        ("e32_impproc", wintypes.DWORD),
        ("e32_pagesum", wintypes.DWORD),
        ("e32_datapage", wintypes.DWORD),
        ("e32_preload", wintypes.DWORD),
        ("e32_nrestab", wintypes.DWORD),
        ("e32_cbnrestab", wintypes.DWORD),
        ("e32_nressum", wintypes.DWORD),
        ("e32_autodata", wintypes.DWORD),
        ("e32_debuginfo", wintypes.DWORD),
        ("e32_debuglen", wintypes.DWORD),
        ("e32_instpreload", wintypes.DWORD),
        ("e32_instdemand", wintypes.DWORD),
        ("e32_heapsize", wintypes.DWORD),
        ("e32_res3", ctypes.c_ubyte * 12),
        ("e32_winresoff", wintypes.DWORD),
        ("e32_winreslen", wintypes.DWORD),
        ("e32_devid", ctypes.c_ushort),
        ("e32_ddkver", ctypes.c_ushort),
    ]
#[repr(C, packed(2))]
pub struct IMAGE_VXD_HEADER {
    pub e32_magic: u16,
    pub e32_border: u8,
    pub e32_worder: u8,
    pub e32_level: u32,
    pub e32_cpu: u16,
    pub e32_os: u16,
    pub e32_ver: u32,
    pub e32_mflags: u32,
    pub e32_mpages: u32,
    pub e32_startobj: u32,
    pub e32_eip: u32,
    pub e32_stackobj: u32,
    pub e32_esp: u32,
    pub e32_pagesize: u32,
    pub e32_lastpagesize: u32,
    pub e32_fixupsize: u32,
    pub e32_fixupsum: u32,
    pub e32_ldrsize: u32,
    pub e32_ldrsum: u32,
    pub e32_objtab: u32,
    pub e32_objcnt: u32,
    pub e32_objmap: u32,
    pub e32_itermap: u32,
    pub e32_rsrctab: u32,
    pub e32_rsrccnt: u32,
    pub e32_restab: u32,
    pub e32_enttab: u32,
    pub e32_dirtab: u32,
    pub e32_dircnt: u32,
    pub e32_fpagetab: u32,
    pub e32_frectab: u32,
    pub e32_impmod: u32,
    pub e32_impmodcnt: u32,
    pub e32_impproc: u32,
    pub e32_pagesum: u32,
    pub e32_datapage: u32,
    pub e32_preload: u32,
    pub e32_nrestab: u32,
    pub e32_cbnrestab: u32,
    pub e32_nressum: u32,
    pub e32_autodata: u32,
    pub e32_debuginfo: u32,
    pub e32_debuglen: u32,
    pub e32_instpreload: u32,
    pub e32_instdemand: u32,
    pub e32_heapsize: u32,
    pub e32_res3: [u8; 12],
    pub e32_winresoff: u32,
    pub e32_winreslen: u32,
    pub e32_devid: u16,
    pub e32_ddkver: u16,
}
import "golang.org/x/sys/windows"

type IMAGE_VXD_HEADER struct {
	e32_magic uint16
	e32_border byte
	e32_worder byte
	e32_level uint32
	e32_cpu uint16
	e32_os uint16
	e32_ver uint32
	e32_mflags uint32
	e32_mpages uint32
	e32_startobj uint32
	e32_eip uint32
	e32_stackobj uint32
	e32_esp uint32
	e32_pagesize uint32
	e32_lastpagesize uint32
	e32_fixupsize uint32
	e32_fixupsum uint32
	e32_ldrsize uint32
	e32_ldrsum uint32
	e32_objtab uint32
	e32_objcnt uint32
	e32_objmap uint32
	e32_itermap uint32
	e32_rsrctab uint32
	e32_rsrccnt uint32
	e32_restab uint32
	e32_enttab uint32
	e32_dirtab uint32
	e32_dircnt uint32
	e32_fpagetab uint32
	e32_frectab uint32
	e32_impmod uint32
	e32_impmodcnt uint32
	e32_impproc uint32
	e32_pagesum uint32
	e32_datapage uint32
	e32_preload uint32
	e32_nrestab uint32
	e32_cbnrestab uint32
	e32_nressum uint32
	e32_autodata uint32
	e32_debuginfo uint32
	e32_debuglen uint32
	e32_instpreload uint32
	e32_instdemand uint32
	e32_heapsize uint32
	e32_res3 [12]byte
	e32_winresoff uint32
	e32_winreslen uint32
	e32_devid uint16
	e32_ddkver uint16
}
type
  IMAGE_VXD_HEADER = packed record
    e32_magic: Word;
    e32_border: Byte;
    e32_worder: Byte;
    e32_level: DWORD;
    e32_cpu: Word;
    e32_os: Word;
    e32_ver: DWORD;
    e32_mflags: DWORD;
    e32_mpages: DWORD;
    e32_startobj: DWORD;
    e32_eip: DWORD;
    e32_stackobj: DWORD;
    e32_esp: DWORD;
    e32_pagesize: DWORD;
    e32_lastpagesize: DWORD;
    e32_fixupsize: DWORD;
    e32_fixupsum: DWORD;
    e32_ldrsize: DWORD;
    e32_ldrsum: DWORD;
    e32_objtab: DWORD;
    e32_objcnt: DWORD;
    e32_objmap: DWORD;
    e32_itermap: DWORD;
    e32_rsrctab: DWORD;
    e32_rsrccnt: DWORD;
    e32_restab: DWORD;
    e32_enttab: DWORD;
    e32_dirtab: DWORD;
    e32_dircnt: DWORD;
    e32_fpagetab: DWORD;
    e32_frectab: DWORD;
    e32_impmod: DWORD;
    e32_impmodcnt: DWORD;
    e32_impproc: DWORD;
    e32_pagesum: DWORD;
    e32_datapage: DWORD;
    e32_preload: DWORD;
    e32_nrestab: DWORD;
    e32_cbnrestab: DWORD;
    e32_nressum: DWORD;
    e32_autodata: DWORD;
    e32_debuginfo: DWORD;
    e32_debuglen: DWORD;
    e32_instpreload: DWORD;
    e32_instdemand: DWORD;
    e32_heapsize: DWORD;
    e32_res3: array[0..11] of Byte;
    e32_winresoff: DWORD;
    e32_winreslen: DWORD;
    e32_devid: Word;
    e32_ddkver: Word;
  end;
const IMAGE_VXD_HEADER = extern struct {
    e32_magic: u16,
    e32_border: u8,
    e32_worder: u8,
    e32_level: u32,
    e32_cpu: u16,
    e32_os: u16,
    e32_ver: u32,
    e32_mflags: u32,
    e32_mpages: u32,
    e32_startobj: u32,
    e32_eip: u32,
    e32_stackobj: u32,
    e32_esp: u32,
    e32_pagesize: u32,
    e32_lastpagesize: u32,
    e32_fixupsize: u32,
    e32_fixupsum: u32,
    e32_ldrsize: u32,
    e32_ldrsum: u32,
    e32_objtab: u32,
    e32_objcnt: u32,
    e32_objmap: u32,
    e32_itermap: u32,
    e32_rsrctab: u32,
    e32_rsrccnt: u32,
    e32_restab: u32,
    e32_enttab: u32,
    e32_dirtab: u32,
    e32_dircnt: u32,
    e32_fpagetab: u32,
    e32_frectab: u32,
    e32_impmod: u32,
    e32_impmodcnt: u32,
    e32_impproc: u32,
    e32_pagesum: u32,
    e32_datapage: u32,
    e32_preload: u32,
    e32_nrestab: u32,
    e32_cbnrestab: u32,
    e32_nressum: u32,
    e32_autodata: u32,
    e32_debuginfo: u32,
    e32_debuglen: u32,
    e32_instpreload: u32,
    e32_instdemand: u32,
    e32_heapsize: u32,
    e32_res3: [12]u8,
    e32_winresoff: u32,
    e32_winreslen: u32,
    e32_devid: u16,
    e32_ddkver: u16,
};
type
  IMAGE_VXD_HEADER {.packed.} = object
    e32_magic: uint16
    e32_border: uint8
    e32_worder: uint8
    e32_level: uint32
    e32_cpu: uint16
    e32_os: uint16
    e32_ver: uint32
    e32_mflags: uint32
    e32_mpages: uint32
    e32_startobj: uint32
    e32_eip: uint32
    e32_stackobj: uint32
    e32_esp: uint32
    e32_pagesize: uint32
    e32_lastpagesize: uint32
    e32_fixupsize: uint32
    e32_fixupsum: uint32
    e32_ldrsize: uint32
    e32_ldrsum: uint32
    e32_objtab: uint32
    e32_objcnt: uint32
    e32_objmap: uint32
    e32_itermap: uint32
    e32_rsrctab: uint32
    e32_rsrccnt: uint32
    e32_restab: uint32
    e32_enttab: uint32
    e32_dirtab: uint32
    e32_dircnt: uint32
    e32_fpagetab: uint32
    e32_frectab: uint32
    e32_impmod: uint32
    e32_impmodcnt: uint32
    e32_impproc: uint32
    e32_pagesum: uint32
    e32_datapage: uint32
    e32_preload: uint32
    e32_nrestab: uint32
    e32_cbnrestab: uint32
    e32_nressum: uint32
    e32_autodata: uint32
    e32_debuginfo: uint32
    e32_debuglen: uint32
    e32_instpreload: uint32
    e32_instdemand: uint32
    e32_heapsize: uint32
    e32_res3: array[12, uint8]
    e32_winresoff: uint32
    e32_winreslen: uint32
    e32_devid: uint16
    e32_ddkver: uint16
align(2)
struct IMAGE_VXD_HEADER
{
    ushort e32_magic;
    ubyte e32_border;
    ubyte e32_worder;
    uint e32_level;
    ushort e32_cpu;
    ushort e32_os;
    uint e32_ver;
    uint e32_mflags;
    uint e32_mpages;
    uint e32_startobj;
    uint e32_eip;
    uint e32_stackobj;
    uint e32_esp;
    uint e32_pagesize;
    uint e32_lastpagesize;
    uint e32_fixupsize;
    uint e32_fixupsum;
    uint e32_ldrsize;
    uint e32_ldrsum;
    uint e32_objtab;
    uint e32_objcnt;
    uint e32_objmap;
    uint e32_itermap;
    uint e32_rsrctab;
    uint e32_rsrccnt;
    uint e32_restab;
    uint e32_enttab;
    uint e32_dirtab;
    uint e32_dircnt;
    uint e32_fpagetab;
    uint e32_frectab;
    uint e32_impmod;
    uint e32_impmodcnt;
    uint e32_impproc;
    uint e32_pagesum;
    uint e32_datapage;
    uint e32_preload;
    uint e32_nrestab;
    uint e32_cbnrestab;
    uint e32_nressum;
    uint e32_autodata;
    uint e32_debuginfo;
    uint e32_debuglen;
    uint e32_instpreload;
    uint e32_instdemand;
    uint e32_heapsize;
    ubyte[12] e32_res3;
    uint e32_winresoff;
    uint e32_winreslen;
    ushort e32_devid;
    ushort e32_ddkver;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; IMAGE_VXD_HEADER サイズ: 196 バイト(x64)
dim st, 49    ; 4byte整数×49(構造体サイズ 196 / 4 切り上げ)
; e32_magic : WORD (+0, 2byte)  wpoke st,0,値  /  値 = wpeek(st,0)
; e32_border : BYTE (+2, 1byte)  poke st,2,値  /  値 = peek(st,2)
; e32_worder : BYTE (+3, 1byte)  poke st,3,値  /  値 = peek(st,3)
; e32_level : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; e32_cpu : WORD (+8, 2byte)  wpoke st,8,値  /  値 = wpeek(st,8)
; e32_os : WORD (+10, 2byte)  wpoke st,10,値  /  値 = wpeek(st,10)
; e32_ver : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; e32_mflags : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; e32_mpages : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; e32_startobj : DWORD (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; e32_eip : DWORD (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; e32_stackobj : DWORD (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; e32_esp : DWORD (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; e32_pagesize : DWORD (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; e32_lastpagesize : DWORD (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; e32_fixupsize : DWORD (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; e32_fixupsum : DWORD (+52, 4byte)  st.13 = 値  /  値 = st.13   (lpoke/lpeek も可)
; e32_ldrsize : DWORD (+56, 4byte)  st.14 = 値  /  値 = st.14   (lpoke/lpeek も可)
; e32_ldrsum : DWORD (+60, 4byte)  st.15 = 値  /  値 = st.15   (lpoke/lpeek も可)
; e32_objtab : DWORD (+64, 4byte)  st.16 = 値  /  値 = st.16   (lpoke/lpeek も可)
; e32_objcnt : DWORD (+68, 4byte)  st.17 = 値  /  値 = st.17   (lpoke/lpeek も可)
; e32_objmap : DWORD (+72, 4byte)  st.18 = 値  /  値 = st.18   (lpoke/lpeek も可)
; e32_itermap : DWORD (+76, 4byte)  st.19 = 値  /  値 = st.19   (lpoke/lpeek も可)
; e32_rsrctab : DWORD (+80, 4byte)  st.20 = 値  /  値 = st.20   (lpoke/lpeek も可)
; e32_rsrccnt : DWORD (+84, 4byte)  st.21 = 値  /  値 = st.21   (lpoke/lpeek も可)
; e32_restab : DWORD (+88, 4byte)  st.22 = 値  /  値 = st.22   (lpoke/lpeek も可)
; e32_enttab : DWORD (+92, 4byte)  st.23 = 値  /  値 = st.23   (lpoke/lpeek も可)
; e32_dirtab : DWORD (+96, 4byte)  st.24 = 値  /  値 = st.24   (lpoke/lpeek も可)
; e32_dircnt : DWORD (+100, 4byte)  st.25 = 値  /  値 = st.25   (lpoke/lpeek も可)
; e32_fpagetab : DWORD (+104, 4byte)  st.26 = 値  /  値 = st.26   (lpoke/lpeek も可)
; e32_frectab : DWORD (+108, 4byte)  st.27 = 値  /  値 = st.27   (lpoke/lpeek も可)
; e32_impmod : DWORD (+112, 4byte)  st.28 = 値  /  値 = st.28   (lpoke/lpeek も可)
; e32_impmodcnt : DWORD (+116, 4byte)  st.29 = 値  /  値 = st.29   (lpoke/lpeek も可)
; e32_impproc : DWORD (+120, 4byte)  st.30 = 値  /  値 = st.30   (lpoke/lpeek も可)
; e32_pagesum : DWORD (+124, 4byte)  st.31 = 値  /  値 = st.31   (lpoke/lpeek も可)
; e32_datapage : DWORD (+128, 4byte)  st.32 = 値  /  値 = st.32   (lpoke/lpeek も可)
; e32_preload : DWORD (+132, 4byte)  st.33 = 値  /  値 = st.33   (lpoke/lpeek も可)
; e32_nrestab : DWORD (+136, 4byte)  st.34 = 値  /  値 = st.34   (lpoke/lpeek も可)
; e32_cbnrestab : DWORD (+140, 4byte)  st.35 = 値  /  値 = st.35   (lpoke/lpeek も可)
; e32_nressum : DWORD (+144, 4byte)  st.36 = 値  /  値 = st.36   (lpoke/lpeek も可)
; e32_autodata : DWORD (+148, 4byte)  st.37 = 値  /  値 = st.37   (lpoke/lpeek も可)
; e32_debuginfo : DWORD (+152, 4byte)  st.38 = 値  /  値 = st.38   (lpoke/lpeek も可)
; e32_debuglen : DWORD (+156, 4byte)  st.39 = 値  /  値 = st.39   (lpoke/lpeek も可)
; e32_instpreload : DWORD (+160, 4byte)  st.40 = 値  /  値 = st.40   (lpoke/lpeek も可)
; e32_instdemand : DWORD (+164, 4byte)  st.41 = 値  /  値 = st.41   (lpoke/lpeek も可)
; e32_heapsize : DWORD (+168, 4byte)  st.42 = 値  /  値 = st.42   (lpoke/lpeek も可)
; e32_res3 : BYTE (+172, 12byte)  varptr(st)+172 を基点に操作(12byte:入れ子/配列)
; e32_winresoff : DWORD (+184, 4byte)  st.46 = 値  /  値 = st.46   (lpoke/lpeek も可)
; e32_winreslen : DWORD (+188, 4byte)  st.47 = 値  /  値 = st.47   (lpoke/lpeek も可)
; e32_devid : WORD (+192, 2byte)  wpoke st,192,値  /  値 = wpeek(st,192)
; e32_ddkver : WORD (+194, 2byte)  wpoke st,194,値  /  値 = wpeek(st,194)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global IMAGE_VXD_HEADER, pack=2
    #field short e32_magic
    #field byte e32_border
    #field byte e32_worder
    #field int e32_level
    #field short e32_cpu
    #field short e32_os
    #field int e32_ver
    #field int e32_mflags
    #field int e32_mpages
    #field int e32_startobj
    #field int e32_eip
    #field int e32_stackobj
    #field int e32_esp
    #field int e32_pagesize
    #field int e32_lastpagesize
    #field int e32_fixupsize
    #field int e32_fixupsum
    #field int e32_ldrsize
    #field int e32_ldrsum
    #field int e32_objtab
    #field int e32_objcnt
    #field int e32_objmap
    #field int e32_itermap
    #field int e32_rsrctab
    #field int e32_rsrccnt
    #field int e32_restab
    #field int e32_enttab
    #field int e32_dirtab
    #field int e32_dircnt
    #field int e32_fpagetab
    #field int e32_frectab
    #field int e32_impmod
    #field int e32_impmodcnt
    #field int e32_impproc
    #field int e32_pagesum
    #field int e32_datapage
    #field int e32_preload
    #field int e32_nrestab
    #field int e32_cbnrestab
    #field int e32_nressum
    #field int e32_autodata
    #field int e32_debuginfo
    #field int e32_debuglen
    #field int e32_instpreload
    #field int e32_instdemand
    #field int e32_heapsize
    #field byte e32_res3 12
    #field int e32_winresoff
    #field int e32_winreslen
    #field short e32_devid
    #field short e32_ddkver
#endstruct

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