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

MIB_IPMCAST_MFE_STATS_EX_XP

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

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

フィールド

フィールドサイズx64x86説明
dwGroupDWORD4+0+0この MFE のマルチキャストグループです。値が 0 の場合はワイルドカードグループを示します。
dwSourceDWORD4+4+4この MFE の送信元アドレスの範囲です。値が 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 が参照するルートに関連付けられたアドレスです。
dwRouteMaskDWORD4+32+32dwRouteProtocol が参照するルートに関連付けられたマスクです。
ulUpTimeDWORD4+36+36MFE が作成されてからの経過時間 (100 分の 1 秒単位) です。
ulExpiryTimeDWORD4+40+40MFE が削除されるまでの時間 (100 分の 1 秒単位) です。MFE がエージング要件の対象でない場合は 0 が指定されます。
ulNumOutIfDWORD4+44+44この MFE の送信インターフェイスリストに含まれるインターフェイスの数です。
ulInPktsDWORD4+48+48この MFE に一致して転送されたパケットの数です。
ulInOctetsDWORD4+52+52この MFE に一致して転送されたデータのオクテット数です。
ulPktsDifferentIfDWORD4+56+56この MFE に一致したパケットのうち、受信インターフェイスのチェックによって破棄されたパケットの数です。
ulQueueOverflowDWORD4+60+60この MFE に一致したパケットのうち、キューのオーバーフローによって破棄されたパケットの数です。キューは MFE ごとに 1 つあります。
ulUninitMfeDWORD4+64+64この MFE に一致した未初期化パケットの数です。
ulNegativeMfeDWORD4+68+68この MFE に一致したパケットのうち、負のエラー値によって破棄されたパケットの数です。
ulInDiscardsDWORD4+72+72この MFE に一致した転送パケットのうち、破棄されたパケットの数です。
ulInHdrErrorsDWORD4+76+76この MFE に一致したパケットのうち、不正または不正な形式のヘッダー値 (無効な Time-to-Live 値など) によって破棄されたパケットの数です。
ulTotalOutPacketsDWORD4+80+80関連付けられたすべてのインターフェイスで送信された MFE パケットの総数です。1 つのパケットを N 個のインターフェイスで送信した場合、この値では N 個のパケットとして数えられることに注意してください。
rgmiosOutStatsMIB_IPMCAST_OIF_STATS_LH28+84+84送出インターフェース別統計を格納する可変長配列の先頭。

公式ドキュメント

MIB_IPMCAST_MFE_STATS_EX 構造体は、マルチキャスト転送エントリ (MFE) に関連付けられた拡張統計情報を格納します。

解説(Remarks)

MIB_IPMCAST_MFE_STATS_EX 構造体は、MFE パケットに関する追加情報を含めることで MIB_IPMCAST_MFE_STATS の機能を拡張したものです。

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

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

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_STATS_LH  (x64 28 / x86 28 バイト)
typedef struct MIB_IPMCAST_OIF_STATS_LH {
    DWORD dwOutIfIndex;
    DWORD dwNextHopAddr;
    DWORD dwDialContext;
    DWORD ulTtlTooLow;
    DWORD ulFragNeeded;
    DWORD ulOutPackets;
    DWORD ulOutDiscards;
} MIB_IPMCAST_OIF_STATS_LH;

