Função WinBioLockUnit (winbio.h)
Bloqueia uma unidade biométrica para uso exclusivo por uma única sessão. A partir do Windows 10, build 1607, essa função está disponível para uso com uma imagem móvel.
Sintaxe
HRESULT WinBioLockUnit(
[in] WINBIO_SESSION_HANDLE SessionHandle,
[in] WINBIO_UNIT_ID UnitId
);
Parâmetros
[in] SessionHandle
Um valor WINBIO_SESSION_HANDLE que identifica uma sessão biométrica aberta. Abra um identificador de sessão síncrona chamando WinBioOpenSession. Abra um identificador de sessão assíncrono chamando WinBioAsyncOpenSession.
[in] UnitId
Um valor WINBIO_UNIT_ID que especifica a unidade biométrica a ser bloqueada.
Valor retornado
Se a função for bem-sucedida, ela retornará S_OK. Se a função falhar, ela retornará um valor HRESULT que indica o erro. Os possíveis valores incluem, mas sem limitação, aqueles na tabela a seguir. Para obter uma lista de códigos de erro comuns, consulte Valores HRESULT comuns.
Código de retorno | Descrição |
---|---|
|
O identificador de sessão não é válido. |
|
O parâmetro UnitId não pode conter zero. |
|
A operação não pôde ser concluída porque a unidade biométrica especificada está sendo usada atualmente para uma transação de registro (somente pool do sistema). |
|
A unidade biométrica não pode ser bloqueada porque a sessão especificada já tem outra unidade bloqueada. |
Comentários
Se a unidade biométrica especificada estiver bloqueada por outra sessão, WinBioLockUnit bloqueará o thread de chamada até que a sessão que possui a unidade biométrica libere seu bloqueio.
Chame a função WinBioUnlockUnit para cancelar qualquer solicitação de bloqueio pendente e liberar todos os bloqueios mantidos pela sessão.
Para usar WinBioLockUnit de forma síncrona, chame a função com um identificador de sessão criado chamando WinBioOpenSession. A função é bloqueada até que a operação seja concluída ou um erro seja encontrado.
Para usar WinBioLockUnit de forma assíncrona, chame a função com um identificador de sessão criado chamando WinBioAsyncOpenSession. A estrutura aloca uma estrutura WINBIO_ASYNC_RESULT e a usa para retornar informações sobre êxito ou falha da operação. A estrutura WINBIO_ASYNC_RESULT é retornada para o retorno de chamada do aplicativo ou para a fila de mensagens do aplicativo, dependendo do valor definido no parâmetro NotificationMethod da função WinBioAsyncOpenSession :
- Se você optar por receber avisos de conclusão usando um retorno de chamada, deverá implementar uma função PWINBIO_ASYNC_COMPLETION_CALLBACK e definir o parâmetro NotificationMethod como WINBIO_ASYNC_NOTIFY_CALLBACK.
- Se você optar por receber avisos de conclusão usando a fila de mensagens do aplicativo, deverá definir o parâmetro NotificationMethod como WINBIO_ASYNC_NOTIFY_MESSAGE. A estrutura retorna um ponteiro WINBIO_ASYNC_RESULT para o campo LPARAM da mensagem de janela.
Exemplos
A função a seguir chama WinBioLockUnit para bloquear a unidade biométrica antes de chamar WinBioIdentify para identificar o usuário. Link para a biblioteca estática Winbio.lib e inclua os seguintes arquivos de cabeçalho:
- Windows.h
- Stdio.h
- Conio.h
- Winbio.h
HRESULT LockUnlock( )
{
// Declare variables.
HRESULT hr = S_OK;
WINBIO_IDENTITY identity = {0};
WINBIO_SESSION_HANDLE sessionHandle = NULL;
WINBIO_UNIT_ID unitId = 0;
WINBIO_REJECT_DETAIL rejectDetail = 0;
WINBIO_BIOMETRIC_SUBTYPE subFactor = WINBIO_SUBTYPE_NO_INFORMATION;
BOOL lockAcquired = FALSE;
// Connect to the system pool.
hr = WinBioOpenSession(
WINBIO_TYPE_FINGERPRINT, // Service provider
WINBIO_POOL_SYSTEM, // Pool type
WINBIO_FLAG_DEFAULT, // Configuration and access
NULL, // Array of biometric unit IDs
0, // Count of biometric unit IDs
NULL, // Database ID
&sessionHandle // [out] Session handle
);
if (FAILED(hr))
{
wprintf_s(L"\n WinBioEnumBiometricUnits failed. hr = 0x%x\n", hr);
goto e_Exit;
}
// Lock the session. The Biometric unit ID (1) is hard coded in
// this example.
hr = WinBioLockUnit( sessionHandle, 1 );
if (FAILED(hr))
{
wprintf_s(L"\n WinBioLockUnit failed. hr = 0x%x\n", hr);
goto e_Exit;
}
wprintf_s(L"\n Biometric unit #1 is locked.\n");
lockAcquired = TRUE;
// Locate the biometric sensor and retrieve a WINBIO_IDENTITY object.
// You must swipe your finger on the sensor.
wprintf_s(L"\n Calling WinBioIdentify - Swipe finger on sensor...\n");
hr = WinBioIdentify(
sessionHandle,
&unitId,
&identity,
&subFactor,
&rejectDetail
);
wprintf_s(L"\n Swipe processed - Unit ID: %d\n", unitId);
if (FAILED(hr))
{
wprintf_s(L"\n WinBioIdentify failed. hr = 0x%x\n", hr);
goto e_Exit;
}
e_Exit:
// Unlock the biometric unit if it is locked.
if (lockAcquired == TRUE)
{
hr = WinBioUnlockUnit( sessionHandle, 1 );
if (FAILED(hr))
{
wprintf_s(L"\n WinBioUnlockUnit failed. hr = 0x%x\n", hr);
}
wprintf_s(L"\n Biometric unit #1 is unlocked.\n");
lockAcquired = FALSE;
}
if (sessionHandle != NULL)
{
WinBioCloseSession(sessionHandle);
sessionHandle = NULL;
}
wprintf_s(L"\n Press any key to exit...");
_getch();
return hr;
}
Requisitos
Cliente mínimo com suporte | Windows 7 [somente aplicativos da área de trabalho] |
Servidor mínimo com suporte | Windows Server 2008 R2 [somente aplicativos da área de trabalho] |
Plataforma de Destino | Windows |
Cabeçalho | winbio.h (inclua Winbio.h) |
Biblioteca | Winbio.lib |
DLL | Winbio.dll |