WBF wrapper architecture
flowchart LR
Windows[Windows Biometric Framework] --> Adapter[Sensor / Engine / Storage adapters]
Adapter --> Device[CBiometricDriver + CBiometricDevice]
Device --> Capture[CaptureImage + worker threads]
Device --> Power[Power, wake, pairing and side-channel control]
Capture --> Bridge[vfmCoreEntry]
Power --> Bridge
Adapter --> Bridge
Bridge --> Core[niseCore VFM API]
Device --> Bus[USB / SPI / HID device classes]
Bus --> Sensor[Fingerprint sensor]
Customer[CustomerProjects props] -. configures .-> Adapter
Customer -. configures .-> Device
Services[Policy / reset / monitor / CTAP services] --> Device
Package[Driver and service packages] -. delivers .-> Device
Boundaries
| Component | Source | Architectural responsibility |
|---|
| WBDI driver | wbdi/driver/ | Owns CBiometricDriver/CBiometricDevice, WDF requests, capture threads, power/wake handling and USB/SPI/HID transports. |
| WBF adapters | adapters/synaFpAdapter/ | Implements sensor, engine and storage adapter callbacks plus generic adapter state. |
| niseCore bridge | wbdi/driver/vfmCoreEntry.* | Maps Windows driver operations to the VFM/niseCore API. |
| Capture pipeline | wbdi/driver/CaptureImage.* and BiometricDevice.* | Coordinates asynchronous capture, cancellation, completion and notify-wake. |
| Customer projects | CustomerProjects/ | Defines per-customer properties, matcher/options, package and feature selection. |
| Services | services/ | Provides policy/reset/monitoring/analysis and CTAP-related services where selected. |
| Installer/package | wbdi/package/, services/package/, coInstallers/ | Builds driver/service packages and install-time components. |
| Optional UI/utilities | applications/, SynUwpService/, SynaSmi/, utilities/ | Supplies customer-selected applications, RPC/UWP service and diagnostics. |
Change-safety rules
- Follow calls and data across component boundaries; a changed header or customer property can affect multiple binaries.
- Keep source revision and branch explicit because configured branches differ substantially.
- Validate both the component and its direct consumers.
- Treat optional/customer-selected components as conditional, not universally deployed.