ホーム › NetworkManagement.IpHelper › IP_ADAPTER_INFO
IP_ADAPTER_INFO
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| Next | IP_ADAPTER_INFO* | 8/4 | +0 | +0 | 連結リスト上の次のアダプタ情報を指すポインタである。末尾はNULL。 |
| ComboIndex | DWORD | 4 | +8 | +4 | 予約済みのインデックス値で使用しない。 |
| AdapterName | CHAR | 260 | +12 | +8 | アダプタを一意に識別する名前のANSI文字列バッファである。 |
| Description | CHAR | 132 | +272 | +268 | アダプタの説明文を保持するANSI文字列バッファである。 |
| AddressLength | DWORD | 4 | +404 | +400 | Addressフィールドに格納された物理アドレスの長さ(バイト数)である。 |
| Address | BYTE | 8 | +408 | +404 | アダプタの物理(MAC)アドレスを保持するバイト配列である。 |
| Index | DWORD | 4 | +416 | +412 | このアダプタのインタフェースインデックスである。 |
| Type | DWORD | 4 | +420 | +416 | アダプタの種別(イーサネット、ループバック等)を示す。 |
| DhcpEnabled | DWORD | 4 | +424 | +420 | このアダプタでDHCPが有効かどうかを示す(0/非0)。 |
| CurrentIpAddress | IP_ADDR_STRING* | 8/4 | +432 | +424 | 現在のIPアドレスを指すポインタで予約済みである。 |
| IpAddressList | IP_ADDR_STRING | 48/40 | +440 | +428 | アダプタに割り当てられたIPv4アドレスの連結リストである。 |
| GatewayList | IP_ADDR_STRING | 48/40 | +488 | +468 | デフォルトゲートウェイのIPv4アドレス連結リストである。 |
| DhcpServer | IP_ADDR_STRING | 48/40 | +536 | +508 | DHCPサーバーのIPv4アドレスを保持する(DHCP有効時)。 |
| HaveWins | BOOL | 4 | +584 | +548 | WINSサーバーが構成されているかどうかを示すブール値である。 |
| PrimaryWinsServer | IP_ADDR_STRING | 48/40 | +592 | +552 | プライマリWINSサーバーのIPv4アドレスである。 |
| SecondaryWinsServer | IP_ADDR_STRING | 48/40 | +640 | +592 | セカンダリWINSサーバーのIPv4アドレスである。 |
| LeaseObtained | LONGLONG | 8 | +688 | +632 | DHCPリースを取得した時刻(time_t相当の64ビット値)である。 |
| LeaseExpires | LONGLONG | 8 | +696 | +640 | DHCPリースが満了する時刻(time_t相当の64ビット値)である。 |
各言語での定義
#include <windows.h>
// IP_ADDRESS_STRING (x64 16 / x86 16 バイト)
typedef struct IP_ADDRESS_STRING {
CHAR String[16];
} IP_ADDRESS_STRING;
// IP_ADDR_STRING (x64 48 / x86 40 バイト)
typedef struct IP_ADDR_STRING {
IP_ADDR_STRING* Next;
IP_ADDRESS_STRING IpAddress;
IP_ADDRESS_STRING IpMask;
DWORD Context;
} IP_ADDR_STRING;
// IP_ADAPTER_INFO (x64 704 / x86 648 バイト)
typedef struct IP_ADAPTER_INFO {
IP_ADAPTER_INFO* Next;
DWORD ComboIndex;
CHAR AdapterName[260];
CHAR Description[132];
DWORD AddressLength;
BYTE Address[8];
DWORD Index;
DWORD Type;
DWORD DhcpEnabled;
IP_ADDR_STRING* CurrentIpAddress;
IP_ADDR_STRING IpAddressList;
IP_ADDR_STRING GatewayList;
IP_ADDR_STRING DhcpServer;
BOOL HaveWins;
IP_ADDR_STRING PrimaryWinsServer;
IP_ADDR_STRING SecondaryWinsServer;
LONGLONG LeaseObtained;
LONGLONG LeaseExpires;
} IP_ADAPTER_INFO;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct IP_ADDRESS_STRING
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] public sbyte[] String;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct IP_ADDR_STRING
{
public IntPtr Next;
public IP_ADDRESS_STRING IpAddress;
public IP_ADDRESS_STRING IpMask;
public uint Context;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct IP_ADAPTER_INFO
{
public IntPtr Next;
public uint ComboIndex;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 260)] public sbyte[] AdapterName;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 132)] public sbyte[] Description;
public uint AddressLength;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] public byte[] Address;
public uint Index;
public uint Type;
public uint DhcpEnabled;
public IntPtr CurrentIpAddress;
public IP_ADDR_STRING IpAddressList;
public IP_ADDR_STRING GatewayList;
public IP_ADDR_STRING DhcpServer;
[MarshalAs(UnmanagedType.Bool)] public bool HaveWins;
public IP_ADDR_STRING PrimaryWinsServer;
public IP_ADDR_STRING SecondaryWinsServer;
public long LeaseObtained;
public long LeaseExpires;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure IP_ADDRESS_STRING
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=16)> Public String() As SByte
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure IP_ADDR_STRING
Public Next As IntPtr
Public IpAddress As IP_ADDRESS_STRING
Public IpMask As IP_ADDRESS_STRING
Public Context As UInteger
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure IP_ADAPTER_INFO
Public Next As IntPtr
Public ComboIndex As UInteger
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=260)> Public AdapterName() As SByte
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=132)> Public Description() As SByte
Public AddressLength As UInteger
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=8)> Public Address() As Byte
Public Index As UInteger
Public Type As UInteger
Public DhcpEnabled As UInteger
Public CurrentIpAddress As IntPtr
Public IpAddressList As IP_ADDR_STRING
Public GatewayList As IP_ADDR_STRING
Public DhcpServer As IP_ADDR_STRING
<MarshalAs(UnmanagedType.Bool)> Public HaveWins As Boolean
Public PrimaryWinsServer As IP_ADDR_STRING
Public SecondaryWinsServer As IP_ADDR_STRING
Public LeaseObtained As Long
Public LeaseExpires As Long
End Structureimport ctypes
from ctypes import wintypes
class IP_ADDRESS_STRING(ctypes.Structure):
_fields_ = [
("String", ctypes.c_byte * 16),
]
class IP_ADDR_STRING(ctypes.Structure):
_fields_ = [
("Next", ctypes.c_void_p),
("IpAddress", IP_ADDRESS_STRING),
("IpMask", IP_ADDRESS_STRING),
("Context", wintypes.DWORD),
]
class IP_ADAPTER_INFO(ctypes.Structure):
_fields_ = [
("Next", ctypes.c_void_p),
("ComboIndex", wintypes.DWORD),
("AdapterName", ctypes.c_byte * 260),
("Description", ctypes.c_byte * 132),
("AddressLength", wintypes.DWORD),
("Address", ctypes.c_ubyte * 8),
("Index", wintypes.DWORD),
("Type", wintypes.DWORD),
("DhcpEnabled", wintypes.DWORD),
("CurrentIpAddress", ctypes.c_void_p),
("IpAddressList", IP_ADDR_STRING),
("GatewayList", IP_ADDR_STRING),
("DhcpServer", IP_ADDR_STRING),
("HaveWins", wintypes.BOOL),
("PrimaryWinsServer", IP_ADDR_STRING),
("SecondaryWinsServer", IP_ADDR_STRING),
("LeaseObtained", ctypes.c_longlong),
("LeaseExpires", ctypes.c_longlong),
]#[repr(C)]
pub struct IP_ADDRESS_STRING {
pub String: [i8; 16],
}
#[repr(C)]
pub struct IP_ADDR_STRING {
pub Next: *mut core::ffi::c_void,
pub IpAddress: IP_ADDRESS_STRING,
pub IpMask: IP_ADDRESS_STRING,
pub Context: u32,
}
#[repr(C)]
pub struct IP_ADAPTER_INFO {
pub Next: *mut core::ffi::c_void,
pub ComboIndex: u32,
pub AdapterName: [i8; 260],
pub Description: [i8; 132],
pub AddressLength: u32,
pub Address: [u8; 8],
pub Index: u32,
pub Type: u32,
pub DhcpEnabled: u32,
pub CurrentIpAddress: *mut core::ffi::c_void,
pub IpAddressList: IP_ADDR_STRING,
pub GatewayList: IP_ADDR_STRING,
pub DhcpServer: IP_ADDR_STRING,
pub HaveWins: i32,
pub PrimaryWinsServer: IP_ADDR_STRING,
pub SecondaryWinsServer: IP_ADDR_STRING,
pub LeaseObtained: i64,
pub LeaseExpires: i64,
}import "golang.org/x/sys/windows"
type IP_ADDRESS_STRING struct {
String [16]int8
}
type IP_ADDR_STRING struct {
Next uintptr
IpAddress IP_ADDRESS_STRING
IpMask IP_ADDRESS_STRING
Context uint32
}
type IP_ADAPTER_INFO struct {
Next uintptr
ComboIndex uint32
AdapterName [260]int8
Description [132]int8
AddressLength uint32
Address [8]byte
Index uint32
Type uint32
DhcpEnabled uint32
CurrentIpAddress uintptr
IpAddressList IP_ADDR_STRING
GatewayList IP_ADDR_STRING
DhcpServer IP_ADDR_STRING
HaveWins int32
PrimaryWinsServer IP_ADDR_STRING
SecondaryWinsServer IP_ADDR_STRING
LeaseObtained int64
LeaseExpires int64
}type
IP_ADDRESS_STRING = record
String: array[0..15] of Shortint;
end;
IP_ADDR_STRING = record
Next: Pointer;
IpAddress: IP_ADDRESS_STRING;
IpMask: IP_ADDRESS_STRING;
Context: DWORD;
end;
IP_ADAPTER_INFO = record
Next: Pointer;
ComboIndex: DWORD;
AdapterName: array[0..259] of Shortint;
Description: array[0..131] of Shortint;
AddressLength: DWORD;
Address: array[0..7] of Byte;
Index: DWORD;
Type: DWORD;
DhcpEnabled: DWORD;
CurrentIpAddress: Pointer;
IpAddressList: IP_ADDR_STRING;
GatewayList: IP_ADDR_STRING;
DhcpServer: IP_ADDR_STRING;
HaveWins: BOOL;
PrimaryWinsServer: IP_ADDR_STRING;
SecondaryWinsServer: IP_ADDR_STRING;
LeaseObtained: Int64;
LeaseExpires: Int64;
end;const IP_ADDRESS_STRING = extern struct {
String: [16]i8,
};
const IP_ADDR_STRING = extern struct {
Next: ?*anyopaque,
IpAddress: IP_ADDRESS_STRING,
IpMask: IP_ADDRESS_STRING,
Context: u32,
};
const IP_ADAPTER_INFO = extern struct {
Next: ?*anyopaque,
ComboIndex: u32,
AdapterName: [260]i8,
Description: [132]i8,
AddressLength: u32,
Address: [8]u8,
Index: u32,
Type: u32,
DhcpEnabled: u32,
CurrentIpAddress: ?*anyopaque,
IpAddressList: IP_ADDR_STRING,
GatewayList: IP_ADDR_STRING,
DhcpServer: IP_ADDR_STRING,
HaveWins: i32,
PrimaryWinsServer: IP_ADDR_STRING,
SecondaryWinsServer: IP_ADDR_STRING,
LeaseObtained: i64,
LeaseExpires: i64,
};type
IP_ADDRESS_STRING {.bycopy.} = object
String: array[16, int8]
IP_ADDR_STRING {.bycopy.} = object
Next: pointer
IpAddress: IP_ADDRESS_STRING
IpMask: IP_ADDRESS_STRING
Context: uint32
IP_ADAPTER_INFO {.bycopy.} = object
Next: pointer
ComboIndex: uint32
AdapterName: array[260, int8]
Description: array[132, int8]
AddressLength: uint32
Address: array[8, uint8]
Index: uint32
Type: uint32
DhcpEnabled: uint32
CurrentIpAddress: pointer
IpAddressList: IP_ADDR_STRING
GatewayList: IP_ADDR_STRING
DhcpServer: IP_ADDR_STRING
HaveWins: int32
PrimaryWinsServer: IP_ADDR_STRING
SecondaryWinsServer: IP_ADDR_STRING
LeaseObtained: int64
LeaseExpires: int64struct IP_ADDRESS_STRING
{
byte[16] String;
}
struct IP_ADDR_STRING
{
void* Next;
IP_ADDRESS_STRING IpAddress;
IP_ADDRESS_STRING IpMask;
uint Context;
}
struct IP_ADAPTER_INFO
{
void* Next;
uint ComboIndex;
byte[260] AdapterName;
byte[132] Description;
uint AddressLength;
ubyte[8] Address;
uint Index;
uint Type;
uint DhcpEnabled;
void* CurrentIpAddress;
IP_ADDR_STRING IpAddressList;
IP_ADDR_STRING GatewayList;
IP_ADDR_STRING DhcpServer;
int HaveWins;
IP_ADDR_STRING PrimaryWinsServer;
IP_ADDR_STRING SecondaryWinsServer;
long LeaseObtained;
long LeaseExpires;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; IP_ADAPTER_INFO サイズ: 648 バイト(x86)
dim st, 162 ; 4byte整数×162(構造体サイズ 648 / 4 切り上げ)
; Next : IP_ADAPTER_INFO* (+0, 4byte) varptr(st)+0 を基点に操作(4byte:入れ子/配列)
; ComboIndex : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; AdapterName : CHAR (+8, 260byte) varptr(st)+8 を基点に操作(260byte:入れ子/配列)
; Description : CHAR (+268, 132byte) varptr(st)+268 を基点に操作(132byte:入れ子/配列)
; AddressLength : DWORD (+400, 4byte) st.100 = 値 / 値 = st.100 (lpoke/lpeek も可)
; Address : BYTE (+404, 8byte) varptr(st)+404 を基点に操作(8byte:入れ子/配列)
; Index : DWORD (+412, 4byte) st.103 = 値 / 値 = st.103 (lpoke/lpeek も可)
; Type : DWORD (+416, 4byte) st.104 = 値 / 値 = st.104 (lpoke/lpeek も可)
; DhcpEnabled : DWORD (+420, 4byte) st.105 = 値 / 値 = st.105 (lpoke/lpeek も可)
; CurrentIpAddress : IP_ADDR_STRING* (+424, 4byte) varptr(st)+424 を基点に操作(4byte:入れ子/配列)
; IpAddressList : IP_ADDR_STRING (+428, 40byte) varptr(st)+428 を基点に操作(40byte:入れ子/配列)
; GatewayList : IP_ADDR_STRING (+468, 40byte) varptr(st)+468 を基点に操作(40byte:入れ子/配列)
; DhcpServer : IP_ADDR_STRING (+508, 40byte) varptr(st)+508 を基点に操作(40byte:入れ子/配列)
; HaveWins : BOOL (+548, 4byte) st.137 = 値 / 値 = st.137 (lpoke/lpeek も可)
; PrimaryWinsServer : IP_ADDR_STRING (+552, 40byte) varptr(st)+552 を基点に操作(40byte:入れ子/配列)
; SecondaryWinsServer : IP_ADDR_STRING (+592, 40byte) varptr(st)+592 を基点に操作(40byte:入れ子/配列)
; LeaseObtained : LONGLONG (+632, 8byte) qpoke st,632,値 / qpeek(st,632) ※IronHSPのみ。3.7/3.8は lpoke st,632,下位 : lpoke st,636,上位
; LeaseExpires : LONGLONG (+640, 8byte) qpoke st,640,値 / qpeek(st,640) ※IronHSPのみ。3.7/3.8は lpoke st,640,下位 : lpoke st,644,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; IP_ADAPTER_INFO サイズ: 704 バイト(x64)
dim st, 176 ; 4byte整数×176(構造体サイズ 704 / 4 切り上げ)
; Next : IP_ADAPTER_INFO* (+0, 8byte) varptr(st)+0 を基点に操作(8byte:入れ子/配列)
; ComboIndex : DWORD (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; AdapterName : CHAR (+12, 260byte) varptr(st)+12 を基点に操作(260byte:入れ子/配列)
; Description : CHAR (+272, 132byte) varptr(st)+272 を基点に操作(132byte:入れ子/配列)
; AddressLength : DWORD (+404, 4byte) st.101 = 値 / 値 = st.101 (lpoke/lpeek も可)
; Address : BYTE (+408, 8byte) varptr(st)+408 を基点に操作(8byte:入れ子/配列)
; Index : DWORD (+416, 4byte) st.104 = 値 / 値 = st.104 (lpoke/lpeek も可)
; Type : DWORD (+420, 4byte) st.105 = 値 / 値 = st.105 (lpoke/lpeek も可)
; DhcpEnabled : DWORD (+424, 4byte) st.106 = 値 / 値 = st.106 (lpoke/lpeek も可)
; CurrentIpAddress : IP_ADDR_STRING* (+432, 8byte) varptr(st)+432 を基点に操作(8byte:入れ子/配列)
; IpAddressList : IP_ADDR_STRING (+440, 48byte) varptr(st)+440 を基点に操作(48byte:入れ子/配列)
; GatewayList : IP_ADDR_STRING (+488, 48byte) varptr(st)+488 を基点に操作(48byte:入れ子/配列)
; DhcpServer : IP_ADDR_STRING (+536, 48byte) varptr(st)+536 を基点に操作(48byte:入れ子/配列)
; HaveWins : BOOL (+584, 4byte) st.146 = 値 / 値 = st.146 (lpoke/lpeek も可)
; PrimaryWinsServer : IP_ADDR_STRING (+592, 48byte) varptr(st)+592 を基点に操作(48byte:入れ子/配列)
; SecondaryWinsServer : IP_ADDR_STRING (+640, 48byte) varptr(st)+640 を基点に操作(48byte:入れ子/配列)
; LeaseObtained : LONGLONG (+688, 8byte) qpoke st,688,値 / qpeek(st,688) ※IronHSPのみ。3.7/3.8は lpoke st,688,下位 : lpoke st,692,上位
; LeaseExpires : LONGLONG (+696, 8byte) qpoke st,696,値 / qpeek(st,696) ※IronHSPのみ。3.7/3.8は lpoke st,696,下位 : lpoke st,700,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global IP_ADDRESS_STRING
#field byte String 16
#endstruct
#defstruct global IP_ADDR_STRING
#field intptr Next
#field IP_ADDRESS_STRING IpAddress
#field IP_ADDRESS_STRING IpMask
#field int Context
#endstruct
#defstruct global IP_ADAPTER_INFO
#field intptr Next
#field int ComboIndex
#field byte AdapterName 260
#field byte Description 132
#field int AddressLength
#field byte Address 8
#field int Index
#field int Type
#field int DhcpEnabled
#field intptr CurrentIpAddress
#field IP_ADDR_STRING IpAddressList
#field IP_ADDR_STRING GatewayList
#field IP_ADDR_STRING DhcpServer
#field bool HaveWins
#field IP_ADDR_STRING PrimaryWinsServer
#field IP_ADDR_STRING SecondaryWinsServer
#field int64 LeaseObtained
#field int64 LeaseExpires
#endstruct
stdim st, IP_ADAPTER_INFO ; NSTRUCT 変数を確保
st->ComboIndex = 100
mes "ComboIndex=" + st->ComboIndex