summaryrefslogtreecommitdiff
path: root/biometrics/driver/IoQueue.h
blob: 1a68416b161e016c7d2588729fedc9417f9d7f5e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
/*++

    THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
    ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
    THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
    PARTICULAR PURPOSE.

    Copyright (c) Microsoft Corporation. All rights reserved

Module Name:

    IoQueue.h

Abstract:

    This file defines the queue callback interface.

Environment:

    Windows User-Mode Driver Framework (WUDF)

--*/

#pragma once

//
// Queue Callback Object.
//

class CBiometricIoQueue :
    public CComObjectRootEx<CComMultiThreadModel>,
    public IQueueCallbackDeviceIoControl
{

public:

    DECLARE_NOT_AGGREGATABLE(CBiometricIoQueue)

    BEGIN_COM_MAP(CBiometricIoQueue)
        COM_INTERFACE_ENTRY(IQueueCallbackDeviceIoControl)
    END_COM_MAP()

    CBiometricIoQueue() : 
        m_FxQueue(NULL),
        m_BiometricDevice(NULL)
    {
    }

    ~CBiometricIoQueue()
    {
        // empty
    }

    HRESULT
    Initialize(
        _In_ IWDFDevice *FxDevice,
        _In_ CBiometricDevice *BiometricDevice
        );

    static 
    HRESULT 
    CreateInstanceAndInitialize( 
        _In_ IWDFDevice *FxDevice,
        _In_ CBiometricDevice *BiometricDevice,
        _Out_ CBiometricIoQueue**    Queue
        );

    HRESULT
    Configure(
        VOID
        )
    {
        return S_OK;
    }

    VOID
    Start(
        )
    {
        m_FxQueue->Start();
    }

    VOID
    StopSynchronously(
        )
    {
        m_FxQueue->StopSynchronously();
    }

    //
    // Wdf Callbacks
    //

    //    
    // IQueueCallbackDeviceIoControl
    //
    virtual
    VOID
    STDMETHODCALLTYPE
    OnDeviceIoControl( 
        _In_ IWDFIoQueue *pWdfQueue,
        _In_ IWDFIoRequest *pWdfRequest,
        _In_ ULONG ControlCode,
        _In_ SIZE_T InputBufferSizeInBytes,
        _In_ SIZE_T OutputBufferSizeInBytes
        );

//
// Private member variables.
//
private:

    //
    // Weak reference to framework queue object.
    //
    IWDFIoQueue *                       m_FxQueue;

    //
    // Pointer to device class.
    //
    CBiometricDevice *                  m_BiometricDevice;

};