ホーム › System.VirtualDosMachines › GLOBALENTRY
GLOBALENTRY
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| dwSize | DWORD | 4 | +0 | +0 | この構造体のサイズ(バイト)。列挙前に設定する。 |
| dwAddress | DWORD | 4 | +4 | +4 | グローバルヒープオブジェクトの線形アドレス。 |
| dwBlockSize | DWORD | 4 | +8 | +8 | ブロックのサイズ(バイト)。 |
| hBlock | HANDLE | 8/4 | +12 | +12 | ブロックへのハンドル。 |
| wcLock | WORD | 2 | +20 | +16 | ロックカウント。 |
| wcPageLock | WORD | 2 | +22 | +18 | ページロックカウント。 |
| wFlags | WORD | 2 | +24 | +20 | ブロックの状態を示すフラグ。 |
| wHeapPresent | BOOL | 4 | +28 | +24 | ローカルヒープが存在するか否かを示すBOOL。 |
| hOwner | HANDLE | 8/4 | +32 | +28 | ブロックの所有者ハンドル。 |
| wType | WORD | 2 | +40 | +32 | ブロックの種別を示す値。 |
| wData | WORD | 2 | +42 | +34 | 種別に応じた付随データ。 |
| dwNext | DWORD | 4 | +44 | +36 | 次のグローバルヒープエントリへのオフセット。 |
| dwNextAlt | DWORD | 4 | +48 | +40 | 代替リストの次エントリへのオフセット。 |
各言語での定義
#include <windows.h>
// GLOBALENTRY (x64 52 / x86 44 バイト)
#pragma pack(push, 4)
typedef struct GLOBALENTRY {
DWORD dwSize;
DWORD dwAddress;
DWORD dwBlockSize;
HANDLE hBlock;
WORD wcLock;
WORD wcPageLock;
WORD wFlags;
BOOL wHeapPresent;
HANDLE hOwner;
WORD wType;
WORD wData;
DWORD dwNext;
DWORD dwNextAlt;
} GLOBALENTRY;
#pragma pack(pop)using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, Pack = 4, CharSet = CharSet.Unicode)]
public struct GLOBALENTRY
{
public uint dwSize;
public uint dwAddress;
public uint dwBlockSize;
public IntPtr hBlock;
public ushort wcLock;
public ushort wcPageLock;
public ushort wFlags;
[MarshalAs(UnmanagedType.Bool)] public bool wHeapPresent;
public IntPtr hOwner;
public ushort wType;
public ushort wData;
public uint dwNext;
public uint dwNextAlt;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, Pack:=4, CharSet:=CharSet.Unicode)>
Public Structure GLOBALENTRY
Public dwSize As UInteger
Public dwAddress As UInteger
Public dwBlockSize As UInteger
Public hBlock As IntPtr
Public wcLock As UShort
Public wcPageLock As UShort
Public wFlags As UShort
<MarshalAs(UnmanagedType.Bool)> Public wHeapPresent As Boolean
Public hOwner As IntPtr
Public wType As UShort
Public wData As UShort
Public dwNext As UInteger
Public dwNextAlt As UInteger
End Structureimport ctypes
from ctypes import wintypes
class GLOBALENTRY(ctypes.Structure):
_pack_ = 4
_fields_ = [
("dwSize", wintypes.DWORD),
("dwAddress", wintypes.DWORD),
("dwBlockSize", wintypes.DWORD),
("hBlock", ctypes.c_void_p),
("wcLock", ctypes.c_ushort),
("wcPageLock", ctypes.c_ushort),
("wFlags", ctypes.c_ushort),
("wHeapPresent", wintypes.BOOL),
("hOwner", ctypes.c_void_p),
("wType", ctypes.c_ushort),
("wData", ctypes.c_ushort),
("dwNext", wintypes.DWORD),
("dwNextAlt", wintypes.DWORD),
]#[repr(C, packed(4))]
pub struct GLOBALENTRY {
pub dwSize: u32,
pub dwAddress: u32,
pub dwBlockSize: u32,
pub hBlock: *mut core::ffi::c_void,
pub wcLock: u16,
pub wcPageLock: u16,
pub wFlags: u16,
pub wHeapPresent: i32,
pub hOwner: *mut core::ffi::c_void,
pub wType: u16,
pub wData: u16,
pub dwNext: u32,
pub dwNextAlt: u32,
}import "golang.org/x/sys/windows"
type GLOBALENTRY struct {
dwSize uint32
dwAddress uint32
dwBlockSize uint32
hBlock uintptr
wcLock uint16
wcPageLock uint16
wFlags uint16
wHeapPresent int32
hOwner uintptr
wType uint16
wData uint16
dwNext uint32
dwNextAlt uint32
}type
GLOBALENTRY = packed record
dwSize: DWORD;
dwAddress: DWORD;
dwBlockSize: DWORD;
hBlock: Pointer;
wcLock: Word;
wcPageLock: Word;
wFlags: Word;
wHeapPresent: BOOL;
hOwner: Pointer;
wType: Word;
wData: Word;
dwNext: DWORD;
dwNextAlt: DWORD;
end;const GLOBALENTRY = extern struct {
dwSize: u32,
dwAddress: u32,
dwBlockSize: u32,
hBlock: ?*anyopaque,
wcLock: u16,
wcPageLock: u16,
wFlags: u16,
wHeapPresent: i32,
hOwner: ?*anyopaque,
wType: u16,
wData: u16,
dwNext: u32,
dwNextAlt: u32,
};type
GLOBALENTRY {.packed.} = object
dwSize: uint32
dwAddress: uint32
dwBlockSize: uint32
hBlock: pointer
wcLock: uint16
wcPageLock: uint16
wFlags: uint16
wHeapPresent: int32
hOwner: pointer
wType: uint16
wData: uint16
dwNext: uint32
dwNextAlt: uint32align(4)
struct GLOBALENTRY
{
uint dwSize;
uint dwAddress;
uint dwBlockSize;
void* hBlock;
ushort wcLock;
ushort wcPageLock;
ushort wFlags;
int wHeapPresent;
void* hOwner;
ushort wType;
ushort wData;
uint dwNext;
uint dwNextAlt;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; GLOBALENTRY サイズ: 44 バイト(x86)
dim st, 11 ; 4byte整数×11(構造体サイズ 44 / 4 切り上げ)
; dwSize : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; dwAddress : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; dwBlockSize : DWORD (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; hBlock : HANDLE (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; wcLock : WORD (+16, 2byte) wpoke st,16,値 / 値 = wpeek(st,16)
; wcPageLock : WORD (+18, 2byte) wpoke st,18,値 / 値 = wpeek(st,18)
; wFlags : WORD (+20, 2byte) wpoke st,20,値 / 値 = wpeek(st,20)
; wHeapPresent : BOOL (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; hOwner : HANDLE (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; wType : WORD (+32, 2byte) wpoke st,32,値 / 値 = wpeek(st,32)
; wData : WORD (+34, 2byte) wpoke st,34,値 / 値 = wpeek(st,34)
; dwNext : DWORD (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; dwNextAlt : DWORD (+40, 4byte) st.10 = 値 / 値 = st.10 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; GLOBALENTRY サイズ: 52 バイト(x64)
dim st, 13 ; 4byte整数×13(構造体サイズ 52 / 4 切り上げ)
; dwSize : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; dwAddress : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; dwBlockSize : DWORD (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; hBlock : HANDLE (+12, 8byte) qpoke st,12,値 / qpeek(st,12) ※IronHSPのみ。3.7/3.8は lpoke st,12,下位 : lpoke st,16,上位
; wcLock : WORD (+20, 2byte) wpoke st,20,値 / 値 = wpeek(st,20)
; wcPageLock : WORD (+22, 2byte) wpoke st,22,値 / 値 = wpeek(st,22)
; wFlags : WORD (+24, 2byte) wpoke st,24,値 / 値 = wpeek(st,24)
; wHeapPresent : BOOL (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; hOwner : HANDLE (+32, 8byte) qpoke st,32,値 / qpeek(st,32) ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; wType : WORD (+40, 2byte) wpoke st,40,値 / 値 = wpeek(st,40)
; wData : WORD (+42, 2byte) wpoke st,42,値 / 値 = wpeek(st,42)
; dwNext : DWORD (+44, 4byte) st.11 = 値 / 値 = st.11 (lpoke/lpeek も可)
; dwNextAlt : DWORD (+48, 4byte) st.12 = 値 / 値 = st.12 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global GLOBALENTRY, pack=4
#field int dwSize
#field int dwAddress
#field int dwBlockSize
#field intptr hBlock
#field short wcLock
#field short wcPageLock
#field short wFlags
#field bool wHeapPresent
#field intptr hOwner
#field short wType
#field short wData
#field int dwNext
#field int dwNextAlt
#endstruct
stdim st, GLOBALENTRY ; NSTRUCT 変数を確保
st->dwSize = 100
mes "dwSize=" + st->dwSize