Win32 API 日本語リファレンス
ホームSecurity.Authentication.WebAuthn › WEBAUTHN_AUTHENTICATOR_GET_ASSERTION_OPTIONS

WEBAUTHN_AUTHENTICATOR_GET_ASSERTION_OPTIONS

構造体
サイズx64: 200 バイト / x86: 116 バイト

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

フィールド

フィールドサイズx64x86説明
dwVersionDWORD4+0+0この構造体のバージョンです。
dwTimeoutMillisecondsDWORD4+4+4操作が完了すると想定される時間です。これはガイダンスとして使用され、プラットフォームによって上書きされる場合があります。
CredentialListWEBAUTHN_CREDENTIALS16/8+8+8アサーションで使用が許可される資格情報の一覧です。
ExtensionsWEBAUTHN_EXTENSIONS16/8+24+16拡張機能の識別子から、対応する認証器拡張機能の入力へのCBORマップです。証明書利用者 (Relying Party) が要求した拡張機能に基づいて、クライアントによって作成されます。これらは、操作の実行時に解析される 省略可能 な拡張機能です。
dwAuthenticatorAttachmentDWORD4+40+24アサーションのアタッチメントです。プラットフォーム認証器とクロスプラットフォーム認証器のいずれかを指定する 省略可能 な値です。
dwUserVerificationRequirementDWORD4+44+28実際に適用されるユーザー検証要件です。
dwFlagsDWORD4+48+32アサーションのフラグです。
pwszU2fAppIdLPWSTR8/4+56+36U2F AppId の 省略可能 な識別子です。ハッシュ化される前に UTF8 に変換されます。小文字には変換されません。
pbU2fAppIdBOOL*8/4+64+40これが NULL 以外の場合、PCWSTR pwszRpId ではなく pwszU2fAppid が使用されたときに TRUE に設定されます。
pCancellationIdGUID*8/4+72+44省略可能 なキャンセル Id です。詳細については WebAuthNGetCancellationId を参照してください。
pAllowCredentialListWEBAUTHN_CREDENTIAL_LIST*8/4+80+48証明書利用者 (Relying Party) が受け入れ可能な資格情報を記述した公開キー資格情報記述子の 省略可能 な一覧です (クライアントによってフィルター処理されている場合があります)。指定されている場合、CredentialList は無視されます。
dwCredLargeBlobOperationDWORD4+88+52ラージ BLOB 操作です。
cbCredLargeBlobDWORD4+92+56pbCredLargeBlob のサイズです。
pbCredLargeBlobBYTE*8/4+96+60ラージ資格情報 BLOB へのポインターです。
pHmacSecretSaltValuesWEBAUTHN_HMAC_SECRET_SALT_VALUES*8/4+104+64WebAuthN 仕様に従って HMAC-SECRET 値に変換される PRF 値です。
bBrowserInPrivateModeBOOL4+112+68クライアントがブラウザーのインプライベート モードを使用しているかどうかを示します。既定値が FALSE省略可能 なパラメーターです。
pLinkedDeviceCTAPCBOR_HYBRID_STORAGE_LINKED_DATA*8/4+120+72ハイブリッド転送のリンク済みデバイス情報へのポインタ。NULL可。
bAutoFillBOOL4+128+76自動入力(条件付きUI)かを示すブール値。
cbJsonExtDWORD4+132+80JSON形式拡張データのバイト数を示す。
pbJsonExtBYTE*8/4+136+84JSON形式の拡張データへのポインタ。
cCredentialHintsDWORD4+144+88ppwszCredentialHints配列の要素数を示す。
ppwszCredentialHintsLPWSTR*8/4+152+92資格情報選択ヒント文字列の配列へのポインタ。
pwszRemoteWebOriginLPWSTR8/4+160+96リモートWebオリジン文字列へのポインタ。NULL可。
cbPublicKeyCredentialRequestOptionsJSONDWORD4+168+100要求オプションJSONのバイト数を示す。
pbPublicKeyCredentialRequestOptionsJSONBYTE*8/4+176+104要求オプションJSONデータへのポインタ。
cbAuthenticatorIdDWORD4+184+108認証器IDのバイト数を示す。
pbAuthenticatorIdBYTE*8/4+192+112使用する認証器のIDへのポインタ。NULL可。

