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

MPR_INTERFACE_3

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

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

フィールド

フィールドサイズx64x86説明
wszInterfaceNameWCHAR514+0+0インターフェイスの名前を格納する Unicode 文字列へのポインターです。
hInterfaceHANDLE8/4+520+516インターフェイスのハンドルです。
fEnabledBOOL4+528+520インターフェイスが有効かどうかを指定する値です。インターフェイスが有効な場合は TRUE、管理上無効にされている場合は FALSE です。
dwIfTypeROUTER_INTERFACE_TYPE4+532+524インターフェイスの種類を識別する値です。
dwConnectionStateROUTER_CONNECTION_STATE4+536+528インターフェイスの現在の状態 (接続済み、切断、到達不能など) を表す値です。詳細と指定できる状態の一覧については、 ROUTER_CONNECTION_STATE を参照してください。
fUnReachabilityReasonsDWORD4+540+532インターフェイスが到達不能である理由を表す値です。詳細と指定できる値の一覧については、Unreachability Reasons を参照してください。
dwLastErrorDWORD4+544+536インターフェイスの接続に失敗した場合に 0 以外の値が格納されます。
dwfOptionsDWORD4+548+540

接続オプションを設定するために使用するビット フラグを指定する値です。次の表に示すフラグのいずれかを設定できます。

フラグ 意味
MPRIO_SpecificIpAddr
このフラグが設定されている場合、RRAS はダイヤルアップ接続の IP アドレスとして ipaddr で指定された IP アドレスの使用を試みます。このフラグが設定されていない場合、ipaddr メンバーの値は無視されます。

MPRIO_SpecificIpAddr フラグを設定することは、TCP/IP 設定ダイアログ ボックスで Specify an IP Address の設定を選択することに相当します。MPRIO_SpecificIpAddr フラグをクリアすることは、TCP/IP Settings ダイアログ ボックスで Server Assigned IP Address の設定を選択することに相当します。

現時点では、電話帳エントリのプロパティで設定された IP アドレス、またはサーバーから取得した IP アドレスが、ネットワーク コントロール パネルで設定された IP アドレスよりも優先されます。

MPRIO_SpecificNameServers
このフラグが設定されている場合、RRAS は ipaddrDnsipaddrDnsAltipaddrWinsipaddrWinsAlt の各メンバーを使用して、ダイヤルアップ接続のネーム サーバー アドレスを指定します。このフラグが設定されていない場合、RRAS はこれらのメンバーを無視します。

MPRIO_SpecificNameServers フラグを設定することは、TCP/IP Settings ダイアログ ボックスで Specify Name Server Addresses の設定を選択することに相当します。MPRIO_SpecificNameServers フラグをクリアすることは、TCP/IP Settings ダイアログ ボックスで Server Assigned Name Server Addresses の設定を選択することに相当します。

MPRIO_IpHeaderCompression
このフラグが設定されている場合、RRAS は PPP 接続で IP ヘッダー圧縮を使用するようネゴシエートします。IP ヘッダー圧縮によってパフォーマンスが大幅に向上する場合があります。

このフラグが設定されていない場合、IP ヘッダー圧縮はネゴシエートされません。

このフラグは、TCP/IP Settings ダイアログ ボックスの Use IP Header Compression チェック ボックスに対応します。このフラグは、IP ヘッダー圧縮を正しくネゴシエートできないサーバーに接続する場合にのみクリアしてください。

MPRIO_RemoteDefaultGateway
このフラグが設定されている場合、接続がアクティブな間、IP パケットの既定のルートはダイヤルアップ アダプター経由になります。このフラグがクリアされている場合、既定のルートは変更されません。

このフラグは、TCP/IP Settings ダイアログ ボックスの Use Default Gateway on Remote Network チェック ボックスに対応します。

MPRIO_DisableLcpExtensions
このフラグが設定されている場合、RRAS は RFC 1570 で定義されている PPP LCP 拡張を無効にします。一部の古い PPP 実装に接続するには PPP LCP 拡張の無効化が必要になることがありますが、サーバー コールバックなどの機能に支障が生じます。特に必要な場合を除き、このフラグは設定しないでください。
MPRIO_SwCompression
このフラグが設定されている場合、リンク上でソフトウェア圧縮がネゴシエートされます。このフラグを設定すると、PPP ドライバーはサーバーと圧縮制御プロトコル (CCP) のネゴシエーションを試みます。このフラグは既定で設定しておくべきですが、サーバーが互換性のある圧縮プロトコルをサポートしていない場合は、クリアすることでネゴシエーションの時間を短縮できます。
MPRIO_RequireEncryptedPw
このフラグが設定されている場合、クライアントをサーバーに対して認証するために、セキュリティで保護されたパスワード方式のみを使用できます。これにより、PPP ドライバーはクライアントの認証に PAP プレーンテキスト認証プロトコルを使用できなくなります。ただし、MS-CHAP、MD5-CHAP、SPAP の各認証プロトコルはサポートされます。セキュリティを高めるにはこのフラグを設定し、相互運用性を高めるにはこのフラグをクリアします。

このフラグは、Security ダイアログ ボックスの Require Encrypted Password チェック ボックスに対応します。詳細については、MPRIO_RequireMsEncryptedPw を参照してください。

MPRIO_RequireMsEncryptedPw
このフラグが設定されている場合、クライアントをサーバーに対して認証するために、Microsoft のセキュリティで保護されたパスワード方式のみを使用できます。これにより、PPP ドライバーは PAP プレーンテキスト認証プロトコル、MD5-CHAP、SPAP を使用できなくなります。セキュリティを高めるにはこのフラグを設定し、相互運用性を高めるにはこのフラグをクリアします。このフラグは MPRIO_RequireEncryptedPw よりも優先されます。

このフラグは、Security ダイアログ ボックスの Require Microsoft Encrypted Password チェック ボックスに対応します。詳細については、MPRIO_RequireDataEncryption を参照してください。

MPRIO_RequireDataEncryption
このフラグが設定されている場合、データ暗号化のネゴシエーションが成功する必要があり、成功しない場合は接続を切断します。 MPRIO_RequireMsEncryptedPw も設定されていない限り、このフラグは無視されます。

このフラグは、Security ダイアログ ボックスの Require Data Encryption チェック ボックスに対応します。

MPRIO_NetworkLogon
このフラグは将来の使用のために予約されています。
MPRIO_UseLogonCredentials
このフラグが設定されている場合、RRAS はこのエントリをダイヤルする際に、現在ログオンしているユーザーのユーザー名、パスワード、ドメインを使用します。 MPRIO_RequireMsEncryptedPw も設定されていない限り、このフラグは無視されます。

