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

MIB_UDPROW

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

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

フィールド

フィールドサイズx64x86説明
dwLocalAddrDWORD4+0+0

ローカル コンピューター上の UDP エンドポイントの IPv4 アドレスです。

0 の場合は、ローカル コンピューターに関連付けられた任意の IP インターフェイス宛てのデータグラムを受け入れる UDP リスナーであることを示します。

dwLocalPortDWORD4+4+4ローカル コンピューター上の UDP エンドポイントのポート番号です。このメンバーはネットワーク バイト順で格納されます。

公式ドキュメント

MIB_UDPROW 構造体は、ローカル コンピューター上の IPv4 用のユーザー データグラム プロトコル (UDP) リスナー テーブルのエントリを格納します。

解説(Remarks)

GetUdpTable 関数は、ローカル コンピューター上の IPv4 UDP リスナー テーブルを取得し、その情報を MIB_UDPTABLE 構造体で返します。

MIB_UDPROW 構造体の配列は、MIB_UDPTABLE 構造体に格納されます。

dwLocalAddr メンバーは、in_addr 構造体と同じ形式の DWORD として格納されます。dwLocalAddr メンバーを使用するには、Windows ソケットの ntohl 関数や inet_ntoa 関数、または同様の関数が必要になる場合があります。Windows Vista 以降では、RtlIpv4AddressToString 関数または RtlIpv4AddressToStringEx 関数を使用すると、Windows ソケット DLL を読み込むことなく dwLocalAddr メンバーの IPv4 アドレスを文字列に変換できます。

dwLocalPort メンバーはネットワーク バイト順です。dwLocalPort メンバーを使用するには、Windows ソケットの ntohs 関数や inet_ntoa 関数、または同様の関数が必要になる場合があります。

MIB_UDPTABLE 構造体は、ローカル コンピューター上の IPv4 用の UDP リスナー テーブルを格納します。この名前は、IETF が公開している RFC 1213 でのこのテーブルの定義に基づいています。詳細については、 http://www.ietf.org/rfc/rfc1213.txt を参照してください。このテーブルには、アドレスにバインドされた IPv4 の UDP エンドポイントが格納されます。なお、アプリケーションが UDP ソケットを作成してアドレスにバインドする目的が UDP データグラムの送信のみであり、そのソケットでパケットを受信する (リスナーとして機能する) 意図がない場合もある点に注意してください。

Windows Vista 以降向けにリリースされた Microsoft Windows ソフトウェア開発キット (SDK) では、ヘッダー ファイルの構成が変更されています。この構造体は Iprtrmib.h ヘッダー ファイルではなく、Udpmib.h ヘッダー ファイルで定義されています。Udpmib.h ヘッダー ファイルは Iprtrmib.h に自動的にインクルードされ、Iprtrmib.hIphlpapi.h ヘッダー ファイルに自動的にインクルードされます。Udpmib.h ヘッダー ファイルと Iprtrmib.h ヘッダー ファイルを直接使用しないでください。

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

各言語での定義

#include <windows.h>

// MIB_UDPROW  (x64 8 / x86 8 バイト)
typedef struct MIB_UDPROW {
    DWORD dwLocalAddr;
    DWORD dwLocalPort;
} MIB_UDPROW;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct MIB_UDPROW
{
    public uint dwLocalAddr;
    public uint dwLocalPort;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure MIB_UDPROW
    Public dwLocalAddr As UInteger
    Public dwLocalPort As UInteger
End Structure
import ctypes
from ctypes import wintypes

class MIB_UDPROW(ctypes.Structure):
    _fields_ = [
        ("dwLocalAddr", wintypes.DWORD),
        ("dwLocalPort", wintypes.DWORD),
    ]
#[repr(C)]
pub struct MIB_UDPROW {
    pub dwLocalAddr: u32,
    pub dwLocalPort: u32,
}
import "golang.org/x/sys/windows"

type MIB_UDPROW struct {
	dwLocalAddr uint32
	dwLocalPort uint32
}
type
  MIB_UDPROW = record
    dwLocalAddr: DWORD;
    dwLocalPort: DWORD;
  end;
const MIB_UDPROW = extern struct {
    dwLocalAddr: u32,
    dwLocalPort: u32,
};
type
  MIB_UDPROW {.bycopy.} = object
    dwLocalAddr: uint32
    dwLocalPort: uint32
struct MIB_UDPROW
{
    uint dwLocalAddr;
    uint dwLocalPort;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; MIB_UDPROW サイズ: 8 バイト(x64)
dim st, 2    ; 4byte整数×2(構造体サイズ 8 / 4 切り上げ)
; dwLocalAddr : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; dwLocalPort : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global MIB_UDPROW
    #field int dwLocalAddr
    #field int dwLocalPort
#endstruct

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