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

DBGKD_GET_VERSION32

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

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

フィールド

フィールドサイズx64x86説明
MajorVersionWORD2+0+0OSのメジャーバージョン番号。
MinorVersionWORD2+2+2OSのマイナーバージョン番号(ビルド番号)。
ProtocolVersionWORD2+4+4カーネルデバッグプロトコルのバージョン。
FlagsWORD2+6+6バージョン情報のフラグ(マルチプロセッサ等)。
KernBaseDWORD4+8+8カーネルイメージの基底アドレス(32ビット)。
PsLoadedModuleListDWORD4+12+12読み込み済みモジュールリストのアドレス(32ビット)。
MachineTypeWORD2+16+16対象マシンのアーキテクチャ種別。
ThCallbackStackWORD2+18+18スレッドのコールバックスタックのオフセット。
NextCallbackWORD2+20+20次のコールバックフレームのオフセット。
FramePointerWORD2+22+22コールバックフレームポインタのオフセット。
KiCallUserModeDWORD4+24+24KiCallUserMode関数のアドレス(32ビット)。
KeUserCallbackDispatcherDWORD4+28+28ユーザーコールバックディスパッチャのアドレス。
BreakpointWithStatusDWORD4+32+32ステータス付きブレークポイント命令のアドレス。
DebuggerDataListDWORD4+36+36デバッガデータブロックリストのアドレス。

各言語での定義

#include <windows.h>

