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

OFFLOAD_IPSEC_ADD_UDPESP_SA

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

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

フィールド

フィールドサイズx64x86説明
SrcAddrDWORD4+0+0送信元IPv4アドレス。
SrcMaskDWORD4+4+4送信元アドレスのサブネットマスク。
DstAddrDWORD4+8+8宛先IPv4アドレス。
DstMaskDWORD4+12+12宛先アドレスのサブネットマスク。
ProtocolDWORD4+16+16対象のIPプロトコル番号。
SrcPortWORD2+20+20送信元ポート番号。
DstPortWORD2+22+22宛先ポート番号。
SrcTunnelAddrDWORD4+24+24トンネルモード時の送信元トンネルアドレス。
DstTunnelAddrDWORD4+28+28トンネルモード時の宛先トンネルアドレス。
FlagsWORD2+32+32SAの種別を示すフラグ。
NumSAsSHORT2+34+34SecAssoc配列に含まれるSAの数。
SecAssocOFFLOAD_SECURITY_ASSOCIATION132+36+36セキュリティアソシエーション情報の配列(最大3要素)。
OffloadHandleHANDLE8/4+168+168ドライバが返すSAオフロードハンドル。
EncapTypeEntryOFFLOAD_IPSEC_UDPESP_ENCAPTYPE_ENTRY8+176+172UDP-ESPカプセル化種別とポートの情報。
EncapTypeEntryOffldHandleHANDLE8/4+184+180カプセル化種別エントリのオフロードハンドル。
KeyLenDWORD4+192+184KeyMatのキーマテリアル長(バイト)。
KeyMatBYTE1+196+188鍵素材を格納する可変長配列の先頭バイト。

各言語での定義

#include <windows.h>

// OFFLOAD_ALGO_INFO  (x64 12 / x86 12 バイト)
typedef struct OFFLOAD_ALGO_INFO {
    DWORD algoIdentifier;
    DWORD algoKeylen;
    DWORD algoRounds;
} OFFLOAD_ALGO_INFO;

// OFFLOAD_SECURITY_ASSOCIATION  (x64 44 / x86 44 バイト)
typedef struct OFFLOAD_SECURITY_ASSOCIATION {
    OFFLOAD_OPERATION_E Operation;
    DWORD SPI;
    OFFLOAD_ALGO_INFO IntegrityAlgo;
    OFFLOAD_ALGO_INFO ConfAlgo;
    OFFLOAD_ALGO_INFO Reserved;
} OFFLOAD_SECURITY_ASSOCIATION;

// OFFLOAD_IPSEC_UDPESP_ENCAPTYPE_ENTRY  (x64 8 / x86 8 バイト)
typedef struct OFFLOAD_IPSEC_UDPESP_ENCAPTYPE_ENTRY {
    UDP_ENCAP_TYPE UdpEncapType;
    WORD DstEncapPort;
} OFFLOAD_IPSEC_UDPESP_ENCAPTYPE_ENTRY;

