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

MPRAPI_ADMIN_DLL_CALLBACKS

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

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

フィールド

フィールドサイズx64x86説明
revisionBYTE1+0+0コールバック構造体のリビジョン番号を表すバイト値。
lpfnMprAdminGetIpAddressForUserPMPRADMINGETIPADDRESSFORUSER8/4+8+4ユーザーにIPv4アドレスを割り当てるコールバック関数ポインタ。
lpfnMprAdminReleaseIpAddressPMPRADMINRELEASEIPADRESS8/4+16+8割り当てたIPv4アドレスを解放するコールバック関数ポインタ。
lpfnMprAdminGetIpv6AddressForUserPMPRADMINGETIPV6ADDRESSFORUSER8/4+24+12ユーザーにIPv6アドレスを割り当てるコールバック関数ポインタ。
lpfnMprAdminReleaseIpV6AddressForUserPMPRADMINRELEASEIPV6ADDRESSFORUSER8/4+32+16割り当てたIPv6アドレスを解放するコールバック関数ポインタ。
lpfnRasAdminAcceptNewLinkPMPRADMINACCEPTNEWLINK8/4+40+20新規リンク受け入れ時に呼ばれるコールバック関数ポインタ。
lpfnRasAdminLinkHangupNotificationPMPRADMINLINKHANGUPNOTIFICATION8/4+48+24リンク切断を通知するコールバック関数ポインタ。
lpfnRasAdminTerminateDllPMPRADMINTERMINATEDLL8/4+56+28DLL終了処理を行うコールバック関数ポインタ。
lpfnRasAdminAcceptNewConnectionExPMPRADMINACCEPTNEWCONNECTIONEX8/4+64+32新規接続受け入れ時に呼ばれるコールバック関数ポインタ(拡張版)。
lpfnRasAdminAcceptEndpointChangeExPMPRADMINACCEPTTUNNELENDPOINTCHANGEEX8/4+72+36トンネルエンドポイント変更を受け入れるコールバック関数ポインタ。
lpfnRasAdminAcceptReauthenticationExPMPRADMINACCEPTREAUTHENTICATIONEX8/4+80+40再認証を受け入れるコールバック関数ポインタ(拡張版)。
lpfnRasAdminConnectionHangupNotificationExPMPRADMINCONNECTIONHANGUPNOTIFICATIONEX8/4+88+44接続切断を通知するコールバック関数ポインタ(拡張版)。
lpfnRASValidatePreAuthenticatedConnectionExPMPRADMINRASVALIDATEPREAUTHENTICATEDCONNECTIONEX8/4+96+48事前認証済み接続を検証するコールバック関数ポインタ。

各言語での定義

#include <windows.h>

