194c8d0367a1ea350172a6747fc3881ad7632ae8
[reactos.git] / reactos / include / ddk / iodef.h
1 #ifndef __INCLUDE_DDK_IODEF_H
2 #define __INCLUDE_DDK_IODEF_H
3
4 typedef enum _IO_QUERY_DEVICE_DESCRIPTION
5 {
6 IoQueryDeviceIdentifier = 0,
7 IoQueryDeviceConfigurationData,
8 IoQueryDeviceComponentInformation,
9 IoQueryDeviceDataFormatMaximum,
10 } IO_QUERY_DEVICE_DESCRIPTION, *PIO_QUERY_DEVICE_DESCRIPTION;
11
12 typedef enum _CONFIGURATION_TYPE
13 {
14 DiskController,
15 ParallelController,
16 MaximumType,
17 } CONFIGURATION_TYPE, *PCONFIGURATION_TYPE;
18
19 typedef enum _CM_RESOURCE_TYPE
20 {
21 CmResourceTypePort = 1,
22 CmResourceTypeInterrupt,
23 CmResourceTypeMemory,
24 CmResourceTypeDma,
25 CmResourceTypeDeviceSpecific,
26 CmResourceTypeMaximum,
27 } CM_RESOURCE_TYPE;
28
29 typedef enum _CM_SHARE_DISPOSITION
30 {
31 CmResourceShareDeviceExclusive = 1,
32 CmResourceShareDriverExclusive,
33 CmResourceShareShared,
34 CmResourceShareMaximum,
35 } CM_SHARE_DISPOSITION;
36
37 enum
38 {
39 CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE,
40 CM_RESOURCE_INTERRUPT_LATCHED,
41 };
42
43 enum
44 {
45 CM_RESOURCE_PORT_MEMORY,
46 CM_RESOURCE_PORT_IO,
47 };
48
49 /*
50 * PURPOSE: Irp flags
51 */
52 enum
53 {
54 /*
55 * Read any data from the actual backing media
56 */
57 IRP_NOCACHE,
58
59 /*
60 * The I/O operation is performing paging
61 */
62 IRP_PAGING_IO,
63
64 /*
65 * The IRP is for a mount operation
66 */
67 IRP_MOUNT_COMPLETION,
68
69 /*
70 * The API expects synchronous behaviour
71 */
72 IRP_SYNCHRONOUS_API,
73
74 /*
75 * The IRP is associated with a larger operation
76 */
77 IRP_ASSOCIATED_IRP,
78
79 /*
80 * The AssociatedIrp.SystemBuffer field is valid
81 */
82 IRP_BUFFERED_IO,
83
84 /*
85 * The system buffer was allocated from pool and should be deallocated
86 * by the I/O manager
87 */
88 IRP_DEALLOCATE_BUFFER,
89
90 /*
91 * The IRP is for an input operation
92 */
93 IRP_INPUT_OPERATION,
94
95 /*
96 * The paging operation should complete synchronously
97 */
98 IRP_SYNCHRONOUS_PAGING_IO,
99
100 /*
101 * The IRP represents a filesystem create operation
102 */
103 IRP_CREATE_OPERATION,
104
105 /*
106 * The IRP represents a filesystem read operation
107 */
108 IRP_READ_OPERATION,
109
110 /*
111 * The IRP represents a filesystem write operation
112 */
113 IRP_WRITE_OPERATION,
114
115 /*
116 * The IRP represents a filesystem close operation
117 */
118 IRP_CLOSE_OPERATION,
119
120 /*
121 * Asynchronous behavior is advised but not required
122 */
123 IRP_DEFER_IO_COMPLETION,
124 };
125
126 /*
127 * I/O operation flags
128 */
129 enum
130 {
131 /*
132 * Force an access check even if opened in kernel mode
133 */
134 SL_FORCE_ACCESS_CHECK,
135
136 /*
137 * The file being opened is a paging file
138 */
139 SL_OPEN_PAGING_FILE,
140
141 SL_OPEN_TARGET_DIRECTORY,
142
143 SL_CASE_SENSITIVE,
144
145 SL_KEY_SPECIFIED,
146
147 SL_OVERRIDE_VERIFY_VOLUME,
148
149 SL_WRITE_THROUGH,
150
151 SL_FT_SEQUENTIAL_WRITE,
152
153 SL_FAIL_IMMEDIATELY,
154
155 SL_EXCLUSIVE_LOCK,
156
157 SL_RESTART_SCAN,
158
159 SL_RETURN_SINGLE_ENTRY,
160
161 SL_INDEX_SPECIFIED,
162
163 SL_WATCH_TREE,
164
165 SL_ALLOW_RAW_MOUNT,
166
167 SL_PENDING_RETURNED,
168
169 };
170
171 enum
172 {
173 SL_INVOKE_ON_SUCCESS = 1,
174 SL_INVOKE_ON_ERROR = 2,
175 SL_INVOKE_ON_CANCEL = 4,
176 };
177
178 /*
179 * Possible flags for the device object flags
180 */
181 enum
182 {
183 DO_BUFFERED_IO = 0x1,
184 DO_DIRECT_IO = 0x2,
185 };
186
187 /*
188 * Possible device types
189 */
190 enum
191 {
192 /*
193 * Standard define types
194 */
195 FILE_DEVICE_BEEP,
196 FILE_DEVICE_CDROM,
197 FILE_DEVICE_CONTROLLER,
198 FILE_DEVICE_DISK,
199 FILE_DEVICE_INPORT_PORT,
200 FILE_DEVICE_KEYBOARD,
201 FILE_DEVICE_MIDI_IN,
202 FILE_DEVICE_MIDI_OUT,
203 FILE_DEVICE_MOUSE,
204 FILE_DEVICE_NULL,
205 FILE_DEVICE_PARALLEL_PORT,
206 FILE_DEVICE_PRINTER,
207 FILE_DEVICE_SCANNER,
208 FILE_DEVICE_SERIAL_MOUSE_PORT,
209 FILE_DEVICE_SERIAL_PORT,
210 FILE_DEVICE_SCREEN,
211 FILE_DEVICE_TAPE,
212 FILE_DEVICE_UNKNOWN,
213 FILE_DEVICE_VIDEO,
214 FILE_DEVICE_VIRTUAL_DISK,
215 FILE_DEVICE_WAVE_IN,
216 FILE_DEVICE_WAVE_OUT,
217 FILE_DEVICE_8042_PORT,
218 FILE_DEVICE_FILE_SYSTEM,
219
220 /*
221 * Values beyond this are reserved for ISVs
222 */
223 FILE_DEVICE_FIRST_FREE = 32768
224 };
225
226
227
228 /*
229 * Possible device characteristics
230 */
231 enum
232 {
233 FILE_REMOVABLE_MEDIA = 0x1,
234 FILE_READ_ONLY_DEVICE = 0x2,
235 FILE_FLOPPY_DISKETTE = 0x4,
236 FILE_WRITE_ONCE_MEDIA = 0x8,
237 FILE_REMOTE_DEVICE = 0x10,
238 };
239
240 /*
241 * PURPOSE: Bus types
242 */
243 enum
244 {
245 Internal,
246 Isa,
247 MicroChannel,
248 TurboChannel,
249 PCIBus,
250 MaximumInterfaceType,
251 };
252
253 /*
254 * FIXME: These are not in the correct order
255 */
256 enum
257 {
258 IRP_MJ_CREATE,
259 IRP_MJ_CREATE_NAMED_PIPE,
260 IRP_MJ_CLOSE,
261 IRP_MJ_READ,
262 IRP_MJ_WRITE,
263 IRP_MJ_QUERY_INFORMATION,
264 IRP_MJ_SET_INFORMATION,
265 IRP_MJ_QUERY_EA,
266 IRP_MJ_SET_EA,
267 IRP_MJ_FLUSH_BUFFERS,
268 IRP_MJ_QUERY_VOLUME_INFORMATION,
269 IRP_MJ_SET_VOLUME_INFORMATION,
270 IRP_MJ_DIRECTORY_CONTROL,
271 IRP_MJ_FILE_SYSTEM_CONTROL,
272 IRP_MJ_DEVICE_CONTROL,
273 IRP_MJ_INTERNAL_DEVICE_CONTROL,
274 IRP_MJ_SHUTDOWN,
275 IRP_MJ_LOCK_CONTROL,
276 IRP_MJ_CLEANUP,
277 IRP_MJ_CREATE_MAILSLOT,
278 IRP_MJ_QUERY_SECURITY,
279 IRP_MJ_SET_SECURITY,
280 IRP_MJ_QUERY_POWER,
281 IRP_MJ_SET_POWER,
282 IRP_MJ_DEVICE_CHANGE,
283 IRP_MJ_QUERY_QUOTA,
284 IRP_MJ_SET_QUOTA,
285 IRP_MJ_PNP_POWER,
286 IRP_MJ_MAXIMUM_FUNCTION,
287 };
288
289 enum
290 /*
291 * PURPOSE: Details about the result of a file open or create
292 */
293 {
294 FILE_CREATED,
295 // FILE_OPENED,
296 FILE_OVERWRITTEN,
297 FILE_SUPERSEDED,
298 FILE_EXISTS,
299 FILE_DOES_NOT_EXIST,
300 };
301
302 #define IRP_MN_USER_FS_REQUEST 0x00
303 #define IRP_MN_MOUNT_VOLUME 0x01
304 #define IRP_MN_VERIFY_VOLUME 0x02
305 #define IRP_MN_LOAD_FILE_SYSTEM 0x03
306
307 #endif