Win32 API 日本語リファレンス
ホームNetworking.WindowsWebServices › WS_CERT_SIGNED_SAML_AUTHENTICATOR

WS_CERT_SIGNED_SAML_AUTHENTICATOR

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

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

フィールド

フィールドサイズx64x86説明
authenticatorWS_SAML_AUTHENTICATOR4+0+0基底のSAMLオーセンティケータ構造体。証明書署名検証方式を示す。
trustedIssuerCertsCERT_CONTEXT**8/4+8+4信頼する発行者証明書の配列へのポインタ。各要素はCERT_CONTEXTへのポインタ。
trustedIssuerCertCountDWORD4+16+8trustedIssuerCerts配列の要素数。
decryptionCertCERT_CONTEXT*8/4+24+12暗号化されたSAMLアサーションの復号に用いる証明書へのポインタ。NULL可。
samlValidatorWS_VALIDATE_SAML_CALLBACK8/4+32+16SAMLトークンを追加検証するコールバック関数。
samlValidatorCallbackStatevoid*8/4+40+20SAML検証コールバックへ渡される状態ポインタ。NULL可。

各言語での定義

#include <windows.h>

// WS_SAML_AUTHENTICATOR  (x64 4 / x86 4 バイト)
typedef struct WS_SAML_AUTHENTICATOR {
    WS_SAML_AUTHENTICATOR_TYPE authenticatorType;
} WS_SAML_AUTHENTICATOR;

