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

MIB_IPFORWARDROW

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

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

フィールド

フィールドサイズx64x86説明
dwForwardDestDWORD4+0+0経路の宛先IPv4ネットワークアドレスを保持する。
dwForwardMaskDWORD4+4+4宛先ネットワークのサブネットマスクを保持する。
dwForwardPolicyDWORD4+8+8経路選択に影響するToS等の転送ポリシー値を保持する。
dwForwardNextHopDWORD4+12+12次ホップのIPv4アドレスを保持する。
dwForwardIfIndexDWORD4+16+16この経路で使用する送出インターフェースのインデックスを示す。
Anonymous1_Anonymous1_e__Union4+20+20経路の種別(直接/間接/無効等)を保持する無名共用体。
Anonymous2_Anonymous2_e__Union4+24+24経路を登録したプロトコル種別を保持する無名共用体。
dwForwardAgeDWORD4+28+28経路が更新されてからの経過秒数を示す。
dwForwardNextHopASDWORD4+32+32次ホップの自律システム(AS)番号を示す。
dwForwardMetric1DWORD4+36+36経路メトリック1。プロトコル依存のコスト値を保持する。
dwForwardMetric2DWORD4+40+40経路メトリック2。プロトコル依存のコスト値を保持する。
dwForwardMetric3DWORD4+44+44経路メトリック3。プロトコル依存のコスト値を保持する。
dwForwardMetric4DWORD4+48+48経路メトリック4。プロトコル依存のコスト値を保持する。
dwForwardMetric5DWORD4+52+52経路メトリック5。プロトコル依存のコスト値を保持する。

共用体: _Anonymous1_e__Union x64 4B / x86 4B

フィールドサイズx64x86
dwForwardTypeDWORD4+0+0
ForwardTypeMIB_IPFORWARD_TYPE4+0+0

共用体: _Anonymous2_e__Union x64 4B / x86 4B

フィールドサイズx64x86
dwForwardProtoDWORD4+0+0
ForwardProtoNL_ROUTE_PROTOCOL4+0+0

各言語での定義

#include <windows.h>