// OFFLOAD_IPSEC_ADD_UDPESP_SA  (x64 200 / x86 192 バイト)
typedef struct OFFLOAD_IPSEC_ADD_UDPESP_SA {
    DWORD SrcAddr;
    DWORD SrcMask;
    DWORD DstAddr;
    DWORD DstMask;
    DWORD Protocol;
    WORD SrcPort;
    WORD DstPort;
    DWORD SrcTunnelAddr;
    DWORD DstTunnelAddr;
    WORD Flags;
    SHORT NumSAs;
    OFFLOAD_SECURITY_ASSOCIATION SecAssoc[3];
    HANDLE OffloadHandle;
    OFFLOAD_IPSEC_UDPESP_ENCAPTYPE_ENTRY EncapTypeEntry;
    HANDLE EncapTypeEntryOffldHandle;
    DWORD KeyLen;
    BYTE KeyMat[1];
} OFFLOAD_IPSEC_ADD_UDPESP_SA;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct OFFLOAD_ALGO_INFO
{
    public uint algoIdentifier;
    public uint algoKeylen;
    public uint algoRounds;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct OFFLOAD_SECURITY_ASSOCIATION
{
    public int Operation;
    public uint SPI;
    public OFFLOAD_ALGO_INFO IntegrityAlgo;
    public OFFLOAD_ALGO_INFO ConfAlgo;
    public OFFLOAD_ALGO_INFO Reserved;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct OFFLOAD_IPSEC_UDPESP_ENCAPTYPE_ENTRY
{
    public int UdpEncapType;
    public ushort DstEncapPort;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct OFFLOAD_IPSEC_ADD_UDPESP_SA
{
    public uint SrcAddr;
    public uint SrcMask;
    public uint DstAddr;
    public uint DstMask;
    public uint Protocol;
    public ushort SrcPort;
    public ushort DstPort;
    public uint SrcTunnelAddr;
    public uint DstTunnelAddr;
    public ushort Flags;
    public short NumSAs;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] public OFFLOAD_SECURITY_ASSOCIATION[] SecAssoc;
    public IntPtr OffloadHandle;
    public OFFLOAD_IPSEC_UDPESP_ENCAPTYPE_ENTRY EncapTypeEntry;
    public IntPtr EncapTypeEntryOffldHandle;
    public uint KeyLen;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 1)] public byte[] KeyMat;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure OFFLOAD_ALGO_INFO
    Public algoIdentifier As UInteger
    Public algoKeylen As UInteger
    Public algoRounds As UInteger
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure OFFLOAD_SECURITY_ASSOCIATION
    Public Operation As Integer
    Public SPI As UInteger
    Public IntegrityAlgo As OFFLOAD_ALGO_INFO
    Public ConfAlgo As OFFLOAD_ALGO_INFO
    Public Reserved As OFFLOAD_ALGO_INFO
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure OFFLOAD_IPSEC_UDPESP_ENCAPTYPE_ENTRY
    Public UdpEncapType As Integer
    Public DstEncapPort As UShort
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure OFFLOAD_IPSEC_ADD_UDPESP_SA
    Public SrcAddr As UInteger
    Public SrcMask As UInteger
    Public DstAddr As UInteger
    Public DstMask As UInteger
    Public Protocol As UInteger
    Public SrcPort As UShort
    Public DstPort As UShort
    Public SrcTunnelAddr As UInteger
    Public DstTunnelAddr As UInteger
    Public Flags As UShort
    Public NumSAs As Short
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=3)> Public SecAssoc() As OFFLOAD_SECURITY_ASSOCIATION
    Public OffloadHandle As IntPtr
    Public EncapTypeEntry As OFFLOAD_IPSEC_UDPESP_ENCAPTYPE_ENTRY
    Public EncapTypeEntryOffldHandle As IntPtr
    Public KeyLen As UInteger
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=1)> Public KeyMat() As Byte
End Structure
import ctypes
from ctypes import wintypes

class OFFLOAD_ALGO_INFO(ctypes.Structure):
    _fields_ = [
        ("algoIdentifier", wintypes.DWORD),
        ("algoKeylen", wintypes.DWORD),
        ("algoRounds", wintypes.DWORD),
    ]

class OFFLOAD_SECURITY_ASSOCIATION(ctypes.Structure):
    _fields_ = [
        ("Operation", ctypes.c_int),
        ("SPI", wintypes.DWORD),
        ("IntegrityAlgo", OFFLOAD_ALGO_INFO),
        ("ConfAlgo", OFFLOAD_ALGO_INFO),
        ("Reserved", OFFLOAD_ALGO_INFO),
    ]

class OFFLOAD_IPSEC_UDPESP_ENCAPTYPE_ENTRY(ctypes.Structure):
    _fields_ = [
        ("UdpEncapType", ctypes.c_int),
        ("DstEncapPort", ctypes.c_ushort),
    ]

class OFFLOAD_IPSEC_ADD_UDPESP_SA(ctypes.Structure):
    _fields_ = [
        ("SrcAddr", wintypes.DWORD),
        ("SrcMask", wintypes.DWORD),
        ("DstAddr", wintypes.DWORD),
        ("DstMask", wintypes.DWORD),
        ("Protocol", wintypes.DWORD),
        ("SrcPort", ctypes.c_ushort),
        ("DstPort", ctypes.c_ushort),
        ("SrcTunnelAddr", wintypes.DWORD),
        ("DstTunnelAddr", wintypes.DWORD),
        ("Flags", ctypes.c_ushort),
        ("NumSAs", ctypes.c_short),
        ("SecAssoc", OFFLOAD_SECURITY_ASSOCIATION * 3),
        ("OffloadHandle", ctypes.c_void_p),
        ("EncapTypeEntry", OFFLOAD_IPSEC_UDPESP_ENCAPTYPE_ENTRY),
        ("EncapTypeEntryOffldHandle", ctypes.c_void_p),
        ("KeyLen", wintypes.DWORD),
        ("KeyMat", ctypes.c_ubyte * 1),
    ]
#[repr(C)]
pub struct OFFLOAD_ALGO_INFO {
    pub algoIdentifier: u32,
    pub algoKeylen: u32,
    pub algoRounds: u32,
}

