Bagikan melalui


PIBIO_SENSOR_DETACH_FN fungsi panggilan balik (winbio_adapter.h)

Dipanggil oleh Windows Biometric Framework segera sebelum adaptor sensor dihapus dari alur pemrosesan unit biometrik. Tujuan dari fungsi ini adalah untuk merilis sumber daya khusus adaptor yang terpasang pada alur.

Sintaks

PIBIO_SENSOR_DETACH_FN PibioSensorDetachFn;

HRESULT PibioSensorDetachFn(
  [in, out] PWINBIO_PIPELINE Pipeline
)
{...}

Parameter

[in, out] Pipeline

Arahkan ke struktur WINBIO_PIPELINE yang terkait dengan unit biometrik yang melakukan operasi.

Mengembalikan nilai

Jika fungsi berhasil, fungsi akan mengembalikan S_OK. Jika fungsi gagal, fungsi harus mengembalikan salah satu nilai HRESULT berikut untuk menunjukkan kesalahan.

Menampilkan kode Deskripsi
E_POINTER
Parameter Alur tidak boleh NULL.
WINBIO_E_INVALID_DEVICE_STATE
Bidang SensorContext dari struktur WINBIO_PIPELINE tidak boleh NULL.

Keterangan

Untuk mencegah kebocoran memori, implementasi fungsi SensorAdapterDetach Anda harus melepaskan struktur WINBIO_SENSOR_CONTEXT privat yang ditunjukkan oleh anggota SensorContext dari alur bersama dengan sumber daya lain yang melekat pada konteks sensor.

Jika bidang SensorContext di objek alur NULL ketika fungsi ini dipanggil, alur tidak diinisialisasi dengan benar dan Anda harus mengembalikan WINBIO_E_INVALID_DEVICE_STATE untuk memberi tahu Windows Biometric Framework tentang masalah tersebut.

Sebelum mengembalikan S_OK, fungsi ini harus mengatur bidang SensorContext dari struktur WINBIO_PIPELINE ke NULL.

Karena fungsi ini dipanggil setelah adaptor penyimpanan dan mesin dihapus dari alur, implementasi fungsi ini tidak boleh memanggil fungsi apa pun yang direferensikan oleh struktur WINBIO_ENGINE_INTERFACE atau WINBIO_STORAGE_INTERFACE yang diacu oleh anggota EngineInterface dan StorageInterface dari objek alur.

Karena anggota SensorHandle dari struktur WINBIO_PIPELINE akan berisi handel yang valid bahkan setelah SensorAdapterDetach dipanggil, Anda dapat menggunakan handel untuk mengakses perangkat sensor jika perlu. Fungsi ini tidak boleh menutup handel sensor. Windows biometric Framework akan melakukannya setelah SensorAdapterDetach kembali.

Contoh

Pseudocode berikut menunjukkan satu kemungkinan implementasi fungsi ini. Contoh tidak dikompilasi. Anda harus menyesuaikannya agar sesuai dengan tujuan Anda.

//////////////////////////////////////////////////////////////////////////////////////////
//
// SensorAdapterDetach
//
// Purpose:
//      Cancels all pending sensor operations.
//      
// Parameters:
//      Pipeline -  Pointer to a WINBIO_PIPELINE structure associated with 
//                  the biometric unit.
//
static HRESULT
WINAPI
SensorAdapterDetach(
    __inout PWINBIO_PIPELINE Pipeline
    )
{
    PWINBIO_SENSOR_CONTEXT sensorContext = NULL;

    // Verify that the Pipeline parameter is not NULL.
    if (!ARGUMENT_PRESENT(Pipeline))
    {
        hr = E_POINTER;
        goto cleanup;
    }
 
    // Validate the current state of the sensor.
    if (Pipeline->SensorContext == NULL)
    {
        return WINBIO_E_INVALID_DEVICE_STATE;
    }

    // Cancel any pending I/O to the device.
    SensorAdapterCancel(Pipeline);

    // Take ownership of the sensor context from the pipeline.
    sensorContext = (PWINBIO_SENSOR_CONTEXT)Pipeline->SensorContext;
    Pipeline->SensorContext = NULL;

    // Release any structures that remain attached to the context block. 
    // The following example assumes that your sensor adapter context 
    // contains pointers to a capture buffer and an attributes buffer.
    if (sensorContext->CaptureBuffer != NULL)
    {
        // Zero the capture buffer.
        SecureZeroMemory(
            sensorContext->CaptureBuffer,
            sensorContext->CaptureBufferSize);

        // Release the capture buffer.
        _AdapterRelease(sensorContext->CaptureBuffer);
        sensorContext->CaptureBuffer = NULL;
        sensorContext->CaptureBufferSize = 0;
    }

    if (sensorContext->AttributesBuffer != NULL)
    {
        // Zero the attributes buffer.
        SecureZeroMemory(
            sensorContext->AttributesBuffer,
            sensorContext->AttributesBufferSize);

        // Release the attributes buffer.
        _AdapterRelease(sensorContext->AttributesBuffer);
        sensorContext->AttributesBuffer = NULL;
        sensorContext->AttributesBufferSize = 0;
    }

    // Close the overlapped I/O event handle.
    CloseHandle(sensorContext->Overlapped.hEvent);

    // Release the context structure.
    _AdapterRelease(sensorContext);
    sensorContext = NULL;
   
    return S_OK;
}

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows 7 [hanya aplikasi desktop]
Server minimum yang didukung Windows Server 2008 R2 [hanya aplikasi desktop]
Target Platform Windows
Header winbio_adapter.h (termasuk Winbio_adapter.h)

Lihat juga

Fungsi Plug-in

SensorAdapterAttach

WINBIO_PIPELINE