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

MIB_IF_TABLE2

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

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

フィールド

フィールドサイズx64x86説明
NumEntriesDWORD4+0+0Table配列に格納されたインタフェースエントリの数を示す。
TableMIB_IF_ROW21352+8+8インタフェース行(MIB_IF_ROW2)の可変長配列である。

各言語での定義

#include <windows.h>

// NET_LUID_LH  (x64 8 / x86 8 バイト)
typedef struct NET_LUID_LH {
    ULONGLONG Value;
    _Info_e__Struct Info;
} NET_LUID_LH;

// MIB_IF_ROW2  (x64 1352 / x86 1352 バイト)
typedef struct MIB_IF_ROW2 {
    NET_LUID_LH InterfaceLuid;
    DWORD InterfaceIndex;
    GUID InterfaceGuid;
    WCHAR Alias[257];
    WCHAR Description[257];
    DWORD PhysicalAddressLength;
    BYTE PhysicalAddress[32];
    BYTE PermanentPhysicalAddress[32];
    DWORD Mtu;
    DWORD Type;
    TUNNEL_TYPE TunnelType;
    NDIS_MEDIUM MediaType;
    NDIS_PHYSICAL_MEDIUM PhysicalMediumType;
    NET_IF_ACCESS_TYPE AccessType;
    NET_IF_DIRECTION_TYPE DirectionType;
    _InterfaceAndOperStatusFlags_e__Struct InterfaceAndOperStatusFlags;
    IF_OPER_STATUS OperStatus;
    NET_IF_ADMIN_STATUS AdminStatus;
    NET_IF_MEDIA_CONNECT_STATE MediaConnectState;
    GUID NetworkGuid;
    NET_IF_CONNECTION_TYPE ConnectionType;
    ULONGLONG TransmitLinkSpeed;
    ULONGLONG ReceiveLinkSpeed;
    ULONGLONG InOctets;
    ULONGLONG InUcastPkts;
    ULONGLONG InNUcastPkts;
    ULONGLONG InDiscards;
    ULONGLONG InErrors;
    ULONGLONG InUnknownProtos;
    ULONGLONG InUcastOctets;
    ULONGLONG InMulticastOctets;
    ULONGLONG InBroadcastOctets;
    ULONGLONG OutOctets;
    ULONGLONG OutUcastPkts;
    ULONGLONG OutNUcastPkts;
    ULONGLONG OutDiscards;
    ULONGLONG OutErrors;
    ULONGLONG OutUcastOctets;
    ULONGLONG OutMulticastOctets;
    ULONGLONG OutBroadcastOctets;
    ULONGLONG OutQLen;
} MIB_IF_ROW2;

