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

IP_INTERFACE_NAME_INFO_W2KSP1

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

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

フィールド

フィールドサイズx64x86説明
IndexDWORD4+0+0アクティブなインスタンスの IP インターフェイスのインデックスです。
MediaTypeDWORD4+4+4

Internet Assigned Names Authority (IANA) によって定義されるインターフェイスの種類です。インターフェイスの種類に指定できる値は、Ipifcons.h ヘッダー ファイルに一覧が記載されています。

次の表は、インターフェイスの種類としてよく使われる値を示します。ただし、これ以外にも多くの値が存在します。

意味
IF_TYPE_OTHER
1
その他の種類のネットワーク インターフェイスです。
IF_TYPE_ETHERNET_CSMACD
6
イーサネット ネットワーク インターフェイスです。
IF_TYPE_ISO88025_TOKENRING
9
トークン リング ネットワーク インターフェイスです。
IF_TYPE_PPP
23
PPP ネットワーク インターフェイスです。
IF_TYPE_SOFTWARE_LOOPBACK
24
ソフトウェア ループバック ネットワーク インターフェイスです。
IF_TYPE_ATM
37
ATM ネットワーク インターフェイスです。
IF_TYPE_IEEE80211
71
IEEE 802.11 ワイヤレス ネットワーク インターフェイスです。Windows Vista 以降では、ワイヤレス ネットワーク カードは IF_TYPE_IEEE80211 として報告されます。

Windows Server 2003、Windows 2000 Server with SP1、Windows XP/2000: ワイヤレス ネットワーク カードは IF_TYPE_ETHERNET_CSMACD として報告されます。

IF_TYPE_TUNNEL
131
トンネル型カプセル化のネットワーク インターフェイスです。
IF_TYPE_IEEE1394
144
IEEE 1394 (Firewire) 高性能シリアル バスのネットワーク インターフェイスです。
ConnectionTypeBYTE1+8+8

アダプターのインターフェイス接続の種類です。

このメンバーに指定できる値は、Ipifcons.h ヘッダー ファイルで定義されています。

意味
IF_CONNECTION_DEDICATED
1
接続の種類は専用です。メディア センスが TRUE の場合、接続は自動的に確立されます。たとえば、イーサネット接続は専用です。
IF_CONNECTION_PASSIVE
2
接続の種類はパッシブです。リモート側がローカル ステーションへの接続を確立する必要があります。たとえば、RAS インターフェイスはパッシブです。
IF_CONNECTION_DEMAND
3
接続の種類はデマンド ダイヤルです。この種類の接続は、ローカル側の動作 (パケットの送信など) に応じて確立されます。
AccessTypeBYTE1+9+9

インターフェイスのアクセスの種類を指定する IF_ACCESS_TYPE 列挙型の値です。

Windows Server 2003、Windows 2000 Server with SP1、Windows XP/2000: このメンバーに指定できる値は、Ipifcons.h ヘッダー ファイルで定義されています。

意味
IF_ACCESS_LOOPBACK
1
ループバック アクセスの種類です。この値は、インターフェイスが送信データを受信データとしてループバックすることを示します。
IF_ACCESS_BROADCAST
2
イーサネットを含む LAN アクセスの種類です。この値は、インターフェイスがマルチキャストまたはブロードキャストのサービスをネイティブにサポートすることを示します。
IF_ACCESS_POINT_TO_POINT
3
ポイントツーポイント アクセスの種類です。この値は、非ブロードキャスト マルチアクセス (NBMA) インターフェイスを除く CoNDIS/WAN のサポートを示します。

Windows Server 2003、Windows 2000 Server with SP1、Windows XP/2000: この値は、Ipifcons.h ヘッダー ファイルでは IF_ACCESS_POINTTOPOINT として定義されていました。

IF_ACCESS_POINT_TO_MULTI_POINT
4
ポイントツーマルチポイント アクセスの種類です。この値は、RAS 内部インターフェイスやネイティブ ATM を含む、非ブロードキャスト マルチアクセス メディアのサポートを示します。

Windows Server 2003、Windows 2000 Server with SP1、Windows XP/2000: この値は、Ipifcons.h ヘッダー ファイルでは IF_ACCESS_POINTTOMULTIPOINT として定義されていました。

DeviceGuidGUID16+12+12インターフェイスの基になるデバイスを識別する GUID です。このメンバーはゼロ GUID になることがあります。
InterfaceGuidGUID16+28+28デバイスにマップされたインターフェイスを識別する GUID です。省略可能です。このメンバーはゼロ GUID になることがあります。

公式ドキュメント

IP_INTERFACE_NAME_INFO 構造体は、ローカル コンピューター上の IPv4 インターフェイスに関する情報を格納します。

解説(Remarks)