#[repr(C)]
pub struct OFFLOAD_SECURITY_ASSOCIATION {
    pub Operation: i32,
    pub SPI: u32,
    pub IntegrityAlgo: OFFLOAD_ALGO_INFO,
    pub ConfAlgo: OFFLOAD_ALGO_INFO,
    pub Reserved: OFFLOAD_ALGO_INFO,
}

#[repr(C)]
pub struct OFFLOAD_IPSEC_UDPESP_ENCAPTYPE_ENTRY {
    pub UdpEncapType: i32,
    pub DstEncapPort: u16,
}

#[repr(C)]
pub struct OFFLOAD_IPSEC_ADD_UDPESP_SA {
    pub SrcAddr: u32,
    pub SrcMask: u32,
    pub DstAddr: u32,
    pub DstMask: u32,
    pub Protocol: u32,
    pub SrcPort: u16,
    pub DstPort: u16,
    pub SrcTunnelAddr: u32,
    pub DstTunnelAddr: u32,
    pub Flags: u16,
    pub NumSAs: i16,
    pub SecAssoc: [OFFLOAD_SECURITY_ASSOCIATION; 3],
    pub OffloadHandle: *mut core::ffi::c_void,
    pub EncapTypeEntry: OFFLOAD_IPSEC_UDPESP_ENCAPTYPE_ENTRY,
    pub EncapTypeEntryOffldHandle: *mut core::ffi::c_void,
    pub KeyLen: u32,
    pub KeyMat: [u8; 1],
}
import "golang.org/x/sys/windows"

type OFFLOAD_ALGO_INFO struct {
	algoIdentifier uint32
	algoKeylen uint32
	algoRounds uint32
}

type OFFLOAD_SECURITY_ASSOCIATION struct {
	Operation int32
	SPI uint32
	IntegrityAlgo OFFLOAD_ALGO_INFO
	ConfAlgo OFFLOAD_ALGO_INFO
	Reserved OFFLOAD_ALGO_INFO
}

type OFFLOAD_IPSEC_UDPESP_ENCAPTYPE_ENTRY struct {
	UdpEncapType int32
	DstEncapPort uint16
}

type OFFLOAD_IPSEC_ADD_UDPESP_SA struct {
	SrcAddr uint32
	SrcMask uint32
	DstAddr uint32
	DstMask uint32
	Protocol uint32
	SrcPort uint16
	DstPort uint16
	SrcTunnelAddr uint32
	DstTunnelAddr uint32
	Flags uint16
	NumSAs int16
	SecAssoc [3]OFFLOAD_SECURITY_ASSOCIATION
	OffloadHandle uintptr
	EncapTypeEntry OFFLOAD_IPSEC_UDPESP_ENCAPTYPE_ENTRY
	EncapTypeEntryOffldHandle uintptr
	KeyLen uint32
	KeyMat [1]byte
}
type
  OFFLOAD_ALGO_INFO = record
    algoIdentifier: DWORD;
    algoKeylen: DWORD;
    algoRounds: DWORD;
  end;

  OFFLOAD_SECURITY_ASSOCIATION = record
    Operation: Integer;
    SPI: DWORD;
    IntegrityAlgo: OFFLOAD_ALGO_INFO;
    ConfAlgo: OFFLOAD_ALGO_INFO;
    Reserved: OFFLOAD_ALGO_INFO;
  end;

  OFFLOAD_IPSEC_UDPESP_ENCAPTYPE_ENTRY = record
    UdpEncapType: Integer;
    DstEncapPort: Word;
  end;

  OFFLOAD_IPSEC_ADD_UDPESP_SA = record
    SrcAddr: DWORD;
    SrcMask: DWORD;
    DstAddr: DWORD;
    DstMask: DWORD;
    Protocol: DWORD;
    SrcPort: Word;
    DstPort: Word;
    SrcTunnelAddr: DWORD;
    DstTunnelAddr: DWORD;
    Flags: Word;
    NumSAs: Smallint;
    SecAssoc: array[0..2] of OFFLOAD_SECURITY_ASSOCIATION;
    OffloadHandle: Pointer;
    EncapTypeEntry: OFFLOAD_IPSEC_UDPESP_ENCAPTYPE_ENTRY;
    EncapTypeEntryOffldHandle: Pointer;
    KeyLen: DWORD;
    KeyMat: array[0..0] of Byte;
  end;
const OFFLOAD_ALGO_INFO = extern struct {
    algoIdentifier: u32,
    algoKeylen: u32,
    algoRounds: u32,
};