// DBGKD_GET_VERSION32  (x64 40 / x86 40 バイト)
typedef struct DBGKD_GET_VERSION32 {
    WORD MajorVersion;
    WORD MinorVersion;
    WORD ProtocolVersion;
    WORD Flags;
    DWORD KernBase;
    DWORD PsLoadedModuleList;
    WORD MachineType;
    WORD ThCallbackStack;
    WORD NextCallback;
    WORD FramePointer;
    DWORD KiCallUserMode;
    DWORD KeUserCallbackDispatcher;
    DWORD BreakpointWithStatus;
    DWORD DebuggerDataList;
} DBGKD_GET_VERSION32;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DBGKD_GET_VERSION32
{
    public ushort MajorVersion;
    public ushort MinorVersion;
    public ushort ProtocolVersion;
    public ushort Flags;
    public uint KernBase;
    public uint PsLoadedModuleList;
    public ushort MachineType;
    public ushort ThCallbackStack;
    public ushort NextCallback;
    public ushort FramePointer;
    public uint KiCallUserMode;
    public uint KeUserCallbackDispatcher;
    public uint BreakpointWithStatus;
    public uint DebuggerDataList;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DBGKD_GET_VERSION32
    Public MajorVersion As UShort
    Public MinorVersion As UShort
    Public ProtocolVersion As UShort
    Public Flags As UShort
    Public KernBase As UInteger
    Public PsLoadedModuleList As UInteger
    Public MachineType As UShort
    Public ThCallbackStack As UShort
    Public NextCallback As UShort
    Public FramePointer As UShort
    Public KiCallUserMode As UInteger
    Public KeUserCallbackDispatcher As UInteger
    Public BreakpointWithStatus As UInteger
    Public DebuggerDataList As UInteger
End Structure
import ctypes
from ctypes import wintypes

class DBGKD_GET_VERSION32(ctypes.Structure):
    _fields_ = [
        ("MajorVersion", ctypes.c_ushort),
        ("MinorVersion", ctypes.c_ushort),
        ("ProtocolVersion", ctypes.c_ushort),
        ("Flags", ctypes.c_ushort),
        ("KernBase", wintypes.DWORD),
        ("PsLoadedModuleList", wintypes.DWORD),
        ("MachineType", ctypes.c_ushort),
        ("ThCallbackStack", ctypes.c_ushort),
        ("NextCallback", ctypes.c_ushort),
        ("FramePointer", ctypes.c_ushort),
        ("KiCallUserMode", wintypes.DWORD),
        ("KeUserCallbackDispatcher", wintypes.DWORD),
        ("BreakpointWithStatus", wintypes.DWORD),
        ("DebuggerDataList", wintypes.DWORD),
    ]
#[repr(C)]
pub struct DBGKD_GET_VERSION32 {
    pub MajorVersion: u16,
    pub MinorVersion: u16,
    pub ProtocolVersion: u16,
    pub Flags: u16,
    pub KernBase: u32,
    pub PsLoadedModuleList: u32,
    pub MachineType: u16,
    pub ThCallbackStack: u16,
    pub NextCallback: u16,
    pub FramePointer: u16,
    pub KiCallUserMode: u32,
    pub KeUserCallbackDispatcher: u32,
    pub BreakpointWithStatus: u32,
    pub DebuggerDataList: u32,
}
import "golang.org/x/sys/windows"

type DBGKD_GET_VERSION32 struct {
	MajorVersion uint16
	MinorVersion uint16
	ProtocolVersion uint16
	Flags uint16
	KernBase uint32
	PsLoadedModuleList uint32
	MachineType uint16
	ThCallbackStack uint16
	NextCallback uint16
	FramePointer uint16
	KiCallUserMode uint32
	KeUserCallbackDispatcher uint32
	BreakpointWithStatus uint32
	DebuggerDataList uint32
}
type
  DBGKD_GET_VERSION32 = record
    MajorVersion: Word;
    MinorVersion: Word;
    ProtocolVersion: Word;
    Flags: Word;
    KernBase: DWORD;
    PsLoadedModuleList: DWORD;
    MachineType: Word;
    ThCallbackStack: Word;
    NextCallback: Word;
    FramePointer: Word;
    KiCallUserMode: DWORD;
    KeUserCallbackDispatcher: DWORD;
    BreakpointWithStatus: DWORD;
    DebuggerDataList: DWORD;
  end;
const DBGKD_GET_VERSION32 = extern struct {
    MajorVersion: u16,
    MinorVersion: u16,
    ProtocolVersion: u16,
    Flags: u16,
    KernBase: u32,
    PsLoadedModuleList: u32,
    MachineType: u16,
    ThCallbackStack: u16,
    NextCallback: u16,
    FramePointer: u16,
    KiCallUserMode: u32,
    KeUserCallbackDispatcher: u32,
    BreakpointWithStatus: u32,
    DebuggerDataList: u32,
};
type
  DBGKD_GET_VERSION32 {.bycopy.} = object
    MajorVersion: uint16
    MinorVersion: uint16
    ProtocolVersion: uint16
    Flags: uint16
    KernBase: uint32
    PsLoadedModuleList: uint32
    MachineType: uint16
    ThCallbackStack: uint16
    NextCallback: uint16
    FramePointer: uint16
    KiCallUserMode: uint32
    KeUserCallbackDispatcher: uint32
    BreakpointWithStatus: uint32
    DebuggerDataList: uint32
struct DBGKD_GET_VERSION32
{
    ushort MajorVersion;
    ushort MinorVersion;
    ushort ProtocolVersion;
    ushort Flags;
    uint KernBase;
    uint PsLoadedModuleList;
    ushort MachineType;
    ushort ThCallbackStack;
    ushort NextCallback;
    ushort FramePointer;
    uint KiCallUserMode;
    uint KeUserCallbackDispatcher;
    uint BreakpointWithStatus;
    uint DebuggerDataList;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; DBGKD_GET_VERSION32 サイズ: 40 バイト(x64)
dim st, 10    ; 4byte整数×10(構造体サイズ 40 / 4 切り上げ)
; MajorVersion : WORD (+0, 2byte)  wpoke st,0,値  /  値 = wpeek(st,0)
; MinorVersion : WORD (+2, 2byte)  wpoke st,2,値  /  値 = wpeek(st,2)
; ProtocolVersion : WORD (+4, 2byte)  wpoke st,4,値  /  値 = wpeek(st,4)
; Flags : WORD (+6, 2byte)  wpoke st,6,値  /  値 = wpeek(st,6)
; KernBase : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; PsLoadedModuleList : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; MachineType : WORD (+16, 2byte)  wpoke st,16,値  /  値 = wpeek(st,16)
; ThCallbackStack : WORD (+18, 2byte)  wpoke st,18,値  /  値 = wpeek(st,18)
; NextCallback : WORD (+20, 2byte)  wpoke st,20,値  /  値 = wpeek(st,20)
; FramePointer : WORD (+22, 2byte)  wpoke st,22,値  /  値 = wpeek(st,22)
; KiCallUserMode : DWORD (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; KeUserCallbackDispatcher : DWORD (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; BreakpointWithStatus : DWORD (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; DebuggerDataList : DWORD (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global DBGKD_GET_VERSION32
    #field short MajorVersion
    #field short MinorVersion
    #field short ProtocolVersion
    #field short Flags
    #field int KernBase
    #field int PsLoadedModuleList
    #field short MachineType
    #field short ThCallbackStack
    #field short NextCallback
    #field short FramePointer
    #field int KiCallUserMode
    #field int KeUserCallbackDispatcher
    #field int BreakpointWithStatus
    #field int DebuggerDataList
#endstruct

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