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省略可能な、メイン モードのターゲット サービス プリンシパル名 (SPN) です。多くの場合、コンピューター名になります。
emTargetNameLPWSTR8/4+8+4省略可能な、拡張モードのターゲット SPN です。
numTokensDWORD4+16+8省略可能です。tokens メンバーに含まれる IPSEC_TOKEN0 構造体の数です。
tokensIPSEC_TOKEN0*8/4+24+12省略可能な IPSEC_TOKEN0 構造体の配列です。
explicitCredentialsULONGLONG8+32+16明示的な資格情報への省略可能なハンドルです。
logonIdULONGLONG8+40+24使用されないパラメーターです。常に 0 でなければなりません。

公式ドキュメント

IPSEC_ID0 構造体は、IPsec によって認証される ID に対応する情報を格納します。

解説(Remarks)

IPSEC_ID0 は IPSEC_ID の特定の実装です。詳細については、WFP のバージョンに依存しない名前と、特定バージョンの Windows を対象とする方法 を参照してください。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

#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