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

RASCON_IPUI

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

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

フィールド

フィールドサイズx64x86説明
guidConnectionGUID16+0+0対象RAS接続を識別するGUIDを示す。
fIPv6CfgBOOL4+16+16IPv6構成を扱うかを示すフラグ。TRUEでIPv6設定が有効となる。
dwFlagsDWORD4+20+20IP設定の動作を制御するフラグを示す。
pszwIpAddrWCHAR32+24+24IPv4アドレスを表す文字列バッファを示す。
pszwDnsAddrWCHAR32+56+56プライマリDNSサーバーアドレスを表す文字列バッファを示す。
pszwDns2AddrWCHAR32+88+88セカンダリDNSサーバーアドレスを表す文字列バッファを示す。
pszwWinsAddrWCHAR32+120+120プライマリWINSサーバーアドレスを表す文字列バッファを示す。
pszwWins2AddrWCHAR32+152+152セカンダリWINSサーバーアドレスを表す文字列バッファを示す。
pszwDnsSuffixWCHAR512+184+184DNSサフィックスを表す文字列バッファを示す。
pszwIpv6AddrWCHAR130+696+696IPv6アドレスを表す文字列バッファを示す。
dwIpv6PrefixLengthDWORD4+828+828IPv6アドレスのプレフィックス長を示す。
pszwIpv6DnsAddrWCHAR130+832+832プライマリIPv6 DNSサーバーアドレスを表す文字列バッファを示す。
pszwIpv6Dns2AddrWCHAR130+962+962セカンダリIPv6 DNSサーバーアドレスを表す文字列バッファを示す。
dwIPv4InfMetricDWORD4+1092+1092IPv4インターフェイスのメトリック値を示す。経路選択に用いる。
dwIPv6InfMetricDWORD4+1096+1096IPv6インターフェイスのメトリック値を示す。経路選択に用いる。

各言語での定義

#include <windows.h>

// RASCON_IPUI  (x64 1100 / x86 1100 バイト)
typedef struct RASCON_IPUI {
    GUID guidConnection;
    BOOL fIPv6Cfg;
    DWORD dwFlags;
    WCHAR pszwIpAddr[16];
    WCHAR pszwDnsAddr[16];
    WCHAR pszwDns2Addr[16];
    WCHAR pszwWinsAddr[16];
    WCHAR pszwWins2Addr[16];
    WCHAR pszwDnsSuffix[256];
    WCHAR pszwIpv6Addr[65];
    DWORD dwIpv6PrefixLength;
    WCHAR pszwIpv6DnsAddr[65];
    WCHAR pszwIpv6Dns2Addr[65];
    DWORD dwIPv4InfMetric;
    DWORD dwIPv6InfMetric;
} RASCON_IPUI;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct RASCON_IPUI
{
    public Guid guidConnection;
    [MarshalAs(UnmanagedType.Bool)] public bool fIPv6Cfg;
    public uint dwFlags;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)] public string pszwIpAddr;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)] public string pszwDnsAddr;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)] public string pszwDns2Addr;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)] public string pszwWinsAddr;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)] public string pszwWins2Addr;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)] public string pszwDnsSuffix;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 65)] public string pszwIpv6Addr;
    public uint dwIpv6PrefixLength;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 65)] public string pszwIpv6DnsAddr;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 65)] public string pszwIpv6Dns2Addr;
    public uint dwIPv4InfMetric;
    public uint dwIPv6InfMetric;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure RASCON_IPUI
    Public guidConnection As Guid
    <MarshalAs(UnmanagedType.Bool)> Public fIPv6Cfg As Boolean
    Public dwFlags As UInteger
    <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=16)> Public pszwIpAddr As String
    <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=16)> Public pszwDnsAddr As String
    <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=16)> Public pszwDns2Addr As String
    <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=16)> Public pszwWinsAddr As String
    <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=16)> Public pszwWins2Addr As String
    <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=256)> Public pszwDnsSuffix As String
    <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=65)> Public pszwIpv6Addr As String
    Public dwIpv6PrefixLength As UInteger
    <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=65)> Public pszwIpv6DnsAddr As String
    <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=65)> Public pszwIpv6Dns2Addr As String
    Public dwIPv4InfMetric As UInteger
    Public dwIPv6InfMetric As UInteger