// MIB_IF_TABLE2  (x64 1360 / x86 1360 バイト)
typedef struct MIB_IF_TABLE2 {
    DWORD NumEntries;
    MIB_IF_ROW2 Table[1];
} MIB_IF_TABLE2;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct NET_LUID_LH
{
    public ulong Value;
    public _Info_e__Struct Info;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct MIB_IF_ROW2
{
    public NET_LUID_LH InterfaceLuid;
    public uint InterfaceIndex;
    public Guid InterfaceGuid;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 257)] public string Alias;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 257)] public string Description;
    public uint PhysicalAddressLength;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)] public byte[] PhysicalAddress;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)] public byte[] PermanentPhysicalAddress;
    public uint Mtu;
    public uint Type;
    public int TunnelType;
    public int MediaType;
    public int PhysicalMediumType;
    public int AccessType;
    public int DirectionType;
    public _InterfaceAndOperStatusFlags_e__Struct InterfaceAndOperStatusFlags;
    public int OperStatus;
    public int AdminStatus;
    public int MediaConnectState;
    public Guid NetworkGuid;
    public int ConnectionType;
    public ulong TransmitLinkSpeed;
    public ulong ReceiveLinkSpeed;
    public ulong InOctets;
    public ulong InUcastPkts;
    public ulong InNUcastPkts;
    public ulong InDiscards;
    public ulong InErrors;
    public ulong InUnknownProtos;
    public ulong InUcastOctets;
    public ulong InMulticastOctets;
    public ulong InBroadcastOctets;
    public ulong OutOctets;
    public ulong OutUcastPkts;
    public ulong OutNUcastPkts;
    public ulong OutDiscards;
    public ulong OutErrors;
    public ulong OutUcastOctets;
    public ulong OutMulticastOctets;
    public ulong OutBroadcastOctets;
    public ulong OutQLen;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct MIB_IF_TABLE2
{
    public uint NumEntries;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 1)] public MIB_IF_ROW2[] Table;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure NET_LUID_LH
    Public Value As ULong
    Public Info As _Info_e__Struct
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure MIB_IF_ROW2
    Public InterfaceLuid As NET_LUID_LH
    Public InterfaceIndex As UInteger
    Public InterfaceGuid As Guid
    <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=257)> Public Alias As String
    <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=257)> Public Description As String
    Public PhysicalAddressLength As UInteger
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=32)> Public PhysicalAddress() As Byte
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=32)> Public PermanentPhysicalAddress() As Byte
    Public Mtu As UInteger
    Public Type As UInteger
    Public TunnelType As Integer
    Public MediaType As Integer
    Public PhysicalMediumType As Integer
    Public AccessType As Integer
    Public DirectionType As Integer
    Public InterfaceAndOperStatusFlags As _InterfaceAndOperStatusFlags_e__Struct
    Public OperStatus As Integer
    Public AdminStatus As Integer
    Public MediaConnectState As Integer
    Public NetworkGuid As Guid
    Public ConnectionType As Integer
    Public TransmitLinkSpeed As ULong
    Public ReceiveLinkSpeed As ULong
    Public InOctets As ULong
    Public InUcastPkts As ULong
    Public InNUcastPkts As ULong
    Public InDiscards As ULong
    Public InErrors As ULong
    Public InUnknownProtos As ULong
    Public InUcastOctets As ULong
    Public InMulticastOctets As ULong
    Public InBroadcastOctets As ULong
    Public OutOctets As ULong
    Public OutUcastPkts As ULong
    Public OutNUcastPkts As ULong
    Public OutDiscards As ULong
    Public OutErrors As ULong
    Public OutUcastOctets As ULong
    Public OutMulticastOctets As ULong
    Public OutBroadcastOctets As ULong
    Public OutQLen As ULong
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure MIB_IF_TABLE2
    Public NumEntries As UInteger
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=1)> Public Table() As MIB_IF_ROW2
End Structure
import ctypes
from ctypes import wintypes

class NET_LUID_LH(ctypes.Structure):
    _fields_ = [
        ("Value", ctypes.c_ulonglong),
        ("Info", _Info_e__Struct),
    ]

class MIB_IF_ROW2(ctypes.Structure):
    _fields_ = [
        ("InterfaceLuid", NET_LUID_LH),
        ("InterfaceIndex", wintypes.DWORD),
        ("InterfaceGuid", GUID),
        ("Alias", ctypes.c_wchar * 257),
        ("Description", ctypes.c_wchar * 257),
        ("PhysicalAddressLength", wintypes.DWORD),
        ("PhysicalAddress", ctypes.c_ubyte * 32),
        ("PermanentPhysicalAddress", ctypes.c_ubyte * 32),
        ("Mtu", wintypes.DWORD),
        ("Type", wintypes.DWORD),
        ("TunnelType", ctypes.c_int),
        ("MediaType", ctypes.c_int),
        ("PhysicalMediumType", ctypes.c_int),
        ("AccessType", ctypes.c_int),
        ("DirectionType", ctypes.c_int),
        ("InterfaceAndOperStatusFlags", _InterfaceAndOperStatusFlags_e__Struct),
        ("OperStatus", ctypes.c_int),
        ("AdminStatus", ctypes.c_int),
        ("MediaConnectState", ctypes.c_int),
        ("NetworkGuid", GUID),
        ("ConnectionType", ctypes.c_int),
        ("TransmitLinkSpeed", ctypes.c_ulonglong),
        ("ReceiveLinkSpeed", ctypes.c_ulonglong),
        ("InOctets", ctypes.c_ulonglong),
        ("InUcastPkts", ctypes.c_ulonglong),
        ("InNUcastPkts", ctypes.c_ulonglong),
        ("InDiscards", ctypes.c_ulonglong),
        ("InErrors", ctypes.c_ulonglong),
        ("InUnknownProtos", ctypes.c_ulonglong),
        ("InUcastOctets", ctypes.c_ulonglong),
        ("InMulticastOctets", ctypes.c_ulonglong),
        ("InBroadcastOctets", ctypes.c_ulonglong),
        ("OutOctets", ctypes.c_ulonglong),
        ("OutUcastPkts", ctypes.c_ulonglong),
        ("OutNUcastPkts", ctypes.c_ulonglong),
        ("OutDiscards", ctypes.c_ulonglong),
        ("OutErrors", ctypes.c_ulonglong),
        ("OutUcastOctets", ctypes.c_ulonglong),
        ("OutMulticastOctets", ctypes.c_ulonglong),
        ("OutBroadcastOctets", ctypes.c_ulonglong),
        ("OutQLen", ctypes.c_ulonglong),
    ]