// WS_CERT_SIGNED_SAML_AUTHENTICATOR  (x64 48 / x86 24 バイト)
typedef struct WS_CERT_SIGNED_SAML_AUTHENTICATOR {
    WS_SAML_AUTHENTICATOR authenticator;
    CERT_CONTEXT** trustedIssuerCerts;
    DWORD trustedIssuerCertCount;
    CERT_CONTEXT* decryptionCert;
    WS_VALIDATE_SAML_CALLBACK samlValidator;
    void* samlValidatorCallbackState;
} WS_CERT_SIGNED_SAML_AUTHENTICATOR;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WS_SAML_AUTHENTICATOR
{
    public int authenticatorType;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WS_CERT_SIGNED_SAML_AUTHENTICATOR
{
    public WS_SAML_AUTHENTICATOR authenticator;
    public IntPtr trustedIssuerCerts;
    public uint trustedIssuerCertCount;
    public IntPtr decryptionCert;
    public IntPtr samlValidator;
    public IntPtr samlValidatorCallbackState;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WS_SAML_AUTHENTICATOR
    Public authenticatorType As Integer
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WS_CERT_SIGNED_SAML_AUTHENTICATOR
    Public authenticator As WS_SAML_AUTHENTICATOR
    Public trustedIssuerCerts As IntPtr
    Public trustedIssuerCertCount As UInteger
    Public decryptionCert As IntPtr
    Public samlValidator As IntPtr
    Public samlValidatorCallbackState As IntPtr
End Structure
import ctypes
from ctypes import wintypes

class WS_SAML_AUTHENTICATOR(ctypes.Structure):
    _fields_ = [
        ("authenticatorType", ctypes.c_int),
    ]

class WS_CERT_SIGNED_SAML_AUTHENTICATOR(ctypes.Structure):
    _fields_ = [
        ("authenticator", WS_SAML_AUTHENTICATOR),
        ("trustedIssuerCerts", ctypes.c_void_p),
        ("trustedIssuerCertCount", wintypes.DWORD),
        ("decryptionCert", ctypes.c_void_p),
        ("samlValidator", ctypes.c_void_p),
        ("samlValidatorCallbackState", ctypes.c_void_p),
    ]
#[repr(C)]
pub struct WS_SAML_AUTHENTICATOR {
    pub authenticatorType: i32,
}

#[repr(C)]
pub struct WS_CERT_SIGNED_SAML_AUTHENTICATOR {
    pub authenticator: WS_SAML_AUTHENTICATOR,
    pub trustedIssuerCerts: *mut core::ffi::c_void,
    pub trustedIssuerCertCount: u32,
    pub decryptionCert: *mut core::ffi::c_void,
    pub samlValidator: *mut core::ffi::c_void,
    pub samlValidatorCallbackState: *mut core::ffi::c_void,
}
import "golang.org/x/sys/windows"

type WS_SAML_AUTHENTICATOR struct {
	authenticatorType int32
}

type WS_CERT_SIGNED_SAML_AUTHENTICATOR struct {
	authenticator WS_SAML_AUTHENTICATOR
	trustedIssuerCerts uintptr
	trustedIssuerCertCount uint32
	decryptionCert uintptr
	samlValidator uintptr
	samlValidatorCallbackState uintptr
}
type
  WS_SAML_AUTHENTICATOR = record
    authenticatorType: Integer;
  end;

  WS_CERT_SIGNED_SAML_AUTHENTICATOR = record
    authenticator: WS_SAML_AUTHENTICATOR;
    trustedIssuerCerts: Pointer;
    trustedIssuerCertCount: DWORD;
    decryptionCert: Pointer;
    samlValidator: Pointer;
    samlValidatorCallbackState: Pointer;
  end;
const WS_SAML_AUTHENTICATOR = extern struct {
    authenticatorType: i32,
};

const WS_CERT_SIGNED_SAML_AUTHENTICATOR = extern struct {
    authenticator: WS_SAML_AUTHENTICATOR,
    trustedIssuerCerts: ?*anyopaque,
    trustedIssuerCertCount: u32,
    decryptionCert: ?*anyopaque,
    samlValidator: ?*anyopaque,
    samlValidatorCallbackState: ?*anyopaque,
};
type
  WS_SAML_AUTHENTICATOR {.bycopy.} = object
    authenticatorType: int32

  WS_CERT_SIGNED_SAML_AUTHENTICATOR {.bycopy.} = object
    authenticator: WS_SAML_AUTHENTICATOR
    trustedIssuerCerts: pointer
    trustedIssuerCertCount: uint32
    decryptionCert: pointer
    samlValidator: pointer
    samlValidatorCallbackState: pointer
struct WS_SAML_AUTHENTICATOR
{
    int authenticatorType;
}

struct WS_CERT_SIGNED_SAML_AUTHENTICATOR
{
    WS_SAML_AUTHENTICATOR authenticator;
    void* trustedIssuerCerts;
    uint trustedIssuerCertCount;
    void* decryptionCert;
    void* samlValidator;
    void* samlValidatorCallbackState;
}

HSP用 定義

HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; WS_CERT_SIGNED_SAML_AUTHENTICATOR サイズ: 24 バイト(x86)
dim st, 6    ; 4byte整数×6(構造体サイズ 24 / 4 切り上げ)
; authenticator : WS_SAML_AUTHENTICATOR (+0, 4byte)  varptr(st)+0 を基点に操作(4byte:入れ子/配列)
; trustedIssuerCerts : CERT_CONTEXT** (+4, 4byte)  varptr(st)+4 を基点に操作(4byte:入れ子/配列)
; trustedIssuerCertCount : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; decryptionCert : CERT_CONTEXT* (+12, 4byte)  varptr(st)+12 を基点に操作(4byte:入れ子/配列)
; samlValidator : WS_VALIDATE_SAML_CALLBACK (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; samlValidatorCallbackState : void* (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; WS_CERT_SIGNED_SAML_AUTHENTICATOR サイズ: 48 バイト(x64)
dim st, 12    ; 4byte整数×12(構造体サイズ 48 / 4 切り上げ)
; authenticator : WS_SAML_AUTHENTICATOR (+0, 4byte)  varptr(st)+0 を基点に操作(4byte:入れ子/配列)
; trustedIssuerCerts : CERT_CONTEXT** (+8, 8byte)  varptr(st)+8 を基点に操作(8byte:入れ子/配列)
; trustedIssuerCertCount : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; decryptionCert : CERT_CONTEXT* (+24, 8byte)  varptr(st)+24 を基点に操作(8byte:入れ子/配列)
; samlValidator : WS_VALIDATE_SAML_CALLBACK (+32, 8byte)  qpoke st,32,値 / qpeek(st,32)  ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; samlValidatorCallbackState : void* (+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 どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global WS_SAML_AUTHENTICATOR
    #field int authenticatorType
#endstruct

#defstruct global WS_CERT_SIGNED_SAML_AUTHENTICATOR
    #field WS_SAML_AUTHENTICATOR authenticator
    #field intptr trustedIssuerCerts
    #field int trustedIssuerCertCount
    #field intptr decryptionCert
    #field intptr samlValidator
    #field intptr samlValidatorCallbackState
#endstruct

stdim st, WS_CERT_SIGNED_SAML_AUTHENTICATOR        ; NSTRUCT 変数を確保
st->trustedIssuerCertCount = 100
mes "trustedIssuerCertCount=" + st->trustedIssuerCertCount