ホーム › NetworkManagement.WindowsFilteringPlatform › FWPM_CONNECTION0
FWPM_CONNECTION0
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| connectionId | ULONGLONG | 8 | +0 | +0 | 接続を一意に識別するID。 |
| ipVersion | FWP_IP_VERSION | 4 | +8 | +8 | IPバージョン(IPv4/IPv6)。 |
| Anonymous1 | _Anonymous1_e__Union | 16 | +12 | +12 | IPバージョンに応じたローカルアドレスを保持する共用体。 |
| Anonymous2 | _Anonymous2_e__Union | 16 | +28 | +28 | IPバージョンに応じたリモートアドレスを保持する共用体。 |
| providerKey | GUID* | 8/4 | +48 | +44 | 関連付くプロバイダーのGUIDへのポインター。NULL可。 |
| ipsecTrafficModeType | IPSEC_TRAFFIC_TYPE | 4 | +56 | +48 | IPsecトラフィックモード(トランスポート/トンネル)。 |
| keyModuleType | IKEEXT_KEY_MODULE_TYPE | 4 | +60 | +52 | 使用したキーイングモジュール種別(IKE/AuthIPなど)。 |
| mmCrypto | IKEEXT_PROPOSAL0 | 28 | +64 | +56 | メインモードで合意した暗号スイート(IKEEXT_PROPOSAL0)。 |
| mmPeer | IKEEXT_CREDENTIAL2 | 16/12 | +96 | +84 | メインモードのピア資格情報(IKEEXT_CREDENTIAL2)。 |
| emPeer | IKEEXT_CREDENTIAL2 | 16/12 | +112 | +96 | 拡張モードのピア資格情報(IKEEXT_CREDENTIAL2)。 |
| bytesTransferredIn | ULONGLONG | 8 | +128 | +112 | 受信方向で転送したバイト数。 |
| bytesTransferredOut | ULONGLONG | 8 | +136 | +120 | 送信方向で転送したバイト数。 |
| bytesTransferredTotal | ULONGLONG | 8 | +144 | +128 | 転送した総バイト数。 |
| startSysTime | FILETIME | 8 | +152 | +136 | 接続の開始システム時刻(FILETIME)。 |
共用体: _Anonymous1_e__Union x64 16B / x86 16B
| フィールド | 型 | サイズ | x64 | x86 |
|---|---|---|---|---|
| localV4Address | DWORD | 4 | +0 | +0 |
| localV6Address | BYTE | 16 | +0 | +0 |
共用体: _Anonymous2_e__Union x64 16B / x86 16B
| フィールド | 型 | サイズ | x64 | x86 |
|---|---|---|---|---|
| remoteV4Address | DWORD | 4 | +0 | +0 |
| remoteV6Address | BYTE | 16 | +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 Structureimport 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: FILETIMEstruct 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 非対応)。必要に応じ手動でアクセス。