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

WINBIO_UNIT_SCHEMA

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

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

フィールド

フィールドサイズx64x86説明
UnitIdDWORD4+0+0生体ユニットを識別する番号。
PoolTypeDWORD4+4+4ユニットが属するプール種別(システム・プライベート等)を示す値。
BiometricFactorDWORD4+8+8ユニットが扱う生体要素の種別を示す値。
SensorSubTypeDWORD4+12+12センサのサブタイプを示す値。
CapabilitiesDWORD4+16+16ユニットの能力を示すビットフラグ。
DeviceInstanceIdWORD512+20+20デバイスインスタンスIDを格納する固定長ワイド文字配列。
DescriptionWORD512+532+532ユニットの説明を格納する固定長ワイド文字配列。
ManufacturerWORD512+1044+1044製造元名を格納する固定長ワイド文字配列。
ModelWORD512+1556+1556モデル名を格納する固定長ワイド文字配列。
SerialNumberWORD512+2068+2068シリアル番号を格納する固定長ワイド文字配列。
FirmwareVersionWINBIO_VERSION8+2580+2580ファームウェアのバージョン(WINBIO_VERSION)。

公式ドキュメント

WINBIO_UNIT_SCHEMA 構造体は、生体認証ユニットの機能を記述します。この構造体は WinBioEnumBiometricUnits 関数で使用されます。

解説(Remarks)

UnitId

生体認証ユニットを識別する値です。

PoolType

生体認証ユニットの種類を指定する ULONG 値です。次のいずれかの値を指定できます。

意味
WINBIO_POOL_UNKNOWN
種類が不明です。
WINBIO_POOL_SYSTEM
セッションは、サービス プロバイダーによって管理される生体認証ユニットの共有コレクションに接続します。
WINBIO_POOL_PRIVATE
セッションは、呼び出し元によって管理される生体認証ユニットのコレクションに接続します。

BiometricFactor

生体認証ユニットの種類を指定する値です。現在は WINBIO_TYPE_FINGERPRINT のみがサポートされています。

SensorSubType

BiometricFactor メンバーで指定された生体認証の種類に対して定義されているセンサー サブタイプです。現在は指紋の種類 (WINBIO_TYPE_FINGERPRINT) のみがサポートされています。現在、指紋に対して次のサブタイプが定義されています。

  • WINBIO_SENSOR_SUBTYPE_UNKNOWN
  • WINBIO_FP_SENSOR_SUBTYPE_SWIPE
  • WINBIO_FP_SENSOR_SUBTYPE_TOUCH

Capabilities

生体認証センサーの機能を示すビットマスクです。次の値のビット単位の OR を指定できます。

  • WINBIO_CAPABILITY_SENSOR
  • WINBIO_CAPABILITY_MATCHING
  • WINBIO_CAPABILITY_DATABASE
  • WINBIO_CAPABILITY_PROCESSING
  • WINBIO_CAPABILITY_ENCRYPTION
  • WINBIO_CAPABILITY_NAVIGATION
  • WINBIO_CAPABILITY_INDICATOR
  • WINBIO_CAPABILITY_VIRTUAL_SENSOR
    メモ

    WINBIO_CAPABILITY_VIRTUAL_SENSOR 定数は Windows 10 以降にのみ適用されます。

DeviceInstanceId

デバイス ID を格納する文字列値です。 文字列には、終端の NULL 文字を含めて最大 256 文字の Unicode 文字を格納できます。

Description

生体認証ユニットの説明を格納する文字列値です。 文字列には、終端の NULL 文字を含めて最大 256 文字の Unicode 文字を格納できます。

Manufacturer

製造元の名前を格納する文字列値です。 文字列には、終端の NULL 文字を含めて最大 256 文字の Unicode 文字を格納できます。

Model

生体認証ユニットのモデル番号を格納する文字列値です。 文字列には、終端の NULL 文字を含めて最大 256 文字の Unicode 文字を格納できます。

SerialNumber

生体認証ユニットのシリアル番号を格納する、NULL で終わる Unicode 文字列です。 文字列には、終端の NULL 文字を含めて最大 256 文字の Unicode 文字を格納できます。

FirmwareVersion

