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

WINBIO_PROTECTION_POLICY

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

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

フィールド

フィールドサイズx64x86説明
VersionDWORD4+0+0保護ポリシ構造体のバージョン番号。
IdentityWINBIO_IDENTITY40/36+8+4ポリシ対象の識別情報(WINBIO_IDENTITY)。
DatabaseIdGUID16+48+40対象データベースのGUID。
UserStateULONGLONG8+64+56ユーザの状態を示す値(64ビット)。
PolicySizeUINT_PTR8/4+72+64Policyフィールドが指すポリシデータのバイト数。
PolicyBYTE128+80+68可変長のポリシデータ本体の先頭バイト。

各言語での定義

#include <windows.h>

// WINBIO_IDENTITY  (x64 40 / x86 36 バイト)
typedef struct WINBIO_IDENTITY {
    DWORD Type;
    _Value_e__Union Value;
} WINBIO_IDENTITY;

// WINBIO_PROTECTION_POLICY  (x64 208 / x86 200 バイト)
typedef struct WINBIO_PROTECTION_POLICY {
    DWORD Version;
    WINBIO_IDENTITY Identity;
    GUID DatabaseId;
    ULONGLONG UserState;
    UINT_PTR PolicySize;
    BYTE Policy[128];
} WINBIO_PROTECTION_POLICY;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WINBIO_IDENTITY
{
    public uint Type;
    public _Value_e__Union Value;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WINBIO_PROTECTION_POLICY
{
    public uint Version;
    public WINBIO_IDENTITY Identity;
    public Guid DatabaseId;
    public ulong UserState;
    public UIntPtr PolicySize;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)] public byte[] Policy;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WINBIO_IDENTITY
    Public Type As UInteger
    Public Value As _Value_e__Union
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WINBIO_PROTECTION_POLICY
    Public Version As UInteger
    Public Identity As WINBIO_IDENTITY
    Public DatabaseId As Guid
    Public UserState As ULong
    Public PolicySize As UIntPtr
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=128)> Public Policy() As Byte
End Structure
import ctypes
from ctypes import wintypes

class WINBIO_IDENTITY(ctypes.Structure):
    _fields_ = [
        ("Type", wintypes.DWORD),
        ("Value", _Value_e__Union),
    ]

class WINBIO_PROTECTION_POLICY(ctypes.Structure):
    _fields_ = [
        ("Version", wintypes.DWORD),
        ("Identity", WINBIO_IDENTITY),
        ("DatabaseId", GUID),
        ("UserState", ctypes.c_ulonglong),
        ("PolicySize", ctypes.c_size_t),
        ("Policy", ctypes.c_ubyte * 128),
    ]
#[repr(C)]
pub struct WINBIO_IDENTITY {
    pub Type: u32,
    pub Value: _Value_e__Union,
}

#[repr(C)]
pub struct WINBIO_PROTECTION_POLICY {
    pub Version: u32,
    pub Identity: WINBIO_IDENTITY,
    pub DatabaseId: GUID,
    pub UserState: u64,
    pub PolicySize: usize,
    pub Policy: [u8; 128],
}
import "golang.org/x/sys/windows"

type WINBIO_IDENTITY struct {
	Type uint32
	Value _Value_e__Union
}

type WINBIO_PROTECTION_POLICY struct {
	Version uint32
	Identity WINBIO_IDENTITY
	DatabaseId windows.GUID
	UserState uint64
	PolicySize uintptr
	Policy [128]byte
}
type
  WINBIO_IDENTITY = record
    Type: DWORD;
    Value: _Value_e__Union;
  end;

  WINBIO_PROTECTION_POLICY = record
    Version: DWORD;
    Identity: WINBIO_IDENTITY;
    DatabaseId: TGUID;
    UserState: UInt64;
    PolicySize: NativeUInt;
    Policy: array[0..127] of Byte;
  end;
const WINBIO_IDENTITY = extern struct {
    Type: u32,
    Value: _Value_e__Union,
};

const WINBIO_PROTECTION_POLICY = extern struct {
    Version: u32,
    Identity: WINBIO_IDENTITY,
    DatabaseId: GUID,
    UserState: u64,
    PolicySize: usize,
    Policy: [128]u8,
};
type
  WINBIO_IDENTITY {.bycopy.} = object
    Type: uint32
    Value: _Value_e__Union

  WINBIO_PROTECTION_POLICY {.bycopy.} = object
    Version: uint32
    Identity: WINBIO_IDENTITY
    DatabaseId: GUID
    UserState: uint64
    PolicySize: uint
    Policy: array[128, uint8]
struct WINBIO_IDENTITY
{
    uint Type;
    _Value_e__Union Value;
}

struct WINBIO_PROTECTION_POLICY
{
    uint Version;
    WINBIO_IDENTITY Identity;
    GUID DatabaseId;
    ulong UserState;
    size_t PolicySize;
    ubyte[128] Policy;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; WINBIO_PROTECTION_POLICY サイズ: 200 バイト(x86)
dim st, 50    ; 4byte整数×50(構造体サイズ 200 / 4 切り上げ)
; Version : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; Identity : WINBIO_IDENTITY (+4, 36byte)  varptr(st)+4 を基点に操作(36byte:入れ子/配列)
; DatabaseId : GUID (+40, 16byte)  varptr(st)+40 を基点に操作(16byte:入れ子/配列)
; UserState : ULONGLONG (+56, 8byte)  qpoke st,56,値 / qpeek(st,56)  ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; PolicySize : UINT_PTR (+64, 4byte)  st.16 = 値  /  値 = st.16   (lpoke/lpeek も可)
; Policy : BYTE (+68, 128byte)  varptr(st)+68 を基点に操作(128byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; WINBIO_PROTECTION_POLICY サイズ: 208 バイト(x64)
dim st, 52    ; 4byte整数×52(構造体サイズ 208 / 4 切り上げ)
; Version : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; Identity : WINBIO_IDENTITY (+8, 40byte)  varptr(st)+8 を基点に操作(40byte:入れ子/配列)
; DatabaseId : GUID (+48, 16byte)  varptr(st)+48 を基点に操作(16byte:入れ子/配列)
; UserState : ULONGLONG (+64, 8byte)  qpoke st,64,値 / qpeek(st,64)  ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; PolicySize : UINT_PTR (+72, 8byte)  qpoke st,72,値 / qpeek(st,72)  ※IronHSPのみ。3.7/3.8は lpoke st,72,下位 : lpoke st,76,上位
; Policy : BYTE (+80, 128byte)  varptr(st)+80 を基点に操作(128byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global WINBIO_IDENTITY
    #field int Type
    #field byte Value 32
#endstruct

#defstruct global GUID, pack=1
    #field int Data1
    #field short Data2
    #field short Data3
    #field byte Data4 8
#endstruct

#defstruct global WINBIO_PROTECTION_POLICY
    #field int Version
    #field WINBIO_IDENTITY Identity
    #field GUID DatabaseId
    #field int64 UserState
    #field intptr PolicySize
    #field byte Policy 128
#endstruct

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