この設定は RasDial 関数では無視されます。同関数では、 RASDIALPARAMS 構造体の szUserName メンバーと szPassword メンバーに空の文字列を指定することで同じ結果が得られます。

このフラグは、Security ダイアログ ボックスの Use Current Username and Password チェック ボックスに対応します。

MPRIO_PromoteAlternates
このフラグは、szAlternates メンバーで代替電話番号が定義されている場合に効果があります。このフラグが設定されている場合、接続に成功した代替電話番号がプライマリ電話番号になり、それまでのプライマリ電話番号は代替リストに移動されます。

このフラグは、Alternate Numbers ダイアログ ボックスのチェック ボックスに対応します。

MPRIO_SecureLocalFiles
このフラグが設定されている場合、RRAS はこのエントリで接続を確立する前に、既存のリモート ファイル システムおよびリモート プリンターのバインドを確認します。通常、このフラグはパブリック ネットワーク用の電話帳エントリに設定し、パブリック ネットワークに接続する前にプライベート ネットワークへの接続を切断するようユーザーに促します。
MPRIO_RequireEAP
このフラグが設定されている場合、認証に拡張認証プロトコル (EAP) がサポートされている必要があります。
MPRIO_RequirePAP
このフラグが設定されている場合、認証に Password Authentication Protocol がサポートされている必要があります。
MPRIO_RequireSPAP
このフラグが設定されている場合、認証に Shiva Password Authentication Protocol (SPAP) がサポートされている必要があります。
MPRIO_SharedPhoneNumbers
このフラグが設定されている場合、電話番号が共有されます。
MPRIO_RequireCHAP
このフラグが設定されている場合、認証に Challenge Handshake Authentication Protocol がサポートされている必要があります。
MPRIO_RequireMsCHAP
このフラグが設定されている場合、認証に Microsoft Challenge Handshake Authentication Protocol がサポートされている必要があります。
MPRIO_RequireMsCHAP2
このフラグが設定されている場合、認証に Microsoft Challenge Handshake Authentication Protocol のバージョン 2 がサポートされている必要があります。
szLocalPhoneNumberWCHAR258+552+544電話番号または IPv6 アドレスを格納する null 終端文字列を指定する値です。
szAlternatesLPWSTR8/4+816+804連続する null 終端 Unicode 文字列のリストへのポインターです。最後の文字列は 2 つの連続する null 文字で終端されます。これらの文字列は、プライマリ番号での接続に失敗した場合にルーターがリストの順序でダイヤルする代替電話番号です。詳細については、szLocalPhoneNumber を参照してください。
ipaddrDWORD4+824+808この接続がアクティブな間に使用する IP アドレスを指定する値です。dwfOptionsMPRIO_SpecificIpAddr フラグが指定されていない限り、このメンバーは無視されます。
ipaddrDnsDWORD4+828+812この接続がアクティブな間に使用する DNS サーバーの IP アドレスを指定する値です。dwfOptionsMPRIO_SpecificNameServers フラグが指定されていない限り、このメンバーは無視されます。
ipaddrDnsAltDWORD4+832+816この接続がアクティブな間に使用するセカンダリまたはバックアップ DNS サーバーの IP アドレスを指定する値です。dwfOptionsMPRIO_SpecificNameServers フラグが指定されていない限り、このメンバーは無視されます。
ipaddrWinsDWORD4+836+820この接続がアクティブな間に使用する WINS サーバーの IP アドレスを指定する値です。dwfOptionsMPRIO_SpecificNameServers フラグが指定されていない限り、このメンバーは無視されます。
ipaddrWinsAltDWORD4+840+824この接続がアクティブな間に使用するセカンダリ WINS サーバーの IP アドレスを指定する値です。dwfOptionsMPRIO_SpecificNameServers フラグが指定されていない限り、このメンバーは無視されます。
dwfNetProtocolsDWORD4+844+828

ネゴシエートするネットワーク プロトコルを指定する値です。このメンバーには、次のフラグの組み合わせを指定できます。

フラグ 意味
MPRNP_Ipx
IPX プロトコルをネゴシエートします。
MPRNP_Ip
TCP/IP プロトコルをネゴシエートします。
 

64-bit Windows:  MPRNP_Ipx フラグはサポートされません

szDeviceTypeWCHAR34+848+832

szDeviceName が参照する RRAS デバイスの種類を示す null 終端文字列を指定する値です。このメンバーには、次の文字列定数のいずれかを指定できます。

文字列 意味
MPRDT_Modem
COM ポート経由でアクセスするモデムです。
MPRDT_Isdn
対応する NDISWAN ドライバーがインストールされた ISDN アダプターです。
MPRDT_X25
対応する NDISWAN ドライバーがインストールされた X.25 アダプターです。
MPRDT_Vpn
仮想プライベート ネットワーク (VPN) 接続です。
MPRDT_Pad
パケット アセンブラー/ディスアセンブラーです。
MPRDT_Generic
汎用です。
MPRDT_Serial
シリアル ポート経由の直接シリアル接続です。
MPRDT_FrameRelay
フレーム リレーです。
MPRDT_Atm
非同期転送モード (ATM) です。
MPRDT_Sonet
Sonet です。
MPRDT_SW56
Switched 56K アクセスです。
MPRDT_Irda
Infrared Data Association (IrDA) 準拠のデバイスです。
MPRDT_Parallel
パラレル ポート経由の直接パラレル接続です。
szDeviceNameWCHAR258+882+866この電話帳エントリで使用する TAPI デバイスの名前 (例: "Fabrikam Inc 28800 External") を格納する null 終端文字列です。使用可能なすべての RAS 対応デバイスを列挙するには、 RasEnumDevices 関数を使用します。
szX25PadTypeWCHAR66+1140+1124

X.25 PAD の種類を示す null 終端文字列を格納するデータ型です。エントリが X.25 PAD を使用してダイヤルする場合を除き、このメンバーには空の文字列 ("") を設定します。

Windows 2000 and Windows NT:  szX25PadType 文字列は PAD.INF 内のセクション名に対応します。

