ホーム › System.SystemServices › ANON_OBJECT_HEADER_V2
ANON_OBJECT_HEADER_V2
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| Sig1 | WORD | 2 | +0 | +0 | 匿名オブジェクトヘッダーの第1シグネチャ(0)。 |
| Sig2 | WORD | 2 | +2 | +2 | 第2シグネチャ(0xFFFF)。 |
| Version | WORD | 2 | +4 | +4 | ヘッダー形式のバージョン番号。 |
| Machine | WORD | 2 | +6 | +6 | 対象マシン種別。 |
| TimeDateStamp | DWORD | 4 | +8 | +8 | 作成日時のタイムスタンプ。 |
| ClassID | GUID | 16 | +12 | +12 | オブジェクトのクラスを識別するGUID。 |
| SizeOfData | DWORD | 4 | +28 | +28 | 続くデータのサイズをバイト単位で示す。 |
| Flags | DWORD | 4 | +32 | +32 | オブジェクトの属性フラグ。 |
| MetaDataSize | DWORD | 4 | +36 | +36 | メタデータのサイズをバイト単位で示す。 |
| MetaDataOffset | DWORD | 4 | +40 | +40 | メタデータへのオフセット。 |
各言語での定義
#include <windows.h>
// ANON_OBJECT_HEADER_V2 (x64 44 / x86 44 バイト)
typedef struct ANON_OBJECT_HEADER_V2 {
WORD Sig1;
WORD Sig2;
WORD Version;
WORD Machine;
DWORD TimeDateStamp;
GUID ClassID;
DWORD SizeOfData;
DWORD Flags;
DWORD MetaDataSize;
DWORD MetaDataOffset;
} ANON_OBJECT_HEADER_V2;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct ANON_OBJECT_HEADER_V2
{
public ushort Sig1;
public ushort Sig2;
public ushort Version;
public ushort Machine;
public uint TimeDateStamp;
public Guid ClassID;
public uint SizeOfData;
public uint Flags;
public uint MetaDataSize;
public uint MetaDataOffset;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure ANON_OBJECT_HEADER_V2
Public Sig1 As UShort
Public Sig2 As UShort
Public Version As UShort
Public Machine As UShort
Public TimeDateStamp As UInteger
Public ClassID As Guid
Public SizeOfData As UInteger
Public Flags As UInteger
Public MetaDataSize As UInteger
Public MetaDataOffset As UInteger
End Structureimport ctypes
from ctypes import wintypes
class ANON_OBJECT_HEADER_V2(ctypes.Structure):
_fields_ = [
("Sig1", ctypes.c_ushort),
("Sig2", ctypes.c_ushort),
("Version", ctypes.c_ushort),
("Machine", ctypes.c_ushort),
("TimeDateStamp", wintypes.DWORD),
("ClassID", GUID),
("SizeOfData", wintypes.DWORD),
("Flags", wintypes.DWORD),
("MetaDataSize", wintypes.DWORD),
("MetaDataOffset", wintypes.DWORD),
]#[repr(C)]
pub struct ANON_OBJECT_HEADER_V2 {
pub Sig1: u16,
pub Sig2: u16,
pub Version: u16,
pub Machine: u16,
pub TimeDateStamp: u32,
pub ClassID: GUID,
pub SizeOfData: u32,
pub Flags: u32,
pub MetaDataSize: u32,
pub MetaDataOffset: u32,
}import "golang.org/x/sys/windows"
type ANON_OBJECT_HEADER_V2 struct {
Sig1 uint16
Sig2 uint16
Version uint16
Machine uint16
TimeDateStamp uint32
ClassID windows.GUID
SizeOfData uint32
Flags uint32
MetaDataSize uint32
MetaDataOffset uint32
}type
ANON_OBJECT_HEADER_V2 = record
Sig1: Word;
Sig2: Word;
Version: Word;
Machine: Word;
TimeDateStamp: DWORD;
ClassID: TGUID;
SizeOfData: DWORD;
Flags: DWORD;
MetaDataSize: DWORD;
MetaDataOffset: DWORD;
end;const ANON_OBJECT_HEADER_V2 = extern struct {
Sig1: u16,
Sig2: u16,
Version: u16,
Machine: u16,
TimeDateStamp: u32,
ClassID: GUID,
SizeOfData: u32,
Flags: u32,
MetaDataSize: u32,
MetaDataOffset: u32,
};type
ANON_OBJECT_HEADER_V2 {.bycopy.} = object
Sig1: uint16
Sig2: uint16
Version: uint16
Machine: uint16
TimeDateStamp: uint32
ClassID: GUID
SizeOfData: uint32
Flags: uint32
MetaDataSize: uint32
MetaDataOffset: uint32struct ANON_OBJECT_HEADER_V2
{
ushort Sig1;
ushort Sig2;
ushort Version;
ushort Machine;
uint TimeDateStamp;
GUID ClassID;
uint SizeOfData;
uint Flags;
uint MetaDataSize;
uint MetaDataOffset;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; ANON_OBJECT_HEADER_V2 サイズ: 44 バイト(x64)
dim st, 11 ; 4byte整数×11(構造体サイズ 44 / 4 切り上げ)
; Sig1 : WORD (+0, 2byte) wpoke st,0,値 / 値 = wpeek(st,0)
; Sig2 : WORD (+2, 2byte) wpoke st,2,値 / 値 = wpeek(st,2)
; Version : WORD (+4, 2byte) wpoke st,4,値 / 値 = wpeek(st,4)
; Machine : WORD (+6, 2byte) wpoke st,6,値 / 値 = wpeek(st,6)
; TimeDateStamp : DWORD (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; ClassID : GUID (+12, 16byte) varptr(st)+12 を基点に操作(16byte:入れ子/配列)
; SizeOfData : DWORD (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; Flags : DWORD (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; MetaDataSize : DWORD (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; MetaDataOffset : DWORD (+40, 4byte) st.10 = 値 / 値 = st.10 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global GUID, pack=1
#field int Data1
#field short Data2
#field short Data3
#field byte Data4 8
#endstruct
#defstruct global ANON_OBJECT_HEADER_V2
#field short Sig1
#field short Sig2
#field short Version
#field short Machine
#field int TimeDateStamp
#field GUID ClassID
#field int SizeOfData
#field int Flags
#field int MetaDataSize
#field int MetaDataOffset
#endstruct
stdim st, ANON_OBJECT_HEADER_V2 ; NSTRUCT 変数を確保
st->Sig1 = 100
mes "Sig1=" + st->Sig1