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

ROUTING_PROTOCOL_CONFIG

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

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

フィールド

フィールドサイズx64x86説明
dwCallbackFlagsDWORD4+0+0将来の使用のために予約済みです。
pfnRpfCallbackPMGM_RPF_CALLBACK8/4+8+4RPF チェックを実行するためにルーティング プロトコルを呼び出すコールバックです。
pfnCreationAlertCallbackPMGM_CREATION_ALERT_CALLBACK8/4+16+8新しい送信元からの、または新しいグループ宛てのマルチキャスト パケットを転送すべきインターフェイス (ルーティング プロトコルが所有するインターフェイスの部分集合) を判別するために、ルーティング プロトコルを呼び出すコールバックです。
pfnPruneAlertCallbackPMGM_PRUNE_ALERT_CALLBACK8/4+24+12指定された送信元およびグループに対する受信者が、他のルーティング プロトコルが所有するインターフェイス上に存在しなくなったことをルーティング プロトコルに通知するためのコールバックです。
pfnJoinAlertCallbackPMGM_JOIN_ALERT_CALLBACK8/4+32+16指定された送信元およびグループに対する新しい受信者が、別のルーティング プロトコルが所有するインターフェイス上に存在することをルーティング プロトコルに通知するためのコールバックです。
pfnWrongIfCallbackPMGM_WRONG_IF_CALLBACK8/4+40+20指定された送信元から指定されたグループ宛てのパケットが誤ったインターフェイスで受信されたことをルーティング プロトコルに通知するためのコールバックです。
pfnLocalJoinCallbackPMGM_LOCAL_JOIN_CALLBACK8/4+48+24あるインターフェイス上でグループに対する新しい受信者を IGMP が検出したことをルーティング プロトコルに通知するためのコールバックです。
pfnLocalLeaveCallbackPMGM_LOCAL_LEAVE_CALLBACK8/4+56+28あるインターフェイス上でグループに対する受信者が存在しなくなったことを IGMP が検出したことを、ルーティング プロトコルに通知するためのコールバックです。
pfnDisableIgmpCallbackPMGM_DISABLE_IGMP_CALLBACK8/4+64+32IGMP が有効なインターフェイスの所有権をプロトコルが取得または解放しようとしていることを IGMP に通知するための、IGMP へのコールバックです。
pfnEnableIgmpCallbackPMGM_ENABLE_IGMP_CALLBACK8/4+72+36IGMP が有効なインターフェイスの所有権の取得または解放をプロトコルが完了したことを IGMP に通知するための、IGMP へのコールバックです。

公式ドキュメント

ROUTING_PROTOCOL_CONFIG 構造体は、プロトコルがマルチキャスト グループ マネージャーに登録するときに、マルチキャスト グループ マネージャーへ渡されるルーティング プロトコルの構成情報を記述します。

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

各言語での定義

#include <windows.h>

