ホーム › Security.Authentication.WebAuthn › WEBAUTHN_AUTHENTICATOR_MAKE_CREDENTIAL_OPTIONS
WEBAUTHN_AUTHENTICATOR_MAKE_CREDENTIAL_OPTIONS
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| dwVersion | DWORD | 4 | +0 | +0 | この構造体のバージョンです。 |
| dwTimeoutMilliseconds | DWORD | 4 | +4 | +4 | 操作が完了すると見込まれる時間です。これは目安として使用され、プラットフォームによって上書きされる場合があります。 |
| CredentialList | WEBAUTHN_CREDENTIALS | 16/8 | +8 | +8 | 除外に使用される資格情報です。 |
| Extensions | WEBAUTHN_EXTENSIONS | 16/8 | +24 | +16 | 操作の実行時に解析する 省略可能な 拡張機能です。 |
| dwAuthenticatorAttachment | DWORD | 4 | +40 | +24 | 省略可能 です。プラットフォーム認証器とクロスプラットフォーム認証器のどちらを使用するかを指定します。 |
| bRequireResidentKey | BOOL | 4 | +44 | +28 | キーをレジデントにすることを必須とするかどうかを指定します。これは 省略可能 で、既定値は FALSE です。 |
| dwUserVerificationRequirement | DWORD | 4 | +48 | +32 | ユーザー検証の要件です。 |
| dwAttestationConveyancePreference | DWORD | 4 | +52 | +36 | アテステーション伝達の設定です。 |
| dwFlags | DWORD | 4 | +56 | +40 | フラグです (将来の使用のために予約済み)。 |
| pCancellationId | GUID* | 8/4 | +64 | +44 | 省略可能 なキャンセル ID です。詳細については WebAuthNGetCancellationId を参照してください。 |
| pExcludeCredentialList | WEBAUTHN_CREDENTIAL_LIST* | 8/4 | +72 | +48 | 除外する資格情報のリストです。指定されている場合、CredentialList は無視されます。 |
| dwEnterpriseAttestation | DWORD | 4 | +80 | +52 | エンタープライズアテステーションです。 |
| dwLargeBlobSupport | DWORD | 4 | +84 | +56 | 要求する大きな BLOB のサポートです。none、required、または preferred を指定します。大きな BLOB に required または preferred が設定されていて、bRequireResidentKey に TRUE が設定されていない場合、ユーザーは NTE_INVALID_PARAMETER を受け取ります。 |
| bPreferResidentKey | BOOL | 4 | +88 | +60 | キーをレジデントにすることを優先します。省略可能なパラメーターで、既定値は FALSE です。TRUE の場合、bRequireResidentKey を上書きします。 |
| bBrowserInPrivateMode | BOOL | 4 | +92 | +64 | クライアントがブラウザーのプライベートモードを使用しているかどうかを示します。省略可能 なパラメーターで、既定値は FALSE です。 |
| bEnablePrf | BOOL | 4 | +96 | +68 | PRF拡張を有効にするかを示すブール値。 |
| pLinkedDevice | CTAPCBOR_HYBRID_STORAGE_LINKED_DATA* | 8/4 | +104 | +72 | ハイブリッド転送のリンク済みデバイス情報へのポインタ。NULL可。 |
| cbJsonExt | DWORD | 4 | +112 | +76 | JSON形式拡張データのバイト数を示す。 |
| pbJsonExt | BYTE* | 8/4 | +120 | +80 | JSON形式の拡張データへのポインタ。 |
| pPRFGlobalEval | WEBAUTHN_HMAC_SECRET_SALT* | 8/4 | +128 | +84 | PRFのグローバル評価用ソルトへのポインタ。NULL可。 |
| cCredentialHints | DWORD | 4 | +136 | +88 | ppwszCredentialHints配列の要素数を示す。 |
| ppwszCredentialHints | LPWSTR* | 8/4 | +144 | +92 | 資格情報選択ヒント文字列の配列へのポインタ。 |
| bThirdPartyPayment | BOOL | 4 | +152 | +96 | サードパーティ決済用かを示すブール値。 |
| pwszRemoteWebOrigin | LPWSTR | 8/4 | +160 | +100 | リモートWebオリジン文字列へのポインタ。NULL可。 |
| cbPublicKeyCredentialCreationOptionsJSON | DWORD | 4 | +168 | +104 | 作成オプションJSONのバイト数を示す。 |
| pbPublicKeyCredentialCreationOptionsJSON | BYTE* | 8/4 | +176 | +108 | 作成オプションJSONデータへのポインタ。 |
| cbAuthenticatorId | DWORD | 4 | +184 | +112 | 認証器IDのバイト数を示す。 |
| pbAuthenticatorId | BYTE* | 8/4 | +192 | +116 | 使用する認証器のIDへのポインタ。NULL可。 |
公式ドキュメント
WebAuthNAuthenticatorMakeCredential 操作のオプションです。
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
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_MAKE_CREDENTIAL_OPTIONS (x64 200 / x86 120 バイト)
typedef struct WEBAUTHN_AUTHENTICATOR_MAKE_CREDENTIAL_OPTIONS {
DWORD dwVersion;
DWORD dwTimeoutMilliseconds;
WEBAUTHN_CREDENTIALS CredentialList;
WEBAUTHN_EXTENSIONS Extensions;
DWORD dwAuthenticatorAttachment;
BOOL bRequireResidentKey;
DWORD dwUserVerificationRequirement;
DWORD dwAttestationConveyancePreference;
DWORD dwFlags;
GUID* pCancellationId;
WEBAUTHN_CREDENTIAL_LIST* pExcludeCredentialList;
DWORD dwEnterpriseAttestation;
DWORD dwLargeBlobSupport;
BOOL bPreferResidentKey;
BOOL bBrowserInPrivateMode;
BOOL bEnablePrf;
CTAPCBOR_HYBRID_STORAGE_LINKED_DATA* pLinkedDevice;
DWORD cbJsonExt;
BYTE* pbJsonExt;
WEBAUTHN_HMAC_SECRET_SALT* pPRFGlobalEval;
DWORD cCredentialHints;
LPWSTR* ppwszCredentialHints;
BOOL bThirdPartyPayment;
LPWSTR pwszRemoteWebOrigin;
DWORD cbPublicKeyCredentialCreationOptionsJSON;
BYTE* pbPublicKeyCredentialCreationOptionsJSON;
DWORD cbAuthenticatorId;
BYTE* pbAuthenticatorId;
} WEBAUTHN_AUTHENTICATOR_MAKE_CREDENTIAL_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_MAKE_CREDENTIAL_OPTIONS
{
public uint dwVersion;
public uint dwTimeoutMilliseconds;
public WEBAUTHN_CREDENTIALS CredentialList;
public WEBAUTHN_EXTENSIONS Extensions;
public uint dwAuthenticatorAttachment;
[MarshalAs(UnmanagedType.Bool)] public bool bRequireResidentKey;
public uint dwUserVerificationRequirement;
public uint dwAttestationConveyancePreference;
public uint dwFlags;
public IntPtr pCancellationId;
public IntPtr pExcludeCredentialList;
public uint dwEnterpriseAttestation;
public uint dwLargeBlobSupport;
[MarshalAs(UnmanagedType.Bool)] public bool bPreferResidentKey;
[MarshalAs(UnmanagedType.Bool)] public bool bBrowserInPrivateMode;
[MarshalAs(UnmanagedType.Bool)] public bool bEnablePrf;
public IntPtr pLinkedDevice;
public uint cbJsonExt;
public IntPtr pbJsonExt;
public IntPtr pPRFGlobalEval;
public uint cCredentialHints;
public IntPtr ppwszCredentialHints;
[MarshalAs(UnmanagedType.Bool)] public bool bThirdPartyPayment;
public IntPtr pwszRemoteWebOrigin;
public uint cbPublicKeyCredentialCreationOptionsJSON;
public IntPtr pbPublicKeyCredentialCreationOptionsJSON;
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_MAKE_CREDENTIAL_OPTIONS
Public dwVersion As UInteger
Public dwTimeoutMilliseconds As UInteger
Public CredentialList As WEBAUTHN_CREDENTIALS
Public Extensions As WEBAUTHN_EXTENSIONS
Public dwAuthenticatorAttachment As UInteger
<MarshalAs(UnmanagedType.Bool)> Public bRequireResidentKey As Boolean
Public dwUserVerificationRequirement As UInteger
Public dwAttestationConveyancePreference As UInteger
Public dwFlags As UInteger
Public pCancellationId As IntPtr
Public pExcludeCredentialList As IntPtr
Public dwEnterpriseAttestation As UInteger
Public dwLargeBlobSupport As UInteger
<MarshalAs(UnmanagedType.Bool)> Public bPreferResidentKey As Boolean
<MarshalAs(UnmanagedType.Bool)> Public bBrowserInPrivateMode As Boolean
<MarshalAs(UnmanagedType.Bool)> Public bEnablePrf As Boolean
Public pLinkedDevice As IntPtr
Public cbJsonExt As UInteger
Public pbJsonExt As IntPtr
Public pPRFGlobalEval As IntPtr
Public cCredentialHints As UInteger
Public ppwszCredentialHints As IntPtr
<MarshalAs(UnmanagedType.Bool)> Public bThirdPartyPayment As Boolean
Public pwszRemoteWebOrigin As IntPtr
Public cbPublicKeyCredentialCreationOptionsJSON As UInteger
Public pbPublicKeyCredentialCreationOptionsJSON As IntPtr
Public cbAuthenticatorId As UInteger
Public pbAuthenticatorId As IntPtr
End Structureimport 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_MAKE_CREDENTIAL_OPTIONS(ctypes.Structure):
_fields_ = [
("dwVersion", wintypes.DWORD),
("dwTimeoutMilliseconds", wintypes.DWORD),
("CredentialList", WEBAUTHN_CREDENTIALS),
("Extensions", WEBAUTHN_EXTENSIONS),
("dwAuthenticatorAttachment", wintypes.DWORD),
("bRequireResidentKey", wintypes.BOOL),
("dwUserVerificationRequirement", wintypes.DWORD),
("dwAttestationConveyancePreference", wintypes.DWORD),
("dwFlags", wintypes.DWORD),
("pCancellationId", ctypes.c_void_p),
("pExcludeCredentialList", ctypes.c_void_p),
("dwEnterpriseAttestation", wintypes.DWORD),
("dwLargeBlobSupport", wintypes.DWORD),
("bPreferResidentKey", wintypes.BOOL),
("bBrowserInPrivateMode", wintypes.BOOL),
("bEnablePrf", wintypes.BOOL),
("pLinkedDevice", ctypes.c_void_p),
("cbJsonExt", wintypes.DWORD),
("pbJsonExt", ctypes.c_void_p),
("pPRFGlobalEval", ctypes.c_void_p),
("cCredentialHints", wintypes.DWORD),
("ppwszCredentialHints", ctypes.c_void_p),
("bThirdPartyPayment", wintypes.BOOL),
("pwszRemoteWebOrigin", ctypes.c_void_p),
("cbPublicKeyCredentialCreationOptionsJSON", wintypes.DWORD),
("pbPublicKeyCredentialCreationOptionsJSON", 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_MAKE_CREDENTIAL_OPTIONS {
pub dwVersion: u32,
pub dwTimeoutMilliseconds: u32,
pub CredentialList: WEBAUTHN_CREDENTIALS,
pub Extensions: WEBAUTHN_EXTENSIONS,
pub dwAuthenticatorAttachment: u32,
pub bRequireResidentKey: i32,
pub dwUserVerificationRequirement: u32,
pub dwAttestationConveyancePreference: u32,
pub dwFlags: u32,
pub pCancellationId: *mut core::ffi::c_void,
pub pExcludeCredentialList: *mut core::ffi::c_void,
pub dwEnterpriseAttestation: u32,
pub dwLargeBlobSupport: u32,
pub bPreferResidentKey: i32,
pub bBrowserInPrivateMode: i32,
pub bEnablePrf: i32,
pub pLinkedDevice: *mut core::ffi::c_void,
pub cbJsonExt: u32,
pub pbJsonExt: *mut core::ffi::c_void,
pub pPRFGlobalEval: *mut core::ffi::c_void,
pub cCredentialHints: u32,
pub ppwszCredentialHints: *mut core::ffi::c_void,
pub bThirdPartyPayment: i32,
pub pwszRemoteWebOrigin: *mut core::ffi::c_void,
pub cbPublicKeyCredentialCreationOptionsJSON: u32,
pub pbPublicKeyCredentialCreationOptionsJSON: *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_MAKE_CREDENTIAL_OPTIONS struct {
dwVersion uint32
dwTimeoutMilliseconds uint32
CredentialList WEBAUTHN_CREDENTIALS
Extensions WEBAUTHN_EXTENSIONS
dwAuthenticatorAttachment uint32
bRequireResidentKey int32
dwUserVerificationRequirement uint32
dwAttestationConveyancePreference uint32
dwFlags uint32
pCancellationId uintptr
pExcludeCredentialList uintptr
dwEnterpriseAttestation uint32
dwLargeBlobSupport uint32
bPreferResidentKey int32
bBrowserInPrivateMode int32
bEnablePrf int32
pLinkedDevice uintptr
cbJsonExt uint32
pbJsonExt uintptr
pPRFGlobalEval uintptr
cCredentialHints uint32
ppwszCredentialHints uintptr
bThirdPartyPayment int32
pwszRemoteWebOrigin uintptr
cbPublicKeyCredentialCreationOptionsJSON uint32
pbPublicKeyCredentialCreationOptionsJSON uintptr
cbAuthenticatorId uint32
pbAuthenticatorId uintptr
}type
WEBAUTHN_CREDENTIALS = record
cCredentials: DWORD;
pCredentials: Pointer;
end;
WEBAUTHN_EXTENSIONS = record
cExtensions: DWORD;
pExtensions: Pointer;
end;
WEBAUTHN_AUTHENTICATOR_MAKE_CREDENTIAL_OPTIONS = record
dwVersion: DWORD;
dwTimeoutMilliseconds: DWORD;
CredentialList: WEBAUTHN_CREDENTIALS;
Extensions: WEBAUTHN_EXTENSIONS;
dwAuthenticatorAttachment: DWORD;
bRequireResidentKey: BOOL;
dwUserVerificationRequirement: DWORD;
dwAttestationConveyancePreference: DWORD;
dwFlags: DWORD;
pCancellationId: Pointer;
pExcludeCredentialList: Pointer;
dwEnterpriseAttestation: DWORD;
dwLargeBlobSupport: DWORD;
bPreferResidentKey: BOOL;
bBrowserInPrivateMode: BOOL;
bEnablePrf: BOOL;
pLinkedDevice: Pointer;
cbJsonExt: DWORD;
pbJsonExt: Pointer;
pPRFGlobalEval: Pointer;
cCredentialHints: DWORD;
ppwszCredentialHints: Pointer;
bThirdPartyPayment: BOOL;
pwszRemoteWebOrigin: Pointer;
cbPublicKeyCredentialCreationOptionsJSON: DWORD;
pbPublicKeyCredentialCreationOptionsJSON: 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_MAKE_CREDENTIAL_OPTIONS = extern struct {
dwVersion: u32,
dwTimeoutMilliseconds: u32,
CredentialList: WEBAUTHN_CREDENTIALS,
Extensions: WEBAUTHN_EXTENSIONS,
dwAuthenticatorAttachment: u32,
bRequireResidentKey: i32,
dwUserVerificationRequirement: u32,
dwAttestationConveyancePreference: u32,
dwFlags: u32,
pCancellationId: ?*anyopaque,
pExcludeCredentialList: ?*anyopaque,
dwEnterpriseAttestation: u32,
dwLargeBlobSupport: u32,
bPreferResidentKey: i32,
bBrowserInPrivateMode: i32,
bEnablePrf: i32,
pLinkedDevice: ?*anyopaque,
cbJsonExt: u32,
pbJsonExt: ?*anyopaque,
pPRFGlobalEval: ?*anyopaque,
cCredentialHints: u32,
ppwszCredentialHints: ?*anyopaque,
bThirdPartyPayment: i32,
pwszRemoteWebOrigin: ?*anyopaque,
cbPublicKeyCredentialCreationOptionsJSON: u32,
pbPublicKeyCredentialCreationOptionsJSON: ?*anyopaque,
cbAuthenticatorId: u32,
pbAuthenticatorId: ?*anyopaque,
};type
WEBAUTHN_CREDENTIALS {.bycopy.} = object
cCredentials: uint32
pCredentials: pointer
WEBAUTHN_EXTENSIONS {.bycopy.} = object
cExtensions: uint32
pExtensions: pointer
WEBAUTHN_AUTHENTICATOR_MAKE_CREDENTIAL_OPTIONS {.bycopy.} = object
dwVersion: uint32
dwTimeoutMilliseconds: uint32
CredentialList: WEBAUTHN_CREDENTIALS
Extensions: WEBAUTHN_EXTENSIONS
dwAuthenticatorAttachment: uint32
bRequireResidentKey: int32
dwUserVerificationRequirement: uint32
dwAttestationConveyancePreference: uint32
dwFlags: uint32
pCancellationId: pointer
pExcludeCredentialList: pointer
dwEnterpriseAttestation: uint32
dwLargeBlobSupport: uint32
bPreferResidentKey: int32
bBrowserInPrivateMode: int32
bEnablePrf: int32
pLinkedDevice: pointer
cbJsonExt: uint32
pbJsonExt: pointer
pPRFGlobalEval: pointer
cCredentialHints: uint32
ppwszCredentialHints: pointer
bThirdPartyPayment: int32
pwszRemoteWebOrigin: pointer
cbPublicKeyCredentialCreationOptionsJSON: uint32
pbPublicKeyCredentialCreationOptionsJSON: pointer
cbAuthenticatorId: uint32
pbAuthenticatorId: pointerstruct WEBAUTHN_CREDENTIALS
{
uint cCredentials;
void* pCredentials;
}
struct WEBAUTHN_EXTENSIONS
{
uint cExtensions;
void* pExtensions;
}
struct WEBAUTHN_AUTHENTICATOR_MAKE_CREDENTIAL_OPTIONS
{
uint dwVersion;
uint dwTimeoutMilliseconds;
WEBAUTHN_CREDENTIALS CredentialList;
WEBAUTHN_EXTENSIONS Extensions;
uint dwAuthenticatorAttachment;
int bRequireResidentKey;
uint dwUserVerificationRequirement;
uint dwAttestationConveyancePreference;
uint dwFlags;
void* pCancellationId;
void* pExcludeCredentialList;
uint dwEnterpriseAttestation;
uint dwLargeBlobSupport;
int bPreferResidentKey;
int bBrowserInPrivateMode;
int bEnablePrf;
void* pLinkedDevice;
uint cbJsonExt;
void* pbJsonExt;
void* pPRFGlobalEval;
uint cCredentialHints;
void* ppwszCredentialHints;
int bThirdPartyPayment;
void* pwszRemoteWebOrigin;
uint cbPublicKeyCredentialCreationOptionsJSON;
void* pbPublicKeyCredentialCreationOptionsJSON;
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_MAKE_CREDENTIAL_OPTIONS サイズ: 120 バイト(x86)
dim st, 30 ; 4byte整数×30(構造体サイズ 120 / 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 も可)
; bRequireResidentKey : BOOL (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; dwUserVerificationRequirement : DWORD (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; dwAttestationConveyancePreference : DWORD (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; dwFlags : DWORD (+40, 4byte) st.10 = 値 / 値 = st.10 (lpoke/lpeek も可)
; pCancellationId : GUID* (+44, 4byte) varptr(st)+44 を基点に操作(4byte:入れ子/配列)
; pExcludeCredentialList : WEBAUTHN_CREDENTIAL_LIST* (+48, 4byte) varptr(st)+48 を基点に操作(4byte:入れ子/配列)
; dwEnterpriseAttestation : DWORD (+52, 4byte) st.13 = 値 / 値 = st.13 (lpoke/lpeek も可)
; dwLargeBlobSupport : DWORD (+56, 4byte) st.14 = 値 / 値 = st.14 (lpoke/lpeek も可)
; bPreferResidentKey : BOOL (+60, 4byte) st.15 = 値 / 値 = st.15 (lpoke/lpeek も可)
; bBrowserInPrivateMode : BOOL (+64, 4byte) st.16 = 値 / 値 = st.16 (lpoke/lpeek も可)
; bEnablePrf : BOOL (+68, 4byte) st.17 = 値 / 値 = st.17 (lpoke/lpeek も可)
; pLinkedDevice : CTAPCBOR_HYBRID_STORAGE_LINKED_DATA* (+72, 4byte) varptr(st)+72 を基点に操作(4byte:入れ子/配列)
; cbJsonExt : DWORD (+76, 4byte) st.19 = 値 / 値 = st.19 (lpoke/lpeek も可)
; pbJsonExt : BYTE* (+80, 4byte) st.20 = 値 / 値 = st.20 (lpoke/lpeek も可)
; pPRFGlobalEval : WEBAUTHN_HMAC_SECRET_SALT* (+84, 4byte) varptr(st)+84 を基点に操作(4byte:入れ子/配列)
; cCredentialHints : DWORD (+88, 4byte) st.22 = 値 / 値 = st.22 (lpoke/lpeek も可)
; ppwszCredentialHints : LPWSTR* (+92, 4byte) st.23 = 値 / 値 = st.23 (lpoke/lpeek も可)
; bThirdPartyPayment : BOOL (+96, 4byte) st.24 = 値 / 値 = st.24 (lpoke/lpeek も可)
; pwszRemoteWebOrigin : LPWSTR (+100, 4byte) st.25 = 値 / 値 = st.25 (lpoke/lpeek も可)
; cbPublicKeyCredentialCreationOptionsJSON : DWORD (+104, 4byte) st.26 = 値 / 値 = st.26 (lpoke/lpeek も可)
; pbPublicKeyCredentialCreationOptionsJSON : BYTE* (+108, 4byte) st.27 = 値 / 値 = st.27 (lpoke/lpeek も可)
; cbAuthenticatorId : DWORD (+112, 4byte) st.28 = 値 / 値 = st.28 (lpoke/lpeek も可)
; pbAuthenticatorId : BYTE* (+116, 4byte) st.29 = 値 / 値 = st.29 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; WEBAUTHN_AUTHENTICATOR_MAKE_CREDENTIAL_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 も可)
; bRequireResidentKey : BOOL (+44, 4byte) st.11 = 値 / 値 = st.11 (lpoke/lpeek も可)
; dwUserVerificationRequirement : DWORD (+48, 4byte) st.12 = 値 / 値 = st.12 (lpoke/lpeek も可)
; dwAttestationConveyancePreference : DWORD (+52, 4byte) st.13 = 値 / 値 = st.13 (lpoke/lpeek も可)
; dwFlags : DWORD (+56, 4byte) st.14 = 値 / 値 = st.14 (lpoke/lpeek も可)
; pCancellationId : GUID* (+64, 8byte) varptr(st)+64 を基点に操作(8byte:入れ子/配列)
; pExcludeCredentialList : WEBAUTHN_CREDENTIAL_LIST* (+72, 8byte) varptr(st)+72 を基点に操作(8byte:入れ子/配列)
; dwEnterpriseAttestation : DWORD (+80, 4byte) st.20 = 値 / 値 = st.20 (lpoke/lpeek も可)
; dwLargeBlobSupport : DWORD (+84, 4byte) st.21 = 値 / 値 = st.21 (lpoke/lpeek も可)
; bPreferResidentKey : BOOL (+88, 4byte) st.22 = 値 / 値 = st.22 (lpoke/lpeek も可)
; bBrowserInPrivateMode : BOOL (+92, 4byte) st.23 = 値 / 値 = st.23 (lpoke/lpeek も可)
; bEnablePrf : BOOL (+96, 4byte) st.24 = 値 / 値 = st.24 (lpoke/lpeek も可)
; pLinkedDevice : CTAPCBOR_HYBRID_STORAGE_LINKED_DATA* (+104, 8byte) varptr(st)+104 を基点に操作(8byte:入れ子/配列)
; cbJsonExt : DWORD (+112, 4byte) st.28 = 値 / 値 = st.28 (lpoke/lpeek も可)
; pbJsonExt : BYTE* (+120, 8byte) qpoke st,120,値 / qpeek(st,120) ※IronHSPのみ。3.7/3.8は lpoke st,120,下位 : lpoke st,124,上位
; pPRFGlobalEval : WEBAUTHN_HMAC_SECRET_SALT* (+128, 8byte) varptr(st)+128 を基点に操作(8byte:入れ子/配列)
; cCredentialHints : DWORD (+136, 4byte) st.34 = 値 / 値 = st.34 (lpoke/lpeek も可)
; ppwszCredentialHints : LPWSTR* (+144, 8byte) qpoke st,144,値 / qpeek(st,144) ※IronHSPのみ。3.7/3.8は lpoke st,144,下位 : lpoke st,148,上位
; bThirdPartyPayment : BOOL (+152, 4byte) st.38 = 値 / 値 = st.38 (lpoke/lpeek も可)
; pwszRemoteWebOrigin : LPWSTR (+160, 8byte) qpoke st,160,値 / qpeek(st,160) ※IronHSPのみ。3.7/3.8は lpoke st,160,下位 : lpoke st,164,上位
; cbPublicKeyCredentialCreationOptionsJSON : DWORD (+168, 4byte) st.42 = 値 / 値 = st.42 (lpoke/lpeek も可)
; pbPublicKeyCredentialCreationOptionsJSON : 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_MAKE_CREDENTIAL_OPTIONS
#field int dwVersion
#field int dwTimeoutMilliseconds
#field WEBAUTHN_CREDENTIALS CredentialList
#field WEBAUTHN_EXTENSIONS Extensions
#field int dwAuthenticatorAttachment
#field bool bRequireResidentKey
#field int dwUserVerificationRequirement
#field int dwAttestationConveyancePreference
#field int dwFlags
#field intptr pCancellationId
#field intptr pExcludeCredentialList
#field int dwEnterpriseAttestation
#field int dwLargeBlobSupport
#field bool bPreferResidentKey
#field bool bBrowserInPrivateMode
#field bool bEnablePrf
#field intptr pLinkedDevice
#field int cbJsonExt
#field intptr pbJsonExt
#field intptr pPRFGlobalEval
#field int cCredentialHints
#field intptr ppwszCredentialHints
#field bool bThirdPartyPayment
#field intptr pwszRemoteWebOrigin
#field int cbPublicKeyCredentialCreationOptionsJSON
#field intptr pbPublicKeyCredentialCreationOptionsJSON
#field int cbAuthenticatorId
#field intptr pbAuthenticatorId
#endstruct
stdim st, WEBAUTHN_AUTHENTICATOR_MAKE_CREDENTIAL_OPTIONS ; NSTRUCT 変数を確保
st->dwVersion = 100
mes "dwVersion=" + st->dwVersion