d7c662b2898e7cdceee0eff0f1db9f9ef84b2f46
[reactos.git] / reactos / include / ddk / defines.h
1 /* GENERAL DEFINITIONS ****************************************************/
2
3 #include <internal/hal/irq.h>
4
5
6
7 /*
8 * PURPOSE: Number of a thread priority levels
9 */
10 #define NR_PRIORITY_LEVELS (32)
11
12 /*
13 * PURPOSE: Type of queue to insert a work item in
14 */
15 enum
16 {
17 CriticalWorkQueue,
18 DelayedWorkQueue,
19 HyperCriticalWorkQueue,
20 };
21
22 /*
23 * Types of memory to allocate
24 */
25 enum
26 {
27 NonPagedPool,
28 NonPagedPoolMustSucceed,
29 NonPagedPoolCacheAligned,
30 NonPagedPoolCacheAlignedMustS,
31 PagedPool,
32 PagedPoolCacheAligned,
33 };
34
35 /*
36 * PURPOSE: Irp flags
37 */
38 enum
39 {
40 /*
41 * Read any data from the actual backing media
42 */
43 IRP_NOCACHE,
44
45 /*
46 * The I/O operation is performing paging
47 */
48 IRP_PAGING_IO,
49
50 /*
51 * The IRP is for a mount operation
52 */
53 IRP_MOUNT_COMPLETION,
54
55 /*
56 * The API expects synchronous behaviour
57 */
58 IRP_SYNCHRONOUS_API,
59
60 /*
61 * The IRP is associated with a larger operation
62 */
63 IRP_ASSOCIATED_IRP,
64
65 /*
66 * The AssociatedIrp.SystemBuffer field is valid
67 */
68 IRP_BUFFERED_IO,
69
70 /*
71 * The system buffer was allocated from pool and should be deallocated
72 * by the I/O manager
73 */
74 IRP_DEALLOCATE_BUFFER,
75
76 /*
77 * The IRP is for an input operation
78 */
79 IRP_INPUT_OPERATION,
80
81 /*
82 * The paging operation should complete synchronously
83 */
84 IRP_SYNCHRONOUS_PAGING_IO,
85
86 /*
87 * The IRP represents a filesystem create operation
88 */
89 IRP_CREATE_OPERATION,
90
91 /*
92 * The IRP represents a filesystem read operation
93 */
94 IRP_READ_OPERATION,
95
96 /*
97 * The IRP represents a filesystem write operation
98 */
99 IRP_WRITE_OPERATION,
100
101 /*
102 * The IRP represents a filesystem close operation
103 */
104 IRP_CLOSE_OPERATION,
105
106 /*
107 * Asynchronous behavior is advised but not required
108 */
109 IRP_DEFER_IO_COMPLETION,
110 };
111
112 /*
113 * I/O operation flags
114 */
115 enum
116 {
117 /*
118 * Force an access check even if opened in kernel mode
119 */
120 SL_FORCE_ACCESS_CHECK,
121
122 /*
123 * The file being opened is a paging file
124 */
125 SL_OPEN_PAGING_FILE,
126
127 SL_OPEN_TARGET_DIRECTORY,
128
129 SL_CASE_SENSITIVE,
130
131 SL_KEY_SPECIFIED,
132
133 SL_OVERRIDE_VERIFY_VOLUME,
134
135 SL_WRITE_THROUGH,
136
137 SL_FT_SEQUENTIAL_WRITE,
138
139 SL_FAIL_IMMEDIATELY,
140
141 SL_EXCLUSIVE_LOCK,
142
143 SL_RESTART_SCAN,
144
145 SL_RETURN_SINGLE_ENTRY,
146
147 SL_INDEX_SPECIFIED,
148
149 SL_WATCH_TREE,
150
151 SL_ALLOW_RAW_MOUNT,
152 };
153
154 /*
155 * Possible flags for the device object flags
156 */
157 enum
158 {
159 DO_BUFFERED_IO = 0x1,
160 DO_DIRECT_IO = 0x2,
161 };
162
163 /*
164 * Possible status codes
165 * FIXME: These may not be the actual values used by NT
166 */
167 enum
168 {
169 STATUS_SUCCESS,
170 STATUS_INSUFFICIENT_RESOURCES,
171 STATUS_OBJECT_NAME_EXISTS,
172 STATUS_OBJECT_NAME_COLLISION,
173 // STATUS_DATATYPE_MISALIGNMENT,
174 STATUS_CTL_FILE_NOT_SUPPORTED,
175 // STATUS_ACCESS_VIOLATION,
176 STATUS_PORT_ALREADY_SET,
177 STATUS_SECTION_NOT_IMAGE,
178 STATUS_BAD_WORKING_SET_LIMIT,
179 STATUS_INCOMPATIBLE_FILE_MAP,
180 STATUS_HANDLE_NOT_WAITABLE,
181 STATUS_PORT_DISCONNECTED,
182 STATUS_NOT_LOCKED,
183 STATUS_NOT_MAPPED_VIEW,
184 STATUS_UNABLE_TO_FREE_VM,
185 STATUS_UNABLE_TO_DELETE_SECTION,
186 STATUS_MORE_PROCESSING_REQUIRED,
187 STATUS_INVALID_CID,
188 STATUS_BAD_INITIAL_STACK,
189 STATUS_INVALID_VOLUME_LABEL,
190 STATUS_SECTION_NOT_EXTENDED,
191 STATUS_NOT_MAPPED_DATA,
192 STATUS_INFO_LENGTH_MISMATCH,
193 STATUS_INVALID_INFO_CLASS,
194 STATUS_SUSPEND_COUNT_EXCEEDED,
195 STATUS_NOTIFY_ENUM_DIR,
196 STATUS_REGISTRY_RECOVERED,
197 STATUS_REGISTRY_IO_FAILED,
198 STATUS_KEY_DELETED,
199 STATUS_NO_LOG_SPACE,
200 STATUS_KEY_HAS_CHILDREN,
201 STATUS_CHILD_MUST_BE_VOLATILE,
202 STATUS_REGISTRY_CORRUPT,
203 STATUS_DLL_NOT_FOUND,
204 STATUS_DLL_INIT_FAILED,
205 STATUS_ORDINAL_NOT_FOUND,
206 STATUS_ENTRYPOINT_NOT_FOUND,
207 // STATUS_PENDING,
208 STATUS_MORE_ENTRIES,
209 // STATUS_INTEGER_OVERFLOW,
210 STATUS_BUFFER_OVERFLOW,
211 STATUS_NO_MORE_FILES,
212 STATUS_NO_INHERITANCE,
213 STATUS_NO_MORE_EAS,
214 STATUS_NO_MORE_ENTRIES,
215 STATUS_GUIDS_EXHAUSTED,
216 STATUS_AGENTS_EXHAUSTED,
217 STATUS_UNSUCCESSFUL,
218 STATUS_NOT_IMPLEMENTED,
219 STATUS_ILLEGAL_FUNCTION,
220 // STATUS_IN_PAGE_ERROR,
221 STATUS_PAGEFILE_QUOTA,
222 STATUS_COMMITMENT_LIMIT,
223 STATUS_SECTION_TOO_BIG,
224 RPC_NT_SS_IN_NULL_CONTEXT,
225 RPC_NT_INVALID_BINDING,
226 // STATUS_INVALID_HANDLE,
227 STATUS_OBJECT_FILE_MISMATCH,
228 STATUS_FILE_CLOSED,
229 STATUS_INVALID_PORT_HANDLE,
230 STATUS_NOT_COMMITTED,
231 STATUS_INVALID_PARAMETER,
232 STATUS_INVALID_PARAMETER_1,
233 STATUS_INVALID_PARAMETER_2,
234 STATUS_INVALID_PARAMETER_3,
235 STATUS_INVALID_PARAMETER_4,
236 STATUS_INVALID_PARAMETER_5,
237 STATUS_INVALID_PARAMETER_6,
238 STATUS_INVALID_PARAMETER_7,
239 STATUS_INVALID_PARAMETER_8,
240 STATUS_INVALID_PARAMETER_9,
241 STATUS_INVALID_PARAMETER_10,
242 STATUS_INVALID_PARAMETER_11,
243 STATUS_INVALID_PARAMETER_12,
244 STATUS_INVALID_PARAMETER_MAX,
245 STATUS_INVALID_PAGE_PROTECTION,
246 STATUS_RESOURCE_DATA_NOT_FOUND,
247 STATUS_RESOURCE_TYPE_NOT_FOUND,
248 STATUS_RESOURCE_NAME_NOT_FOUND,
249 STATUS_RESOURCE_LANG_NOT_FOUND,
250 STATUS_NO_SUCH_DEVICE,
251 STATUS_NO_SUCH_FILE,
252 STATUS_INVALID_DEVICE_REQUEST,
253 STATUS_END_OF_FILE,
254 STATUS_FILE_FORCED_CLOSED,
255 STATUS_WRONG_VOLUME,
256 STATUS_NO_MEDIA,
257 STATUS_NO_MEDIA_IN_DEVICE,
258 STATUS_NONEXISTENT_SECTOR,
259 STATUS_WORKING_SET_QUOTA,
260 // STATUS_NO_MEMORY,
261 STATUS_CONFLICTING_ADDRESS,
262 STATUS_INVALID_SYSTEM_SERVICE,
263 STATUS_THREAD_IS_TERMINATING,
264 STATUS_PROCESS_IS_TERMINATING,
265 STATUS_INVALID_LOCK_SEQUENCE,
266 STATUS_INVALID_VIEW_SIZE,
267 STATUS_ALREADY_COMMITTED,
268 STATUS_ACCESS_DENIED,
269 STATUS_FILE_IS_A_DIRECTORY,
270 STATUS_CANNOT_DELETE,
271 STATUS_INVALID_COMPUTER_NAME,
272 STATUS_FILE_DELETED,
273 STATUS_DELETE_PENDING,
274 STATUS_PORT_CONNECTION_REFUSED,
275 STATUS_NO_SUCH_PRIVILEGE,
276 STATUS_PRIVILEGE_NOT_HELD,
277 STATUS_CANNOT_IMPERSONATE,
278 STATUS_LOGON_FAILURE,
279 STATUS_ACCOUNT_RESTRICTION,
280 STATUS_INVALID_LOGON_HOURS,
281 STATUS_INVALID_WORKSTATION,
282 STATUS_BUFFER_TOO_SMALL,
283 STATUS_UNABLE_TO_DECOMMIT_VM,
284 STATUS_DISK_CORRUPT_ERROR,
285 STATUS_OBJECT_NAME_INVALID,
286 STATUS_OBJECT_NAME_NOT_FOUND,
287 // STATUS_OBJECT_NAME_COLLISION,
288 STATUS_OBJECT_PATH_INVALID,
289 STATUS_OBJECT_PATH_NOT_FOUND,
290 STATUS_DFS_EXIT_PATH_FOUND,
291 STATUS_OBJECT_PATH_SYNTAX_BAD,
292 STATUS_DATA_OVERRUN,
293 STATUS_DATA_LATE_ERROR,
294 STATUS_DATA_ERROR,
295 STATUS_CRC_ERROR,
296 STATUS_SHARING_VIOLATION,
297 STATUS_QUOTA_EXCEEDED,
298 STATUS_MUTANT_NOT_OWNED,
299 STATUS_SEMAPHORE_LIMIT_EXCEEDED,
300 STATUS_DISK_FULL,
301 STATUS_LOCK_NOT_GRANTED,
302 };
303
304 /*
305 * Possible device types
306 */
307 enum
308 {
309 /*
310 * Standard define types
311 */
312 FILE_DEVICE_BEEP,
313 FILE_DEVICE_CDROM,
314 FILE_DEVICE_CONTROLLER,
315 FILE_DEVICE_DISK,
316 FILE_DEVICE_INPORT_PORT,
317 FILE_DEVICE_KEYBOARD,
318 FILE_DEVICE_MIDI_IN,
319 FILE_DEVICE_MIDI_OUT,
320 FILE_DEVICE_MOUSE,
321 FILE_DEVICE_NULL,
322 FILE_DEVICE_PARALLEL_PORT,
323 FILE_DEVICE_PRINTER,
324 FILE_DEVICE_SCANNER,
325 FILE_DEVICE_SERIAL_MOUSE_PORT,
326 FILE_DEVICE_SERIAL_PORT,
327 FILE_DEVICE_SCREEN,
328 FILE_DEVICE_TAPE,
329 FILE_DEVICE_UNKNOWN,
330 FILE_DEVICE_VIDEO,
331 FILE_DEVICE_VIRTUAL_DISK,
332 FILE_DEVICE_WAVE_IN,
333 FILE_DEVICE_WAVE_OUT,
334 FILE_DEVICE_8042_PORT,
335
336 /*
337 * Values beyond this are reserved for ISVs
338 */
339 FILE_DEVICE_FIRST_FREE = 32768
340 };
341
342
343
344 /*
345 * Possible device characteristics
346 */
347 enum
348 {
349 FILE_REMOVABLE_MEDIA = 0x1,
350 FILE_READ_ONLY_DEVICE = 0x2,
351 FILE_FLOPPY_DISKETTE = 0x4,
352 FILE_WRITE_ONCE_MEDIA = 0x8,
353 FILE_REMOTE_DEVICE = 0x10,
354 };
355
356 /*
357 * PURPOSE: Bus types
358 */
359 enum
360 {
361 Internal,
362 Isa,
363 MicroChannel,
364 TurboChannel,
365 PCIBus,
366 MaximumInterfaceType,
367 };
368
369 /*
370 * This is a list of bug check types (not MS's)
371 */
372 enum
373 {
374 KBUG_NONE,
375 KBUG_ORPHANED_IRP,
376 KBUG_IO_STACK_OVERFLOW,
377 KBUG_OUT_OF_MEMORY,
378 KBUG_POOL_FREE_LIST_CORRUPT,
379
380 /*
381 * These are well known but the actual value is unknown
382 */
383 NO_PAGES_AVAILABLE,
384
385 /*
386 * These are well known (MS) bug types
387 * (Reference: NT Insider 1997 - http://www.osr.com)
388 */
389 IRQL_NOT_LESS_OR_EQUAL = 0xa,
390 KMODE_EXCEPTION_NOT_HANDLED = 0x1e,
391 UNEXPECTED_KERNEL_MODE_TRAP = 0x7f,
392 PAGE_FAULT_IN_NON_PAGED_AREA = 0x50,
393 };
394
395 /*
396 * PURPOSE: Object attributes
397 */
398 enum
399 {
400 OBJ_INHERIT = 0x1,
401 OBJ_PERMANENT = 0x2,
402 OBJ_EXCLUSIVE = 0x4,
403 OBJ_CASE_INSENSITIVE = 0x8,
404 OBJ_OPENIF = 0x10,
405 };
406
407 /*
408 * PURPOSE: DPC priorities
409 */
410 enum
411 {
412 High,
413 Medium,
414 Low,
415 };
416
417 /*
418 * PURPOSE: Timer types
419 */
420 enum
421 {
422 NotificationTimer,
423 SynchronizationTimer,
424 };
425
426 /*
427 * PURPOSE: Some drivers use these
428 */
429 #define IN
430 #define OUT
431 #define OPTIONAL
432
433 /*
434 * PURPOSE: Power IRP minor function numbers
435 */
436 enum
437 {
438 IRP_MN_QUERY_POWER,
439 IRP_MN_SET_POWER,
440 IRP_MN_WAIT_WAKE,
441 IRP_MN_QUERY_CAPABILITIES,
442 IRP_MN_POWER_SEQUENCE,
443 };
444
445 /*
446 * FIXME: These are not in the correct order
447 */
448 enum
449 {
450 IRP_MJ_CREATE,
451 IRP_MJ_CREATE_NAMED_PIPE,
452 IRP_MJ_CLOSE,
453 IRP_MJ_READ,
454 IRP_MJ_WRITE,
455 IRP_MJ_QUERY_INFORMATION,
456 IRP_MJ_SET_INFORMATION,
457 IRP_MJ_QUERY_EA,
458 IRP_MJ_SET_EA,
459 IRP_MJ_FLUSH_BUFFERS,
460 IRP_MJ_QUERY_VOLUME_INFORMATION,
461 IRP_MJ_SET_VOLUME_INFORMATION,
462 IRP_MJ_DIRECTORY_CONTROL,
463 IRP_MJ_FILE_SYSTEM_CONTROL,
464 IRP_MJ_DEVICE_CONTROL,
465 IRP_MJ_INTERNAL_DEVICE_CONTROL,
466 IRP_MJ_SHUTDOWN,
467 IRP_MJ_LOCK_CONTROL,
468 IRP_MJ_CLEANUP,
469 IRP_MJ_CREATE_MAILSLOT,
470 IRP_MJ_QUERY_SECURITY,
471 IRP_MJ_SET_SECURITY,
472 IRP_MJ_QUERY_POWER,
473 IRP_MJ_SET_POWER,
474 IRP_MJ_DEVICE_CHANGE,
475 IRP_MJ_QUERY_QUOTA,
476 IRP_MJ_SET_QUOTA,
477 IRP_MJ_PNP_POWER,
478 IRP_MJ_MAXIMUM_FUNCTION,
479 };
480
481 /*
482 * PURPOSE: Used all over
483 */
484 enum
485 {
486 KernelMode,
487 UserMode,
488 };
489
490 /*
491 * PURPOSE: Arguments to MmProbeAndLockPages
492 */
493 enum
494 {
495 IoReadAccess,
496 IoWriteAccess,
497 IoModifyAccess,
498 };
499
500 #define MAXIMUM_VOLUME_LABEL_LENGTH (32)
501
502 /*
503 * IRQ levels
504 */
505 enum
506 {
507 PASSIVE_LEVEL,
508
509 /*
510 * Which order for these (only DISPATCH_LEVEL is important for now)
511 */
512 APC_LEVEL,
513 DISPATCH_LEVEL,
514
515 /*
516 * Above here are device specific IRQ levels
517 */
518 FIRST_DEVICE_SPECIFIC_LEVEL,
519 HIGH_LEVEL = FIRST_DEVICE_SPECIFIC_LEVEL + NR_DEVICE_SPECIFIC_LEVELS,
520 };
521