Microsoft Windows ソフトウェア開発キット (SDK) では、Windows 2000 Service Pack 1 (SP1) 以降で使用する構造体のバージョンは IP_INTERFACE_NAME_INFO_W2KSP1 として定義されています。アプリケーションのコンパイル時に、対象プラットフォームが Windows 2000 with SP1 以降 (NTDDI_VERSION >= NTDDI_WIN2KSP1_WIN32_WINNT >= 0x0500、または WINVER >= 0x0500) である場合、IP_INTERFACE_NAME_INFO_W2KSP1 構造体は IP_INTERFACE_NAME_INFO 構造体に typedef されます。

MediaTypeConnectionTypeAccessType の各メンバーの定義と割り当てられた値は、Ipifcons.h ヘッダー ファイルで参照できます。

省略可能な InterfaceGuid メンバーはダイヤルアップ インターフェイスで設定されることが多く、同じデバイス GUID を共有する複数のダイヤルアップ インターフェイスを区別するために使用できます。

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

各言語での定義

#include <windows.h>

// IP_INTERFACE_NAME_INFO_W2KSP1  (x64 44 / x86 44 バイト)
typedef struct IP_INTERFACE_NAME_INFO_W2KSP1 {
    DWORD Index;
    DWORD MediaType;
    BYTE ConnectionType;
    BYTE AccessType;
    GUID DeviceGuid;
    GUID InterfaceGuid;
} IP_INTERFACE_NAME_INFO_W2KSP1;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct IP_INTERFACE_NAME_INFO_W2KSP1
{
    public uint Index;
    public uint MediaType;
    public byte ConnectionType;
    public byte AccessType;
    public Guid DeviceGuid;
    public Guid InterfaceGuid;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure IP_INTERFACE_NAME_INFO_W2KSP1
    Public Index As UInteger
    Public MediaType As UInteger
    Public ConnectionType As Byte
    Public AccessType As Byte
    Public DeviceGuid As Guid
    Public InterfaceGuid As Guid
End Structure
import ctypes
from ctypes import wintypes

class IP_INTERFACE_NAME_INFO_W2KSP1(ctypes.Structure):
    _fields_ = [
        ("Index", wintypes.DWORD),
        ("MediaType", wintypes.DWORD),
        ("ConnectionType", ctypes.c_ubyte),
        ("AccessType", ctypes.c_ubyte),
        ("DeviceGuid", GUID),
        ("InterfaceGuid", GUID),
    ]
#[repr(C)]
pub struct IP_INTERFACE_NAME_INFO_W2KSP1 {
    pub Index: u32,
    pub MediaType: u32,
    pub ConnectionType: u8,
    pub AccessType: u8,
    pub DeviceGuid: GUID,
    pub InterfaceGuid: GUID,
}
import "golang.org/x/sys/windows"

type IP_INTERFACE_NAME_INFO_W2KSP1 struct {
	Index uint32
	MediaType uint32
	ConnectionType byte
	AccessType byte
	DeviceGuid windows.GUID
	InterfaceGuid windows.GUID
}
type
  IP_INTERFACE_NAME_INFO_W2KSP1 = record
    Index: DWORD;
    MediaType: DWORD;
    ConnectionType: Byte;
    AccessType: Byte;
    DeviceGuid: TGUID;
    InterfaceGuid: TGUID;
  end;
const IP_INTERFACE_NAME_INFO_W2KSP1 = extern struct {
    Index: u32,
    MediaType: u32,
    ConnectionType: u8,
    AccessType: u8,
    DeviceGuid: GUID,
    InterfaceGuid: GUID,
};
type
  IP_INTERFACE_NAME_INFO_W2KSP1 {.bycopy.} = object
    Index: uint32
    MediaType: uint32
    ConnectionType: uint8
    AccessType: uint8
    DeviceGuid: GUID
    InterfaceGuid: GUID
struct IP_INTERFACE_NAME_INFO_W2KSP1
{
    uint Index;
    uint MediaType;
    ubyte ConnectionType;
    ubyte AccessType;
    GUID DeviceGuid;
    GUID InterfaceGuid;
}

HSP用 定義

HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; IP_INTERFACE_NAME_INFO_W2KSP1 サイズ: 44 バイト(x64)
dim st, 11    ; 4byte整数×11(構造体サイズ 44 / 4 切り上げ)
; Index : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; MediaType : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; ConnectionType : BYTE (+8, 1byte)  poke st,8,値  /  値 = peek(st,8)
; AccessType : BYTE (+9, 1byte)  poke st,9,値  /  値 = peek(st,9)
; DeviceGuid : GUID (+12, 16byte)  varptr(st)+12 を基点に操作(16byte:入れ子/配列)
; InterfaceGuid : GUID (+28, 16byte)  varptr(st)+28 を基点に操作(16byte:入れ子/配列)
; ※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 IP_INTERFACE_NAME_INFO_W2KSP1
    #field int Index
    #field int MediaType
    #field byte ConnectionType
    #field byte AccessType
    #field GUID DeviceGuid
    #field GUID InterfaceGuid
#endstruct

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