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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
|
/*++
Copyright (c) 2003 Microsoft Corporation
Module Name:
plx.hpp
Abstract:
This module defines the PLX class and the
values neccessary for Window operation and IOCTL control.
Environment:
User Mode Win2k or Later
--*/
#pragma once
#include <windows.h>
#include <winioctl.h>
#include <setupapi.h>
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include "public.h"
//
// scanf_s is not available in the DDK build environment.
// So redefining it to use scanf
//
#if defined(DDKBUILD)
#define scanf_s scanf
#endif
#define DEFAULT_READ_BUFFER_SIZE 1024
#define DEFAULT_WRITE_BUFFER_SIZE 1024
#define DEFAULT_THREAD_COUNT 2
typedef struct _THREAD_CONTEXT
{
HANDLE hDevice;
BOOL quite;
ULONG BufferSize;
PUCHAR Buffer;
} THREAD_CONTEXT, *PTHREAD_CONTEXT;
enum {
MENU_TEST,
READ_TEST,
WRITE_TEST,
READ_WRITE_TEST,
THREAD_TEST,
DEVICE_PATH,
SET_SIZE,
COMPARE_BUFFERS,
DISPLAY_BUFFERS,
THREAD_TIME,
SINGLE_TRANSFER_TOGGLE,
COMMAND_LINE,
MENU_MAX
} COMMAND;
class PLX
{
public:
PLX();
~PLX();
BOOL
Initialize();
void
Menu();
BOOL
GetDevicePath();
BOOL
ReadTest();
BOOL
WriteTest();
BOOL
ReadWriteTest();
BOOL
CompareReadWriteBuffers();
BOOL
SetReadBufferSize(ULONG size);
BOOL
SetWriteBufferSize(ULONG size);
BOOL
SetBufferSizes(ULONG size);
BOOL
SendSingleTransferIoctl(BOOL* Toggle);
void
DisplayReadWriteBuffers();
BOOL
ThreadedReadWriteTest();
void
SetThreadLifeTime(ULONG time);
BOOL Quite;
ULONG Status;
private:
BOOL
GetDeviceHandle();
HDEVINFO hDevInfo;
PSP_DEVICE_INTERFACE_DETAIL_DATA pDeviceInterfaceDetail;
HANDLE hDevice;
ULONG ReadBufferSize;
ULONG WriteBufferSize;
_Field_size_bytes_(ReadBufferSize) PUCHAR ReadBuffer;
_Field_size_bytes_(WriteBufferSize) PUCHAR WriteBuffer;
_Field_size_(ThreadCount) HANDLE *Threads;
_Field_size_(ThreadCount) PTHREAD_CONTEXT Contexts;
int ProcessorCount;
int ThreadCount;
CRITICAL_SECTION CriticalSection;
BOOL CSInitialized;
ULONG ThreadTimer;
BOOL console;
};
|