class MIB_IF_TABLE2(ctypes.Structure):
    _fields_ = [
        ("NumEntries", wintypes.DWORD),
        ("Table", MIB_IF_ROW2 * 1),
    ]
#[repr(C)]
pub struct NET_LUID_LH {
    pub Value: u64,
    pub Info: _Info_e__Struct,
}

#[repr(C)]
pub struct MIB_IF_ROW2 {
    pub InterfaceLuid: NET_LUID_LH,
    pub InterfaceIndex: u32,
    pub InterfaceGuid: GUID,
    pub Alias: [u16; 257],
    pub Description: [u16; 257],
    pub PhysicalAddressLength: u32,
    pub PhysicalAddress: [u8; 32],
    pub PermanentPhysicalAddress: [u8; 32],
    pub Mtu: u32,
    pub Type: u32,
    pub TunnelType: i32,
    pub MediaType: i32,
    pub PhysicalMediumType: i32,
    pub AccessType: i32,
    pub DirectionType: i32,
    pub InterfaceAndOperStatusFlags: _InterfaceAndOperStatusFlags_e__Struct,
    pub OperStatus: i32,
    pub AdminStatus: i32,
    pub MediaConnectState: i32,
    pub NetworkGuid: GUID,
    pub ConnectionType: i32,
    pub TransmitLinkSpeed: u64,
    pub ReceiveLinkSpeed: u64,
    pub InOctets: u64,
    pub InUcastPkts: u64,
    pub InNUcastPkts: u64,
    pub InDiscards: u64,
    pub InErrors: u64,
    pub InUnknownProtos: u64,
    pub InUcastOctets: u64,
    pub InMulticastOctets: u64,
    pub InBroadcastOctets: u64,
    pub OutOctets: u64,
    pub OutUcastPkts: u64,
    pub OutNUcastPkts: u64,
    pub OutDiscards: u64,
    pub OutErrors: u64,
    pub OutUcastOctets: u64,
    pub OutMulticastOctets: u64,
    pub OutBroadcastOctets: u64,
    pub OutQLen: u64,
}

#[repr(C)]
pub struct MIB_IF_TABLE2 {
    pub NumEntries: u32,
    pub Table: [MIB_IF_ROW2; 1],
}
import "golang.org/x/sys/windows"

type NET_LUID_LH struct {
	Value uint64
	Info _Info_e__Struct
}

type MIB_IF_ROW2 struct {
	InterfaceLuid NET_LUID_LH
	InterfaceIndex uint32
	InterfaceGuid windows.GUID
	Alias [257]uint16
	Description [257]uint16
	PhysicalAddressLength uint32
	PhysicalAddress [32]byte
	PermanentPhysicalAddress [32]byte
	Mtu uint32
	Type uint32
	TunnelType int32
	MediaType int32
	PhysicalMediumType int32
	AccessType int32
	DirectionType int32
	InterfaceAndOperStatusFlags _InterfaceAndOperStatusFlags_e__Struct
	OperStatus int32
	AdminStatus int32
	MediaConnectState int32
	NetworkGuid windows.GUID
	ConnectionType int32
	TransmitLinkSpeed uint64
	ReceiveLinkSpeed uint64
	InOctets uint64
	InUcastPkts uint64
	InNUcastPkts uint64
	InDiscards uint64
	InErrors uint64
	InUnknownProtos uint64
	InUcastOctets uint64
	InMulticastOctets uint64
	InBroadcastOctets uint64
	OutOctets uint64
	OutUcastPkts uint64
	OutNUcastPkts uint64
	OutDiscards uint64
	OutErrors uint64
	OutUcastOctets uint64
	OutMulticastOctets uint64
	OutBroadcastOctets uint64
	OutQLen uint64
}