szX25AddressWCHAR402+1206+1190接続先の X.25 アドレスを示す null 終端文字列を格納します。エントリが X.25 PAD またはネイティブ X.25 デバイスを使用してダイヤルする場合を除き、このメンバーには空の文字列 ("") を設定します。
szX25FacilitiesWCHAR402+1608+1592接続時に X.25 ホストに要求する機能を指定する null 終端文字列を格納します。szX25Address が空の文字列 ("") の場合、このメンバーは無視されます。
szX25UserDataWCHAR402+2010+1994接続時に X.25 ホストに提供する追加の接続データを指定する null 終端文字列を格納します。szX25Address が空の文字列 ("") の場合、このメンバーは無視されます。
dwChannelsDWORD4+2412+2396将来の使用のために予約されています。
dwSubEntriesDWORD4+2416+2400このエントリに関連付けられているマルチリンク サブエントリの数を指定する値です。 RasSetEntryProperties を呼び出すときは、このメンバーに 0 を設定します。電話帳エントリにサブエントリを追加するには、 RasSetSubEntryProperties 関数を使用します。
dwDialModeMPR_INTERFACE_DIAL_MODE4+2420+2404

エントリが最初に接続されるときに、RRAS がこのエントリのすべてのマルチリンク サブエントリをダイヤルするかどうかを示します。このメンバーには、次の値のいずれかを指定できます。

意味
MPRDM_DialAll
最初にすべてのサブエントリをダイヤルします。
MPRDM_DialAsNeeded
必要な帯域幅に応じてサブエントリの数を調整します。RRAS は dwDialExtraPercentdwDialExtraSampleSecondsdwDialHangUpExtraPercentdwHangUpExtraSampleSeconds の各メンバーを使用して、サブエントリをダイヤルまたは切断するタイミングを判断します。
dwDialExtraPercentDWORD4+2424+2408

現在接続されているサブエントリから利用できる合計帯域幅に対する割合を指定する値です。使用中の合計帯域幅が、利用可能な帯域幅の dwDialExtraPercent パーセントを dwDialExtraSampleSeconds 秒以上超えた場合、RRAS は追加のサブエントリをダイヤルします。

dwDialMode メンバーで MPRDM_DialAsNeeded フラグが指定されていない限り、このメンバーは無視されます。

dwDialExtraSampleSecondsDWORD4+2428+2412

RRAS が追加のサブエントリをダイヤルするまでに、現在の帯域幅使用量が dwDialExtraPercent で指定されたしきい値を超えている必要がある時間を秒単位で指定する値です。

dwDialMode メンバーで MPRDM_DialAsNeeded フラグが指定されていない限り、このメンバーは無視されます。

dwHangUpExtraPercentDWORD4+2432+2416

現在接続されているサブエントリから利用できる合計帯域幅に対する割合を指定する値です。使用中の合計帯域幅が、利用可能な帯域幅の dwHangUpExtraPercent パーセントを dwHangUpExtraSampleSeconds 秒以上下回った場合、RRAS は既存のサブエントリ接続を切断します。

dwDialMode メンバーで MPRDM_DialAsNeeded フラグが指定されていない限り、このメンバーは無視されます。

dwHangUpExtraSampleSecondsDWORD4+2436+2420

RRAS が既存のサブエントリ接続を切断するまでに、現在の帯域幅使用量が dwHangUpExtraPercent で指定されたしきい値を下回っている必要がある時間を秒単位で指定する値です。

dwDialMode メンバーで MPRDM_DialAsNeeded フラグが指定されていない限り、このメンバーは無視されます。

dwIdleDisconnectSecondsDWORD4+2440+2424

非アクティブな接続を切断するまでの時間を秒単位で指定する値です。アイドル タイムアウトが無効になっていない限り、指定した間隔だけ接続がアイドル状態になると接続全体が切断されます。このメンバーには、タイムアウト値または次の値のいずれかを指定できます。

意味
MPRIDS_Disabled
この接続にはアイドル タイムアウトがありません。
MPRIDS_UseGlobalValue
ユーザー設定の値を既定値として使用します。
dwTypeDWORD4+2444+2428

電話帳エントリの種類を指定する値です。このメンバーには、次の種類のいずれかを指定できます。

種類 意味
MPRET_Phone
電話回線 (モデム、ISDN、X.25 など) です。
MPRET_Vpn
仮想プライベート ネットワークです。
MPRET_Direct
直接シリアル接続または直接パラレル接続です。
dwEncryptionTypeMPR_ET4+2448+2432

この接続で Microsoft Point-to-Point Encryption (MPPE) に使用する暗号化の種類を指定する値です。このメンバーには、次の値のいずれかを指定できます。

意味
MPR_ET_None
暗号化を使用しません。
MPR_ET_Require
暗号化を使用します。
MPR_ET_RequireMax
最大強度の暗号化を使用します。
MPR_ET_Optional
可能であれば暗号化を使用します。
 

dwEncryptionType の値は、パスワードの暗号化方法には影響しません。パスワードを暗号化するかどうか、およびどのように暗号化するかは、PAP、MS-CHAP、EAP などの認証プロトコルによって決まります。

dwCustomAuthKeyDWORD4+2452+2436拡張認証プロトコル (EAP) のベンダーに提供する認証キーを指定する値です。
dwCustomAuthDataSizeDWORD4+2456+2440lpbCustomAuthData メンバーが指すデータのサイズを指定する値です。
lpbCustomAuthDataBYTE*8/4+2464+2444EAP で使用する認証データへのポインターです。
guidIdGUID16+2472+2448この電話帳エントリを表すグローバル一意識別子 (GUID) です。このメンバーは読み取り専用です。
dwVpnStrategyMPR_VS4+2488+2464

VPN 接続をダイヤルするときに使用する VPN 戦略です。このメンバーには、次の値のいずれかを指定できます。

意味
MPR_VS_Default
RRAS は最初に PPTP でダイヤルします。PPTP が失敗した場合は L2TP を試行します。成功したプロトコルは、このエントリの以降のダイヤルで最初に試行されます。
MPR_VS_PptpOnly
RAS は PPTP のみでダイヤルします。
MPR_VS_PptpFirst
RAS は常に PPTP を最初に、L2TP を 2 番目にダイヤルします。
MPR_VS_L2tpOnly
RAS は L2TP のみでダイヤルします。
MPR_VS_L2tpFirst
RAS は L2TP を最初に、PPTP を 2 番目にダイヤルします。
AddressCountDWORD4+2492+2468使用されません。
ipv6addrDnsIN6_ADDR16+2496+2472この接続がアクティブな間に使用する DNS サーバーの IP アドレスを指定する値です。
ipv6addrDnsAltIN6_ADDR16+2512+2488この接続がアクティブな間に使用するセカンダリまたはバックアップ DNS サーバーの IP アドレスを指定する値です。
ipv6addrIN6_ADDR*8/4+2528+2504使用されません。

公式ドキュメント

MPR_INTERFACE_3 構造体は、ルーターのデマンドダイヤル インターフェイスのデータを格納します。

