ホーム › NetworkManagement.WindowsFilteringPlatform › IPSEC_ID0
IPSEC_ID0
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| mmTargetName | LPWSTR | 8/4 | +0 | +0 | メインモード認証のターゲット名。NULL可。 |
| emTargetName | LPWSTR | 8/4 | +8 | +4 | 拡張モード認証のターゲット名。NULL可。 |
| numTokens | DWORD | 4 | +16 | +8 | tokens配列の要素数。 |
| tokens | IPSEC_TOKEN0* | 8/4 | +24 | +12 | 認証に関連するIPSEC_TOKEN0の配列へのポインター。 |
| explicitCredentials | ULONGLONG | 8 | +32 | +16 | 明示的に指定された資格情報を識別する値。 |
| logonId | ULONGLONG | 8 | +40 | +24 | 資格情報に関連付くログオンセッションを識別するLUID。 |
各言語での定義
#include <windows.h>
// IPSEC_ID0 (x64 48 / x86 32 バイト)
typedef struct IPSEC_ID0 {
LPWSTR mmTargetName;
LPWSTR emTargetName;
DWORD numTokens;
IPSEC_TOKEN0* tokens;
ULONGLONG explicitCredentials;
ULONGLONG logonId;
} IPSEC_ID0;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct IPSEC_ID0
{
public IntPtr mmTargetName;
public IntPtr emTargetName;
public uint numTokens;
public IntPtr tokens;
public ulong explicitCredentials;
public ulong logonId;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure IPSEC_ID0
Public mmTargetName As IntPtr
Public emTargetName As IntPtr
Public numTokens As UInteger
Public tokens As IntPtr
Public explicitCredentials As ULong
Public logonId As ULong
End Structureimport ctypes
from ctypes import wintypes
class IPSEC_ID0(ctypes.Structure):
_fields_ = [
("mmTargetName", ctypes.c_void_p),
("emTargetName", ctypes.c_void_p),
("numTokens", wintypes.DWORD),
("tokens", ctypes.c_void_p),
("explicitCredentials", ctypes.c_ulonglong),
("logonId", ctypes.c_ulonglong),
]#[repr(C)]
pub struct IPSEC_ID0 {
pub mmTargetName: *mut core::ffi::c_void,
pub emTargetName: *mut core::ffi::c_void,
pub numTokens: u32,
pub tokens: *mut core::ffi::c_void,
pub explicitCredentials: u64,
pub logonId: u64,
}import "golang.org/x/sys/windows"
type IPSEC_ID0 struct {
mmTargetName uintptr
emTargetName uintptr
numTokens uint32
tokens uintptr
explicitCredentials uint64
logonId uint64
}type
IPSEC_ID0 = record
mmTargetName: Pointer;
emTargetName: Pointer;
numTokens: DWORD;
tokens: Pointer;
explicitCredentials: UInt64;
logonId: UInt64;
end;const IPSEC_ID0 = extern struct {
mmTargetName: ?*anyopaque,
emTargetName: ?*anyopaque,
numTokens: u32,
tokens: ?*anyopaque,
explicitCredentials: u64,
logonId: u64,
};type
IPSEC_ID0 {.bycopy.} = object
mmTargetName: pointer
emTargetName: pointer
numTokens: uint32
tokens: pointer
explicitCredentials: uint64
logonId: uint64struct IPSEC_ID0
{
void* mmTargetName;
void* emTargetName;
uint numTokens;
void* tokens;
ulong explicitCredentials;
ulong logonId;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; IPSEC_ID0 サイズ: 32 バイト(x86)
dim st, 8 ; 4byte整数×8(構造体サイズ 32 / 4 切り上げ)
; mmTargetName : LPWSTR (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; emTargetName : LPWSTR (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; numTokens : DWORD (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; tokens : IPSEC_TOKEN0* (+12, 4byte) varptr(st)+12 を基点に操作(4byte:入れ子/配列)
; explicitCredentials : ULONGLONG (+16, 8byte) qpoke st,16,値 / qpeek(st,16) ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; logonId : ULONGLONG (+24, 8byte) qpoke st,24,値 / qpeek(st,24) ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; IPSEC_ID0 サイズ: 48 バイト(x64)
dim st, 12 ; 4byte整数×12(構造体サイズ 48 / 4 切り上げ)
; mmTargetName : LPWSTR (+0, 8byte) qpoke st,0,値 / qpeek(st,0) ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; emTargetName : LPWSTR (+8, 8byte) qpoke st,8,値 / qpeek(st,8) ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; numTokens : DWORD (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; tokens : IPSEC_TOKEN0* (+24, 8byte) varptr(st)+24 を基点に操作(8byte:入れ子/配列)
; explicitCredentials : ULONGLONG (+32, 8byte) qpoke st,32,値 / qpeek(st,32) ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; logonId : ULONGLONG (+40, 8byte) qpoke st,40,値 / qpeek(st,40) ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global IPSEC_ID0
#field intptr mmTargetName
#field intptr emTargetName
#field int numTokens
#field intptr tokens
#field int64 explicitCredentials
#field int64 logonId
#endstruct
stdim st, IPSEC_ID0 ; NSTRUCT 変数を確保
st->numTokens = 100
mes "numTokens=" + st->numTokens