// MIB_IPMCAST_MFE_STATS_EX_XP  (x64 112 / x86 112 バイト)
typedef struct MIB_IPMCAST_MFE_STATS_EX_XP {
    DWORD dwGroup;
    DWORD dwSource;
    DWORD dwSrcMask;
    DWORD dwUpStrmNgbr;
    DWORD dwInIfIndex;
    DWORD dwInIfProtocol;
    DWORD dwRouteProtocol;
    DWORD dwRouteNetwork;
    DWORD dwRouteMask;
    DWORD ulUpTime;
    DWORD ulExpiryTime;
    DWORD ulNumOutIf;
    DWORD ulInPkts;
    DWORD ulInOctets;
    DWORD ulPktsDifferentIf;
    DWORD ulQueueOverflow;
    DWORD ulUninitMfe;
    DWORD ulNegativeMfe;
    DWORD ulInDiscards;
    DWORD ulInHdrErrors;
    DWORD ulTotalOutPackets;
    MIB_IPMCAST_OIF_STATS_LH rgmiosOutStats[1];
} MIB_IPMCAST_MFE_STATS_EX_XP;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct MIB_IPMCAST_OIF_STATS_LH
{
    public uint dwOutIfIndex;
    public uint dwNextHopAddr;
    public uint dwDialContext;
    public uint ulTtlTooLow;
    public uint ulFragNeeded;
    public uint ulOutPackets;
    public uint ulOutDiscards;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct MIB_IPMCAST_MFE_STATS_EX_XP
{
    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 ulNumOutIf;
    public uint ulInPkts;
    public uint ulInOctets;
    public uint ulPktsDifferentIf;
    public uint ulQueueOverflow;
    public uint ulUninitMfe;
    public uint ulNegativeMfe;
    public uint ulInDiscards;
    public uint ulInHdrErrors;
    public uint ulTotalOutPackets;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 1)] public MIB_IPMCAST_OIF_STATS_LH[] rgmiosOutStats;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure MIB_IPMCAST_OIF_STATS_LH
    Public dwOutIfIndex As UInteger
    Public dwNextHopAddr As UInteger
    Public dwDialContext As UInteger
    Public ulTtlTooLow As UInteger
    Public ulFragNeeded As UInteger
    Public ulOutPackets As UInteger
    Public ulOutDiscards As UInteger
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure MIB_IPMCAST_MFE_STATS_EX_XP
    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 ulNumOutIf As UInteger
    Public ulInPkts As UInteger
    Public ulInOctets As UInteger
    Public ulPktsDifferentIf As UInteger
    Public ulQueueOverflow As UInteger
    Public ulUninitMfe As UInteger
    Public ulNegativeMfe As UInteger
    Public ulInDiscards As UInteger
    Public ulInHdrErrors As UInteger
    Public ulTotalOutPackets As UInteger
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=1)> Public rgmiosOutStats() As MIB_IPMCAST_OIF_STATS_LH
End Structure
import ctypes
from ctypes import wintypes

class MIB_IPMCAST_OIF_STATS_LH(ctypes.Structure):
    _fields_ = [
        ("dwOutIfIndex", wintypes.DWORD),
        ("dwNextHopAddr", wintypes.DWORD),
        ("dwDialContext", wintypes.DWORD),
        ("ulTtlTooLow", wintypes.DWORD),
        ("ulFragNeeded", wintypes.DWORD),
        ("ulOutPackets", wintypes.DWORD),
        ("ulOutDiscards", wintypes.DWORD),
    ]

class MIB_IPMCAST_MFE_STATS_EX_XP(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),
        ("ulNumOutIf", wintypes.DWORD),
        ("ulInPkts", wintypes.DWORD),
        ("ulInOctets", wintypes.DWORD),
        ("ulPktsDifferentIf", wintypes.DWORD),
        ("ulQueueOverflow", wintypes.DWORD),
        ("ulUninitMfe", wintypes.DWORD),
        ("ulNegativeMfe", wintypes.DWORD),
        ("ulInDiscards", wintypes.DWORD),
        ("ulInHdrErrors", wintypes.DWORD),
        ("ulTotalOutPackets", wintypes.DWORD),
        ("rgmiosOutStats", MIB_IPMCAST_OIF_STATS_LH * 1),
    ]
#[repr(C)]
pub struct MIB_IPMCAST_OIF_STATS_LH {
    pub dwOutIfIndex: u32,
    pub dwNextHopAddr: u32,
    pub dwDialContext: u32,
    pub ulTtlTooLow: u32,
    pub ulFragNeeded: u32,
    pub ulOutPackets: u32,
    pub ulOutDiscards: u32,
}

#[repr(C)]
pub struct MIB_IPMCAST_MFE_STATS_EX_XP {
    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 ulNumOutIf: u32,
    pub ulInPkts: u32,
    pub ulInOctets: u32,
    pub ulPktsDifferentIf: u32,
    pub ulQueueOverflow: u32,
    pub ulUninitMfe: u32,
    pub ulNegativeMfe: u32,
    pub ulInDiscards: u32,
    pub ulInHdrErrors: u32,
    pub ulTotalOutPackets: u32,
    pub rgmiosOutStats: [MIB_IPMCAST_OIF_STATS_LH; 1],
}
import "golang.org/x/sys/windows"