解説(Remarks)

MPR_INTERFACE_3 構造体には、 RASENTRY 構造体のメンバーと類似したメンバーが多数あります。

RASENTRY 構造体の次のメンバーには、 MPR_INTERFACE_3 に対応するものがありません。

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

各言語での定義

#include <windows.h>

// IN6_ADDR  (x64 16 / x86 16 バイト)
typedef struct IN6_ADDR {
    _u_e__Union u;
} IN6_ADDR;

// MPR_INTERFACE_3  (x64 2536 / x86 2508 バイト)
typedef struct MPR_INTERFACE_3 {
    WCHAR wszInterfaceName[257];
    HANDLE hInterface;
    BOOL fEnabled;
    ROUTER_INTERFACE_TYPE dwIfType;
    ROUTER_CONNECTION_STATE dwConnectionState;
    DWORD fUnReachabilityReasons;
    DWORD dwLastError;
    DWORD dwfOptions;
    WCHAR szLocalPhoneNumber[129];
    LPWSTR szAlternates;
    DWORD ipaddr;
    DWORD ipaddrDns;
    DWORD ipaddrDnsAlt;
    DWORD ipaddrWins;
    DWORD ipaddrWinsAlt;
    DWORD dwfNetProtocols;
    WCHAR szDeviceType[17];
    WCHAR szDeviceName[129];
    WCHAR szX25PadType[33];
    WCHAR szX25Address[201];
    WCHAR szX25Facilities[201];
    WCHAR szX25UserData[201];
    DWORD dwChannels;
    DWORD dwSubEntries;
    MPR_INTERFACE_DIAL_MODE dwDialMode;
    DWORD dwDialExtraPercent;
    DWORD dwDialExtraSampleSeconds;
    DWORD dwHangUpExtraPercent;
    DWORD dwHangUpExtraSampleSeconds;
    DWORD dwIdleDisconnectSeconds;
    DWORD dwType;
    MPR_ET dwEncryptionType;
    DWORD dwCustomAuthKey;
    DWORD dwCustomAuthDataSize;
    BYTE* lpbCustomAuthData;
    GUID guidId;
    MPR_VS dwVpnStrategy;
    DWORD AddressCount;
    IN6_ADDR ipv6addrDns;
    IN6_ADDR ipv6addrDnsAlt;
    IN6_ADDR* ipv6addr;
} MPR_INTERFACE_3;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct IN6_ADDR
{
    public _u_e__Union u;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct MPR_INTERFACE_3
{
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 257)] public string wszInterfaceName;
    public IntPtr hInterface;
    [MarshalAs(UnmanagedType.Bool)] public bool fEnabled;
    public int dwIfType;
    public int dwConnectionState;
    public uint fUnReachabilityReasons;
    public uint dwLastError;
    public uint dwfOptions;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 129)] public string szLocalPhoneNumber;
    public IntPtr szAlternates;
    public uint ipaddr;
    public uint ipaddrDns;
    public uint ipaddrDnsAlt;
    public uint ipaddrWins;
    public uint ipaddrWinsAlt;
    public uint dwfNetProtocols;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 17)] public string szDeviceType;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 129)] public string szDeviceName;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 33)] public string szX25PadType;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 201)] public string szX25Address;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 201)] public string szX25Facilities;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 201)] public string szX25UserData;
    public uint dwChannels;
    public uint dwSubEntries;
    public uint dwDialMode;
    public uint dwDialExtraPercent;
    public uint dwDialExtraSampleSeconds;
    public uint dwHangUpExtraPercent;
    public uint dwHangUpExtraSampleSeconds;
    public uint dwIdleDisconnectSeconds;
    public uint dwType;
    public uint dwEncryptionType;
    public uint dwCustomAuthKey;
    public uint dwCustomAuthDataSize;
    public IntPtr lpbCustomAuthData;
    public Guid guidId;
    public uint dwVpnStrategy;
    public uint AddressCount;
    public IN6_ADDR ipv6addrDns;
    public IN6_ADDR ipv6addrDnsAlt;
    public IntPtr ipv6addr;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure IN6_ADDR
    Public u As _u_e__Union
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure MPR_INTERFACE_3
    <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=257)> Public wszInterfaceName As String
    Public hInterface As IntPtr
    <MarshalAs(UnmanagedType.Bool)> Public fEnabled As Boolean
    Public dwIfType As Integer
    Public dwConnectionState As Integer
    Public fUnReachabilityReasons As UInteger
    Public dwLastError As UInteger
    Public dwfOptions As UInteger
    <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=129)> Public szLocalPhoneNumber As String
    Public szAlternates As IntPtr
    Public ipaddr As UInteger
    Public ipaddrDns As UInteger
    Public ipaddrDnsAlt As UInteger
    Public ipaddrWins As UInteger
    Public ipaddrWinsAlt As UInteger
    Public dwfNetProtocols As UInteger
    <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=17)> Public szDeviceType As String
    <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=129)> Public szDeviceName As String
    <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=33)> Public szX25PadType As String
    <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=201)> Public szX25Address As String
    <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=201)> Public szX25Facilities As String
    <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=201)> Public szX25UserData As String
    Public dwChannels As UInteger
    Public dwSubEntries As UInteger
    Public dwDialMode As UInteger
    Public dwDialExtraPercent As UInteger
    Public dwDialExtraSampleSeconds As UInteger
    Public dwHangUpExtraPercent As UInteger
    Public dwHangUpExtraSampleSeconds As UInteger
    Public dwIdleDisconnectSeconds As UInteger
    Public dwType As UInteger
    Public dwEncryptionType As UInteger
    Public dwCustomAuthKey As UInteger
    Public dwCustomAuthDataSize As UInteger
    Public lpbCustomAuthData As IntPtr
    Public guidId As Guid
    Public dwVpnStrategy As UInteger
    Public AddressCount As UInteger
    Public ipv6addrDns As IN6_ADDR
    Public ipv6addrDnsAlt As IN6_ADDR
    Public ipv6addr As IntPtr
End Structure
import ctypes
from ctypes import wintypes

class IN6_ADDR(ctypes.Structure):
    _fields_ = [
        ("u", _u_e__Union),
    ]

