ホーム › NetworkManagement.Rras › ROUTING_PROTOCOL_CONFIG
ROUTING_PROTOCOL_CONFIG
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| dwCallbackFlags | DWORD | 4 | +0 | +0 | どのコールバックが設定されているかを示すフラグ。 |
| pfnRpfCallback | PMGM_RPF_CALLBACK | 8/4 | +8 | +4 | RPF(Reverse Path Forwarding)チェック用コールバック関数ポインタ。 |
| pfnCreationAlertCallback | PMGM_CREATION_ALERT_CALLBACK | 8/4 | +16 | +8 | 新規マルチキャストエントリ作成を通知するコールバック関数ポインタ。 |
| pfnPruneAlertCallback | PMGM_PRUNE_ALERT_CALLBACK | 8/4 | +24 | +12 | マルチキャストツリーの枝刈りを通知するコールバック関数ポインタ。 |
| pfnJoinAlertCallback | PMGM_JOIN_ALERT_CALLBACK | 8/4 | +32 | +16 | グループ参加を通知するコールバック関数ポインタ。 |
| pfnWrongIfCallback | PMGM_WRONG_IF_CALLBACK | 8/4 | +40 | +20 | 誤ったインターフェイスからの受信を通知するコールバック関数ポインタ。 |
| pfnLocalJoinCallback | PMGM_LOCAL_JOIN_CALLBACK | 8/4 | +48 | +24 | ローカルグループ参加を通知するコールバック関数ポインタ。 |
| pfnLocalLeaveCallback | PMGM_LOCAL_LEAVE_CALLBACK | 8/4 | +56 | +28 | ローカルグループ離脱を通知するコールバック関数ポインタ。 |
| pfnDisableIgmpCallback | PMGM_DISABLE_IGMP_CALLBACK | 8/4 | +64 | +32 | IGMP無効化を要求するコールバック関数ポインタ。 |
| pfnEnableIgmpCallback | PMGM_ENABLE_IGMP_CALLBACK | 8/4 | +72 | +36 | IGMP有効化を要求するコールバック関数ポインタ。 |
各言語での定義
#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 Structureimport 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: pointerstruct 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