Partager via


PIBIO_SENSOR_EXPORT_SENSOR_DATA_FN fonction de rappel (winbio_adapter.h)

Appelé par l’infrastructure biométrique Windows pour récupérer une copie de l’exemple biométrique capturé le plus récemment mis en forme en tant que structure WINBIO_BIR standard.

Syntaxe

PIBIO_SENSOR_EXPORT_SENSOR_DATA_FN PibioSensorExportSensorDataFn;

HRESULT PibioSensorExportSensorDataFn(
  [in, out] PWINBIO_PIPELINE Pipeline,
  [out]     PWINBIO_BIR *SampleBuffer,
  [out]     PSIZE_T SampleSize
)
{...}

Paramètres

[in, out] Pipeline

Pointeur vers la structure WINBIO_PIPELINE associée à l’unité biométrique effectuant l’opération.

[out] SampleBuffer

Adresse d’une variable qui reçoit un pointeur vers une structure WINBIO_BIR qui contient l’exemple.

[out] SampleSize

Pointeur vers une variable qui reçoit la taille, en octets, de la mémoire tampon spécifiée par le paramètre SampleBuffer .

Valeur retournée

Si la fonction réussit, elle retourne S_OK. Si la fonction échoue, elle doit retourner l’une des valeurs HRESULT suivantes pour indiquer l’erreur.

Code de retour Description
E_OUTOFMEMORY
La mémoire disponible est insuffisante pour créer la structure WINBIO_BIR .
E_POINTER
Un paramètre de pointeur obligatoire est NULL.
WINBIO_E_INVALID_DEVICE_STATE
Le membre SensorContext de la structure WINBIO_PIPELINE pointée par l’argument Pipeline est NULL.
WINBIO_E_NO_CAPTURE_DATA
Il n’existe aucune donnée de capture.
E_NOTIMPL
Cette méthode n'est pas implémentée à l'heure actuelle.

Remarques

Vous devez allouer la mémoire tampon à retourner dans le paramètre SampleBuffer à partir du tas de processus à l’aide de la fonction HeapAlloc . Une fois créée, cette mémoire tampon devient la propriété du Framework biométrique Windows. Étant donné que l’infrastructure libère cette mémoire lorsque vous avez terminé de l’utiliser, votre implémentation de cette fonction ne doit pas tenter de libérer la mémoire tampon ou d’enregistrer un pointeur vers celle-ci. En n’enregistrant pas le pointeur, vous empêchez d’autres parties de l’adaptateur moteur de tenter d’utiliser la mémoire tampon après le retour de cette fonction.

Exemples

Le pseudocode suivant montre une implémentation possible de cette fonction. L’exemple ne se compile pas. Vous devez l’adapter à votre objectif.

//////////////////////////////////////////////////////////////////////////////////////////
//
// SensorAdapterExportSensorData
//
// Purpose:
//      Retrieves a copy of the most recently captured biometric sample.
//      
// Parameters:
//      Pipeline     -  Pointer to a WINBIO_PIPELINE structure associated with 
//                      the biometric unit.
//      SampleBuffer -  Address of a variable that receives a pointer to a 
//                      WINBIO_BIR structure that contains the sample.
//      SampleSize   -  Pointer to a variable that receives the size, in bytes, 
//                      of the buffer specified by the SampleBuffer parameter.
//
static HRESULT
WINAPI
SensorAdapterExportSensorData(
    __inout PWINBIO_PIPELINE Pipeline,
    __out PWINBIO_BIR *SampleBuffer,
    __out SIZE_T *SampleSize
    )
{
    PWINBIO_BIR sampleBuffer = NULL;

    // Verify that pointer arguments are not NULL.
    if (!ARGUMENT_PRESENT(Pipeline) ||
        !ARGUMENT_PRESENT(SampleBuffer) ||
        !ARGUMENT_PRESENT(SampleSize))
    {
        hr = E_POINTER;
        goto cleanup;
    }

    // Retrieve the context from the pipeline.
    PWINBIO_SENSOR_CONTEXT sensorContext = 
                 (PWINBIO_SENSOR_CONTEXT)Pipeline->SensorContext;

    // Verify the state of the pipeline.
    if (sensorContext == NULL)
    {
        return WINBIO_E_INVALID_DEVICE_STATE;
    }

    // Determine whether there is capture data to return.
    if (sensorContext->CaptureBuffer == NULL ||
        sensorContext->CaptureBuffer->CaptureData.Size == 0)
    {
        return WINBIO_E_NO_CAPTURE_DATA;
    }

    // Allocate a buffer, copy the data into it, and return
    // the buffer and buffer size to the caller.
    sampleBuffer = _AdapterAlloc(sensorContext->CaptureBuffer->CaptureData.Size);
    if (sampleBuffer == NULL)
    {
        return E_OUTOFMEMORY;
    }
    RtlCopyMemory(
        sampleBuffer, 
        sensorContext->CaptureBuffer->CaptureData.Data,
        sensorContext->CaptureBuffer->CaptureData.Size
        );

    *SampleBuffer = sampleBuffer;
    sampleBuffer = NULL;

    *SampleSize = Pipeline->SensorContext->CaptureBuffer->CaptureData.Size;  

    return S_OK;
}

Configuration requise

   
Client minimal pris en charge Windows 7 [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2008 R2 [applications de bureau uniquement]
Plateforme cible Windows
En-tête winbio_adapter.h (include Winbio_adapter.h)

Voir aussi

Fonctions de plug-in