End Structure
import ctypes
from ctypes import wintypes

class RASCON_IPUI(ctypes.Structure):
    _fields_ = [
        ("guidConnection", GUID),
        ("fIPv6Cfg", wintypes.BOOL),
        ("dwFlags", wintypes.DWORD),
        ("pszwIpAddr", ctypes.c_wchar * 16),
        ("pszwDnsAddr", ctypes.c_wchar * 16),
        ("pszwDns2Addr", ctypes.c_wchar * 16),
        ("pszwWinsAddr", ctypes.c_wchar * 16),
        ("pszwWins2Addr", ctypes.c_wchar * 16),
        ("pszwDnsSuffix", ctypes.c_wchar * 256),
        ("pszwIpv6Addr", ctypes.c_wchar * 65),
        ("dwIpv6PrefixLength", wintypes.DWORD),
        ("pszwIpv6DnsAddr", ctypes.c_wchar * 65),
        ("pszwIpv6Dns2Addr", ctypes.c_wchar * 65),
        ("dwIPv4InfMetric", wintypes.DWORD),
        ("dwIPv6InfMetric", wintypes.DWORD),
    ]
#[repr(C)]
pub struct RASCON_IPUI {
    pub guidConnection: GUID,
    pub fIPv6Cfg: i32,
    pub dwFlags: u32,
    pub pszwIpAddr: [u16; 16],
    pub pszwDnsAddr: [u16; 16],
    pub pszwDns2Addr: [u16; 16],
    pub pszwWinsAddr: [u16; 16],
    pub pszwWins2Addr: [u16; 16],
    pub pszwDnsSuffix: [u16; 256],
    pub pszwIpv6Addr: [u16; 65],
    pub dwIpv6PrefixLength: u32,
    pub pszwIpv6DnsAddr: [u16; 65],
    pub pszwIpv6Dns2Addr: [u16; 65],
    pub dwIPv4InfMetric: u32,
    pub dwIPv6InfMetric: u32,
}
import "golang.org/x/sys/windows"

type RASCON_IPUI struct {
	guidConnection windows.GUID
	fIPv6Cfg int32
	dwFlags uint32
	pszwIpAddr [16]uint16
	pszwDnsAddr [16]uint16
	pszwDns2Addr [16]uint16
	pszwWinsAddr [16]uint16
	pszwWins2Addr [16]uint16
	pszwDnsSuffix [256]uint16
	pszwIpv6Addr [65]uint16
	dwIpv6PrefixLength uint32
	pszwIpv6DnsAddr [65]uint16
	pszwIpv6Dns2Addr [65]uint16
	dwIPv4InfMetric uint32
	dwIPv6InfMetric uint32
}
type
  RASCON_IPUI = record
    guidConnection: TGUID;
    fIPv6Cfg: BOOL;
    dwFlags: DWORD;
    pszwIpAddr: array[0..15] of WideChar;
    pszwDnsAddr: array[0..15] of WideChar;
    pszwDns2Addr: array[0..15] of WideChar;
    pszwWinsAddr: array[0..15] of WideChar;
    pszwWins2Addr: array[0..15] of WideChar;
    pszwDnsSuffix: array[0..255] of WideChar;
    pszwIpv6Addr: array[0..64] of WideChar;
    dwIpv6PrefixLength: DWORD;
    pszwIpv6DnsAddr: array[0..64] of WideChar;
    pszwIpv6Dns2Addr: array[0..64] of WideChar;
    dwIPv4InfMetric: DWORD;
    dwIPv6InfMetric: DWORD;
  end;
