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

IPSEC_ID0

構造体
サイズx64: 48 バイト / x86: 32 バイト

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

フィールド

フィールドサイズx64x86説明
mmTargetNameLPWSTR8/4+0+0メインモード認証のターゲット名。NULL可。
emTargetNameLPWSTR8/4+8+4拡張モード認証のターゲット名。NULL可。
numTokensDWORD4+16+8tokens配列の要素数。
tokensIPSEC_TOKEN0*8/4+24+12認証に関連するIPSEC_TOKEN0の配列へのポインター。
explicitCredentialsULONGLONG8+32+16明示的に指定された資格情報を識別する値。
logonIdULONGLONG8+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 Structure
import 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: uint64
struct 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