none
How to verify finger in WBF driver? RRS feed

  • Question

  • Hello.I'm writing a WBF driver following the WBDIsample , our device is a usb WINBIO_FP_SENSOR_SUBTYPE_TOUCH device.The target platform is Win8.1/Win10.

    Now I have two question, 

    Firstly ,If I want use this device to login system, Do I have to capture data and send it to system to save and verify. Our device can save and match fingers on board .Can I just verify the fingers by our device? I found I can return WINBIO_CAPABILITY_MATCHING and WINBIO_CAPABILITY_STORAGE in  IOCTL_BIOMETRIC_GET_SENSOR_STATUS, but how can I save the finger or verify them. There are only these IOCTL,

    IOCTL_BIOMETRIC_GET_ATTRIBUTES

    IOCTL_BIOMETRIC_GET_SENSOR_STATUS

    IOCTL_BIOMETRIC_RESET

    IOCTL_BIOMETRIC_CALIBRATE

    IOCTL_BIOMETRIC_CAPTURE_DATA

    I can see GET_ATTRIBUTES in, but I don't know which should be process when add finger or login.

    Secondly,  If I must transfer the data to system, the WBF will process storage and matching, Is the data format must be  

    ANSI_381?

    Thanks

    IOCTL_BIOMETRIC_GET_SENSOR_STATUS
    IOCTL_BIOMETRIC_GET_SENSOR_STATUS
    IOCTL_BIOMETRIC_GET_SENSOR_STATUS
    Wednesday, December 9, 2015 5:13 PM

Answers

  • It sounds like you have what WBF refers to as an "Advanced" sensor. This means the sensor hardware has some combination of matching and storage capabilities built into the device.

    To support an advanced sensor, you'll need to

    For an advanced sensor, your driver only needs to do two things:

    • Expose a device interface whose ID is GUID_DEVINTERFACE_BIOMETRIC_READER
    • Support the IOCTL_BIOMETRIC_GET_ATTRIBUTES IOCTL on that interface.

    It's up to you to define any other command codes you might need to send to the device.

    In addition, you'll need to write a sensor, engine, and storage adapter to plug your sensor into the WBF. The basic idea is that the upper edge of each adapter exposes an interface with very specific (WBF-defined) behaviors. The lower edge of the adapter will talk to your sensor driver. For an advanced sensor, as long as the upper edge behaves properly, WBF doesn't care too much about how you implement things down below. The thing to be aware of is that, because WBF has no understanding of your device's behavior, you're going to have to write more code to support the sensor in Windows.

    In terms of data movement, it's not necessary to send any biometric samples up the stack to WBF. If your advanced sensor can handle template creation, matching, and storage entirely onboard, then the WBF never needs to see the actual biometric samples or templates. WBF is designed so that advanced sensors can simply report the results of an operation (e.g., "that fingerprint belongs to user X").

    Take a look at the MSDN documentation for writing WinBio plugins. It gives most of the details you need.

    Regards,
    -Art Baker


    Monday, December 14, 2015 11:08 PM

