ホーム › NetworkManagement.WindowsFilteringPlatform › IPSEC_TRANSPORT_POLICY0
IPSEC_TRANSPORT_POLICY0
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| numIpsecProposals | DWORD | 4 | +0 | +0 | ipsecProposals配列の要素数。 |
| ipsecProposals | IPSEC_PROPOSAL0* | 8/4 | +8 | +4 | IPsecプロポーザルの配列へのポインター。 |
| flags | IPSEC_POLICY_FLAG | 4 | +16 | +8 | IPsecポリシーの動作を制御するフラグ。 |
| ndAllowClearTimeoutSeconds | DWORD | 4 | +20 | +12 | 近隣探索の平文許可タイムアウト(秒単位)。 |
| saIdleTimeout | IPSEC_SA_IDLE_TIMEOUT0 | 8 | +24 | +16 | SAのアイドルタイムアウト設定。 |
| emPolicy | IKEEXT_EM_POLICY0* | 8/4 | +32 | +24 | 拡張モード(AuthIP第2認証)ポリシーへのポインター。NULL可。 |
各言語での定義
#include <windows.h>
// IPSEC_SA_IDLE_TIMEOUT0 (x64 8 / x86 8 バイト)
typedef struct IPSEC_SA_IDLE_TIMEOUT0 {
DWORD idleTimeoutSeconds;
DWORD idleTimeoutSecondsFailOver;
} IPSEC_SA_IDLE_TIMEOUT0;
// IPSEC_TRANSPORT_POLICY0 (x64 40 / x86 28 バイト)
typedef struct IPSEC_TRANSPORT_POLICY0 {
DWORD numIpsecProposals;
IPSEC_PROPOSAL0* ipsecProposals;
IPSEC_POLICY_FLAG flags;
DWORD ndAllowClearTimeoutSeconds;
IPSEC_SA_IDLE_TIMEOUT0 saIdleTimeout;
IKEEXT_EM_POLICY0* emPolicy;
} IPSEC_TRANSPORT_POLICY0;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct IPSEC_SA_IDLE_TIMEOUT0
{
public uint idleTimeoutSeconds;
public uint idleTimeoutSecondsFailOver;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct IPSEC_TRANSPORT_POLICY0
{
public uint numIpsecProposals;
public IntPtr ipsecProposals;
public uint flags;
public uint ndAllowClearTimeoutSeconds;
public IPSEC_SA_IDLE_TIMEOUT0 saIdleTimeout;
public IntPtr emPolicy;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure IPSEC_SA_IDLE_TIMEOUT0
Public idleTimeoutSeconds As UInteger
Public idleTimeoutSecondsFailOver As UInteger
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure IPSEC_TRANSPORT_POLICY0
Public numIpsecProposals As UInteger
Public ipsecProposals As IntPtr
Public flags As UInteger
Public ndAllowClearTimeoutSeconds As UInteger
Public saIdleTimeout As IPSEC_SA_IDLE_TIMEOUT0
Public emPolicy As IntPtr
End Structureimport ctypes
from ctypes import wintypes
class IPSEC_SA_IDLE_TIMEOUT0(ctypes.Structure):
_fields_ = [
("idleTimeoutSeconds", wintypes.DWORD),
("idleTimeoutSecondsFailOver", wintypes.DWORD),
]
class IPSEC_TRANSPORT_POLICY0(ctypes.Structure):
_fields_ = [
("numIpsecProposals", wintypes.DWORD),
("ipsecProposals", ctypes.c_void_p),
("flags", wintypes.DWORD),
("ndAllowClearTimeoutSeconds", wintypes.DWORD),
("saIdleTimeout", IPSEC_SA_IDLE_TIMEOUT0),
("emPolicy", ctypes.c_void_p),
]#[repr(C)]
pub struct IPSEC_SA_IDLE_TIMEOUT0 {
pub idleTimeoutSeconds: u32,
pub idleTimeoutSecondsFailOver: u32,
}
#[repr(C)]
pub struct IPSEC_TRANSPORT_POLICY0 {
pub numIpsecProposals: u32,
pub ipsecProposals: *mut core::ffi::c_void,
pub flags: u32,
pub ndAllowClearTimeoutSeconds: u32,
pub saIdleTimeout: IPSEC_SA_IDLE_TIMEOUT0,
pub emPolicy: *mut core::ffi::c_void,
}import "golang.org/x/sys/windows"
type IPSEC_SA_IDLE_TIMEOUT0 struct {
idleTimeoutSeconds uint32
idleTimeoutSecondsFailOver uint32
}
type IPSEC_TRANSPORT_POLICY0 struct {
numIpsecProposals uint32
ipsecProposals uintptr
flags uint32
ndAllowClearTimeoutSeconds uint32
saIdleTimeout IPSEC_SA_IDLE_TIMEOUT0
emPolicy uintptr
}type
IPSEC_SA_IDLE_TIMEOUT0 = record
idleTimeoutSeconds: DWORD;
idleTimeoutSecondsFailOver: DWORD;
end;
IPSEC_TRANSPORT_POLICY0 = record
numIpsecProposals: DWORD;
ipsecProposals: Pointer;
flags: DWORD;
ndAllowClearTimeoutSeconds: DWORD;
saIdleTimeout: IPSEC_SA_IDLE_TIMEOUT0;
emPolicy: Pointer;
end;const IPSEC_SA_IDLE_TIMEOUT0 = extern struct {
idleTimeoutSeconds: u32,
idleTimeoutSecondsFailOver: u32,
};
const IPSEC_TRANSPORT_POLICY0 = extern struct {
numIpsecProposals: u32,
ipsecProposals: ?*anyopaque,
flags: u32,
ndAllowClearTimeoutSeconds: u32,
saIdleTimeout: IPSEC_SA_IDLE_TIMEOUT0,
emPolicy: ?*anyopaque,
};type
IPSEC_SA_IDLE_TIMEOUT0 {.bycopy.} = object
idleTimeoutSeconds: uint32
idleTimeoutSecondsFailOver: uint32
IPSEC_TRANSPORT_POLICY0 {.bycopy.} = object
numIpsecProposals: uint32
ipsecProposals: pointer
flags: uint32
ndAllowClearTimeoutSeconds: uint32
saIdleTimeout: IPSEC_SA_IDLE_TIMEOUT0
emPolicy: pointerstruct IPSEC_SA_IDLE_TIMEOUT0
{
uint idleTimeoutSeconds;
uint idleTimeoutSecondsFailOver;
}
struct IPSEC_TRANSPORT_POLICY0
{
uint numIpsecProposals;
void* ipsecProposals;
uint flags;
uint ndAllowClearTimeoutSeconds;
IPSEC_SA_IDLE_TIMEOUT0 saIdleTimeout;
void* emPolicy;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; IPSEC_TRANSPORT_POLICY0 サイズ: 28 バイト(x86)
dim st, 7 ; 4byte整数×7(構造体サイズ 28 / 4 切り上げ)
; numIpsecProposals : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; ipsecProposals : IPSEC_PROPOSAL0* (+4, 4byte) varptr(st)+4 を基点に操作(4byte:入れ子/配列)
; flags : IPSEC_POLICY_FLAG (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; ndAllowClearTimeoutSeconds : DWORD (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; saIdleTimeout : IPSEC_SA_IDLE_TIMEOUT0 (+16, 8byte) varptr(st)+16 を基点に操作(8byte:入れ子/配列)
; emPolicy : IKEEXT_EM_POLICY0* (+24, 4byte) varptr(st)+24 を基点に操作(4byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; IPSEC_TRANSPORT_POLICY0 サイズ: 40 バイト(x64)
dim st, 10 ; 4byte整数×10(構造体サイズ 40 / 4 切り上げ)
; numIpsecProposals : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; ipsecProposals : IPSEC_PROPOSAL0* (+8, 8byte) varptr(st)+8 を基点に操作(8byte:入れ子/配列)
; flags : IPSEC_POLICY_FLAG (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; ndAllowClearTimeoutSeconds : DWORD (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; saIdleTimeout : IPSEC_SA_IDLE_TIMEOUT0 (+24, 8byte) varptr(st)+24 を基点に操作(8byte:入れ子/配列)
; emPolicy : IKEEXT_EM_POLICY0* (+32, 8byte) varptr(st)+32 を基点に操作(8byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global IPSEC_SA_IDLE_TIMEOUT0
#field int idleTimeoutSeconds
#field int idleTimeoutSecondsFailOver
#endstruct
#defstruct global IPSEC_TRANSPORT_POLICY0
#field int numIpsecProposals
#field intptr ipsecProposals
#field int flags
#field int ndAllowClearTimeoutSeconds
#field IPSEC_SA_IDLE_TIMEOUT0 saIdleTimeout
#field intptr emPolicy
#endstruct
stdim st, IPSEC_TRANSPORT_POLICY0 ; NSTRUCT 変数を確保
st->numIpsecProposals = 100
mes "numIpsecProposals=" + st->numIpsecProposals