公式ドキュメント

アサーションの取得に必要なデータを格納する構造体です。

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

各言語での定義

#include <windows.h>

// WEBAUTHN_CREDENTIALS  (x64 16 / x86 8 バイト)
typedef struct WEBAUTHN_CREDENTIALS {
    DWORD cCredentials;
    WEBAUTHN_CREDENTIAL* pCredentials;
} WEBAUTHN_CREDENTIALS;

// WEBAUTHN_EXTENSIONS  (x64 16 / x86 8 バイト)
typedef struct WEBAUTHN_EXTENSIONS {
    DWORD cExtensions;
    WEBAUTHN_EXTENSION* pExtensions;
} WEBAUTHN_EXTENSIONS;

// WEBAUTHN_AUTHENTICATOR_GET_ASSERTION_OPTIONS  (x64 200 / x86 116 バイト)
typedef struct WEBAUTHN_AUTHENTICATOR_GET_ASSERTION_OPTIONS {
    DWORD dwVersion;
    DWORD dwTimeoutMilliseconds;
    WEBAUTHN_CREDENTIALS CredentialList;
    WEBAUTHN_EXTENSIONS Extensions;
    DWORD dwAuthenticatorAttachment;
    DWORD dwUserVerificationRequirement;
    DWORD dwFlags;
    LPWSTR pwszU2fAppId;
    BOOL* pbU2fAppId;
    GUID* pCancellationId;
    WEBAUTHN_CREDENTIAL_LIST* pAllowCredentialList;
    DWORD dwCredLargeBlobOperation;
    DWORD cbCredLargeBlob;
    BYTE* pbCredLargeBlob;
    WEBAUTHN_HMAC_SECRET_SALT_VALUES* pHmacSecretSaltValues;
    BOOL bBrowserInPrivateMode;
    CTAPCBOR_HYBRID_STORAGE_LINKED_DATA* pLinkedDevice;
    BOOL bAutoFill;
    DWORD cbJsonExt;
    BYTE* pbJsonExt;
    DWORD cCredentialHints;
    LPWSTR* ppwszCredentialHints;
    LPWSTR pwszRemoteWebOrigin;
    DWORD cbPublicKeyCredentialRequestOptionsJSON;
    BYTE* pbPublicKeyCredentialRequestOptionsJSON;
    DWORD cbAuthenticatorId;
    BYTE* pbAuthenticatorId;
} WEBAUTHN_AUTHENTICATOR_GET_ASSERTION_OPTIONS;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WEBAUTHN_CREDENTIALS
{
    public uint cCredentials;
    public IntPtr pCredentials;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WEBAUTHN_EXTENSIONS
{
    public uint cExtensions;
    public IntPtr pExtensions;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WEBAUTHN_AUTHENTICATOR_GET_ASSERTION_OPTIONS
{
    public uint dwVersion;
    public uint dwTimeoutMilliseconds;
    public WEBAUTHN_CREDENTIALS CredentialList;
    public WEBAUTHN_EXTENSIONS Extensions;
    public uint dwAuthenticatorAttachment;
    public uint dwUserVerificationRequirement;
    public uint dwFlags;
    public IntPtr pwszU2fAppId;
    [MarshalAs(UnmanagedType.Bool)] public bool pbU2fAppId;
    public IntPtr pCancellationId;
    public IntPtr pAllowCredentialList;
    public uint dwCredLargeBlobOperation;
    public uint cbCredLargeBlob;
    public IntPtr pbCredLargeBlob;
    public IntPtr pHmacSecretSaltValues;
    [MarshalAs(UnmanagedType.Bool)] public bool bBrowserInPrivateMode;
    public IntPtr pLinkedDevice;
    [MarshalAs(UnmanagedType.Bool)] public bool bAutoFill;
    public uint cbJsonExt;
    public IntPtr pbJsonExt;
    public uint cCredentialHints;
    public IntPtr ppwszCredentialHints;
    public IntPtr pwszRemoteWebOrigin;
    public uint cbPublicKeyCredentialRequestOptionsJSON;
    public IntPtr pbPublicKeyCredentialRequestOptionsJSON;
    public uint cbAuthenticatorId;
    public IntPtr pbAuthenticatorId;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WEBAUTHN_CREDENTIALS
    Public cCredentials As UInteger
    Public pCredentials As IntPtr
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WEBAUTHN_EXTENSIONS
    Public cExtensions As UInteger
    Public pExtensions As IntPtr
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WEBAUTHN_AUTHENTICATOR_GET_ASSERTION_OPTIONS
    Public dwVersion As UInteger
    Public dwTimeoutMilliseconds As UInteger
    Public CredentialList As WEBAUTHN_CREDENTIALS
    Public Extensions As WEBAUTHN_EXTENSIONS
    Public dwAuthenticatorAttachment As UInteger
    Public dwUserVerificationRequirement As UInteger
    Public dwFlags As UInteger
    Public pwszU2fAppId As IntPtr
    <MarshalAs(UnmanagedType.Bool)> Public pbU2fAppId As Boolean
    Public pCancellationId As IntPtr
    Public pAllowCredentialList As IntPtr
    Public dwCredLargeBlobOperation As UInteger
    Public cbCredLargeBlob As UInteger
    Public pbCredLargeBlob As IntPtr
    Public pHmacSecretSaltValues As IntPtr
    <MarshalAs(UnmanagedType.Bool)> Public bBrowserInPrivateMode As Boolean
    Public pLinkedDevice As IntPtr
    <MarshalAs(UnmanagedType.Bool)> Public bAutoFill As Boolean
    Public cbJsonExt As UInteger
    Public pbJsonExt As IntPtr
    Public cCredentialHints As UInteger
    Public ppwszCredentialHints As IntPtr
    Public pwszRemoteWebOrigin As IntPtr
    Public cbPublicKeyCredentialRequestOptionsJSON As UInteger
    Public pbPublicKeyCredentialRequestOptionsJSON As IntPtr
    Public cbAuthenticatorId As UInteger
    Public pbAuthenticatorId As IntPtr
End Structure
import ctypes
from ctypes import wintypes

class WEBAUTHN_CREDENTIALS(ctypes.Structure):
    _fields_ = [
        ("cCredentials", wintypes.DWORD),
        ("pCredentials", ctypes.c_void_p),
    ]

class WEBAUTHN_EXTENSIONS(ctypes.Structure):
    _fields_ = [
        ("cExtensions", wintypes.DWORD),
        ("pExtensions", ctypes.c_void_p),
    ]

class WEBAUTHN_AUTHENTICATOR_GET_ASSERTION_OPTIONS(ctypes.Structure):
    _fields_ = [
        ("dwVersion", wintypes.DWORD),
        ("dwTimeoutMilliseconds", wintypes.DWORD),
        ("CredentialList", WEBAUTHN_CREDENTIALS),
        ("Extensions", WEBAUTHN_EXTENSIONS),
        ("dwAuthenticatorAttachment", wintypes.DWORD),
        ("dwUserVerificationRequirement", wintypes.DWORD),
        ("dwFlags", wintypes.DWORD),
        ("pwszU2fAppId", ctypes.c_void_p),
        ("pbU2fAppId", ctypes.c_void_p),
        ("pCancellationId", ctypes.c_void_p),
        ("pAllowCredentialList", ctypes.c_void_p),
        ("dwCredLargeBlobOperation", wintypes.DWORD),
        ("cbCredLargeBlob", wintypes.DWORD),
        ("pbCredLargeBlob", ctypes.c_void_p),
        ("pHmacSecretSaltValues", ctypes.c_void_p),
        ("bBrowserInPrivateMode", wintypes.BOOL),
        ("pLinkedDevice", ctypes.c_void_p),
        ("bAutoFill", wintypes.BOOL),
        ("cbJsonExt", wintypes.DWORD),
        ("pbJsonExt", ctypes.c_void_p),
        ("cCredentialHints", wintypes.DWORD),
        ("ppwszCredentialHints", ctypes.c_void_p),
        ("pwszRemoteWebOrigin", ctypes.c_void_p),
        ("cbPublicKeyCredentialRequestOptionsJSON", wintypes.DWORD),
        ("pbPublicKeyCredentialRequestOptionsJSON", ctypes.c_void_p),
        ("cbAuthenticatorId", wintypes.DWORD),
        ("pbAuthenticatorId", ctypes.c_void_p),
    ]
#[repr(C)]
pub struct WEBAUTHN_CREDENTIALS {
    pub cCredentials: u32,
    pub pCredentials: *mut core::ffi::c_void,
}

#[repr(C)]
pub struct WEBAUTHN_EXTENSIONS {
    pub cExtensions: u32,
    pub pExtensions: *mut core::ffi::c_void,
}

#[repr(C)]
pub struct WEBAUTHN_AUTHENTICATOR_GET_ASSERTION_OPTIONS {
    pub dwVersion: u32,
    pub dwTimeoutMilliseconds: u32,
    pub CredentialList: WEBAUTHN_CREDENTIALS,
    pub Extensions: WEBAUTHN_EXTENSIONS,
    pub dwAuthenticatorAttachment: u32,
    pub dwUserVerificationRequirement: u32,
    pub dwFlags: u32,
    pub pwszU2fAppId: *mut core::ffi::c_void,
    pub pbU2fAppId: *mut core::ffi::c_void,
    pub pCancellationId: *mut core::ffi::c_void,
    pub pAllowCredentialList: *mut core::ffi::c_void,
    pub dwCredLargeBlobOperation: u32,
    pub cbCredLargeBlob: u32,
    pub pbCredLargeBlob: *mut core::ffi::c_void,
    pub pHmacSecretSaltValues: *mut core::ffi::c_void,
    pub bBrowserInPrivateMode: i32,
    pub pLinkedDevice: *mut core::ffi::c_void,
    pub bAutoFill: i32,
    pub cbJsonExt: u32,
    pub pbJsonExt: *mut core::ffi::c_void,
    pub cCredentialHints: u32,
    pub ppwszCredentialHints: *mut core::ffi::c_void,
    pub pwszRemoteWebOrigin: *mut core::ffi::c_void,
    pub cbPublicKeyCredentialRequestOptionsJSON: u32,
    pub pbPublicKeyCredentialRequestOptionsJSON: *mut core::ffi::c_void,
    pub cbAuthenticatorId: u32,
    pub pbAuthenticatorId: *mut core::ffi::c_void,
}
import "golang.org/x/sys/windows"

type WEBAUTHN_CREDENTIALS struct {
	cCredentials uint32
	pCredentials uintptr
}

type WEBAUTHN_EXTENSIONS struct {
	cExtensions uint32
	pExtensions uintptr
}

type WEBAUTHN_AUTHENTICATOR_GET_ASSERTION_OPTIONS struct {
	dwVersion uint32
	dwTimeoutMilliseconds uint32
	CredentialList WEBAUTHN_CREDENTIALS
	Extensions WEBAUTHN_EXTENSIONS
	dwAuthenticatorAttachment uint32
	dwUserVerificationRequirement uint32
	dwFlags uint32
	pwszU2fAppId uintptr
	pbU2fAppId uintptr
	pCancellationId uintptr
	pAllowCredentialList uintptr
	dwCredLargeBlobOperation uint32
	cbCredLargeBlob uint32
	pbCredLargeBlob uintptr
	pHmacSecretSaltValues uintptr
	bBrowserInPrivateMode int32
	pLinkedDevice uintptr
	bAutoFill int32
	cbJsonExt uint32
	pbJsonExt uintptr
	cCredentialHints uint32
	ppwszCredentialHints uintptr
	pwszRemoteWebOrigin uintptr
	cbPublicKeyCredentialRequestOptionsJSON uint32
	pbPublicKeyCredentialRequestOptionsJSON uintptr
	cbAuthenticatorId uint32
	pbAuthenticatorId uintptr
}
type
  WEBAUTHN_CREDENTIALS = record
    cCredentials: DWORD;
    pCredentials: Pointer;
  end;

  WEBAUTHN_EXTENSIONS = record
    cExtensions: DWORD;
    pExtensions: Pointer;
  end;

  WEBAUTHN_AUTHENTICATOR_GET_ASSERTION_OPTIONS = record
    dwVersion: DWORD;
    dwTimeoutMilliseconds: DWORD;
    CredentialList: WEBAUTHN_CREDENTIALS;
    Extensions: WEBAUTHN_EXTENSIONS;
    dwAuthenticatorAttachment: DWORD;
    dwUserVerificationRequirement: DWORD;
    dwFlags: DWORD;
    pwszU2fAppId: Pointer;
    pbU2fAppId: Pointer;
    pCancellationId: Pointer;
    pAllowCredentialList: Pointer;
    dwCredLargeBlobOperation: DWORD;
    cbCredLargeBlob: DWORD;
    pbCredLargeBlob: Pointer;
    pHmacSecretSaltValues: Pointer;
    bBrowserInPrivateMode: BOOL;
    pLinkedDevice: Pointer;
    bAutoFill: BOOL;
    cbJsonExt: DWORD;
    pbJsonExt: Pointer;
    cCredentialHints: DWORD;
    ppwszCredentialHints: Pointer;
    pwszRemoteWebOrigin: Pointer;
    cbPublicKeyCredentialRequestOptionsJSON: DWORD;
    pbPublicKeyCredentialRequestOptionsJSON: Pointer;
    cbAuthenticatorId: DWORD;
    pbAuthenticatorId: Pointer;
  end;
const WEBAUTHN_CREDENTIALS = extern struct {
    cCredentials: u32,
    pCredentials: ?*anyopaque,
};

const WEBAUTHN_EXTENSIONS = extern struct {
    cExtensions: u32,
    pExtensions: ?*anyopaque,
};

const WEBAUTHN_AUTHENTICATOR_GET_ASSERTION_OPTIONS = extern struct {
    dwVersion: u32,
    dwTimeoutMilliseconds: u32,
    CredentialList: WEBAUTHN_CREDENTIALS,
    Extensions: WEBAUTHN_EXTENSIONS,
    dwAuthenticatorAttachment: u32,
    dwUserVerificationRequirement: u32,
    dwFlags: u32,
    pwszU2fAppId: ?*anyopaque,
    pbU2fAppId: ?*anyopaque,
    pCancellationId: ?*anyopaque,
    pAllowCredentialList: ?*anyopaque,
    dwCredLargeBlobOperation: u32,
    cbCredLargeBlob: u32,
    pbCredLargeBlob: ?*anyopaque,
    pHmacSecretSaltValues: ?*anyopaque,
    bBrowserInPrivateMode: i32,
    pLinkedDevice: ?*anyopaque,
    bAutoFill: i32,
    cbJsonExt: u32,
    pbJsonExt: ?*anyopaque,
    cCredentialHints: u32,
    ppwszCredentialHints: ?*anyopaque,
    pwszRemoteWebOrigin: ?*anyopaque,
    cbPublicKeyCredentialRequestOptionsJSON: u32,
    pbPublicKeyCredentialRequestOptionsJSON: ?*anyopaque,
    cbAuthenticatorId: u32,
    pbAuthenticatorId: ?*anyopaque,
};
type
  WEBAUTHN_CREDENTIALS {.bycopy.} = object
    cCredentials: uint32
    pCredentials: pointer

  WEBAUTHN_EXTENSIONS {.bycopy.} = object
    cExtensions: uint32
    pExtensions: pointer

  WEBAUTHN_AUTHENTICATOR_GET_ASSERTION_OPTIONS {.bycopy.} = object
    dwVersion: uint32
    dwTimeoutMilliseconds: uint32
    CredentialList: WEBAUTHN_CREDENTIALS
    Extensions: WEBAUTHN_EXTENSIONS
    dwAuthenticatorAttachment: uint32
    dwUserVerificationRequirement: uint32
    dwFlags: uint32
    pwszU2fAppId: pointer
    pbU2fAppId: pointer
    pCancellationId: pointer
    pAllowCredentialList: pointer
    dwCredLargeBlobOperation: uint32
    cbCredLargeBlob: uint32
    pbCredLargeBlob: pointer
    pHmacSecretSaltValues: pointer
    bBrowserInPrivateMode: int32
    pLinkedDevice: pointer
    bAutoFill: int32
    cbJsonExt: uint32
    pbJsonExt: pointer
    cCredentialHints: uint32
    ppwszCredentialHints: pointer
    pwszRemoteWebOrigin: pointer
    cbPublicKeyCredentialRequestOptionsJSON: uint32
    pbPublicKeyCredentialRequestOptionsJSON: pointer
    cbAuthenticatorId: uint32
    pbAuthenticatorId: pointer
struct WEBAUTHN_CREDENTIALS
{
    uint cCredentials;
    void* pCredentials;
}

struct WEBAUTHN_EXTENSIONS
{
    uint cExtensions;
    void* pExtensions;
}

struct WEBAUTHN_AUTHENTICATOR_GET_ASSERTION_OPTIONS
{
    uint dwVersion;
    uint dwTimeoutMilliseconds;
    WEBAUTHN_CREDENTIALS CredentialList;
    WEBAUTHN_EXTENSIONS Extensions;
    uint dwAuthenticatorAttachment;
    uint dwUserVerificationRequirement;
    uint dwFlags;
    void* pwszU2fAppId;
    void* pbU2fAppId;
    void* pCancellationId;
    void* pAllowCredentialList;
    uint dwCredLargeBlobOperation;
    uint cbCredLargeBlob;
    void* pbCredLargeBlob;
    void* pHmacSecretSaltValues;
    int bBrowserInPrivateMode;
    void* pLinkedDevice;
    int bAutoFill;
    uint cbJsonExt;
    void* pbJsonExt;
    uint cCredentialHints;
    void* ppwszCredentialHints;
    void* pwszRemoteWebOrigin;
    uint cbPublicKeyCredentialRequestOptionsJSON;
    void* pbPublicKeyCredentialRequestOptionsJSON;
    uint cbAuthenticatorId;
    void* pbAuthenticatorId;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; WEBAUTHN_AUTHENTICATOR_GET_ASSERTION_OPTIONS サイズ: 116 バイト(x86)
dim st, 29    ; 4byte整数×29(構造体サイズ 116 / 4 切り上げ)
; dwVersion : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; dwTimeoutMilliseconds : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; CredentialList : WEBAUTHN_CREDENTIALS (+8, 8byte)  varptr(st)+8 を基点に操作(8byte:入れ子/配列)
; Extensions : WEBAUTHN_EXTENSIONS (+16, 8byte)  varptr(st)+16 を基点に操作(8byte:入れ子/配列)
; dwAuthenticatorAttachment : DWORD (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; dwUserVerificationRequirement : DWORD (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; dwFlags : DWORD (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; pwszU2fAppId : LPWSTR (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; pbU2fAppId : BOOL* (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; pCancellationId : GUID* (+44, 4byte)  varptr(st)+44 を基点に操作(4byte:入れ子/配列)
; pAllowCredentialList : WEBAUTHN_CREDENTIAL_LIST* (+48, 4byte)  varptr(st)+48 を基点に操作(4byte:入れ子/配列)
; dwCredLargeBlobOperation : DWORD (+52, 4byte)  st.13 = 値  /  値 = st.13   (lpoke/lpeek も可)
; cbCredLargeBlob : DWORD (+56, 4byte)  st.14 = 値  /  値 = st.14   (lpoke/lpeek も可)
; pbCredLargeBlob : BYTE* (+60, 4byte)  st.15 = 値  /  値 = st.15   (lpoke/lpeek も可)
; pHmacSecretSaltValues : WEBAUTHN_HMAC_SECRET_SALT_VALUES* (+64, 4byte)  varptr(st)+64 を基点に操作(4byte:入れ子/配列)
; bBrowserInPrivateMode : BOOL (+68, 4byte)  st.17 = 値  /  値 = st.17   (lpoke/lpeek も可)
; pLinkedDevice : CTAPCBOR_HYBRID_STORAGE_LINKED_DATA* (+72, 4byte)  varptr(st)+72 を基点に操作(4byte:入れ子/配列)
; bAutoFill : BOOL (+76, 4byte)  st.19 = 値  /  値 = st.19   (lpoke/lpeek も可)
; cbJsonExt : DWORD (+80, 4byte)  st.20 = 値  /  値 = st.20   (lpoke/lpeek も可)
; pbJsonExt : BYTE* (+84, 4byte)  st.21 = 値  /  値 = st.21   (lpoke/lpeek も可)
; cCredentialHints : DWORD (+88, 4byte)  st.22 = 値  /  値 = st.22   (lpoke/lpeek も可)
; ppwszCredentialHints : LPWSTR* (+92, 4byte)  st.23 = 値  /  値 = st.23   (lpoke/lpeek も可)
; pwszRemoteWebOrigin : LPWSTR (+96, 4byte)  st.24 = 値  /  値 = st.24   (lpoke/lpeek も可)
; cbPublicKeyCredentialRequestOptionsJSON : DWORD (+100, 4byte)  st.25 = 値  /  値 = st.25   (lpoke/lpeek も可)
; pbPublicKeyCredentialRequestOptionsJSON : BYTE* (+104, 4byte)  st.26 = 値  /  値 = st.26   (lpoke/lpeek も可)
; cbAuthenticatorId : DWORD (+108, 4byte)  st.27 = 値  /  値 = st.27   (lpoke/lpeek も可)
; pbAuthenticatorId : BYTE* (+112, 4byte)  st.28 = 値  /  値 = st.28   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; WEBAUTHN_AUTHENTICATOR_GET_ASSERTION_OPTIONS サイズ: 200 バイト(x64)
dim st, 50    ; 4byte整数×50(構造体サイズ 200 / 4 切り上げ)
; dwVersion : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; dwTimeoutMilliseconds : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; CredentialList : WEBAUTHN_CREDENTIALS (+8, 16byte)  varptr(st)+8 を基点に操作(16byte:入れ子/配列)
; Extensions : WEBAUTHN_EXTENSIONS (+24, 16byte)  varptr(st)+24 を基点に操作(16byte:入れ子/配列)
; dwAuthenticatorAttachment : DWORD (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; dwUserVerificationRequirement : DWORD (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; dwFlags : DWORD (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; pwszU2fAppId : LPWSTR (+56, 8byte)  qpoke st,56,値 / qpeek(st,56)  ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; pbU2fAppId : BOOL* (+64, 8byte)  qpoke st,64,値 / qpeek(st,64)  ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; pCancellationId : GUID* (+72, 8byte)  varptr(st)+72 を基点に操作(8byte:入れ子/配列)
; pAllowCredentialList : WEBAUTHN_CREDENTIAL_LIST* (+80, 8byte)  varptr(st)+80 を基点に操作(8byte:入れ子/配列)
; dwCredLargeBlobOperation : DWORD (+88, 4byte)  st.22 = 値  /  値 = st.22   (lpoke/lpeek も可)
; cbCredLargeBlob : DWORD (+92, 4byte)  st.23 = 値  /  値 = st.23   (lpoke/lpeek も可)
; pbCredLargeBlob : BYTE* (+96, 8byte)  qpoke st,96,値 / qpeek(st,96)  ※IronHSPのみ。3.7/3.8は lpoke st,96,下位 : lpoke st,100,上位
; pHmacSecretSaltValues : WEBAUTHN_HMAC_SECRET_SALT_VALUES* (+104, 8byte)  varptr(st)+104 を基点に操作(8byte:入れ子/配列)
; bBrowserInPrivateMode : BOOL (+112, 4byte)  st.28 = 値  /  値 = st.28   (lpoke/lpeek も可)
; pLinkedDevice : CTAPCBOR_HYBRID_STORAGE_LINKED_DATA* (+120, 8byte)  varptr(st)+120 を基点に操作(8byte:入れ子/配列)
; bAutoFill : BOOL (+128, 4byte)  st.32 = 値  /  値 = st.32   (lpoke/lpeek も可)
; cbJsonExt : DWORD (+132, 4byte)  st.33 = 値  /  値 = st.33   (lpoke/lpeek も可)
; pbJsonExt : BYTE* (+136, 8byte)  qpoke st,136,値 / qpeek(st,136)  ※IronHSPのみ。3.7/3.8は lpoke st,136,下位 : lpoke st,140,上位
; cCredentialHints : DWORD (+144, 4byte)  st.36 = 値  /  値 = st.36   (lpoke/lpeek も可)
; ppwszCredentialHints : LPWSTR* (+152, 8byte)  qpoke st,152,値 / qpeek(st,152)  ※IronHSPのみ。3.7/3.8は lpoke st,152,下位 : lpoke st,156,上位
; pwszRemoteWebOrigin : LPWSTR (+160, 8byte)  qpoke st,160,値 / qpeek(st,160)  ※IronHSPのみ。3.7/3.8は lpoke st,160,下位 : lpoke st,164,上位
; cbPublicKeyCredentialRequestOptionsJSON : DWORD (+168, 4byte)  st.42 = 値  /  値 = st.42   (lpoke/lpeek も可)
; pbPublicKeyCredentialRequestOptionsJSON : BYTE* (+176, 8byte)  qpoke st,176,値 / qpeek(st,176)  ※IronHSPのみ。3.7/3.8は lpoke st,176,下位 : lpoke st,180,上位
; cbAuthenticatorId : DWORD (+184, 4byte)  st.46 = 値  /  値 = st.46   (lpoke/lpeek も可)
; pbAuthenticatorId : BYTE* (+192, 8byte)  qpoke st,192,値 / qpeek(st,192)  ※IronHSPのみ。3.7/3.8は lpoke st,192,下位 : lpoke st,196,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global WEBAUTHN_CREDENTIALS
    #field int cCredentials
    #field intptr pCredentials
#endstruct

#defstruct global WEBAUTHN_EXTENSIONS
    #field int cExtensions
    #field intptr pExtensions
#endstruct

#defstruct global WEBAUTHN_AUTHENTICATOR_GET_ASSERTION_OPTIONS
    #field int dwVersion
    #field int dwTimeoutMilliseconds
    #field WEBAUTHN_CREDENTIALS CredentialList
    #field WEBAUTHN_EXTENSIONS Extensions
    #field int dwAuthenticatorAttachment
    #field int dwUserVerificationRequirement
    #field int dwFlags
    #field intptr pwszU2fAppId
    #field intptr pbU2fAppId
    #field intptr pCancellationId
    #field intptr pAllowCredentialList
    #field int dwCredLargeBlobOperation
    #field int cbCredLargeBlob
    #field intptr pbCredLargeBlob
    #field intptr pHmacSecretSaltValues
    #field bool bBrowserInPrivateMode
    #field intptr pLinkedDevice
    #field bool bAutoFill
    #field int cbJsonExt
    #field intptr pbJsonExt
    #field int cCredentialHints
    #field intptr ppwszCredentialHints
    #field intptr pwszRemoteWebOrigin
    #field int cbPublicKeyCredentialRequestOptionsJSON
    #field intptr pbPublicKeyCredentialRequestOptionsJSON
    #field int cbAuthenticatorId
    #field intptr pbAuthenticatorId
#endstruct

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