ホーム › System.Diagnostics.Debug › IMAGEHLP_GET_TYPE_INFO_PARAMS
IMAGEHLP_GET_TYPE_INFO_PARAMS
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 | ||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| SizeOfStruct | DWORD | 4 | +0 | +0 | この構造体のサイズ (バイト単位)。 | ||||||
| Flags | IMAGEHLP_GET_TYPE_INFO_FLAGS | 4 | +4 | +4 | このメンバーには、次のいずれかの値を指定できます。
| ||||||
| NumIds | DWORD | 4 | +8 | +8 | TypeIds 配列に指定された要素の数。 | ||||||
| TypeIds | DWORD* | 8/4 | +16 | +12 | 型インデックスの配列。 | ||||||
| TagFilter | ULONGLONG | 8 | +24 | +16 | 戻り値に対するフィルターです。たとえば、シンボルタグが SymTagData である結果のみを返すには、このメンバーに 1 << SymTagData を設定します。タグの一覧については、Dbghelp.h で定義されている SymTagEnum 型を参照してください | ||||||
| NumReqs | DWORD | 4 | +32 | +24 | ReqKinds、ReqOffsets、ReqSizes の各メンバーで指定される配列の要素数。これらの配列は同じサイズでなければなりません。 | ||||||
| ReqKinds | IMAGEHLP_SYMBOL_TYPE_INFO* | 8/4 | +40 | +28 | 要求する情報の種類の配列。各要素は IMAGEHLP_SYMBOL_TYPE_INFO 列挙型の列挙値のいずれかです。 | ||||||
| ReqOffsets | UINT_PTR* | 8/4 | +48 | +32 | 各要求のデータを Buffer 配列の各要素内のどこに格納するかを指定するオフセットの配列。 | ||||||
| ReqSizes | DWORD* | 8/4 | +56 | +36 | 各データ要求のサイズ (バイト単位)。必要なサイズは IMAGEHLP_SYMBOL_TYPE_INFO で説明されています。 | ||||||
| ReqStride | UINT_PTR | 8/4 | +64 | +40 | Buffer 配列の各要素のバイト数。 | ||||||
| BufferSize | UINT_PTR | 8/4 | +72 | +44 | Buffer 配列のサイズ (バイト単位)。 | ||||||
| Buffer | void* | 8/4 | +80 | +48 | クエリ結果の格納に使用されるレコードの配列。各レコードは ReqStride バイトごとに区切られます。データを取得する型ごとに、この配列内の 1 レコードが必要です。各レコード内には、個々のクエリの結果として NumReqs 個のデータが格納されます。データは ReqOffsets で指定されたオフセットに従ってレコード内に格納されます。データの形式は、使用される ReqKinds メンバーの値によって異なります。 | ||||||
| EntriesMatched | DWORD | 4 | +88 | +52 | フィルターに一致した型エントリの数。 | ||||||
| EntriesFilled | DWORD | 4 | +92 | +56 | 結果が格納された Buffer 配列の要素数。 | ||||||
| TagsFound | ULONGLONG | 8 | +96 | +64 | 検索操作中に検出されたすべてのタグビットを示すビットマスク。 | ||||||
| AllReqsValid | ULONGLONG | 8 | +104 | +72 | すべての ReqsValid フィールドのビット単位の AND を示すビットマスク。 | ||||||
| NumReqsValid | DWORD | 4 | +112 | +80 | ReqsValid のサイズ (要素数)。 | ||||||
| ReqsValid | ULONGLONG* | 8/4 | +120 | +84 | どの要求データが有効かを示す、Buffer の要素インデックスで参照されるビットマスク。このメンバーは NULL にすることができます。 |
公式ドキュメント
モジュールの型情報を格納します。
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
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 Structureimport 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: pointerstruct 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