blob: 4c19fc392c357cd9e5eede5d557b00e26b4da526 (
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) Microsoft Corporation. All rights reserved.
#pragma once
#define MAX_RX_BUFFER_SIZE 65535
#if ((NETADAPTER_VERSION_MAJOR == 2) && (NETADAPTER_VERSION_MINOR >= 6))
static const size_t PREALLOCATED_BUFFERS_COUNT = 128;
struct MemoryBuffer
{
NET_MEMORY_ID
MemoryId;
BYTE
VirtualAddress[MAX_RX_BUFFER_SIZE];
};
class Memory
{
public:
NTSTATUS
Initialize(
NETMEMORYCOLLECTION MemoryCollection,
size_t BufferSize
);
MemoryBuffer*
PopAvailableBuffer(
void
);
void
ReturnBuffer(
MemoryBuffer* Buffer
);
void
ReleaseAllMappings(
void
);
private:
NETMEMORYCOLLECTION
m_memoryCollection;
MemoryBuffer
m_buffers[PREALLOCATED_BUFFERS_COUNT];
MemoryBuffer*
m_buffersReadyToUse[PREALLOCATED_BUFFERS_COUNT];
size_t
m_lastBufferToUse;
WDFSPINLOCK
m_spinLock{};
};
WDF_DECLARE_CONTEXT_TYPE_WITH_NAME(Memory, GetMemoryFromHandle);
#endif //NETCX 2.6 only
|