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_CHILDREN
0x00000002
指定された型そのものではなく、その型の子に関する情報を取得します。
IMAGEHLP_GET_TYPE_INFO_UNCACHED
0x00000001
後で取得するためにデータをキャッシュしません。同じ情報を再度要求しない場合は、このフラグを使用すると効果的です。
NumIdsDWORD4+8+8TypeIds 配列に指定された要素の数。
TypeIdsDWORD*8/4+16+12型インデックスの配列。
TagFilterULONGLONG8+24+16戻り値に対するフィルターです。たとえば、シンボルタグが SymTagData である結果のみを返すには、このメンバーに 1 << SymTagData を設定します。タグの一覧については、Dbghelp.h で定義されている SymTagEnum 型を参照してください
NumReqsDWORD4+32+24ReqKindsReqOffsetsReqSizes の各メンバーで指定される配列の要素数。これらの配列は同じサイズでなければなりません。
ReqKindsIMAGEHLP_SYMBOL_TYPE_INFO*8/4+40+28要求する情報の種類の配列。各要素は IMAGEHLP_SYMBOL_TYPE_INFO 列挙型の列挙値のいずれかです。
ReqOffsetsUINT_PTR*8/4+48+32各要求のデータを Buffer 配列の各要素内のどこに格納するかを指定するオフセットの配列。
ReqSizesDWORD*8/4+56+36各データ要求のサイズ (バイト単位)。必要なサイズは IMAGEHLP_SYMBOL_TYPE_INFO で説明されています。
ReqStrideUINT_PTR8/4+64+40Buffer 配列の各要素のバイト数。
BufferSizeUINT_PTR8/4+72+44Buffer 配列のサイズ (バイト単位)。
Buffervoid*8/4+80+48クエリ結果の格納に使用されるレコードの配列。各レコードは ReqStride バイトごとに区切られます。データを取得する型ごとに、この配列内の 1 レコードが必要です。各レコード内には、個々のクエリの結果として NumReqs 個のデータが格納されます。データは ReqOffsets で指定されたオフセットに従ってレコード内に格納されます。データの形式は、使用される ReqKinds メンバーの値によって異なります。
EntriesMatchedDWORD4+88+52フィルターに一致した型エントリの数。
EntriesFilledDWORD4+92+56結果が格納された Buffer 配列の要素数。
TagsFoundULONGLONG8+96+64検索操作中に検出されたすべてのタグビットを示すビットマスク。
AllReqsValidULONGLONG8+104+72すべての ReqsValid フィールドのビット単位の AND を示すビットマスク。
NumReqsValidDWORD4+112+80ReqsValid のサイズ (要素数)。
ReqsValidULONGLONG*8/4+120+84どの要求データが有効かを示す、Buffer の要素インデックスで参照されるビットマスク。このメンバーは NULL にすることができます。

公式ドキュメント

モジュールの型情報を格納します。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

#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