type MIB_IF_TABLE2 struct {
	NumEntries uint32
	Table [1]MIB_IF_ROW2
}
type
  NET_LUID_LH = record
    Value: UInt64;
    Info: _Info_e__Struct;
  end;

  MIB_IF_ROW2 = record
    InterfaceLuid: NET_LUID_LH;
    InterfaceIndex: DWORD;
    InterfaceGuid: TGUID;
    Alias: array[0..256] of WideChar;
    Description: array[0..256] of WideChar;
    PhysicalAddressLength: DWORD;
    PhysicalAddress: array[0..31] of Byte;
    PermanentPhysicalAddress: array[0..31] of Byte;
    Mtu: DWORD;
    Type: DWORD;
    TunnelType: Integer;
    MediaType: Integer;
    PhysicalMediumType: Integer;
    AccessType: Integer;
    DirectionType: Integer;
    InterfaceAndOperStatusFlags: _InterfaceAndOperStatusFlags_e__Struct;
    OperStatus: Integer;
    AdminStatus: Integer;
    MediaConnectState: Integer;
    NetworkGuid: TGUID;
    ConnectionType: Integer;
    TransmitLinkSpeed: UInt64;
    ReceiveLinkSpeed: UInt64;
    InOctets: UInt64;
    InUcastPkts: UInt64;
    InNUcastPkts: UInt64;
    InDiscards: UInt64;
    InErrors: UInt64;
    InUnknownProtos: UInt64;
    InUcastOctets: UInt64;
    InMulticastOctets: UInt64;
    InBroadcastOctets: UInt64;
    OutOctets: UInt64;
    OutUcastPkts: UInt64;
    OutNUcastPkts: UInt64;
    OutDiscards: UInt64;
    OutErrors: UInt64;
    OutUcastOctets: UInt64;
    OutMulticastOctets: UInt64;
    OutBroadcastOctets: UInt64;
    OutQLen: UInt64;
  end;

  MIB_IF_TABLE2 = record
    NumEntries: DWORD;
    Table: array[0..0] of MIB_IF_ROW2;
  end;
const NET_LUID_LH = extern struct {
    Value: u64,
    Info: _Info_e__Struct,
};

const MIB_IF_ROW2 = extern struct {
    InterfaceLuid: NET_LUID_LH,
    InterfaceIndex: u32,
    InterfaceGuid: GUID,
    Alias: [257]u16,
    Description: [257]u16,
    PhysicalAddressLength: u32,
    PhysicalAddress: [32]u8,
    PermanentPhysicalAddress: [32]u8,
    Mtu: u32,
    Type: u32,
    TunnelType: i32,
    MediaType: i32,
    PhysicalMediumType: i32,
    AccessType: i32,
    DirectionType: i32,
    InterfaceAndOperStatusFlags: _InterfaceAndOperStatusFlags_e__Struct,
    OperStatus: i32,
    AdminStatus: i32,
    MediaConnectState: i32,
    NetworkGuid: GUID,
    ConnectionType: i32,
    TransmitLinkSpeed: u64,
    ReceiveLinkSpeed: u64,
    InOctets: u64,
    InUcastPkts: u64,
    InNUcastPkts: u64,
    InDiscards: u64,
    InErrors: u64,
    InUnknownProtos: u64,
    InUcastOctets: u64,
    InMulticastOctets: u64,
    InBroadcastOctets: u64,
    OutOctets: u64,
    OutUcastPkts: u64,
    OutNUcastPkts: u64,
    OutDiscards: u64,
    OutErrors: u64,
    OutUcastOctets: u64,
    OutMulticastOctets: u64,
    OutBroadcastOctets: u64,
    OutQLen: u64,
};

const MIB_IF_TABLE2 = extern struct {
    NumEntries: u32,
    Table: [1]MIB_IF_ROW2,
};
type
  NET_LUID_LH {.bycopy.} = object
    Value: uint64
    Info: _Info_e__Struct

  MIB_IF_ROW2 {.bycopy.} = object
    InterfaceLuid: NET_LUID_LH
    InterfaceIndex: uint32
    InterfaceGuid: GUID
    Alias: array[257, uint16]
    Description: array[257, uint16]
    PhysicalAddressLength: uint32
    PhysicalAddress: array[32, uint8]
    PermanentPhysicalAddress: array[32, uint8]
    Mtu: uint32
    Type: uint32
    TunnelType: int32
    MediaType: int32
    PhysicalMediumType: int32
    AccessType: int32
    DirectionType: int32
    InterfaceAndOperStatusFlags: _InterfaceAndOperStatusFlags_e__Struct
    OperStatus: int32
    AdminStatus: int32
    MediaConnectState: int32
    NetworkGuid: GUID
    ConnectionType: int32
    TransmitLinkSpeed: uint64
    ReceiveLinkSpeed: uint64
    InOctets: uint64
    InUcastPkts: uint64
    InNUcastPkts: uint64
    InDiscards: uint64
    InErrors: uint64
    InUnknownProtos: uint64
    InUcastOctets: uint64
    InMulticastOctets: uint64
    InBroadcastOctets: uint64
    OutOctets: uint64
    OutUcastPkts: uint64
    OutNUcastPkts: uint64
    OutDiscards: uint64
    OutErrors: uint64
    OutUcastOctets: uint64
    OutMulticastOctets: uint64
    OutBroadcastOctets: uint64
    OutQLen: uint64

  MIB_IF_TABLE2 {.bycopy.} = object
    NumEntries: uint32
    Table: array[1, MIB_IF_ROW2]