// MIB_IPFORWARDROW  (x64 56 / x86 56 バイト)
typedef struct MIB_IPFORWARDROW {
    DWORD dwForwardDest;
    DWORD dwForwardMask;
    DWORD dwForwardPolicy;
    DWORD dwForwardNextHop;
    DWORD dwForwardIfIndex;
    _Anonymous1_e__Union Anonymous1;
    _Anonymous2_e__Union Anonymous2;
    DWORD dwForwardAge;
    DWORD dwForwardNextHopAS;
    DWORD dwForwardMetric1;
    DWORD dwForwardMetric2;
    DWORD dwForwardMetric3;
    DWORD dwForwardMetric4;
    DWORD dwForwardMetric5;
} MIB_IPFORWARDROW;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct MIB_IPFORWARDROW
{
    public uint dwForwardDest;
    public uint dwForwardMask;
    public uint dwForwardPolicy;
    public uint dwForwardNextHop;
    public uint dwForwardIfIndex;
    public _Anonymous1_e__Union Anonymous1;
    public _Anonymous2_e__Union Anonymous2;
    public uint dwForwardAge;
    public uint dwForwardNextHopAS;
    public uint dwForwardMetric1;
    public uint dwForwardMetric2;
    public uint dwForwardMetric3;
    public uint dwForwardMetric4;
    public uint dwForwardMetric5;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure MIB_IPFORWARDROW
    Public dwForwardDest As UInteger
    Public dwForwardMask As UInteger
    Public dwForwardPolicy As UInteger
    Public dwForwardNextHop As UInteger
    Public dwForwardIfIndex As UInteger
    Public Anonymous1 As _Anonymous1_e__Union
    Public Anonymous2 As _Anonymous2_e__Union
    Public dwForwardAge As UInteger
    Public dwForwardNextHopAS As UInteger
    Public dwForwardMetric1 As UInteger
    Public dwForwardMetric2 As UInteger
    Public dwForwardMetric3 As UInteger
    Public dwForwardMetric4 As UInteger
    Public dwForwardMetric5 As UInteger
End Structure
import ctypes
from ctypes import wintypes

class MIB_IPFORWARDROW(ctypes.Structure):
    _fields_ = [
        ("dwForwardDest", wintypes.DWORD),
        ("dwForwardMask", wintypes.DWORD),
        ("dwForwardPolicy", wintypes.DWORD),
        ("dwForwardNextHop", wintypes.DWORD),
        ("dwForwardIfIndex", wintypes.DWORD),
        ("Anonymous1", _Anonymous1_e__Union),
        ("Anonymous2", _Anonymous2_e__Union),
        ("dwForwardAge", wintypes.DWORD),
        ("dwForwardNextHopAS", wintypes.DWORD),
        ("dwForwardMetric1", wintypes.DWORD),
        ("dwForwardMetric2", wintypes.DWORD),
        ("dwForwardMetric3", wintypes.DWORD),
        ("dwForwardMetric4", wintypes.DWORD),
        ("dwForwardMetric5", wintypes.DWORD),
    ]
#[repr(C)]
pub struct MIB_IPFORWARDROW {
    pub dwForwardDest: u32,
    pub dwForwardMask: u32,
    pub dwForwardPolicy: u32,
    pub dwForwardNextHop: u32,
    pub dwForwardIfIndex: u32,
    pub Anonymous1: _Anonymous1_e__Union,
    pub Anonymous2: _Anonymous2_e__Union,
    pub dwForwardAge: u32,
    pub dwForwardNextHopAS: u32,
    pub dwForwardMetric1: u32,
    pub dwForwardMetric2: u32,
    pub dwForwardMetric3: u32,
    pub dwForwardMetric4: u32,
    pub dwForwardMetric5: u32,
}
import "golang.org/x/sys/windows"

type MIB_IPFORWARDROW struct {
	dwForwardDest uint32
	dwForwardMask uint32
	dwForwardPolicy uint32
	dwForwardNextHop uint32
	dwForwardIfIndex uint32
	Anonymous1 _Anonymous1_e__Union
	Anonymous2 _Anonymous2_e__Union
	dwForwardAge uint32
	dwForwardNextHopAS uint32
	dwForwardMetric1 uint32
	dwForwardMetric2 uint32
	dwForwardMetric3 uint32
	dwForwardMetric4 uint32
	dwForwardMetric5 uint32
}
type
  MIB_IPFORWARDROW = record
    dwForwardDest: DWORD;
    dwForwardMask: DWORD;
    dwForwardPolicy: DWORD;
    dwForwardNextHop: DWORD;
    dwForwardIfIndex: DWORD;
    Anonymous1: _Anonymous1_e__Union;
    Anonymous2: _Anonymous2_e__Union;
    dwForwardAge: DWORD;
    dwForwardNextHopAS: DWORD;
    dwForwardMetric1: DWORD;
    dwForwardMetric2: DWORD;
    dwForwardMetric3: DWORD;
    dwForwardMetric4: DWORD;
    dwForwardMetric5: DWORD;
  end;
const MIB_IPFORWARDROW = extern struct {
    dwForwardDest: u32,
    dwForwardMask: u32,
    dwForwardPolicy: u32,
    dwForwardNextHop: u32,
    dwForwardIfIndex: u32,
    Anonymous1: _Anonymous1_e__Union,
    Anonymous2: _Anonymous2_e__Union,
    dwForwardAge: u32,
    dwForwardNextHopAS: u32,
    dwForwardMetric1: u32,
    dwForwardMetric2: u32,
    dwForwardMetric3: u32,
    dwForwardMetric4: u32,
    dwForwardMetric5: u32,
};
type
  MIB_IPFORWARDROW {.bycopy.} = object
    dwForwardDest: uint32
    dwForwardMask: uint32
    dwForwardPolicy: uint32
    dwForwardNextHop: uint32
    dwForwardIfIndex: uint32
    Anonymous1: _Anonymous1_e__Union
    Anonymous2: _Anonymous2_e__Union
    dwForwardAge: uint32
    dwForwardNextHopAS: uint32
    dwForwardMetric1: uint32
    dwForwardMetric2: uint32
    dwForwardMetric3: uint32
    dwForwardMetric4: uint32
    dwForwardMetric5: uint32
struct MIB_IPFORWARDROW
{
    uint dwForwardDest;
    uint dwForwardMask;
    uint dwForwardPolicy;
    uint dwForwardNextHop;
    uint dwForwardIfIndex;
    _Anonymous1_e__Union Anonymous1;
    _Anonymous2_e__Union Anonymous2;
    uint dwForwardAge;
    uint dwForwardNextHopAS;
    uint dwForwardMetric1;
    uint dwForwardMetric2;
    uint dwForwardMetric3;
    uint dwForwardMetric4;
    uint dwForwardMetric5;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; MIB_IPFORWARDROW サイズ: 56 バイト(x64)
dim st, 14    ; 4byte整数×14(構造体サイズ 56 / 4 切り上げ)
; dwForwardDest : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; dwForwardMask : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; dwForwardPolicy : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; dwForwardNextHop : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; dwForwardIfIndex : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; Anonymous1 : _Anonymous1_e__Union (+20, 4byte)  varptr(st)+20 を基点に操作(4byte:入れ子/配列)
; Anonymous2 : _Anonymous2_e__Union (+24, 4byte)  varptr(st)+24 を基点に操作(4byte:入れ子/配列)
; dwForwardAge : DWORD (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; dwForwardNextHopAS : DWORD (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; dwForwardMetric1 : DWORD (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; dwForwardMetric2 : DWORD (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; dwForwardMetric3 : DWORD (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; dwForwardMetric4 : DWORD (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; dwForwardMetric5 : DWORD (+52, 4byte)  st.13 = 値  /  値 = st.13   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global MIB_IPFORWARDROW
    #field int dwForwardDest
    #field int dwForwardMask
    #field int dwForwardPolicy
    #field int dwForwardNextHop
    #field int dwForwardIfIndex
    #field byte Anonymous1 4
    #field byte Anonymous2 4
    #field int dwForwardAge
    #field int dwForwardNextHopAS
    #field int dwForwardMetric1
    #field int dwForwardMetric2
    #field int dwForwardMetric3
    #field int dwForwardMetric4
    #field int dwForwardMetric5
#endstruct

stdim st, MIB_IPFORWARDROW        ; NSTRUCT 変数を確保
st->dwForwardDest = 100
mes "dwForwardDest=" + st->dwForwardDest
; ※union フィールドは byte 列で確保(NSTRUCT は union 非対応)。必要に応じ手動でアクセス。