type MIB_IPMCAST_OIF_STATS_LH struct {
	dwOutIfIndex uint32
	dwNextHopAddr uint32
	dwDialContext uint32
	ulTtlTooLow uint32
	ulFragNeeded uint32
	ulOutPackets uint32
	ulOutDiscards uint32
}

type MIB_IPMCAST_MFE_STATS_EX_XP struct {
	dwGroup uint32
	dwSource uint32
	dwSrcMask uint32
	dwUpStrmNgbr uint32
	dwInIfIndex uint32
	dwInIfProtocol uint32
	dwRouteProtocol uint32
	dwRouteNetwork uint32
	dwRouteMask uint32
	ulUpTime uint32
	ulExpiryTime uint32
	ulNumOutIf uint32
	ulInPkts uint32
	ulInOctets uint32
	ulPktsDifferentIf uint32
	ulQueueOverflow uint32
	ulUninitMfe uint32
	ulNegativeMfe uint32
	ulInDiscards uint32
	ulInHdrErrors uint32
	ulTotalOutPackets uint32
	rgmiosOutStats [1]MIB_IPMCAST_OIF_STATS_LH
}
type
  MIB_IPMCAST_OIF_STATS_LH = record
    dwOutIfIndex: DWORD;
    dwNextHopAddr: DWORD;
    dwDialContext: DWORD;
    ulTtlTooLow: DWORD;
    ulFragNeeded: DWORD;
    ulOutPackets: DWORD;
    ulOutDiscards: DWORD;
  end;

  MIB_IPMCAST_MFE_STATS_EX_XP = record
    dwGroup: DWORD;
    dwSource: DWORD;
    dwSrcMask: DWORD;
    dwUpStrmNgbr: DWORD;
    dwInIfIndex: DWORD;
    dwInIfProtocol: DWORD;
    dwRouteProtocol: DWORD;
    dwRouteNetwork: DWORD;
    dwRouteMask: DWORD;
    ulUpTime: DWORD;
    ulExpiryTime: DWORD;
    ulNumOutIf: DWORD;
    ulInPkts: DWORD;
    ulInOctets: DWORD;
    ulPktsDifferentIf: DWORD;
    ulQueueOverflow: DWORD;
    ulUninitMfe: DWORD;
    ulNegativeMfe: DWORD;
    ulInDiscards: DWORD;
    ulInHdrErrors: DWORD;
    ulTotalOutPackets: DWORD;
    rgmiosOutStats: array[0..0] of MIB_IPMCAST_OIF_STATS_LH;
  end;
const MIB_IPMCAST_OIF_STATS_LH = extern struct {
    dwOutIfIndex: u32,
    dwNextHopAddr: u32,
    dwDialContext: u32,
    ulTtlTooLow: u32,
    ulFragNeeded: u32,
    ulOutPackets: u32,
    ulOutDiscards: u32,
};

const MIB_IPMCAST_MFE_STATS_EX_XP = extern struct {
    dwGroup: u32,
    dwSource: u32,
    dwSrcMask: u32,
    dwUpStrmNgbr: u32,
    dwInIfIndex: u32,
    dwInIfProtocol: u32,
    dwRouteProtocol: u32,
    dwRouteNetwork: u32,
    dwRouteMask: u32,
    ulUpTime: u32,
    ulExpiryTime: u32,
    ulNumOutIf: u32,
    ulInPkts: u32,
    ulInOctets: u32,
    ulPktsDifferentIf: u32,
    ulQueueOverflow: u32,
    ulUninitMfe: u32,
    ulNegativeMfe: u32,
    ulInDiscards: u32,
    ulInHdrErrors: u32,
    ulTotalOutPackets: u32,
    rgmiosOutStats: [1]MIB_IPMCAST_OIF_STATS_LH,
};
type
  MIB_IPMCAST_OIF_STATS_LH {.bycopy.} = object
    dwOutIfIndex: uint32
    dwNextHopAddr: uint32
    dwDialContext: uint32
    ulTtlTooLow: uint32
    ulFragNeeded: uint32
    ulOutPackets: uint32
    ulOutDiscards: uint32

  MIB_IPMCAST_MFE_STATS_EX_XP {.bycopy.} = object
    dwGroup: uint32
    dwSource: uint32
    dwSrcMask: uint32
    dwUpStrmNgbr: uint32
    dwInIfIndex: uint32
    dwInIfProtocol: uint32
    dwRouteProtocol: uint32
    dwRouteNetwork: uint32
    dwRouteMask: uint32
    ulUpTime: uint32
    ulExpiryTime: uint32
    ulNumOutIf: uint32
    ulInPkts: uint32
    ulInOctets: uint32
    ulPktsDifferentIf: uint32
    ulQueueOverflow: uint32
    ulUninitMfe: uint32
    ulNegativeMfe: uint32
    ulInDiscards: uint32
    ulInHdrErrors: uint32
    ulTotalOutPackets: uint32
    rgmiosOutStats: array[1, MIB_IPMCAST_OIF_STATS_LH]
