Win32 API 日本語リファレンス
ホームNetworkManagement.WindowsFilteringPlatform › FWPM_CONNECTION0

FWPM_CONNECTION0

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

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

フィールド

フィールドサイズx64x86説明
connectionIdULONGLONG8+0+0接続を一意に識別するID。
ipVersionFWP_IP_VERSION4+8+8IPバージョン(IPv4/IPv6)。
Anonymous1_Anonymous1_e__Union16+12+12IPバージョンに応じたローカルアドレスを保持する共用体。
Anonymous2_Anonymous2_e__Union16+28+28IPバージョンに応じたリモートアドレスを保持する共用体。
providerKeyGUID*8/4+48+44関連付くプロバイダーのGUIDへのポインター。NULL可。
ipsecTrafficModeTypeIPSEC_TRAFFIC_TYPE4+56+48IPsecトラフィックモード(トランスポート/トンネル)。
keyModuleTypeIKEEXT_KEY_MODULE_TYPE4+60+52使用したキーイングモジュール種別(IKE/AuthIPなど)。
mmCryptoIKEEXT_PROPOSAL028+64+56メインモードで合意した暗号スイート(IKEEXT_PROPOSAL0)。
mmPeerIKEEXT_CREDENTIAL216/12+96+84メインモードのピア資格情報(IKEEXT_CREDENTIAL2)。
emPeerIKEEXT_CREDENTIAL216/12+112+96拡張モードのピア資格情報(IKEEXT_CREDENTIAL2)。
bytesTransferredInULONGLONG8+128+112受信方向で転送したバイト数。
bytesTransferredOutULONGLONG8+136+120送信方向で転送したバイト数。
bytesTransferredTotalULONGLONG8+144+128転送した総バイト数。
startSysTimeFILETIME8+152+136接続の開始システム時刻(FILETIME)。

共用体: _Anonymous1_e__Union x64 16B / x86 16B

フィールドサイズx64x86
localV4AddressDWORD4+0+0
localV6AddressBYTE16+0+0

共用体: _Anonymous2_e__Union x64 16B / x86 16B

フィールドサイズx64x86
remoteV4AddressDWORD4+0+0
remoteV6AddressBYTE16+0+0

各言語での定義

#include <windows.h>

// IKEEXT_CIPHER_ALGORITHM0  (x64 12 / x86 12 バイト)
typedef struct IKEEXT_CIPHER_ALGORITHM0 {
    IKEEXT_CIPHER_TYPE algoIdentifier;
    DWORD keyLen;
    DWORD rounds;
} IKEEXT_CIPHER_ALGORITHM0;

// IKEEXT_INTEGRITY_ALGORITHM0  (x64 4 / x86 4 バイト)
typedef struct IKEEXT_INTEGRITY_ALGORITHM0 {
    IKEEXT_INTEGRITY_TYPE algoIdentifier;
} IKEEXT_INTEGRITY_ALGORITHM0;

// IKEEXT_PROPOSAL0  (x64 28 / x86 28 バイト)
typedef struct IKEEXT_PROPOSAL0 {
    IKEEXT_CIPHER_ALGORITHM0 cipherAlgorithm;
    IKEEXT_INTEGRITY_ALGORITHM0 integrityAlgorithm;
    DWORD maxLifetimeSeconds;
    IKEEXT_DH_GROUP dhGroup;
    DWORD quickModeLimit;
} IKEEXT_PROPOSAL0;

// IKEEXT_CREDENTIAL2  (x64 16 / x86 12 バイト)
typedef struct IKEEXT_CREDENTIAL2 {
    IKEEXT_AUTHENTICATION_METHOD_TYPE authenticationMethodType;
    IKEEXT_AUTHENTICATION_IMPERSONATION_TYPE impersonationType;
    _Anonymous_e__Union Anonymous;
} IKEEXT_CREDENTIAL2;

// FILETIME  (x64 8 / x86 8 バイト)
typedef struct FILETIME {
    DWORD dwLowDateTime;
    DWORD dwHighDateTime;
} FILETIME;

