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

WINBIO_BIR_HEADER

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

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

フィールド

フィールドサイズx64x86説明
ValidFieldsWORD2+0+0どのヘッダフィールドが有効かを示すビットフラグ。
HeaderVersionBYTE1+2+2BIRヘッダのバージョン番号。
PatronHeaderVersionBYTE1+3+3パトロン(規格管理者)ヘッダ形式のバージョン番号。
DataFlagsBYTE1+4+4データの暗号化・署名状態等を示すビットフラグ。
TypeDWORD4+8+8生体データの種別(指紋・顔・虹彩等)を示す値。
SubtypeBYTE1+12+12生体データのサブタイプ(指の位置等)を示すバイト値。
PurposeBYTE1+13+13データの用途(登録・検証・識別等)を示すバイト値。
DataQualityCHAR1+14+14生体データの品質スコア。負値で品質不明。
CreationDateLONGLONG8+16+16データ生成日時を示すタイムスタンプ(64ビット)。
ValidityPeriod_ValidityPeriod_e__Struct16+24+24データの有効期間(開始・終了日時)を示す内部構造体。
BiometricDataFormatWINBIO_REGISTERED_FORMAT4+40+40生体データの登録済み形式を示すWINBIO_REGISTERED_FORMAT。
ProductIdWINBIO_REGISTERED_FORMAT4+44+44データを生成した製品の登録済み識別子。

構造体: _ValidityPeriod_e__Struct x64 16B / x86 16B

フィールドサイズx64x86
BeginDateLONGLONG8+0+0
EndDateLONGLONG8+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 Structure
import 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_FORMAT
struct 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