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

IMAGEHLP_GET_TYPE_INFO_PARAMS

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

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

フィールド

フィールドサイズx64x86説明
SizeOfStructDWORD4+0+0この構造体のバイトサイズを示す。
FlagsIMAGEHLP_GET_TYPE_INFO_FLAGS4+4+4型情報取得の動作を制御するフラグ(IMAGEHLP_GET_TYPE_INFO_FLAGS)。
NumIdsDWORD4+8+8TypeIds に含まれる型 ID の数を示す。
TypeIdsDWORD*8/4+16+12問い合わせ対象の型 ID 配列を指すポインタ。
TagFilterULONGLONG8+24+16対象とする SymTag を絞り込むビットマスクを示す。
NumReqsDWORD4+32+24要求する情報項目の数を示す。
ReqKindsIMAGEHLP_SYMBOL_TYPE_INFO*8/4+40+28要求する情報種別(IMAGEHLP_SYMBOL_TYPE_INFO)の配列を指すポインタ。
ReqOffsetsUINT_PTR*8/4+48+32各要求の出力先オフセット配列を指すポインタ。
ReqSizesDWORD*8/4+56+36各要求の出力サイズ配列を指すポインタ。
ReqStrideUINT_PTR8/4+64+40出力バッファ内の各エントリ間のストライドを示す。
BufferSizeUINT_PTR8/4+72+44出力バッファ全体のバイトサイズを示す。
Buffervoid*8/4+80+48結果を格納する出力バッファを指すポインタ。
EntriesMatchedDWORD4+88+52条件に一致したエントリ数を返す。
EntriesFilledDWORD4+92+56実際に格納されたエントリ数を返す。
TagsFoundULONGLONG8+96+64見つかったタグを示すビットマスクを返す。
AllReqsValidULONGLONG8+104+72全要求が有効であったかを示すビットマスクを返す。
NumReqsValidDWORD4+112+80有効であった要求の数を返す。
ReqsValidULONGLONG*8/4+120+84各要求の有効性を示すビットマスク配列を指すポインタ。

各言語での定義

#include <windows.h>

