2016-12-22 10 views
-1

Я пытаюсь прочитать отпечатки пальцев и сохранить их с помощью WBF.Ошибка WinBioCaptureSampleWithCallback. OperationStatus = 0x80004001

Я попробовал образец кода, однако, я возвращаю код ошибки. Я могу использовать считыватель отпечатков пальцев для входа в окна, но я не могу захватить образцы из него.

Я запускаю Windows 10 в системе Lenovo Yoga и VS 2015 Community.

Это то, что я получаю, когда я запускаю мой код:

Calling WinBioCaptureSampleWithCallback Размах датчика ...

CaptureSampleCallback выполнение Размаха обработанного - Unit ID: 0 WinBioCaptureSampleWithCallback не удался. OperationStatus = 0x80004001

Нажмите любую клавишу для выхода ...

Спасибо!

Пример кода:

HRESULT CaptureSampleWithCallback(BOOL bCancel) 
{ 
    HRESULT hr = S_OK; 
    WINBIO_SESSION_HANDLE sessionHandle = NULL; 

    // Connect to the system pool. 
    hr = WinBioOpenSession( 
      WINBIO_TYPE_FINGERPRINT, // Service provider 
      WINBIO_POOL_SYSTEM,   // Pool type 
      WINBIO_FLAG_RAW,   // Raw access 
      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"\n WinBioOpenSession failed. hr = 0x%x\n", hr); 
     goto e_Exit; 
    } 

    // Capture a biometric sample asynchronously. 
    wprintf_s(L"\n Calling WinBioCaptureSampleWithCallback "); 
    hr = WinBioCaptureSampleWithCallback(
      sessionHandle,     // Open session handle 
      WINBIO_NO_PURPOSE_AVAILABLE, // Intended use of the sample 
      WINBIO_DATA_FLAG_RAW,   // Sample format 
      CaptureSampleCallback,   // Callback function 
      NULL       // Optional context 
      ); 
    if (FAILED(hr)) 
    { 
     wprintf_s(L"\n WinBioCaptureSampleWithCallback failed. "); 
     wprintf_s(L"hr = 0x%x\n", hr); 
     goto e_Exit; 
    } 
    wprintf_s(L"\n Swipe the sensor ...\n"); 

    // Cancel the capture process if the bCancel flag is set. 
    if (bCancel) 
    { 
     wprintf_s(L"\n Starting CANCEL timer..."); 
     Sleep(7000); 

     wprintf_s(L"\n Calling WinBioCancel\n"); 
     hr = WinBioCancel(sessionHandle); 
     if (FAILED(hr)) 
     { 
      wprintf_s(L"\n WinBioCancel failed. hr = 0x%x\n", hr); 
      goto e_Exit; 
     } 
    } 

    // Wait for the asynchronous capture process to complete 
    // or be canceled. 
    hr = WinBioWait(sessionHandle); 
    if (FAILED(hr)) 
    { 
     wprintf_s(L"\n WinBioWait failed. hr = 0x%x\n", hr); 
    } 

e_Exit: 

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

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

    return hr; 
} 

//------------------------------------------------------------------------ 
// The following function is the callback for WinBioCaptureSampleWithCallback. 
// The function filters the response from the biometric subsystem and 
// writes a result to the console window. 
// 
VOID CALLBACK CaptureSampleCallback(
    __in_opt PVOID CaptureCallbackContext, 
    __in HRESULT OperationStatus, 
    __in WINBIO_UNIT_ID UnitId, 
    __in_bcount(SampleSize) PWINBIO_BIR Sample, 
    __in SIZE_T SampleSize, 
    __in WINBIO_REJECT_DETAIL RejectDetail 
    ) 
{ 
    UNREFERENCED_PARAMETER(CaptureCallbackContext); 

    wprintf_s(L"\n CaptureSampleCallback executing"); 
    wprintf_s(L"\n Swipe processed - Unit ID: %d", UnitId); 

    if (FAILED(OperationStatus)) 
    { 
     if (OperationStatus == WINBIO_E_BAD_CAPTURE) 
     { 
      wprintf_s(L"\n Bad capture; reason: %d\n", RejectDetail); 
     } 
     else 
     { 
      wprintf_s(L"\n WinBioCaptureSampleWithCallback failed. "); 
      wprintf_s(L" OperationStatus = 0x%x\n", OperationStatus); 
     } 
     goto e_Exit; 
    } 

    wprintf_s(L"\n Captured %d bytes.\n", SampleSize); 

e_Exit: 

    if (Sample != NULL) 
    { 
     WinBioFree(Sample); 
     Sample = NULL; 
    } 
} 
+1

Что произошло, когда вы отлаживали его? – John3136

+0

@ John3136 Я попытался войти в функцию, но он просто помещается туда, как только я ввожу свой отпечаток пальца и снова вхожу в него, он возвращает код ошибки. – Danny

ответ

0

Вы проверили на Google или с документацией SDK, что OperationStatus = 0x80004001 переводит к? Я думаю, вам нужно остановить службу Windows для отпечатка пальца, прежде чем приступать к тестированию проекта, который вы разрабатываете на Visual Studio 2015.

+0

Я не пытался остановить обслуживание. Я читал, что с Windows 10 build 1600 (или 1600+) эти API будут отключены. Не уверен. Я закончил использование своих API универсальных приложений для аутентификации по отпечаткам пальцев. Тем не менее, я все еще хочу иметь возможность извлекать отпечатки пальцев, чтобы сделать некоторый анализ на них. Попробует остановить обслуживание (в зависимости от того, что это). – Danny