ホーム › Devices.BiometricFramework › WINBIO_BIR_HEADER
WINBIO_BIR_HEADER
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| ValidFields | WORD | 2 | +0 | +0 | どのヘッダフィールドが有効かを示すビットフラグ。 |
| HeaderVersion | BYTE | 1 | +2 | +2 | BIRヘッダのバージョン番号。 |
| PatronHeaderVersion | BYTE | 1 | +3 | +3 | パトロン(規格管理者)ヘッダ形式のバージョン番号。 |
| DataFlags | BYTE | 1 | +4 | +4 | データの暗号化・署名状態等を示すビットフラグ。 |
| Type | DWORD | 4 | +8 | +8 | 生体データの種別(指紋・顔・虹彩等)を示す値。 |
| Subtype | BYTE | 1 | +12 | +12 | 生体データのサブタイプ(指の位置等)を示すバイト値。 |
| Purpose | BYTE | 1 | +13 | +13 | データの用途(登録・検証・識別等)を示すバイト値。 |
| DataQuality | CHAR | 1 | +14 | +14 | 生体データの品質スコア。負値で品質不明。 |
| CreationDate | LONGLONG | 8 | +16 | +16 | データ生成日時を示すタイムスタンプ(64ビット)。 |
| ValidityPeriod | _ValidityPeriod_e__Struct | 16 | +24 | +24 | データの有効期間(開始・終了日時)を示す内部構造体。 |
| BiometricDataFormat | WINBIO_REGISTERED_FORMAT | 4 | +40 | +40 | 生体データの登録済み形式を示すWINBIO_REGISTERED_FORMAT。 |
| ProductId | WINBIO_REGISTERED_FORMAT | 4 | +44 | +44 | データを生成した製品の登録済み識別子。 |
構造体: _ValidityPeriod_e__Struct x64 16B / x86 16B
| フィールド | 型 | サイズ | x64 | x86 |
|---|---|---|---|---|
| BeginDate | LONGLONG | 8 | +0 | +0 |
| EndDate | LONGLONG | 8 | +8 | +8 |
各言語での定義
#include <windows.h>
// WINBIO_REGISTERED_FORMAT (x64 4 / x86 4 バイト)
typedef struct WINBIO_REGISTERED_FORMAT {
WORD Owner;
WORD Type;
} WINBIO_REGISTERED_FORMAT;
// WINBIO_BIR_HEADER (x64 48 / x86 48 バイト)
typedef struct WINBIO_BIR_HEADER {
WORD ValidFields;
BYTE HeaderVersion;
BYTE PatronHeaderVersion;
BYTE DataFlags;
DWORD Type;
BYTE Subtype;
BYTE Purpose;
CHAR DataQuality;
LONGLONG CreationDate;
_ValidityPeriod_e__Struct ValidityPeriod;
WINBIO_REGISTERED_FORMAT BiometricDataFormat;
WINBIO_REGISTERED_FORMAT ProductId;
} WINBIO_BIR_HEADER;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WINBIO_REGISTERED_FORMAT
{
public ushort Owner;
public ushort Type;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WINBIO_BIR_HEADER
{
public ushort ValidFields;
public byte HeaderVersion;
public byte PatronHeaderVersion;
public byte DataFlags;
public uint Type;
public byte Subtype;
public byte Purpose;
public sbyte DataQuality;
public long CreationDate;
public _ValidityPeriod_e__Struct ValidityPeriod;
public WINBIO_REGISTERED_FORMAT BiometricDataFormat;
public WINBIO_REGISTERED_FORMAT ProductId;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WINBIO_REGISTERED_FORMAT
Public Owner As UShort
Public Type As UShort
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WINBIO_BIR_HEADER
Public ValidFields As UShort
Public HeaderVersion As Byte
Public PatronHeaderVersion As Byte
Public DataFlags As Byte
Public Type As UInteger
Public Subtype As Byte
Public Purpose As Byte
Public DataQuality As SByte
Public CreationDate As Long
Public ValidityPeriod As _ValidityPeriod_e__Struct
Public BiometricDataFormat As WINBIO_REGISTERED_FORMAT
Public ProductId As WINBIO_REGISTERED_FORMAT
End Structureimport ctypes
from ctypes import wintypes
class WINBIO_REGISTERED_FORMAT(ctypes.Structure):
_fields_ = [
("Owner", ctypes.c_ushort),
("Type", ctypes.c_ushort),
]
class WINBIO_BIR_HEADER(ctypes.Structure):
_fields_ = [
("ValidFields", ctypes.c_ushort),
("HeaderVersion", ctypes.c_ubyte),
("PatronHeaderVersion", ctypes.c_ubyte),
("DataFlags", ctypes.c_ubyte),
("Type", wintypes.DWORD),
("Subtype", ctypes.c_ubyte),
("Purpose", ctypes.c_ubyte),
("DataQuality", ctypes.c_byte),
("CreationDate", ctypes.c_longlong),
("ValidityPeriod", _ValidityPeriod_e__Struct),
("BiometricDataFormat", WINBIO_REGISTERED_FORMAT),
("ProductId", WINBIO_REGISTERED_FORMAT),
]#[repr(C)]
pub struct WINBIO_REGISTERED_FORMAT {
pub Owner: u16,
pub Type: u16,
}
#[repr(C)]
pub struct WINBIO_BIR_HEADER {
pub ValidFields: u16,
pub HeaderVersion: u8,
pub PatronHeaderVersion: u8,
pub DataFlags: u8,
pub Type: u32,
pub Subtype: u8,
pub Purpose: u8,
pub DataQuality: i8,
pub CreationDate: i64,
pub ValidityPeriod: _ValidityPeriod_e__Struct,
pub BiometricDataFormat: WINBIO_REGISTERED_FORMAT,
pub ProductId: WINBIO_REGISTERED_FORMAT,
}import "golang.org/x/sys/windows"
type WINBIO_REGISTERED_FORMAT struct {
Owner uint16
Type uint16
}
type WINBIO_BIR_HEADER struct {
ValidFields uint16
HeaderVersion byte
PatronHeaderVersion byte
DataFlags byte
Type uint32
Subtype byte
Purpose byte
DataQuality int8
CreationDate int64
ValidityPeriod _ValidityPeriod_e__Struct
BiometricDataFormat WINBIO_REGISTERED_FORMAT
ProductId WINBIO_REGISTERED_FORMAT
}type
WINBIO_REGISTERED_FORMAT = record
Owner: Word;
Type: Word;
end;
WINBIO_BIR_HEADER = record
ValidFields: Word;
HeaderVersion: Byte;
PatronHeaderVersion: Byte;
DataFlags: Byte;
Type: DWORD;
Subtype: Byte;
Purpose: Byte;
DataQuality: Shortint;
CreationDate: Int64;
ValidityPeriod: _ValidityPeriod_e__Struct;
BiometricDataFormat: WINBIO_REGISTERED_FORMAT;
ProductId: WINBIO_REGISTERED_FORMAT;
end;const WINBIO_REGISTERED_FORMAT = extern struct {
Owner: u16,
Type: u16,
};
const WINBIO_BIR_HEADER = extern struct {
ValidFields: u16,
HeaderVersion: u8,
PatronHeaderVersion: u8,
DataFlags: u8,
Type: u32,
Subtype: u8,
Purpose: u8,
DataQuality: i8,
CreationDate: i64,
ValidityPeriod: _ValidityPeriod_e__Struct,
BiometricDataFormat: WINBIO_REGISTERED_FORMAT,
ProductId: WINBIO_REGISTERED_FORMAT,
};type
WINBIO_REGISTERED_FORMAT {.bycopy.} = object
Owner: uint16
Type: uint16
WINBIO_BIR_HEADER {.bycopy.} = object
ValidFields: uint16
HeaderVersion: uint8
PatronHeaderVersion: uint8
DataFlags: uint8
Type: uint32
Subtype: uint8
Purpose: uint8
DataQuality: int8
CreationDate: int64
ValidityPeriod: _ValidityPeriod_e__Struct
BiometricDataFormat: WINBIO_REGISTERED_FORMAT
ProductId: WINBIO_REGISTERED_FORMATstruct WINBIO_REGISTERED_FORMAT
{
ushort Owner;
ushort Type;
}
struct WINBIO_BIR_HEADER
{
ushort ValidFields;
ubyte HeaderVersion;
ubyte PatronHeaderVersion;
ubyte DataFlags;
uint Type;
ubyte Subtype;
ubyte Purpose;
byte DataQuality;
long CreationDate;
_ValidityPeriod_e__Struct ValidityPeriod;
WINBIO_REGISTERED_FORMAT BiometricDataFormat;
WINBIO_REGISTERED_FORMAT ProductId;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; WINBIO_BIR_HEADER サイズ: 48 バイト(x64)
dim st, 12 ; 4byte整数×12(構造体サイズ 48 / 4 切り上げ)
; ValidFields : WORD (+0, 2byte) wpoke st,0,値 / 値 = wpeek(st,0)
; HeaderVersion : BYTE (+2, 1byte) poke st,2,値 / 値 = peek(st,2)
; PatronHeaderVersion : BYTE (+3, 1byte) poke st,3,値 / 値 = peek(st,3)
; DataFlags : BYTE (+4, 1byte) poke st,4,値 / 値 = peek(st,4)
; Type : DWORD (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; Subtype : BYTE (+12, 1byte) poke st,12,値 / 値 = peek(st,12)
; Purpose : BYTE (+13, 1byte) poke st,13,値 / 値 = peek(st,13)
; DataQuality : CHAR (+14, 1byte) poke st,14,値 / 値 = peek(st,14)
; CreationDate : LONGLONG (+16, 8byte) qpoke st,16,値 / qpeek(st,16) ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; ValidityPeriod : _ValidityPeriod_e__Struct (+24, 16byte) varptr(st)+24 を基点に操作(16byte:入れ子/配列)
; BiometricDataFormat : WINBIO_REGISTERED_FORMAT (+40, 4byte) varptr(st)+40 を基点に操作(4byte:入れ子/配列)
; ProductId : WINBIO_REGISTERED_FORMAT (+44, 4byte) varptr(st)+44 を基点に操作(4byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global WINBIO_REGISTERED_FORMAT
#field short Owner
#field short Type
#endstruct
#defstruct global WINBIO_BIR_HEADER
#field short ValidFields
#field byte HeaderVersion
#field byte PatronHeaderVersion
#field byte DataFlags
#field int Type
#field byte Subtype
#field byte Purpose
#field byte DataQuality
#field int64 CreationDate
#field _ValidityPeriod_e__Struct ValidityPeriod
#field WINBIO_REGISTERED_FORMAT BiometricDataFormat
#field WINBIO_REGISTERED_FORMAT ProductId
#endstruct
stdim st, WINBIO_BIR_HEADER ; NSTRUCT 変数を確保
st->ValidFields = 100
mes "ValidFields=" + st->ValidFields