const RASCON_IPUI = extern struct {
    guidConnection: GUID,
    fIPv6Cfg: i32,
    dwFlags: u32,
    pszwIpAddr: [16]u16,
    pszwDnsAddr: [16]u16,
    pszwDns2Addr: [16]u16,
    pszwWinsAddr: [16]u16,
    pszwWins2Addr: [16]u16,
    pszwDnsSuffix: [256]u16,
    pszwIpv6Addr: [65]u16,
    dwIpv6PrefixLength: u32,
    pszwIpv6DnsAddr: [65]u16,
    pszwIpv6Dns2Addr: [65]u16,
    dwIPv4InfMetric: u32,
    dwIPv6InfMetric: u32,
};
type
  RASCON_IPUI {.bycopy.} = object
    guidConnection: GUID
    fIPv6Cfg: int32
    dwFlags: uint32
    pszwIpAddr: array[16, uint16]
    pszwDnsAddr: array[16, uint16]
    pszwDns2Addr: array[16, uint16]
    pszwWinsAddr: array[16, uint16]
    pszwWins2Addr: array[16, uint16]
    pszwDnsSuffix: array[256, uint16]
    pszwIpv6Addr: array[65, uint16]
    dwIpv6PrefixLength: uint32
    pszwIpv6DnsAddr: array[65, uint16]
    pszwIpv6Dns2Addr: array[65, uint16]
    dwIPv4InfMetric: uint32
    dwIPv6InfMetric: uint32
struct RASCON_IPUI
{
    GUID guidConnection;
    int fIPv6Cfg;
    uint dwFlags;
    wchar[16] pszwIpAddr;
    wchar[16] pszwDnsAddr;
    wchar[16] pszwDns2Addr;
    wchar[16] pszwWinsAddr;
    wchar[16] pszwWins2Addr;
    wchar[256] pszwDnsSuffix;
    wchar[65] pszwIpv6Addr;
    uint dwIpv6PrefixLength;
    wchar[65] pszwIpv6DnsAddr;
    wchar[65] pszwIpv6Dns2Addr;
    uint dwIPv4InfMetric;
    uint dwIPv6InfMetric;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; RASCON_IPUI サイズ: 1100 バイト(x64)
dim st, 275    ; 4byte整数×275(構造体サイズ 1100 / 4 切り上げ)
; guidConnection : GUID (+0, 16byte)  varptr(st)+0 を基点に操作(16byte:入れ子/配列)
; fIPv6Cfg : BOOL (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; dwFlags : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; pszwIpAddr : WCHAR (+24, 32byte)  varptr(st)+24 を基点に操作(32byte:入れ子/配列)
; pszwDnsAddr : WCHAR (+56, 32byte)  varptr(st)+56 を基点に操作(32byte:入れ子/配列)
; pszwDns2Addr : WCHAR (+88, 32byte)  varptr(st)+88 を基点に操作(32byte:入れ子/配列)
; pszwWinsAddr : WCHAR (+120, 32byte)  varptr(st)+120 を基点に操作(32byte:入れ子/配列)
; pszwWins2Addr : WCHAR (+152, 32byte)  varptr(st)+152 を基点に操作(32byte:入れ子/配列)
; pszwDnsSuffix : WCHAR (+184, 512byte)  varptr(st)+184 を基点に操作(512byte:入れ子/配列)
; pszwIpv6Addr : WCHAR (+696, 130byte)  varptr(st)+696 を基点に操作(130byte:入れ子/配列)
; dwIpv6PrefixLength : DWORD (+828, 4byte)  st.207 = 値  /  値 = st.207   (lpoke/lpeek も可)
; pszwIpv6DnsAddr : WCHAR (+832, 130byte)  varptr(st)+832 を基点に操作(130byte:入れ子/配列)
; pszwIpv6Dns2Addr : WCHAR (+962, 130byte)  varptr(st)+962 を基点に操作(130byte:入れ子/配列)
; dwIPv4InfMetric : DWORD (+1092, 4byte)  st.273 = 値  /  値 = st.273   (lpoke/lpeek も可)
; dwIPv6InfMetric : DWORD (+1096, 4byte)  st.274 = 値  /  値 = st.274   (lpoke/lpeek も可)
; ※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 RASCON_IPUI
    #field GUID guidConnection
    #field bool fIPv6Cfg
    #field int dwFlags
    #field wchar pszwIpAddr 16
    #field wchar pszwDnsAddr 16
    #field wchar pszwDns2Addr 16
    #field wchar pszwWinsAddr 16
    #field wchar pszwWins2Addr 16
    #field wchar pszwDnsSuffix 256
    #field wchar pszwIpv6Addr 65
    #field int dwIpv6PrefixLength
    #field wchar pszwIpv6DnsAddr 65
    #field wchar pszwIpv6Dns2Addr 65
    #field int dwIPv4InfMetric
    #field int dwIPv6InfMetric
#endstruct

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