class MPR_INTERFACE_3(ctypes.Structure):
    _fields_ = [
        ("wszInterfaceName", ctypes.c_wchar * 257),
        ("hInterface", ctypes.c_void_p),
        ("fEnabled", wintypes.BOOL),
        ("dwIfType", ctypes.c_int),
        ("dwConnectionState", ctypes.c_int),
        ("fUnReachabilityReasons", wintypes.DWORD),
        ("dwLastError", wintypes.DWORD),
        ("dwfOptions", wintypes.DWORD),
        ("szLocalPhoneNumber", ctypes.c_wchar * 129),
        ("szAlternates", ctypes.c_void_p),
        ("ipaddr", wintypes.DWORD),
        ("ipaddrDns", wintypes.DWORD),
        ("ipaddrDnsAlt", wintypes.DWORD),
        ("ipaddrWins", wintypes.DWORD),
        ("ipaddrWinsAlt", wintypes.DWORD),
        ("dwfNetProtocols", wintypes.DWORD),
        ("szDeviceType", ctypes.c_wchar * 17),
        ("szDeviceName", ctypes.c_wchar * 129),
        ("szX25PadType", ctypes.c_wchar * 33),
        ("szX25Address", ctypes.c_wchar * 201),
        ("szX25Facilities", ctypes.c_wchar * 201),
        ("szX25UserData", ctypes.c_wchar * 201),
        ("dwChannels", wintypes.DWORD),
        ("dwSubEntries", wintypes.DWORD),
        ("dwDialMode", wintypes.DWORD),
        ("dwDialExtraPercent", wintypes.DWORD),
        ("dwDialExtraSampleSeconds", wintypes.DWORD),
        ("dwHangUpExtraPercent", wintypes.DWORD),
        ("dwHangUpExtraSampleSeconds", wintypes.DWORD),
        ("dwIdleDisconnectSeconds", wintypes.DWORD),
        ("dwType", wintypes.DWORD),
        ("dwEncryptionType", wintypes.DWORD),
        ("dwCustomAuthKey", wintypes.DWORD),
        ("dwCustomAuthDataSize", wintypes.DWORD),
        ("lpbCustomAuthData", ctypes.c_void_p),
        ("guidId", GUID),
        ("dwVpnStrategy", wintypes.DWORD),
        ("AddressCount", wintypes.DWORD),
        ("ipv6addrDns", IN6_ADDR),
        ("ipv6addrDnsAlt", IN6_ADDR),
        ("ipv6addr", ctypes.c_void_p),
    ]
#[repr(C)]
pub struct IN6_ADDR {
    pub u: _u_e__Union,
}

#[repr(C)]
pub struct MPR_INTERFACE_3 {
    pub wszInterfaceName: [u16; 257],
    pub hInterface: *mut core::ffi::c_void,
    pub fEnabled: i32,
    pub dwIfType: i32,
    pub dwConnectionState: i32,
    pub fUnReachabilityReasons: u32,
    pub dwLastError: u32,
    pub dwfOptions: u32,
    pub szLocalPhoneNumber: [u16; 129],
    pub szAlternates: *mut core::ffi::c_void,
    pub ipaddr: u32,
    pub ipaddrDns: u32,
    pub ipaddrDnsAlt: u32,
    pub ipaddrWins: u32,
    pub ipaddrWinsAlt: u32,
    pub dwfNetProtocols: u32,
    pub szDeviceType: [u16; 17],
    pub szDeviceName: [u16; 129],
    pub szX25PadType: [u16; 33],
    pub szX25Address: [u16; 201],
    pub szX25Facilities: [u16; 201],
    pub szX25UserData: [u16; 201],
    pub dwChannels: u32,
    pub dwSubEntries: u32,
    pub dwDialMode: u32,
    pub dwDialExtraPercent: u32,
    pub dwDialExtraSampleSeconds: u32,
    pub dwHangUpExtraPercent: u32,
    pub dwHangUpExtraSampleSeconds: u32,
    pub dwIdleDisconnectSeconds: u32,
    pub dwType: u32,
    pub dwEncryptionType: u32,
    pub dwCustomAuthKey: u32,
    pub dwCustomAuthDataSize: u32,
    pub lpbCustomAuthData: *mut core::ffi::c_void,
    pub guidId: GUID,
    pub dwVpnStrategy: u32,
    pub AddressCount: u32,
    pub ipv6addrDns: IN6_ADDR,
    pub ipv6addrDnsAlt: IN6_ADDR,
    pub ipv6addr: *mut core::ffi::c_void,
}
import "golang.org/x/sys/windows"

type IN6_ADDR struct {
	u _u_e__Union
}

type MPR_INTERFACE_3 struct {
	wszInterfaceName [257]uint16
	hInterface uintptr
	fEnabled int32
	dwIfType int32
	dwConnectionState int32
	fUnReachabilityReasons uint32
	dwLastError uint32
	dwfOptions uint32
	szLocalPhoneNumber [129]uint16
	szAlternates uintptr
	ipaddr uint32
	ipaddrDns uint32
	ipaddrDnsAlt uint32
	ipaddrWins uint32
	ipaddrWinsAlt uint32
	dwfNetProtocols uint32
	szDeviceType [17]uint16
	szDeviceName [129]uint16
	szX25PadType [33]uint16
	szX25Address [201]uint16
	szX25Facilities [201]uint16
	szX25UserData [201]uint16
	dwChannels uint32
	dwSubEntries uint32
	dwDialMode uint32
	dwDialExtraPercent uint32
	dwDialExtraSampleSeconds uint32
	dwHangUpExtraPercent uint32
	dwHangUpExtraSampleSeconds uint32
	dwIdleDisconnectSeconds uint32
	dwType uint32
	dwEncryptionType uint32
	dwCustomAuthKey uint32
	dwCustomAuthDataSize uint32
	lpbCustomAuthData uintptr
	guidId windows.GUID
	dwVpnStrategy uint32
	AddressCount uint32
	ipv6addrDns IN6_ADDR
	ipv6addrDnsAlt IN6_ADDR
	ipv6addr uintptr
}
type
  IN6_ADDR = record
    u: _u_e__Union;
  end;

  MPR_INTERFACE_3 = record
    wszInterfaceName: array[0..256] of WideChar;
    hInterface: Pointer;
    fEnabled: BOOL;
    dwIfType: Integer;
    dwConnectionState: Integer;
    fUnReachabilityReasons: DWORD;
    dwLastError: DWORD;
    dwfOptions: DWORD;
    szLocalPhoneNumber: array[0..128] of WideChar;
    szAlternates: Pointer;
    ipaddr: DWORD;
    ipaddrDns: DWORD;
    ipaddrDnsAlt: DWORD;
    ipaddrWins: DWORD;
    ipaddrWinsAlt: DWORD;
    dwfNetProtocols: DWORD;
    szDeviceType: array[0..16] of WideChar;
    szDeviceName: array[0..128] of WideChar;
    szX25PadType: array[0..32] of WideChar;
    szX25Address: array[0..200] of WideChar;
    szX25Facilities: array[0..200] of WideChar;
    szX25UserData: array[0..200] of WideChar;
    dwChannels: DWORD;
    dwSubEntries: DWORD;
    dwDialMode: DWORD;
    dwDialExtraPercent: DWORD;
    dwDialExtraSampleSeconds: DWORD;
    dwHangUpExtraPercent: DWORD;
    dwHangUpExtraSampleSeconds: DWORD;
    dwIdleDisconnectSeconds: DWORD;
    dwType: DWORD;
    dwEncryptionType: DWORD;
    dwCustomAuthKey: DWORD;
    dwCustomAuthDataSize: DWORD;
    lpbCustomAuthData: Pointer;
    guidId: TGUID;
    dwVpnStrategy: DWORD;
    AddressCount: DWORD;
    ipv6addrDns: IN6_ADDR;
    ipv6addrDnsAlt: IN6_ADDR;
    ipv6addr: Pointer;
  end;
