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

MPR_VPN_TRAFFIC_SELECTOR

構造体
サイズx64: 64 バイト / x86: 52 バイト

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

フィールド

フィールドサイズx64x86説明
typeMPR_VPN_TS_TYPE4+0+0トラフィックセレクタの種別を表すMPR_VPN_TS_TYPE列挙値。
protocolIdBYTE1+4+4対象とするIPプロトコル番号(0は全プロトコル)。
portStartWORD2+6+6対象ポート範囲の開始番号。
portEndWORD2+8+8対象ポート範囲の終了番号。
tsPayloadIdWORD2+10+10トラフィックセレクタペイロードの識別子(WORD)。
addrStartVPN_TS_IP_ADDRESS24/20+16+12対象アドレス範囲の開始IPアドレス。
addrEndVPN_TS_IP_ADDRESS24/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 Structure
import 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_ADDRESS
struct 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