生体認証ユニットのメジャー バージョン番号とマイナー バージョン番号を格納する WINBIO_VERSION 構造体です。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp)

各言語での定義

#include <windows.h>

// WINBIO_VERSION  (x64 8 / x86 8 バイト)
typedef struct WINBIO_VERSION {
    DWORD MajorVersion;
    DWORD MinorVersion;
} WINBIO_VERSION;

// WINBIO_UNIT_SCHEMA  (x64 2588 / x86 2588 バイト)
typedef struct WINBIO_UNIT_SCHEMA {
    DWORD UnitId;
    DWORD PoolType;
    DWORD BiometricFactor;
    DWORD SensorSubType;
    DWORD Capabilities;
    WORD DeviceInstanceId[256];
    WORD Description[256];
    WORD Manufacturer[256];
    WORD Model[256];
    WORD SerialNumber[256];
    WINBIO_VERSION FirmwareVersion;
} WINBIO_UNIT_SCHEMA;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WINBIO_VERSION
{
    public uint MajorVersion;
    public uint MinorVersion;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WINBIO_UNIT_SCHEMA
{
    public uint UnitId;
    public uint PoolType;
    public uint BiometricFactor;
    public uint SensorSubType;
    public uint Capabilities;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)] public ushort[] DeviceInstanceId;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)] public ushort[] Description;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)] public ushort[] Manufacturer;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)] public ushort[] Model;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)] public ushort[] SerialNumber;
    public WINBIO_VERSION FirmwareVersion;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WINBIO_VERSION
    Public MajorVersion As UInteger
    Public MinorVersion As UInteger
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WINBIO_UNIT_SCHEMA
    Public UnitId As UInteger
    Public PoolType As UInteger
    Public BiometricFactor As UInteger
    Public SensorSubType As UInteger
    Public Capabilities As UInteger
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=256)> Public DeviceInstanceId() As UShort
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=256)> Public Description() As UShort
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=256)> Public Manufacturer() As UShort
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=256)> Public Model() As UShort
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=256)> Public SerialNumber() As UShort
    Public FirmwareVersion As WINBIO_VERSION
End Structure
import ctypes
from ctypes import wintypes

class WINBIO_VERSION(ctypes.Structure):
    _fields_ = [
        ("MajorVersion", wintypes.DWORD),
        ("MinorVersion", wintypes.DWORD),
    ]

class WINBIO_UNIT_SCHEMA(ctypes.Structure):
    _fields_ = [
        ("UnitId", wintypes.DWORD),
        ("PoolType", wintypes.DWORD),
        ("BiometricFactor", wintypes.DWORD),
        ("SensorSubType", wintypes.DWORD),
        ("Capabilities", wintypes.DWORD),
        ("DeviceInstanceId", ctypes.c_ushort * 256),
        ("Description", ctypes.c_ushort * 256),
        ("Manufacturer", ctypes.c_ushort * 256),
        ("Model", ctypes.c_ushort * 256),
        ("SerialNumber", ctypes.c_ushort * 256),
        ("FirmwareVersion", WINBIO_VERSION),
    ]
#[repr(C)]
pub struct WINBIO_VERSION {
    pub MajorVersion: u32,
    pub MinorVersion: u32,
}

#[repr(C)]
pub struct WINBIO_UNIT_SCHEMA {
    pub UnitId: u32,
    pub PoolType: u32,
    pub BiometricFactor: u32,
    pub SensorSubType: u32,
    pub Capabilities: u32,
    pub DeviceInstanceId: [u16; 256],
    pub Description: [u16; 256],
    pub Manufacturer: [u16; 256],
    pub Model: [u16; 256],
    pub SerialNumber: [u16; 256],
    pub FirmwareVersion: WINBIO_VERSION,
}
import "golang.org/x/sys/windows"

type WINBIO_VERSION struct {
	MajorVersion uint32
	MinorVersion uint32
}