const IN6_ADDR = extern struct {
    u: _u_e__Union,
};

const MPR_INTERFACE_3 = extern struct {
    wszInterfaceName: [257]u16,
    hInterface: ?*anyopaque,
    fEnabled: i32,
    dwIfType: i32,
    dwConnectionState: i32,
    fUnReachabilityReasons: u32,
    dwLastError: u32,
    dwfOptions: u32,
    szLocalPhoneNumber: [129]u16,
    szAlternates: ?*anyopaque,
    ipaddr: u32,
    ipaddrDns: u32,
    ipaddrDnsAlt: u32,
    ipaddrWins: u32,
    ipaddrWinsAlt: u32,
    dwfNetProtocols: u32,
    szDeviceType: [17]u16,
    szDeviceName: [129]u16,
    szX25PadType: [33]u16,
    szX25Address: [201]u16,
    szX25Facilities: [201]u16,
    szX25UserData: [201]u16,
    dwChannels: u32,
    dwSubEntries: u32,
    dwDialMode: u32,
    dwDialExtraPercent: u32,
    dwDialExtraSampleSeconds: u32,
    dwHangUpExtraPercent: u32,
    dwHangUpExtraSampleSeconds: u32,
    dwIdleDisconnectSeconds: u32,
    dwType: u32,
    dwEncryptionType: u32,
    dwCustomAuthKey: u32,
    dwCustomAuthDataSize: u32,
    lpbCustomAuthData: ?*anyopaque,
    guidId: GUID,
    dwVpnStrategy: u32,
    AddressCount: u32,
    ipv6addrDns: IN6_ADDR,
    ipv6addrDnsAlt: IN6_ADDR,
    ipv6addr: ?*anyopaque,
};
type
  IN6_ADDR {.bycopy.} = object
    u: _u_e__Union

  MPR_INTERFACE_3 {.bycopy.} = object
    wszInterfaceName: array[257, uint16]
    hInterface: pointer
    fEnabled: int32
    dwIfType: int32
    dwConnectionState: int32
    fUnReachabilityReasons: uint32
    dwLastError: uint32
    dwfOptions: uint32
    szLocalPhoneNumber: array[129, uint16]
    szAlternates: pointer
    ipaddr: uint32
    ipaddrDns: uint32
    ipaddrDnsAlt: uint32
    ipaddrWins: uint32
    ipaddrWinsAlt: uint32
    dwfNetProtocols: uint32
    szDeviceType: array[17, uint16]
    szDeviceName: array[129, uint16]
    szX25PadType: array[33, uint16]
    szX25Address: array[201, uint16]
    szX25Facilities: array[201, uint16]
    szX25UserData: array[201, uint16]
    dwChannels: uint32
    dwSubEntries: uint32
    dwDialMode: uint32
    dwDialExtraPercent: uint32
    dwDialExtraSampleSeconds: uint32
    dwHangUpExtraPercent: uint32
    dwHangUpExtraSampleSeconds: uint32
    dwIdleDisconnectSeconds: uint32
    dwType: uint32
    dwEncryptionType: uint32
    dwCustomAuthKey: uint32
    dwCustomAuthDataSize: uint32
    lpbCustomAuthData: pointer
    guidId: GUID
    dwVpnStrategy: uint32
    AddressCount: uint32
    ipv6addrDns: IN6_ADDR
    ipv6addrDnsAlt: IN6_ADDR
    ipv6addr: pointer
struct IN6_ADDR
{
    _u_e__Union u;
}

