MIB_IPFORWARDROW
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| dwForwardDest | DWORD | 4 | +0 | +0 | ルートの宛先 IPv4 アドレスです。IPv4 アドレスが 0.0.0.0 のエントリは、既定のルートと見なされます。 このメンバーにマルチキャスト (クラス D) の IPv4 アドレスを設定することはできません。 |
| dwForwardMask | DWORD | 4 | +4 | +4 | 宛先 IPv4 アドレスを dwForwardDest メンバーの値と比較する前に、その宛先 IPv4 アドレスに対して使用する IPv4 サブネット マスクです。 dwForwardMask の値は、dwForwardDest メンバーの値と比較する前に、宛先 IPv4 アドレスへ適用 (論理 AND 演算) する必要があります。 |
| dwForwardPolicy | DWORD | 4 | +8 | +8 | マルチパス ルート (指定された宛先に対するネクスト ホップの集合) の選択を引き起こす条件の集合です。このメンバーは通常 IP TOS 形式です。このメンバーのエンコードは RFC 1354 で説明されています。詳細については、 http://www.ietf.org/rfc/rfc1354.txt を参照してください。 |
| dwForwardNextHop | DWORD | 4 | +12 | +12 | リモート ルートの場合は、経路上の次のシステムの IPv4 アドレスです。それ以外の場合、このメンバーは IPv4 アドレス 0.0.0.0 でなければなりません。 |
| dwForwardIfIndex | DWORD | 4 | +16 | +16 | このルートのネクスト ホップに到達するために使用する、ローカル インターフェイスのインデックスです。 |
| Anonymous1 | _Anonymous1_e__Union | 4 | +20 | +20 | 経路の種別(直接/間接/無効等)を保持する無名共用体。 |
| Anonymous2 | _Anonymous2_e__Union | 4 | +24 | +24 | 経路を登録したプロトコル種別を保持する無名共用体。 |
| dwForwardAge | DWORD | 4 | +28 | +28 | ネットワーク ルーティング テーブルにこのルートが追加または変更されてから経過した秒数です。 |
| dwForwardNextHopAS | DWORD | 4 | +32 | +32 | ネクスト ホップの自律システム番号です。このメンバーが不明の場合、または dwForwardProto で指定されたプロトコルやルーティング機構に関係しない場合、この値は 0 に設定します。この値は RFC 1354 で規定されています。詳細については、http://www.ietf.org/rfc/rfc1354.txt を参照してください |
| dwForwardMetric1 | DWORD | 4 | +36 | +36 | このルートの主要なルーティング メトリック値です。このメトリックの意味は、dwForwardProto メンバーで指定されたルーティング プロトコルによって決まります。このメトリックを使用しない場合、その値は -1 に設定します。この値は RFC 1354 で規定されています。詳細については、http://www.ietf.org/rfc/rfc1354.txt を参照してください |
| dwForwardMetric2 | DWORD | 4 | +40 | +40 | このルートの代替のルーティング メトリック値です。このメトリックの意味は、dwForwardProto メンバーで指定されたルーティング プロトコルによって決まります。このメトリックを使用しない場合、その値は -1 に設定します。この値は RFC 1354 で規定されています。詳細については、http://www.ietf.org/rfc/rfc1354.txt を参照してください |
| dwForwardMetric3 | DWORD | 4 | +44 | +44 | このルートの代替のルーティング メトリック値です。このメトリックの意味は、dwForwardProto メンバーで指定されたルーティング プロトコルによって決まります。このメトリックを使用しない場合、その値は -1 に設定します。この値は RFC 1354 で規定されています。詳細については、http://www.ietf.org/rfc/rfc1354.txt を参照してください |
| dwForwardMetric4 | DWORD | 4 | +48 | +48 | このルートの代替のルーティング メトリック値です。このメトリックの意味は、dwForwardProto メンバーで指定されたルーティング プロトコルによって決まります。このメトリックを使用しない場合、その値は -1 に設定します。この値は RFC 1354 で規定されています。詳細については、http://www.ietf.org/rfc/rfc1354.txt を参照してください |
| dwForwardMetric5 | DWORD | 4 | +52 | +52 | このルートの代替のルーティング メトリック値です。このメトリックの意味は、dwForwardProto メンバーで指定されたルーティング プロトコルによって決まります。このメトリックを使用しない場合、その値は -1 に設定します。この値は RFC 1354 で規定されています。詳細については、http://www.ietf.org/rfc/rfc1354.txt を参照してください |
共用体: _Anonymous1_e__Union x64 4B / x86 4B
| フィールド | 型 | サイズ | x64 | x86 | 説明 | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| dwForwardType | DWORD | 4 | +0 | +0 | RFC 1354 で説明されているルートの種類です。詳細については、http://www.ietf.org/rfc/rfc1354.txt を参照してください。 このメンバーには、Iprtmib.h ヘッダー ファイルで定義されている値のいずれかを指定できます。 Windows Vista 以降ではヘッダー ファイルが再編成されており、このメンバーには Ipmib.h ヘッダー ファイルで定義されている MIB_IPFORWARD_TYPE 列挙型の値のいずれかを指定できます。Ipmib.h ヘッダーは Iprtrmib.h ヘッダー ファイルによって自動的にインクルードされ、さらにそのヘッダー ファイルは Iphlpapi.h ヘッダーによって自動的にインクルードされる点に注意してください。Iprtrmib.h および Ipmib.h ヘッダー ファイルを直接使用しないでください。 次の一覧は、このメンバーに指定できる値を示します。
| ||||||||||
| ForwardType | MIB_IPFORWARD_TYPE | 4 | +0 | +0 |
共用体: _Anonymous2_e__Union x64 4B / x86 4B
| フィールド | 型 | サイズ | x64 | x86 | 説明 | ||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| dwForwardProto | DWORD | 4 | +0 | +0 | RFC 1354 で説明されている、このルートを生成したプロトコルまたはルーティング機構です。詳細については、http://www.ietf.org/rfc/rfc1354.txt を参照してください。ルーティング プロトコルで使用されるプロトコル識別子の一覧については、 Protocol Identifiers を参照してください。 このメンバーには、Iprtmib.h ヘッダー ファイルで定義されている値のいずれかを指定できます。このメンバーの値には、Iprtmib.h ヘッダー ファイルで定義されている MIB_IPPROTO_xxx 値、または routprot.h ヘッダー ファイルで定義されている PROTO_IP_xxx 値のいずれかを指定できます。これらの値は同一です。 Windows Vista 以降ではヘッダー ファイルが再編成されており、このメンバーには Nldef.h ヘッダー ファイルで定義されている値のいずれかを指定できます。Nldef.h ヘッダーは Ipmib.h ヘッダー ファイルによって自動的にインクルードされ、さらにそのヘッダー ファイルは Iprtrmib.h ヘッダーによって自動的にインクルードされる点に注意してください。Iphlpapi.h ヘッダーは Iprtrmib.h ヘッダー ファイルを自動的にインクルードします。Iprtrmib.h、Ipmib.h、Nldef.h の各ヘッダー ファイルを直接使用しないでください。 次の一覧は、このメンバーに指定できる値を示します。
| ||||||||||||||||||||||||||||||||||||
| ForwardProto | NL_ROUTE_PROTOCOL | 4 | +0 | +0 |
公式ドキュメント
MIB_IPFORWARDROW 構造体は、IPv4 ネットワーク ルートを記述する情報を格納します。
解説(Remarks)
GetIpForwardTable 関数は、ローカル システム上の IPv4 ルート エントリを列挙し、MIB_IPFORWARDROW 構造体エントリの配列を含む MIB_IPFORWARDTABLE 構造体としてその情報を返します。
MIB_IPFORWARDROW 構造体の dwForwardDest、dwForwardMask、dwForwardNextHop の各メンバーは、ネットワーク バイト オーダーの IPv4 アドレスを表します。
MIB_IPFORWARDROW 構造体の dwForwardProto メンバーは、このルートを生成したプロトコルまたはルーティング機構を指定します。ルーティング プロトコル識別子は、指定されたルーティング プロトコルのルート情報を識別するために使用されます。たとえば MIB_IPPROTO_NETMGMT は、動的ホスト構成プロトコル (DHCP) や簡易ネットワーク管理プロトコル (SNMP) などのネットワーク管理を通じて設定された IP ルーティング、あるいは CreateIpForwardEntry、DeleteIpForwardEntry 、SetIpForwardEntry の各関数の呼び出しによって設定された IP ルーティングのルート情報を識別するために使用されます。指定できるプロトコルおよびルーティング機構の一覧については、 Protocol Identifiers を参照してください。
MIB_IPFORWARDROW 構造体の dwForwardDest メンバーが IPv4 アドレス 0.0.0.0 の場合、そのエントリは既定のルートと見なされます。複数のネットワーク アダプターがインストールされている場合、MIB_IPFORWARDTABLE には dwForwardDest メンバーが 0.0.0.0 に設定された MIB_IPFORWARDROW エントリが複数含まれることがあります。
dwForwardAge に INFINITE が設定されている場合、そのルートはタイムアウト値に基づいて削除されることはありません。
dwForwardAge にそれ以外の値が設定されている場合は、ネットワーク ルーティング テーブルにこのルートが追加または変更されてから経過した秒数を示します。
Windows Server 2003 または Windows 2000 Server でルーティングとリモート アクセス サービス (RRAS) が実行されている場合、返される MIB_IPFORWARDROW エントリの dwForwardType メンバーと dwForwardAge メンバーは 0 に設定されます。
Windows Vista および Windows Server 2008 では、MIB_IPFORWARDROW 構造体の dwForwardMetric1 メンバーで指定されるルート メトリックは、ルート メトリックに、対応するインターフェイスの MIB_IPINTERFACE_ROW 構造体の Metric メンバーで指定されるインターフェイス メトリックを加算した値を表します。したがって、MIB_IPFORWARDROW 構造体の dwForwardMetric1 メンバーは、対応する MIB_IPINTERFACE_ROW 構造体の Metric メンバー以上の値になります。アプリケーションでルート メトリックを 0 に設定したい場合は、MIB_IPFORWARDROW 構造体の dwForwardMetric1 メンバーに、対応する MIB_IPINTERFACE_ROW 構造体の Metric メンバーで指定されているインターフェイス メトリックと同じ値を設定します。アプリケーションは GetIpInterfaceEntry 関数を呼び出すことで、インターフェイス メトリックを取得できます。
MIB_IPFORWARDROW 構造体の一部のメンバーは、現在の IPv4 ルーティングでは使用されていません。これらのメンバーには、dwForwardPolicy、dwForwardNextHopAS、dwForwardMetric2、dwForwardMetric3、dwForwardMetric4、dwForwardMetric5 が含まれます。
Windows Vista 以降向けにリリースされた Microsoft Windows Software Development Kit (SDK) では、ヘッダー ファイルの構成が変更されています。この構造体は Iprtrmib.h ヘッダー ファイルではなく、Ipmib.h ヘッダー ファイルで定義されています。Ipmib.h ヘッダー ファイルは Iprtrmib.h に自動的にインクルードされ、さらにそれは Iphlpapi.h ヘッダー ファイルに自動的にインクルードされる点に注意してください。Ipmib.h および Iprtrmib.h ヘッダー ファイルを直接使用しないでください。
例
MIB_IPFORWARDTABLE 構造体を取得し、そのテーブル内の MIB_IPFORWARDROW 構造体エントリを出力する例については、GetIpForwardTable 関数を参照してください。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での定義
#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 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),
]#[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: uint32struct 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 非対応)。必要に応じ手動でアクセス。