struct MIB_IPMCAST_OIF_STATS_LH
{
    uint dwOutIfIndex;
    uint dwNextHopAddr;
    uint dwDialContext;
    uint ulTtlTooLow;
    uint ulFragNeeded;
    uint ulOutPackets;
    uint ulOutDiscards;
}

struct MIB_IPMCAST_MFE_STATS_EX_XP
{
    uint dwGroup;
    uint dwSource;
    uint dwSrcMask;
    uint dwUpStrmNgbr;
    uint dwInIfIndex;
    uint dwInIfProtocol;
    uint dwRouteProtocol;
    uint dwRouteNetwork;
    uint dwRouteMask;
    uint ulUpTime;
    uint ulExpiryTime;
    uint ulNumOutIf;
    uint ulInPkts;
    uint ulInOctets;
    uint ulPktsDifferentIf;
    uint ulQueueOverflow;
    uint ulUninitMfe;
    uint ulNegativeMfe;
    uint ulInDiscards;
    uint ulInHdrErrors;
    uint ulTotalOutPackets;
    MIB_IPMCAST_OIF_STATS_LH[1] rgmiosOutStats;
}

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_STATS_EX_XP サイズ: 112 バイト(x64)
dim st, 28    ; 4byte整数×28(構造体サイズ 112 / 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 も可)
; ulNumOutIf : DWORD (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; ulInPkts : DWORD (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; ulInOctets : DWORD (+52, 4byte)  st.13 = 値  /  値 = st.13   (lpoke/lpeek も可)
; ulPktsDifferentIf : DWORD (+56, 4byte)  st.14 = 値  /  値 = st.14   (lpoke/lpeek も可)
; ulQueueOverflow : DWORD (+60, 4byte)  st.15 = 値  /  値 = st.15   (lpoke/lpeek も可)
; ulUninitMfe : DWORD (+64, 4byte)  st.16 = 値  /  値 = st.16   (lpoke/lpeek も可)
; ulNegativeMfe : DWORD (+68, 4byte)  st.17 = 値  /  値 = st.17   (lpoke/lpeek も可)
; ulInDiscards : DWORD (+72, 4byte)  st.18 = 値  /  値 = st.18   (lpoke/lpeek も可)
; ulInHdrErrors : DWORD (+76, 4byte)  st.19 = 値  /  値 = st.19   (lpoke/lpeek も可)
; ulTotalOutPackets : DWORD (+80, 4byte)  st.20 = 値  /  値 = st.20   (lpoke/lpeek も可)
; rgmiosOutStats : MIB_IPMCAST_OIF_STATS_LH (+84, 28byte)  varptr(st)+84 を基点に操作(28byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global MIB_IPMCAST_OIF_STATS_LH
    #field int dwOutIfIndex
    #field int dwNextHopAddr
    #field int dwDialContext
    #field int ulTtlTooLow
    #field int ulFragNeeded
    #field int ulOutPackets
    #field int ulOutDiscards
#endstruct

#defstruct global MIB_IPMCAST_MFE_STATS_EX_XP
    #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 ulNumOutIf
    #field int ulInPkts
    #field int ulInOctets
    #field int ulPktsDifferentIf
    #field int ulQueueOverflow
    #field int ulUninitMfe
    #field int ulNegativeMfe
    #field int ulInDiscards
    #field int ulInHdrErrors
    #field int ulTotalOutPackets
    #field MIB_IPMCAST_OIF_STATS_LH rgmiosOutStats 1
#endstruct

stdim st, MIB_IPMCAST_MFE_STATS_EX_XP        ; NSTRUCT 変数を確保
st->dwGroup = 100
mes "dwGroup=" + st->dwGroup