// IMAGEHLP_GET_TYPE_INFO_PARAMS  (x64 128 / x86 88 バイト)
typedef struct IMAGEHLP_GET_TYPE_INFO_PARAMS {
    DWORD SizeOfStruct;
    IMAGEHLP_GET_TYPE_INFO_FLAGS Flags;
    DWORD NumIds;
    DWORD* TypeIds;
    ULONGLONG TagFilter;
    DWORD NumReqs;
    IMAGEHLP_SYMBOL_TYPE_INFO* ReqKinds;
    UINT_PTR* ReqOffsets;
    DWORD* ReqSizes;
    UINT_PTR ReqStride;
    UINT_PTR BufferSize;
    void* Buffer;
    DWORD EntriesMatched;
    DWORD EntriesFilled;
    ULONGLONG TagsFound;
    ULONGLONG AllReqsValid;
    DWORD NumReqsValid;
    ULONGLONG* ReqsValid;
} IMAGEHLP_GET_TYPE_INFO_PARAMS;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct IMAGEHLP_GET_TYPE_INFO_PARAMS
{
    public uint SizeOfStruct;
    public uint Flags;
    public uint NumIds;
    public IntPtr TypeIds;
    public ulong TagFilter;
    public uint NumReqs;
    public IntPtr ReqKinds;
    public IntPtr ReqOffsets;
    public IntPtr ReqSizes;
    public UIntPtr ReqStride;
    public UIntPtr BufferSize;
    public IntPtr Buffer;
    public uint EntriesMatched;
    public uint EntriesFilled;
    public ulong TagsFound;
    public ulong AllReqsValid;
    public uint NumReqsValid;
    public IntPtr ReqsValid;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure IMAGEHLP_GET_TYPE_INFO_PARAMS
    Public SizeOfStruct As UInteger
    Public Flags As UInteger
    Public NumIds As UInteger
    Public TypeIds As IntPtr
    Public TagFilter As ULong
    Public NumReqs As UInteger
    Public ReqKinds As IntPtr
    Public ReqOffsets As IntPtr
    Public ReqSizes As IntPtr
    Public ReqStride As UIntPtr
    Public BufferSize As UIntPtr
    Public Buffer As IntPtr
    Public EntriesMatched As UInteger
    Public EntriesFilled As UInteger
    Public TagsFound As ULong
    Public AllReqsValid As ULong
    Public NumReqsValid As UInteger
    Public ReqsValid As IntPtr
End Structure
import ctypes
from ctypes import wintypes

class IMAGEHLP_GET_TYPE_INFO_PARAMS(ctypes.Structure):
    _fields_ = [
        ("SizeOfStruct", wintypes.DWORD),
        ("Flags", wintypes.DWORD),
        ("NumIds", wintypes.DWORD),
        ("TypeIds", ctypes.c_void_p),
        ("TagFilter", ctypes.c_ulonglong),
        ("NumReqs", wintypes.DWORD),
        ("ReqKinds", ctypes.c_void_p),
        ("ReqOffsets", ctypes.c_void_p),
        ("ReqSizes", ctypes.c_void_p),
        ("ReqStride", ctypes.c_size_t),
        ("BufferSize", ctypes.c_size_t),
        ("Buffer", ctypes.c_void_p),
        ("EntriesMatched", wintypes.DWORD),
        ("EntriesFilled", wintypes.DWORD),
        ("TagsFound", ctypes.c_ulonglong),
        ("AllReqsValid", ctypes.c_ulonglong),
        ("NumReqsValid", wintypes.DWORD),
        ("ReqsValid", ctypes.c_void_p),
    ]
#[repr(C)]
pub struct IMAGEHLP_GET_TYPE_INFO_PARAMS {
    pub SizeOfStruct: u32,
    pub Flags: u32,
    pub NumIds: u32,
    pub TypeIds: *mut core::ffi::c_void,
    pub TagFilter: u64,
    pub NumReqs: u32,
    pub ReqKinds: *mut core::ffi::c_void,
    pub ReqOffsets: *mut core::ffi::c_void,
    pub ReqSizes: *mut core::ffi::c_void,
    pub ReqStride: usize,
    pub BufferSize: usize,
    pub Buffer: *mut core::ffi::c_void,
    pub EntriesMatched: u32,
    pub EntriesFilled: u32,
    pub TagsFound: u64,
    pub AllReqsValid: u64,
    pub NumReqsValid: u32,
    pub ReqsValid: *mut core::ffi::c_void,
}
import "golang.org/x/sys/windows"

type IMAGEHLP_GET_TYPE_INFO_PARAMS struct {
	SizeOfStruct uint32
	Flags uint32
	NumIds uint32
	TypeIds uintptr
	TagFilter uint64
	NumReqs uint32
	ReqKinds uintptr
	ReqOffsets uintptr
	ReqSizes uintptr
	ReqStride uintptr
	BufferSize uintptr
	Buffer uintptr
	EntriesMatched uint32
	EntriesFilled uint32
	TagsFound uint64
	AllReqsValid uint64
	NumReqsValid uint32
	ReqsValid uintptr
}
type
  IMAGEHLP_GET_TYPE_INFO_PARAMS = record
    SizeOfStruct: DWORD;
    Flags: DWORD;
    NumIds: DWORD;
    TypeIds: Pointer;
    TagFilter: UInt64;
    NumReqs: DWORD;
    ReqKinds: Pointer;
    ReqOffsets: Pointer;
    ReqSizes: Pointer;
    ReqStride: NativeUInt;
    BufferSize: NativeUInt;
    Buffer: Pointer;
    EntriesMatched: DWORD;
    EntriesFilled: DWORD;
    TagsFound: UInt64;
    AllReqsValid: UInt64;
    NumReqsValid: DWORD;
    ReqsValid: Pointer;
  end;
const IMAGEHLP_GET_TYPE_INFO_PARAMS = extern struct {
    SizeOfStruct: u32,
    Flags: u32,
    NumIds: u32,
    TypeIds: ?*anyopaque,
    TagFilter: u64,
    NumReqs: u32,
    ReqKinds: ?*anyopaque,
    ReqOffsets: ?*anyopaque,
    ReqSizes: ?*anyopaque,
    ReqStride: usize,
    BufferSize: usize,
    Buffer: ?*anyopaque,
    EntriesMatched: u32,
    EntriesFilled: u32,
    TagsFound: u64,
    AllReqsValid: u64,
    NumReqsValid: u32,
    ReqsValid: ?*anyopaque,
};
type
  IMAGEHLP_GET_TYPE_INFO_PARAMS {.bycopy.} = object
    SizeOfStruct: uint32
    Flags: uint32
    NumIds: uint32
    TypeIds: pointer
    TagFilter: uint64
    NumReqs: uint32
    ReqKinds: pointer
    ReqOffsets: pointer
    ReqSizes: pointer
    ReqStride: uint
    BufferSize: uint
    Buffer: pointer
    EntriesMatched: uint32
    EntriesFilled: uint32
    TagsFound: uint64
    AllReqsValid: uint64
    NumReqsValid: uint32
    ReqsValid: pointer
struct IMAGEHLP_GET_TYPE_INFO_PARAMS
{
    uint SizeOfStruct;
    uint Flags;
    uint NumIds;
    void* TypeIds;
    ulong TagFilter;
    uint NumReqs;
    void* ReqKinds;
    void* ReqOffsets;
    void* ReqSizes;
    size_t ReqStride;
    size_t BufferSize;
    void* Buffer;
    uint EntriesMatched;
    uint EntriesFilled;
    ulong TagsFound;
    ulong AllReqsValid;
    uint NumReqsValid;
    void* ReqsValid;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; IMAGEHLP_GET_TYPE_INFO_PARAMS サイズ: 88 バイト(x86)
dim st, 22    ; 4byte整数×22(構造体サイズ 88 / 4 切り上げ)
; SizeOfStruct : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; Flags : IMAGEHLP_GET_TYPE_INFO_FLAGS (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; NumIds : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; TypeIds : DWORD* (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; TagFilter : ULONGLONG (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; NumReqs : DWORD (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; ReqKinds : IMAGEHLP_SYMBOL_TYPE_INFO* (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; ReqOffsets : UINT_PTR* (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; ReqSizes : DWORD* (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; ReqStride : UINT_PTR (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; BufferSize : UINT_PTR (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; Buffer : void* (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; EntriesMatched : DWORD (+52, 4byte)  st.13 = 値  /  値 = st.13   (lpoke/lpeek も可)
; EntriesFilled : DWORD (+56, 4byte)  st.14 = 値  /  値 = st.14   (lpoke/lpeek も可)
; TagsFound : ULONGLONG (+64, 8byte)  qpoke st,64,値 / qpeek(st,64)  ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; AllReqsValid : ULONGLONG (+72, 8byte)  qpoke st,72,値 / qpeek(st,72)  ※IronHSPのみ。3.7/3.8は lpoke st,72,下位 : lpoke st,76,上位
; NumReqsValid : DWORD (+80, 4byte)  st.20 = 値  /  値 = st.20   (lpoke/lpeek も可)
; ReqsValid : ULONGLONG* (+84, 4byte)  st.21 = 値  /  値 = st.21   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; IMAGEHLP_GET_TYPE_INFO_PARAMS サイズ: 128 バイト(x64)
dim st, 32    ; 4byte整数×32(構造体サイズ 128 / 4 切り上げ)
; SizeOfStruct : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; Flags : IMAGEHLP_GET_TYPE_INFO_FLAGS (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; NumIds : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; TypeIds : DWORD* (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; TagFilter : ULONGLONG (+24, 8byte)  qpoke st,24,値 / qpeek(st,24)  ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; NumReqs : DWORD (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; ReqKinds : IMAGEHLP_SYMBOL_TYPE_INFO* (+40, 8byte)  qpoke st,40,値 / qpeek(st,40)  ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; ReqOffsets : UINT_PTR* (+48, 8byte)  qpoke st,48,値 / qpeek(st,48)  ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; ReqSizes : DWORD* (+56, 8byte)  qpoke st,56,値 / qpeek(st,56)  ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; ReqStride : UINT_PTR (+64, 8byte)  qpoke st,64,値 / qpeek(st,64)  ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; BufferSize : UINT_PTR (+72, 8byte)  qpoke st,72,値 / qpeek(st,72)  ※IronHSPのみ。3.7/3.8は lpoke st,72,下位 : lpoke st,76,上位
; Buffer : void* (+80, 8byte)  qpoke st,80,値 / qpeek(st,80)  ※IronHSPのみ。3.7/3.8は lpoke st,80,下位 : lpoke st,84,上位
; EntriesMatched : DWORD (+88, 4byte)  st.22 = 値  /  値 = st.22   (lpoke/lpeek も可)
; EntriesFilled : DWORD (+92, 4byte)  st.23 = 値  /  値 = st.23   (lpoke/lpeek も可)
; TagsFound : ULONGLONG (+96, 8byte)  qpoke st,96,値 / qpeek(st,96)  ※IronHSPのみ。3.7/3.8は lpoke st,96,下位 : lpoke st,100,上位
; AllReqsValid : ULONGLONG (+104, 8byte)  qpoke st,104,値 / qpeek(st,104)  ※IronHSPのみ。3.7/3.8は lpoke st,104,下位 : lpoke st,108,上位
; NumReqsValid : DWORD (+112, 4byte)  st.28 = 値  /  値 = st.28   (lpoke/lpeek も可)
; ReqsValid : ULONGLONG* (+120, 8byte)  qpoke st,120,値 / qpeek(st,120)  ※IronHSPのみ。3.7/3.8は lpoke st,120,下位 : lpoke st,124,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global IMAGEHLP_GET_TYPE_INFO_PARAMS
    #field int SizeOfStruct
    #field int Flags
    #field int NumIds
    #field intptr TypeIds
    #field int64 TagFilter
    #field int NumReqs
    #field intptr ReqKinds
    #field intptr ReqOffsets
    #field intptr ReqSizes
    #field intptr ReqStride
    #field intptr BufferSize
    #field intptr Buffer
    #field int EntriesMatched
    #field int EntriesFilled
    #field int64 TagsFound
    #field int64 AllReqsValid
    #field int NumReqsValid
    #field intptr ReqsValid
#endstruct

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