ホーム › NetworkManagement.IpHelper › MIB_IPMCAST_MFE
MIB_IPMCAST_MFE
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| dwGroup | DWORD | 4 | +0 | +0 | マルチキャストグループのIPv4アドレスを保持する。 |
| dwSource | DWORD | 4 | +4 | +4 | マルチキャスト送信元のIPv4アドレスを保持する。 |
| dwSrcMask | DWORD | 4 | +8 | +8 | 送信元アドレスのサブネットマスクを保持する。 |
| dwUpStrmNgbr | DWORD | 4 | +12 | +12 | 上流隣接ルータのIPv4アドレスを保持する。 |
| dwInIfIndex | DWORD | 4 | +16 | +16 | 受信(入力)インターフェースのインデックスを示す。 |
| dwInIfProtocol | DWORD | 4 | +20 | +20 | 入力インターフェースで動作するルーティングプロトコルを示す。 |
| dwRouteProtocol | DWORD | 4 | +24 | +24 | 経路を登録したルーティングプロトコルを示す。 |
| dwRouteNetwork | DWORD | 4 | +28 | +28 | 送信元への経路のネットワークアドレスを保持する。 |
| dwRouteMask | DWORD | 4 | +32 | +32 | 送信元への経路のサブネットマスクを保持する。 |
| ulUpTime | DWORD | 4 | +36 | +36 | このMFEエントリが存在してからの経過秒数を示す。 |
| ulExpiryTime | DWORD | 4 | +40 | +40 | エントリが期限切れになるまでの残り秒数を示す。 |
| ulTimeOut | DWORD | 4 | +44 | +44 | エントリのタイムアウト秒数を示す。 |
| ulNumOutIf | DWORD | 4 | +48 | +48 | rgmioOutInfoに格納された送出インターフェース数を示す。 |
| fFlags | DWORD | 4 | +52 | +52 | MFEエントリの状態を示すフラグ値を保持する。 |
| dwReserved | DWORD | 4 | +56 | +56 | 予約フィールド。使用されない。 |
| rgmioOutInfo | MIB_IPMCAST_OIF_XP | 16 | +60 | +60 | 送出インターフェース情報を格納する可変長配列の先頭。 |
各言語での定義
#include <windows.h>
// MIB_IPMCAST_OIF_XP (x64 16 / x86 16 バイト)
typedef struct MIB_IPMCAST_OIF_XP {
DWORD dwOutIfIndex;
DWORD dwNextHopAddr;
DWORD dwReserved;
DWORD dwReserved1;
} MIB_IPMCAST_OIF_XP;
// MIB_IPMCAST_MFE (x64 76 / x86 76 バイト)
typedef struct MIB_IPMCAST_MFE {
DWORD dwGroup;
DWORD dwSource;
DWORD dwSrcMask;
DWORD dwUpStrmNgbr;
DWORD dwInIfIndex;
DWORD dwInIfProtocol;
DWORD dwRouteProtocol;
DWORD dwRouteNetwork;
DWORD dwRouteMask;
DWORD ulUpTime;
DWORD ulExpiryTime;
DWORD ulTimeOut;
DWORD ulNumOutIf;
DWORD fFlags;
DWORD dwReserved;
MIB_IPMCAST_OIF_XP rgmioOutInfo[1];
} MIB_IPMCAST_MFE;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct MIB_IPMCAST_OIF_XP
{
public uint dwOutIfIndex;
public uint dwNextHopAddr;
public uint dwReserved;
public uint dwReserved1;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct MIB_IPMCAST_MFE
{
public uint dwGroup;
public uint dwSource;
public uint dwSrcMask;
public uint dwUpStrmNgbr;
public uint dwInIfIndex;
public uint dwInIfProtocol;
public uint dwRouteProtocol;
public uint dwRouteNetwork;
public uint dwRouteMask;
public uint ulUpTime;
public uint ulExpiryTime;
public uint ulTimeOut;
public uint ulNumOutIf;
public uint fFlags;
public uint dwReserved;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 1)] public MIB_IPMCAST_OIF_XP[] rgmioOutInfo;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure MIB_IPMCAST_OIF_XP
Public dwOutIfIndex As UInteger
Public dwNextHopAddr As UInteger
Public dwReserved As UInteger
Public dwReserved1 As UInteger
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure MIB_IPMCAST_MFE
Public dwGroup As UInteger
Public dwSource As UInteger
Public dwSrcMask As UInteger
Public dwUpStrmNgbr As UInteger
Public dwInIfIndex As UInteger
Public dwInIfProtocol As UInteger
Public dwRouteProtocol As UInteger
Public dwRouteNetwork As UInteger
Public dwRouteMask As UInteger
Public ulUpTime As UInteger
Public ulExpiryTime As UInteger
Public ulTimeOut As UInteger
Public ulNumOutIf As UInteger
Public fFlags As UInteger
Public dwReserved As UInteger
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=1)> Public rgmioOutInfo() As MIB_IPMCAST_OIF_XP
End Structureimport ctypes
from ctypes import wintypes
class MIB_IPMCAST_OIF_XP(ctypes.Structure):
_fields_ = [
("dwOutIfIndex", wintypes.DWORD),
("dwNextHopAddr", wintypes.DWORD),
("dwReserved", wintypes.DWORD),
("dwReserved1", wintypes.DWORD),
]
class MIB_IPMCAST_MFE(ctypes.Structure):
_fields_ = [
("dwGroup", wintypes.DWORD),
("dwSource", wintypes.DWORD),
("dwSrcMask", wintypes.DWORD),
("dwUpStrmNgbr", wintypes.DWORD),
("dwInIfIndex", wintypes.DWORD),
("dwInIfProtocol", wintypes.DWORD),
("dwRouteProtocol", wintypes.DWORD),
("dwRouteNetwork", wintypes.DWORD),
("dwRouteMask", wintypes.DWORD),
("ulUpTime", wintypes.DWORD),
("ulExpiryTime", wintypes.DWORD),
("ulTimeOut", wintypes.DWORD),
("ulNumOutIf", wintypes.DWORD),
("fFlags", wintypes.DWORD),
("dwReserved", wintypes.DWORD),
("rgmioOutInfo", MIB_IPMCAST_OIF_XP * 1),
]#[repr(C)]
pub struct MIB_IPMCAST_OIF_XP {
pub dwOutIfIndex: u32,
pub dwNextHopAddr: u32,
pub dwReserved: u32,
pub dwReserved1: u32,
}
#[repr(C)]
pub struct MIB_IPMCAST_MFE {
pub dwGroup: u32,
pub dwSource: u32,
pub dwSrcMask: u32,
pub dwUpStrmNgbr: u32,
pub dwInIfIndex: u32,
pub dwInIfProtocol: u32,
pub dwRouteProtocol: u32,
pub dwRouteNetwork: u32,
pub dwRouteMask: u32,
pub ulUpTime: u32,
pub ulExpiryTime: u32,
pub ulTimeOut: u32,
pub ulNumOutIf: u32,
pub fFlags: u32,
pub dwReserved: u32,
pub rgmioOutInfo: [MIB_IPMCAST_OIF_XP; 1],
}import "golang.org/x/sys/windows"
type MIB_IPMCAST_OIF_XP struct {
dwOutIfIndex uint32
dwNextHopAddr uint32
dwReserved uint32
dwReserved1 uint32
}
type MIB_IPMCAST_MFE struct {
dwGroup uint32
dwSource uint32
dwSrcMask uint32
dwUpStrmNgbr uint32
dwInIfIndex uint32
dwInIfProtocol uint32
dwRouteProtocol uint32
dwRouteNetwork uint32
dwRouteMask uint32
ulUpTime uint32
ulExpiryTime uint32
ulTimeOut uint32
ulNumOutIf uint32
fFlags uint32
dwReserved uint32
rgmioOutInfo [1]MIB_IPMCAST_OIF_XP
}type
MIB_IPMCAST_OIF_XP = record
dwOutIfIndex: DWORD;
dwNextHopAddr: DWORD;
dwReserved: DWORD;
dwReserved1: DWORD;
end;
MIB_IPMCAST_MFE = record
dwGroup: DWORD;
dwSource: DWORD;
dwSrcMask: DWORD;
dwUpStrmNgbr: DWORD;
dwInIfIndex: DWORD;
dwInIfProtocol: DWORD;
dwRouteProtocol: DWORD;
dwRouteNetwork: DWORD;
dwRouteMask: DWORD;
ulUpTime: DWORD;
ulExpiryTime: DWORD;
ulTimeOut: DWORD;
ulNumOutIf: DWORD;
fFlags: DWORD;
dwReserved: DWORD;
rgmioOutInfo: array[0..0] of MIB_IPMCAST_OIF_XP;
end;const MIB_IPMCAST_OIF_XP = extern struct {
dwOutIfIndex: u32,
dwNextHopAddr: u32,
dwReserved: u32,
dwReserved1: u32,
};
const MIB_IPMCAST_MFE = extern struct {
dwGroup: u32,
dwSource: u32,
dwSrcMask: u32,
dwUpStrmNgbr: u32,
dwInIfIndex: u32,
dwInIfProtocol: u32,
dwRouteProtocol: u32,
dwRouteNetwork: u32,
dwRouteMask: u32,
ulUpTime: u32,
ulExpiryTime: u32,
ulTimeOut: u32,
ulNumOutIf: u32,
fFlags: u32,
dwReserved: u32,
rgmioOutInfo: [1]MIB_IPMCAST_OIF_XP,
};type
MIB_IPMCAST_OIF_XP {.bycopy.} = object
dwOutIfIndex: uint32
dwNextHopAddr: uint32
dwReserved: uint32
dwReserved1: uint32
MIB_IPMCAST_MFE {.bycopy.} = object
dwGroup: uint32
dwSource: uint32
dwSrcMask: uint32
dwUpStrmNgbr: uint32
dwInIfIndex: uint32
dwInIfProtocol: uint32
dwRouteProtocol: uint32
dwRouteNetwork: uint32
dwRouteMask: uint32
ulUpTime: uint32
ulExpiryTime: uint32
ulTimeOut: uint32
ulNumOutIf: uint32
fFlags: uint32
dwReserved: uint32
rgmioOutInfo: array[1, MIB_IPMCAST_OIF_XP]struct MIB_IPMCAST_OIF_XP
{
uint dwOutIfIndex;
uint dwNextHopAddr;
uint dwReserved;
uint dwReserved1;
}
struct MIB_IPMCAST_MFE
{
uint dwGroup;
uint dwSource;
uint dwSrcMask;
uint dwUpStrmNgbr;
uint dwInIfIndex;
uint dwInIfProtocol;
uint dwRouteProtocol;
uint dwRouteNetwork;
uint dwRouteMask;
uint ulUpTime;
uint ulExpiryTime;
uint ulTimeOut;
uint ulNumOutIf;
uint fFlags;
uint dwReserved;
MIB_IPMCAST_OIF_XP[1] rgmioOutInfo;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; MIB_IPMCAST_MFE サイズ: 76 バイト(x64)
dim st, 19 ; 4byte整数×19(構造体サイズ 76 / 4 切り上げ)
; dwGroup : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; dwSource : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; dwSrcMask : DWORD (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; dwUpStrmNgbr : DWORD (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; dwInIfIndex : DWORD (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; dwInIfProtocol : DWORD (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; dwRouteProtocol : DWORD (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; dwRouteNetwork : DWORD (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; dwRouteMask : DWORD (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; ulUpTime : DWORD (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; ulExpiryTime : DWORD (+40, 4byte) st.10 = 値 / 値 = st.10 (lpoke/lpeek も可)
; ulTimeOut : DWORD (+44, 4byte) st.11 = 値 / 値 = st.11 (lpoke/lpeek も可)
; ulNumOutIf : DWORD (+48, 4byte) st.12 = 値 / 値 = st.12 (lpoke/lpeek も可)
; fFlags : DWORD (+52, 4byte) st.13 = 値 / 値 = st.13 (lpoke/lpeek も可)
; dwReserved : DWORD (+56, 4byte) st.14 = 値 / 値 = st.14 (lpoke/lpeek も可)
; rgmioOutInfo : MIB_IPMCAST_OIF_XP (+60, 16byte) varptr(st)+60 を基点に操作(16byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global MIB_IPMCAST_OIF_XP
#field int dwOutIfIndex
#field int dwNextHopAddr
#field int dwReserved
#field int dwReserved1
#endstruct
#defstruct global MIB_IPMCAST_MFE
#field int dwGroup
#field int dwSource
#field int dwSrcMask
#field int dwUpStrmNgbr
#field int dwInIfIndex
#field int dwInIfProtocol
#field int dwRouteProtocol
#field int dwRouteNetwork
#field int dwRouteMask
#field int ulUpTime
#field int ulExpiryTime
#field int ulTimeOut
#field int ulNumOutIf
#field int fFlags
#field int dwReserved
#field MIB_IPMCAST_OIF_XP rgmioOutInfo 1
#endstruct
stdim st, MIB_IPMCAST_MFE ; NSTRUCT 変数を確保
st->dwGroup = 100
mes "dwGroup=" + st->dwGroup