const OFFLOAD_SECURITY_ASSOCIATION = extern struct {
    Operation: i32,
    SPI: u32,
    IntegrityAlgo: OFFLOAD_ALGO_INFO,
    ConfAlgo: OFFLOAD_ALGO_INFO,
    Reserved: OFFLOAD_ALGO_INFO,
};

const OFFLOAD_IPSEC_UDPESP_ENCAPTYPE_ENTRY = extern struct {
    UdpEncapType: i32,
    DstEncapPort: u16,
};

const OFFLOAD_IPSEC_ADD_UDPESP_SA = extern struct {
    SrcAddr: u32,
    SrcMask: u32,
    DstAddr: u32,
    DstMask: u32,
    Protocol: u32,
    SrcPort: u16,
    DstPort: u16,
    SrcTunnelAddr: u32,
    DstTunnelAddr: u32,
    Flags: u16,
    NumSAs: i16,
    SecAssoc: [3]OFFLOAD_SECURITY_ASSOCIATION,
    OffloadHandle: ?*anyopaque,
    EncapTypeEntry: OFFLOAD_IPSEC_UDPESP_ENCAPTYPE_ENTRY,
    EncapTypeEntryOffldHandle: ?*anyopaque,
    KeyLen: u32,
    KeyMat: [1]u8,
};
type
  OFFLOAD_ALGO_INFO {.bycopy.} = object
    algoIdentifier: uint32
    algoKeylen: uint32
    algoRounds: uint32

  OFFLOAD_SECURITY_ASSOCIATION {.bycopy.} = object
    Operation: int32
    SPI: uint32
    IntegrityAlgo: OFFLOAD_ALGO_INFO
    ConfAlgo: OFFLOAD_ALGO_INFO
    Reserved: OFFLOAD_ALGO_INFO

  OFFLOAD_IPSEC_UDPESP_ENCAPTYPE_ENTRY {.bycopy.} = object
    UdpEncapType: int32
    DstEncapPort: uint16

  OFFLOAD_IPSEC_ADD_UDPESP_SA {.bycopy.} = object
    SrcAddr: uint32
    SrcMask: uint32
    DstAddr: uint32
    DstMask: uint32
    Protocol: uint32
    SrcPort: uint16
    DstPort: uint16
    SrcTunnelAddr: uint32
    DstTunnelAddr: uint32
    Flags: uint16
    NumSAs: int16
    SecAssoc: array[3, OFFLOAD_SECURITY_ASSOCIATION]
    OffloadHandle: pointer
    EncapTypeEntry: OFFLOAD_IPSEC_UDPESP_ENCAPTYPE_ENTRY
    EncapTypeEntryOffldHandle: pointer
    KeyLen: uint32
    KeyMat: array[1, uint8]
struct OFFLOAD_ALGO_INFO
{
    uint algoIdentifier;
    uint algoKeylen;
    uint algoRounds;
}

struct OFFLOAD_SECURITY_ASSOCIATION
{
    int Operation;
    uint SPI;
    OFFLOAD_ALGO_INFO IntegrityAlgo;
    OFFLOAD_ALGO_INFO ConfAlgo;
    OFFLOAD_ALGO_INFO Reserved;
}

struct OFFLOAD_IPSEC_UDPESP_ENCAPTYPE_ENTRY
{
    int UdpEncapType;
    ushort DstEncapPort;
}

