ホーム › NetworkManagement.IpHelper › MIB_IPDESTTABLE
MIB_IPDESTTABLE
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| dwNumEntries | DWORD | 4 | +0 | +0 | table配列に格納された宛先ルートエントリの数を示す。 |
| table | MIB_IPDESTROW | 64 | +4 | +4 | 宛先ルート行(MIB_IPDESTROW)の可変長配列である。 |
各言語での定義
#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;
// MIB_IPDESTROW (x64 64 / x86 64 バイト)
typedef struct MIB_IPDESTROW {
MIB_IPFORWARDROW ForwardRow;
DWORD dwForwardPreference;
DWORD dwForwardViewSet;
} MIB_IPDESTROW;
// MIB_IPDESTTABLE (x64 68 / x86 68 バイト)
typedef struct MIB_IPDESTTABLE {
DWORD dwNumEntries;
MIB_IPDESTROW table[1];
} MIB_IPDESTTABLE;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;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct MIB_IPDESTROW
{
public MIB_IPFORWARDROW ForwardRow;
public uint dwForwardPreference;
public uint dwForwardViewSet;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct MIB_IPDESTTABLE
{
public uint dwNumEntries;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 1)] public MIB_IPDESTROW[] table;
}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
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure MIB_IPDESTROW
Public ForwardRow As MIB_IPFORWARDROW
Public dwForwardPreference As UInteger
Public dwForwardViewSet As UInteger
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure MIB_IPDESTTABLE
Public dwNumEntries As UInteger
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=1)> Public table() As MIB_IPDESTROW
End Structureimport 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),
]
class MIB_IPDESTROW(ctypes.Structure):
_fields_ = [
("ForwardRow", MIB_IPFORWARDROW),
("dwForwardPreference", wintypes.DWORD),
("dwForwardViewSet", wintypes.DWORD),
]
class MIB_IPDESTTABLE(ctypes.Structure):
_fields_ = [
("dwNumEntries", wintypes.DWORD),
("table", MIB_IPDESTROW * 1),
]#[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,
}
#[repr(C)]
pub struct MIB_IPDESTROW {
pub ForwardRow: MIB_IPFORWARDROW,
pub dwForwardPreference: u32,
pub dwForwardViewSet: u32,
}
#[repr(C)]
pub struct MIB_IPDESTTABLE {
pub dwNumEntries: u32,
pub table: [MIB_IPDESTROW; 1],
}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_IPDESTROW struct {
ForwardRow MIB_IPFORWARDROW
dwForwardPreference uint32
dwForwardViewSet uint32
}
type MIB_IPDESTTABLE struct {
dwNumEntries uint32
table [1]MIB_IPDESTROW
}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;
MIB_IPDESTROW = record
ForwardRow: MIB_IPFORWARDROW;
dwForwardPreference: DWORD;
dwForwardViewSet: DWORD;
end;
MIB_IPDESTTABLE = record
dwNumEntries: DWORD;
table: array[0..0] of MIB_IPDESTROW;
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,
};
const MIB_IPDESTROW = extern struct {
ForwardRow: MIB_IPFORWARDROW,
dwForwardPreference: u32,
dwForwardViewSet: u32,
};
const MIB_IPDESTTABLE = extern struct {
dwNumEntries: u32,
table: [1]MIB_IPDESTROW,
};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
MIB_IPDESTROW {.bycopy.} = object
ForwardRow: MIB_IPFORWARDROW
dwForwardPreference: uint32
dwForwardViewSet: uint32
MIB_IPDESTTABLE {.bycopy.} = object
dwNumEntries: uint32
table: array[1, MIB_IPDESTROW]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;
}
struct MIB_IPDESTROW
{
MIB_IPFORWARDROW ForwardRow;
uint dwForwardPreference;
uint dwForwardViewSet;
}
struct MIB_IPDESTTABLE
{
uint dwNumEntries;
MIB_IPDESTROW[1] table;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; MIB_IPDESTTABLE サイズ: 68 バイト(x64)
dim st, 17 ; 4byte整数×17(構造体サイズ 68 / 4 切り上げ)
; dwNumEntries : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; table : MIB_IPDESTROW (+4, 64byte) varptr(st)+4 を基点に操作(64byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#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
#defstruct global MIB_IPDESTROW
#field MIB_IPFORWARDROW ForwardRow
#field int dwForwardPreference
#field int dwForwardViewSet
#endstruct
#defstruct global MIB_IPDESTTABLE
#field int dwNumEntries
#field MIB_IPDESTROW table 1
#endstruct
stdim st, MIB_IPDESTTABLE ; NSTRUCT 変数を確保
st->dwNumEntries = 100
mes "dwNumEntries=" + st->dwNumEntries