struct NET_LUID_LH
{
    ulong Value;
    _Info_e__Struct Info;
}

struct MIB_IF_ROW2
{
    NET_LUID_LH InterfaceLuid;
    uint InterfaceIndex;
    GUID InterfaceGuid;
    wchar[257] Alias;
    wchar[257] Description;
    uint PhysicalAddressLength;
    ubyte[32] PhysicalAddress;
    ubyte[32] PermanentPhysicalAddress;
    uint Mtu;
    uint Type;
    int TunnelType;
    int MediaType;
    int PhysicalMediumType;
    int AccessType;
    int DirectionType;
    _InterfaceAndOperStatusFlags_e__Struct InterfaceAndOperStatusFlags;
    int OperStatus;
    int AdminStatus;
    int MediaConnectState;
    GUID NetworkGuid;
    int ConnectionType;
    ulong TransmitLinkSpeed;
    ulong ReceiveLinkSpeed;
    ulong InOctets;
    ulong InUcastPkts;
    ulong InNUcastPkts;
    ulong InDiscards;
    ulong InErrors;
    ulong InUnknownProtos;
    ulong InUcastOctets;
    ulong InMulticastOctets;
    ulong InBroadcastOctets;
    ulong OutOctets;
    ulong OutUcastPkts;
    ulong OutNUcastPkts;
    ulong OutDiscards;
    ulong OutErrors;
    ulong OutUcastOctets;
    ulong OutMulticastOctets;
    ulong OutBroadcastOctets;
    ulong OutQLen;
}

struct MIB_IF_TABLE2
{
    uint NumEntries;
    MIB_IF_ROW2[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_IF_TABLE2 サイズ: 1360 バイト(x64)
dim st, 340    ; 4byte整数×340(構造体サイズ 1360 / 4 切り上げ)
; NumEntries : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; Table : MIB_IF_ROW2 (+8, 1352byte)  varptr(st)+8 を基点に操作(1352byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global GUID, pack=1
    #field int Data1
    #field short Data2
    #field short Data3
    #field byte Data4 8
#endstruct

#defstruct global MIB_IF_ROW2
    #field byte InterfaceLuid 8
    #field int InterfaceIndex
    #field GUID InterfaceGuid
    #field wchar Alias 257
    #field wchar Description 257
    #field int PhysicalAddressLength
    #field byte PhysicalAddress 32
    #field byte PermanentPhysicalAddress 32
    #field int Mtu
    #field int Type
    #field int TunnelType
    #field int MediaType
    #field int PhysicalMediumType
    #field int AccessType
    #field int DirectionType
    #field _InterfaceAndOperStatusFlags_e__Struct InterfaceAndOperStatusFlags
    #field int OperStatus
    #field int AdminStatus
    #field int MediaConnectState
    #field GUID NetworkGuid
    #field int ConnectionType
    #field int64 TransmitLinkSpeed
    #field int64 ReceiveLinkSpeed
    #field int64 InOctets
    #field int64 InUcastPkts
    #field int64 InNUcastPkts
    #field int64 InDiscards
    #field int64 InErrors
    #field int64 InUnknownProtos
    #field int64 InUcastOctets
    #field int64 InMulticastOctets
    #field int64 InBroadcastOctets
    #field int64 OutOctets
    #field int64 OutUcastPkts
    #field int64 OutNUcastPkts
    #field int64 OutDiscards
    #field int64 OutErrors
    #field int64 OutUcastOctets
    #field int64 OutMulticastOctets
    #field int64 OutBroadcastOctets
    #field int64 OutQLen
#endstruct

#defstruct global MIB_IF_TABLE2
    #field int NumEntries
    #field MIB_IF_ROW2 Table 1
#endstruct

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