FreeRDP
Loading...
Searching...
No Matches
include/winpr/io.h
1
20#ifndef WINPR_IO_H
21#define WINPR_IO_H
22
23#include <winpr/winpr.h>
24#include <winpr/wtypes.h>
25#include <winpr/handle.h>
26
27WINPR_PRAGMA_DIAG_PUSH
28WINPR_PRAGMA_DIAG_IGNORED_RESERVED_IDENTIFIER
29
30#ifdef _WIN32
31
32#include <winioctl.h>
33
34#else
35
36#include <winpr/nt.h>
37
38typedef struct
39{
40 ULONG_PTR Internal;
41 ULONG_PTR InternalHigh;
42 union
43 {
44 struct
45 {
46 DWORD Offset;
47 DWORD OffsetHigh;
48 } DUMMYSTRUCTNAME;
49 PVOID Pointer;
50 } DUMMYUNIONNAME;
51 HANDLE hEvent;
53
54typedef struct
55{
56 ULONG_PTR lpCompletionKey;
57 LPOVERLAPPED lpOverlapped;
58 ULONG_PTR Internal;
59 DWORD dwNumberOfBytesTransferred;
61
62#ifdef __cplusplus
63extern "C"
64{
65#endif
66
67 WINPR_API BOOL GetOverlappedResult(HANDLE hFile, LPOVERLAPPED lpOverlapped,
68 LPDWORD lpNumberOfBytesTransferred, BOOL bWait);
69
70 WINPR_API BOOL GetOverlappedResultEx(HANDLE hFile, LPOVERLAPPED lpOverlapped,
71 LPDWORD lpNumberOfBytesTransferred, DWORD dwMilliseconds,
72 BOOL bAlertable);
73
74 WINPR_API BOOL DeviceIoControl(HANDLE hDevice, DWORD dwIoControlCode, LPVOID lpInBuffer,
75 DWORD nInBufferSize, LPVOID lpOutBuffer, DWORD nOutBufferSize,
76 LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped);
77
78 WINPR_ATTR_MALLOC(CloseHandle, 1)
79 WINPR_ATTR_NODISCARD
80 WINPR_API HANDLE CreateIoCompletionPort(HANDLE FileHandle, HANDLE ExistingCompletionPort,
81 ULONG_PTR CompletionKey,
82 DWORD NumberOfConcurrentThreads);
83
84 WINPR_API BOOL GetQueuedCompletionStatus(HANDLE CompletionPort,
85 LPDWORD lpNumberOfBytesTransferred,
86 PULONG_PTR lpCompletionKey, LPOVERLAPPED* lpOverlapped,
87 DWORD dwMilliseconds);
88
89 WINPR_API BOOL GetQueuedCompletionStatusEx(HANDLE CompletionPort,
90 LPOVERLAPPED_ENTRY lpCompletionPortEntries,
91 ULONG ulCount, PULONG ulNumEntriesRemoved,
92 DWORD dwMilliseconds, BOOL fAlertable);
93
94 WINPR_API BOOL PostQueuedCompletionStatus(HANDLE CompletionPort,
95 DWORD dwNumberOfBytesTransferred,
96 ULONG_PTR dwCompletionKey, LPOVERLAPPED lpOverlapped);
97
98 WINPR_API BOOL CancelIo(HANDLE hFile);
99
100 WINPR_API BOOL CancelIoEx(HANDLE hFile, LPOVERLAPPED lpOverlapped);
101
102 WINPR_API BOOL CancelSynchronousIo(HANDLE hThread);
103
104#ifdef __cplusplus
105}
106#endif
107
108#define DEVICE_TYPE ULONG
109
110#define FILE_DEVICE_BEEP 0x00000001
111#define FILE_DEVICE_CD_ROM 0x00000002
112#define FILE_DEVICE_CD_ROM_FILE_SYSTEM 0x00000003
113#define FILE_DEVICE_CONTROLLER 0x00000004
114#define FILE_DEVICE_DATALINK 0x00000005
115#define FILE_DEVICE_DFS 0x00000006
116#define FILE_DEVICE_DISK 0x00000007
117#define FILE_DEVICE_DISK_FILE_SYSTEM 0x00000008
118#define FILE_DEVICE_FILE_SYSTEM 0x00000009
119#define FILE_DEVICE_INPORT_PORT 0x0000000a
120#define FILE_DEVICE_KEYBOARD 0x0000000b
121#define FILE_DEVICE_MAILSLOT 0x0000000c
122#define FILE_DEVICE_MIDI_IN 0x0000000d
123#define FILE_DEVICE_MIDI_OUT 0x0000000e
124#define FILE_DEVICE_MOUSE 0x0000000f
125#define FILE_DEVICE_MULTI_UNC_PROVIDER 0x00000010
126#define FILE_DEVICE_NAMED_PIPE 0x00000011
127#define FILE_DEVICE_NETWORK 0x00000012
128#define FILE_DEVICE_NETWORK_BROWSER 0x00000013
129#define FILE_DEVICE_NETWORK_FILE_SYSTEM 0x00000014
130#define FILE_DEVICE_NULL 0x00000015
131#define FILE_DEVICE_PARALLEL_PORT 0x00000016
132#define FILE_DEVICE_PHYSICAL_NETCARD 0x00000017
133#define FILE_DEVICE_PRINTER 0x00000018
134#define FILE_DEVICE_SCANNER 0x00000019
135#define FILE_DEVICE_SERIAL_MOUSE_PORT 0x0000001a
136#define FILE_DEVICE_SERIAL_PORT 0x0000001b
137#define FILE_DEVICE_SCREEN 0x0000001c
138#define FILE_DEVICE_SOUND 0x0000001d
139#define FILE_DEVICE_STREAMS 0x0000001e
140#define FILE_DEVICE_TAPE 0x0000001f
141#define FILE_DEVICE_TAPE_FILE_SYSTEM 0x00000020
142#define FILE_DEVICE_TRANSPORT 0x00000021
143#define FILE_DEVICE_UNKNOWN 0x00000022
144#define FILE_DEVICE_VIDEO 0x00000023
145#define FILE_DEVICE_VIRTUAL_DISK 0x00000024
146#define FILE_DEVICE_WAVE_IN 0x00000025
147#define FILE_DEVICE_WAVE_OUT 0x00000026
148#define FILE_DEVICE_8042_PORT 0x00000027
149#define FILE_DEVICE_NETWORK_REDIRECTOR 0x00000028
150#define FILE_DEVICE_BATTERY 0x00000029
151#define FILE_DEVICE_BUS_EXTENDER 0x0000002a
152#define FILE_DEVICE_MODEM 0x0000002b
153#define FILE_DEVICE_VDM 0x0000002c
154#define FILE_DEVICE_MASS_STORAGE 0x0000002d
155#define FILE_DEVICE_SMB 0x0000002e
156#define FILE_DEVICE_KS 0x0000002f
157#define FILE_DEVICE_CHANGER 0x00000030
158#define FILE_DEVICE_SMARTCARD 0x00000031
159#define FILE_DEVICE_ACPI 0x00000032
160#define FILE_DEVICE_DVD 0x00000033
161#define FILE_DEVICE_FULLSCREEN_VIDEO 0x00000034
162#define FILE_DEVICE_DFS_FILE_SYSTEM 0x00000035
163#define FILE_DEVICE_DFS_VOLUME 0x00000036
164#define FILE_DEVICE_SERENUM 0x00000037
165#define FILE_DEVICE_TERMSRV 0x00000038
166#define FILE_DEVICE_KSEC 0x00000039
167#define FILE_DEVICE_FIPS 0x0000003A
168#define FILE_DEVICE_INFINIBAND 0x0000003B
169#define FILE_DEVICE_VMBUS 0x0000003E
170#define FILE_DEVICE_CRYPT_PROVIDER 0x0000003F
171#define FILE_DEVICE_WPD 0x00000040
172#define FILE_DEVICE_BLUETOOTH 0x00000041
173#define FILE_DEVICE_MT_COMPOSITE 0x00000042
174#define FILE_DEVICE_MT_TRANSPORT 0x00000043
175#define FILE_DEVICE_BIOMETRIC 0x00000044
176#define FILE_DEVICE_PMI 0x00000045
177
178#define CTL_CODE(DeviceType, Function, Method, Access) \
179 (((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method))
180
181#define DEVICE_TYPE_FROM_CTL_CODE(ctrlCode) (((DWORD)(ctrlCode & 0xFFFF0000)) >> 16)
182
183#define METHOD_FROM_CTL_CODE(ctrlCode) ((DWORD)(ctrlCode & 3))
184
185#define METHOD_BUFFERED 0
186#define METHOD_IN_DIRECT 1
187#define METHOD_OUT_DIRECT 2
188#define METHOD_NEITHER 3
189
190#define FILE_ANY_ACCESS 0
191#define FILE_SPECIAL_ACCESS (FILE_ANY_ACCESS)
192#define FILE_READ_ACCESS (0x0001)
193#define FILE_WRITE_ACCESS (0x0002)
194
195/*
196 * WinPR I/O Manager Custom API
197 */
198
199typedef HANDLE PDRIVER_OBJECT_EX;
200typedef HANDLE PDEVICE_OBJECT_EX;
201
202// NOLINTNEXTLINE(bugprone-reserved-identifier,cert-dcl37-c,cert-dcl51-cpp)
203WINPR_API NTSTATUS _IoCreateDeviceEx(PDRIVER_OBJECT_EX DriverObject, ULONG DeviceExtensionSize,
204 PUNICODE_STRING DeviceName, DEVICE_TYPE DeviceType,
205 ULONG DeviceCharacteristics, BOOLEAN Exclusive,
206 PDEVICE_OBJECT_EX* DeviceObject);
207
208// NOLINTNEXTLINE(bugprone-reserved-identifier,cert-dcl37-c,cert-dcl51-cpp)
209WINPR_API VOID _IoDeleteDeviceEx(PDEVICE_OBJECT_EX DeviceObject);
210
211#endif
212
213#ifdef _UWP
214
215#ifdef __cplusplus
216extern "C"
217{
218#endif
219
220 WINPR_API BOOL GetOverlappedResult(HANDLE hFile, LPOVERLAPPED lpOverlapped,
221 LPDWORD lpNumberOfBytesTransferred, BOOL bWait);
222
223 WINPR_API BOOL DeviceIoControl(HANDLE hDevice, DWORD dwIoControlCode, LPVOID lpInBuffer,
224 DWORD nInBufferSize, LPVOID lpOutBuffer, DWORD nOutBufferSize,
225 LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped);
226
227 WINPR_API HANDLE CreateIoCompletionPort(HANDLE FileHandle, HANDLE ExistingCompletionPort,
228 ULONG_PTR CompletionKey,
229 DWORD NumberOfConcurrentThreads);
230
231 WINPR_API BOOL GetQueuedCompletionStatus(HANDLE CompletionPort,
232 LPDWORD lpNumberOfBytesTransferred,
233 PULONG_PTR lpCompletionKey, LPOVERLAPPED* lpOverlapped,
234 DWORD dwMilliseconds);
235
236 WINPR_API BOOL GetQueuedCompletionStatusEx(HANDLE CompletionPort,
237 LPOVERLAPPED_ENTRY lpCompletionPortEntries,
238 ULONG ulCount, PULONG ulNumEntriesRemoved,
239 DWORD dwMilliseconds, BOOL fAlertable);
240
241 WINPR_API BOOL PostQueuedCompletionStatus(HANDLE CompletionPort,
242 DWORD dwNumberOfBytesTransferred,
243 ULONG_PTR dwCompletionKey, LPOVERLAPPED lpOverlapped);
244
245 WINPR_API BOOL CancelIo(HANDLE hFile);
246
247 WINPR_API BOOL CancelSynchronousIo(HANDLE hThread);
248
249#ifdef __cplusplus
250}
251#endif
252
253#endif
254
259#define ACCESS_FROM_CTL_CODE(ctrlCode) ((DWORD)((ctrlCode >> 14) & 0x3))
260#define FUNCTION_FROM_CTL_CODE(ctrlCode) ((DWORD)((ctrlCode >> 2) & 0xFFF))
261
262WINPR_PRAGMA_DIAG_POP
263
264#endif /* WINPR_IO_H */