首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Windows生物识别框架失败

Windows生物识别框架失败
EN

Stack Overflow用户
提问于 2018-11-22 10:23:47
回答 1查看 184关注 0票数 1

我的朋友让我写一个简单的程序,从计算机的内置读取器中捕获指纹,并打印出某种标识符。我可以自己选择操作系统,比如一台装有Windows或Linux的笔记本电脑,或者一部Android手机。

我认为这会很简单,当然有很多API可以做到这一点,我注意到微软自己实际上也为它提供了API。由于我可以使用指纹识别器登录到我的win10笔记本电脑,因此我知道识别器可以正常工作。

由于某些原因,微软自己在文档中提供的例子对我来说不起作用。https://docs.microsoft.com/en-us/windows/desktop/api/Winbio/nf-winbio-winbiocapturesample

我想写这些页面的人忘记了提到一些重要的方面或步骤,也许有一种方法可以在Visual Studio中的某个地方添加权限。

在重写和尝试了许多东西之后,至少我在这个过程中又前进了一步,但它仍然失败了。

这是当前版本

代码语言:javascript
复制
#include "pch.h"
#include <iostream>
#include "Windows.h"
#include "Stdio.h"
#include "Conio.h"
#include "Winbio.h"
HRESULT CaptureSample();
void capture(WINBIO_SESSION_HANDLE sessionHandle, int flag);

int main()
{
    std::cout << "Hello World!\n";
    HRESULT x = CaptureSample();
}

HRESULT CaptureSample()
{
    HRESULT hr = S_OK;
    WINBIO_SESSION_HANDLE sessionHandle = NULL;
    WINBIO_REJECT_DETAIL rejectDetail = 0;
    // Connect to the system pool. 
    hr = WinBioOpenSession(
        WINBIO_TYPE_FINGERPRINT,    // Service provider
        WINBIO_POOL_SYSTEM,         // Pool type
        WINBIO_FLAG_DEFAULT,            // Access: Capture raw data
        NULL,                       // Array of biometric unit IDs
        0,                          // Count of biometric unit IDs
        WINBIO_DB_DEFAULT,          // Default database
        &sessionHandle              // [out] Session handle
    );
    if (FAILED(hr))
    {
        wprintf_s(L"WinBioOpenSession failed. hr = 0x%x\n", hr);
        goto e_Exit;
    }

    wprintf_s(L"Start my fingerprint capturing...\n");
    capture(sessionHandle, WINBIO_DATA_FLAG_INTEGRITY);
    capture(sessionHandle, WINBIO_DATA_FLAG_PRIVACY);
    capture(sessionHandle, WINBIO_DATA_FLAG_SIGNED);
    capture(sessionHandle, WINBIO_DATA_FLAG_OPTION_MASK_PRESENT);
    capture(sessionHandle, WINBIO_DATA_FLAG_RAW);
    capture(sessionHandle, WINBIO_DATA_FLAG_INTERMEDIATE);
    capture(sessionHandle, WINBIO_DATA_FLAG_PROCESSED);
    hr = WinBioEnrollCapture(sessionHandle, &rejectDetail);
    wprintf_s(L"WinBioEnrollCapture hr=%x rejection = %d\n", hr, rejectDetail);

    if (sessionHandle != NULL)
    {
        WinBioCloseSession(sessionHandle);
        sessionHandle = NULL;
    }

e_Exit:
    wprintf_s(L"\n Press any key to exit...");
    _getch();

    return hr;

}

void capture(WINBIO_SESSION_HANDLE sessionHandle, int flag) {
    WINBIO_UNIT_ID unitId = 0;
    WINBIO_REJECT_DETAIL rejectDetail = 0;
    PWINBIO_BIR sample = NULL;
    SIZE_T sampleSize = 0;
    wprintf_s(L"\n Calling WinBioCaptureSample. Flag = %d.\n", flag);
    HRESULT hr = WinBioCaptureSample(
        sessionHandle,
        WINBIO_PURPOSE_IDENTIFY,
        flag,
        &unitId,
        &sample,
        &sampleSize,
        &rejectDetail
    );
    if (FAILED(hr))
    {
        if (hr == WINBIO_E_BAD_CAPTURE)
        {
            wprintf_s(L"\n Bad capture; reason: %d\n", rejectDetail);
        }
        else if (hr == E_ACCESSDENIED)
        {
            wprintf_s(L"\n WinBioCaptureSample failed, access denied.");
        }
        else
        {
            wprintf_s(L"\n WinBioCaptureSample failed. hr = 0x%x\n", hr);
        }
        goto e_Exit;
    }

    wprintf_s(L"\n Swipe processed - Unit ID: %d\n", unitId);
    wprintf_s(L"\n Captured %d bytes.\n", sampleSize);

e_Exit:
    if (sample != NULL)
    {
        WinBioFree(sample);
        sample = NULL;
    }


}

下面是运行它的结果:

代码语言:javascript
复制
Hello World!
Start my fingerprint capturing...

 Calling WinBioCaptureSample. Flag = 1.

 WinBioCaptureSample failed, access denied.
 Calling WinBioCaptureSample. Flag = 2.

 WinBioCaptureSample failed, access denied.
 Calling WinBioCaptureSample. Flag = 4.

 WinBioCaptureSample failed, access denied.
 Calling WinBioCaptureSample. Flag = 8.

 WinBioCaptureSample failed, access denied.
 Calling WinBioCaptureSample. Flag = 32.

 WinBioCaptureSample failed, access denied.
 Calling WinBioCaptureSample. Flag = 64.

 WinBioCaptureSample failed, access denied.
 Calling WinBioCaptureSample. Flag = 128.

 WinBioCaptureSample failed, access denied.WinBioEnrollCapture hr=8009802c rejection = 0

 Press any key to exit...

我遗漏了什么?

EN

回答 1

Stack Overflow用户

发布于 2018-11-23 17:58:59

我认为您应该尝试使用其他API,尽管您的目标在这里并不明确。您可以查看CloudABIS™,它是超标量、生物识别即服务(BaaS)匹配系统,可以以更低的成本快速部署。应用编程接口是由M2SYS TEchnology提供的,他们也有大量的硬件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53423037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档