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

KDEXTS_PTE_INFO

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

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

フィールド

フィールドサイズx64x86説明
SizeOfStructDWORD4+0+0この構造体のバイトサイズ。呼び出し前に設定する。
VirtualAddressULONGLONG8+8+8対象の仮想アドレス。
PpeAddressULONGLONG8+16+16対応するページ親ディレクトリエントリ(PPE)のアドレス。
PdeAddressULONGLONG8+24+24対応するページディレクトリエントリ(PDE)のアドレス。
PteAddressULONGLONG8+32+32対応するページテーブルエントリ(PTE)のアドレス。
PfnULONGLONG8+40+40対応するページフレーム番号(PFN)。
LevelsULONGLONG8+48+48ページテーブルの階層レベル数。
_bitfield1DWORD4+56+56PTEの属性を示すビットフィールド領域1。
_bitfield2DWORD4+60+60PTEの属性を示すビットフィールド領域2。

各言語での定義

#include <windows.h>

// KDEXTS_PTE_INFO  (x64 64 / x86 64 バイト)
typedef struct KDEXTS_PTE_INFO {
    DWORD SizeOfStruct;
    ULONGLONG VirtualAddress;
    ULONGLONG PpeAddress;
    ULONGLONG PdeAddress;
    ULONGLONG PteAddress;
    ULONGLONG Pfn;
    ULONGLONG Levels;
    DWORD _bitfield1;
    DWORD _bitfield2;
} KDEXTS_PTE_INFO;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct KDEXTS_PTE_INFO
{
    public uint SizeOfStruct;
    public ulong VirtualAddress;
    public ulong PpeAddress;
    public ulong PdeAddress;
    public ulong PteAddress;
    public ulong Pfn;
    public ulong Levels;
    public uint _bitfield1;
    public uint _bitfield2;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure KDEXTS_PTE_INFO
    Public SizeOfStruct As UInteger
    Public VirtualAddress As ULong
    Public PpeAddress As ULong
    Public PdeAddress As ULong
    Public PteAddress As ULong
    Public Pfn As ULong
    Public Levels As ULong
    Public _bitfield1 As UInteger
    Public _bitfield2 As UInteger
End Structure
import ctypes
from ctypes import wintypes

class KDEXTS_PTE_INFO(ctypes.Structure):
    _fields_ = [
        ("SizeOfStruct", wintypes.DWORD),
        ("VirtualAddress", ctypes.c_ulonglong),
        ("PpeAddress", ctypes.c_ulonglong),
        ("PdeAddress", ctypes.c_ulonglong),
        ("PteAddress", ctypes.c_ulonglong),
        ("Pfn", ctypes.c_ulonglong),
        ("Levels", ctypes.c_ulonglong),
        ("_bitfield1", wintypes.DWORD),
        ("_bitfield2", wintypes.DWORD),
    ]
#[repr(C)]
pub struct KDEXTS_PTE_INFO {
    pub SizeOfStruct: u32,
    pub VirtualAddress: u64,
    pub PpeAddress: u64,
    pub PdeAddress: u64,
    pub PteAddress: u64,
    pub Pfn: u64,
    pub Levels: u64,
    pub _bitfield1: u32,
    pub _bitfield2: u32,
}
import "golang.org/x/sys/windows"

type KDEXTS_PTE_INFO struct {
	SizeOfStruct uint32
	VirtualAddress uint64
	PpeAddress uint64
	PdeAddress uint64
	PteAddress uint64
	Pfn uint64
	Levels uint64
	_bitfield1 uint32
	_bitfield2 uint32
}
type
  KDEXTS_PTE_INFO = record
    SizeOfStruct: DWORD;
    VirtualAddress: UInt64;
    PpeAddress: UInt64;
    PdeAddress: UInt64;
    PteAddress: UInt64;
    Pfn: UInt64;
    Levels: UInt64;
    _bitfield1: DWORD;
    _bitfield2: DWORD;
  end;
const KDEXTS_PTE_INFO = extern struct {
    SizeOfStruct: u32,
    VirtualAddress: u64,
    PpeAddress: u64,
    PdeAddress: u64,
    PteAddress: u64,
    Pfn: u64,
    Levels: u64,
    _bitfield1: u32,
    _bitfield2: u32,
};
type
  KDEXTS_PTE_INFO {.bycopy.} = object
    SizeOfStruct: uint32
    VirtualAddress: uint64
    PpeAddress: uint64
    PdeAddress: uint64
    PteAddress: uint64
    Pfn: uint64
    Levels: uint64
    _bitfield1: uint32
    _bitfield2: uint32
struct KDEXTS_PTE_INFO
{
    uint SizeOfStruct;
    ulong VirtualAddress;
    ulong PpeAddress;
    ulong PdeAddress;
    ulong PteAddress;
    ulong Pfn;
    ulong Levels;
    uint _bitfield1;
    uint _bitfield2;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; KDEXTS_PTE_INFO サイズ: 64 バイト(x64)
dim st, 16    ; 4byte整数×16(構造体サイズ 64 / 4 切り上げ)
; SizeOfStruct : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; VirtualAddress : ULONGLONG (+8, 8byte)  qpoke st,8,値 / qpeek(st,8)  ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; PpeAddress : ULONGLONG (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; PdeAddress : ULONGLONG (+24, 8byte)  qpoke st,24,値 / qpeek(st,24)  ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; PteAddress : ULONGLONG (+32, 8byte)  qpoke st,32,値 / qpeek(st,32)  ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; Pfn : ULONGLONG (+40, 8byte)  qpoke st,40,値 / qpeek(st,40)  ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; Levels : ULONGLONG (+48, 8byte)  qpoke st,48,値 / qpeek(st,48)  ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; _bitfield1 : DWORD (+56, 4byte)  st.14 = 値  /  値 = st.14   (lpoke/lpeek も可)
; _bitfield2 : DWORD (+60, 4byte)  st.15 = 値  /  値 = st.15   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global KDEXTS_PTE_INFO
    #field int SizeOfStruct
    #field int64 VirtualAddress
    #field int64 PpeAddress
    #field int64 PdeAddress
    #field int64 PteAddress
    #field int64 Pfn
    #field int64 Levels
    #field int _bitfield1
    #field int _bitfield2
#endstruct

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