struct MPR_INTERFACE_3
{
    wchar[257] wszInterfaceName;
    void* hInterface;
    int fEnabled;
    int dwIfType;
    int dwConnectionState;
    uint fUnReachabilityReasons;
    uint dwLastError;
    uint dwfOptions;
    wchar[129] szLocalPhoneNumber;
    void* szAlternates;
    uint ipaddr;
    uint ipaddrDns;
    uint ipaddrDnsAlt;
    uint ipaddrWins;
    uint ipaddrWinsAlt;
    uint dwfNetProtocols;
    wchar[17] szDeviceType;
    wchar[129] szDeviceName;
    wchar[33] szX25PadType;
    wchar[201] szX25Address;
    wchar[201] szX25Facilities;
    wchar[201] szX25UserData;
    uint dwChannels;
    uint dwSubEntries;
    uint dwDialMode;
    uint dwDialExtraPercent;
    uint dwDialExtraSampleSeconds;
    uint dwHangUpExtraPercent;
    uint dwHangUpExtraSampleSeconds;
    uint dwIdleDisconnectSeconds;
    uint dwType;
    uint dwEncryptionType;
    uint dwCustomAuthKey;
    uint dwCustomAuthDataSize;
    void* lpbCustomAuthData;
    GUID guidId;
    uint dwVpnStrategy;
    uint AddressCount;
    IN6_ADDR ipv6addrDns;
    IN6_ADDR ipv6addrDnsAlt;
    void* ipv6addr;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; MPR_INTERFACE_3 サイズ: 2508 バイト(x86)
dim st, 627    ; 4byte整数×627(構造体サイズ 2508 / 4 切り上げ)
; wszInterfaceName : WCHAR (+0, 514byte)  varptr(st)+0 を基点に操作(514byte:入れ子/配列)
; hInterface : HANDLE (+516, 4byte)  st.129 = 値  /  値 = st.129   (lpoke/lpeek も可)
; fEnabled : BOOL (+520, 4byte)  st.130 = 値  /  値 = st.130   (lpoke/lpeek も可)
; dwIfType : ROUTER_INTERFACE_TYPE (+524, 4byte)  st.131 = 値  /  値 = st.131   (lpoke/lpeek も可)
; dwConnectionState : ROUTER_CONNECTION_STATE (+528, 4byte)  st.132 = 値  /  値 = st.132   (lpoke/lpeek も可)
; fUnReachabilityReasons : DWORD (+532, 4byte)  st.133 = 値  /  値 = st.133   (lpoke/lpeek も可)
; dwLastError : DWORD (+536, 4byte)  st.134 = 値  /  値 = st.134   (lpoke/lpeek も可)
; dwfOptions : DWORD (+540, 4byte)  st.135 = 値  /  値 = st.135   (lpoke/lpeek も可)
; szLocalPhoneNumber : WCHAR (+544, 258byte)  varptr(st)+544 を基点に操作(258byte:入れ子/配列)
; szAlternates : LPWSTR (+804, 4byte)  st.201 = 値  /  値 = st.201   (lpoke/lpeek も可)
; ipaddr : DWORD (+808, 4byte)  st.202 = 値  /  値 = st.202   (lpoke/lpeek も可)
; ipaddrDns : DWORD (+812, 4byte)  st.203 = 値  /  値 = st.203   (lpoke/lpeek も可)
; ipaddrDnsAlt : DWORD (+816, 4byte)  st.204 = 値  /  値 = st.204   (lpoke/lpeek も可)
; ipaddrWins : DWORD (+820, 4byte)  st.205 = 値  /  値 = st.205   (lpoke/lpeek も可)
; ipaddrWinsAlt : DWORD (+824, 4byte)  st.206 = 値  /  値 = st.206   (lpoke/lpeek も可)
; dwfNetProtocols : DWORD (+828, 4byte)  st.207 = 値  /  値 = st.207   (lpoke/lpeek も可)
; szDeviceType : WCHAR (+832, 34byte)  varptr(st)+832 を基点に操作(34byte:入れ子/配列)
; szDeviceName : WCHAR (+866, 258byte)  varptr(st)+866 を基点に操作(258byte:入れ子/配列)
; szX25PadType : WCHAR (+1124, 66byte)  varptr(st)+1124 を基点に操作(66byte:入れ子/配列)
; szX25Address : WCHAR (+1190, 402byte)  varptr(st)+1190 を基点に操作(402byte:入れ子/配列)
; szX25Facilities : WCHAR (+1592, 402byte)  varptr(st)+1592 を基点に操作(402byte:入れ子/配列)
; szX25UserData : WCHAR (+1994, 402byte)  varptr(st)+1994 を基点に操作(402byte:入れ子/配列)
; dwChannels : DWORD (+2396, 4byte)  st.599 = 値  /  値 = st.599   (lpoke/lpeek も可)
; dwSubEntries : DWORD (+2400, 4byte)  st.600 = 値  /  値 = st.600   (lpoke/lpeek も可)
; dwDialMode : MPR_INTERFACE_DIAL_MODE (+2404, 4byte)  st.601 = 値  /  値 = st.601   (lpoke/lpeek も可)
; dwDialExtraPercent : DWORD (+2408, 4byte)  st.602 = 値  /  値 = st.602   (lpoke/lpeek も可)
; dwDialExtraSampleSeconds : DWORD (+2412, 4byte)  st.603 = 値  /  値 = st.603   (lpoke/lpeek も可)
; dwHangUpExtraPercent : DWORD (+2416, 4byte)  st.604 = 値  /  値 = st.604   (lpoke/lpeek も可)
; dwHangUpExtraSampleSeconds : DWORD (+2420, 4byte)  st.605 = 値  /  値 = st.605   (lpoke/lpeek も可)
; dwIdleDisconnectSeconds : DWORD (+2424, 4byte)  st.606 = 値  /  値 = st.606   (lpoke/lpeek も可)
; dwType : DWORD (+2428, 4byte)  st.607 = 値  /  値 = st.607   (lpoke/lpeek も可)
; dwEncryptionType : MPR_ET (+2432, 4byte)  st.608 = 値  /  値 = st.608   (lpoke/lpeek も可)
; dwCustomAuthKey : DWORD (+2436, 4byte)  st.609 = 値  /  値 = st.609   (lpoke/lpeek も可)
; dwCustomAuthDataSize : DWORD (+2440, 4byte)  st.610 = 値  /  値 = st.610   (lpoke/lpeek も可)
; lpbCustomAuthData : BYTE* (+2444, 4byte)  st.611 = 値  /  値 = st.611   (lpoke/lpeek も可)
; guidId : GUID (+2448, 16byte)  varptr(st)+2448 を基点に操作(16byte:入れ子/配列)
; dwVpnStrategy : MPR_VS (+2464, 4byte)  st.616 = 値  /  値 = st.616   (lpoke/lpeek も可)
; AddressCount : DWORD (+2468, 4byte)  st.617 = 値  /  値 = st.617   (lpoke/lpeek も可)
; ipv6addrDns : IN6_ADDR (+2472, 16byte)  varptr(st)+2472 を基点に操作(16byte:入れ子/配列)
; ipv6addrDnsAlt : IN6_ADDR (+2488, 16byte)  varptr(st)+2488 を基点に操作(16byte:入れ子/配列)
; ipv6addr : IN6_ADDR* (+2504, 4byte)  varptr(st)+2504 を基点に操作(4byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; MPR_INTERFACE_3 サイズ: 2536 バイト(x64)
dim st, 634    ; 4byte整数×634(構造体サイズ 2536 / 4 切り上げ)
; wszInterfaceName : WCHAR (+0, 514byte)  varptr(st)+0 を基点に操作(514byte:入れ子/配列)
; hInterface : HANDLE (+520, 8byte)  qpoke st,520,値 / qpeek(st,520)  ※IronHSPのみ。3.7/3.8は lpoke st,520,下位 : lpoke st,524,上位
; fEnabled : BOOL (+528, 4byte)  st.132 = 値  /  値 = st.132   (lpoke/lpeek も可)
; dwIfType : ROUTER_INTERFACE_TYPE (+532, 4byte)  st.133 = 値  /  値 = st.133   (lpoke/lpeek も可)
; dwConnectionState : ROUTER_CONNECTION_STATE (+536, 4byte)  st.134 = 値  /  値 = st.134   (lpoke/lpeek も可)
; fUnReachabilityReasons : DWORD (+540, 4byte)  st.135 = 値  /  値 = st.135   (lpoke/lpeek も可)
; dwLastError : DWORD (+544, 4byte)  st.136 = 値  /  値 = st.136   (lpoke/lpeek も可)
; dwfOptions : DWORD (+548, 4byte)  st.137 = 値  /  値 = st.137   (lpoke/lpeek も可)
; szLocalPhoneNumber : WCHAR (+552, 258byte)  varptr(st)+552 を基点に操作(258byte:入れ子/配列)
; szAlternates : LPWSTR (+816, 8byte)  qpoke st,816,値 / qpeek(st,816)  ※IronHSPのみ。3.7/3.8は lpoke st,816,下位 : lpoke st,820,上位
; ipaddr : DWORD (+824, 4byte)  st.206 = 値  /  値 = st.206   (lpoke/lpeek も可)
; ipaddrDns : DWORD (+828, 4byte)  st.207 = 値  /  値 = st.207   (lpoke/lpeek も可)
; ipaddrDnsAlt : DWORD (+832, 4byte)  st.208 = 値  /  値 = st.208   (lpoke/lpeek も可)
; ipaddrWins : DWORD (+836, 4byte)  st.209 = 値  /  値 = st.209   (lpoke/lpeek も可)
; ipaddrWinsAlt : DWORD (+840, 4byte)  st.210 = 値  /  値 = st.210   (lpoke/lpeek も可)
; dwfNetProtocols : DWORD (+844, 4byte)  st.211 = 値  /  値 = st.211   (lpoke/lpeek も可)
; szDeviceType : WCHAR (+848, 34byte)  varptr(st)+848 を基点に操作(34byte:入れ子/配列)
; szDeviceName : WCHAR (+882, 258byte)  varptr(st)+882 を基点に操作(258byte:入れ子/配列)
; szX25PadType : WCHAR (+1140, 66byte)  varptr(st)+1140 を基点に操作(66byte:入れ子/配列)
; szX25Address : WCHAR (+1206, 402byte)  varptr(st)+1206 を基点に操作(402byte:入れ子/配列)
; szX25Facilities : WCHAR (+1608, 402byte)  varptr(st)+1608 を基点に操作(402byte:入れ子/配列)
; szX25UserData : WCHAR (+2010, 402byte)  varptr(st)+2010 を基点に操作(402byte:入れ子/配列)
; dwChannels : DWORD (+2412, 4byte)  st.603 = 値  /  値 = st.603   (lpoke/lpeek も可)
; dwSubEntries : DWORD (+2416, 4byte)  st.604 = 値  /  値 = st.604   (lpoke/lpeek も可)
; dwDialMode : MPR_INTERFACE_DIAL_MODE (+2420, 4byte)  st.605 = 値  /  値 = st.605   (lpoke/lpeek も可)
; dwDialExtraPercent : DWORD (+2424, 4byte)  st.606 = 値  /  値 = st.606   (lpoke/lpeek も可)
; dwDialExtraSampleSeconds : DWORD (+2428, 4byte)  st.607 = 値  /  値 = st.607   (lpoke/lpeek も可)
; dwHangUpExtraPercent : DWORD (+2432, 4byte)  st.608 = 値  /  値 = st.608   (lpoke/lpeek も可)
; dwHangUpExtraSampleSeconds : DWORD (+2436, 4byte)  st.609 = 値  /  値 = st.609   (lpoke/lpeek も可)
; dwIdleDisconnectSeconds : DWORD (+2440, 4byte)  st.610 = 値  /  値 = st.610   (lpoke/lpeek も可)
; dwType : DWORD (+2444, 4byte)  st.611 = 値  /  値 = st.611   (lpoke/lpeek も可)
; dwEncryptionType : MPR_ET (+2448, 4byte)  st.612 = 値  /  値 = st.612   (lpoke/lpeek も可)
; dwCustomAuthKey : DWORD (+2452, 4byte)  st.613 = 値  /  値 = st.613   (lpoke/lpeek も可)
; dwCustomAuthDataSize : DWORD (+2456, 4byte)  st.614 = 値  /  値 = st.614   (lpoke/lpeek も可)
; lpbCustomAuthData : BYTE* (+2464, 8byte)  qpoke st,2464,値 / qpeek(st,2464)  ※IronHSPのみ。3.7/3.8は lpoke st,2464,下位 : lpoke st,2468,上位
; guidId : GUID (+2472, 16byte)  varptr(st)+2472 を基点に操作(16byte:入れ子/配列)
; dwVpnStrategy : MPR_VS (+2488, 4byte)  st.622 = 値  /  値 = st.622   (lpoke/lpeek も可)
; AddressCount : DWORD (+2492, 4byte)  st.623 = 値  /  値 = st.623   (lpoke/lpeek も可)
; ipv6addrDns : IN6_ADDR (+2496, 16byte)  varptr(st)+2496 を基点に操作(16byte:入れ子/配列)
; ipv6addrDnsAlt : IN6_ADDR (+2512, 16byte)  varptr(st)+2512 を基点に操作(16byte:入れ子/配列)
; ipv6addr : IN6_ADDR* (+2528, 8byte)  varptr(st)+2528 を基点に操作(8byte:入れ子/配列)
; ※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 IN6_ADDR
    #field byte u 16
#endstruct

#defstruct global MPR_INTERFACE_3
    #field wchar wszInterfaceName 257
    #field intptr hInterface
    #field bool fEnabled
    #field int dwIfType
    #field int dwConnectionState
    #field int fUnReachabilityReasons
    #field int dwLastError
    #field int dwfOptions
    #field wchar szLocalPhoneNumber 129
    #field intptr szAlternates
    #field int ipaddr
    #field int ipaddrDns
    #field int ipaddrDnsAlt
    #field int ipaddrWins
    #field int ipaddrWinsAlt
    #field int dwfNetProtocols
    #field wchar szDeviceType 17
    #field wchar szDeviceName 129
    #field wchar szX25PadType 33
    #field wchar szX25Address 201
    #field wchar szX25Facilities 201
    #field wchar szX25UserData 201
    #field int dwChannels
    #field int dwSubEntries
    #field int dwDialMode
    #field int dwDialExtraPercent
    #field int dwDialExtraSampleSeconds
    #field int dwHangUpExtraPercent
    #field int dwHangUpExtraSampleSeconds
    #field int dwIdleDisconnectSeconds
    #field int dwType
    #field int dwEncryptionType
    #field int dwCustomAuthKey
    #field int dwCustomAuthDataSize
    #field intptr lpbCustomAuthData
    #field GUID guidId
    #field int dwVpnStrategy
    #field int AddressCount
    #field IN6_ADDR ipv6addrDns
    #field IN6_ADDR ipv6addrDnsAlt
    #field intptr ipv6addr
#endstruct

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