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

MIB_IPMCAST_MFE

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

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

フィールド

フィールドサイズx64x86説明
dwGroupDWORD4+0+0この MFE に対する IPv4 マルチキャスト グループの範囲です。値が 0 の場合は、ワイルドカードのグループを示します。
dwSourceDWORD4+4+4この MFE に対する IPv4 送信元アドレスの範囲です。値が 0 の場合は、ワイルドカードの送信元を示します。
dwSrcMaskDWORD4+8+8dwSourceAddr に対応する IPv4 サブネット マスクです。dwSourceAddr メンバーと dwSourceMask メンバーは、送信元の範囲を定義するために組み合わせて使用されます。
dwUpStrmNgbrDWORD4+12+12この MFE に関連する上流のネイバーです。
dwInIfIndexDWORD4+16+16この MFE が関連付けられているインターフェイスのインデックスです。
dwInIfProtocolDWORD4+20+20この MFE が関連付けられている受信インターフェイスを所有するルーティング プロトコルです。
dwRouteProtocolDWORD4+24+24ルートを作成したクライアントです。
dwRouteNetworkDWORD4+28+28dwRouteProtocol が参照するルートに関連付けられた IPv4 アドレスです。
dwRouteMaskDWORD4+32+32dwRouteProtocol が参照するルートに関連付けられた IPv4 マスクです。
ulUpTimeDWORD4+36+36この MFE が有効であった時間 (秒単位) です。この値は 0 から始まり、ulTimeOut の値に達するまで増加します。達した時点で MFE は削除されます。
ulExpiryTimeDWORD4+40+40MFE が期限切れとなって削除されるまでの残り時間 (秒単位) です。この値は ulTimeOut から始まり、0 に達するまで減少します。達した時点で MFE は削除されます。
ulTimeOutDWORD4+44+44この MFE が有効であり続ける合計時間 (秒単位) です。このタイムアウト値を超えると、MFE は削除されます。この値は静的です。
ulNumOutIfDWORD4+48+48この MFE に関連付けられている送信インターフェイスの数です。
fFlagsDWORD4+52+52予約済みです。このメンバーは NULL にする必要があります。
dwReservedDWORD4+56+56予約済みです。このメンバーは NULL にする必要があります。
rgmioOutInfoMIB_IPMCAST_OIF_XP16+60+60送信インターフェイスの統計情報のテーブルへのポインターです。このテーブルは MIB_IPMCAST_OIF 構造体の配列として実装されます。

公式ドキュメント

MIB_IPMCAST_MFE 構造体は、インターネット プロトコル (IP) マルチキャスト転送エントリ (MFE) の情報を格納します。

解説(Remarks)

MIB_IPMCAST_MFE 構造体のサイズは固定ではありません。この構造体のサイズを求めるには、SIZEOF_MIB_MFE(X) マクロを使用します。このマクロは Iprtrmib.h ヘッダー ファイルで定義されています。

dwRouteProtocoldwRouteNetworkdwRouteMask の各メンバーによって、この MFE が関連するルートが一意に識別されます。

MIB_IPMCAST_MFE 構造体は、マルチキャスト グループ マネージャー関数で使用されます。MIB_IPMCAST_MFE 構造体は、MgmGetMfe 関数を使用して取得します。既存の MIB_IPMCAST_MFE 構造体は、MgmSetMfe 関数を使用して変更できます。

Windows Vista 以降向けにリリースされた Microsoft Windows Software Development Kit (SDK) では、ヘッダー ファイルの構成が変更されています。この構造体は Iprtrmib.h ヘッダー ファイルではなく、Ipmib.h ヘッダー ファイルで定義されています。Ipmib.h ヘッダー ファイルは Iprtrmib.h に自動的にインクルードされ、Iprtrmib.hIphlpapi.h ヘッダー ファイルに自動的にインクルードされることに注意してください。Ipmib.h および Iprtrmib.h ヘッダー ファイルを直接使用しないでください。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

#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 Structure
import 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