All replies

  • It sounds like you have what WBF refers to as an "Advanced" sensor. This means the sensor hardware has some combination of matching and storage capabilities built into the device.

    To support an advanced sensor, you'll need to

    For an advanced sensor, your driver only needs to do two things:

    • Expose a device interface whose ID is GUID_DEVINTERFACE_BIOMETRIC_READER
    • Support the IOCTL_BIOMETRIC_GET_ATTRIBUTES IOCTL on that interface.

    It's up to you to define any other command codes you might need to send to the device.

    In addition, you'll need to write a sensor, engine, and storage adapter to plug your sensor into the WBF. The basic idea is that the upper edge of each adapter exposes an interface with very specific (WBF-defined) behaviors. The lower edge of the adapter will talk to your sensor driver. For an advanced sensor, as long as the upper edge behaves properly, WBF doesn't care too much about how you implement things down below. The thing to be aware of is that, because WBF has no understanding of your device's behavior, you're going to have to write more code to support the sensor in Windows.

    In terms of data movement, it's not necessary to send any biometric samples up the stack to WBF. If your advanced sensor can handle template creation, matching, and storage entirely onboard, then the WBF never needs to see the actual biometric samples or templates. WBF is designed so that advanced sensors can simply report the results of an operation (e.g., "that fingerprint belongs to user X").

    Take a look at the MSDN documentation for writing WinBio plugins. It gives most of the details you need.

    Regards,
    -Art Baker


    Monday, December 14, 2015 11:08 PM
  • Hi Art , thanks your help.

    I have built the sample, include the driver and the engine adapter.dll. As the following document 

    https://sec.ch9.ms/slides/winHEC/Winhec_Windows10FingerprintIntroductionandImplementation.pdf

    they are required.

    And I can receive IOCTL_BIOMETRIC_GET_ATTRIBUTES, and I filled the buffer as follow

    RtlZeroMemory(sensorAttributes, outputBufferSize);
        sensorAttributes->PayloadSize = (DWORD) sizeof(WINBIO_SENSOR_ATTRIBUTES);
        sensorAttributes->WinBioHresult = S_OK;
        sensorAttributes->WinBioVersion.MajorVersion = WINBIO_WBDI_MAJOR_VERSION;
        sensorAttributes->WinBioVersion.MinorVersion = WINBIO_WBDI_MINOR_VERSION;
        sensorAttributes->SensorType = WINBIO_TYPE_FINGERPRINT;
    sensorAttributes->SensorSubType = WINBIO_FP_SENSOR_SUBTYPE_TOUCH;//WINBIO_FP_SENSOR_SUBTYPE_SWIPE;
        sensorAttributes->Capabilities = WINBIO_CAPABILITY_SENSOR| WINBIO_CAPABILITY_MATCHING| WINBIO_CAPABILITY_DATABASE;
        sensorAttributes->SupportedFormatEntries = 1;
        sensorAttributes->SupportedFormat[0].Owner = WINBIO_ANSI_381_FORMAT_OWNER;
        sensorAttributes->SupportedFormat[0].Type= WINBIO_ANSI_381_FORMAT_TYPE;
        RtlCopyMemory(sensorAttributes->ManufacturerName, SAMPLE_MANUFACTURER_NAME, (wcslen(SAMPLE_MANUFACTURER_NAME)+1)*sizeof(WCHAR));
        RtlCopyMemory(sensorAttributes->ModelName, SAMPLE_MODEL_NAME, (wcslen(SAMPLE_MODEL_NAME)+1)*sizeof(WCHAR));
        RtlCopyMemory(sensorAttributes->SerialNumber, SAMPLE_SERIAL_NUMBER, (wcslen(SAMPLE_SERIAL_NUMBER)+1)*sizeof(WCHAR));
        sensorAttributes->FirmwareVersion.MajorVersion = 1;
        sensorAttributes->FirmwareVersion.MinorVersion = 0;


    Almost same as the sample code except the bold ,but then, I can't see any other call, both driver and the engine adapter DLL, even can't see the adapter was attached.

    So you mean , for Advanced sensor , I also need implement sensor ,storage adapter ?

    And if my device can send 381 format data, I can use winbiosensoradapter.dll and winbiostorageadapter.dll , right?

    But now I fill  the attributes.SupportedFormat as  ANSI_381, I still can't receive any other call, I think I must be missing some important things.

    Wednesday, December 16, 2015 1:15 PM
  • i have the same problem, i get IOCTL_BIOMETRIC_GET_ATTRIBUTES

    and then no IOCTL_BIOMETRIC_GET_SENSOR_STATUS

    can anyone help please?

    Friday, December 30, 2016 8:21 PM
  • Hi 

        I encountered the same situation, I call IOCTL_BIOMETRIC_GET_ATTRIBUTES command, the driver can receive feedback, but can not receive IOCTL_BIOMETRIC_GET_SENSOR_STATUS message。 help me !!!

    Wednesday, May 9, 2018 2:50 PM