ホーム › 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 | レコードの主体を表す識別情報(WINBIO_IDENTITY)へのポインタ。 |
| SubFactor | BYTE | 1 | +8 | +4 | 生体要素のサブタイプを示すバイト値。 |
| IndexVector | DWORD* | 8/4 | +16 | +8 | 高速検索用インデックスベクタへのポインタ。NULL可。 |
| IndexElementCount | UINT_PTR | 8/4 | +24 | +12 | インデックスベクタの要素数。 |
| TemplateBlob | BYTE* | 8/4 | +32 | +16 | 生体テンプレートのバイナリデータへのポインタ。 |
| TemplateBlobSize | UINT_PTR | 8/4 | +40 | +20 | テンプレートデータのバイト数。 |
| PayloadBlob | BYTE* | 8/4 | +48 | +24 | テンプレートに付随するペイロードデータへのポインタ。NULL可。 |
| PayloadBlobSize | UINT_PTR | 8/4 | +56 | +28 | ペイロードデータのバイト数。 |
各言語での定義
#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