ホーム › NetworkManagement.Rras › MPR_IF_CUSTOMINFOEX1
MPR_IF_CUSTOMINFOEX1
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| Header | MPRAPI_OBJECT_HEADER | 4 | +0 | +0 | オブジェクトのリビジョン・種別・サイズを示すMPRAPI_OBJECT_HEADER。 |
| dwFlags | DWORD | 4 | +4 | +4 | カスタム構成の適用対象を示すフラグ(MPR_IF_CUSTOM_*)。 |
| customIkev2Config | ROUTER_IKEv2_IF_CUSTOM_CONFIG1 | 48/28 | +8 | +8 | インターフェイス固有のIKEv2カスタム構成(バージョン1)。 |
各言語での定義
#include <windows.h>
// MPRAPI_OBJECT_HEADER (x64 4 / x86 4 バイト)
typedef struct MPRAPI_OBJECT_HEADER {
BYTE revision;
BYTE type;
WORD size;
} MPRAPI_OBJECT_HEADER;
// CRYPT_INTEGER_BLOB (x64 16 / x86 8 バイト)
typedef struct CRYPT_INTEGER_BLOB {
DWORD cbData;
BYTE* pbData;
} CRYPT_INTEGER_BLOB;
// ROUTER_IKEv2_IF_CUSTOM_CONFIG1 (x64 48 / x86 28 バイト)
typedef struct ROUTER_IKEv2_IF_CUSTOM_CONFIG1 {
DWORD dwSaLifeTime;
DWORD dwSaDataSize;
CRYPT_INTEGER_BLOB certificateName;
ROUTER_CUSTOM_IKEv2_POLICY0* customPolicy;
CRYPT_INTEGER_BLOB certificateHash;
} ROUTER_IKEv2_IF_CUSTOM_CONFIG1;
// MPR_IF_CUSTOMINFOEX1 (x64 56 / x86 36 バイト)
typedef struct MPR_IF_CUSTOMINFOEX1 {
MPRAPI_OBJECT_HEADER Header;
DWORD dwFlags;
ROUTER_IKEv2_IF_CUSTOM_CONFIG1 customIkev2Config;
} MPR_IF_CUSTOMINFOEX1;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct MPRAPI_OBJECT_HEADER
{
public byte revision;
public byte type;
public ushort size;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct CRYPT_INTEGER_BLOB
{
public uint cbData;
public IntPtr pbData;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct ROUTER_IKEv2_IF_CUSTOM_CONFIG1
{
public uint dwSaLifeTime;
public uint dwSaDataSize;
public CRYPT_INTEGER_BLOB certificateName;
public IntPtr customPolicy;
public CRYPT_INTEGER_BLOB certificateHash;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct MPR_IF_CUSTOMINFOEX1
{
public MPRAPI_OBJECT_HEADER Header;
public uint dwFlags;
public ROUTER_IKEv2_IF_CUSTOM_CONFIG1 customIkev2Config;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure MPRAPI_OBJECT_HEADER
Public revision As Byte
Public type As Byte
Public size As UShort
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure CRYPT_INTEGER_BLOB
Public cbData As UInteger
Public pbData As IntPtr
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure ROUTER_IKEv2_IF_CUSTOM_CONFIG1
Public dwSaLifeTime As UInteger
Public dwSaDataSize As UInteger
Public certificateName As CRYPT_INTEGER_BLOB
Public customPolicy As IntPtr
Public certificateHash As CRYPT_INTEGER_BLOB
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure MPR_IF_CUSTOMINFOEX1
Public Header As MPRAPI_OBJECT_HEADER
Public dwFlags As UInteger
Public customIkev2Config As ROUTER_IKEv2_IF_CUSTOM_CONFIG1
End Structureimport ctypes
from ctypes import wintypes
class MPRAPI_OBJECT_HEADER(ctypes.Structure):
_fields_ = [
("revision", ctypes.c_ubyte),
("type", ctypes.c_ubyte),
("size", ctypes.c_ushort),
]
class CRYPT_INTEGER_BLOB(ctypes.Structure):
_fields_ = [
("cbData", wintypes.DWORD),
("pbData", ctypes.c_void_p),
]
class ROUTER_IKEv2_IF_CUSTOM_CONFIG1(ctypes.Structure):
_fields_ = [
("dwSaLifeTime", wintypes.DWORD),
("dwSaDataSize", wintypes.DWORD),
("certificateName", CRYPT_INTEGER_BLOB),
("customPolicy", ctypes.c_void_p),
("certificateHash", CRYPT_INTEGER_BLOB),
]
class MPR_IF_CUSTOMINFOEX1(ctypes.Structure):
_fields_ = [
("Header", MPRAPI_OBJECT_HEADER),
("dwFlags", wintypes.DWORD),
("customIkev2Config", ROUTER_IKEv2_IF_CUSTOM_CONFIG1),
]#[repr(C)]
pub struct MPRAPI_OBJECT_HEADER {
pub revision: u8,
pub type: u8,
pub size: u16,
}
#[repr(C)]
pub struct CRYPT_INTEGER_BLOB {
pub cbData: u32,
pub pbData: *mut core::ffi::c_void,
}
#[repr(C)]
pub struct ROUTER_IKEv2_IF_CUSTOM_CONFIG1 {
pub dwSaLifeTime: u32,
pub dwSaDataSize: u32,
pub certificateName: CRYPT_INTEGER_BLOB,
pub customPolicy: *mut core::ffi::c_void,
pub certificateHash: CRYPT_INTEGER_BLOB,
}
#[repr(C)]
pub struct MPR_IF_CUSTOMINFOEX1 {
pub Header: MPRAPI_OBJECT_HEADER,
pub dwFlags: u32,
pub customIkev2Config: ROUTER_IKEv2_IF_CUSTOM_CONFIG1,
}import "golang.org/x/sys/windows"
type MPRAPI_OBJECT_HEADER struct {
revision byte
type byte
size uint16
}
type CRYPT_INTEGER_BLOB struct {
cbData uint32
pbData uintptr
}
type ROUTER_IKEv2_IF_CUSTOM_CONFIG1 struct {
dwSaLifeTime uint32
dwSaDataSize uint32
certificateName CRYPT_INTEGER_BLOB
customPolicy uintptr
certificateHash CRYPT_INTEGER_BLOB
}
type MPR_IF_CUSTOMINFOEX1 struct {
Header MPRAPI_OBJECT_HEADER
dwFlags uint32
customIkev2Config ROUTER_IKEv2_IF_CUSTOM_CONFIG1
}type
MPRAPI_OBJECT_HEADER = record
revision: Byte;
type: Byte;
size: Word;
end;
CRYPT_INTEGER_BLOB = record
cbData: DWORD;
pbData: Pointer;
end;
ROUTER_IKEv2_IF_CUSTOM_CONFIG1 = record
dwSaLifeTime: DWORD;
dwSaDataSize: DWORD;
certificateName: CRYPT_INTEGER_BLOB;
customPolicy: Pointer;
certificateHash: CRYPT_INTEGER_BLOB;
end;
MPR_IF_CUSTOMINFOEX1 = record
Header: MPRAPI_OBJECT_HEADER;
dwFlags: DWORD;
customIkev2Config: ROUTER_IKEv2_IF_CUSTOM_CONFIG1;
end;const MPRAPI_OBJECT_HEADER = extern struct {
revision: u8,
type: u8,
size: u16,
};
const CRYPT_INTEGER_BLOB = extern struct {
cbData: u32,
pbData: ?*anyopaque,
};
const ROUTER_IKEv2_IF_CUSTOM_CONFIG1 = extern struct {
dwSaLifeTime: u32,
dwSaDataSize: u32,
certificateName: CRYPT_INTEGER_BLOB,
customPolicy: ?*anyopaque,
certificateHash: CRYPT_INTEGER_BLOB,
};
const MPR_IF_CUSTOMINFOEX1 = extern struct {
Header: MPRAPI_OBJECT_HEADER,
dwFlags: u32,
customIkev2Config: ROUTER_IKEv2_IF_CUSTOM_CONFIG1,
};type
MPRAPI_OBJECT_HEADER {.bycopy.} = object
revision: uint8
type: uint8
size: uint16
CRYPT_INTEGER_BLOB {.bycopy.} = object
cbData: uint32
pbData: pointer
ROUTER_IKEv2_IF_CUSTOM_CONFIG1 {.bycopy.} = object
dwSaLifeTime: uint32
dwSaDataSize: uint32
certificateName: CRYPT_INTEGER_BLOB
customPolicy: pointer
certificateHash: CRYPT_INTEGER_BLOB
MPR_IF_CUSTOMINFOEX1 {.bycopy.} = object
Header: MPRAPI_OBJECT_HEADER
dwFlags: uint32
customIkev2Config: ROUTER_IKEv2_IF_CUSTOM_CONFIG1struct MPRAPI_OBJECT_HEADER
{
ubyte revision;
ubyte type;
ushort size;
}
struct CRYPT_INTEGER_BLOB
{
uint cbData;
void* pbData;
}
struct ROUTER_IKEv2_IF_CUSTOM_CONFIG1
{
uint dwSaLifeTime;
uint dwSaDataSize;
CRYPT_INTEGER_BLOB certificateName;
void* customPolicy;
CRYPT_INTEGER_BLOB certificateHash;
}
struct MPR_IF_CUSTOMINFOEX1
{
MPRAPI_OBJECT_HEADER Header;
uint dwFlags;
ROUTER_IKEv2_IF_CUSTOM_CONFIG1 customIkev2Config;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; MPR_IF_CUSTOMINFOEX1 サイズ: 36 バイト(x86)
dim st, 9 ; 4byte整数×9(構造体サイズ 36 / 4 切り上げ)
; Header : MPRAPI_OBJECT_HEADER (+0, 4byte) varptr(st)+0 を基点に操作(4byte:入れ子/配列)
; dwFlags : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; customIkev2Config : ROUTER_IKEv2_IF_CUSTOM_CONFIG1 (+8, 28byte) varptr(st)+8 を基点に操作(28byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; MPR_IF_CUSTOMINFOEX1 サイズ: 56 バイト(x64)
dim st, 14 ; 4byte整数×14(構造体サイズ 56 / 4 切り上げ)
; Header : MPRAPI_OBJECT_HEADER (+0, 4byte) varptr(st)+0 を基点に操作(4byte:入れ子/配列)
; dwFlags : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; customIkev2Config : ROUTER_IKEv2_IF_CUSTOM_CONFIG1 (+8, 48byte) varptr(st)+8 を基点に操作(48byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global MPRAPI_OBJECT_HEADER
#field byte revision
#field byte type
#field short size
#endstruct
#defstruct global CRYPT_INTEGER_BLOB
#field int cbData
#field intptr pbData
#endstruct
#defstruct global ROUTER_IKEv2_IF_CUSTOM_CONFIG1
#field int dwSaLifeTime
#field int dwSaDataSize
#field CRYPT_INTEGER_BLOB certificateName
#field intptr customPolicy
#field CRYPT_INTEGER_BLOB certificateHash
#endstruct
#defstruct global MPR_IF_CUSTOMINFOEX1
#field MPRAPI_OBJECT_HEADER Header
#field int dwFlags
#field ROUTER_IKEv2_IF_CUSTOM_CONFIG1 customIkev2Config
#endstruct
stdim st, MPR_IF_CUSTOMINFOEX1 ; NSTRUCT 変数を確保
st->dwFlags = 100
mes "dwFlags=" + st->dwFlags