ホーム › Devices.BiometricFramework › WINBIO_STORAGE_RECORD
WINBIO_STORAGE_RECORD
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| Identity | WINBIO_IDENTITY* | 8/4 | +0 | +0 | ストレージレコードの GUID または SID を格納する WINBIO_IDENTITY 構造体へのポインターです。 |
| SubFactor | BYTE | 1 | +8 | +4 | テンプレートデータに関連付けられた生体認証サブファクターを指定する WINBIO_BIOMETRIC_SUBTYPE 値です。 重要
SubFactor の値として指定された値を検証しようとしないでください。Windows 生体認証サービスは、指定された値を検証してから実装に渡します。値が WINBIO_SUBTYPE_NO_INFORMATION または WINBIO_SUBTYPE_ANY の場合は、必要に応じて検証してください。 |
| IndexVector | DWORD* | 8/4 | +16 | +8 | 連続した ULONG 値の配列へのポインターです。これらの値は、エンジンアダプターによって生体認証テンプレートに割り当てられたバケットアドレスを表します。 |
| IndexElementCount | UINT_PTR | 8/4 | +24 | +12 | IndexVector フィールドで指定された配列に含まれる ULONG 値の数です。 |
| TemplateBlob | BYTE* | 8/4 | +32 | +16 | 生体認証テンプレートデータを格納するバイト配列へのポインターです。 |
| TemplateBlobSize | UINT_PTR | 8/4 | +40 | +20 | TemplateBlob パラメーターで指定されたテンプレートのサイズ (バイト単位)。 |
| PayloadBlob | BYTE* | 8/4 | +48 | +24 | 整合性チェック用のデータを格納するバイト配列へのポインターです。このフィールドは、埋め込みストレージを備えたリムーバブルデバイス用のアダプターでのみ使用されます。 |
| PayloadBlobSize | UINT_PTR | 8/4 | +56 | +28 | PayloadBlob パラメーターで指定されたデータのサイズ (バイト単位)。 |
公式ドキュメント
WINBIO_STORAGE_RECORD 構造体は、標準形式の生体認証テンプレートと関連データを格納します。この構造体は、エンジンアダプターとストレージアダプターの間で情報を受け渡すために使用されます。
解説(Remarks)
WINBIO_STORAGE_RECORD 構造体とそれが指すメモリは、その構造体を作成したコンポーネントが所有します。特に、構造体をいつ削除するか、および埋め込まれたポインターがいつ無効になるかは、そのコンポーネントが決定します。他のコンポーネントがこの構造体への一時的なアクセスを与えられた場合、それらは所有元のコンポーネントが定めた構造体の有効期間に関する規則に従わなければなりません。
出典・ライセンス: 上記「公式ドキュメント」の内容は 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>
// WINBIO_STORAGE_RECORD (x64 64 / x86 32 バイト)
typedef struct WINBIO_STORAGE_RECORD {
WINBIO_IDENTITY* Identity;
BYTE SubFactor;
DWORD* IndexVector;
UINT_PTR IndexElementCount;
BYTE* TemplateBlob;
UINT_PTR TemplateBlobSize;
BYTE* PayloadBlob;
UINT_PTR PayloadBlobSize;
} WINBIO_STORAGE_RECORD;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WINBIO_STORAGE_RECORD
{
public IntPtr Identity;
public byte SubFactor;
public IntPtr IndexVector;
public UIntPtr IndexElementCount;
public IntPtr TemplateBlob;
public UIntPtr TemplateBlobSize;
public IntPtr PayloadBlob;
public UIntPtr PayloadBlobSize;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WINBIO_STORAGE_RECORD
Public Identity As IntPtr
Public SubFactor As Byte
Public IndexVector As IntPtr
Public IndexElementCount As UIntPtr
Public TemplateBlob As IntPtr
Public TemplateBlobSize As UIntPtr
Public PayloadBlob As IntPtr
Public PayloadBlobSize As UIntPtr
End Structureimport ctypes
from ctypes import wintypes
class WINBIO_STORAGE_RECORD(ctypes.Structure):
_fields_ = [
("Identity", ctypes.c_void_p),
("SubFactor", ctypes.c_ubyte),
("IndexVector", ctypes.c_void_p),
("IndexElementCount", ctypes.c_size_t),
("TemplateBlob", ctypes.c_void_p),
("TemplateBlobSize", ctypes.c_size_t),
("PayloadBlob", ctypes.c_void_p),
("PayloadBlobSize", ctypes.c_size_t),
]#[repr(C)]
pub struct WINBIO_STORAGE_RECORD {
pub Identity: *mut core::ffi::c_void,
pub SubFactor: u8,
pub IndexVector: *mut core::ffi::c_void,
pub IndexElementCount: usize,
pub TemplateBlob: *mut core::ffi::c_void,
pub TemplateBlobSize: usize,
pub PayloadBlob: *mut core::ffi::c_void,
pub PayloadBlobSize: usize,
}import "golang.org/x/sys/windows"
type WINBIO_STORAGE_RECORD struct {
Identity uintptr
SubFactor byte
IndexVector uintptr
IndexElementCount uintptr
TemplateBlob uintptr
TemplateBlobSize uintptr
PayloadBlob uintptr
PayloadBlobSize uintptr
}type
WINBIO_STORAGE_RECORD = record
Identity: Pointer;
SubFactor: Byte;
IndexVector: Pointer;
IndexElementCount: NativeUInt;
TemplateBlob: Pointer;
TemplateBlobSize: NativeUInt;
PayloadBlob: Pointer;
PayloadBlobSize: NativeUInt;
end;const WINBIO_STORAGE_RECORD = extern struct {
Identity: ?*anyopaque,
SubFactor: u8,
IndexVector: ?*anyopaque,
IndexElementCount: usize,
TemplateBlob: ?*anyopaque,
TemplateBlobSize: usize,
PayloadBlob: ?*anyopaque,
PayloadBlobSize: usize,
};type
WINBIO_STORAGE_RECORD {.bycopy.} = object
Identity: pointer
SubFactor: uint8
IndexVector: pointer
IndexElementCount: uint
TemplateBlob: pointer
TemplateBlobSize: uint
PayloadBlob: pointer
PayloadBlobSize: uintstruct WINBIO_STORAGE_RECORD
{
void* Identity;
ubyte SubFactor;
void* IndexVector;
size_t IndexElementCount;
void* TemplateBlob;
size_t TemplateBlobSize;
void* PayloadBlob;
size_t PayloadBlobSize;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; WINBIO_STORAGE_RECORD サイズ: 32 バイト(x86)
dim st, 8 ; 4byte整数×8(構造体サイズ 32 / 4 切り上げ)
; Identity : WINBIO_IDENTITY* (+0, 4byte) varptr(st)+0 を基点に操作(4byte:入れ子/配列)
; SubFactor : BYTE (+4, 1byte) poke st,4,値 / 値 = peek(st,4)
; IndexVector : DWORD* (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; IndexElementCount : UINT_PTR (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; TemplateBlob : BYTE* (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; TemplateBlobSize : UINT_PTR (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; PayloadBlob : BYTE* (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; PayloadBlobSize : UINT_PTR (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; WINBIO_STORAGE_RECORD サイズ: 64 バイト(x64)
dim st, 16 ; 4byte整数×16(構造体サイズ 64 / 4 切り上げ)
; Identity : WINBIO_IDENTITY* (+0, 8byte) varptr(st)+0 を基点に操作(8byte:入れ子/配列)
; SubFactor : BYTE (+8, 1byte) poke st,8,値 / 値 = peek(st,8)
; IndexVector : DWORD* (+16, 8byte) qpoke st,16,値 / qpeek(st,16) ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; IndexElementCount : UINT_PTR (+24, 8byte) qpoke st,24,値 / qpeek(st,24) ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; TemplateBlob : BYTE* (+32, 8byte) qpoke st,32,値 / qpeek(st,32) ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; TemplateBlobSize : UINT_PTR (+40, 8byte) qpoke st,40,値 / qpeek(st,40) ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; PayloadBlob : BYTE* (+48, 8byte) qpoke st,48,値 / qpeek(st,48) ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; PayloadBlobSize : UINT_PTR (+56, 8byte) qpoke st,56,値 / qpeek(st,56) ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global WINBIO_STORAGE_RECORD
#field intptr Identity
#field byte SubFactor
#field intptr IndexVector
#field intptr IndexElementCount
#field intptr TemplateBlob
#field intptr TemplateBlobSize
#field intptr PayloadBlob
#field intptr PayloadBlobSize
#endstruct
stdim st, WINBIO_STORAGE_RECORD ; NSTRUCT 変数を確保
st->SubFactor = 100
mes "SubFactor=" + st->SubFactor