23#include <winpr/winpr.h>
24#include <winpr/wtypes.h>
25#include <winpr/handle.h>
28WINPR_PRAGMA_DIAG_IGNORED_RESERVED_IDENTIFIER
41 ULONG_PTR InternalHigh;
56 ULONG_PTR lpCompletionKey;
59 DWORD dwNumberOfBytesTransferred;
68 WINPR_API BOOL GetOverlappedResult(HANDLE hFile,
LPOVERLAPPED lpOverlapped,
69 LPDWORD lpNumberOfBytesTransferred, BOOL bWait);
72 WINPR_API BOOL GetOverlappedResultEx(HANDLE hFile,
LPOVERLAPPED lpOverlapped,
73 LPDWORD lpNumberOfBytesTransferred, DWORD dwMilliseconds,
77 WINPR_API BOOL DeviceIoControl(HANDLE hDevice, DWORD dwIoControlCode, LPVOID lpInBuffer,
78 DWORD nInBufferSize, LPVOID lpOutBuffer, DWORD nOutBufferSize,
81 WINPR_ATTR_MALLOC(CloseHandle, 1)
82 WINPR_API HANDLE CreateIoCompletionPort(HANDLE FileHandle, HANDLE ExistingCompletionPort,
83 ULONG_PTR CompletionKey,
84 DWORD NumberOfConcurrentThreads);
87 WINPR_API BOOL GetQueuedCompletionStatus(HANDLE CompletionPort,
88 LPDWORD lpNumberOfBytesTransferred,
90 DWORD dwMilliseconds);
93 WINPR_API BOOL GetQueuedCompletionStatusEx(HANDLE CompletionPort,
95 ULONG ulCount, PULONG ulNumEntriesRemoved,
96 DWORD dwMilliseconds, BOOL fAlertable);
99 WINPR_API BOOL PostQueuedCompletionStatus(HANDLE CompletionPort,
100 DWORD dwNumberOfBytesTransferred,
104 WINPR_API BOOL CancelIo(HANDLE hFile);
107 WINPR_API BOOL CancelIoEx(HANDLE hFile,
LPOVERLAPPED lpOverlapped);
110 WINPR_API BOOL CancelSynchronousIo(HANDLE hThread);
116#define DEVICE_TYPE ULONG
118#define FILE_DEVICE_BEEP 0x00000001
119#define FILE_DEVICE_CD_ROM 0x00000002
120#define FILE_DEVICE_CD_ROM_FILE_SYSTEM 0x00000003
121#define FILE_DEVICE_CONTROLLER 0x00000004
122#define FILE_DEVICE_DATALINK 0x00000005
123#define FILE_DEVICE_DFS 0x00000006
124#define FILE_DEVICE_DISK 0x00000007
125#define FILE_DEVICE_DISK_FILE_SYSTEM 0x00000008
126#define FILE_DEVICE_FILE_SYSTEM 0x00000009
127#define FILE_DEVICE_INPORT_PORT 0x0000000a
128#define FILE_DEVICE_KEYBOARD 0x0000000b
129#define FILE_DEVICE_MAILSLOT 0x0000000c
130#define FILE_DEVICE_MIDI_IN 0x0000000d
131#define FILE_DEVICE_MIDI_OUT 0x0000000e
132#define FILE_DEVICE_MOUSE 0x0000000f
133#define FILE_DEVICE_MULTI_UNC_PROVIDER 0x00000010
134#define FILE_DEVICE_NAMED_PIPE 0x00000011
135#define FILE_DEVICE_NETWORK 0x00000012
136#define FILE_DEVICE_NETWORK_BROWSER 0x00000013
137#define FILE_DEVICE_NETWORK_FILE_SYSTEM 0x00000014
138#define FILE_DEVICE_NULL 0x00000015
139#define FILE_DEVICE_PARALLEL_PORT 0x00000016
140#define FILE_DEVICE_PHYSICAL_NETCARD 0x00000017
141#define FILE_DEVICE_PRINTER 0x00000018
142#define FILE_DEVICE_SCANNER 0x00000019
143#define FILE_DEVICE_SERIAL_MOUSE_PORT 0x0000001a
144#define FILE_DEVICE_SERIAL_PORT 0x0000001b
145#define FILE_DEVICE_SCREEN 0x0000001c
146#define FILE_DEVICE_SOUND 0x0000001d
147#define FILE_DEVICE_STREAMS 0x0000001e
148#define FILE_DEVICE_TAPE 0x0000001f
149#define FILE_DEVICE_TAPE_FILE_SYSTEM 0x00000020
150#define FILE_DEVICE_TRANSPORT 0x00000021
151#define FILE_DEVICE_UNKNOWN 0x00000022
152#define FILE_DEVICE_VIDEO 0x00000023
153#define FILE_DEVICE_VIRTUAL_DISK 0x00000024
154#define FILE_DEVICE_WAVE_IN 0x00000025
155#define FILE_DEVICE_WAVE_OUT 0x00000026
156#define FILE_DEVICE_8042_PORT 0x00000027
157#define FILE_DEVICE_NETWORK_REDIRECTOR 0x00000028
158#define FILE_DEVICE_BATTERY 0x00000029
159#define FILE_DEVICE_BUS_EXTENDER 0x0000002a
160#define FILE_DEVICE_MODEM 0x0000002b
161#define FILE_DEVICE_VDM 0x0000002c
162#define FILE_DEVICE_MASS_STORAGE 0x0000002d
163#define FILE_DEVICE_SMB 0x0000002e
164#define FILE_DEVICE_KS 0x0000002f
165#define FILE_DEVICE_CHANGER 0x00000030
166#define FILE_DEVICE_SMARTCARD 0x00000031
167#define FILE_DEVICE_ACPI 0x00000032
168#define FILE_DEVICE_DVD 0x00000033
169#define FILE_DEVICE_FULLSCREEN_VIDEO 0x00000034
170#define FILE_DEVICE_DFS_FILE_SYSTEM 0x00000035
171#define FILE_DEVICE_DFS_VOLUME 0x00000036
172#define FILE_DEVICE_SERENUM 0x00000037
173#define FILE_DEVICE_TERMSRV 0x00000038
174#define FILE_DEVICE_KSEC 0x00000039
175#define FILE_DEVICE_FIPS 0x0000003A
176#define FILE_DEVICE_INFINIBAND 0x0000003B
177#define FILE_DEVICE_VMBUS 0x0000003E
178#define FILE_DEVICE_CRYPT_PROVIDER 0x0000003F
179#define FILE_DEVICE_WPD 0x00000040
180#define FILE_DEVICE_BLUETOOTH 0x00000041
181#define FILE_DEVICE_MT_COMPOSITE 0x00000042
182#define FILE_DEVICE_MT_TRANSPORT 0x00000043
183#define FILE_DEVICE_BIOMETRIC 0x00000044
184#define FILE_DEVICE_PMI 0x00000045
186#define CTL_CODE(DeviceType, Function, Method, Access) \
187 (((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method))
189#define DEVICE_TYPE_FROM_CTL_CODE(ctrlCode) (((DWORD)(ctrlCode & 0xFFFF0000)) >> 16)
191#define METHOD_FROM_CTL_CODE(ctrlCode) ((DWORD)(ctrlCode & 3))
193#define METHOD_BUFFERED 0
194#define METHOD_IN_DIRECT 1
195#define METHOD_OUT_DIRECT 2
196#define METHOD_NEITHER 3
198#define FILE_ANY_ACCESS 0
199#define FILE_SPECIAL_ACCESS (FILE_ANY_ACCESS)
200#define FILE_READ_ACCESS (0x0001)
201#define FILE_WRITE_ACCESS (0x0002)
207typedef HANDLE PDRIVER_OBJECT_EX;
208typedef HANDLE PDEVICE_OBJECT_EX;
212WINPR_API NTSTATUS _IoCreateDeviceEx(PDRIVER_OBJECT_EX DriverObject, ULONG DeviceExtensionSize,
214 ULONG DeviceCharacteristics, BOOLEAN Exclusive,
215 PDEVICE_OBJECT_EX* DeviceObject);
218WINPR_API VOID _IoDeleteDeviceEx(PDEVICE_OBJECT_EX DeviceObject);
230 WINPR_API BOOL GetOverlappedResult(HANDLE hFile,
LPOVERLAPPED lpOverlapped,
231 LPDWORD lpNumberOfBytesTransferred, BOOL bWait);
234 WINPR_API BOOL DeviceIoControl(HANDLE hDevice, DWORD dwIoControlCode, LPVOID lpInBuffer,
235 DWORD nInBufferSize, LPVOID lpOutBuffer, DWORD nOutBufferSize,
239 WINPR_API HANDLE CreateIoCompletionPort(HANDLE FileHandle, HANDLE ExistingCompletionPort,
240 ULONG_PTR CompletionKey,
241 DWORD NumberOfConcurrentThreads);
244 WINPR_API BOOL GetQueuedCompletionStatus(HANDLE CompletionPort,
245 LPDWORD lpNumberOfBytesTransferred,
247 DWORD dwMilliseconds);
250 WINPR_API BOOL GetQueuedCompletionStatusEx(HANDLE CompletionPort,
252 ULONG ulCount, PULONG ulNumEntriesRemoved,
253 DWORD dwMilliseconds, BOOL fAlertable);
256 WINPR_API BOOL PostQueuedCompletionStatus(HANDLE CompletionPort,
257 DWORD dwNumberOfBytesTransferred,
261 WINPR_API BOOL CancelIo(HANDLE hFile);
264 WINPR_API BOOL CancelSynchronousIo(HANDLE hThread);
276#define ACCESS_FROM_CTL_CODE(ctrlCode) ((DWORD)((ctrlCode >> 14) & 0x3))
277#define FUNCTION_FROM_CTL_CODE(ctrlCode) ((DWORD)((ctrlCode >> 2) & 0xFFF))