// MPRAPI_ADMIN_DLL_CALLBACKS  (x64 104 / x86 52 バイト)
typedef struct MPRAPI_ADMIN_DLL_CALLBACKS {
    BYTE revision;
    PMPRADMINGETIPADDRESSFORUSER lpfnMprAdminGetIpAddressForUser;
    PMPRADMINRELEASEIPADRESS lpfnMprAdminReleaseIpAddress;
    PMPRADMINGETIPV6ADDRESSFORUSER lpfnMprAdminGetIpv6AddressForUser;
    PMPRADMINRELEASEIPV6ADDRESSFORUSER lpfnMprAdminReleaseIpV6AddressForUser;
    PMPRADMINACCEPTNEWLINK lpfnRasAdminAcceptNewLink;
    PMPRADMINLINKHANGUPNOTIFICATION lpfnRasAdminLinkHangupNotification;
    PMPRADMINTERMINATEDLL lpfnRasAdminTerminateDll;
    PMPRADMINACCEPTNEWCONNECTIONEX lpfnRasAdminAcceptNewConnectionEx;
    PMPRADMINACCEPTTUNNELENDPOINTCHANGEEX lpfnRasAdminAcceptEndpointChangeEx;
    PMPRADMINACCEPTREAUTHENTICATIONEX lpfnRasAdminAcceptReauthenticationEx;
    PMPRADMINCONNECTIONHANGUPNOTIFICATIONEX lpfnRasAdminConnectionHangupNotificationEx;
    PMPRADMINRASVALIDATEPREAUTHENTICATEDCONNECTIONEX lpfnRASValidatePreAuthenticatedConnectionEx;
} MPRAPI_ADMIN_DLL_CALLBACKS;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct MPRAPI_ADMIN_DLL_CALLBACKS
{
    public byte revision;
    public IntPtr lpfnMprAdminGetIpAddressForUser;
    public IntPtr lpfnMprAdminReleaseIpAddress;
    public IntPtr lpfnMprAdminGetIpv6AddressForUser;
    public IntPtr lpfnMprAdminReleaseIpV6AddressForUser;
    public IntPtr lpfnRasAdminAcceptNewLink;
    public IntPtr lpfnRasAdminLinkHangupNotification;
    public IntPtr lpfnRasAdminTerminateDll;
    public IntPtr lpfnRasAdminAcceptNewConnectionEx;
    public IntPtr lpfnRasAdminAcceptEndpointChangeEx;
    public IntPtr lpfnRasAdminAcceptReauthenticationEx;
    public IntPtr lpfnRasAdminConnectionHangupNotificationEx;
    public IntPtr lpfnRASValidatePreAuthenticatedConnectionEx;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure MPRAPI_ADMIN_DLL_CALLBACKS
    Public revision As Byte
    Public lpfnMprAdminGetIpAddressForUser As IntPtr
    Public lpfnMprAdminReleaseIpAddress As IntPtr
    Public lpfnMprAdminGetIpv6AddressForUser As IntPtr
    Public lpfnMprAdminReleaseIpV6AddressForUser As IntPtr
    Public lpfnRasAdminAcceptNewLink As IntPtr
    Public lpfnRasAdminLinkHangupNotification As IntPtr
    Public lpfnRasAdminTerminateDll As IntPtr
    Public lpfnRasAdminAcceptNewConnectionEx As IntPtr
    Public lpfnRasAdminAcceptEndpointChangeEx As IntPtr
    Public lpfnRasAdminAcceptReauthenticationEx As IntPtr
    Public lpfnRasAdminConnectionHangupNotificationEx As IntPtr
    Public lpfnRASValidatePreAuthenticatedConnectionEx As IntPtr
End Structure
import ctypes
from ctypes import wintypes

class MPRAPI_ADMIN_DLL_CALLBACKS(ctypes.Structure):
    _fields_ = [
        ("revision", ctypes.c_ubyte),
        ("lpfnMprAdminGetIpAddressForUser", ctypes.c_void_p),
        ("lpfnMprAdminReleaseIpAddress", ctypes.c_void_p),
        ("lpfnMprAdminGetIpv6AddressForUser", ctypes.c_void_p),
        ("lpfnMprAdminReleaseIpV6AddressForUser", ctypes.c_void_p),
        ("lpfnRasAdminAcceptNewLink", ctypes.c_void_p),
        ("lpfnRasAdminLinkHangupNotification", ctypes.c_void_p),
        ("lpfnRasAdminTerminateDll", ctypes.c_void_p),
        ("lpfnRasAdminAcceptNewConnectionEx", ctypes.c_void_p),
        ("lpfnRasAdminAcceptEndpointChangeEx", ctypes.c_void_p),
        ("lpfnRasAdminAcceptReauthenticationEx", ctypes.c_void_p),
        ("lpfnRasAdminConnectionHangupNotificationEx", ctypes.c_void_p),
        ("lpfnRASValidatePreAuthenticatedConnectionEx", ctypes.c_void_p),
    ]
#[repr(C)]
pub struct MPRAPI_ADMIN_DLL_CALLBACKS {
    pub revision: u8,
    pub lpfnMprAdminGetIpAddressForUser: *mut core::ffi::c_void,
    pub lpfnMprAdminReleaseIpAddress: *mut core::ffi::c_void,
    pub lpfnMprAdminGetIpv6AddressForUser: *mut core::ffi::c_void,
    pub lpfnMprAdminReleaseIpV6AddressForUser: *mut core::ffi::c_void,
    pub lpfnRasAdminAcceptNewLink: *mut core::ffi::c_void,
    pub lpfnRasAdminLinkHangupNotification: *mut core::ffi::c_void,
    pub lpfnRasAdminTerminateDll: *mut core::ffi::c_void,
    pub lpfnRasAdminAcceptNewConnectionEx: *mut core::ffi::c_void,
    pub lpfnRasAdminAcceptEndpointChangeEx: *mut core::ffi::c_void,
    pub lpfnRasAdminAcceptReauthenticationEx: *mut core::ffi::c_void,
    pub lpfnRasAdminConnectionHangupNotificationEx: *mut core::ffi::c_void,
    pub lpfnRASValidatePreAuthenticatedConnectionEx: *mut core::ffi::c_void,
}
import "golang.org/x/sys/windows"

type MPRAPI_ADMIN_DLL_CALLBACKS struct {
	revision byte
	lpfnMprAdminGetIpAddressForUser uintptr
	lpfnMprAdminReleaseIpAddress uintptr
	lpfnMprAdminGetIpv6AddressForUser uintptr
	lpfnMprAdminReleaseIpV6AddressForUser uintptr
	lpfnRasAdminAcceptNewLink uintptr
	lpfnRasAdminLinkHangupNotification uintptr
	lpfnRasAdminTerminateDll uintptr
	lpfnRasAdminAcceptNewConnectionEx uintptr
	lpfnRasAdminAcceptEndpointChangeEx uintptr
	lpfnRasAdminAcceptReauthenticationEx uintptr
	lpfnRasAdminConnectionHangupNotificationEx uintptr
	lpfnRASValidatePreAuthenticatedConnectionEx uintptr
}
type
  MPRAPI_ADMIN_DLL_CALLBACKS = record
    revision: Byte;
    lpfnMprAdminGetIpAddressForUser: Pointer;
    lpfnMprAdminReleaseIpAddress: Pointer;
    lpfnMprAdminGetIpv6AddressForUser: Pointer;
    lpfnMprAdminReleaseIpV6AddressForUser: Pointer;
    lpfnRasAdminAcceptNewLink: Pointer;
    lpfnRasAdminLinkHangupNotification: Pointer;
    lpfnRasAdminTerminateDll: Pointer;
    lpfnRasAdminAcceptNewConnectionEx: Pointer;
    lpfnRasAdminAcceptEndpointChangeEx: Pointer;
    lpfnRasAdminAcceptReauthenticationEx: Pointer;
    lpfnRasAdminConnectionHangupNotificationEx: Pointer;
    lpfnRASValidatePreAuthenticatedConnectionEx: Pointer;
  end;
const MPRAPI_ADMIN_DLL_CALLBACKS = extern struct {
    revision: u8,
    lpfnMprAdminGetIpAddressForUser: ?*anyopaque,
    lpfnMprAdminReleaseIpAddress: ?*anyopaque,
    lpfnMprAdminGetIpv6AddressForUser: ?*anyopaque,
    lpfnMprAdminReleaseIpV6AddressForUser: ?*anyopaque,
    lpfnRasAdminAcceptNewLink: ?*anyopaque,
    lpfnRasAdminLinkHangupNotification: ?*anyopaque,
    lpfnRasAdminTerminateDll: ?*anyopaque,
    lpfnRasAdminAcceptNewConnectionEx: ?*anyopaque,
    lpfnRasAdminAcceptEndpointChangeEx: ?*anyopaque,
    lpfnRasAdminAcceptReauthenticationEx: ?*anyopaque,
    lpfnRasAdminConnectionHangupNotificationEx: ?*anyopaque,
    lpfnRASValidatePreAuthenticatedConnectionEx: ?*anyopaque,
};
type
  MPRAPI_ADMIN_DLL_CALLBACKS {.bycopy.} = object
    revision: uint8
    lpfnMprAdminGetIpAddressForUser: pointer
    lpfnMprAdminReleaseIpAddress: pointer
    lpfnMprAdminGetIpv6AddressForUser: pointer
    lpfnMprAdminReleaseIpV6AddressForUser: pointer
    lpfnRasAdminAcceptNewLink: pointer
    lpfnRasAdminLinkHangupNotification: pointer
    lpfnRasAdminTerminateDll: pointer
    lpfnRasAdminAcceptNewConnectionEx: pointer
    lpfnRasAdminAcceptEndpointChangeEx: pointer
    lpfnRasAdminAcceptReauthenticationEx: pointer
    lpfnRasAdminConnectionHangupNotificationEx: pointer
    lpfnRASValidatePreAuthenticatedConnectionEx: pointer
struct MPRAPI_ADMIN_DLL_CALLBACKS
{
    ubyte revision;
    void* lpfnMprAdminGetIpAddressForUser;
    void* lpfnMprAdminReleaseIpAddress;
    void* lpfnMprAdminGetIpv6AddressForUser;
    void* lpfnMprAdminReleaseIpV6AddressForUser;
    void* lpfnRasAdminAcceptNewLink;
    void* lpfnRasAdminLinkHangupNotification;
    void* lpfnRasAdminTerminateDll;
    void* lpfnRasAdminAcceptNewConnectionEx;
    void* lpfnRasAdminAcceptEndpointChangeEx;
    void* lpfnRasAdminAcceptReauthenticationEx;
    void* lpfnRasAdminConnectionHangupNotificationEx;
    void* lpfnRASValidatePreAuthenticatedConnectionEx;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; MPRAPI_ADMIN_DLL_CALLBACKS サイズ: 52 バイト(x86)
dim st, 13    ; 4byte整数×13(構造体サイズ 52 / 4 切り上げ)
; revision : BYTE (+0, 1byte)  poke st,0,値  /  値 = peek(st,0)
; lpfnMprAdminGetIpAddressForUser : PMPRADMINGETIPADDRESSFORUSER (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; lpfnMprAdminReleaseIpAddress : PMPRADMINRELEASEIPADRESS (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; lpfnMprAdminGetIpv6AddressForUser : PMPRADMINGETIPV6ADDRESSFORUSER (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; lpfnMprAdminReleaseIpV6AddressForUser : PMPRADMINRELEASEIPV6ADDRESSFORUSER (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; lpfnRasAdminAcceptNewLink : PMPRADMINACCEPTNEWLINK (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; lpfnRasAdminLinkHangupNotification : PMPRADMINLINKHANGUPNOTIFICATION (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; lpfnRasAdminTerminateDll : PMPRADMINTERMINATEDLL (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; lpfnRasAdminAcceptNewConnectionEx : PMPRADMINACCEPTNEWCONNECTIONEX (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; lpfnRasAdminAcceptEndpointChangeEx : PMPRADMINACCEPTTUNNELENDPOINTCHANGEEX (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; lpfnRasAdminAcceptReauthenticationEx : PMPRADMINACCEPTREAUTHENTICATIONEX (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; lpfnRasAdminConnectionHangupNotificationEx : PMPRADMINCONNECTIONHANGUPNOTIFICATIONEX (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; lpfnRASValidatePreAuthenticatedConnectionEx : PMPRADMINRASVALIDATEPREAUTHENTICATEDCONNECTIONEX (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; MPRAPI_ADMIN_DLL_CALLBACKS サイズ: 104 バイト(x64)
dim st, 26    ; 4byte整数×26(構造体サイズ 104 / 4 切り上げ)
; revision : BYTE (+0, 1byte)  poke st,0,値  /  値 = peek(st,0)
; lpfnMprAdminGetIpAddressForUser : PMPRADMINGETIPADDRESSFORUSER (+8, 8byte)  qpoke st,8,値 / qpeek(st,8)  ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; lpfnMprAdminReleaseIpAddress : PMPRADMINRELEASEIPADRESS (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; lpfnMprAdminGetIpv6AddressForUser : PMPRADMINGETIPV6ADDRESSFORUSER (+24, 8byte)  qpoke st,24,値 / qpeek(st,24)  ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; lpfnMprAdminReleaseIpV6AddressForUser : PMPRADMINRELEASEIPV6ADDRESSFORUSER (+32, 8byte)  qpoke st,32,値 / qpeek(st,32)  ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; lpfnRasAdminAcceptNewLink : PMPRADMINACCEPTNEWLINK (+40, 8byte)  qpoke st,40,値 / qpeek(st,40)  ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; lpfnRasAdminLinkHangupNotification : PMPRADMINLINKHANGUPNOTIFICATION (+48, 8byte)  qpoke st,48,値 / qpeek(st,48)  ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; lpfnRasAdminTerminateDll : PMPRADMINTERMINATEDLL (+56, 8byte)  qpoke st,56,値 / qpeek(st,56)  ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; lpfnRasAdminAcceptNewConnectionEx : PMPRADMINACCEPTNEWCONNECTIONEX (+64, 8byte)  qpoke st,64,値 / qpeek(st,64)  ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; lpfnRasAdminAcceptEndpointChangeEx : PMPRADMINACCEPTTUNNELENDPOINTCHANGEEX (+72, 8byte)  qpoke st,72,値 / qpeek(st,72)  ※IronHSPのみ。3.7/3.8は lpoke st,72,下位 : lpoke st,76,上位
; lpfnRasAdminAcceptReauthenticationEx : PMPRADMINACCEPTREAUTHENTICATIONEX (+80, 8byte)  qpoke st,80,値 / qpeek(st,80)  ※IronHSPのみ。3.7/3.8は lpoke st,80,下位 : lpoke st,84,上位
; lpfnRasAdminConnectionHangupNotificationEx : PMPRADMINCONNECTIONHANGUPNOTIFICATIONEX (+88, 8byte)  qpoke st,88,値 / qpeek(st,88)  ※IronHSPのみ。3.7/3.8は lpoke st,88,下位 : lpoke st,92,上位
; lpfnRASValidatePreAuthenticatedConnectionEx : PMPRADMINRASVALIDATEPREAUTHENTICATEDCONNECTIONEX (+96, 8byte)  qpoke st,96,値 / qpeek(st,96)  ※IronHSPのみ。3.7/3.8は lpoke st,96,下位 : lpoke st,100,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global MPRAPI_ADMIN_DLL_CALLBACKS
    #field byte revision
    #field intptr lpfnMprAdminGetIpAddressForUser
    #field intptr lpfnMprAdminReleaseIpAddress
    #field intptr lpfnMprAdminGetIpv6AddressForUser
    #field intptr lpfnMprAdminReleaseIpV6AddressForUser
    #field intptr lpfnRasAdminAcceptNewLink
    #field intptr lpfnRasAdminLinkHangupNotification
    #field intptr lpfnRasAdminTerminateDll
    #field intptr lpfnRasAdminAcceptNewConnectionEx
    #field intptr lpfnRasAdminAcceptEndpointChangeEx
    #field intptr lpfnRasAdminAcceptReauthenticationEx
    #field intptr lpfnRasAdminConnectionHangupNotificationEx
    #field intptr lpfnRASValidatePreAuthenticatedConnectionEx
#endstruct

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