struct OFFLOAD_IPSEC_ADD_UDPESP_SA
{
    uint SrcAddr;
    uint SrcMask;
    uint DstAddr;
    uint DstMask;
    uint Protocol;
    ushort SrcPort;
    ushort DstPort;
    uint SrcTunnelAddr;
    uint DstTunnelAddr;
    ushort Flags;
    short NumSAs;
    OFFLOAD_SECURITY_ASSOCIATION[3] SecAssoc;
    void* OffloadHandle;
    OFFLOAD_IPSEC_UDPESP_ENCAPTYPE_ENTRY EncapTypeEntry;
    void* EncapTypeEntryOffldHandle;
    uint KeyLen;
    ubyte[1] KeyMat;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; OFFLOAD_IPSEC_ADD_UDPESP_SA サイズ: 192 バイト(x86)
dim st, 48    ; 4byte整数×48(構造体サイズ 192 / 4 切り上げ)
; SrcAddr : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; SrcMask : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; DstAddr : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; DstMask : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; Protocol : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; SrcPort : WORD (+20, 2byte)  wpoke st,20,値  /  値 = wpeek(st,20)
; DstPort : WORD (+22, 2byte)  wpoke st,22,値  /  値 = wpeek(st,22)
; SrcTunnelAddr : DWORD (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; DstTunnelAddr : DWORD (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; Flags : WORD (+32, 2byte)  wpoke st,32,値  /  値 = wpeek(st,32)
; NumSAs : SHORT (+34, 2byte)  wpoke st,34,値  /  値 = wpeek(st,34)
; SecAssoc : OFFLOAD_SECURITY_ASSOCIATION (+36, 132byte)  varptr(st)+36 を基点に操作(132byte:入れ子/配列)
; OffloadHandle : HANDLE (+168, 4byte)  st.42 = 値  /  値 = st.42   (lpoke/lpeek も可)
; EncapTypeEntry : OFFLOAD_IPSEC_UDPESP_ENCAPTYPE_ENTRY (+172, 8byte)  varptr(st)+172 を基点に操作(8byte:入れ子/配列)
; EncapTypeEntryOffldHandle : HANDLE (+180, 4byte)  st.45 = 値  /  値 = st.45   (lpoke/lpeek も可)
; KeyLen : DWORD (+184, 4byte)  st.46 = 値  /  値 = st.46   (lpoke/lpeek も可)
; KeyMat : BYTE (+188, 1byte)  varptr(st)+188 を基点に操作(1byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; OFFLOAD_IPSEC_ADD_UDPESP_SA サイズ: 200 バイト(x64)
dim st, 50    ; 4byte整数×50(構造体サイズ 200 / 4 切り上げ)
; SrcAddr : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; SrcMask : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; DstAddr : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; DstMask : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; Protocol : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; SrcPort : WORD (+20, 2byte)  wpoke st,20,値  /  値 = wpeek(st,20)
; DstPort : WORD (+22, 2byte)  wpoke st,22,値  /  値 = wpeek(st,22)
; SrcTunnelAddr : DWORD (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; DstTunnelAddr : DWORD (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; Flags : WORD (+32, 2byte)  wpoke st,32,値  /  値 = wpeek(st,32)
; NumSAs : SHORT (+34, 2byte)  wpoke st,34,値  /  値 = wpeek(st,34)
; SecAssoc : OFFLOAD_SECURITY_ASSOCIATION (+36, 132byte)  varptr(st)+36 を基点に操作(132byte:入れ子/配列)
; OffloadHandle : HANDLE (+168, 8byte)  qpoke st,168,値 / qpeek(st,168)  ※IronHSPのみ。3.7/3.8は lpoke st,168,下位 : lpoke st,172,上位
; EncapTypeEntry : OFFLOAD_IPSEC_UDPESP_ENCAPTYPE_ENTRY (+176, 8byte)  varptr(st)+176 を基点に操作(8byte:入れ子/配列)
; EncapTypeEntryOffldHandle : HANDLE (+184, 8byte)  qpoke st,184,値 / qpeek(st,184)  ※IronHSPのみ。3.7/3.8は lpoke st,184,下位 : lpoke st,188,上位
; KeyLen : DWORD (+192, 4byte)  st.48 = 値  /  値 = st.48   (lpoke/lpeek も可)
; KeyMat : BYTE (+196, 1byte)  varptr(st)+196 を基点に操作(1byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global OFFLOAD_ALGO_INFO
    #field int algoIdentifier
    #field int algoKeylen
    #field int algoRounds
#endstruct

#defstruct global OFFLOAD_SECURITY_ASSOCIATION
    #field int Operation
    #field int SPI
    #field OFFLOAD_ALGO_INFO IntegrityAlgo
    #field OFFLOAD_ALGO_INFO ConfAlgo
    #field OFFLOAD_ALGO_INFO Reserved
#endstruct

#defstruct global OFFLOAD_IPSEC_UDPESP_ENCAPTYPE_ENTRY
    #field int UdpEncapType
    #field short DstEncapPort
#endstruct

#defstruct global OFFLOAD_IPSEC_ADD_UDPESP_SA
    #field int SrcAddr
    #field int SrcMask
    #field int DstAddr
    #field int DstMask
    #field int Protocol
    #field short SrcPort
    #field short DstPort
    #field int SrcTunnelAddr
    #field int DstTunnelAddr
    #field short Flags
    #field short NumSAs
    #field OFFLOAD_SECURITY_ASSOCIATION SecAssoc 3
    #field intptr OffloadHandle
    #field OFFLOAD_IPSEC_UDPESP_ENCAPTYPE_ENTRY EncapTypeEntry
    #field intptr EncapTypeEntryOffldHandle
    #field int KeyLen
    #field byte KeyMat 1
#endstruct

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