Win32 API 日本語リファレンス
ホームDevices.BiometricFramework › WINBIO_STORAGE_RECORD

WINBIO_STORAGE_RECORD

構造体
サイズx64: 64 バイト / x86: 32 バイト

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

フィールド

フィールドサイズx64x86説明
IdentityWINBIO_IDENTITY*8/4+0+0レコードの主体を表す識別情報(WINBIO_IDENTITY)へのポインタ。
SubFactorBYTE1+8+4生体要素のサブタイプを示すバイト値。
IndexVectorDWORD*8/4+16+8高速検索用インデックスベクタへのポインタ。NULL可。
IndexElementCountUINT_PTR8/4+24+12インデックスベクタの要素数。
TemplateBlobBYTE*8/4+32+16生体テンプレートのバイナリデータへのポインタ。
TemplateBlobSizeUINT_PTR8/4+40+20テンプレートデータのバイト数。
PayloadBlobBYTE*8/4+48+24テンプレートに付随するペイロードデータへのポインタ。NULL可。
PayloadBlobSizeUINT_PTR8/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 Structure
import 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: uint
struct 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