tknring
@tknring (ring tkn)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Windows Biometric Framework の プライベートプールのOpenSessionでエラーが出る

解決したいこと

Windows Biometric Framework の プライベートプールのOpenSessionでエラーが出るのを解消したい

プライベートプールの作成までは
https://qiita.com/Leeya/items/d80fdbd4f6ed391f0407
を参考に作成しましたが、
OpenSessionでエラーが出てしまいます。
解決方法を教えて下さい。

発生している問題・エラー

WINBIO_E_CONFIGURATION_FAILURE  0x80098033
生体認証ユニットを構成できませんでした。

該当するソースコード

上記のソースを実行。OpenSessionの箇所で、上記エラーが発生。

static void onEnrollOrPractice(
    __in bool CommitEnrollment
)
{
    WINBIO_UNIT_ID unitIdArray[1] = {};
    SIZE_T unitIdCount = ARRAYSIZE(unitIdArray);

    WINBIO_UNIT_SCHEMA* unitSchemaArray = NULL;
    SIZE_T unitSchemaCount = 0;
    HRESULT hr = WinBioEnumBiometricUnits(
        WINBIO_TYPE_FINGERPRINT,
        &unitSchemaArray,
        &unitSchemaCount
    );
    if (SUCCEEDED(hr))
    {
        SIZE_T selectedUnit = 0;
        if (selectSensorMenu(
            _T("Choose a sensor for the private pool"),
            unitSchemaArray,
            unitSchemaCount,
            &selectedUnit
        ))
        {
            // Build the array of Unit IDs that will make
            // up the private pool
            unitIdArray[0] = unitSchemaArray[selectedUnit].UnitId;
            unitIdCount = 1;
        }
        else
        {
            hr = E_INVALIDARG;
        }
        WinBioFree(unitSchemaArray);
        unitSchemaArray = NULL;
        unitSchemaCount = 0;
    }
    if (SUCCEEDED(hr))
    {
        GUID privateDatabaseId = PRIVATE_POOL_DATABASE_ID;
        WINBIO_SESSION_HANDLE sessionHandle = NULL;
        hr = WinBioOpenSession(
            WINBIO_TYPE_FINGERPRINT,
            WINBIO_POOL_PRIVATE,
            WINBIO_FLAG_BASIC,
            unitIdArray,
            unitIdCount,
            &privateDatabaseId,
            &sessionHandle
        );
        if (SUCCEEDED(hr))
        {
            WINBIO_BIOMETRIC_SUBTYPE subFactor = WINBIO_SUBTYPE_NO_INFORMATION;
            if (selectSubFactorMenu(&subFactor) &&
                subFactor != WINBIO_SUBTYPE_NO_INFORMATION &&
                subFactor != WINBIO_SUBTYPE_ANY)
            {
                //
                // Locate sensor
                //
                _tprintf(_T("\nTap the sensor once when you're ready to begin enrolling...\n\n"));
                WINBIO_UNIT_ID unitId = 0;
                hr = WinBioLocateSensor(sessionHandle, &unitId);
                if (SUCCEEDED(hr))
                {
                    //
                    // Enroll begin
                    //
                    _tprintf(_T("\n(Begining enrollment sequence)\n\n"));
                    hr = WinBioEnrollBegin(
                        sessionHandle,
                        subFactor,
                        unitId
                    );
                    if (SUCCEEDED(hr))
                    {
                        SIZE_T swipeCount = 0;
                        for (swipeCount = 1;; ++swipeCount)
                        {
                            _tprintf(
                                _T("Swipe your finger on the sensor to capture %s sample.\n"),
                                (swipeCount == 1) ? _T("the first") : _T("another")
                            );

                            WINBIO_REJECT_DETAIL rejectDetail = 0;
                            hr = WinBioEnrollCapture(
                                sessionHandle,
                                &rejectDetail
                            );
                            _tprintf(_T("   Sample %d captured from unit number %d.\n"), swipeCount, unitId);
                            if (hr == WINBIO_I_MORE_DATA)
                            {
                                _tprintf(_T("   More data required.\n\n"));
                                continue;
                            }
                            if (FAILED(hr))
                            {
                                if (hr == WINBIO_E_BAD_CAPTURE)
                                {
                                    _tprintf(_T("*** Error - Bad capture.\n"));
                                    _tprintf(
                                        _T("- %s\n"),
                                        BioHelper::ConvertRejectDetailToString(rejectDetail)
                                    );
                                    hr = S_OK;
                                    continue;
                                }
                                else
                                {
                                    break;
                                }
                            }
                            else
                            {
                                _tprintf(_T("   Template completed.\n\n"));
                                break;
                            }
                        }
                        _tprintf(_T("\n"));
                        if (SUCCEEDED(hr))
                        {
                            if (CommitEnrollment)
                            {
                                // ENROLL
                                WINBIO_IDENTITY identity = {};
                                BOOLEAN isNewTemplate = FALSE;

                                _tprintf(_T("Committing enrollment...\n"));
                                hr = WinBioEnrollCommit(sessionHandle, &identity, &isNewTemplate);
                                if (SUCCEEDED(hr))
                                {
                                    _tprintf(_T("Enrollment committed to database\n"));
                                    displayIdentity(&identity, subFactor);
                                }
                            }
                            else
                            {
                                // PRACTICE
                                _tprintf(_T("Discarding enrollment...\n"));
                                hr = WinBioEnrollDiscard(sessionHandle);
                                if (SUCCEEDED(hr))
                                {
                                    _tprintf(_T("Template discarded.\n"));
                                }
                            }
                        }
                    }
                }
            }
            else
            {
                hr = E_INVALIDARG;
            }

            WinBioCloseSession(sessionHandle);
            sessionHandle = NULL;
        }
    }

    if (FAILED(hr))
    {
        LPTSTR errorMessage = BioHelper::ConvertErrorCodeToString(hr);
        _tprintf(_T("*** Error - %s\n"), errorMessage);
        LocalFree(errorMessage);
        errorMessage = NULL;
    }
}

自分で試したこと

対象エラーWINBIO_E_CONFIGURATION_FAILUREのGoogle検索

プライベートプールの登録は完了しているはず?それ以外の情報は見つからず。

こっちも結局はプライベートプールの登録がされてなかっただけ?

0

1Answer

私も同じエラーに会いましたが、とりあえず登録と認証までできるようになりました。
解決につながるかはわかりませんが、私が試したのはレジストリのWinBio\ConfigurationsのDefaultConfigurationをinstallで作成したコンフィグに変更、です。

0Like

Your answer might help someone💌