MPRAPI_ADMIN_DLL_CALLBACKS
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 | ||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| revision | BYTE | 1 | +0 | +0 | この構造体のバージョンを表す値です。
| ||||||
| lpfnMprAdminGetIpAddressForUser | PMPRADMINGETIPADDRESSFORUSER | 8/4 | +8 | +4 | MprAdminGetIpAddressForUser コールバックのインスタンスへの関数ポインターです。コールバックのプロトタイプは次のように定義されています。 | ||||||
| lpfnMprAdminReleaseIpAddress | PMPRADMINRELEASEIPADRESS | 8/4 | +16 | +8 | MprAdminReleaseIpAddress コールバックのインスタンスへの関数ポインターです。コールバックのプロトタイプは次のように定義されています。 | ||||||
| lpfnMprAdminGetIpv6AddressForUser | PMPRADMINGETIPV6ADDRESSFORUSER | 8/4 | +24 | +12 | MprAdminGetIpv6AddressForUser コールバックのインスタンスへの関数ポインターです。コールバックのプロトタイプは次のように定義されています。 | ||||||
| lpfnMprAdminReleaseIpV6AddressForUser | PMPRADMINRELEASEIPV6ADDRESSFORUSER | 8/4 | +32 | +16 | MprAdminReleaseIpv6AddressForUser コールバックのインスタンスへの関数ポインターです。コールバックのプロトタイプは次のように定義されています。 | ||||||
| lpfnRasAdminAcceptNewLink | PMPRADMINACCEPTNEWLINK | 8/4 | +40 | +20 | MprAdminAcceptNewLink コールバックのインスタンスへの関数ポインターです。コールバックのプロトタイプは次のように定義されています。 | ||||||
| lpfnRasAdminLinkHangupNotification | PMPRADMINLINKHANGUPNOTIFICATION | 8/4 | +48 | +24 | MprAdminLinkHangupNotification コールバックのインスタンスへの関数ポインターです。コールバックのプロトタイプは次のように定義されています。 | ||||||
| lpfnRasAdminTerminateDll | PMPRADMINTERMINATEDLL | 8/4 | +56 | +28 | MprAdminTerminateDll コールバックのインスタンスへの関数ポインターです。コールバックのプロトタイプは次のように定義されています。 | ||||||
| lpfnRasAdminAcceptNewConnectionEx | PMPRADMINACCEPTNEWCONNECTIONEX | 8/4 | +64 | +32 | MprAdminAcceptNewConnectionEx コールバックのインスタンスへの関数ポインターです。コールバックのプロトタイプは次のように定義されています。 | ||||||
| lpfnRasAdminAcceptEndpointChangeEx | PMPRADMINACCEPTTUNNELENDPOINTCHANGEEX | 8/4 | +72 | +36 | トンネルエンドポイント変更を受け入れるコールバック関数ポインタ。 | ||||||
| lpfnRasAdminAcceptReauthenticationEx | PMPRADMINACCEPTREAUTHENTICATIONEX | 8/4 | +80 | +40 | MprAdminAcceptReauthenticationEx コールバックのインスタンスへの関数ポインターです。コールバックのプロトタイプは次のように定義されています。 | ||||||
| lpfnRasAdminConnectionHangupNotificationEx | PMPRADMINCONNECTIONHANGUPNOTIFICATIONEX | 8/4 | +88 | +44 | MprAdminConnectionHangupNotificationEx コールバックのインスタンスへの関数ポインターです。コールバックのプロトタイプは次のように定義されています。 | ||||||
| lpfnRASValidatePreAuthenticatedConnectionEx | PMPRADMINRASVALIDATEPREAUTHENTICATEDCONNECTIONEX | 8/4 | +96 | +48 | 事前認証済み接続を検証するコールバック関数ポインタ。 |
公式ドキュメント
MPRAPI_ADMIN_DLL_CALLBACKS 構造体は、コールバック関数ポインターを登録するために MprAdminInitializeDllEx 関数によって使用されます。
解説(Remarks)
MPRAPI_ADMIN_DLL_CALLBACKS 構造体のコールバック関数には、次の制限が適用されます。
- lpfnMprAdminGetIpv6AddressForUser と lpfnMprAdminReleaseIpV6AddressForUser は、両方を実装するか、どちらも実装しないかのいずれかでなければなりません。
- lpfnMprAdminGetIpAddressForUser と lpfnMprAdminReleaseIpAddress は、両方を実装するか、どちらも実装しないかのいずれかでなければなりません。
- lpfnRasAdminLinkHangupNotification または lpfnRasAdminAcceptNewLink のいずれかを実装しなければなりません。
- lpfnRasAdminAcceptNewConnectionEx または lpfnRasAdminConnectionHangupNotificationEx のいずれかを実装しなければなりません。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での定義
#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 Structureimport 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: pointerstruct 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