// ROUTING_PROTOCOL_CONFIG  (x64 80 / x86 40 バイト)
typedef struct ROUTING_PROTOCOL_CONFIG {
    DWORD dwCallbackFlags;
    PMGM_RPF_CALLBACK pfnRpfCallback;
    PMGM_CREATION_ALERT_CALLBACK pfnCreationAlertCallback;
    PMGM_PRUNE_ALERT_CALLBACK pfnPruneAlertCallback;
    PMGM_JOIN_ALERT_CALLBACK pfnJoinAlertCallback;
    PMGM_WRONG_IF_CALLBACK pfnWrongIfCallback;
    PMGM_LOCAL_JOIN_CALLBACK pfnLocalJoinCallback;
    PMGM_LOCAL_LEAVE_CALLBACK pfnLocalLeaveCallback;
    PMGM_DISABLE_IGMP_CALLBACK pfnDisableIgmpCallback;
    PMGM_ENABLE_IGMP_CALLBACK pfnEnableIgmpCallback;
} ROUTING_PROTOCOL_CONFIG;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct ROUTING_PROTOCOL_CONFIG
{
    public uint dwCallbackFlags;
    public IntPtr pfnRpfCallback;
    public IntPtr pfnCreationAlertCallback;
    public IntPtr pfnPruneAlertCallback;
    public IntPtr pfnJoinAlertCallback;
    public IntPtr pfnWrongIfCallback;
    public IntPtr pfnLocalJoinCallback;
    public IntPtr pfnLocalLeaveCallback;
    public IntPtr pfnDisableIgmpCallback;
    public IntPtr pfnEnableIgmpCallback;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure ROUTING_PROTOCOL_CONFIG
    Public dwCallbackFlags As UInteger
    Public pfnRpfCallback As IntPtr
    Public pfnCreationAlertCallback As IntPtr
    Public pfnPruneAlertCallback As IntPtr
    Public pfnJoinAlertCallback As IntPtr
    Public pfnWrongIfCallback As IntPtr
    Public pfnLocalJoinCallback As IntPtr
    Public pfnLocalLeaveCallback As IntPtr
    Public pfnDisableIgmpCallback As IntPtr
    Public pfnEnableIgmpCallback As IntPtr
End Structure
import ctypes
from ctypes import wintypes

class ROUTING_PROTOCOL_CONFIG(ctypes.Structure):
    _fields_ = [
        ("dwCallbackFlags", wintypes.DWORD),
        ("pfnRpfCallback", ctypes.c_void_p),
        ("pfnCreationAlertCallback", ctypes.c_void_p),
        ("pfnPruneAlertCallback", ctypes.c_void_p),
        ("pfnJoinAlertCallback", ctypes.c_void_p),
        ("pfnWrongIfCallback", ctypes.c_void_p),
        ("pfnLocalJoinCallback", ctypes.c_void_p),
        ("pfnLocalLeaveCallback", ctypes.c_void_p),
        ("pfnDisableIgmpCallback", ctypes.c_void_p),
        ("pfnEnableIgmpCallback", ctypes.c_void_p),
    ]
#[repr(C)]
pub struct ROUTING_PROTOCOL_CONFIG {
    pub dwCallbackFlags: u32,
    pub pfnRpfCallback: *mut core::ffi::c_void,
    pub pfnCreationAlertCallback: *mut core::ffi::c_void,
    pub pfnPruneAlertCallback: *mut core::ffi::c_void,
    pub pfnJoinAlertCallback: *mut core::ffi::c_void,
    pub pfnWrongIfCallback: *mut core::ffi::c_void,
    pub pfnLocalJoinCallback: *mut core::ffi::c_void,
    pub pfnLocalLeaveCallback: *mut core::ffi::c_void,
    pub pfnDisableIgmpCallback: *mut core::ffi::c_void,
    pub pfnEnableIgmpCallback: *mut core::ffi::c_void,
}
import "golang.org/x/sys/windows"

type ROUTING_PROTOCOL_CONFIG struct {
	dwCallbackFlags uint32
	pfnRpfCallback uintptr
	pfnCreationAlertCallback uintptr
	pfnPruneAlertCallback uintptr
	pfnJoinAlertCallback uintptr
	pfnWrongIfCallback uintptr
	pfnLocalJoinCallback uintptr
	pfnLocalLeaveCallback uintptr
	pfnDisableIgmpCallback uintptr
	pfnEnableIgmpCallback uintptr
}
type
  ROUTING_PROTOCOL_CONFIG = record
    dwCallbackFlags: DWORD;
    pfnRpfCallback: Pointer;
    pfnCreationAlertCallback: Pointer;
    pfnPruneAlertCallback: Pointer;
    pfnJoinAlertCallback: Pointer;
    pfnWrongIfCallback: Pointer;
    pfnLocalJoinCallback: Pointer;
    pfnLocalLeaveCallback: Pointer;
    pfnDisableIgmpCallback: Pointer;
    pfnEnableIgmpCallback: Pointer;
  end;
const ROUTING_PROTOCOL_CONFIG = extern struct {
    dwCallbackFlags: u32,
    pfnRpfCallback: ?*anyopaque,
    pfnCreationAlertCallback: ?*anyopaque,
    pfnPruneAlertCallback: ?*anyopaque,
    pfnJoinAlertCallback: ?*anyopaque,
    pfnWrongIfCallback: ?*anyopaque,
    pfnLocalJoinCallback: ?*anyopaque,
    pfnLocalLeaveCallback: ?*anyopaque,
    pfnDisableIgmpCallback: ?*anyopaque,
    pfnEnableIgmpCallback: ?*anyopaque,
};
type
  ROUTING_PROTOCOL_CONFIG {.bycopy.} = object
    dwCallbackFlags: uint32
    pfnRpfCallback: pointer
    pfnCreationAlertCallback: pointer
    pfnPruneAlertCallback: pointer
    pfnJoinAlertCallback: pointer
    pfnWrongIfCallback: pointer
    pfnLocalJoinCallback: pointer
    pfnLocalLeaveCallback: pointer
    pfnDisableIgmpCallback: pointer
    pfnEnableIgmpCallback: pointer
struct ROUTING_PROTOCOL_CONFIG
{
    uint dwCallbackFlags;
    void* pfnRpfCallback;
    void* pfnCreationAlertCallback;
    void* pfnPruneAlertCallback;
    void* pfnJoinAlertCallback;
    void* pfnWrongIfCallback;
    void* pfnLocalJoinCallback;
    void* pfnLocalLeaveCallback;
    void* pfnDisableIgmpCallback;
    void* pfnEnableIgmpCallback;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; ROUTING_PROTOCOL_CONFIG サイズ: 40 バイト(x86)
dim st, 10    ; 4byte整数×10(構造体サイズ 40 / 4 切り上げ)
; dwCallbackFlags : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; pfnRpfCallback : PMGM_RPF_CALLBACK (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; pfnCreationAlertCallback : PMGM_CREATION_ALERT_CALLBACK (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; pfnPruneAlertCallback : PMGM_PRUNE_ALERT_CALLBACK (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; pfnJoinAlertCallback : PMGM_JOIN_ALERT_CALLBACK (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; pfnWrongIfCallback : PMGM_WRONG_IF_CALLBACK (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; pfnLocalJoinCallback : PMGM_LOCAL_JOIN_CALLBACK (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; pfnLocalLeaveCallback : PMGM_LOCAL_LEAVE_CALLBACK (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; pfnDisableIgmpCallback : PMGM_DISABLE_IGMP_CALLBACK (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; pfnEnableIgmpCallback : PMGM_ENABLE_IGMP_CALLBACK (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; ROUTING_PROTOCOL_CONFIG サイズ: 80 バイト(x64)
dim st, 20    ; 4byte整数×20(構造体サイズ 80 / 4 切り上げ)
; dwCallbackFlags : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; pfnRpfCallback : PMGM_RPF_CALLBACK (+8, 8byte)  qpoke st,8,値 / qpeek(st,8)  ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; pfnCreationAlertCallback : PMGM_CREATION_ALERT_CALLBACK (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; pfnPruneAlertCallback : PMGM_PRUNE_ALERT_CALLBACK (+24, 8byte)  qpoke st,24,値 / qpeek(st,24)  ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; pfnJoinAlertCallback : PMGM_JOIN_ALERT_CALLBACK (+32, 8byte)  qpoke st,32,値 / qpeek(st,32)  ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; pfnWrongIfCallback : PMGM_WRONG_IF_CALLBACK (+40, 8byte)  qpoke st,40,値 / qpeek(st,40)  ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; pfnLocalJoinCallback : PMGM_LOCAL_JOIN_CALLBACK (+48, 8byte)  qpoke st,48,値 / qpeek(st,48)  ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; pfnLocalLeaveCallback : PMGM_LOCAL_LEAVE_CALLBACK (+56, 8byte)  qpoke st,56,値 / qpeek(st,56)  ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; pfnDisableIgmpCallback : PMGM_DISABLE_IGMP_CALLBACK (+64, 8byte)  qpoke st,64,値 / qpeek(st,64)  ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; pfnEnableIgmpCallback : PMGM_ENABLE_IGMP_CALLBACK (+72, 8byte)  qpoke st,72,値 / qpeek(st,72)  ※IronHSPのみ。3.7/3.8は lpoke st,72,下位 : lpoke st,76,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global ROUTING_PROTOCOL_CONFIG
    #field int dwCallbackFlags
    #field intptr pfnRpfCallback
    #field intptr pfnCreationAlertCallback
    #field intptr pfnPruneAlertCallback
    #field intptr pfnJoinAlertCallback
    #field intptr pfnWrongIfCallback
    #field intptr pfnLocalJoinCallback
    #field intptr pfnLocalLeaveCallback
    #field intptr pfnDisableIgmpCallback
    #field intptr pfnEnableIgmpCallback
#endstruct

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