type WINBIO_UNIT_SCHEMA struct {
	UnitId uint32
	PoolType uint32
	BiometricFactor uint32
	SensorSubType uint32
	Capabilities uint32
	DeviceInstanceId [256]uint16
	Description [256]uint16
	Manufacturer [256]uint16
	Model [256]uint16
	SerialNumber [256]uint16
	FirmwareVersion WINBIO_VERSION
}
type
  WINBIO_VERSION = record
    MajorVersion: DWORD;
    MinorVersion: DWORD;
  end;

  WINBIO_UNIT_SCHEMA = record
    UnitId: DWORD;
    PoolType: DWORD;
    BiometricFactor: DWORD;
    SensorSubType: DWORD;
    Capabilities: DWORD;
    DeviceInstanceId: array[0..255] of Word;
    Description: array[0..255] of Word;
    Manufacturer: array[0..255] of Word;
    Model: array[0..255] of Word;
    SerialNumber: array[0..255] of Word;
    FirmwareVersion: WINBIO_VERSION;
  end;
const WINBIO_VERSION = extern struct {
    MajorVersion: u32,
    MinorVersion: u32,
};

const WINBIO_UNIT_SCHEMA = extern struct {
    UnitId: u32,
    PoolType: u32,
    BiometricFactor: u32,
    SensorSubType: u32,
    Capabilities: u32,
    DeviceInstanceId: [256]u16,
    Description: [256]u16,
    Manufacturer: [256]u16,
    Model: [256]u16,
    SerialNumber: [256]u16,
    FirmwareVersion: WINBIO_VERSION,
};
type
  WINBIO_VERSION {.bycopy.} = object
    MajorVersion: uint32
    MinorVersion: uint32

  WINBIO_UNIT_SCHEMA {.bycopy.} = object
    UnitId: uint32
    PoolType: uint32
    BiometricFactor: uint32
    SensorSubType: uint32
    Capabilities: uint32
    DeviceInstanceId: array[256, uint16]
    Description: array[256, uint16]
    Manufacturer: array[256, uint16]
    Model: array[256, uint16]
    SerialNumber: array[256, uint16]
    FirmwareVersion: WINBIO_VERSION
struct WINBIO_VERSION
{
    uint MajorVersion;
    uint MinorVersion;
}

struct WINBIO_UNIT_SCHEMA
{
    uint UnitId;
    uint PoolType;
    uint BiometricFactor;
    uint SensorSubType;
    uint Capabilities;
    ushort[256] DeviceInstanceId;
    ushort[256] Description;
    ushort[256] Manufacturer;
    ushort[256] Model;
    ushort[256] SerialNumber;
    WINBIO_VERSION FirmwareVersion;
}

HSP用 定義

HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; WINBIO_UNIT_SCHEMA サイズ: 2588 バイト(x64)
dim st, 647    ; 4byte整数×647(構造体サイズ 2588 / 4 切り上げ)
; UnitId : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; PoolType : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; BiometricFactor : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; SensorSubType : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; Capabilities : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; DeviceInstanceId : WORD (+20, 512byte)  varptr(st)+20 を基点に操作(512byte:入れ子/配列)
; Description : WORD (+532, 512byte)  varptr(st)+532 を基点に操作(512byte:入れ子/配列)
; Manufacturer : WORD (+1044, 512byte)  varptr(st)+1044 を基点に操作(512byte:入れ子/配列)
; Model : WORD (+1556, 512byte)  varptr(st)+1556 を基点に操作(512byte:入れ子/配列)
; SerialNumber : WORD (+2068, 512byte)  varptr(st)+2068 を基点に操作(512byte:入れ子/配列)
; FirmwareVersion : WINBIO_VERSION (+2580, 8byte)  varptr(st)+2580 を基点に操作(8byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global WINBIO_VERSION
    #field int MajorVersion
    #field int MinorVersion
#endstruct

#defstruct global WINBIO_UNIT_SCHEMA
    #field int UnitId
    #field int PoolType
    #field int BiometricFactor
    #field int SensorSubType
    #field int Capabilities
    #field short DeviceInstanceId 256
    #field short Description 256
    #field short Manufacturer 256
    #field short Model 256
    #field short SerialNumber 256
    #field WINBIO_VERSION FirmwareVersion
#endstruct

stdim st, WINBIO_UNIT_SCHEMA        ; NSTRUCT 変数を確保
st->UnitId = 100
mes "UnitId=" + st->UnitId