// FWPM_CONNECTION0  (x64 160 / x86 144 バイト)
typedef struct FWPM_CONNECTION0 {
    ULONGLONG connectionId;
    FWP_IP_VERSION ipVersion;
    _Anonymous1_e__Union Anonymous1;
    _Anonymous2_e__Union Anonymous2;
    GUID* providerKey;
    IPSEC_TRAFFIC_TYPE ipsecTrafficModeType;
    IKEEXT_KEY_MODULE_TYPE keyModuleType;
    IKEEXT_PROPOSAL0 mmCrypto;
    IKEEXT_CREDENTIAL2 mmPeer;
    IKEEXT_CREDENTIAL2 emPeer;
    ULONGLONG bytesTransferredIn;
    ULONGLONG bytesTransferredOut;
    ULONGLONG bytesTransferredTotal;
    FILETIME startSysTime;
} FWPM_CONNECTION0;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct IKEEXT_CIPHER_ALGORITHM0
{
    public int algoIdentifier;
    public uint keyLen;
    public uint rounds;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct IKEEXT_INTEGRITY_ALGORITHM0
{
    public int algoIdentifier;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct IKEEXT_PROPOSAL0
{
    public IKEEXT_CIPHER_ALGORITHM0 cipherAlgorithm;
    public IKEEXT_INTEGRITY_ALGORITHM0 integrityAlgorithm;
    public uint maxLifetimeSeconds;
    public int dhGroup;
    public uint quickModeLimit;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct IKEEXT_CREDENTIAL2
{
    public int authenticationMethodType;
    public int impersonationType;
    public _Anonymous_e__Union Anonymous;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct FILETIME
{
    public uint dwLowDateTime;
    public uint dwHighDateTime;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct FWPM_CONNECTION0
{
    public ulong connectionId;
    public int ipVersion;
    public _Anonymous1_e__Union Anonymous1;
    public _Anonymous2_e__Union Anonymous2;
    public IntPtr providerKey;
    public int ipsecTrafficModeType;
    public int keyModuleType;
    public IKEEXT_PROPOSAL0 mmCrypto;
    public IKEEXT_CREDENTIAL2 mmPeer;
    public IKEEXT_CREDENTIAL2 emPeer;
    public ulong bytesTransferredIn;
    public ulong bytesTransferredOut;
    public ulong bytesTransferredTotal;
    public FILETIME startSysTime;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure IKEEXT_CIPHER_ALGORITHM0
    Public algoIdentifier As Integer
    Public keyLen As UInteger
    Public rounds As UInteger
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure IKEEXT_INTEGRITY_ALGORITHM0
    Public algoIdentifier As Integer
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure IKEEXT_PROPOSAL0
    Public cipherAlgorithm As IKEEXT_CIPHER_ALGORITHM0
    Public integrityAlgorithm As IKEEXT_INTEGRITY_ALGORITHM0
    Public maxLifetimeSeconds As UInteger
    Public dhGroup As Integer
    Public quickModeLimit As UInteger
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure IKEEXT_CREDENTIAL2
    Public authenticationMethodType As Integer
    Public impersonationType As Integer
    Public Anonymous As _Anonymous_e__Union
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure FILETIME
    Public dwLowDateTime As UInteger
    Public dwHighDateTime As UInteger
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure FWPM_CONNECTION0
    Public connectionId As ULong
    Public ipVersion As Integer
    Public Anonymous1 As _Anonymous1_e__Union
    Public Anonymous2 As _Anonymous2_e__Union
    Public providerKey As IntPtr
    Public ipsecTrafficModeType As Integer
    Public keyModuleType As Integer
    Public mmCrypto As IKEEXT_PROPOSAL0
    Public mmPeer As IKEEXT_CREDENTIAL2
    Public emPeer As IKEEXT_CREDENTIAL2
    Public bytesTransferredIn As ULong
    Public bytesTransferredOut As ULong
    Public bytesTransferredTotal As ULong
    Public startSysTime As FILETIME
End Structure
import ctypes
from ctypes import wintypes

class IKEEXT_CIPHER_ALGORITHM0(ctypes.Structure):
    _fields_ = [
        ("algoIdentifier", ctypes.c_int),
        ("keyLen", wintypes.DWORD),
        ("rounds", wintypes.DWORD),
    ]

class IKEEXT_INTEGRITY_ALGORITHM0(ctypes.Structure):
    _fields_ = [
        ("algoIdentifier", ctypes.c_int),
    ]

class IKEEXT_PROPOSAL0(ctypes.Structure):
    _fields_ = [
        ("cipherAlgorithm", IKEEXT_CIPHER_ALGORITHM0),
        ("integrityAlgorithm", IKEEXT_INTEGRITY_ALGORITHM0),
        ("maxLifetimeSeconds", wintypes.DWORD),
        ("dhGroup", ctypes.c_int),
        ("quickModeLimit", wintypes.DWORD),
    ]

class IKEEXT_CREDENTIAL2(ctypes.Structure):
    _fields_ = [
        ("authenticationMethodType", ctypes.c_int),
        ("impersonationType", ctypes.c_int),
        ("Anonymous", _Anonymous_e__Union),
    ]

class FILETIME(ctypes.Structure):
    _fields_ = [
        ("dwLowDateTime", wintypes.DWORD),
        ("dwHighDateTime", wintypes.DWORD),
    ]

class FWPM_CONNECTION0(ctypes.Structure):
    _fields_ = [
        ("connectionId", ctypes.c_ulonglong),
        ("ipVersion", ctypes.c_int),
        ("Anonymous1", _Anonymous1_e__Union),
        ("Anonymous2", _Anonymous2_e__Union),
        ("providerKey", ctypes.c_void_p),
        ("ipsecTrafficModeType", ctypes.c_int),
        ("keyModuleType", ctypes.c_int),
        ("mmCrypto", IKEEXT_PROPOSAL0),
        ("mmPeer", IKEEXT_CREDENTIAL2),
        ("emPeer", IKEEXT_CREDENTIAL2),
        ("bytesTransferredIn", ctypes.c_ulonglong),
        ("bytesTransferredOut", ctypes.c_ulonglong),
        ("bytesTransferredTotal", ctypes.c_ulonglong),
        ("startSysTime", FILETIME),
    ]
#[repr(C)]
pub struct IKEEXT_CIPHER_ALGORITHM0 {
    pub algoIdentifier: i32,
    pub keyLen: u32,
    pub rounds: u32,
}

#[repr(C)]
pub struct IKEEXT_INTEGRITY_ALGORITHM0 {
    pub algoIdentifier: i32,
}

#[repr(C)]
pub struct IKEEXT_PROPOSAL0 {
    pub cipherAlgorithm: IKEEXT_CIPHER_ALGORITHM0,
    pub integrityAlgorithm: IKEEXT_INTEGRITY_ALGORITHM0,
    pub maxLifetimeSeconds: u32,
    pub dhGroup: i32,
    pub quickModeLimit: u32,
}

#[repr(C)]
pub struct IKEEXT_CREDENTIAL2 {
    pub authenticationMethodType: i32,
    pub impersonationType: i32,
    pub Anonymous: _Anonymous_e__Union,
}

#[repr(C)]
pub struct FILETIME {
    pub dwLowDateTime: u32,
    pub dwHighDateTime: u32,
}

#[repr(C)]
pub struct FWPM_CONNECTION0 {
    pub connectionId: u64,
    pub ipVersion: i32,
    pub Anonymous1: _Anonymous1_e__Union,
    pub Anonymous2: _Anonymous2_e__Union,
    pub providerKey: *mut core::ffi::c_void,
    pub ipsecTrafficModeType: i32,
    pub keyModuleType: i32,
    pub mmCrypto: IKEEXT_PROPOSAL0,
    pub mmPeer: IKEEXT_CREDENTIAL2,
    pub emPeer: IKEEXT_CREDENTIAL2,
    pub bytesTransferredIn: u64,
    pub bytesTransferredOut: u64,
    pub bytesTransferredTotal: u64,
    pub startSysTime: FILETIME,
}
import "golang.org/x/sys/windows"

type IKEEXT_CIPHER_ALGORITHM0 struct {
	algoIdentifier int32
	keyLen uint32
	rounds uint32
}

type IKEEXT_INTEGRITY_ALGORITHM0 struct {
	algoIdentifier int32
}

type IKEEXT_PROPOSAL0 struct {
	cipherAlgorithm IKEEXT_CIPHER_ALGORITHM0
	integrityAlgorithm IKEEXT_INTEGRITY_ALGORITHM0
	maxLifetimeSeconds uint32
	dhGroup int32
	quickModeLimit uint32
}

type IKEEXT_CREDENTIAL2 struct {
	authenticationMethodType int32
	impersonationType int32
	Anonymous _Anonymous_e__Union
}

type FILETIME struct {
	dwLowDateTime uint32
	dwHighDateTime uint32
}

type FWPM_CONNECTION0 struct {
	connectionId uint64
	ipVersion int32
	Anonymous1 _Anonymous1_e__Union
	Anonymous2 _Anonymous2_e__Union
	providerKey uintptr
	ipsecTrafficModeType int32
	keyModuleType int32
	mmCrypto IKEEXT_PROPOSAL0
	mmPeer IKEEXT_CREDENTIAL2
	emPeer IKEEXT_CREDENTIAL2
	bytesTransferredIn uint64
	bytesTransferredOut uint64
	bytesTransferredTotal uint64
	startSysTime FILETIME
}
type
  IKEEXT_CIPHER_ALGORITHM0 = record
    algoIdentifier: Integer;
    keyLen: DWORD;
    rounds: DWORD;
  end;

  IKEEXT_INTEGRITY_ALGORITHM0 = record
    algoIdentifier: Integer;
  end;

  IKEEXT_PROPOSAL0 = record
    cipherAlgorithm: IKEEXT_CIPHER_ALGORITHM0;
    integrityAlgorithm: IKEEXT_INTEGRITY_ALGORITHM0;
    maxLifetimeSeconds: DWORD;
    dhGroup: Integer;
    quickModeLimit: DWORD;
  end;

  IKEEXT_CREDENTIAL2 = record
    authenticationMethodType: Integer;
    impersonationType: Integer;
    Anonymous: _Anonymous_e__Union;
  end;

  FILETIME = record
    dwLowDateTime: DWORD;
    dwHighDateTime: DWORD;
  end;

  FWPM_CONNECTION0 = record
    connectionId: UInt64;
    ipVersion: Integer;
    Anonymous1: _Anonymous1_e__Union;
    Anonymous2: _Anonymous2_e__Union;
    providerKey: Pointer;
    ipsecTrafficModeType: Integer;
    keyModuleType: Integer;
    mmCrypto: IKEEXT_PROPOSAL0;
    mmPeer: IKEEXT_CREDENTIAL2;
    emPeer: IKEEXT_CREDENTIAL2;
    bytesTransferredIn: UInt64;
    bytesTransferredOut: UInt64;
    bytesTransferredTotal: UInt64;
    startSysTime: FILETIME;
  end;
const IKEEXT_CIPHER_ALGORITHM0 = extern struct {
    algoIdentifier: i32,
    keyLen: u32,
    rounds: u32,
};

const IKEEXT_INTEGRITY_ALGORITHM0 = extern struct {
    algoIdentifier: i32,
};

const IKEEXT_PROPOSAL0 = extern struct {
    cipherAlgorithm: IKEEXT_CIPHER_ALGORITHM0,
    integrityAlgorithm: IKEEXT_INTEGRITY_ALGORITHM0,
    maxLifetimeSeconds: u32,
    dhGroup: i32,
    quickModeLimit: u32,
};

const IKEEXT_CREDENTIAL2 = extern struct {
    authenticationMethodType: i32,
    impersonationType: i32,
    Anonymous: _Anonymous_e__Union,
};

const FILETIME = extern struct {
    dwLowDateTime: u32,
    dwHighDateTime: u32,
};

const FWPM_CONNECTION0 = extern struct {
    connectionId: u64,
    ipVersion: i32,
    Anonymous1: _Anonymous1_e__Union,
    Anonymous2: _Anonymous2_e__Union,
    providerKey: ?*anyopaque,
    ipsecTrafficModeType: i32,
    keyModuleType: i32,
    mmCrypto: IKEEXT_PROPOSAL0,
    mmPeer: IKEEXT_CREDENTIAL2,
    emPeer: IKEEXT_CREDENTIAL2,
    bytesTransferredIn: u64,
    bytesTransferredOut: u64,
    bytesTransferredTotal: u64,
    startSysTime: FILETIME,
};
type
  IKEEXT_CIPHER_ALGORITHM0 {.bycopy.} = object
    algoIdentifier: int32
    keyLen: uint32
    rounds: uint32

  IKEEXT_INTEGRITY_ALGORITHM0 {.bycopy.} = object
    algoIdentifier: int32

  IKEEXT_PROPOSAL0 {.bycopy.} = object
    cipherAlgorithm: IKEEXT_CIPHER_ALGORITHM0
    integrityAlgorithm: IKEEXT_INTEGRITY_ALGORITHM0
    maxLifetimeSeconds: uint32
    dhGroup: int32
    quickModeLimit: uint32

  IKEEXT_CREDENTIAL2 {.bycopy.} = object
    authenticationMethodType: int32
    impersonationType: int32
    Anonymous: _Anonymous_e__Union

  FILETIME {.bycopy.} = object
    dwLowDateTime: uint32
    dwHighDateTime: uint32

  FWPM_CONNECTION0 {.bycopy.} = object
    connectionId: uint64
    ipVersion: int32
    Anonymous1: _Anonymous1_e__Union
    Anonymous2: _Anonymous2_e__Union
    providerKey: pointer
    ipsecTrafficModeType: int32
    keyModuleType: int32
    mmCrypto: IKEEXT_PROPOSAL0
    mmPeer: IKEEXT_CREDENTIAL2
    emPeer: IKEEXT_CREDENTIAL2
    bytesTransferredIn: uint64
    bytesTransferredOut: uint64
    bytesTransferredTotal: uint64
    startSysTime: FILETIME
struct IKEEXT_CIPHER_ALGORITHM0
{
    int algoIdentifier;
    uint keyLen;
    uint rounds;
}

struct IKEEXT_INTEGRITY_ALGORITHM0
{
    int algoIdentifier;
}

struct IKEEXT_PROPOSAL0
{
    IKEEXT_CIPHER_ALGORITHM0 cipherAlgorithm;
    IKEEXT_INTEGRITY_ALGORITHM0 integrityAlgorithm;
    uint maxLifetimeSeconds;
    int dhGroup;
    uint quickModeLimit;
}

struct IKEEXT_CREDENTIAL2
{
    int authenticationMethodType;
    int impersonationType;
    _Anonymous_e__Union Anonymous;
}

struct FILETIME
{
    uint dwLowDateTime;
    uint dwHighDateTime;
}

struct FWPM_CONNECTION0
{
    ulong connectionId;
    int ipVersion;
    _Anonymous1_e__Union Anonymous1;
    _Anonymous2_e__Union Anonymous2;
    void* providerKey;
    int ipsecTrafficModeType;
    int keyModuleType;
    IKEEXT_PROPOSAL0 mmCrypto;
    IKEEXT_CREDENTIAL2 mmPeer;
    IKEEXT_CREDENTIAL2 emPeer;
    ulong bytesTransferredIn;
    ulong bytesTransferredOut;
    ulong bytesTransferredTotal;
    FILETIME startSysTime;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; FWPM_CONNECTION0 サイズ: 144 バイト(x86)
dim st, 36    ; 4byte整数×36(構造体サイズ 144 / 4 切り上げ)
; connectionId : ULONGLONG (+0, 8byte)  qpoke st,0,値 / qpeek(st,0)  ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; ipVersion : FWP_IP_VERSION (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; Anonymous1 : _Anonymous1_e__Union (+12, 16byte)  varptr(st)+12 を基点に操作(16byte:入れ子/配列)
; Anonymous2 : _Anonymous2_e__Union (+28, 16byte)  varptr(st)+28 を基点に操作(16byte:入れ子/配列)
; providerKey : GUID* (+44, 4byte)  varptr(st)+44 を基点に操作(4byte:入れ子/配列)
; ipsecTrafficModeType : IPSEC_TRAFFIC_TYPE (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; keyModuleType : IKEEXT_KEY_MODULE_TYPE (+52, 4byte)  st.13 = 値  /  値 = st.13   (lpoke/lpeek も可)
; mmCrypto : IKEEXT_PROPOSAL0 (+56, 28byte)  varptr(st)+56 を基点に操作(28byte:入れ子/配列)
; mmPeer : IKEEXT_CREDENTIAL2 (+84, 12byte)  varptr(st)+84 を基点に操作(12byte:入れ子/配列)
; emPeer : IKEEXT_CREDENTIAL2 (+96, 12byte)  varptr(st)+96 を基点に操作(12byte:入れ子/配列)
; bytesTransferredIn : ULONGLONG (+112, 8byte)  qpoke st,112,値 / qpeek(st,112)  ※IronHSPのみ。3.7/3.8は lpoke st,112,下位 : lpoke st,116,上位
; bytesTransferredOut : ULONGLONG (+120, 8byte)  qpoke st,120,値 / qpeek(st,120)  ※IronHSPのみ。3.7/3.8は lpoke st,120,下位 : lpoke st,124,上位
; bytesTransferredTotal : ULONGLONG (+128, 8byte)  qpoke st,128,値 / qpeek(st,128)  ※IronHSPのみ。3.7/3.8は lpoke st,128,下位 : lpoke st,132,上位
; startSysTime : FILETIME (+136, 8byte)  varptr(st)+136 を基点に操作(8byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; FWPM_CONNECTION0 サイズ: 160 バイト(x64)
dim st, 40    ; 4byte整数×40(構造体サイズ 160 / 4 切り上げ)
; connectionId : ULONGLONG (+0, 8byte)  qpoke st,0,値 / qpeek(st,0)  ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; ipVersion : FWP_IP_VERSION (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; Anonymous1 : _Anonymous1_e__Union (+12, 16byte)  varptr(st)+12 を基点に操作(16byte:入れ子/配列)
; Anonymous2 : _Anonymous2_e__Union (+28, 16byte)  varptr(st)+28 を基点に操作(16byte:入れ子/配列)
; providerKey : GUID* (+48, 8byte)  varptr(st)+48 を基点に操作(8byte:入れ子/配列)
; ipsecTrafficModeType : IPSEC_TRAFFIC_TYPE (+56, 4byte)  st.14 = 値  /  値 = st.14   (lpoke/lpeek も可)
; keyModuleType : IKEEXT_KEY_MODULE_TYPE (+60, 4byte)  st.15 = 値  /  値 = st.15   (lpoke/lpeek も可)
; mmCrypto : IKEEXT_PROPOSAL0 (+64, 28byte)  varptr(st)+64 を基点に操作(28byte:入れ子/配列)
; mmPeer : IKEEXT_CREDENTIAL2 (+96, 16byte)  varptr(st)+96 を基点に操作(16byte:入れ子/配列)
; emPeer : IKEEXT_CREDENTIAL2 (+112, 16byte)  varptr(st)+112 を基点に操作(16byte:入れ子/配列)
; bytesTransferredIn : ULONGLONG (+128, 8byte)  qpoke st,128,値 / qpeek(st,128)  ※IronHSPのみ。3.7/3.8は lpoke st,128,下位 : lpoke st,132,上位
; bytesTransferredOut : ULONGLONG (+136, 8byte)  qpoke st,136,値 / qpeek(st,136)  ※IronHSPのみ。3.7/3.8は lpoke st,136,下位 : lpoke st,140,上位
; bytesTransferredTotal : ULONGLONG (+144, 8byte)  qpoke st,144,値 / qpeek(st,144)  ※IronHSPのみ。3.7/3.8は lpoke st,144,下位 : lpoke st,148,上位
; startSysTime : FILETIME (+152, 8byte)  varptr(st)+152 を基点に操作(8byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global IKEEXT_CIPHER_ALGORITHM0
    #field int algoIdentifier
    #field int keyLen
    #field int rounds
#endstruct

#defstruct global IKEEXT_INTEGRITY_ALGORITHM0
    #field int algoIdentifier
#endstruct

#defstruct global IKEEXT_PROPOSAL0
    #field IKEEXT_CIPHER_ALGORITHM0 cipherAlgorithm
    #field IKEEXT_INTEGRITY_ALGORITHM0 integrityAlgorithm
    #field int maxLifetimeSeconds
    #field int dhGroup
    #field int quickModeLimit
#endstruct

#defstruct global IKEEXT_CREDENTIAL2
    #field int authenticationMethodType
    #field int impersonationType
    #field byte Anonymous 8
#endstruct

#defstruct global FILETIME
    #field int dwLowDateTime
    #field int dwHighDateTime
#endstruct

#defstruct global FWPM_CONNECTION0
    #field int64 connectionId
    #field int ipVersion
    #field byte Anonymous1 16
    #field byte Anonymous2 16
    #field intptr providerKey
    #field int ipsecTrafficModeType
    #field int keyModuleType
    #field IKEEXT_PROPOSAL0 mmCrypto
    #field IKEEXT_CREDENTIAL2 mmPeer
    #field IKEEXT_CREDENTIAL2 emPeer
    #field int64 bytesTransferredIn
    #field int64 bytesTransferredOut
    #field int64 bytesTransferredTotal
    #field FILETIME startSysTime
#endstruct

stdim st, FWPM_CONNECTION0        ; NSTRUCT 変数を確保
st->connectionId = 100
mes "connectionId=" + st->connectionId
; ※union フィールドは byte 列で確保(NSTRUCT は union 非対応)。必要に応じ手動でアクセス。