ホーム › NetworkManagement.Rras › MPR_VPN_TRAFFIC_SELECTOR
MPR_VPN_TRAFFIC_SELECTOR
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| type | MPR_VPN_TS_TYPE | 4 | +0 | +0 | トラフィックセレクタの種別を表すMPR_VPN_TS_TYPE列挙値。 |
| protocolId | BYTE | 1 | +4 | +4 | 対象とするIPプロトコル番号(0は全プロトコル)。 |
| portStart | WORD | 2 | +6 | +6 | 対象ポート範囲の開始番号。 |
| portEnd | WORD | 2 | +8 | +8 | 対象ポート範囲の終了番号。 |
| tsPayloadId | WORD | 2 | +10 | +10 | トラフィックセレクタペイロードの識別子(WORD)。 |
| addrStart | VPN_TS_IP_ADDRESS | 24/20 | +16 | +12 | 対象アドレス範囲の開始IPアドレス。 |
| addrEnd | VPN_TS_IP_ADDRESS | 24/20 | +40 | +32 | 対象アドレス範囲の終了IPアドレス。 |
各言語での定義
#include <windows.h>
// VPN_TS_IP_ADDRESS (x64 24 / x86 20 バイト)
typedef struct VPN_TS_IP_ADDRESS {
WORD Type;
_Anonymous_e__Union Anonymous;
} VPN_TS_IP_ADDRESS;
// MPR_VPN_TRAFFIC_SELECTOR (x64 64 / x86 52 バイト)
typedef struct MPR_VPN_TRAFFIC_SELECTOR {
MPR_VPN_TS_TYPE type;
BYTE protocolId;
WORD portStart;
WORD portEnd;
WORD tsPayloadId;
VPN_TS_IP_ADDRESS addrStart;
VPN_TS_IP_ADDRESS addrEnd;
} MPR_VPN_TRAFFIC_SELECTOR;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct VPN_TS_IP_ADDRESS
{
public ushort Type;
public _Anonymous_e__Union Anonymous;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct MPR_VPN_TRAFFIC_SELECTOR
{
public int type;
public byte protocolId;
public ushort portStart;
public ushort portEnd;
public ushort tsPayloadId;
public VPN_TS_IP_ADDRESS addrStart;
public VPN_TS_IP_ADDRESS addrEnd;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure VPN_TS_IP_ADDRESS
Public Type As UShort
Public Anonymous As _Anonymous_e__Union
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure MPR_VPN_TRAFFIC_SELECTOR
Public type As Integer
Public protocolId As Byte
Public portStart As UShort
Public portEnd As UShort
Public tsPayloadId As UShort
Public addrStart As VPN_TS_IP_ADDRESS
Public addrEnd As VPN_TS_IP_ADDRESS
End Structureimport ctypes
from ctypes import wintypes
class VPN_TS_IP_ADDRESS(ctypes.Structure):
_fields_ = [
("Type", ctypes.c_ushort),
("Anonymous", _Anonymous_e__Union),
]
class MPR_VPN_TRAFFIC_SELECTOR(ctypes.Structure):
_fields_ = [
("type", ctypes.c_int),
("protocolId", ctypes.c_ubyte),
("portStart", ctypes.c_ushort),
("portEnd", ctypes.c_ushort),
("tsPayloadId", ctypes.c_ushort),
("addrStart", VPN_TS_IP_ADDRESS),
("addrEnd", VPN_TS_IP_ADDRESS),
]#[repr(C)]
pub struct VPN_TS_IP_ADDRESS {
pub Type: u16,
pub Anonymous: _Anonymous_e__Union,
}
#[repr(C)]
pub struct MPR_VPN_TRAFFIC_SELECTOR {
pub type: i32,
pub protocolId: u8,
pub portStart: u16,
pub portEnd: u16,
pub tsPayloadId: u16,
pub addrStart: VPN_TS_IP_ADDRESS,
pub addrEnd: VPN_TS_IP_ADDRESS,
}import "golang.org/x/sys/windows"
type VPN_TS_IP_ADDRESS struct {
Type uint16
Anonymous _Anonymous_e__Union
}
type MPR_VPN_TRAFFIC_SELECTOR struct {
type int32
protocolId byte
portStart uint16
portEnd uint16
tsPayloadId uint16
addrStart VPN_TS_IP_ADDRESS
addrEnd VPN_TS_IP_ADDRESS
}type
VPN_TS_IP_ADDRESS = record
Type: Word;
Anonymous: _Anonymous_e__Union;
end;
MPR_VPN_TRAFFIC_SELECTOR = record
type: Integer;
protocolId: Byte;
portStart: Word;
portEnd: Word;
tsPayloadId: Word;
addrStart: VPN_TS_IP_ADDRESS;
addrEnd: VPN_TS_IP_ADDRESS;
end;const VPN_TS_IP_ADDRESS = extern struct {
Type: u16,
Anonymous: _Anonymous_e__Union,
};
const MPR_VPN_TRAFFIC_SELECTOR = extern struct {
type: i32,
protocolId: u8,
portStart: u16,
portEnd: u16,
tsPayloadId: u16,
addrStart: VPN_TS_IP_ADDRESS,
addrEnd: VPN_TS_IP_ADDRESS,
};type
VPN_TS_IP_ADDRESS {.bycopy.} = object
Type: uint16
Anonymous: _Anonymous_e__Union
MPR_VPN_TRAFFIC_SELECTOR {.bycopy.} = object
type: int32
protocolId: uint8
portStart: uint16
portEnd: uint16
tsPayloadId: uint16
addrStart: VPN_TS_IP_ADDRESS
addrEnd: VPN_TS_IP_ADDRESSstruct VPN_TS_IP_ADDRESS
{
ushort Type;
_Anonymous_e__Union Anonymous;
}
struct MPR_VPN_TRAFFIC_SELECTOR
{
int type;
ubyte protocolId;
ushort portStart;
ushort portEnd;
ushort tsPayloadId;
VPN_TS_IP_ADDRESS addrStart;
VPN_TS_IP_ADDRESS addrEnd;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; MPR_VPN_TRAFFIC_SELECTOR サイズ: 52 バイト(x86)
dim st, 13 ; 4byte整数×13(構造体サイズ 52 / 4 切り上げ)
; type : MPR_VPN_TS_TYPE (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; protocolId : BYTE (+4, 1byte) poke st,4,値 / 値 = peek(st,4)
; portStart : WORD (+6, 2byte) wpoke st,6,値 / 値 = wpeek(st,6)
; portEnd : WORD (+8, 2byte) wpoke st,8,値 / 値 = wpeek(st,8)
; tsPayloadId : WORD (+10, 2byte) wpoke st,10,値 / 値 = wpeek(st,10)
; addrStart : VPN_TS_IP_ADDRESS (+12, 20byte) varptr(st)+12 を基点に操作(20byte:入れ子/配列)
; addrEnd : VPN_TS_IP_ADDRESS (+32, 20byte) varptr(st)+32 を基点に操作(20byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; MPR_VPN_TRAFFIC_SELECTOR サイズ: 64 バイト(x64)
dim st, 16 ; 4byte整数×16(構造体サイズ 64 / 4 切り上げ)
; type : MPR_VPN_TS_TYPE (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; protocolId : BYTE (+4, 1byte) poke st,4,値 / 値 = peek(st,4)
; portStart : WORD (+6, 2byte) wpoke st,6,値 / 値 = wpeek(st,6)
; portEnd : WORD (+8, 2byte) wpoke st,8,値 / 値 = wpeek(st,8)
; tsPayloadId : WORD (+10, 2byte) wpoke st,10,値 / 値 = wpeek(st,10)
; addrStart : VPN_TS_IP_ADDRESS (+16, 24byte) varptr(st)+16 を基点に操作(24byte:入れ子/配列)
; addrEnd : VPN_TS_IP_ADDRESS (+40, 24byte) varptr(st)+40 を基点に操作(24byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global VPN_TS_IP_ADDRESS
#field short Type
#field byte Anonymous 16
#endstruct
#defstruct global MPR_VPN_TRAFFIC_SELECTOR
#field int type
#field byte protocolId
#field short portStart
#field short portEnd
#field short tsPayloadId
#field VPN_TS_IP_ADDRESS addrStart
#field VPN_TS_IP_ADDRESS addrEnd
#endstruct
stdim st, MPR_VPN_TRAFFIC_SELECTOR ; NSTRUCT 変数を確保
st->type = 100
mes "type=" + st->type