J'ai essayé de créer un plugin FireBreath qui capture les empreintes digitales à l'aide d'un scanner. Ce code s'exécute très bien en tant qu'application console (moins le boost threading).
bool GopripFPrintAPI::winCaptureFPrint(const FB::JSObjectPtr& callback)
{
boost::thread t(boost::bind(&GopripFPrintAPI::WBFCapture_thread, this, callback));
return true;
}
int GopripFPrintAPI::WBFCapture_thread(const FB::JSObjectPtr& callback)
{
unsigned long resultHandle = S_OK;
WINBIO_SESSION_HANDLE sessionHandle = NULL;
WINBIO_UNIT_ID unitId = 0;
WINBIO_REJECT_DETAIL rejectDetail = 0;
PWINBIO_BIR sample = NULL;
SIZE_T sampleSize = 0;
// Connect to the system pool.
resultHandle = WinBioOpenSession(
WINBIO_TYPE_FINGERPRINT, // Service provider
WINBIO_POOL_SYSTEM, // Pool type
WINBIO_FLAG_RAW, // 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
);
// Capture a biometric sample.
wprintf_s(L"\n Calling WinBioCaptureSample - Swipe sensor...\n");
resultHandle = WinBioCaptureSample(
sessionHandle,
WINBIO_NO_PURPOSE_AVAILABLE,
WINBIO_DATA_FLAG_RAW,
&unitId,
&sample,
&sampleSize,
&rejectDetail
);
...
}
L'appel à winCaptureFPrint() démarre correctement WBFCapture_thread() et arrête l'attente à WinBioCaptureSample() mais l'utilisation de scanners d'empreintes digitales ne fait rien. La méthode winBioCaptureSample() ne semble pas recevoir de signal de la part du scanner. J'ai pensé qu'il s'agissait probablement d'un problème de mise au point, j'ai donc essayé
resultHandle = WinBioAcquireFocus()
Mais elle échoue toujours. L'erreur E_ACCESSDENIED (refus d'accès général) est affichée. Y a-t-il quelque chose dans FireBreath focuswise que je ne connais pas ou est-ce que je fais quelque chose d'incorrect ?