blob: 580c5b41f29e118f4c0a1318f114076e7d498646 (
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
|
/*++
Copyright (c) 1990-2000 Microsoft Corporation
Module Name:
queue.h
Abstract:
This is a C version of a very simple sample driver that illustrates
how to use the driver framework and demonstrates best practices.
--*/
// Set max write length for testing
#define MAX_WRITE_LENGTH 1024*40
// Set timer period in ms
#define TIMER_PERIOD 1000*2
//
// This is the context that can be placed per queue
// and would contain per queue information.
//
typedef struct _QUEUE_CONTEXT {
// Here we allocate a buffer from a test write so it can be read back
WDFMEMORY WriteMemory;
// Timer DPC for this queue
WDFTIMER Timer;
// Virtual I/O
WDFREQUEST CurrentRequest;
NTSTATUS CurrentStatus;
} QUEUE_CONTEXT, *PQUEUE_CONTEXT;
WDF_DECLARE_CONTEXT_TYPE_WITH_NAME(QUEUE_CONTEXT, QueueGetContext)
NTSTATUS
EchoQueueInitialize(
WDFDEVICE hDevice
);
EVT_WDF_IO_QUEUE_CONTEXT_DESTROY_CALLBACK EchoEvtIoQueueContextDestroy;
//
// Events from the IoQueue object
//
EVT_WDF_REQUEST_CANCEL EchoEvtRequestCancel;
EVT_WDF_IO_QUEUE_IO_READ EchoEvtIoRead;
EVT_WDF_IO_QUEUE_IO_WRITE EchoEvtIoWrite;
NTSTATUS
EchoTimerCreate(
IN WDFTIMER* pTimer,
IN WDFQUEUE Queue
);
EVT_WDF_TIMER EchoEvtTimerFunc;
|