4 * Windows Device Driver Kit
6 * This file is part of the w32api package.
9 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
11 * THIS SOFTWARE IS NOT COPYRIGHTED
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
16 * This code is distributed in the hope that it will be useful but
17 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
18 * DISCLAIMED. This includes but is not limited to warranties of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
26 /* Helper macro to enable gcc's extension. */
27 #ifndef __GNU_EXTENSION
29 #define __GNU_EXTENSION __extension__
31 #define __GNU_EXTENSION
46 #define NTHALAPI DECLSPEC_IMPORT
51 /* Pseudo modifiers for parameters */
59 #define RESTRICTED_POINTER
62 #define POINTER_ALIGNMENT DECLSPEC_ALIGN(8)
64 #define POINTER_ALIGNMENT
67 #define DECLSPEC_ADDRSAFE
69 #ifdef NONAMELESSUNION
70 # define _DDK_DUMMYUNION_MEMBER(name) DUMMYUNIONNAME.name
71 # define _DDK_DUMMYUNION_N_MEMBER(n, name) DUMMYUNIONNAME##n.name
73 # define _DDK_DUMMYUNION_MEMBER(name) name
74 # define _DDK_DUMMYUNION_N_MEMBER(n, name) name
78 ** Forward declarations
90 struct _DEVICE_OBJECT
;
91 struct _DRIVER_OBJECT
;
92 struct _IO_STATUS_BLOCK
;
93 struct _DEVICE_DESCRIPTION
;
94 struct _SCATTER_GATHER_LIST
;
95 struct _DRIVE_LAYOUT_INFORMATION
;
96 struct _DRIVE_LAYOUT_INFORMATION_EX
;
97 struct _LOADER_PARAMETER_BLOCK
;
102 /* FIXME: Unknown definitions */
103 struct _SET_PARTITION_INFORMATION_EX
;
104 typedef ULONG WAIT_TYPE
;
107 typedef HANDLE TRACEHANDLE
;
108 typedef PVOID PWMILIB_CONTEXT
;
109 typedef ULONG LOGICAL
;
113 ** WmiLib specific structure
117 IrpProcessed
, // Irp was processed and possibly completed
118 IrpNotCompleted
, // Irp was process and NOT completed
119 IrpNotWmi
, // Irp is not a WMI irp
120 IrpForward
// Irp is wmi irp, but targeted at another device object
121 } SYSCTL_IRP_DISPOSITION
, *PSYSCTL_IRP_DISPOSITION
;
124 ** Routines specific to this DDK
126 #define NtCurrentThread() ( (HANDLE)(LONG_PTR) -2 )
132 typedef UCHAR KIRQL
, *PKIRQL
;
143 struct _COMPRESSED_DATA_INFO
;
146 #define NtCurrentProcess() ( (HANDLE)(LONG_PTR) -1 )
147 #define ZwCurrentProcess() NtCurrentProcess()
148 #define NtCurrentThread() ( (HANDLE)(LONG_PTR) -2 )
149 #define ZwCurrentThread() NtCurrentThread()
152 #define KIP0PCRADDRESS 0xffdff000
156 #define KERNEL_STACK_SIZE 12288
157 #define KERNEL_LARGE_STACK_SIZE 61440
158 #define KERNEL_LARGE_STACK_COMMIT 12288
160 #define EXCEPTION_READ_FAULT 0
161 #define EXCEPTION_WRITE_FAULT 1
162 #define EXCEPTION_EXECUTE_FAULT 8
164 #define DPFLTR_ERROR_LEVEL 0
165 #define DPFLTR_WARNING_LEVEL 1
166 #define DPFLTR_TRACE_LEVEL 2
167 #define DPFLTR_INFO_LEVEL 3
168 #define DPFLTR_MASK 0x80000000
170 typedef enum _DPFLTR_TYPE
172 DPFLTR_SYSTEM_ID
= 0,
177 DPFLTR_CRASHDUMP_ID
= 5,
178 DPFLTR_CDAUDIO_ID
= 6,
180 DPFLTR_CLASSPNP_ID
= 8,
182 DPFLTR_REDBOOK_ID
= 10,
183 DPFLTR_STORPROP_ID
= 11,
184 DPFLTR_SCSIPORT_ID
= 12,
185 DPFLTR_SCSIMINIPORT_ID
= 13,
186 DPFLTR_CONFIG_ID
= 14,
187 DPFLTR_I8042PRT_ID
= 15,
188 DPFLTR_SERMOUSE_ID
= 16,
189 DPFLTR_LSERMOUS_ID
= 17,
190 DPFLTR_KBDHID_ID
= 18,
191 DPFLTR_MOUHID_ID
= 19,
192 DPFLTR_KBDCLASS_ID
= 20,
193 DPFLTR_MOUCLASS_ID
= 21,
194 DPFLTR_TWOTRACK_ID
= 22,
195 DPFLTR_WMILIB_ID
= 23,
198 DPFLTR_HALIA64_ID
= 26,
199 DPFLTR_VIDEO_ID
= 27,
200 DPFLTR_SVCHOST_ID
= 28,
201 DPFLTR_VIDEOPRT_ID
= 29,
202 DPFLTR_TCPIP_ID
= 30,
203 DPFLTR_DMSYNTH_ID
= 31,
204 DPFLTR_NTOSPNP_ID
= 32,
205 DPFLTR_FASTFAT_ID
= 33,
206 DPFLTR_SAMSS_ID
= 34,
207 DPFLTR_PNPMGR_ID
= 35,
208 DPFLTR_NETAPI_ID
= 36,
209 DPFLTR_SCSERVER_ID
= 37,
210 DPFLTR_SCCLIENT_ID
= 38,
211 DPFLTR_SERIAL_ID
= 39,
212 DPFLTR_SERENUM_ID
= 40,
214 DPFLTR_BOOTOK_ID
= 42,
215 DPFLTR_BOOTVRFY_ID
= 43,
216 DPFLTR_RPCPROXY_ID
= 44,
217 DPFLTR_AUTOCHK_ID
= 45,
218 DPFLTR_DCOMSS_ID
= 46,
219 DPFLTR_UNIMODEM_ID
= 47,
221 DPFLTR_FLTMGR_ID
= 49,
222 DPFLTR_WMICORE_ID
= 50,
223 DPFLTR_BURNENG_ID
= 51,
224 DPFLTR_IMAPI_ID
= 52,
226 DPFLTR_FUSION_ID
= 54,
227 DPFLTR_IDLETASK_ID
= 55,
228 DPFLTR_SOFTPCI_ID
= 56,
230 DPFLTR_MCHGR_ID
= 58,
232 DPFLTR_PCIIDE_ID
= 60,
233 DPFLTR_FLOPPY_ID
= 61,
235 DPFLTR_TERMSRV_ID
= 63,
236 DPFLTR_W32TIME_ID
= 64,
237 DPFLTR_PREFETCHER_ID
= 65,
238 DPFLTR_RSFILTER_ID
= 66,
239 DPFLTR_FCPORT_ID
= 67,
242 DPFLTR_DMCONFIG_ID
= 70,
243 DPFLTR_DMADMIN_ID
= 71,
244 DPFLTR_WSOCKTRANSPORT_ID
= 72,
246 DPFLTR_PNPMEM_ID
= 74,
247 DPFLTR_PROCESSOR_ID
= 75,
248 DPFLTR_DMSERVER_ID
= 76,
250 DPFLTR_INFINIBAND_ID
= 78,
251 DPFLTR_IHVDRIVER_ID
= 79,
252 DPFLTR_IHVVIDEO_ID
= 80,
253 DPFLTR_IHVAUDIO_ID
= 81,
254 DPFLTR_IHVNETWORK_ID
= 82,
255 DPFLTR_IHVSTREAMING_ID
= 83,
256 DPFLTR_IHVBUS_ID
= 84,
258 DPFLTR_RTLTHREADPOOL_ID
= 86,
260 DPFLTR_TCPIP6_ID
= 88,
261 DPFLTR_ISAPNP_ID
= 89,
263 DPFLTR_STORPORT_ID
= 91,
264 DPFLTR_STORMINIPORT_ID
= 92,
265 DPFLTR_PRINTSPOOLER_ID
= 93,
267 DPFLTR_VDSBAS_ID
= 95,
268 DPFLTR_VDSDYNDR_ID
= 96,
269 DPFLTR_VDSUTIL_ID
= 97,
270 DPFLTR_DFRGIFC_ID
= 98,
271 DPFLTR_DEFAULT_ID
= 99,
273 DPFLTR_DFSC_ID
= 101,
274 DPFLTR_WOW64_ID
= 102,
278 #define MAXIMUM_PROCESSORS 32
280 #define MAXIMUM_WAIT_OBJECTS 64
282 #define EX_RUNDOWN_ACTIVE 0x1
283 #define EX_RUNDOWN_COUNT_SHIFT 0x1
284 #define EX_RUNDOWN_COUNT_INC (1 << EX_RUNDOWN_COUNT_SHIFT)
286 #define METHOD_BUFFERED 0
287 #define METHOD_IN_DIRECT 1
288 #define METHOD_OUT_DIRECT 2
289 #define METHOD_NEITHER 3
291 #define LOW_PRIORITY 0
292 #define LOW_REALTIME_PRIORITY 16
293 #define HIGH_PRIORITY 31
294 #define MAXIMUM_PRIORITY 32
296 #define MAXIMUM_SUSPEND_COUNT MAXCHAR
298 #define MAXIMUM_FILENAME_LENGTH 256
300 #define FILE_SUPERSEDED 0x00000000
301 #define FILE_OPENED 0x00000001
302 #define FILE_CREATED 0x00000002
303 #define FILE_OVERWRITTEN 0x00000003
304 #define FILE_EXISTS 0x00000004
305 #define FILE_DOES_NOT_EXIST 0x00000005
307 #define FILE_USE_FILE_POINTER_POSITION 0xfffffffe
308 #define FILE_WRITE_TO_END_OF_FILE 0xffffffff
310 /* also in winnt.h */
311 #define FILE_LIST_DIRECTORY 0x00000001
312 #define FILE_READ_DATA 0x00000001
313 #define FILE_ADD_FILE 0x00000002
314 #define FILE_WRITE_DATA 0x00000002
315 #define FILE_ADD_SUBDIRECTORY 0x00000004
316 #define FILE_APPEND_DATA 0x00000004
317 #define FILE_CREATE_PIPE_INSTANCE 0x00000004
318 #define FILE_READ_EA 0x00000008
319 #define FILE_WRITE_EA 0x00000010
320 #define FILE_EXECUTE 0x00000020
321 #define FILE_TRAVERSE 0x00000020
322 #define FILE_DELETE_CHILD 0x00000040
323 #define FILE_READ_ATTRIBUTES 0x00000080
324 #define FILE_WRITE_ATTRIBUTES 0x00000100
326 #define FILE_SHARE_READ 0x00000001
327 #define FILE_SHARE_WRITE 0x00000002
328 #define FILE_SHARE_DELETE 0x00000004
329 #define FILE_SHARE_VALID_FLAGS 0x00000007
331 #define FILE_ATTRIBUTE_READONLY 0x00000001
332 #define FILE_ATTRIBUTE_HIDDEN 0x00000002
333 #define FILE_ATTRIBUTE_SYSTEM 0x00000004
334 #define FILE_ATTRIBUTE_DIRECTORY 0x00000010
335 #define FILE_ATTRIBUTE_ARCHIVE 0x00000020
336 #define FILE_ATTRIBUTE_DEVICE 0x00000040
337 #define FILE_ATTRIBUTE_NORMAL 0x00000080
338 #define FILE_ATTRIBUTE_TEMPORARY 0x00000100
339 #define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200
340 #define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400
341 #define FILE_ATTRIBUTE_COMPRESSED 0x00000800
342 #define FILE_ATTRIBUTE_OFFLINE 0x00001000
343 #define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000
344 #define FILE_ATTRIBUTE_ENCRYPTED 0x00004000
346 #define FILE_ATTRIBUTE_VALID_FLAGS 0x00007fb7
347 #define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x000031a7
349 #define FILE_COPY_STRUCTURED_STORAGE 0x00000041
350 #define FILE_STRUCTURED_STORAGE 0x00000441
352 #define FILE_VALID_OPTION_FLAGS 0x00ffffff
353 #define FILE_VALID_PIPE_OPTION_FLAGS 0x00000032
354 #define FILE_VALID_MAILSLOT_OPTION_FLAGS 0x00000032
355 #define FILE_VALID_SET_FLAGS 0x00000036
357 #define FILE_SUPERSEDE 0x00000000
358 #define FILE_OPEN 0x00000001
359 #define FILE_CREATE 0x00000002
360 #define FILE_OPEN_IF 0x00000003
361 #define FILE_OVERWRITE 0x00000004
362 #define FILE_OVERWRITE_IF 0x00000005
363 #define FILE_MAXIMUM_DISPOSITION 0x00000005
365 #define FILE_DIRECTORY_FILE 0x00000001
366 #define FILE_WRITE_THROUGH 0x00000002
367 #define FILE_SEQUENTIAL_ONLY 0x00000004
368 #define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008
369 #define FILE_SYNCHRONOUS_IO_ALERT 0x00000010
370 #define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020
371 #define FILE_NON_DIRECTORY_FILE 0x00000040
372 #define FILE_CREATE_TREE_CONNECTION 0x00000080
373 #define FILE_COMPLETE_IF_OPLOCKED 0x00000100
374 #define FILE_NO_EA_KNOWLEDGE 0x00000200
375 #define FILE_OPEN_FOR_RECOVERY 0x00000400
376 #define FILE_RANDOM_ACCESS 0x00000800
377 #define FILE_DELETE_ON_CLOSE 0x00001000
378 #define FILE_OPEN_BY_FILE_ID 0x00002000
379 #define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000
380 #define FILE_NO_COMPRESSION 0x00008000
381 #define FILE_RESERVE_OPFILTER 0x00100000
382 #define FILE_OPEN_REPARSE_POINT 0x00200000
383 #define FILE_OPEN_NO_RECALL 0x00400000
384 #define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000
386 #define FILE_ANY_ACCESS 0x00000000
387 #define FILE_SPECIAL_ACCESS FILE_ANY_ACCESS
388 #define FILE_READ_ACCESS 0x00000001
389 #define FILE_WRITE_ACCESS 0x00000002
391 #define FILE_ALL_ACCESS \
392 (STANDARD_RIGHTS_REQUIRED | \
396 #define FILE_GENERIC_EXECUTE \
397 (STANDARD_RIGHTS_EXECUTE | \
398 FILE_READ_ATTRIBUTES | \
402 #define FILE_GENERIC_READ \
403 (STANDARD_RIGHTS_READ | \
405 FILE_READ_ATTRIBUTES | \
409 #define FILE_GENERIC_WRITE \
410 (STANDARD_RIGHTS_WRITE | \
412 FILE_WRITE_ATTRIBUTES | \
418 #define OBJ_NAME_PATH_SEPARATOR ((WCHAR)L'\\')
420 #define OBJECT_TYPE_CREATE (0x0001)
421 #define OBJECT_TYPE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
423 #define DIRECTORY_QUERY (0x0001)
424 #define DIRECTORY_TRAVERSE (0x0002)
425 #define DIRECTORY_CREATE_OBJECT (0x0004)
426 #define DIRECTORY_CREATE_SUBDIRECTORY (0x0008)
427 #define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF)
429 #define EVENT_QUERY_STATE (0x0001)
430 #define EVENT_MODIFY_STATE (0x0002)
431 #define EVENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3)
433 #define SEMAPHORE_QUERY_STATE (0x0001)
434 #define SEMAPHORE_MODIFY_STATE (0x0002)
435 #define SEMAPHORE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3)
437 #define THREAD_ALERT (0x0004)
439 #define FM_LOCK_BIT (0x1)
440 #define FM_LOCK_BIT_V (0x0)
441 #define FM_LOCK_WAITER_WOKEN (0x2)
442 #define FM_LOCK_WAITER_INC (0x4)
444 /* Exported object types */
445 extern POBJECT_TYPE NTSYSAPI ExDesktopObjectType
;
446 extern POBJECT_TYPE NTSYSAPI ExEventObjectType
;
447 extern POBJECT_TYPE NTSYSAPI ExSemaphoreObjectType
;
448 extern POBJECT_TYPE NTSYSAPI ExWindowStationObjectType
;
449 extern ULONG NTSYSAPI IoDeviceHandlerObjectSize
;
450 extern POBJECT_TYPE NTSYSAPI IoDeviceHandlerObjectType
;
451 extern POBJECT_TYPE NTSYSAPI IoDeviceObjectType
;
452 extern POBJECT_TYPE NTSYSAPI IoDriverObjectType
;
453 extern POBJECT_TYPE NTSYSAPI IoFileObjectType
;
454 extern POBJECT_TYPE NTSYSAPI PsThreadType
;
455 extern POBJECT_TYPE NTSYSAPI LpcPortObjectType
;
456 extern POBJECT_TYPE NTSYSAPI SeTokenObjectType
;
457 extern POBJECT_TYPE NTSYSAPI PsProcessType
;
459 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
460 extern volatile CCHAR NTSYSAPI KeNumberProcessors
;
462 #if (NTDDI_VERSION >= NTDDI_WINXP)
463 extern CCHAR NTSYSAPI KeNumberProcessors
;
465 //extern PCCHAR KeNumberProcessors;
466 extern NTSYSAPI CCHAR KeNumberProcessors
; //FIXME: Note to Alex: I won't fix this atm, since I prefer to discuss this with you first.
470 #define PROCESSOR_FEATURE_MAX 64
471 #define MAX_WOW64_SHARED_ENTRIES 16
473 typedef enum _ALTERNATIVE_ARCHITECTURE_TYPE
478 } ALTERNATIVE_ARCHITECTURE_TYPE
;
480 typedef struct _KSYSTEM_TIME
485 } KSYSTEM_TIME
, *PKSYSTEM_TIME
;
487 extern volatile KSYSTEM_TIME KeTickCount
;
489 #define NX_SUPPORT_POLICY_ALWAYSOFF 0
490 #define NX_SUPPORT_POLICY_ALWAYSON 1
491 #define NX_SUPPORT_POLICY_OPTIN 2
492 #define NX_SUPPORT_POLICY_OPTOUT 3
494 typedef struct _KUSER_SHARED_DATA
496 ULONG TickCountLowDeprecated
;
497 ULONG TickCountMultiplier
;
498 volatile KSYSTEM_TIME InterruptTime
;
499 volatile KSYSTEM_TIME SystemTime
;
500 volatile KSYSTEM_TIME TimeZoneBias
;
501 USHORT ImageNumberLow
;
502 USHORT ImageNumberHigh
;
503 WCHAR NtSystemRoot
[260];
504 ULONG MaxStackTraceDepth
;
505 ULONG CryptoExponent
;
507 ULONG LargePageMinimum
;
509 NT_PRODUCT_TYPE NtProductType
;
510 BOOLEAN ProductTypeIsValid
;
511 ULONG NtMajorVersion
;
512 ULONG NtMinorVersion
;
513 BOOLEAN ProcessorFeatures
[PROCESSOR_FEATURE_MAX
];
516 volatile ULONG TimeSlip
;
517 ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture
;
518 LARGE_INTEGER SystemExpirationDate
;
520 BOOLEAN KdDebuggerEnabled
;
521 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
522 UCHAR NXSupportPolicy
;
524 volatile ULONG ActiveConsoleId
;
525 volatile ULONG DismountCount
;
526 ULONG ComPlusPackage
;
527 ULONG LastSystemRITEventTickCount
;
528 ULONG NumberOfPhysicalPages
;
529 BOOLEAN SafeBootMode
;
532 ULONGLONG TestRetInstruction
;
534 ULONG SystemCallReturn
;
535 ULONGLONG SystemCallPad
[3];
536 __GNU_EXTENSION
union {
537 volatile KSYSTEM_TIME TickCount
;
538 volatile ULONG64 TickCountQuad
;
541 #if (NTDDI_VERSION >= NTDDI_WS03)
542 LONGLONG ConsoleSessionForegroundProcessId
;
543 ULONG Wow64SharedInformation
[MAX_WOW64_SHARED_ENTRIES
];
545 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
546 USHORT UserModeGlobalLogger
[8];
547 ULONG HeapTracingPid
[2];
548 ULONG CritSecTracingPid
[2];
549 __GNU_EXTENSION
union
551 ULONG SharedDataFlags
;
552 __GNU_EXTENSION
struct
554 ULONG DbgErrorPortPresent
:1;
555 ULONG DbgElevationEnabled
:1;
556 ULONG DbgVirtEnabled
:1;
557 ULONG DbgInstallerDetectEnabled
:1;
561 ULONG ImageFileExecutionOptions
;
562 KAFFINITY ActiveProcessorAffinity
;
564 } KUSER_SHARED_DATA
, *PKUSER_SHARED_DATA
;
567 ** IRP function codes
570 #define IRP_MJ_CREATE 0x00
571 #define IRP_MJ_CREATE_NAMED_PIPE 0x01
572 #define IRP_MJ_CLOSE 0x02
573 #define IRP_MJ_READ 0x03
574 #define IRP_MJ_WRITE 0x04
575 #define IRP_MJ_QUERY_INFORMATION 0x05
576 #define IRP_MJ_SET_INFORMATION 0x06
577 #define IRP_MJ_QUERY_EA 0x07
578 #define IRP_MJ_SET_EA 0x08
579 #define IRP_MJ_FLUSH_BUFFERS 0x09
580 #define IRP_MJ_QUERY_VOLUME_INFORMATION 0x0a
581 #define IRP_MJ_SET_VOLUME_INFORMATION 0x0b
582 #define IRP_MJ_DIRECTORY_CONTROL 0x0c
583 #define IRP_MJ_FILE_SYSTEM_CONTROL 0x0d
584 #define IRP_MJ_DEVICE_CONTROL 0x0e
585 #define IRP_MJ_INTERNAL_DEVICE_CONTROL 0x0f
586 #define IRP_MJ_SCSI 0x0f
587 #define IRP_MJ_SHUTDOWN 0x10
588 #define IRP_MJ_LOCK_CONTROL 0x11
589 #define IRP_MJ_CLEANUP 0x12
590 #define IRP_MJ_CREATE_MAILSLOT 0x13
591 #define IRP_MJ_QUERY_SECURITY 0x14
592 #define IRP_MJ_SET_SECURITY 0x15
593 #define IRP_MJ_POWER 0x16
594 #define IRP_MJ_SYSTEM_CONTROL 0x17
595 #define IRP_MJ_DEVICE_CHANGE 0x18
596 #define IRP_MJ_QUERY_QUOTA 0x19
597 #define IRP_MJ_SET_QUOTA 0x1a
598 #define IRP_MJ_PNP 0x1b
599 #define IRP_MJ_PNP_POWER 0x1b
600 #define IRP_MJ_MAXIMUM_FUNCTION 0x1b
602 #define IRP_MN_QUERY_DIRECTORY 0x01
603 #define IRP_MN_NOTIFY_CHANGE_DIRECTORY 0x02
605 #define IRP_MN_USER_FS_REQUEST 0x00
606 #define IRP_MN_MOUNT_VOLUME 0x01
607 #define IRP_MN_VERIFY_VOLUME 0x02
608 #define IRP_MN_LOAD_FILE_SYSTEM 0x03
609 #define IRP_MN_TRACK_LINK 0x04
610 #define IRP_MN_KERNEL_CALL 0x04
612 #define IRP_MN_LOCK 0x01
613 #define IRP_MN_UNLOCK_SINGLE 0x02
614 #define IRP_MN_UNLOCK_ALL 0x03
615 #define IRP_MN_UNLOCK_ALL_BY_KEY 0x04
617 #define IRP_MN_NORMAL 0x00
618 #define IRP_MN_DPC 0x01
619 #define IRP_MN_MDL 0x02
620 #define IRP_MN_COMPLETE 0x04
621 #define IRP_MN_COMPRESSED 0x08
623 #define IRP_MN_MDL_DPC (IRP_MN_MDL | IRP_MN_DPC)
624 #define IRP_MN_COMPLETE_MDL (IRP_MN_COMPLETE | IRP_MN_MDL)
625 #define IRP_MN_COMPLETE_MDL_DPC (IRP_MN_COMPLETE_MDL | IRP_MN_DPC)
627 #define IRP_MN_SCSI_CLASS 0x01
629 #define IRP_MN_START_DEVICE 0x00
630 #define IRP_MN_QUERY_REMOVE_DEVICE 0x01
631 #define IRP_MN_REMOVE_DEVICE 0x02
632 #define IRP_MN_CANCEL_REMOVE_DEVICE 0x03
633 #define IRP_MN_STOP_DEVICE 0x04
634 #define IRP_MN_QUERY_STOP_DEVICE 0x05
635 #define IRP_MN_CANCEL_STOP_DEVICE 0x06
637 #define IRP_MN_QUERY_DEVICE_RELATIONS 0x07
638 #define IRP_MN_QUERY_INTERFACE 0x08
639 #define IRP_MN_QUERY_CAPABILITIES 0x09
640 #define IRP_MN_QUERY_RESOURCES 0x0A
641 #define IRP_MN_QUERY_RESOURCE_REQUIREMENTS 0x0B
642 #define IRP_MN_QUERY_DEVICE_TEXT 0x0C
643 #define IRP_MN_FILTER_RESOURCE_REQUIREMENTS 0x0D
645 #define IRP_MN_READ_CONFIG 0x0F
646 #define IRP_MN_WRITE_CONFIG 0x10
647 #define IRP_MN_EJECT 0x11
648 #define IRP_MN_SET_LOCK 0x12
649 #define IRP_MN_QUERY_ID 0x13
650 #define IRP_MN_QUERY_PNP_DEVICE_STATE 0x14
651 #define IRP_MN_QUERY_BUS_INFORMATION 0x15
652 #define IRP_MN_DEVICE_USAGE_NOTIFICATION 0x16
653 #define IRP_MN_SURPRISE_REMOVAL 0x17
654 #define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18
656 #define IRP_MN_WAIT_WAKE 0x00
657 #define IRP_MN_POWER_SEQUENCE 0x01
658 #define IRP_MN_SET_POWER 0x02
659 #define IRP_MN_QUERY_POWER 0x03
661 #define IRP_MN_QUERY_ALL_DATA 0x00
662 #define IRP_MN_QUERY_SINGLE_INSTANCE 0x01
663 #define IRP_MN_CHANGE_SINGLE_INSTANCE 0x02
664 #define IRP_MN_CHANGE_SINGLE_ITEM 0x03
665 #define IRP_MN_ENABLE_EVENTS 0x04
666 #define IRP_MN_DISABLE_EVENTS 0x05
667 #define IRP_MN_ENABLE_COLLECTION 0x06
668 #define IRP_MN_DISABLE_COLLECTION 0x07
669 #define IRP_MN_REGINFO 0x08
670 #define IRP_MN_EXECUTE_METHOD 0x09
672 #define IRP_MN_REGINFO_EX 0x0b
674 typedef enum _IO_PAGING_PRIORITY
676 IoPagingPriorityInvalid
,
677 IoPagingPriorityNormal
,
678 IoPagingPriorityHigh
,
679 IoPagingPriorityReserved1
,
680 IoPagingPriorityReserved2
681 } IO_PAGING_PRIORITY
;
683 typedef enum _IO_ALLOCATION_ACTION
{
686 DeallocateObjectKeepRegisters
687 } IO_ALLOCATION_ACTION
, *PIO_ALLOCATION_ACTION
;
689 typedef IO_ALLOCATION_ACTION
690 (DDKAPI
*PDRIVER_CONTROL
)(
691 IN
struct _DEVICE_OBJECT
*DeviceObject
,
693 IN PVOID MapRegisterBase
,
697 typedef EXCEPTION_DISPOSITION
698 (DDKAPI
*PEXCEPTION_ROUTINE
)(
699 IN
struct _EXCEPTION_RECORD
*ExceptionRecord
,
700 IN PVOID EstablisherFrame
,
701 IN OUT
struct _CONTEXT
*ContextRecord
,
702 IN OUT PVOID DispatcherContext
);
705 (DDKAPI
*PDRIVER_LIST_CONTROL
)(
706 IN
struct _DEVICE_OBJECT
*DeviceObject
,
708 IN
struct _SCATTER_GATHER_LIST
*ScatterGather
,
712 (DDKAPI DRIVER_ADD_DEVICE
)(
713 IN
struct _DRIVER_OBJECT
*DriverObject
,
714 IN
struct _DEVICE_OBJECT
*PhysicalDeviceObject
);
715 typedef DRIVER_ADD_DEVICE
*PDRIVER_ADD_DEVICE
;
718 (DDKAPI IO_COMPLETION_ROUTINE
)(
719 IN
struct _DEVICE_OBJECT
*DeviceObject
,
722 typedef IO_COMPLETION_ROUTINE
*PIO_COMPLETION_ROUTINE
;
725 (DDKAPI DRIVER_CANCEL
)(
726 IN
struct _DEVICE_OBJECT
*DeviceObject
,
727 IN
struct _IRP
*Irp
);
728 typedef DRIVER_CANCEL
*PDRIVER_CANCEL
;
731 (DDKAPI
*PKDEFERRED_ROUTINE
)(
732 IN
struct _KDPC
*Dpc
,
733 IN PVOID DeferredContext
,
734 IN PVOID SystemArgument1
,
735 IN PVOID SystemArgument2
);
738 (DDKAPI DRIVER_DISPATCH
)(
739 IN
struct _DEVICE_OBJECT
*DeviceObject
,
740 IN
struct _IRP
*Irp
);
741 typedef DRIVER_DISPATCH
*PDRIVER_DISPATCH
;
744 (DDKAPI
*PIO_DPC_ROUTINE
)(
745 IN
struct _KDPC
*Dpc
,
746 IN
struct _DEVICE_OBJECT
*DeviceObject
,
751 (DDKAPI
*PMM_DLL_INITIALIZE
)(
752 IN PUNICODE_STRING RegistryPath
);
755 (DDKAPI
*PMM_DLL_UNLOAD
)(
759 (DDKAPI
*PDRIVER_ENTRY
)(
760 IN
struct _DRIVER_OBJECT
*DriverObject
,
761 IN PUNICODE_STRING RegistryPath
);
764 (DDKAPI DRIVER_INITIALIZE
)(
765 IN
struct _DRIVER_OBJECT
*DriverObject
,
766 IN PUNICODE_STRING RegistryPath
);
767 typedef DRIVER_INITIALIZE
*PDRIVER_INITIALIZE
;
770 (DDKAPI KSERVICE_ROUTINE
)(
771 IN
struct _KINTERRUPT
*Interrupt
,
772 IN PVOID ServiceContext
);
773 typedef KSERVICE_ROUTINE
*PKSERVICE_ROUTINE
;
776 (DDKAPI
*PIO_TIMER_ROUTINE
)(
777 IN
struct _DEVICE_OBJECT
*DeviceObject
,
781 (DDKAPI
*PDRIVER_REINITIALIZE
)(
782 IN
struct _DRIVER_OBJECT
*DriverObject
,
787 (DDKAPI DRIVER_STARTIO
)(
788 IN
struct _DEVICE_OBJECT
*DeviceObject
,
789 IN
struct _IRP
*Irp
);
790 typedef DRIVER_STARTIO
*PDRIVER_STARTIO
;
793 (DDKAPI
*PKSYNCHRONIZE_ROUTINE
)(
794 IN PVOID SynchronizeContext
);
797 (DDKAPI DRIVER_UNLOAD
)(
798 IN
struct _DRIVER_OBJECT
*DriverObject
);
799 typedef DRIVER_UNLOAD
*PDRIVER_UNLOAD
;
804 ** Plug and Play structures
808 (DDKAPI
*PINTERFACE_REFERENCE
)(
812 (DDKAPI
*PINTERFACE_DEREFERENCE
)(
816 (DDKAPI
*PTRANSLATE_BUS_ADDRESS
)(
818 IN PHYSICAL_ADDRESS BusAddress
,
820 IN OUT PULONG AddressSpace
,
821 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
823 typedef struct _DMA_ADAPTER
*
824 (DDKAPI
*PGET_DMA_ADAPTER
)(
826 IN
struct _DEVICE_DESCRIPTION
*DeviceDescriptor
,
827 OUT PULONG NumberOfMapRegisters
);
830 (DDKAPI
*PGET_SET_DEVICE_DATA
)(
837 /* PCI_DEVICE_PRESENCE_PARAMETERS.Flags */
838 #define PCI_USE_SUBSYSTEM_IDS 0x00000001
839 #define PCI_USE_REVISION 0x00000002
840 #define PCI_USE_VENDEV_IDS 0x00000004
841 #define PCI_USE_CLASS_SUBCLASS 0x00000008
842 #define PCI_USE_PROGIF 0x00000010
843 #define PCI_USE_LOCAL_BUS 0x00000020
844 #define PCI_USE_LOCAL_DEVICE 0x00000040
846 typedef struct _PCI_DEVICE_PRESENCE_PARAMETERS
{
857 } PCI_DEVICE_PRESENCE_PARAMETERS
, *PPCI_DEVICE_PRESENCE_PARAMETERS
;
860 (DDKAPI
*PPCI_IS_DEVICE_PRESENT
)(
864 IN USHORT SubVendorID
,
865 IN USHORT SubSystemID
,
869 (DDKAPI
*PPCI_IS_DEVICE_PRESENT_EX
)(
871 IN PPCI_DEVICE_PRESENCE_PARAMETERS Parameters
);
873 typedef union _POWER_STATE
{
874 SYSTEM_POWER_STATE SystemState
;
875 DEVICE_POWER_STATE DeviceState
;
876 } POWER_STATE
, *PPOWER_STATE
;
878 typedef enum _POWER_STATE_TYPE
{
881 } POWER_STATE_TYPE
, *PPOWER_STATE_TYPE
;
883 typedef struct _BUS_INTERFACE_STANDARD
{
887 PINTERFACE_REFERENCE InterfaceReference
;
888 PINTERFACE_DEREFERENCE InterfaceDereference
;
889 PTRANSLATE_BUS_ADDRESS TranslateBusAddress
;
890 PGET_DMA_ADAPTER GetDmaAdapter
;
891 PGET_SET_DEVICE_DATA SetBusData
;
892 PGET_SET_DEVICE_DATA GetBusData
;
893 } BUS_INTERFACE_STANDARD
, *PBUS_INTERFACE_STANDARD
;
895 typedef struct _PCI_DEVICE_PRESENT_INTERFACE
{
899 PINTERFACE_REFERENCE InterfaceReference
;
900 PINTERFACE_DEREFERENCE InterfaceDereference
;
901 PPCI_IS_DEVICE_PRESENT IsDevicePresent
;
902 PPCI_IS_DEVICE_PRESENT_EX IsDevicePresentEx
;
903 } PCI_DEVICE_PRESENT_INTERFACE
, *PPCI_DEVICE_PRESENT_INTERFACE
;
905 typedef struct _DEVICE_CAPABILITIES
{
910 ULONG LockSupported
: 1;
911 ULONG EjectSupported
: 1;
913 ULONG DockDevice
: 1;
915 ULONG SilentInstall
: 1;
916 ULONG RawDeviceOK
: 1;
917 ULONG SurpriseRemovalOK
: 1;
918 ULONG WakeFromD0
: 1;
919 ULONG WakeFromD1
: 1;
920 ULONG WakeFromD2
: 1;
921 ULONG WakeFromD3
: 1;
922 ULONG HardwareDisabled
: 1;
923 ULONG NonDynamic
: 1;
924 ULONG WarmEjectSupported
: 1;
925 ULONG NoDisplayInUI
: 1;
929 DEVICE_POWER_STATE DeviceState
[PowerSystemMaximum
];
930 SYSTEM_POWER_STATE SystemWake
;
931 DEVICE_POWER_STATE DeviceWake
;
935 } DEVICE_CAPABILITIES
, *PDEVICE_CAPABILITIES
;
937 typedef struct _DEVICE_INTERFACE_CHANGE_NOTIFICATION
{
941 GUID InterfaceClassGuid
;
942 PUNICODE_STRING SymbolicLinkName
;
943 } DEVICE_INTERFACE_CHANGE_NOTIFICATION
, *PDEVICE_INTERFACE_CHANGE_NOTIFICATION
;
945 typedef struct _HWPROFILE_CHANGE_NOTIFICATION
{
949 } HWPROFILE_CHANGE_NOTIFICATION
, *PHWPROFILE_CHANGE_NOTIFICATION
;
953 typedef struct _INTERFACE
{
957 PINTERFACE_REFERENCE InterfaceReference
;
958 PINTERFACE_DEREFERENCE InterfaceDereference
;
959 } INTERFACE
, *PINTERFACE
;
961 typedef struct _PLUGPLAY_NOTIFICATION_HEADER
{
965 } PLUGPLAY_NOTIFICATION_HEADER
, *PPLUGPLAY_NOTIFICATION_HEADER
;
967 typedef ULONG PNP_DEVICE_STATE
, *PPNP_DEVICE_STATE
;
969 /* PNP_DEVICE_STATE */
971 #define PNP_DEVICE_DISABLED 0x00000001
972 #define PNP_DEVICE_DONT_DISPLAY_IN_UI 0x00000002
973 #define PNP_DEVICE_FAILED 0x00000004
974 #define PNP_DEVICE_REMOVED 0x00000008
975 #define PNP_DEVICE_RESOURCE_REQUIREMENTS_CHANGED 0x00000010
976 #define PNP_DEVICE_NOT_DISABLEABLE 0x00000020
978 typedef struct _TARGET_DEVICE_CUSTOM_NOTIFICATION
{
982 struct _FILE_OBJECT
*FileObject
;
983 LONG NameBufferOffset
;
984 UCHAR CustomDataBuffer
[1];
985 } TARGET_DEVICE_CUSTOM_NOTIFICATION
, *PTARGET_DEVICE_CUSTOM_NOTIFICATION
;
987 typedef struct _TARGET_DEVICE_REMOVAL_NOTIFICATION
{
991 struct _FILE_OBJECT
*FileObject
;
992 } TARGET_DEVICE_REMOVAL_NOTIFICATION
, *PTARGET_DEVICE_REMOVAL_NOTIFICATION
;
994 typedef enum _BUS_QUERY_ID_TYPE
{
997 BusQueryCompatibleIDs
,
999 BusQueryDeviceSerialNumber
1000 } BUS_QUERY_ID_TYPE
, *PBUS_QUERY_ID_TYPE
;
1002 typedef enum _DEVICE_TEXT_TYPE
{
1003 DeviceTextDescription
,
1004 DeviceTextLocationInformation
1005 } DEVICE_TEXT_TYPE
, *PDEVICE_TEXT_TYPE
;
1007 typedef enum _DEVICE_USAGE_NOTIFICATION_TYPE
{
1008 DeviceUsageTypeUndefined
,
1009 DeviceUsageTypePaging
,
1010 DeviceUsageTypeHibernation
,
1011 DeviceUsageTypeDumpFile
1012 } DEVICE_USAGE_NOTIFICATION_TYPE
;
1014 typedef struct _POWER_SEQUENCE
{
1018 } POWER_SEQUENCE
, *PPOWER_SEQUENCE
;
1021 DevicePropertyDeviceDescription
,
1022 DevicePropertyHardwareID
,
1023 DevicePropertyCompatibleIDs
,
1024 DevicePropertyBootConfiguration
,
1025 DevicePropertyBootConfigurationTranslated
,
1026 DevicePropertyClassName
,
1027 DevicePropertyClassGuid
,
1028 DevicePropertyDriverKeyName
,
1029 DevicePropertyManufacturer
,
1030 DevicePropertyFriendlyName
,
1031 DevicePropertyLocationInformation
,
1032 DevicePropertyPhysicalDeviceObjectName
,
1033 DevicePropertyBusTypeGuid
,
1034 DevicePropertyLegacyBusType
,
1035 DevicePropertyBusNumber
,
1036 DevicePropertyEnumeratorName
,
1037 DevicePropertyAddress
,
1038 DevicePropertyUINumber
,
1039 DevicePropertyInstallState
,
1040 DevicePropertyRemovalPolicy
1041 } DEVICE_REGISTRY_PROPERTY
;
1043 typedef enum _IO_NOTIFICATION_EVENT_CATEGORY
{
1044 EventCategoryReserved
,
1045 EventCategoryHardwareProfileChange
,
1046 EventCategoryDeviceInterfaceChange
,
1047 EventCategoryTargetDeviceChange
1048 } IO_NOTIFICATION_EVENT_CATEGORY
;
1050 #define PNPNOTIFY_DEVICE_INTERFACE_INCLUDE_EXISTING_INTERFACES 0x00000001
1053 (DDKAPI
*PDRIVER_NOTIFICATION_CALLBACK_ROUTINE
)(
1054 IN PVOID NotificationStructure
,
1058 (DDKAPI
*PDEVICE_CHANGE_COMPLETE_CALLBACK
)(
1063 ** System structures
1066 #define SYMBOLIC_LINK_QUERY 0x0001
1067 #define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
1069 /* also in winnt,h */
1070 #define DUPLICATE_CLOSE_SOURCE 0x00000001
1071 #define DUPLICATE_SAME_ACCESS 0x00000002
1072 #define DUPLICATE_SAME_ATTRIBUTES 0x00000004
1075 typedef struct _OBJECT_NAME_INFORMATION
{
1076 UNICODE_STRING Name
;
1077 } OBJECT_NAME_INFORMATION
, *POBJECT_NAME_INFORMATION
;
1079 typedef struct _IO_STATUS_BLOCK
{
1080 _ANONYMOUS_UNION
union {
1084 ULONG_PTR Information
;
1085 } IO_STATUS_BLOCK
, *PIO_STATUS_BLOCK
;
1088 (DDKAPI
*PIO_APC_ROUTINE
)(
1089 IN PVOID ApcContext
,
1090 IN PIO_STATUS_BLOCK IoStatusBlock
,
1094 (DDKAPI
*PKNORMAL_ROUTINE
)(
1095 IN PVOID NormalContext
,
1096 IN PVOID SystemArgument1
,
1097 IN PVOID SystemArgument2
);
1100 (DDKAPI
*PKKERNEL_ROUTINE
)(
1101 IN
struct _KAPC
*Apc
,
1102 IN OUT PKNORMAL_ROUTINE
*NormalRoutine
,
1103 IN OUT PVOID
*NormalContext
,
1104 IN OUT PVOID
*SystemArgument1
,
1105 IN OUT PVOID
*SystemArgument2
);
1108 (DDKAPI
*PKRUNDOWN_ROUTINE
)(
1109 IN
struct _KAPC
*Apc
);
1112 (DDKAPI
*PKTRANSFER_ROUTINE
)(
1115 typedef struct _KAPC
1122 struct _KTHREAD
*Thread
;
1123 LIST_ENTRY ApcListEntry
;
1124 PKKERNEL_ROUTINE KernelRoutine
;
1125 PKRUNDOWN_ROUTINE RundownRoutine
;
1126 PKNORMAL_ROUTINE NormalRoutine
;
1127 PVOID NormalContext
;
1128 PVOID SystemArgument1
;
1129 PVOID SystemArgument2
;
1130 CCHAR ApcStateIndex
;
1131 KPROCESSOR_MODE ApcMode
;
1133 } KAPC
, *PKAPC
, *RESTRICTED_POINTER PRKAPC
;
1135 typedef struct _KDEVICE_QUEUE
{
1138 LIST_ENTRY DeviceListHead
;
1141 } KDEVICE_QUEUE
, *PKDEVICE_QUEUE
, *RESTRICTED_POINTER PRKDEVICE_QUEUE
;
1143 typedef struct _KDEVICE_QUEUE_ENTRY
{
1144 LIST_ENTRY DeviceListEntry
;
1147 } KDEVICE_QUEUE_ENTRY
, *PKDEVICE_QUEUE_ENTRY
,
1148 *RESTRICTED_POINTER PRKDEVICE_QUEUE_ENTRY
;
1150 #define LOCK_QUEUE_WAIT 1
1151 #define LOCK_QUEUE_OWNER 2
1152 #define LOCK_QUEUE_TIMER_LOCK_SHIFT 4
1153 #define LOCK_QUEUE_TIMER_TABLE_LOCKS (1 << (8 - LOCK_QUEUE_TIMER_LOCK_SHIFT))
1155 typedef enum _KSPIN_LOCK_QUEUE_NUMBER
1157 LockQueueDispatcherLock
,
1158 LockQueueExpansionLock
,
1160 LockQueueSystemSpaceLock
,
1162 LockQueueMasterLock
,
1163 LockQueueNonPagedPoolLock
,
1164 LockQueueIoCancelLock
,
1165 LockQueueWorkQueueLock
,
1167 LockQueueIoDatabaseLock
,
1168 LockQueueIoCompletionLock
,
1169 LockQueueNtfsStructLock
,
1170 LockQueueAfdWorkQueueLock
,
1172 LockQueueMmNonPagedPoolLock
,
1173 LockQueueUnusedSpare16
,
1174 LockQueueTimerTableLock
,
1175 LockQueueMaximumLock
= LockQueueTimerTableLock
+ LOCK_QUEUE_TIMER_TABLE_LOCKS
1176 } KSPIN_LOCK_QUEUE_NUMBER
, *PKSPIN_LOCK_QUEUE_NUMBER
;
1178 typedef struct _KSPIN_LOCK_QUEUE
{
1179 struct _KSPIN_LOCK_QUEUE
*volatile Next
;
1180 PKSPIN_LOCK
volatile Lock
;
1181 } KSPIN_LOCK_QUEUE
, *PKSPIN_LOCK_QUEUE
;
1183 typedef struct _KLOCK_QUEUE_HANDLE
{
1184 KSPIN_LOCK_QUEUE LockQueue
;
1186 } KLOCK_QUEUE_HANDLE
, *PKLOCK_QUEUE_HANDLE
;
1188 #define DPC_NORMAL 0
1189 #define DPC_THREADED 1
1191 #define ASSERT_APC(Object) \
1192 ASSERT((Object)->Type == ApcObject)
1194 #define ASSERT_DPC(Object) \
1195 ASSERT(((Object)->Type == 0) || \
1196 ((Object)->Type == DpcObject) || \
1197 ((Object)->Type == ThreadedDpcObject))
1199 #define ASSERT_DEVICE_QUEUE(Object) \
1200 ASSERT((Object)->Type == DeviceQueueObject)
1202 typedef struct _KDPC
1207 LIST_ENTRY DpcListEntry
;
1208 PKDEFERRED_ROUTINE DeferredRoutine
;
1209 PVOID DeferredContext
;
1210 PVOID SystemArgument1
;
1211 PVOID SystemArgument2
;
1212 volatile PVOID DpcData
;
1213 } KDPC
, *PKDPC
, *RESTRICTED_POINTER PRKDPC
;
1215 typedef PVOID PKIPI_CONTEXT
;
1219 (NTAPI
*PKIPI_WORKER
)(
1220 IN PKIPI_CONTEXT PacketContext
,
1221 IN PVOID Parameter1
,
1222 IN PVOID Parameter2
,
1226 typedef struct _WAIT_CONTEXT_BLOCK
{
1227 KDEVICE_QUEUE_ENTRY WaitQueueEntry
;
1228 PDRIVER_CONTROL DeviceRoutine
;
1229 PVOID DeviceContext
;
1230 ULONG NumberOfMapRegisters
;
1233 PKDPC BufferChainingDpc
;
1234 } WAIT_CONTEXT_BLOCK
, *PWAIT_CONTEXT_BLOCK
;
1236 #define ASSERT_GATE(object) \
1237 ASSERT((((object)->Header.Type & KOBJECT_TYPE_MASK) == GateObject) || \
1238 (((object)->Header.Type & KOBJECT_TYPE_MASK) == EventSynchronizationObject))
1240 typedef struct _KGATE
1242 DISPATCHER_HEADER Header
;
1243 } KGATE
, *PKGATE
, *RESTRICTED_POINTER PRKGATE
;
1245 #define GM_LOCK_BIT 0x1
1246 #define GM_LOCK_BIT_V 0x0
1247 #define GM_LOCK_WAITER_WOKEN 0x2
1248 #define GM_LOCK_WAITER_INC 0x4
1250 typedef struct _KGUARDED_MUTEX
1252 volatile LONG Count
;
1256 __GNU_EXTENSION
union
1258 __GNU_EXTENSION
struct
1260 SHORT KernelApcDisable
;
1261 SHORT SpecialApcDisable
;
1263 ULONG CombinedApcDisable
;
1265 } KGUARDED_MUTEX
, *PKGUARDED_MUTEX
;
1267 #define TIMER_TABLE_SIZE 512
1268 #define TIMER_TABLE_SHIFT 9
1270 typedef struct _KTIMER
{
1271 DISPATCHER_HEADER Header
;
1272 ULARGE_INTEGER DueTime
;
1273 LIST_ENTRY TimerListEntry
;
1276 } KTIMER
, *PKTIMER
, *RESTRICTED_POINTER PRKTIMER
;
1278 #define ASSERT_TIMER(E) \
1279 ASSERT(((E)->Header.Type == TimerNotificationObject) || \
1280 ((E)->Header.Type == TimerSynchronizationObject))
1282 #define ASSERT_MUTANT(E) \
1283 ASSERT((E)->Header.Type == MutantObject)
1285 #define ASSERT_SEMAPHORE(E) \
1286 ASSERT((E)->Header.Type == SemaphoreObject)
1288 #define ASSERT_EVENT(E) \
1289 ASSERT(((E)->Header.Type == NotificationEvent) || \
1290 ((E)->Header.Type == SynchronizationEvent))
1292 typedef struct _KMUTANT
{
1293 DISPATCHER_HEADER Header
;
1294 LIST_ENTRY MutantListEntry
;
1295 struct _KTHREAD
*RESTRICTED_POINTER OwnerThread
;
1298 } KMUTANT
, *PKMUTANT
, *RESTRICTED_POINTER PRKMUTANT
, KMUTEX
, *PKMUTEX
, *RESTRICTED_POINTER PRKMUTEX
;
1300 typedef enum _TIMER_TYPE
{
1302 SynchronizationTimer
1305 #define EVENT_INCREMENT 1
1306 #define IO_NO_INCREMENT 0
1307 #define IO_CD_ROM_INCREMENT 1
1308 #define IO_DISK_INCREMENT 1
1309 #define IO_KEYBOARD_INCREMENT 6
1310 #define IO_MAILSLOT_INCREMENT 2
1311 #define IO_MOUSE_INCREMENT 6
1312 #define IO_NAMED_PIPE_INCREMENT 2
1313 #define IO_NETWORK_INCREMENT 2
1314 #define IO_PARALLEL_INCREMENT 1
1315 #define IO_SERIAL_INCREMENT 2
1316 #define IO_SOUND_INCREMENT 8
1317 #define IO_VIDEO_INCREMENT 1
1318 #define SEMAPHORE_INCREMENT 1
1320 #define MM_MAXIMUM_DISK_IO_SIZE (0x10000)
1322 typedef struct _IRP
{
1325 struct _MDL
*MdlAddress
;
1328 struct _IRP
*MasterIrp
;
1329 volatile LONG IrpCount
;
1332 LIST_ENTRY ThreadListEntry
;
1333 IO_STATUS_BLOCK IoStatus
;
1334 KPROCESSOR_MODE RequestorMode
;
1335 BOOLEAN PendingReturned
;
1337 CHAR CurrentLocation
;
1340 CCHAR ApcEnvironment
;
1341 UCHAR AllocationFlags
;
1342 PIO_STATUS_BLOCK UserIosb
;
1346 PIO_APC_ROUTINE UserApcRoutine
;
1347 PVOID UserApcContext
;
1348 } AsynchronousParameters
;
1349 LARGE_INTEGER AllocationSize
;
1351 volatile PDRIVER_CANCEL CancelRoutine
;
1355 _ANONYMOUS_UNION
union {
1356 KDEVICE_QUEUE_ENTRY DeviceQueueEntry
;
1357 _ANONYMOUS_STRUCT
struct {
1358 PVOID DriverContext
[4];
1362 PCHAR AuxiliaryBuffer
;
1363 _ANONYMOUS_STRUCT
struct {
1364 LIST_ENTRY ListEntry
;
1365 _ANONYMOUS_UNION
union {
1366 struct _IO_STACK_LOCATION
*CurrentStackLocation
;
1370 struct _FILE_OBJECT
*OriginalFileObject
;
1373 PVOID CompletionKey
;
1376 typedef struct _IRP
*PIRP
;
1380 #define SL_FORCE_ACCESS_CHECK 0x01
1381 #define SL_OPEN_PAGING_FILE 0x02
1382 #define SL_OPEN_TARGET_DIRECTORY 0x04
1383 #define SL_CASE_SENSITIVE 0x80
1385 #define SL_KEY_SPECIFIED 0x01
1386 #define SL_OVERRIDE_VERIFY_VOLUME 0x02
1387 #define SL_WRITE_THROUGH 0x04
1388 #define SL_FT_SEQUENTIAL_WRITE 0x08
1390 #define SL_FAIL_IMMEDIATELY 0x01
1391 #define SL_EXCLUSIVE_LOCK 0x02
1393 #define SL_RESTART_SCAN 0x01
1394 #define SL_RETURN_SINGLE_ENTRY 0x02
1395 #define SL_INDEX_SPECIFIED 0x04
1397 #define SL_WATCH_TREE 0x01
1399 #define SL_ALLOW_RAW_MOUNT 0x01
1401 #define CTL_CODE(DeviceType, Function, Method, Access)( \
1402 ((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method))
1404 #define DEVICE_TYPE_FROM_CTL_CODE(ctl) (((ULONG) (ctl & 0xffff0000)) >> 16)
1409 IRP_PAGING_IO
= 0x2,
1410 IRP_MOUNT_COMPLETION
= 0x2,
1411 IRP_SYNCHRONOUS_API
= 0x4,
1412 IRP_ASSOCIATED_IRP
= 0x8,
1413 IRP_BUFFERED_IO
= 0x10,
1414 IRP_DEALLOCATE_BUFFER
= 0x20,
1415 IRP_INPUT_OPERATION
= 0x40,
1416 IRP_SYNCHRONOUS_PAGING_IO
= 0x40,
1417 IRP_CREATE_OPERATION
= 0x80,
1418 IRP_READ_OPERATION
= 0x100,
1419 IRP_WRITE_OPERATION
= 0x200,
1420 IRP_CLOSE_OPERATION
= 0x400,
1421 IRP_DEFER_IO_COMPLETION
= 0x800,
1422 IRP_OB_QUERY_NAME
= 0x1000,
1423 IRP_HOLD_DEVICE_QUEUE
= 0x2000,
1424 IRP_RETRY_IO_COMPLETION
= 0x4000
1427 #define IRP_QUOTA_CHARGED 0x01
1428 #define IRP_ALLOCATED_MUST_SUCCEED 0x02
1429 #define IRP_ALLOCATED_FIXED_SIZE 0x04
1430 #define IRP_LOOKASIDE_ALLOCATION 0x08
1432 typedef struct _BOOTDISK_INFORMATION
{
1433 LONGLONG BootPartitionOffset
;
1434 LONGLONG SystemPartitionOffset
;
1435 ULONG BootDeviceSignature
;
1436 ULONG SystemDeviceSignature
;
1437 } BOOTDISK_INFORMATION
, *PBOOTDISK_INFORMATION
;
1439 typedef struct _BOOTDISK_INFORMATION_EX
{
1440 LONGLONG BootPartitionOffset
;
1441 LONGLONG SystemPartitionOffset
;
1442 ULONG BootDeviceSignature
;
1443 ULONG SystemDeviceSignature
;
1444 GUID BootDeviceGuid
;
1445 GUID SystemDeviceGuid
;
1446 BOOLEAN BootDeviceIsGpt
;
1447 BOOLEAN SystemDeviceIsGpt
;
1448 } BOOTDISK_INFORMATION_EX
, *PBOOTDISK_INFORMATION_EX
;
1450 typedef struct _EISA_MEMORY_TYPE
{
1451 UCHAR ReadWrite
: 1;
1453 UCHAR Reserved0
: 1;
1456 UCHAR Reserved1
: 1;
1457 UCHAR MoreEntries
: 1;
1458 } EISA_MEMORY_TYPE
, *PEISA_MEMORY_TYPE
;
1460 #include <pshpack1.h>
1461 typedef struct _EISA_MEMORY_CONFIGURATION
{
1462 EISA_MEMORY_TYPE ConfigurationByte
;
1464 USHORT AddressLowWord
;
1465 UCHAR AddressHighByte
;
1467 } EISA_MEMORY_CONFIGURATION
, *PEISA_MEMORY_CONFIGURATION
;
1468 #include <poppack.h>
1470 typedef struct _EISA_IRQ_DESCRIPTOR
{
1471 UCHAR Interrupt
: 4;
1473 UCHAR LevelTriggered
: 1;
1475 UCHAR MoreEntries
: 1;
1476 } EISA_IRQ_DESCRIPTOR
, *PEISA_IRQ_DESCRIPTOR
;
1478 typedef struct _EISA_IRQ_CONFIGURATION
{
1479 EISA_IRQ_DESCRIPTOR ConfigurationByte
;
1481 } EISA_IRQ_CONFIGURATION
, *PEISA_IRQ_CONFIGURATION
;
1483 typedef struct _DMA_CONFIGURATION_BYTE0
{
1487 UCHAR MoreEntries
: 1;
1488 } DMA_CONFIGURATION_BYTE0
;
1490 typedef struct _DMA_CONFIGURATION_BYTE1
{
1491 UCHAR Reserved0
: 2;
1492 UCHAR TransferSize
: 2;
1494 UCHAR Reserved1
: 2;
1495 } DMA_CONFIGURATION_BYTE1
;
1497 typedef struct _EISA_DMA_CONFIGURATION
{
1498 DMA_CONFIGURATION_BYTE0 ConfigurationByte0
;
1499 DMA_CONFIGURATION_BYTE1 ConfigurationByte1
;
1500 } EISA_DMA_CONFIGURATION
, *PEISA_DMA_CONFIGURATION
;
1502 #include <pshpack1.h>
1503 typedef struct _EISA_PORT_DESCRIPTOR
{
1504 UCHAR NumberPorts
: 5;
1507 UCHAR MoreEntries
: 1;
1508 } EISA_PORT_DESCRIPTOR
, *PEISA_PORT_DESCRIPTOR
;
1510 typedef struct _EISA_PORT_CONFIGURATION
{
1511 EISA_PORT_DESCRIPTOR Configuration
;
1513 } EISA_PORT_CONFIGURATION
, *PEISA_PORT_CONFIGURATION
;
1514 #include <poppack.h>
1516 typedef struct _CM_EISA_FUNCTION_INFORMATION
{
1520 UCHAR MinorRevision
;
1521 UCHAR MajorRevision
;
1522 UCHAR Selections
[26];
1523 UCHAR FunctionFlags
;
1524 UCHAR TypeString
[80];
1525 EISA_MEMORY_CONFIGURATION EisaMemory
[9];
1526 EISA_IRQ_CONFIGURATION EisaIrq
[7];
1527 EISA_DMA_CONFIGURATION EisaDma
[4];
1528 EISA_PORT_CONFIGURATION EisaPort
[20];
1529 UCHAR InitializationData
[60];
1530 } CM_EISA_FUNCTION_INFORMATION
, *PCM_EISA_FUNCTION_INFORMATION
;
1532 /* CM_EISA_FUNCTION_INFORMATION.FunctionFlags */
1534 #define EISA_FUNCTION_ENABLED 0x80
1535 #define EISA_FREE_FORM_DATA 0x40
1536 #define EISA_HAS_PORT_INIT_ENTRY 0x20
1537 #define EISA_HAS_PORT_RANGE 0x10
1538 #define EISA_HAS_DMA_ENTRY 0x08
1539 #define EISA_HAS_IRQ_ENTRY 0x04
1540 #define EISA_HAS_MEMORY_ENTRY 0x02
1541 #define EISA_HAS_TYPE_ENTRY 0x01
1542 #define EISA_HAS_INFORMATION \
1543 (EISA_HAS_PORT_RANGE + EISA_HAS_DMA_ENTRY + EISA_HAS_IRQ_ENTRY \
1544 + EISA_HAS_MEMORY_ENTRY + EISA_HAS_TYPE_ENTRY)
1546 typedef struct _CM_EISA_SLOT_INFORMATION
{
1549 UCHAR MajorRevision
;
1550 UCHAR MinorRevision
;
1552 UCHAR NumberFunctions
;
1553 UCHAR FunctionInformation
;
1555 } CM_EISA_SLOT_INFORMATION
, *PCM_EISA_SLOT_INFORMATION
;
1557 /* CM_EISA_SLOT_INFORMATION.ReturnCode */
1559 #define EISA_INVALID_SLOT 0x80
1560 #define EISA_INVALID_FUNCTION 0x81
1561 #define EISA_INVALID_CONFIGURATION 0x82
1562 #define EISA_EMPTY_SLOT 0x83
1563 #define EISA_INVALID_BIOS_CALL 0x86
1565 typedef struct _CM_FLOPPY_DEVICE_DATA
{
1571 UCHAR StepRateHeadUnloadTime
;
1574 UCHAR SectorLengthCode
;
1575 UCHAR SectorPerTrack
;
1576 UCHAR ReadWriteGapLength
;
1577 UCHAR DataTransferLength
;
1578 UCHAR FormatGapLength
;
1579 UCHAR FormatFillCharacter
;
1580 UCHAR HeadSettleTime
;
1581 UCHAR MotorSettleTime
;
1582 UCHAR MaximumTrackValue
;
1583 UCHAR DataTransferRate
;
1584 } CM_FLOPPY_DEVICE_DATA
, *PCM_FLOPPY_DEVICE_DATA
;
1586 typedef struct _PNP_BUS_INFORMATION
{
1588 INTERFACE_TYPE LegacyBusType
;
1590 } PNP_BUS_INFORMATION
, *PPNP_BUS_INFORMATION
;
1592 #include <pshpack1.h>
1593 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Type */
1595 #define CmResourceTypeNull 0
1596 #define CmResourceTypePort 1
1597 #define CmResourceTypeInterrupt 2
1598 #define CmResourceTypeMemory 3
1599 #define CmResourceTypeDma 4
1600 #define CmResourceTypeDeviceSpecific 5
1601 #define CmResourceTypeBusNumber 6
1602 #define CmResourceTypeMaximum 7
1603 #define CmResourceTypeNonArbitrated 128
1604 #define CmResourceTypeConfigData 128
1605 #define CmResourceTypeDevicePrivate 129
1606 #define CmResourceTypePcCardConfig 130
1607 #define CmResourceTypeMfCardConfig 131
1609 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.ShareDisposition */
1611 typedef enum _CM_SHARE_DISPOSITION
{
1612 CmResourceShareUndetermined
,
1613 CmResourceShareDeviceExclusive
,
1614 CmResourceShareDriverExclusive
,
1615 CmResourceShareShared
1616 } CM_SHARE_DISPOSITION
;
1618 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypePort */
1620 #define CM_RESOURCE_PORT_MEMORY 0x0000
1621 #define CM_RESOURCE_PORT_IO 0x0001
1622 #define CM_RESOURCE_PORT_10_BIT_DECODE 0x0004
1623 #define CM_RESOURCE_PORT_12_BIT_DECODE 0x0008
1624 #define CM_RESOURCE_PORT_16_BIT_DECODE 0x0010
1625 #define CM_RESOURCE_PORT_POSITIVE_DECODE 0x0020
1626 #define CM_RESOURCE_PORT_PASSIVE_DECODE 0x0040
1627 #define CM_RESOURCE_PORT_WINDOW_DECODE 0x0080
1629 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeInterrupt */
1631 #define CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE 0x0000
1632 #define CM_RESOURCE_INTERRUPT_LATCHED 0x0001
1634 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeMemory */
1636 #define CM_RESOURCE_MEMORY_READ_WRITE 0x0000
1637 #define CM_RESOURCE_MEMORY_READ_ONLY 0x0001
1638 #define CM_RESOURCE_MEMORY_WRITE_ONLY 0x0002
1639 #define CM_RESOURCE_MEMORY_PREFETCHABLE 0x0004
1640 #define CM_RESOURCE_MEMORY_COMBINEDWRITE 0x0008
1641 #define CM_RESOURCE_MEMORY_24 0x0010
1642 #define CM_RESOURCE_MEMORY_CACHEABLE 0x0020
1644 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeDma */
1646 #define CM_RESOURCE_DMA_8 0x0000
1647 #define CM_RESOURCE_DMA_16 0x0001
1648 #define CM_RESOURCE_DMA_32 0x0002
1649 #define CM_RESOURCE_DMA_8_AND_16 0x0004
1650 #define CM_RESOURCE_DMA_BUS_MASTER 0x0008
1651 #define CM_RESOURCE_DMA_TYPE_A 0x0010
1652 #define CM_RESOURCE_DMA_TYPE_B 0x0020
1653 #define CM_RESOURCE_DMA_TYPE_F 0x0040
1655 typedef struct _CM_PARTIAL_RESOURCE_LIST
{
1659 CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors
[1];
1660 } CM_PARTIAL_RESOURCE_LIST
, *PCM_PARTIAL_RESOURCE_LIST
;
1662 typedef struct _CM_FULL_RESOURCE_DESCRIPTOR
{
1663 INTERFACE_TYPE InterfaceType
;
1665 CM_PARTIAL_RESOURCE_LIST PartialResourceList
;
1666 } CM_FULL_RESOURCE_DESCRIPTOR
, *PCM_FULL_RESOURCE_DESCRIPTOR
;
1668 typedef struct _CM_RESOURCE_LIST
{
1670 CM_FULL_RESOURCE_DESCRIPTOR List
[1];
1671 } CM_RESOURCE_LIST
, *PCM_RESOURCE_LIST
;
1673 typedef struct _CM_INT13_DRIVE_PARAMETER
{
1676 USHORT SectorsPerTrack
;
1678 USHORT NumberDrives
;
1679 } CM_INT13_DRIVE_PARAMETER
, *PCM_INT13_DRIVE_PARAMETER
;
1681 typedef struct _CM_PNP_BIOS_DEVICE_NODE
1686 UCHAR DeviceType
[3];
1687 USHORT DeviceAttributes
;
1688 } CM_PNP_BIOS_DEVICE_NODE
,*PCM_PNP_BIOS_DEVICE_NODE
;
1690 typedef struct _CM_PNP_BIOS_INSTALLATION_CHECK
1695 USHORT ControlField
;
1697 ULONG EventFlagAddress
;
1698 USHORT RealModeEntryOffset
;
1699 USHORT RealModeEntrySegment
;
1700 USHORT ProtectedModeEntryOffset
;
1701 ULONG ProtectedModeCodeBaseAddress
;
1703 USHORT RealModeDataBaseAddress
;
1704 ULONG ProtectedModeDataBaseAddress
;
1705 } CM_PNP_BIOS_INSTALLATION_CHECK
, *PCM_PNP_BIOS_INSTALLATION_CHECK
;
1707 #include <poppack.h>
1710 typedef struct _CM_DISK_GEOMETRY_DEVICE_DATA
1712 ULONG BytesPerSector
;
1713 ULONG NumberOfCylinders
;
1714 ULONG SectorsPerTrack
;
1715 ULONG NumberOfHeads
;
1716 } CM_DISK_GEOMETRY_DEVICE_DATA
, *PCM_DISK_GEOMETRY_DEVICE_DATA
;
1718 typedef struct _CM_KEYBOARD_DEVICE_DATA
{
1723 USHORT KeyboardFlags
;
1724 } CM_KEYBOARD_DEVICE_DATA
, *PCM_KEYBOARD_DEVICE_DATA
;
1726 #define KEYBOARD_INSERT_ON 0x08
1727 #define KEYBOARD_CAPS_LOCK_ON 0x04
1728 #define KEYBOARD_NUM_LOCK_ON 0x02
1729 #define KEYBOARD_SCROLL_LOCK_ON 0x01
1730 #define KEYBOARD_ALT_KEY_DOWN 0x80
1731 #define KEYBOARD_CTRL_KEY_DOWN 0x40
1732 #define KEYBOARD_LEFT_SHIFT_DOWN 0x20
1733 #define KEYBOARD_RIGHT_SHIFT_DOWN 0x10
1735 typedef struct _CM_MCA_POS_DATA
{
1741 } CM_MCA_POS_DATA
, *PCM_MCA_POS_DATA
;
1743 typedef struct CM_Power_Data_s
{
1745 DEVICE_POWER_STATE PD_MostRecentPowerState
;
1746 ULONG PD_Capabilities
;
1750 DEVICE_POWER_STATE PD_PowerStateMapping
[PowerSystemMaximum
];
1751 } CM_POWER_DATA
, *PCM_POWER_DATA
;
1753 #define PDCAP_D0_SUPPORTED 0x00000001
1754 #define PDCAP_D1_SUPPORTED 0x00000002
1755 #define PDCAP_D2_SUPPORTED 0x00000004
1756 #define PDCAP_D3_SUPPORTED 0x00000008
1757 #define PDCAP_WAKE_FROM_D0_SUPPORTED 0x00000010
1758 #define PDCAP_WAKE_FROM_D1_SUPPORTED 0x00000020
1759 #define PDCAP_WAKE_FROM_D2_SUPPORTED 0x00000040
1760 #define PDCAP_WAKE_FROM_D3_SUPPORTED 0x00000080
1761 #define PDCAP_WARM_EJECT_SUPPORTED 0x00000100
1763 typedef struct _CM_SCSI_DEVICE_DATA
{
1766 UCHAR HostIdentifier
;
1767 } CM_SCSI_DEVICE_DATA
, *PCM_SCSI_DEVICE_DATA
;
1769 typedef struct _CM_SERIAL_DEVICE_DATA
{
1773 } CM_SERIAL_DEVICE_DATA
, *PCM_SERIAL_DEVICE_DATA
;
1775 typedef struct _IO_COUNTERS
{
1776 ULONGLONG ReadOperationCount
;
1777 ULONGLONG WriteOperationCount
;
1778 ULONGLONG OtherOperationCount
;
1779 ULONGLONG ReadTransferCount
;
1780 ULONGLONG WriteTransferCount
;
1781 ULONGLONG OtherTransferCount
;
1782 } IO_COUNTERS
, *PIO_COUNTERS
;
1784 typedef struct _VM_COUNTERS
1786 SIZE_T PeakVirtualSize
;
1788 ULONG PageFaultCount
;
1789 SIZE_T PeakWorkingSetSize
;
1790 SIZE_T WorkingSetSize
;
1791 SIZE_T QuotaPeakPagedPoolUsage
;
1792 SIZE_T QuotaPagedPoolUsage
;
1793 SIZE_T QuotaPeakNonPagedPoolUsage
;
1794 SIZE_T QuotaNonPagedPoolUsage
;
1795 SIZE_T PagefileUsage
;
1796 SIZE_T PeakPagefileUsage
;
1797 } VM_COUNTERS
, *PVM_COUNTERS
;
1799 typedef struct _VM_COUNTERS_EX
1801 SIZE_T PeakVirtualSize
;
1803 ULONG PageFaultCount
;
1804 SIZE_T PeakWorkingSetSize
;
1805 SIZE_T WorkingSetSize
;
1806 SIZE_T QuotaPeakPagedPoolUsage
;
1807 SIZE_T QuotaPagedPoolUsage
;
1808 SIZE_T QuotaPeakNonPagedPoolUsage
;
1809 SIZE_T QuotaNonPagedPoolUsage
;
1810 SIZE_T PagefileUsage
;
1811 SIZE_T PeakPagefileUsage
;
1812 SIZE_T PrivateUsage
;
1813 } VM_COUNTERS_EX
, *PVM_COUNTERS_EX
;
1815 typedef struct _POOLED_USAGE_AND_LIMITS
1817 SIZE_T PeakPagedPoolUsage
;
1818 SIZE_T PagedPoolUsage
;
1819 SIZE_T PagedPoolLimit
;
1820 SIZE_T PeakNonPagedPoolUsage
;
1821 SIZE_T NonPagedPoolUsage
;
1822 SIZE_T NonPagedPoolLimit
;
1823 SIZE_T PeakPagefileUsage
;
1824 SIZE_T PagefileUsage
;
1825 SIZE_T PagefileLimit
;
1826 } POOLED_USAGE_AND_LIMITS
, *PPOOLED_USAGE_AND_LIMITS
;
1828 typedef enum _KINTERRUPT_POLARITY
1830 InterruptPolarityUnknown
,
1831 InterruptActiveHigh
,
1833 } KINTERRUPT_POLARITY
, *PKINTERRUPT_POLARITY
;
1835 typedef struct _IO_ERROR_LOG_PACKET
{
1836 UCHAR MajorFunctionCode
;
1838 USHORT DumpDataSize
;
1839 USHORT NumberOfStrings
;
1840 USHORT StringOffset
;
1841 USHORT EventCategory
;
1843 ULONG UniqueErrorValue
;
1844 NTSTATUS FinalStatus
;
1845 ULONG SequenceNumber
;
1846 ULONG IoControlCode
;
1847 LARGE_INTEGER DeviceOffset
;
1849 } IO_ERROR_LOG_PACKET
, *PIO_ERROR_LOG_PACKET
;
1851 typedef struct _IO_ERROR_LOG_MESSAGE
{
1854 USHORT DriverNameLength
;
1855 LARGE_INTEGER TimeStamp
;
1856 ULONG DriverNameOffset
;
1857 IO_ERROR_LOG_PACKET EntryData
;
1858 } IO_ERROR_LOG_MESSAGE
, *PIO_ERROR_LOG_MESSAGE
;
1860 #define ERROR_LOG_LIMIT_SIZE 240
1861 #define IO_ERROR_LOG_MESSAGE_HEADER_LENGTH (sizeof(IO_ERROR_LOG_MESSAGE) - \
1862 sizeof(IO_ERROR_LOG_PACKET) + \
1863 (sizeof(WCHAR) * 40))
1864 #define ERROR_LOG_MESSAGE_LIMIT_SIZE \
1865 (ERROR_LOG_LIMIT_SIZE + IO_ERROR_LOG_MESSAGE_HEADER_LENGTH)
1866 #define IO_ERROR_LOG_MESSAGE_LENGTH \
1867 ((PORT_MAXIMUM_MESSAGE_LENGTH > ERROR_LOG_MESSAGE_LIMIT_SIZE) ? \
1868 ERROR_LOG_MESSAGE_LIMIT_SIZE : \
1869 PORT_MAXIMUM_MESSAGE_LENGTH)
1870 #define ERROR_LOG_MAXIMUM_SIZE (IO_ERROR_LOG_MESSAGE_LENGTH - \
1871 IO_ERROR_LOG_MESSAGE_HEADER_LENGTH)
1873 typedef struct _CONTROLLER_OBJECT
{
1876 PVOID ControllerExtension
;
1877 KDEVICE_QUEUE DeviceWaitQueue
;
1879 LARGE_INTEGER Spare2
;
1880 } CONTROLLER_OBJECT
, *PCONTROLLER_OBJECT
;
1882 typedef enum _DMA_WIDTH
{
1887 } DMA_WIDTH
, *PDMA_WIDTH
;
1889 typedef enum _DMA_SPEED
{
1896 } DMA_SPEED
, *PDMA_SPEED
;
1898 /* DEVICE_DESCRIPTION.Version */
1900 #define DEVICE_DESCRIPTION_VERSION 0x0000
1901 #define DEVICE_DESCRIPTION_VERSION1 0x0001
1902 #define DEVICE_DESCRIPTION_VERSION2 0x0002
1904 typedef struct _DEVICE_DESCRIPTION
{
1907 BOOLEAN ScatterGather
;
1909 BOOLEAN AutoInitialize
;
1910 BOOLEAN Dma32BitAddresses
;
1911 BOOLEAN IgnoreCount
;
1913 BOOLEAN Dma64BitAddresses
;
1916 INTERFACE_TYPE InterfaceType
;
1919 ULONG MaximumLength
;
1921 } DEVICE_DESCRIPTION
, *PDEVICE_DESCRIPTION
;
1924 #define VPB_MOUNTED 0x0001
1925 #define VPB_LOCKED 0x0002
1926 #define VPB_PERSISTENT 0x0004
1927 #define VPB_REMOVE_PENDING 0x0008
1928 #define VPB_RAW_MOUNT 0x0010
1930 #define MAXIMUM_VOLUME_LABEL_LENGTH (32 * sizeof(WCHAR))
1932 typedef struct _VPB
{
1936 USHORT VolumeLabelLength
;
1937 struct _DEVICE_OBJECT
*DeviceObject
;
1938 struct _DEVICE_OBJECT
*RealDevice
;
1940 ULONG ReferenceCount
;
1941 WCHAR VolumeLabel
[MAXIMUM_VOLUME_LABEL_LENGTH
/ sizeof(WCHAR
)];
1944 /* DEVICE_OBJECT.Flags */
1946 #define DO_VERIFY_VOLUME 0x00000002
1947 #define DO_BUFFERED_IO 0x00000004
1948 #define DO_EXCLUSIVE 0x00000008
1949 #define DO_DIRECT_IO 0x00000010
1950 #define DO_MAP_IO_BUFFER 0x00000020
1951 #define DO_DEVICE_HAS_NAME 0x00000040
1952 #define DO_DEVICE_INITIALIZING 0x00000080
1953 #define DO_SYSTEM_BOOT_PARTITION 0x00000100
1954 #define DO_LONG_TERM_REQUESTS 0x00000200
1955 #define DO_NEVER_LAST_DEVICE 0x00000400
1956 #define DO_SHUTDOWN_REGISTERED 0x00000800
1957 #define DO_BUS_ENUMERATED_DEVICE 0x00001000
1958 #define DO_POWER_PAGABLE 0x00002000
1959 #define DO_POWER_INRUSH 0x00004000
1960 #define DO_LOW_PRIORITY_FILESYSTEM 0x00010000
1961 #define DO_XIP 0x00020000
1963 /* DEVICE_OBJECT.Characteristics */
1965 #define FILE_REMOVABLE_MEDIA 0x00000001
1966 #define FILE_READ_ONLY_DEVICE 0x00000002
1967 #define FILE_FLOPPY_DISKETTE 0x00000004
1968 #define FILE_WRITE_ONCE_MEDIA 0x00000008
1969 #define FILE_REMOTE_DEVICE 0x00000010
1970 #define FILE_DEVICE_IS_MOUNTED 0x00000020
1971 #define FILE_VIRTUAL_VOLUME 0x00000040
1972 #define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080
1973 #define FILE_DEVICE_SECURE_OPEN 0x00000100
1975 /* DEVICE_OBJECT.AlignmentRequirement */
1977 #define FILE_BYTE_ALIGNMENT 0x00000000
1978 #define FILE_WORD_ALIGNMENT 0x00000001
1979 #define FILE_LONG_ALIGNMENT 0x00000003
1980 #define FILE_QUAD_ALIGNMENT 0x00000007
1981 #define FILE_OCTA_ALIGNMENT 0x0000000f
1982 #define FILE_32_BYTE_ALIGNMENT 0x0000001f
1983 #define FILE_64_BYTE_ALIGNMENT 0x0000003f
1984 #define FILE_128_BYTE_ALIGNMENT 0x0000007f
1985 #define FILE_256_BYTE_ALIGNMENT 0x000000ff
1986 #define FILE_512_BYTE_ALIGNMENT 0x000001ff
1988 /* DEVICE_OBJECT.DeviceType */
1990 #define DEVICE_TYPE ULONG
1992 #define FILE_DEVICE_BEEP 0x00000001
1993 #define FILE_DEVICE_CD_ROM 0x00000002
1994 #define FILE_DEVICE_CD_ROM_FILE_SYSTEM 0x00000003
1995 #define FILE_DEVICE_CONTROLLER 0x00000004
1996 #define FILE_DEVICE_DATALINK 0x00000005
1997 #define FILE_DEVICE_DFS 0x00000006
1998 #define FILE_DEVICE_DISK 0x00000007
1999 #define FILE_DEVICE_DISK_FILE_SYSTEM 0x00000008
2000 #define FILE_DEVICE_FILE_SYSTEM 0x00000009
2001 #define FILE_DEVICE_INPORT_PORT 0x0000000a
2002 #define FILE_DEVICE_KEYBOARD 0x0000000b
2003 #define FILE_DEVICE_MAILSLOT 0x0000000c
2004 #define FILE_DEVICE_MIDI_IN 0x0000000d
2005 #define FILE_DEVICE_MIDI_OUT 0x0000000e
2006 #define FILE_DEVICE_MOUSE 0x0000000f
2007 #define FILE_DEVICE_MULTI_UNC_PROVIDER 0x00000010
2008 #define FILE_DEVICE_NAMED_PIPE 0x00000011
2009 #define FILE_DEVICE_NETWORK 0x00000012
2010 #define FILE_DEVICE_NETWORK_BROWSER 0x00000013
2011 #define FILE_DEVICE_NETWORK_FILE_SYSTEM 0x00000014
2012 #define FILE_DEVICE_NULL 0x00000015
2013 #define FILE_DEVICE_PARALLEL_PORT 0x00000016
2014 #define FILE_DEVICE_PHYSICAL_NETCARD 0x00000017
2015 #define FILE_DEVICE_PRINTER 0x00000018
2016 #define FILE_DEVICE_SCANNER 0x00000019
2017 #define FILE_DEVICE_SERIAL_MOUSE_PORT 0x0000001a
2018 #define FILE_DEVICE_SERIAL_PORT 0x0000001b
2019 #define FILE_DEVICE_SCREEN 0x0000001c
2020 #define FILE_DEVICE_SOUND 0x0000001d
2021 #define FILE_DEVICE_STREAMS 0x0000001e
2022 #define FILE_DEVICE_TAPE 0x0000001f
2023 #define FILE_DEVICE_TAPE_FILE_SYSTEM 0x00000020
2024 #define FILE_DEVICE_TRANSPORT 0x00000021
2025 #define FILE_DEVICE_UNKNOWN 0x00000022
2026 #define FILE_DEVICE_VIDEO 0x00000023
2027 #define FILE_DEVICE_VIRTUAL_DISK 0x00000024
2028 #define FILE_DEVICE_WAVE_IN 0x00000025
2029 #define FILE_DEVICE_WAVE_OUT 0x00000026
2030 #define FILE_DEVICE_8042_PORT 0x00000027
2031 #define FILE_DEVICE_NETWORK_REDIRECTOR 0x00000028
2032 #define FILE_DEVICE_BATTERY 0x00000029
2033 #define FILE_DEVICE_BUS_EXTENDER 0x0000002a
2034 #define FILE_DEVICE_MODEM 0x0000002b
2035 #define FILE_DEVICE_VDM 0x0000002c
2036 #define FILE_DEVICE_MASS_STORAGE 0x0000002d
2037 #define FILE_DEVICE_SMB 0x0000002e
2038 #define FILE_DEVICE_KS 0x0000002f
2039 #define FILE_DEVICE_CHANGER 0x00000030
2040 #define FILE_DEVICE_SMARTCARD 0x00000031
2041 #define FILE_DEVICE_ACPI 0x00000032
2042 #define FILE_DEVICE_DVD 0x00000033
2043 #define FILE_DEVICE_FULLSCREEN_VIDEO 0x00000034
2044 #define FILE_DEVICE_DFS_FILE_SYSTEM 0x00000035
2045 #define FILE_DEVICE_DFS_VOLUME 0x00000036
2046 #define FILE_DEVICE_SERENUM 0x00000037
2047 #define FILE_DEVICE_TERMSRV 0x00000038
2048 #define FILE_DEVICE_KSEC 0x00000039
2049 #define FILE_DEVICE_FIPS 0x0000003a
2051 typedef struct _DEVICE_OBJECT
{
2054 LONG ReferenceCount
;
2055 struct _DRIVER_OBJECT
*DriverObject
;
2056 struct _DEVICE_OBJECT
*NextDevice
;
2057 struct _DEVICE_OBJECT
*AttachedDevice
;
2058 struct _IRP
*CurrentIrp
;
2061 ULONG Characteristics
;
2063 PVOID DeviceExtension
;
2064 DEVICE_TYPE DeviceType
;
2067 LIST_ENTRY ListEntry
;
2068 WAIT_CONTEXT_BLOCK Wcb
;
2070 ULONG AlignmentRequirement
;
2071 KDEVICE_QUEUE DeviceQueue
;
2073 ULONG ActiveThreadCount
;
2074 PSECURITY_DESCRIPTOR SecurityDescriptor
;
2078 struct _DEVOBJ_EXTENSION
*DeviceObjectExtension
;
2080 } DEVICE_OBJECT
, *PDEVICE_OBJECT
;
2082 typedef enum _DEVICE_RELATION_TYPE
{
2087 TargetDeviceRelation
,
2089 } DEVICE_RELATION_TYPE
, *PDEVICE_RELATION_TYPE
;
2091 typedef struct _DEVICE_RELATIONS
{
2093 PDEVICE_OBJECT Objects
[1];
2094 } DEVICE_RELATIONS
, *PDEVICE_RELATIONS
;
2096 typedef struct _SCATTER_GATHER_ELEMENT
{
2097 PHYSICAL_ADDRESS Address
;
2100 } SCATTER_GATHER_ELEMENT
, *PSCATTER_GATHER_ELEMENT
;
2102 typedef struct _SCATTER_GATHER_LIST
{
2103 ULONG NumberOfElements
;
2105 SCATTER_GATHER_ELEMENT Elements
[1];
2106 } SCATTER_GATHER_LIST
, *PSCATTER_GATHER_LIST
;
2108 #define MDL_MAPPED_TO_SYSTEM_VA 0x0001
2109 #define MDL_PAGES_LOCKED 0x0002
2110 #define MDL_SOURCE_IS_NONPAGED_POOL 0x0004
2111 #define MDL_ALLOCATED_FIXED_SIZE 0x0008
2112 #define MDL_PARTIAL 0x0010
2113 #define MDL_PARTIAL_HAS_BEEN_MAPPED 0x0020
2114 #define MDL_IO_PAGE_READ 0x0040
2115 #define MDL_WRITE_OPERATION 0x0080
2116 #define MDL_PARENT_MAPPED_SYSTEM_VA 0x0100
2117 #define MDL_FREE_EXTRA_PTES 0x0200
2118 #define MDL_DESCRIBES_AWE 0x0400
2119 #define MDL_IO_SPACE 0x0800
2120 #define MDL_NETWORK_HEADER 0x1000
2121 #define MDL_MAPPING_CAN_FAIL 0x2000
2122 #define MDL_ALLOCATED_MUST_SUCCEED 0x4000
2123 #define MDL_INTERNAL 0x8000
2126 #define MDL_MAPPING_FLAGS ( \
2127 MDL_MAPPED_TO_SYSTEM_VA | \
2128 MDL_PAGES_LOCKED | \
2129 MDL_SOURCE_IS_NONPAGED_POOL | \
2130 MDL_PARTIAL_HAS_BEEN_MAPPED | \
2131 MDL_PARENT_MAPPED_SYSTEM_VA | \
2135 typedef struct _DRIVER_EXTENSION
{
2136 struct _DRIVER_OBJECT
*DriverObject
;
2137 PDRIVER_ADD_DEVICE AddDevice
;
2139 UNICODE_STRING ServiceKeyName
;
2140 } DRIVER_EXTENSION
, *PDRIVER_EXTENSION
;
2142 #define DRVO_UNLOAD_INVOKED 0x00000001
2143 #define DRVO_LEGACY_DRIVER 0x00000002
2144 #define DRVO_BUILTIN_DRIVER 0x00000004
2145 #define DRVO_REINIT_REGISTERED 0x00000008
2146 #define DRVO_INITIALIZED 0x00000010
2147 #define DRVO_BOOTREINIT_REGISTERED 0x00000020
2148 #define DRVO_LEGACY_RESOURCES 0x00000040
2150 typedef struct _DRIVER_OBJECT
{
2153 PDEVICE_OBJECT DeviceObject
;
2157 PVOID DriverSection
;
2158 PDRIVER_EXTENSION DriverExtension
;
2159 UNICODE_STRING DriverName
;
2160 PUNICODE_STRING HardwareDatabase
;
2161 struct _FAST_IO_DISPATCH
*FastIoDispatch
;
2162 PDRIVER_INITIALIZE DriverInit
;
2163 PDRIVER_STARTIO DriverStartIo
;
2164 PDRIVER_UNLOAD DriverUnload
;
2165 PDRIVER_DISPATCH MajorFunction
[IRP_MJ_MAXIMUM_FUNCTION
+ 1];
2167 typedef struct _DRIVER_OBJECT
*PDRIVER_OBJECT
;
2169 typedef struct _DMA_ADAPTER
{
2172 struct _DMA_OPERATIONS
* DmaOperations
;
2173 } DMA_ADAPTER
, *PDMA_ADAPTER
;
2176 (DDKAPI
*PPUT_DMA_ADAPTER
)(
2177 IN PDMA_ADAPTER DmaAdapter
);
2180 (DDKAPI
*PALLOCATE_COMMON_BUFFER
)(
2181 IN PDMA_ADAPTER DmaAdapter
,
2183 OUT PPHYSICAL_ADDRESS LogicalAddress
,
2184 IN BOOLEAN CacheEnabled
);
2187 (DDKAPI
*PFREE_COMMON_BUFFER
)(
2188 IN PDMA_ADAPTER DmaAdapter
,
2190 IN PHYSICAL_ADDRESS LogicalAddress
,
2191 IN PVOID VirtualAddress
,
2192 IN BOOLEAN CacheEnabled
);
2195 (DDKAPI
*PALLOCATE_ADAPTER_CHANNEL
)(
2196 IN PDMA_ADAPTER DmaAdapter
,
2197 IN PDEVICE_OBJECT DeviceObject
,
2198 IN ULONG NumberOfMapRegisters
,
2199 IN PDRIVER_CONTROL ExecutionRoutine
,
2203 (DDKAPI
*PFLUSH_ADAPTER_BUFFERS
)(
2204 IN PDMA_ADAPTER DmaAdapter
,
2206 IN PVOID MapRegisterBase
,
2209 IN BOOLEAN WriteToDevice
);
2212 (DDKAPI
*PFREE_ADAPTER_CHANNEL
)(
2213 IN PDMA_ADAPTER DmaAdapter
);
2216 (DDKAPI
*PFREE_MAP_REGISTERS
)(
2217 IN PDMA_ADAPTER DmaAdapter
,
2218 PVOID MapRegisterBase
,
2219 ULONG NumberOfMapRegisters
);
2221 typedef PHYSICAL_ADDRESS
2222 (DDKAPI
*PMAP_TRANSFER
)(
2223 IN PDMA_ADAPTER DmaAdapter
,
2225 IN PVOID MapRegisterBase
,
2227 IN OUT PULONG Length
,
2228 IN BOOLEAN WriteToDevice
);
2231 (DDKAPI
*PGET_DMA_ALIGNMENT
)(
2232 IN PDMA_ADAPTER DmaAdapter
);
2235 (DDKAPI
*PREAD_DMA_COUNTER
)(
2236 IN PDMA_ADAPTER DmaAdapter
);
2239 (DDKAPI
*PGET_SCATTER_GATHER_LIST
)(
2240 IN PDMA_ADAPTER DmaAdapter
,
2241 IN PDEVICE_OBJECT DeviceObject
,
2245 IN PDRIVER_LIST_CONTROL ExecutionRoutine
,
2247 IN BOOLEAN WriteToDevice
);
2250 (DDKAPI
*PPUT_SCATTER_GATHER_LIST
)(
2251 IN PDMA_ADAPTER DmaAdapter
,
2252 IN PSCATTER_GATHER_LIST ScatterGather
,
2253 IN BOOLEAN WriteToDevice
);
2256 (DDKAPI
*PCALCULATE_SCATTER_GATHER_LIST_SIZE
)(
2257 IN PDMA_ADAPTER DmaAdapter
,
2258 IN PMDL Mdl OPTIONAL
,
2261 OUT PULONG ScatterGatherListSize
,
2262 OUT PULONG pNumberOfMapRegisters OPTIONAL
);
2265 (DDKAPI
*PBUILD_SCATTER_GATHER_LIST
)(
2266 IN PDMA_ADAPTER DmaAdapter
,
2267 IN PDEVICE_OBJECT DeviceObject
,
2271 IN PDRIVER_LIST_CONTROL ExecutionRoutine
,
2273 IN BOOLEAN WriteToDevice
,
2274 IN PVOID ScatterGatherBuffer
,
2275 IN ULONG ScatterGatherLength
);
2278 (DDKAPI
*PBUILD_MDL_FROM_SCATTER_GATHER_LIST
)(
2279 IN PDMA_ADAPTER DmaAdapter
,
2280 IN PSCATTER_GATHER_LIST ScatterGather
,
2281 IN PMDL OriginalMdl
,
2282 OUT PMDL
*TargetMdl
);
2284 typedef struct _DMA_OPERATIONS
{
2286 PPUT_DMA_ADAPTER PutDmaAdapter
;
2287 PALLOCATE_COMMON_BUFFER AllocateCommonBuffer
;
2288 PFREE_COMMON_BUFFER FreeCommonBuffer
;
2289 PALLOCATE_ADAPTER_CHANNEL AllocateAdapterChannel
;
2290 PFLUSH_ADAPTER_BUFFERS FlushAdapterBuffers
;
2291 PFREE_ADAPTER_CHANNEL FreeAdapterChannel
;
2292 PFREE_MAP_REGISTERS FreeMapRegisters
;
2293 PMAP_TRANSFER MapTransfer
;
2294 PGET_DMA_ALIGNMENT GetDmaAlignment
;
2295 PREAD_DMA_COUNTER ReadDmaCounter
;
2296 PGET_SCATTER_GATHER_LIST GetScatterGatherList
;
2297 PPUT_SCATTER_GATHER_LIST PutScatterGatherList
;
2298 PCALCULATE_SCATTER_GATHER_LIST_SIZE CalculateScatterGatherList
;
2299 PBUILD_SCATTER_GATHER_LIST BuildScatterGatherList
;
2300 PBUILD_MDL_FROM_SCATTER_GATHER_LIST BuildMdlFromScatterGatherList
;
2301 } DMA_OPERATIONS
, *PDMA_OPERATIONS
;
2303 typedef enum _ARBITER_REQUEST_SOURCE
{
2304 ArbiterRequestUndefined
= -1,
2305 ArbiterRequestLegacyReported
,
2306 ArbiterRequestHalReported
,
2307 ArbiterRequestLegacyAssigned
,
2308 ArbiterRequestPnpDetected
,
2309 ArbiterRequestPnpEnumerated
2310 } ARBITER_REQUEST_SOURCE
;
2312 typedef enum _ARBITER_RESULT
{
2313 ArbiterResultUndefined
= -1,
2314 ArbiterResultSuccess
,
2315 ArbiterResultExternalConflict
,
2316 ArbiterResultNullRequest
2319 typedef enum _ARBITER_ACTION
{
2320 ArbiterActionTestAllocation
,
2321 ArbiterActionRetestAllocation
,
2322 ArbiterActionCommitAllocation
,
2323 ArbiterActionRollbackAllocation
,
2324 ArbiterActionQueryAllocatedResources
,
2325 ArbiterActionWriteReservedResources
,
2326 ArbiterActionQueryConflict
,
2327 ArbiterActionQueryArbitrate
,
2328 ArbiterActionAddReserved
,
2329 ArbiterActionBootAllocation
2330 } ARBITER_ACTION
, *PARBITER_ACTION
;
2332 typedef struct _ARBITER_CONFLICT_INFO
{
2333 PDEVICE_OBJECT OwningObject
;
2336 } ARBITER_CONFLICT_INFO
, *PARBITER_CONFLICT_INFO
;
2338 typedef struct _ARBITER_PARAMETERS
{
2341 IN OUT PLIST_ENTRY ArbitrationList
;
2342 IN ULONG AllocateFromCount
;
2343 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
2347 IN OUT PLIST_ENTRY ArbitrationList
;
2348 IN ULONG AllocateFromCount
;
2349 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
2353 IN OUT PLIST_ENTRY ArbitrationList
;
2357 OUT PCM_PARTIAL_RESOURCE_LIST
*AllocatedResources
;
2358 } QueryAllocatedResources
;
2361 IN PDEVICE_OBJECT PhysicalDeviceObject
;
2362 IN PIO_RESOURCE_DESCRIPTOR ConflictingResource
;
2363 OUT PULONG ConflictCount
;
2364 OUT PARBITER_CONFLICT_INFO
*Conflicts
;
2368 IN PLIST_ENTRY ArbitrationList
;
2372 IN PDEVICE_OBJECT ReserveDevice
;
2375 } ARBITER_PARAMETERS
, *PARBITER_PARAMETERS
;
2377 #define ARBITER_FLAG_BOOT_CONFIG 0x00000001
2379 typedef struct _ARBITER_LIST_ENTRY
{
2380 LIST_ENTRY ListEntry
;
2381 ULONG AlternativeCount
;
2382 PIO_RESOURCE_DESCRIPTOR Alternatives
;
2383 PDEVICE_OBJECT PhysicalDeviceObject
;
2384 ARBITER_REQUEST_SOURCE RequestSource
;
2387 INTERFACE_TYPE InterfaceType
;
2390 PCM_PARTIAL_RESOURCE_DESCRIPTOR Assignment
;
2391 PIO_RESOURCE_DESCRIPTOR SelectedAlternative
;
2392 ARBITER_RESULT Result
;
2393 } ARBITER_LIST_ENTRY
, *PARBITER_LIST_ENTRY
;
2396 (DDKAPI
*PARBITER_HANDLER
)(
2398 IN ARBITER_ACTION Action
,
2399 IN OUT PARBITER_PARAMETERS Parameters
);
2401 #define ARBITER_PARTIAL 0x00000001
2403 typedef struct _ARBITER_INTERFACE
{
2407 PINTERFACE_REFERENCE InterfaceReference
;
2408 PINTERFACE_DEREFERENCE InterfaceDereference
;
2409 PARBITER_HANDLER ArbiterHandler
;
2411 } ARBITER_INTERFACE
, *PARBITER_INTERFACE
;
2413 typedef enum _KPROFILE_SOURCE
{
2415 ProfileAlignmentFixup
,
2418 ProfileLoadInstructions
,
2419 ProfilePipelineFrozen
,
2420 ProfileBranchInstructions
,
2421 ProfileTotalNonissues
,
2422 ProfileDcacheMisses
,
2423 ProfileIcacheMisses
,
2425 ProfileBranchMispredictions
,
2426 ProfileStoreInstructions
,
2427 ProfileFpInstructions
,
2428 ProfileIntegerInstructions
,
2432 ProfileSpecialInstructions
,
2434 ProfileIcacheIssues
,
2435 ProfileDcacheAccesses
,
2436 ProfileMemoryBarrierCycles
,
2437 ProfileLoadLinkedIssues
,
2441 typedef enum _HAL_QUERY_INFORMATION_CLASS
{
2442 HalInstalledBusInformation
,
2443 HalProfileSourceInformation
,
2444 HalInformationClassUnused1
,
2445 HalPowerInformation
,
2446 HalProcessorSpeedInformation
,
2447 HalCallbackInformation
,
2448 HalMapRegisterInformation
,
2449 HalMcaLogInformation
,
2450 HalFrameBufferCachingInformation
,
2451 HalDisplayBiosInformation
,
2452 HalProcessorFeatureInformation
,
2453 HalNumaTopologyInterface
,
2454 HalErrorInformation
,
2455 HalCmcLogInformation
,
2456 HalCpeLogInformation
,
2457 HalQueryMcaInterface
,
2458 HalQueryAMLIIllegalIOPortAddresses
,
2459 HalQueryMaxHotPlugMemoryAddress
,
2460 HalPartitionIpiInterface
,
2461 HalPlatformInformation
,
2462 HalQueryProfileSourceList
2463 } HAL_QUERY_INFORMATION_CLASS
, *PHAL_QUERY_INFORMATION_CLASS
;
2465 typedef enum _HAL_SET_INFORMATION_CLASS
{
2466 HalProfileSourceInterval
,
2467 HalProfileSourceInterruptHandler
,
2468 HalMcaRegisterDriver
,
2469 HalKernelErrorHandler
,
2470 HalCmcRegisterDriver
,
2471 HalCpeRegisterDriver
,
2475 HalGenerateCmcInterrupt
2476 } HAL_SET_INFORMATION_CLASS
, *PHAL_SET_INFORMATION_CLASS
;
2478 typedef struct _HAL_PROFILE_SOURCE_INTERVAL
2480 KPROFILE_SOURCE Source
;
2482 } HAL_PROFILE_SOURCE_INTERVAL
, *PHAL_PROFILE_SOURCE_INTERVAL
;
2484 typedef struct _HAL_PROFILE_SOURCE_INFORMATION
2486 KPROFILE_SOURCE Source
;
2489 } HAL_PROFILE_SOURCE_INFORMATION
, *PHAL_PROFILE_SOURCE_INFORMATION
;
2491 typedef struct _MAP_REGISTER_ENTRY
2494 BOOLEAN WriteToDevice
;
2495 } MAP_REGISTER_ENTRY
, *PMAP_REGISTER_ENTRY
;
2502 PUCHAR TranslatedAddress
;
2504 } DEBUG_DEVICE_ADDRESS
, *PDEBUG_DEVICE_ADDRESS
;
2508 PHYSICAL_ADDRESS Start
;
2509 PHYSICAL_ADDRESS MaxEnd
;
2510 PVOID VirtualAddress
;
2514 } DEBUG_MEMORY_REQUIREMENTS
, *PDEBUG_MEMORY_REQUIREMENTS
;
2525 BOOLEAN Initialized
;
2526 DEBUG_DEVICE_ADDRESS BaseAddress
[6];
2527 DEBUG_MEMORY_REQUIREMENTS Memory
;
2528 } DEBUG_DEVICE_DESCRIPTOR
, *PDEBUG_DEVICE_DESCRIPTOR
;
2530 typedef enum _KD_OPTION
{
2531 KD_OPTION_SET_BLOCK_ENABLE
,
2534 /* Function Type Defintions for Dispatch Functions */
2535 struct _DEVICE_CONTROL_CONTEXT
;
2538 (DDKAPI
*PDEVICE_CONTROL_COMPLETION
)(
2539 IN
struct _DEVICE_CONTROL_CONTEXT
*ControlContext
);
2541 typedef struct _DEVICE_CONTROL_CONTEXT
{
2543 PDEVICE_HANDLER_OBJECT DeviceHandler
;
2544 PDEVICE_OBJECT DeviceObject
;
2547 PULONG BufferLength
;
2549 } DEVICE_CONTROL_CONTEXT
, *PDEVICE_CONTROL_CONTEXT
;
2551 typedef struct _PM_DISPATCH_TABLE
{
2555 } PM_DISPATCH_TABLE
, *PPM_DISPATCH_TABLE
;
2557 typedef enum _RESOURCE_TRANSLATION_DIRECTION
{
2558 TranslateChildToParent
,
2559 TranslateParentToChild
2560 } RESOURCE_TRANSLATION_DIRECTION
;
2563 (DDKAPI
*PTRANSLATE_RESOURCE_HANDLER
)(
2565 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Source
,
2566 IN RESOURCE_TRANSLATION_DIRECTION Direction
,
2567 IN ULONG AlternativesCount
,
2568 IN IO_RESOURCE_DESCRIPTOR Alternatives
[],
2569 IN PDEVICE_OBJECT PhysicalDeviceObject
,
2570 OUT PCM_PARTIAL_RESOURCE_DESCRIPTOR Target
);
2573 (DDKAPI
*PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER
)(
2575 IN PIO_RESOURCE_DESCRIPTOR Source
,
2576 IN PDEVICE_OBJECT PhysicalDeviceObject
,
2577 OUT PULONG TargetCount
,
2578 OUT PIO_RESOURCE_DESCRIPTOR
*Target
);
2580 typedef struct _TRANSLATOR_INTERFACE
{
2584 PINTERFACE_REFERENCE InterfaceReference
;
2585 PINTERFACE_DEREFERENCE InterfaceDereference
;
2586 PTRANSLATE_RESOURCE_HANDLER TranslateResources
;
2587 PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER TranslateResourceRequirements
;
2588 } TRANSLATOR_INTERFACE
, *PTRANSLATOR_INTERFACE
;
2591 (DDKAPI
*pHalDeviceControl
)(
2592 IN PDEVICE_HANDLER_OBJECT DeviceHandler
,
2593 IN PDEVICE_OBJECT DeviceObject
,
2594 IN ULONG ControlCode
,
2595 IN OUT PVOID Buffer OPTIONAL
,
2596 IN OUT PULONG BufferLength OPTIONAL
,
2598 IN PDEVICE_CONTROL_COMPLETION CompletionRoutine
);
2601 (FASTCALL
*pHalExamineMBR
)(
2602 IN PDEVICE_OBJECT DeviceObject
,
2603 IN ULONG SectorSize
,
2604 IN ULONG MBRTypeIdentifier
,
2608 (FASTCALL
*pHalIoAssignDriveLetters
)(
2609 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
2610 IN PSTRING NtDeviceName
,
2611 OUT PUCHAR NtSystemPath
,
2612 OUT PSTRING NtSystemPathString
);
2615 (FASTCALL
*pHalIoReadPartitionTable
)(
2616 IN PDEVICE_OBJECT DeviceObject
,
2617 IN ULONG SectorSize
,
2618 IN BOOLEAN ReturnRecognizedPartitions
,
2619 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
2622 (FASTCALL
*pHalIoSetPartitionInformation
)(
2623 IN PDEVICE_OBJECT DeviceObject
,
2624 IN ULONG SectorSize
,
2625 IN ULONG PartitionNumber
,
2626 IN ULONG PartitionType
);
2629 (FASTCALL
*pHalIoWritePartitionTable
)(
2630 IN PDEVICE_OBJECT DeviceObject
,
2631 IN ULONG SectorSize
,
2632 IN ULONG SectorsPerTrack
,
2633 IN ULONG NumberOfHeads
,
2634 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
2636 typedef PBUS_HANDLER
2637 (FASTCALL
*pHalHandlerForBus
)(
2638 IN INTERFACE_TYPE InterfaceType
,
2639 IN ULONG BusNumber
);
2642 (FASTCALL
*pHalReferenceBusHandler
)(
2643 IN PBUS_HANDLER BusHandler
);
2646 (DDKAPI
*pHalQuerySystemInformation
)(
2647 IN HAL_QUERY_INFORMATION_CLASS InformationClass
,
2648 IN ULONG BufferSize
,
2649 IN OUT PVOID Buffer
,
2650 OUT PULONG ReturnedLength
);
2653 (DDKAPI
*pHalSetSystemInformation
)(
2654 IN HAL_SET_INFORMATION_CLASS InformationClass
,
2655 IN ULONG BufferSize
,
2659 (DDKAPI
*pHalQueryBusSlots
)(
2660 IN PBUS_HANDLER BusHandler
,
2661 IN ULONG BufferSize
,
2662 OUT PULONG SlotNumbers
,
2663 OUT PULONG ReturnedLength
);
2666 (DDKAPI
*pHalInitPnpDriver
)(
2670 (DDKAPI
*pHalInitPowerManagement
)(
2671 IN PPM_DISPATCH_TABLE PmDriverDispatchTable
,
2672 OUT PPM_DISPATCH_TABLE
*PmHalDispatchTable
);
2674 typedef struct _DMA_ADAPTER
*
2675 (DDKAPI
*pHalGetDmaAdapter
)(
2677 IN
struct _DEVICE_DESCRIPTION
*DeviceDescriptor
,
2678 OUT PULONG NumberOfMapRegisters
);
2681 (DDKAPI
*pHalGetInterruptTranslator
)(
2682 IN INTERFACE_TYPE ParentInterfaceType
,
2683 IN ULONG ParentBusNumber
,
2684 IN INTERFACE_TYPE BridgeInterfaceType
,
2687 OUT PTRANSLATOR_INTERFACE Translator
,
2688 OUT PULONG BridgeBusNumber
);
2691 (DDKAPI
*pHalStartMirroring
)(
2695 (DDKAPI
*pHalEndMirroring
)(
2696 IN ULONG PassNumber
);
2699 (DDKAPI
*pHalMirrorPhysicalMemory
)(
2700 IN PHYSICAL_ADDRESS PhysicalAddress
,
2701 IN LARGE_INTEGER NumberOfBytes
);
2704 (DDKAPI
*pHalMirrorVerify
)(
2705 IN PHYSICAL_ADDRESS PhysicalAddress
,
2706 IN LARGE_INTEGER NumberOfBytes
);
2709 (DDKAPI
*pHalEndOfBoot
)(
2714 (DDKAPI
*pHalTranslateBusAddress
)(
2715 IN INTERFACE_TYPE InterfaceType
,
2717 IN PHYSICAL_ADDRESS BusAddress
,
2718 IN OUT PULONG AddressSpace
,
2719 OUT PPHYSICAL_ADDRESS TranslatedAddress
2724 (DDKAPI
*pHalAssignSlotResources
)(
2725 IN PUNICODE_STRING RegistryPath
,
2726 IN PUNICODE_STRING DriverClassName OPTIONAL
,
2727 IN PDRIVER_OBJECT DriverObject
,
2728 IN PDEVICE_OBJECT DeviceObject
,
2729 IN INTERFACE_TYPE BusType
,
2731 IN ULONG SlotNumber
,
2732 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
2737 (DDKAPI
*pHalHaltSystem
)(
2743 (DDKAPI
*pHalResetDisplay
)(
2749 (DDKAPI
*pHalVectorToIDTEntry
)(
2755 (DDKAPI
*pHalFindBusAddressTranslation
)(
2756 IN PHYSICAL_ADDRESS BusAddress
,
2757 IN OUT PULONG AddressSpace
,
2758 OUT PPHYSICAL_ADDRESS TranslatedAddress
,
2759 IN OUT PULONG_PTR Context
,
2765 (DDKAPI
*pKdSetupPciDeviceForDebugging
)(
2766 IN PVOID LoaderBlock OPTIONAL
,
2767 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
2772 (DDKAPI
*pKdReleasePciDeviceForDebugging
)(
2773 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
2778 (DDKAPI
*pKdGetAcpiTablePhase0
)(
2779 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
2785 (DDKAPI
*pKdCheckPowerButton
)(
2791 (DDKAPI
*pHalGetInterruptVector
)(
2792 IN INTERFACE_TYPE InterfaceType
,
2794 IN ULONG BusInterruptLevel
,
2795 IN ULONG BusInterruptVector
,
2797 OUT PKAFFINITY Affinity
2802 (DDKAPI
*pHalGetVectorInput
)(
2804 IN KAFFINITY Affinity
,
2806 OUT PKINTERRUPT_POLARITY Polarity
2811 (DDKAPI
*pKdMapPhysicalMemory64
)(
2812 IN PHYSICAL_ADDRESS PhysicalAddress
,
2813 IN ULONG NumberPages
2818 (DDKAPI
*pKdUnmapVirtualAddress
)(
2819 IN PVOID VirtualAddress
,
2820 IN ULONG NumberPages
2825 (DDKAPI
*pKdGetPciDataByOffset
)(
2827 IN ULONG SlotNumber
,
2835 (DDKAPI
*pKdSetPciDataByOffset
)(
2837 IN ULONG SlotNumber
,
2844 (DDKAPI
*PHAL_RESET_DISPLAY_PARAMETERS
)(
2845 ULONG Columns
, ULONG Rows
);
2849 pHalQuerySystemInformation HalQuerySystemInformation
;
2850 pHalSetSystemInformation HalSetSystemInformation
;
2851 pHalQueryBusSlots HalQueryBusSlots
;
2853 pHalExamineMBR HalExamineMBR
;
2854 pHalIoAssignDriveLetters HalIoAssignDriveLetters
;
2855 pHalIoReadPartitionTable HalIoReadPartitionTable
;
2856 pHalIoSetPartitionInformation HalIoSetPartitionInformation
;
2857 pHalIoWritePartitionTable HalIoWritePartitionTable
;
2858 pHalHandlerForBus HalReferenceHandlerForBus
;
2859 pHalReferenceBusHandler HalReferenceBusHandler
;
2860 pHalReferenceBusHandler HalDereferenceBusHandler
;
2861 pHalInitPnpDriver HalInitPnpDriver
;
2862 pHalInitPowerManagement HalInitPowerManagement
;
2863 pHalGetDmaAdapter HalGetDmaAdapter
;
2864 pHalGetInterruptTranslator HalGetInterruptTranslator
;
2865 pHalStartMirroring HalStartMirroring
;
2866 pHalEndMirroring HalEndMirroring
;
2867 pHalMirrorPhysicalMemory HalMirrorPhysicalMemory
;
2868 pHalEndOfBoot HalEndOfBoot
;
2869 pHalMirrorVerify HalMirrorVerify
;
2870 } HAL_DISPATCH
, *PHAL_DISPATCH
;
2872 #if defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTHAL_)
2873 extern NTSYSAPI PHAL_DISPATCH HalDispatchTable
;
2874 #define HALDISPATCH ((PHAL_DISPATCH)&HalDispatchTable)
2876 extern __declspec(dllexport
) HAL_DISPATCH HalDispatchTable
;
2877 #define HALDISPATCH (&HalDispatchTable)
2880 #define HAL_DISPATCH_VERSION 3
2881 #define HalDispatchTableVersion HALDISPATCH->Version
2882 #define HalQuerySystemInformation HALDISPATCH->HalQuerySystemInformation
2883 #define HalSetSystemInformation HALDISPATCH->HalSetSystemInformation
2884 #define HalQueryBusSlots HALDISPATCH->HalQueryBusSlots
2885 #define HalReferenceHandlerForBus HALDISPATCH->HalReferenceHandlerForBus
2886 #define HalReferenceBusHandler HALDISPATCH->HalReferenceBusHandler
2887 #define HalDereferenceBusHandler HALDISPATCH->HalDereferenceBusHandler
2888 #define HalInitPnpDriver HALDISPATCH->HalInitPnpDriver
2889 #define HalInitPowerManagement HALDISPATCH->HalInitPowerManagement
2890 #define HalGetDmaAdapter HALDISPATCH->HalGetDmaAdapter
2891 #define HalGetInterruptTranslator HALDISPATCH->HalGetInterruptTranslator
2892 #define HalStartMirroring HALDISPATCH->HalStartMirroring
2893 #define HalEndMirroring HALDISPATCH->HalEndMirroring
2894 #define HalMirrorPhysicalMemory HALDISPATCH->HalMirrorPhysicalMemory
2895 #define HalEndOfBoot HALDISPATCH->HalEndOfBoot
2896 #define HalMirrorVerify HALDISPATCH->HalMirrorVerify
2898 typedef enum _FILE_INFORMATION_CLASS
{
2899 FileDirectoryInformation
= 1,
2900 FileFullDirectoryInformation
,
2901 FileBothDirectoryInformation
,
2902 FileBasicInformation
,
2903 FileStandardInformation
,
2904 FileInternalInformation
,
2906 FileAccessInformation
,
2907 FileNameInformation
,
2908 FileRenameInformation
,
2909 FileLinkInformation
,
2910 FileNamesInformation
,
2911 FileDispositionInformation
,
2912 FilePositionInformation
,
2913 FileFullEaInformation
,
2914 FileModeInformation
,
2915 FileAlignmentInformation
,
2917 FileAllocationInformation
,
2918 FileEndOfFileInformation
,
2919 FileAlternateNameInformation
,
2920 FileStreamInformation
,
2921 FilePipeInformation
,
2922 FilePipeLocalInformation
,
2923 FilePipeRemoteInformation
,
2924 FileMailslotQueryInformation
,
2925 FileMailslotSetInformation
,
2926 FileCompressionInformation
,
2927 FileObjectIdInformation
,
2928 FileCompletionInformation
,
2929 FileMoveClusterInformation
,
2930 FileQuotaInformation
,
2931 FileReparsePointInformation
,
2932 FileNetworkOpenInformation
,
2933 FileAttributeTagInformation
,
2934 FileTrackingInformation
,
2935 FileIdBothDirectoryInformation
,
2936 FileIdFullDirectoryInformation
,
2937 FileValidDataLengthInformation
,
2938 FileShortNameInformation
,
2939 FileMaximumInformation
2940 } FILE_INFORMATION_CLASS
, *PFILE_INFORMATION_CLASS
;
2942 typedef struct _FILE_POSITION_INFORMATION
{
2943 LARGE_INTEGER CurrentByteOffset
;
2944 } FILE_POSITION_INFORMATION
, *PFILE_POSITION_INFORMATION
;
2946 typedef struct _FILE_ALIGNMENT_INFORMATION
{
2947 ULONG AlignmentRequirement
;
2948 } FILE_ALIGNMENT_INFORMATION
, *PFILE_ALIGNMENT_INFORMATION
;
2950 typedef struct _FILE_NAME_INFORMATION
{
2951 ULONG FileNameLength
;
2953 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
2955 #include <pshpack8.h>
2956 typedef struct _FILE_BASIC_INFORMATION
{
2957 LARGE_INTEGER CreationTime
;
2958 LARGE_INTEGER LastAccessTime
;
2959 LARGE_INTEGER LastWriteTime
;
2960 LARGE_INTEGER ChangeTime
;
2961 ULONG FileAttributes
;
2962 } FILE_BASIC_INFORMATION
, *PFILE_BASIC_INFORMATION
;
2963 #include <poppack.h>
2965 typedef struct _FILE_STANDARD_INFORMATION
{
2966 LARGE_INTEGER AllocationSize
;
2967 LARGE_INTEGER EndOfFile
;
2968 ULONG NumberOfLinks
;
2969 BOOLEAN DeletePending
;
2971 } FILE_STANDARD_INFORMATION
, *PFILE_STANDARD_INFORMATION
;
2973 typedef struct _FILE_NETWORK_OPEN_INFORMATION
{
2974 LARGE_INTEGER CreationTime
;
2975 LARGE_INTEGER LastAccessTime
;
2976 LARGE_INTEGER LastWriteTime
;
2977 LARGE_INTEGER ChangeTime
;
2978 LARGE_INTEGER AllocationSize
;
2979 LARGE_INTEGER EndOfFile
;
2980 ULONG FileAttributes
;
2981 } FILE_NETWORK_OPEN_INFORMATION
, *PFILE_NETWORK_OPEN_INFORMATION
;
2983 typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION
{
2984 ULONG FileAttributes
;
2986 } FILE_ATTRIBUTE_TAG_INFORMATION
, *PFILE_ATTRIBUTE_TAG_INFORMATION
;
2988 typedef struct _FILE_DISPOSITION_INFORMATION
{
2990 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
2992 typedef struct _FILE_END_OF_FILE_INFORMATION
{
2993 LARGE_INTEGER EndOfFile
;
2994 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
2996 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
{
2997 LARGE_INTEGER ValidDataLength
;
2998 } FILE_VALID_DATA_LENGTH_INFORMATION
, *PFILE_VALID_DATA_LENGTH_INFORMATION
;
3000 typedef union _FILE_SEGMENT_ELEMENT
{
3002 ULONGLONG Alignment
;
3003 }FILE_SEGMENT_ELEMENT
, *PFILE_SEGMENT_ELEMENT
;
3005 typedef enum _FSINFOCLASS
{
3006 FileFsVolumeInformation
= 1,
3007 FileFsLabelInformation
,
3008 FileFsSizeInformation
,
3009 FileFsDeviceInformation
,
3010 FileFsAttributeInformation
,
3011 FileFsControlInformation
,
3012 FileFsFullSizeInformation
,
3013 FileFsObjectIdInformation
,
3014 FileFsDriverPathInformation
,
3015 FileFsMaximumInformation
3016 } FS_INFORMATION_CLASS
, *PFS_INFORMATION_CLASS
;
3018 typedef struct _FILE_FS_DEVICE_INFORMATION
{
3019 DEVICE_TYPE DeviceType
;
3020 ULONG Characteristics
;
3021 } FILE_FS_DEVICE_INFORMATION
, *PFILE_FS_DEVICE_INFORMATION
;
3023 typedef struct _FILE_FULL_EA_INFORMATION
{
3024 ULONG NextEntryOffset
;
3027 USHORT EaValueLength
;
3029 } FILE_FULL_EA_INFORMATION
, *PFILE_FULL_EA_INFORMATION
;
3031 /* ERESOURCE.Flag */
3033 #define ResourceNeverExclusive 0x0010
3034 #define ResourceReleaseByOtherThread 0x0020
3035 #define ResourceOwnedExclusive 0x0080
3037 #define RESOURCE_HASH_TABLE_SIZE 64
3039 typedef struct _DEVOBJ_EXTENSION
3043 PDEVICE_OBJECT DeviceObject
;
3044 } DEVOBJ_EXTENSION
, *PDEVOBJ_EXTENSION
;
3047 (DDKAPI
*PFAST_IO_CHECK_IF_POSSIBLE
)(
3048 IN
struct _FILE_OBJECT
*FileObject
,
3049 IN PLARGE_INTEGER FileOffset
,
3053 IN BOOLEAN CheckForReadOperation
,
3054 OUT PIO_STATUS_BLOCK IoStatus
,
3055 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3058 (DDKAPI
*PFAST_IO_READ
)(
3059 IN
struct _FILE_OBJECT
*FileObject
,
3060 IN PLARGE_INTEGER FileOffset
,
3065 OUT PIO_STATUS_BLOCK IoStatus
,
3066 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3069 (DDKAPI
*PFAST_IO_WRITE
)(
3070 IN
struct _FILE_OBJECT
*FileObject
,
3071 IN PLARGE_INTEGER FileOffset
,
3076 OUT PIO_STATUS_BLOCK IoStatus
,
3077 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3080 (DDKAPI
*PFAST_IO_QUERY_BASIC_INFO
)(
3081 IN
struct _FILE_OBJECT
*FileObject
,
3083 OUT PFILE_BASIC_INFORMATION Buffer
,
3084 OUT PIO_STATUS_BLOCK IoStatus
,
3085 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3088 (DDKAPI
*PFAST_IO_QUERY_STANDARD_INFO
)(
3089 IN
struct _FILE_OBJECT
*FileObject
,
3091 OUT PFILE_STANDARD_INFORMATION Buffer
,
3092 OUT PIO_STATUS_BLOCK IoStatus
,
3093 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3096 (DDKAPI
*PFAST_IO_LOCK
)(
3097 IN
struct _FILE_OBJECT
*FileObject
,
3098 IN PLARGE_INTEGER FileOffset
,
3099 IN PLARGE_INTEGER Length
,
3100 PEPROCESS ProcessId
,
3102 BOOLEAN FailImmediately
,
3103 BOOLEAN ExclusiveLock
,
3104 OUT PIO_STATUS_BLOCK IoStatus
,
3105 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3108 (DDKAPI
*PFAST_IO_UNLOCK_SINGLE
)(
3109 IN
struct _FILE_OBJECT
*FileObject
,
3110 IN PLARGE_INTEGER FileOffset
,
3111 IN PLARGE_INTEGER Length
,
3112 PEPROCESS ProcessId
,
3114 OUT PIO_STATUS_BLOCK IoStatus
,
3115 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3118 (DDKAPI
*PFAST_IO_UNLOCK_ALL
)(
3119 IN
struct _FILE_OBJECT
*FileObject
,
3120 PEPROCESS ProcessId
,
3121 OUT PIO_STATUS_BLOCK IoStatus
,
3122 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3125 (DDKAPI
*PFAST_IO_UNLOCK_ALL_BY_KEY
)(
3126 IN
struct _FILE_OBJECT
*FileObject
,
3129 OUT PIO_STATUS_BLOCK IoStatus
,
3130 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3133 (DDKAPI
*PFAST_IO_DEVICE_CONTROL
)(
3134 IN
struct _FILE_OBJECT
*FileObject
,
3136 IN PVOID InputBuffer OPTIONAL
,
3137 IN ULONG InputBufferLength
,
3138 OUT PVOID OutputBuffer OPTIONAL
,
3139 IN ULONG OutputBufferLength
,
3140 IN ULONG IoControlCode
,
3141 OUT PIO_STATUS_BLOCK IoStatus
,
3142 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3145 (DDKAPI
*PFAST_IO_ACQUIRE_FILE
)(
3146 IN
struct _FILE_OBJECT
*FileObject
);
3149 (DDKAPI
*PFAST_IO_RELEASE_FILE
)(
3150 IN
struct _FILE_OBJECT
*FileObject
);
3153 (DDKAPI
*PFAST_IO_DETACH_DEVICE
)(
3154 IN
struct _DEVICE_OBJECT
*SourceDevice
,
3155 IN
struct _DEVICE_OBJECT
*TargetDevice
);
3158 (DDKAPI
*PFAST_IO_QUERY_NETWORK_OPEN_INFO
)(
3159 IN
struct _FILE_OBJECT
*FileObject
,
3161 OUT
struct _FILE_NETWORK_OPEN_INFORMATION
*Buffer
,
3162 OUT
struct _IO_STATUS_BLOCK
*IoStatus
,
3163 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3166 (DDKAPI
*PFAST_IO_ACQUIRE_FOR_MOD_WRITE
)(
3167 IN
struct _FILE_OBJECT
*FileObject
,
3168 IN PLARGE_INTEGER EndingOffset
,
3169 OUT
struct _ERESOURCE
**ResourceToRelease
,
3170 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3173 (DDKAPI
*PFAST_IO_MDL_READ
)(
3174 IN
struct _FILE_OBJECT
*FileObject
,
3175 IN PLARGE_INTEGER FileOffset
,
3179 OUT PIO_STATUS_BLOCK IoStatus
,
3180 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3183 (DDKAPI
*PFAST_IO_MDL_READ_COMPLETE
)(
3184 IN
struct _FILE_OBJECT
*FileObject
,
3186 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3189 (DDKAPI
*PFAST_IO_PREPARE_MDL_WRITE
)(
3190 IN
struct _FILE_OBJECT
*FileObject
,
3191 IN PLARGE_INTEGER FileOffset
,
3195 OUT PIO_STATUS_BLOCK IoStatus
,
3196 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3199 (DDKAPI
*PFAST_IO_MDL_WRITE_COMPLETE
)(
3200 IN
struct _FILE_OBJECT
*FileObject
,
3201 IN PLARGE_INTEGER FileOffset
,
3203 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3206 (DDKAPI
*PFAST_IO_READ_COMPRESSED
)(
3207 IN
struct _FILE_OBJECT
*FileObject
,
3208 IN PLARGE_INTEGER FileOffset
,
3213 OUT PIO_STATUS_BLOCK IoStatus
,
3214 OUT
struct _COMPRESSED_DATA_INFO
*CompressedDataInfo
,
3215 IN ULONG CompressedDataInfoLength
,
3216 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3219 (DDKAPI
*PFAST_IO_WRITE_COMPRESSED
)(
3220 IN
struct _FILE_OBJECT
*FileObject
,
3221 IN PLARGE_INTEGER FileOffset
,
3226 OUT PIO_STATUS_BLOCK IoStatus
,
3227 IN
struct _COMPRESSED_DATA_INFO
*CompressedDataInfo
,
3228 IN ULONG CompressedDataInfoLength
,
3229 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3232 (DDKAPI
*PFAST_IO_MDL_READ_COMPLETE_COMPRESSED
)(
3233 IN
struct _FILE_OBJECT
*FileObject
,
3235 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3238 (DDKAPI
*PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED
)(
3239 IN
struct _FILE_OBJECT
*FileObject
,
3240 IN PLARGE_INTEGER FileOffset
,
3242 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3245 (DDKAPI
*PFAST_IO_QUERY_OPEN
)(
3246 IN
struct _IRP
*Irp
,
3247 OUT PFILE_NETWORK_OPEN_INFORMATION NetworkInformation
,
3248 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3251 (DDKAPI
*PFAST_IO_RELEASE_FOR_MOD_WRITE
)(
3252 IN
struct _FILE_OBJECT
*FileObject
,
3253 IN
struct _ERESOURCE
*ResourceToRelease
,
3254 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3257 (DDKAPI
*PFAST_IO_ACQUIRE_FOR_CCFLUSH
)(
3258 IN
struct _FILE_OBJECT
*FileObject
,
3259 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3262 (DDKAPI
*PFAST_IO_RELEASE_FOR_CCFLUSH
) (
3263 IN
struct _FILE_OBJECT
*FileObject
,
3264 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3266 typedef struct _FAST_IO_DISPATCH
{
3267 ULONG SizeOfFastIoDispatch
;
3268 PFAST_IO_CHECK_IF_POSSIBLE FastIoCheckIfPossible
;
3269 PFAST_IO_READ FastIoRead
;
3270 PFAST_IO_WRITE FastIoWrite
;
3271 PFAST_IO_QUERY_BASIC_INFO FastIoQueryBasicInfo
;
3272 PFAST_IO_QUERY_STANDARD_INFO FastIoQueryStandardInfo
;
3273 PFAST_IO_LOCK FastIoLock
;
3274 PFAST_IO_UNLOCK_SINGLE FastIoUnlockSingle
;
3275 PFAST_IO_UNLOCK_ALL FastIoUnlockAll
;
3276 PFAST_IO_UNLOCK_ALL_BY_KEY FastIoUnlockAllByKey
;
3277 PFAST_IO_DEVICE_CONTROL FastIoDeviceControl
;
3278 PFAST_IO_ACQUIRE_FILE AcquireFileForNtCreateSection
;
3279 PFAST_IO_RELEASE_FILE ReleaseFileForNtCreateSection
;
3280 PFAST_IO_DETACH_DEVICE FastIoDetachDevice
;
3281 PFAST_IO_QUERY_NETWORK_OPEN_INFO FastIoQueryNetworkOpenInfo
;
3282 PFAST_IO_ACQUIRE_FOR_MOD_WRITE AcquireForModWrite
;
3283 PFAST_IO_MDL_READ MdlRead
;
3284 PFAST_IO_MDL_READ_COMPLETE MdlReadComplete
;
3285 PFAST_IO_PREPARE_MDL_WRITE PrepareMdlWrite
;
3286 PFAST_IO_MDL_WRITE_COMPLETE MdlWriteComplete
;
3287 PFAST_IO_READ_COMPRESSED FastIoReadCompressed
;
3288 PFAST_IO_WRITE_COMPRESSED FastIoWriteCompressed
;
3289 PFAST_IO_MDL_READ_COMPLETE_COMPRESSED MdlReadCompleteCompressed
;
3290 PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED MdlWriteCompleteCompressed
;
3291 PFAST_IO_QUERY_OPEN FastIoQueryOpen
;
3292 PFAST_IO_RELEASE_FOR_MOD_WRITE ReleaseForModWrite
;
3293 PFAST_IO_ACQUIRE_FOR_CCFLUSH AcquireForCcFlush
;
3294 PFAST_IO_RELEASE_FOR_CCFLUSH ReleaseForCcFlush
;
3295 } FAST_IO_DISPATCH
, *PFAST_IO_DISPATCH
;
3297 typedef struct _SECTION_OBJECT_POINTERS
{
3298 PVOID DataSectionObject
;
3299 PVOID SharedCacheMap
;
3300 PVOID ImageSectionObject
;
3301 } SECTION_OBJECT_POINTERS
, *PSECTION_OBJECT_POINTERS
;
3303 typedef struct _IO_COMPLETION_CONTEXT
{
3306 } IO_COMPLETION_CONTEXT
, *PIO_COMPLETION_CONTEXT
;
3308 /* FILE_OBJECT.Flags */
3310 #define FO_FILE_OPEN 0x00000001
3311 #define FO_SYNCHRONOUS_IO 0x00000002
3312 #define FO_ALERTABLE_IO 0x00000004
3313 #define FO_NO_INTERMEDIATE_BUFFERING 0x00000008
3314 #define FO_WRITE_THROUGH 0x00000010
3315 #define FO_SEQUENTIAL_ONLY 0x00000020
3316 #define FO_CACHE_SUPPORTED 0x00000040
3317 #define FO_NAMED_PIPE 0x00000080
3318 #define FO_STREAM_FILE 0x00000100
3319 #define FO_MAILSLOT 0x00000200
3320 #define FO_GENERATE_AUDIT_ON_CLOSE 0x00000400
3321 #define FO_DIRECT_DEVICE_OPEN 0x00000800
3322 #define FO_FILE_MODIFIED 0x00001000
3323 #define FO_FILE_SIZE_CHANGED 0x00002000
3324 #define FO_CLEANUP_COMPLETE 0x00004000
3325 #define FO_TEMPORARY_FILE 0x00008000
3326 #define FO_DELETE_ON_CLOSE 0x00010000
3327 #define FO_OPENED_CASE_SENSITIVE 0x00020000
3328 #define FO_HANDLE_CREATED 0x00040000
3329 #define FO_FILE_FAST_IO_READ 0x00080000
3330 #define FO_RANDOM_ACCESS 0x00100000
3331 #define FO_FILE_OPEN_CANCELLED 0x00200000
3332 #define FO_VOLUME_OPEN 0x00400000
3333 #define FO_REMOTE_ORIGIN 0x01000000
3335 typedef struct _FILE_OBJECT
3339 PDEVICE_OBJECT DeviceObject
;
3343 PSECTION_OBJECT_POINTERS SectionObjectPointer
;
3344 PVOID PrivateCacheMap
;
3345 NTSTATUS FinalStatus
;
3346 struct _FILE_OBJECT
*RelatedFileObject
;
3347 BOOLEAN LockOperation
;
3348 BOOLEAN DeletePending
;
3350 BOOLEAN WriteAccess
;
3351 BOOLEAN DeleteAccess
;
3353 BOOLEAN SharedWrite
;
3354 BOOLEAN SharedDelete
;
3356 UNICODE_STRING FileName
;
3357 LARGE_INTEGER CurrentByteOffset
;
3358 volatile ULONG Waiters
;
3359 volatile ULONG Busy
;
3363 volatile PIO_COMPLETION_CONTEXT CompletionContext
;
3364 KSPIN_LOCK IrpListLock
;
3366 volatile PVOID FileObjectExtension
;
3368 typedef struct _FILE_OBJECT
*PFILE_OBJECT
;
3370 typedef enum _SECURITY_OPERATION_CODE
{
3371 SetSecurityDescriptor
,
3372 QuerySecurityDescriptor
,
3373 DeleteSecurityDescriptor
,
3374 AssignSecurityDescriptor
3375 } SECURITY_OPERATION_CODE
, *PSECURITY_OPERATION_CODE
;
3377 #define INITIAL_PRIVILEGE_COUNT 3
3379 typedef struct _INITIAL_PRIVILEGE_SET
{
3380 ULONG PrivilegeCount
;
3382 LUID_AND_ATTRIBUTES Privilege
[INITIAL_PRIVILEGE_COUNT
];
3383 } INITIAL_PRIVILEGE_SET
, * PINITIAL_PRIVILEGE_SET
;
3385 #define SE_MIN_WELL_KNOWN_PRIVILEGE 2
3386 #define SE_CREATE_TOKEN_PRIVILEGE 2
3387 #define SE_ASSIGNPRIMARYTOKEN_PRIVILEGE 3
3388 #define SE_LOCK_MEMORY_PRIVILEGE 4
3389 #define SE_INCREASE_QUOTA_PRIVILEGE 5
3390 #define SE_UNSOLICITED_INPUT_PRIVILEGE 6
3391 #define SE_MACHINE_ACCOUNT_PRIVILEGE 6
3392 #define SE_TCB_PRIVILEGE 7
3393 #define SE_SECURITY_PRIVILEGE 8
3394 #define SE_TAKE_OWNERSHIP_PRIVILEGE 9
3395 #define SE_LOAD_DRIVER_PRIVILEGE 10
3396 #define SE_SYSTEM_PROFILE_PRIVILEGE 11
3397 #define SE_SYSTEMTIME_PRIVILEGE 12
3398 #define SE_PROF_SINGLE_PROCESS_PRIVILEGE 13
3399 #define SE_INC_BASE_PRIORITY_PRIVILEGE 14
3400 #define SE_CREATE_PAGEFILE_PRIVILEGE 15
3401 #define SE_CREATE_PERMANENT_PRIVILEGE 16
3402 #define SE_BACKUP_PRIVILEGE 17
3403 #define SE_RESTORE_PRIVILEGE 18
3404 #define SE_SHUTDOWN_PRIVILEGE 19
3405 #define SE_DEBUG_PRIVILEGE 20
3406 #define SE_AUDIT_PRIVILEGE 21
3407 #define SE_SYSTEM_ENVIRONMENT_PRIVILEGE 22
3408 #define SE_CHANGE_NOTIFY_PRIVILEGE 23
3409 #define SE_REMOTE_SHUTDOWN_PRIVILEGE 24
3410 #define SE_UNDOCK_PRIVILEGE 25
3411 #define SE_SYNC_AGENT_PRIVILEGE 26
3412 #define SE_ENABLE_DELEGATION_PRIVILEGE 27
3413 #define SE_MANAGE_VOLUME_PRIVILEGE 28
3414 #define SE_IMPERSONATE_PRIVILEGE 29
3415 #define SE_CREATE_GLOBAL_PRIVILEGE 30
3416 #define SE_MAX_WELL_KNOWN_PRIVILEGE SE_CREATE_GLOBAL_PRIVILEGE
3418 typedef struct _SECURITY_SUBJECT_CONTEXT
{
3419 PACCESS_TOKEN ClientToken
;
3420 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
;
3421 PACCESS_TOKEN PrimaryToken
;
3422 PVOID ProcessAuditId
;
3423 } SECURITY_SUBJECT_CONTEXT
, *PSECURITY_SUBJECT_CONTEXT
;
3425 #include <pshpack4.h>
3426 typedef struct _ACCESS_STATE
{
3428 BOOLEAN SecurityEvaluated
;
3429 BOOLEAN GenerateAudit
;
3430 BOOLEAN GenerateOnClose
;
3431 BOOLEAN PrivilegesAllocated
;
3433 ACCESS_MASK RemainingDesiredAccess
;
3434 ACCESS_MASK PreviouslyGrantedAccess
;
3435 ACCESS_MASK OriginalDesiredAccess
;
3436 SECURITY_SUBJECT_CONTEXT SubjectSecurityContext
;
3437 PSECURITY_DESCRIPTOR SecurityDescriptor
;
3440 INITIAL_PRIVILEGE_SET InitialPrivilegeSet
;
3441 PRIVILEGE_SET PrivilegeSet
;
3444 BOOLEAN AuditPrivileges
;
3445 UNICODE_STRING ObjectName
;
3446 UNICODE_STRING ObjectTypeName
;
3447 } ACCESS_STATE
, *PACCESS_STATE
;
3448 #include <poppack.h>
3450 typedef struct _IO_SECURITY_CONTEXT
{
3451 PSECURITY_QUALITY_OF_SERVICE SecurityQos
;
3452 PACCESS_STATE AccessState
;
3453 ACCESS_MASK DesiredAccess
;
3454 ULONG FullCreateOptions
;
3455 } IO_SECURITY_CONTEXT
, *PIO_SECURITY_CONTEXT
;
3457 #define IO_TYPE_ADAPTER 1
3458 #define IO_TYPE_CONTROLLER 2
3459 #define IO_TYPE_DEVICE 3
3460 #define IO_TYPE_DRIVER 4
3461 #define IO_TYPE_FILE 5
3462 #define IO_TYPE_IRP 6
3463 #define IO_TYPE_MASTER_ADAPTER 7
3464 #define IO_TYPE_OPEN_PACKET 8
3465 #define IO_TYPE_TIMER 9
3466 #define IO_TYPE_VPB 10
3467 #define IO_TYPE_ERROR_LOG 11
3468 #define IO_TYPE_ERROR_MESSAGE 12
3469 #define IO_TYPE_DEVICE_OBJECT_EXTENSION 13
3471 #define IO_TYPE_CSQ_IRP_CONTEXT 1
3472 #define IO_TYPE_CSQ 2
3476 typedef struct _IO_CSQ_IRP_CONTEXT
{
3479 struct _IO_CSQ
*Csq
;
3480 } IO_CSQ_IRP_CONTEXT
, *PIO_CSQ_IRP_CONTEXT
;
3483 (DDKAPI
*PIO_CSQ_INSERT_IRP
)(
3484 IN
struct _IO_CSQ
*Csq
,
3488 (DDKAPI
*PIO_CSQ_REMOVE_IRP
)(
3489 IN
struct _IO_CSQ
*Csq
,
3493 (DDKAPI
*PIO_CSQ_PEEK_NEXT_IRP
)(
3494 IN
struct _IO_CSQ
*Csq
,
3496 IN PVOID PeekContext
);
3499 (DDKAPI
*PIO_CSQ_ACQUIRE_LOCK
)(
3500 IN
struct _IO_CSQ
*Csq
,
3504 (DDKAPI
*PIO_CSQ_RELEASE_LOCK
)(
3505 IN
struct _IO_CSQ
*Csq
,
3509 (DDKAPI
*PIO_CSQ_COMPLETE_CANCELED_IRP
)(
3510 IN
struct _IO_CSQ
*Csq
,
3513 typedef struct _IO_CSQ
{
3515 PIO_CSQ_INSERT_IRP CsqInsertIrp
;
3516 PIO_CSQ_REMOVE_IRP CsqRemoveIrp
;
3517 PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp
;
3518 PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock
;
3519 PIO_CSQ_RELEASE_LOCK CsqReleaseLock
;
3520 PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp
;
3521 PVOID ReservePointer
;
3524 #if !defined(_ALPHA_)
3525 #include <pshpack4.h>
3527 typedef struct _IO_STACK_LOCATION
{
3528 UCHAR MajorFunction
;
3529 UCHAR MinorFunction
;
3534 PIO_SECURITY_CONTEXT SecurityContext
;
3536 USHORT POINTER_ALIGNMENT FileAttributes
;
3538 ULONG POINTER_ALIGNMENT EaLength
;
3542 ULONG POINTER_ALIGNMENT Key
;
3543 LARGE_INTEGER ByteOffset
;
3547 ULONG POINTER_ALIGNMENT Key
;
3548 LARGE_INTEGER ByteOffset
;
3552 PUNICODE_STRING FileName
;
3553 FILE_INFORMATION_CLASS FileInformationClass
;
3558 ULONG CompletionFilter
;
3562 FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass
;
3566 FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass
;
3567 PFILE_OBJECT FileObject
;
3568 _ANONYMOUS_UNION
union {
3569 _ANONYMOUS_STRUCT
struct {
3570 BOOLEAN ReplaceIfExists
;
3571 BOOLEAN AdvanceOnly
;
3574 HANDLE DeleteHandle
;
3588 FS_INFORMATION_CLASS POINTER_ALIGNMENT FsInformationClass
;
3592 FS_INFORMATION_CLASS FsInformationClass
;
3595 ULONG OutputBufferLength
;
3596 ULONG InputBufferLength
;
3597 ULONG FsControlCode
;
3598 PVOID Type3InputBuffer
;
3599 } FileSystemControl
;
3601 PLARGE_INTEGER Length
;
3603 LARGE_INTEGER ByteOffset
;
3606 ULONG OutputBufferLength
;
3607 ULONG POINTER_ALIGNMENT InputBufferLength
;
3608 ULONG POINTER_ALIGNMENT IoControlCode
;
3609 PVOID Type3InputBuffer
;
3612 SECURITY_INFORMATION SecurityInformation
;
3613 ULONG POINTER_ALIGNMENT Length
;
3616 SECURITY_INFORMATION SecurityInformation
;
3617 PSECURITY_DESCRIPTOR SecurityDescriptor
;
3621 PDEVICE_OBJECT DeviceObject
;
3625 PDEVICE_OBJECT DeviceObject
;
3628 struct _SCSI_REQUEST_BLOCK
*Srb
;
3633 struct _FILE_GET_QUOTA_INFORMATION
*SidList
;
3634 ULONG SidListLength
;
3640 DEVICE_RELATION_TYPE Type
;
3641 } QueryDeviceRelations
;
3643 CONST GUID
*InterfaceType
;
3646 PINTERFACE Interface
;
3647 PVOID InterfaceSpecificData
;
3650 PDEVICE_CAPABILITIES Capabilities
;
3651 } DeviceCapabilities
;
3653 PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList
;
3654 } FilterResourceRequirements
;
3659 ULONG POINTER_ALIGNMENT Length
;
3665 BUS_QUERY_ID_TYPE IdType
;
3668 DEVICE_TEXT_TYPE DeviceTextType
;
3669 LCID POINTER_ALIGNMENT LocaleId
;
3673 BOOLEAN Reserved
[3];
3674 DEVICE_USAGE_NOTIFICATION_TYPE POINTER_ALIGNMENT Type
;
3675 } UsageNotification
;
3677 SYSTEM_POWER_STATE PowerState
;
3680 PPOWER_SEQUENCE PowerSequence
;
3683 ULONG SystemContext
;
3684 POWER_STATE_TYPE POINTER_ALIGNMENT Type
;
3685 POWER_STATE POINTER_ALIGNMENT State
;
3686 POWER_ACTION POINTER_ALIGNMENT ShutdownType
;
3689 PCM_RESOURCE_LIST AllocatedResources
;
3690 PCM_RESOURCE_LIST AllocatedResourcesTranslated
;
3693 ULONG_PTR ProviderId
;
3705 PDEVICE_OBJECT DeviceObject
;
3706 PFILE_OBJECT FileObject
;
3707 PIO_COMPLETION_ROUTINE CompletionRoutine
;
3709 } IO_STACK_LOCATION
, *PIO_STACK_LOCATION
;
3710 #if !defined(_ALPHA_)
3711 #include <poppack.h>
3714 /* IO_STACK_LOCATION.Control */
3716 #define SL_PENDING_RETURNED 0x01
3717 #define SL_ERROR_RETURNED 0x02
3718 #define SL_INVOKE_ON_CANCEL 0x20
3719 #define SL_INVOKE_ON_SUCCESS 0x40
3720 #define SL_INVOKE_ON_ERROR 0x80
3722 /* IO_STACK_LOCATION.Parameters.ReadWriteControl.WhichSpace */
3724 #define PCI_WHICHSPACE_CONFIG 0x0
3725 #define PCI_WHICHSPACE_ROM 0x52696350 /* 'PciR' */
3727 typedef enum _KEY_INFORMATION_CLASS
{
3728 KeyBasicInformation
,
3732 KeyCachedInformation
,
3734 } KEY_INFORMATION_CLASS
;
3736 typedef struct _KEY_BASIC_INFORMATION
{
3737 LARGE_INTEGER LastWriteTime
;
3741 } KEY_BASIC_INFORMATION
, *PKEY_BASIC_INFORMATION
;
3743 typedef struct _KEY_FULL_INFORMATION
{
3744 LARGE_INTEGER LastWriteTime
;
3752 ULONG MaxValueNameLen
;
3753 ULONG MaxValueDataLen
;
3755 } KEY_FULL_INFORMATION
, *PKEY_FULL_INFORMATION
;
3757 typedef struct _KEY_NODE_INFORMATION
{
3758 LARGE_INTEGER LastWriteTime
;
3764 } KEY_NODE_INFORMATION
, *PKEY_NODE_INFORMATION
;
3766 typedef struct _KEY_VALUE_BASIC_INFORMATION
{
3771 } KEY_VALUE_BASIC_INFORMATION
, *PKEY_VALUE_BASIC_INFORMATION
;
3773 typedef struct _KEY_VALUE_FULL_INFORMATION
{
3780 } KEY_VALUE_FULL_INFORMATION
, *PKEY_VALUE_FULL_INFORMATION
;
3782 typedef struct _KEY_VALUE_PARTIAL_INFORMATION
{
3787 } KEY_VALUE_PARTIAL_INFORMATION
, *PKEY_VALUE_PARTIAL_INFORMATION
;
3789 typedef struct _KEY_VALUE_PARTIAL_INFORMATION_ALIGN64
{
3793 } KEY_VALUE_PARTIAL_INFORMATION_ALIGN64
, *PKEY_VALUE_PARTIAL_INFORMATION_ALIGN64
;
3795 typedef struct _KEY_VALUE_ENTRY
{
3796 PUNICODE_STRING ValueName
;
3800 } KEY_VALUE_ENTRY
, *PKEY_VALUE_ENTRY
;
3802 typedef enum _KEY_VALUE_INFORMATION_CLASS
{
3803 KeyValueBasicInformation
,
3804 KeyValueFullInformation
,
3805 KeyValuePartialInformation
,
3806 KeyValueFullInformationAlign64
,
3807 KeyValuePartialInformationAlign64
3808 } KEY_VALUE_INFORMATION_CLASS
;
3810 typedef struct _KEY_WRITE_TIME_INFORMATION
{
3811 LARGE_INTEGER LastWriteTime
;
3812 } KEY_WRITE_TIME_INFORMATION
, *PKEY_WRITE_TIME_INFORMATION
;
3814 typedef struct _KEY_USER_FLAGS_INFORMATION
{
3816 } KEY_USER_FLAGS_INFORMATION
, *PKEY_USER_FLAGS_INFORMATION
;
3818 typedef enum _KEY_SET_INFORMATION_CLASS
{
3819 KeyWriteTimeInformation
,
3820 KeyUserFlagsInformation
,
3822 } KEY_SET_INFORMATION_CLASS
;
3824 /* KEY_VALUE_Xxx.Type */
3828 #define REG_EXPAND_SZ 2
3829 #define REG_BINARY 3
3831 #define REG_DWORD_LITTLE_ENDIAN 4
3832 #define REG_DWORD_BIG_ENDIAN 5
3834 #define REG_MULTI_SZ 7
3835 #define REG_RESOURCE_LIST 8
3836 #define REG_FULL_RESOURCE_DESCRIPTOR 9
3837 #define REG_RESOURCE_REQUIREMENTS_LIST 10
3838 #define REG_QWORD 11
3839 #define REG_QWORD_LITTLE_ENDIAN 11
3841 #define PCI_TYPE0_ADDRESSES 6
3842 #define PCI_TYPE1_ADDRESSES 2
3843 #define PCI_TYPE2_ADDRESSES 5
3845 typedef struct _PCI_COMMON_CONFIG
{
3854 UCHAR CacheLineSize
;
3859 struct _PCI_HEADER_TYPE_0
{
3860 ULONG BaseAddresses
[PCI_TYPE0_ADDRESSES
];
3864 ULONG ROMBaseAddress
;
3865 UCHAR CapabilitiesPtr
;
3868 UCHAR InterruptLine
;
3871 UCHAR MaximumLatency
;
3873 struct _PCI_HEADER_TYPE_1
{
3874 ULONG BaseAddresses
[PCI_TYPE1_ADDRESSES
];
3877 UCHAR SubordinateBus
;
3878 UCHAR SecondaryLatency
;
3881 USHORT SecondaryStatus
;
3884 USHORT PrefetchBase
;
3885 USHORT PrefetchLimit
;
3886 ULONG PrefetchBaseUpper32
;
3887 ULONG PrefetchLimitUpper32
;
3888 USHORT IOBaseUpper16
;
3889 USHORT IOLimitUpper16
;
3890 UCHAR CapabilitiesPtr
;
3892 ULONG ROMBaseAddress
;
3893 UCHAR InterruptLine
;
3895 USHORT BridgeControl
;
3897 struct _PCI_HEADER_TYPE_2
{
3898 ULONG SocketRegistersBaseAddress
;
3899 UCHAR CapabilitiesPtr
;
3901 USHORT SecondaryStatus
;
3904 UCHAR SubordinateBus
;
3905 UCHAR SecondaryLatency
;
3909 } Range
[PCI_TYPE2_ADDRESSES
- 1];
3910 UCHAR InterruptLine
;
3912 USHORT BridgeControl
;
3915 UCHAR DeviceSpecific
[192];
3916 } PCI_COMMON_CONFIG
, *PPCI_COMMON_CONFIG
;
3918 /* PCI_COMMON_CONFIG.Command */
3920 #define PCI_ENABLE_IO_SPACE 0x0001
3921 #define PCI_ENABLE_MEMORY_SPACE 0x0002
3922 #define PCI_ENABLE_BUS_MASTER 0x0004
3923 #define PCI_ENABLE_SPECIAL_CYCLES 0x0008
3924 #define PCI_ENABLE_WRITE_AND_INVALIDATE 0x0010
3925 #define PCI_ENABLE_VGA_COMPATIBLE_PALETTE 0x0020
3926 #define PCI_ENABLE_PARITY 0x0040
3927 #define PCI_ENABLE_WAIT_CYCLE 0x0080
3928 #define PCI_ENABLE_SERR 0x0100
3929 #define PCI_ENABLE_FAST_BACK_TO_BACK 0x0200
3931 /* PCI_COMMON_CONFIG.Status */
3933 #define PCI_STATUS_CAPABILITIES_LIST 0x0010
3934 #define PCI_STATUS_66MHZ_CAPABLE 0x0020
3935 #define PCI_STATUS_UDF_SUPPORTED 0x0040
3936 #define PCI_STATUS_FAST_BACK_TO_BACK 0x0080
3937 #define PCI_STATUS_DATA_PARITY_DETECTED 0x0100
3938 #define PCI_STATUS_DEVSEL 0x0600
3939 #define PCI_STATUS_SIGNALED_TARGET_ABORT 0x0800
3940 #define PCI_STATUS_RECEIVED_TARGET_ABORT 0x1000
3941 #define PCI_STATUS_RECEIVED_MASTER_ABORT 0x2000
3942 #define PCI_STATUS_SIGNALED_SYSTEM_ERROR 0x4000
3943 #define PCI_STATUS_DETECTED_PARITY_ERROR 0x8000
3945 /* PCI_COMMON_CONFIG.HeaderType */
3947 #define PCI_MULTIFUNCTION 0x80
3948 #define PCI_DEVICE_TYPE 0x00
3949 #define PCI_BRIDGE_TYPE 0x01
3950 #define PCI_CARDBUS_BRIDGE_TYPE 0x02
3952 #define PCI_CONFIGURATION_TYPE(PciData) \
3953 (((PPCI_COMMON_CONFIG) (PciData))->HeaderType & ~PCI_MULTIFUNCTION)
3955 #define PCI_MULTIFUNCTION_DEVICE(PciData) \
3956 ((((PPCI_COMMON_CONFIG) (PciData))->HeaderType & PCI_MULTIFUNCTION) != 0)
3958 /* PCI device classes */
3960 #define PCI_CLASS_PRE_20 0x00
3961 #define PCI_CLASS_MASS_STORAGE_CTLR 0x01
3962 #define PCI_CLASS_NETWORK_CTLR 0x02
3963 #define PCI_CLASS_DISPLAY_CTLR 0x03
3964 #define PCI_CLASS_MULTIMEDIA_DEV 0x04
3965 #define PCI_CLASS_MEMORY_CTLR 0x05
3966 #define PCI_CLASS_BRIDGE_DEV 0x06
3967 #define PCI_CLASS_SIMPLE_COMMS_CTLR 0x07
3968 #define PCI_CLASS_BASE_SYSTEM_DEV 0x08
3969 #define PCI_CLASS_INPUT_DEV 0x09
3970 #define PCI_CLASS_DOCKING_STATION 0x0a
3971 #define PCI_CLASS_PROCESSOR 0x0b
3972 #define PCI_CLASS_SERIAL_BUS_CTLR 0x0c
3974 /* PCI device subclasses for class 0 */
3976 #define PCI_SUBCLASS_PRE_20_NON_VGA 0x00
3977 #define PCI_SUBCLASS_PRE_20_VGA 0x01
3979 /* PCI device subclasses for class 1 (mass storage controllers)*/
3981 #define PCI_SUBCLASS_MSC_SCSI_BUS_CTLR 0x00
3982 #define PCI_SUBCLASS_MSC_IDE_CTLR 0x01
3983 #define PCI_SUBCLASS_MSC_FLOPPY_CTLR 0x02
3984 #define PCI_SUBCLASS_MSC_IPI_CTLR 0x03
3985 #define PCI_SUBCLASS_MSC_RAID_CTLR 0x04
3986 #define PCI_SUBCLASS_MSC_OTHER 0x80
3988 /* PCI device subclasses for class 2 (network controllers)*/
3990 #define PCI_SUBCLASS_NET_ETHERNET_CTLR 0x00
3991 #define PCI_SUBCLASS_NET_TOKEN_RING_CTLR 0x01
3992 #define PCI_SUBCLASS_NET_FDDI_CTLR 0x02
3993 #define PCI_SUBCLASS_NET_ATM_CTLR 0x03
3994 #define PCI_SUBCLASS_NET_OTHER 0x80
3996 /* PCI device subclasses for class 3 (display controllers)*/
3998 #define PCI_SUBCLASS_VID_VGA_CTLR 0x00
3999 #define PCI_SUBCLASS_VID_XGA_CTLR 0x01
4000 #define PCI_SUBCLASS_VID_3D_CTLR 0x02
4001 #define PCI_SUBCLASS_VID_OTHER 0x80
4003 /* PCI device subclasses for class 4 (multimedia device)*/
4005 #define PCI_SUBCLASS_MM_VIDEO_DEV 0x00
4006 #define PCI_SUBCLASS_MM_AUDIO_DEV 0x01
4007 #define PCI_SUBCLASS_MM_TELEPHONY_DEV 0x02
4008 #define PCI_SUBCLASS_MM_OTHER 0x80
4010 /* PCI device subclasses for class 5 (memory controller)*/
4012 #define PCI_SUBCLASS_MEM_RAM 0x00
4013 #define PCI_SUBCLASS_MEM_FLASH 0x01
4014 #define PCI_SUBCLASS_MEM_OTHER 0x80
4016 /* PCI device subclasses for class 6 (bridge device)*/
4018 #define PCI_SUBCLASS_BR_HOST 0x00
4019 #define PCI_SUBCLASS_BR_ISA 0x01
4020 #define PCI_SUBCLASS_BR_EISA 0x02
4021 #define PCI_SUBCLASS_BR_MCA 0x03
4022 #define PCI_SUBCLASS_BR_PCI_TO_PCI 0x04
4023 #define PCI_SUBCLASS_BR_PCMCIA 0x05
4024 #define PCI_SUBCLASS_BR_NUBUS 0x06
4025 #define PCI_SUBCLASS_BR_CARDBUS 0x07
4026 #define PCI_SUBCLASS_BR_OTHER 0x80
4028 /* PCI device subclasses for class C (serial bus controller)*/
4030 #define PCI_SUBCLASS_SB_IEEE1394 0x00
4031 #define PCI_SUBCLASS_SB_ACCESS 0x01
4032 #define PCI_SUBCLASS_SB_SSA 0x02
4033 #define PCI_SUBCLASS_SB_USB 0x03
4034 #define PCI_SUBCLASS_SB_FIBRE_CHANNEL 0x04
4035 #define PCI_SUBCLASS_SB_SMBUS 0x05
4037 #define PCI_MAX_DEVICES 32
4038 #define PCI_MAX_FUNCTION 8
4039 #define PCI_MAX_BRIDGE_NUMBER 0xFF
4040 #define PCI_INVALID_VENDORID 0xFFFF
4041 #define PCI_COMMON_HDR_LENGTH (FIELD_OFFSET(PCI_COMMON_CONFIG, DeviceSpecific))
4043 #define PCI_ADDRESS_MEMORY_SPACE 0x00000000
4044 #define PCI_ADDRESS_IO_SPACE 0x00000001
4045 #define PCI_ADDRESS_MEMORY_TYPE_MASK 0x00000006
4046 #define PCI_ADDRESS_MEMORY_PREFETCHABLE 0x00000008
4047 #define PCI_ADDRESS_IO_ADDRESS_MASK 0xfffffffc
4048 #define PCI_ADDRESS_MEMORY_ADDRESS_MASK 0xfffffff0
4049 #define PCI_ADDRESS_ROM_ADDRESS_MASK 0xfffff800
4051 #define PCI_TYPE_32BIT 0
4052 #define PCI_TYPE_20BIT 2
4053 #define PCI_TYPE_64BIT 4
4055 typedef struct _PCI_SLOT_NUMBER
{
4058 ULONG DeviceNumber
: 5;
4059 ULONG FunctionNumber
: 3;
4060 ULONG Reserved
: 24;
4064 } PCI_SLOT_NUMBER
, *PPCI_SLOT_NUMBER
;
4066 #define POOL_COLD_ALLOCATION 256
4067 #define POOL_QUOTA_FAIL_INSTEAD_OF_RAISE 8
4068 #define POOL_RAISE_IF_ALLOCATION_FAILURE 16
4070 typedef struct _OSVERSIONINFOA
{
4071 ULONG dwOSVersionInfoSize
;
4072 ULONG dwMajorVersion
;
4073 ULONG dwMinorVersion
;
4074 ULONG dwBuildNumber
;
4076 CHAR szCSDVersion
[128];
4077 } OSVERSIONINFOA
, *POSVERSIONINFOA
, *LPOSVERSIONINFOA
;
4079 typedef struct _OSVERSIONINFOW
{
4080 ULONG dwOSVersionInfoSize
;
4081 ULONG dwMajorVersion
;
4082 ULONG dwMinorVersion
;
4083 ULONG dwBuildNumber
;
4085 WCHAR szCSDVersion
[128];
4086 } OSVERSIONINFOW
, *POSVERSIONINFOW
, *LPOSVERSIONINFOW
, RTL_OSVERSIONINFOW
, *PRTL_OSVERSIONINFOW
;
4089 typedef OSVERSIONINFOW OSVERSIONINFO
;
4090 typedef POSVERSIONINFOW POSVERSIONINFO
;
4091 typedef LPOSVERSIONINFOW LPOSVERSIONINFO
;
4093 typedef OSVERSIONINFOA OSVERSIONINFO
;
4094 typedef POSVERSIONINFOA POSVERSIONINFO
;
4095 typedef LPOSVERSIONINFOA LPOSVERSIONINFO
;
4098 typedef struct _OSVERSIONINFOEXA
{
4099 ULONG dwOSVersionInfoSize
;
4100 ULONG dwMajorVersion
;
4101 ULONG dwMinorVersion
;
4102 ULONG dwBuildNumber
;
4104 CHAR szCSDVersion
[128];
4105 USHORT wServicePackMajor
;
4106 USHORT wServicePackMinor
;
4110 } OSVERSIONINFOEXA
, *POSVERSIONINFOEXA
, *LPOSVERSIONINFOEXA
;
4112 typedef struct _OSVERSIONINFOEXW
{
4113 ULONG dwOSVersionInfoSize
;
4114 ULONG dwMajorVersion
;
4115 ULONG dwMinorVersion
;
4116 ULONG dwBuildNumber
;
4118 WCHAR szCSDVersion
[128];
4119 USHORT wServicePackMajor
;
4120 USHORT wServicePackMinor
;
4124 } OSVERSIONINFOEXW
, *POSVERSIONINFOEXW
, *LPOSVERSIONINFOEXW
, RTL_OSVERSIONINFOEXW
, *PRTL_OSVERSIONINFOEXW
;
4127 typedef OSVERSIONINFOEXW OSVERSIONINFOEX
;
4128 typedef POSVERSIONINFOEXW POSVERSIONINFOEX
;
4129 typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX
;
4131 typedef OSVERSIONINFOEXA OSVERSIONINFOEX
;
4132 typedef POSVERSIONINFOEXA POSVERSIONINFOEX
;
4133 typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX
;
4139 VerSetConditionMask(
4140 IN ULONGLONG ConditionMask
,
4142 IN UCHAR Condition
);
4144 #define VER_SET_CONDITION(ConditionMask, TypeBitMask, ComparisonType) \
4145 ((ConditionMask) = VerSetConditionMask((ConditionMask), \
4146 (TypeBitMask), (ComparisonType)))
4148 /* RtlVerifyVersionInfo() TypeMask */
4150 #define VER_MINORVERSION 0x0000001
4151 #define VER_MAJORVERSION 0x0000002
4152 #define VER_BUILDNUMBER 0x0000004
4153 #define VER_PLATFORMID 0x0000008
4154 #define VER_SERVICEPACKMINOR 0x0000010
4155 #define VER_SERVICEPACKMAJOR 0x0000020
4156 #define VER_SUITENAME 0x0000040
4157 #define VER_PRODUCT_TYPE 0x0000080
4159 /* RtlVerifyVersionInfo() ComparisonType */
4162 #define VER_GREATER 2
4163 #define VER_GREATER_EQUAL 3
4165 #define VER_LESS_EQUAL 5
4169 #define VER_CONDITION_MASK 7
4170 #define VER_NUM_BITS_PER_CONDITION_MASK 3
4175 (NTAPI
*PRTL_CONFLICT_RANGE_CALLBACK
) (
4177 struct _RTL_RANGE
*Range
4180 typedef enum _EVENT_TYPE
{
4182 SynchronizationEvent
4185 typedef enum _KWAIT_REASON
{
4223 typedef struct _KWAIT_BLOCK
{
4224 LIST_ENTRY WaitListEntry
;
4225 struct _KTHREAD
* RESTRICTED_POINTER Thread
;
4227 struct _KWAIT_BLOCK
* RESTRICTED_POINTER NextWaitBlock
;
4231 } KWAIT_BLOCK
, *PKWAIT_BLOCK
, *RESTRICTED_POINTER PRKWAIT_BLOCK
;
4233 typedef struct _IO_REMOVE_LOCK_TRACKING_BLOCK
* PIO_REMOVE_LOCK_TRACKING_BLOCK
;
4235 typedef struct _IO_REMOVE_LOCK_COMMON_BLOCK
{
4237 BOOLEAN Reserved
[3];
4238 volatile LONG IoCount
;
4240 } IO_REMOVE_LOCK_COMMON_BLOCK
;
4242 typedef struct _IO_REMOVE_LOCK_DBG_BLOCK
{
4245 LONGLONG MaxLockedTicks
;
4247 LIST_ENTRY LockList
;
4249 volatile LONG LowMemoryCount
;
4252 PIO_REMOVE_LOCK_TRACKING_BLOCK Blocks
;
4253 } IO_REMOVE_LOCK_DBG_BLOCK
;
4255 typedef struct _IO_REMOVE_LOCK
{
4256 IO_REMOVE_LOCK_COMMON_BLOCK Common
;
4258 IO_REMOVE_LOCK_DBG_BLOCK Dbg
;
4260 } IO_REMOVE_LOCK
, *PIO_REMOVE_LOCK
;
4262 typedef struct _IO_WORKITEM
*PIO_WORKITEM
;
4265 (DDKAPI IO_WORKITEM_ROUTINE
)(
4266 IN PDEVICE_OBJECT DeviceObject
,
4268 typedef IO_WORKITEM_ROUTINE
*PIO_WORKITEM_ROUTINE
;
4270 typedef struct _SHARE_ACCESS
{
4278 } SHARE_ACCESS
, *PSHARE_ACCESS
;
4280 typedef enum _KINTERRUPT_MODE
{
4285 #define THREAD_WAIT_OBJECTS 3
4288 (DDKAPI
*PKINTERRUPT_ROUTINE
)(
4291 typedef enum _CREATE_FILE_TYPE
{
4293 CreateFileTypeNamedPipe
,
4294 CreateFileTypeMailslot
4297 typedef struct _CONFIGURATION_INFORMATION
{
4302 ULONG ScsiPortCount
;
4304 ULONG ParallelCount
;
4305 BOOLEAN AtDiskPrimaryAddressClaimed
;
4306 BOOLEAN AtDiskSecondaryAddressClaimed
;
4308 ULONG MediumChangerCount
;
4309 } CONFIGURATION_INFORMATION
, *PCONFIGURATION_INFORMATION
;
4311 typedef enum _CONFIGURATION_TYPE
{
4314 FloatingPointProcessor
,
4324 MultiFunctionAdapter
,
4338 FloppyDiskPeripheral
,
4351 RealModeIrqRoutingTable
,
4352 RealModePCIEnumeration
,
4354 } CONFIGURATION_TYPE
, *PCONFIGURATION_TYPE
;
4356 #define IO_FORCE_ACCESS_CHECK 0x001
4357 #define IO_NO_PARAMETER_CHECKING 0x100
4359 #define IO_REPARSE 0x0
4360 #define IO_REMOUNT 0x1
4363 (DDKAPI
*PIO_QUERY_DEVICE_ROUTINE
)(
4365 IN PUNICODE_STRING PathName
,
4366 IN INTERFACE_TYPE BusType
,
4368 IN PKEY_VALUE_FULL_INFORMATION
*BusInformation
,
4369 IN CONFIGURATION_TYPE ControllerType
,
4370 IN ULONG ControllerNumber
,
4371 IN PKEY_VALUE_FULL_INFORMATION
*ControllerInformation
,
4372 IN CONFIGURATION_TYPE PeripheralType
,
4373 IN ULONG PeripheralNumber
,
4374 IN PKEY_VALUE_FULL_INFORMATION
*PeripheralInformation
);
4376 typedef enum _IO_QUERY_DEVICE_DATA_FORMAT
{
4377 IoQueryDeviceIdentifier
= 0,
4378 IoQueryDeviceConfigurationData
,
4379 IoQueryDeviceComponentInformation
,
4380 IoQueryDeviceMaxData
4381 } IO_QUERY_DEVICE_DATA_FORMAT
, *PIO_QUERY_DEVICE_DATA_FORMAT
;
4383 typedef enum _KBUGCHECK_CALLBACK_REASON
{
4385 KbCallbackReserved1
,
4386 KbCallbackSecondaryDumpData
,
4388 } KBUGCHECK_CALLBACK_REASON
;
4390 struct _KBUGCHECK_REASON_CALLBACK_RECORD
;
4393 (DDKAPI
*PKBUGCHECK_REASON_CALLBACK_ROUTINE
)(
4394 IN KBUGCHECK_CALLBACK_REASON Reason
,
4395 IN
struct _KBUGCHECK_REASON_CALLBACK_RECORD
*Record
,
4396 IN OUT PVOID ReasonSpecificData
,
4397 IN ULONG ReasonSpecificDataLength
);
4399 typedef struct _KBUGCHECK_REASON_CALLBACK_RECORD
{
4401 PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine
;
4404 KBUGCHECK_CALLBACK_REASON Reason
;
4406 } KBUGCHECK_REASON_CALLBACK_RECORD
, *PKBUGCHECK_REASON_CALLBACK_RECORD
;
4408 typedef enum _KBUGCHECK_BUFFER_DUMP_STATE
{
4414 } KBUGCHECK_BUFFER_DUMP_STATE
;
4417 (DDKAPI
*PKBUGCHECK_CALLBACK_ROUTINE
)(
4421 typedef struct _KBUGCHECK_CALLBACK_RECORD
{
4423 PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine
;
4429 } KBUGCHECK_CALLBACK_RECORD
, *PKBUGCHECK_CALLBACK_RECORD
;
4432 (DDKAPI
*PNMI_CALLBACK
)(
4434 IN BOOLEAN Handled
);
4438 * KeInitializeCallbackRecord(
4439 * IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord)
4441 #define KeInitializeCallbackRecord(CallbackRecord) \
4442 CallbackRecord->State = BufferEmpty;
4444 typedef enum _KDPC_IMPORTANCE
{
4450 typedef enum _MEMORY_CACHING_TYPE_ORIG
{
4451 MmFrameBufferCached
= 2
4452 } MEMORY_CACHING_TYPE_ORIG
;
4454 typedef enum _MEMORY_CACHING_TYPE
{
4455 MmNonCached
= FALSE
,
4457 MmWriteCombined
= MmFrameBufferCached
,
4458 MmHardwareCoherentCached
,
4459 MmNonCachedUnordered
,
4462 } MEMORY_CACHING_TYPE
;
4464 typedef enum _MM_PAGE_PRIORITY
{
4466 NormalPagePriority
= 16,
4467 HighPagePriority
= 32
4470 typedef enum _LOCK_OPERATION
{
4476 #define FLUSH_MULTIPLE_MAXIMUM 32
4478 typedef enum _MM_SYSTEM_SIZE
{
4484 typedef struct _OBJECT_HANDLE_INFORMATION
{
4485 ULONG HandleAttributes
;
4486 ACCESS_MASK GrantedAccess
;
4487 } OBJECT_HANDLE_INFORMATION
, *POBJECT_HANDLE_INFORMATION
;
4489 typedef struct _CLIENT_ID
{
4490 HANDLE UniqueProcess
;
4491 HANDLE UniqueThread
;
4492 } CLIENT_ID
, *PCLIENT_ID
;
4495 (DDKAPI
*PKSTART_ROUTINE
)(
4496 IN PVOID StartContext
);
4499 (DDKAPI
*PCREATE_PROCESS_NOTIFY_ROUTINE
)(
4501 IN HANDLE ProcessId
,
4505 (DDKAPI
*PCREATE_THREAD_NOTIFY_ROUTINE
)(
4506 IN HANDLE ProcessId
,
4510 typedef struct _IMAGE_INFO
{
4511 _ANONYMOUS_UNION
union {
4513 _ANONYMOUS_STRUCT
struct {
4514 ULONG ImageAddressingMode
: 8;
4515 ULONG SystemModeImage
: 1;
4516 ULONG ImageMappedToAllPids
: 1;
4517 ULONG Reserved
: 22;
4521 ULONG ImageSelector
;
4523 ULONG ImageSectionNumber
;
4524 } IMAGE_INFO
, *PIMAGE_INFO
;
4526 #define IMAGE_ADDRESSING_MODE_32BIT 3
4529 (DDKAPI
*PLOAD_IMAGE_NOTIFY_ROUTINE
)(
4530 IN PUNICODE_STRING FullImageName
,
4531 IN HANDLE ProcessId
,
4532 IN PIMAGE_INFO ImageInfo
);
4534 #pragma pack(push,4)
4535 typedef enum _BUS_DATA_TYPE
{
4536 ConfigurationSpaceUndefined
= -1,
4544 PCMCIAConfiguration
,
4547 PNPISAConfiguration
,
4548 SgiInternalConfiguration
,
4550 } BUS_DATA_TYPE
, *PBUS_DATA_TYPE
;
4553 typedef struct _NT_TIB
{
4554 struct _EXCEPTION_REGISTRATION_RECORD
*ExceptionList
;
4558 _ANONYMOUS_UNION
union {
4562 PVOID ArbitraryUserPointer
;
4563 struct _NT_TIB
*Self
;
4566 typedef struct _NT_TIB32
{
4567 ULONG ExceptionList
;
4571 __GNU_EXTENSION
union {
4575 ULONG ArbitraryUserPointer
;
4577 } NT_TIB32
,*PNT_TIB32
;
4579 typedef struct _NT_TIB64
{
4580 ULONG64 ExceptionList
;
4583 ULONG64 SubSystemTib
;
4584 __GNU_EXTENSION
union {
4588 ULONG64 ArbitraryUserPointer
;
4590 } NT_TIB64
,*PNT_TIB64
;
4592 typedef enum _PROCESSINFOCLASS
{
4593 ProcessBasicInformation
,
4598 ProcessBasePriority
,
4599 ProcessRaisePriority
,
4601 ProcessExceptionPort
,
4603 ProcessLdtInformation
,
4605 ProcessDefaultHardErrorMode
,
4606 ProcessIoPortHandlers
,
4607 ProcessPooledUsageAndLimits
,
4608 ProcessWorkingSetWatch
,
4609 ProcessUserModeIOPL
,
4610 ProcessEnableAlignmentFaultFixup
,
4611 ProcessPriorityClass
,
4612 ProcessWx86Information
,
4614 ProcessAffinityMask
,
4615 ProcessPriorityBoost
,
4617 ProcessSessionInformation
,
4618 ProcessForegroundInformation
,
4619 ProcessWow64Information
,
4620 ProcessImageFileName
,
4621 ProcessLUIDDeviceMapsEnabled
,
4622 ProcessBreakOnTermination
,
4623 ProcessDebugObjectHandle
,
4625 ProcessHandleTracing
,
4627 ProcessExecuteFlags
,
4628 ProcessTlsInformation
,
4630 ProcessImageInformation
,
4632 ProcessPagePriority
,
4633 ProcessInstrumentationCallback
,
4637 typedef enum _THREADINFOCLASS
{
4638 ThreadBasicInformation
,
4643 ThreadImpersonationToken
,
4644 ThreadDescriptorTableEntry
,
4645 ThreadEnableAlignmentFaultFixup
,
4646 ThreadEventPair_Reusable
,
4647 ThreadQuerySetWin32StartAddress
,
4649 ThreadPerformanceCount
,
4650 ThreadAmILastThread
,
4651 ThreadIdealProcessor
,
4652 ThreadPriorityBoost
,
4653 ThreadSetTlsArrayAddress
,
4655 ThreadHideFromDebugger
,
4656 ThreadBreakOnTermination
,
4657 ThreadSwitchLegacyState
,
4659 ThreadLastSystemCall
,
4663 ThreadActualBasePriority
,
4667 typedef struct _PROCESS_BASIC_INFORMATION
4669 NTSTATUS ExitStatus
;
4670 struct _PEB
*PebBaseAddress
;
4671 ULONG_PTR AffinityMask
;
4672 KPRIORITY BasePriority
;
4673 ULONG_PTR UniqueProcessId
;
4674 ULONG_PTR InheritedFromUniqueProcessId
;
4675 } PROCESS_BASIC_INFORMATION
,*PPROCESS_BASIC_INFORMATION
;
4677 typedef struct _PROCESS_WS_WATCH_INFORMATION
4681 } PROCESS_WS_WATCH_INFORMATION
, *PPROCESS_WS_WATCH_INFORMATION
;
4683 typedef struct _PROCESS_DEVICEMAP_INFORMATION
4685 __GNU_EXTENSION
union
4689 HANDLE DirectoryHandle
;
4694 UCHAR DriveType
[32];
4697 } PROCESS_DEVICEMAP_INFORMATION
, *PPROCESS_DEVICEMAP_INFORMATION
;
4699 typedef struct _KERNEL_USER_TIMES
4701 LARGE_INTEGER CreateTime
;
4702 LARGE_INTEGER ExitTime
;
4703 LARGE_INTEGER KernelTime
;
4704 LARGE_INTEGER UserTime
;
4705 } KERNEL_USER_TIMES
, *PKERNEL_USER_TIMES
;
4707 typedef struct _PROCESS_ACCESS_TOKEN
4711 } PROCESS_ACCESS_TOKEN
, *PPROCESS_ACCESS_TOKEN
;
4713 typedef struct _PROCESS_SESSION_INFORMATION
4716 } PROCESS_SESSION_INFORMATION
, *PPROCESS_SESSION_INFORMATION
;
4719 (DDKAPI
*PREQUEST_POWER_COMPLETE
)(
4720 IN PDEVICE_OBJECT DeviceObject
,
4721 IN UCHAR MinorFunction
,
4722 IN POWER_STATE PowerState
,
4724 IN PIO_STATUS_BLOCK IoStatus
);
4726 typedef enum _TRACE_INFORMATION_CLASS
{
4729 TraceEnableFlagsClass
,
4730 TraceEnableLevelClass
,
4731 GlobalLoggerHandleClass
,
4732 EventLoggerHandleClass
,
4733 AllLoggerHandlesClass
,
4734 TraceHandleByNameClass
4735 } TRACE_INFORMATION_CLASS
;
4737 typedef enum _REG_NOTIFY_CLASS
4740 RegNtPreDeleteKey
= RegNtDeleteKey
,
4742 RegNtPreSetValueKey
= RegNtSetValueKey
,
4743 RegNtDeleteValueKey
,
4744 RegNtPreDeleteValueKey
= RegNtDeleteValueKey
,
4745 RegNtSetInformationKey
,
4746 RegNtPreSetInformationKey
= RegNtSetInformationKey
,
4748 RegNtPreRenameKey
= RegNtRenameKey
,
4750 RegNtPreEnumerateKey
= RegNtEnumerateKey
,
4751 RegNtEnumerateValueKey
,
4752 RegNtPreEnumerateValueKey
= RegNtEnumerateValueKey
,
4754 RegNtPreQueryKey
= RegNtQueryKey
,
4756 RegNtPreQueryValueKey
= RegNtQueryValueKey
,
4757 RegNtQueryMultipleValueKey
,
4758 RegNtPreQueryMultipleValueKey
= RegNtQueryMultipleValueKey
,
4763 RegNtKeyHandleClose
,
4764 RegNtPreKeyHandleClose
= RegNtKeyHandleClose
,
4766 RegNtPostSetValueKey
,
4767 RegNtPostDeleteValueKey
,
4768 RegNtPostSetInformationKey
,
4770 RegNtPostEnumerateKey
,
4771 RegNtPostEnumerateValueKey
,
4773 RegNtPostQueryValueKey
,
4774 RegNtPostQueryMultipleValueKey
,
4775 RegNtPostKeyHandleClose
,
4776 RegNtPreCreateKeyEx
,
4777 RegNtPostCreateKeyEx
,
4780 } REG_NOTIFY_CLASS
, *PREG_NOTIFY_CLASS
;
4783 (NTAPI
*PEX_CALLBACK_FUNCTION
)(
4784 IN PVOID CallbackContext
,
4789 typedef struct _REG_DELETE_KEY_INFORMATION
4792 } REG_DELETE_KEY_INFORMATION
, *PREG_DELETE_KEY_INFORMATION
;
4794 typedef struct _REG_SET_VALUE_KEY_INFORMATION
4797 PUNICODE_STRING ValueName
;
4802 } REG_SET_VALUE_KEY_INFORMATION
, *PREG_SET_VALUE_KEY_INFORMATION
;
4804 typedef struct _REG_DELETE_VALUE_KEY_INFORMATION
4807 PUNICODE_STRING ValueName
;
4808 } REG_DELETE_VALUE_KEY_INFORMATION
, *PREG_DELETE_VALUE_KEY_INFORMATION
;
4810 typedef struct _REG_SET_INFORMATION_KEY_INFORMATION
4813 KEY_SET_INFORMATION_CLASS KeySetInformationClass
;
4814 PVOID KeySetInformation
;
4815 ULONG KeySetInformationLength
;
4816 } REG_SET_INFORMATION_KEY_INFORMATION
, *PREG_SET_INFORMATION_KEY_INFORMATION
;
4818 typedef struct _REG_ENUMERATE_KEY_INFORMATION
4822 KEY_INFORMATION_CLASS KeyInformationClass
;
4823 PVOID KeyInformation
;
4825 PULONG ResultLength
;
4826 } REG_ENUMERATE_KEY_INFORMATION
, *PREG_ENUMERATE_KEY_INFORMATION
;
4828 typedef struct _REG_ENUMERATE_VALUE_KEY_INFORMATION
4832 KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
;
4833 PVOID KeyValueInformation
;
4835 PULONG ResultLength
;
4836 } REG_ENUMERATE_VALUE_KEY_INFORMATION
, *PREG_ENUMERATE_VALUE_KEY_INFORMATION
;
4838 typedef struct _REG_QUERY_KEY_INFORMATION
4841 KEY_INFORMATION_CLASS KeyInformationClass
;
4842 PVOID KeyInformation
;
4844 PULONG ResultLength
;
4845 } REG_QUERY_KEY_INFORMATION
, *PREG_QUERY_KEY_INFORMATION
;
4847 typedef struct _REG_QUERY_VALUE_KEY_INFORMATION
4850 PUNICODE_STRING ValueName
;
4851 KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
;
4852 PVOID KeyValueInformation
;
4854 PULONG ResultLength
;
4855 } REG_QUERY_VALUE_KEY_INFORMATION
, *PREG_QUERY_VALUE_KEY_INFORMATION
;
4857 typedef struct _REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION
4860 PKEY_VALUE_ENTRY ValueEntries
;
4863 PULONG BufferLength
;
4864 PULONG RequiredBufferLength
;
4865 } REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION
, *PREG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION
;
4867 typedef struct _REG_PRE_CREATE_KEY_INFORMATION
4869 PUNICODE_STRING CompleteName
;
4870 } REG_PRE_CREATE_KEY_INFORMATION
, *PREG_PRE_CREATE_KEY_INFORMATION
;
4872 typedef struct _REG_POST_CREATE_KEY_INFORMATION
4874 PUNICODE_STRING CompleteName
;
4877 } REG_POST_CREATE_KEY_INFORMATION
, *PREG_POST_CREATE_KEY_INFORMATION
;
4879 typedef struct _REG_PRE_OPEN_KEY_INFORMATION
4881 PUNICODE_STRING CompleteName
;
4882 } REG_PRE_OPEN_KEY_INFORMATION
, *PREG_PRE_OPEN_KEY_INFORMATION
;
4884 typedef struct _REG_POST_OPEN_KEY_INFORMATION
4886 PUNICODE_STRING CompleteName
;
4889 } REG_POST_OPEN_KEY_INFORMATION
, *PREG_POST_OPEN_KEY_INFORMATION
;
4891 typedef struct _REG_POST_OPERATION_INFORMATION
4895 } REG_POST_OPERATION_INFORMATION
,*PREG_POST_OPERATION_INFORMATION
;
4897 typedef struct _REG_KEY_HANDLE_CLOSE_INFORMATION
4900 } REG_KEY_HANDLE_CLOSE_INFORMATION
, *PREG_KEY_HANDLE_CLOSE_INFORMATION
;
4903 ** Storage structures
4905 typedef enum _PARTITION_STYLE
{
4906 PARTITION_STYLE_MBR
,
4907 PARTITION_STYLE_GPT
,
4911 typedef struct _CREATE_DISK_MBR
{
4913 } CREATE_DISK_MBR
, *PCREATE_DISK_MBR
;
4915 typedef struct _CREATE_DISK_GPT
{
4917 ULONG MaxPartitionCount
;
4918 } CREATE_DISK_GPT
, *PCREATE_DISK_GPT
;
4920 typedef struct _CREATE_DISK
{
4921 PARTITION_STYLE PartitionStyle
;
4922 _ANONYMOUS_UNION
union {
4923 CREATE_DISK_MBR Mbr
;
4924 CREATE_DISK_GPT Gpt
;
4926 } CREATE_DISK
, *PCREATE_DISK
;
4928 typedef struct _DISK_SIGNATURE
{
4929 ULONG PartitionStyle
;
4930 _ANONYMOUS_UNION
union {
4939 } DISK_SIGNATURE
, *PDISK_SIGNATURE
;
4942 (FASTCALL
*PTIME_UPDATE_NOTIFY_ROUTINE
)(
4944 IN KPROCESSOR_MODE Mode
);
4946 #define DBG_STATUS_CONTROL_C 1
4947 #define DBG_STATUS_SYSRQ 2
4948 #define DBG_STATUS_BUGCHECK_FIRST 3
4949 #define DBG_STATUS_BUGCHECK_SECOND 4
4950 #define DBG_STATUS_FATAL 5
4951 #define DBG_STATUS_DEBUG_CONTROL 6
4952 #define DBG_STATUS_WORKER 7
4954 typedef struct _PHYSICAL_MEMORY_RANGE
{
4955 PHYSICAL_ADDRESS BaseAddress
;
4956 LARGE_INTEGER NumberOfBytes
;
4957 } PHYSICAL_MEMORY_RANGE
, *PPHYSICAL_MEMORY_RANGE
;
4960 (NTAPI
*PDRIVER_VERIFIER_THUNK_ROUTINE
)(
4963 typedef struct _DRIVER_VERIFIER_THUNK_PAIRS
{
4964 PDRIVER_VERIFIER_THUNK_ROUTINE PristineRoutine
;
4965 PDRIVER_VERIFIER_THUNK_ROUTINE NewRoutine
;
4966 } DRIVER_VERIFIER_THUNK_PAIRS
, *PDRIVER_VERIFIER_THUNK_PAIRS
;
4968 #define DRIVER_VERIFIER_SPECIAL_POOLING 0x0001
4969 #define DRIVER_VERIFIER_FORCE_IRQL_CHECKING 0x0002
4970 #define DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES 0x0004
4971 #define DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS 0x0008
4972 #define DRIVER_VERIFIER_IO_CHECKING 0x0010
4974 #define HASH_STRING_ALGORITHM_DEFAULT 0
4975 #define HASH_STRING_ALGORITHM_X65599 1
4976 #define HASH_STRING_ALGORITHM_INVALID 0xffffffff
4979 (DDKAPI
*PTIMER_APC_ROUTINE
)(
4980 IN PVOID TimerContext
,
4981 IN ULONG TimerLowValue
,
4982 IN LONG TimerHighValue
);
4991 (DDKAPI
*WMI_NOTIFICATION_CALLBACK
)(
4997 ** Architecture specific structures
4999 #define PCR_MINOR_VERSION 1
5000 #define PCR_MAJOR_VERSION 1
5004 #define SIZE_OF_80387_REGISTERS 80
5005 #define CONTEXT_i386 0x10000
5006 #define CONTEXT_i486 0x10000
5007 #define CONTEXT_CONTROL (CONTEXT_i386|0x00000001L)
5008 #define CONTEXT_INTEGER (CONTEXT_i386|0x00000002L)
5009 #define CONTEXT_SEGMENTS (CONTEXT_i386|0x00000004L)
5010 #define CONTEXT_FLOATING_POINT (CONTEXT_i386|0x00000008L)
5011 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386|0x00000010L)
5012 #define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386|0x00000020L)
5013 #define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS)
5014 #define MAXIMUM_SUPPORTED_EXTENSION 512
5016 typedef struct _FLOATING_SAVE_AREA
{
5021 ULONG ErrorSelector
;
5024 UCHAR RegisterArea
[SIZE_OF_80387_REGISTERS
];
5026 } FLOATING_SAVE_AREA
, *PFLOATING_SAVE_AREA
;
5028 typedef struct _CONTEXT
{
5036 FLOATING_SAVE_AREA FloatSave
;
5053 UCHAR ExtendedRegisters
[MAXIMUM_SUPPORTED_EXTENSION
];
5057 // Used to contain PFNs and PFN counts
5059 typedef ULONG PFN_COUNT
;
5060 typedef ULONG PFN_NUMBER
, *PPFN_NUMBER
;
5061 typedef LONG SPFN_NUMBER
, *PSPFN_NUMBER
;
5063 #define PASSIVE_LEVEL 0
5066 #define DISPATCH_LEVEL 2
5067 #define PROFILE_LEVEL 27
5068 #define CLOCK1_LEVEL 28
5069 #define CLOCK2_LEVEL 28
5070 #define IPI_LEVEL 29
5071 #define POWER_LEVEL 30
5072 #define HIGH_LEVEL 31
5074 typedef struct _KPCR_TIB
{
5075 PVOID ExceptionList
; /* 00 */
5076 PVOID StackBase
; /* 04 */
5077 PVOID StackLimit
; /* 08 */
5078 PVOID SubSystemTib
; /* 0C */
5079 _ANONYMOUS_UNION
union {
5080 PVOID FiberData
; /* 10 */
5081 ULONG Version
; /* 10 */
5083 PVOID ArbitraryUserPointer
; /* 14 */
5084 struct _KPCR_TIB
*Self
; /* 18 */
5085 } KPCR_TIB
, *PKPCR_TIB
; /* 1C */
5087 typedef struct _KPCR
{
5088 KPCR_TIB Tib
; /* 00 */
5089 struct _KPCR
*Self
; /* 1C */
5090 struct _KPRCB
*Prcb
; /* 20 */
5091 KIRQL Irql
; /* 24 */
5093 ULONG IrrActive
; /* 2C */
5095 PVOID KdVersionBlock
; /* 34 */
5096 PUSHORT IDT
; /* 38 */
5097 PUSHORT GDT
; /* 3C */
5098 struct _KTSS
*TSS
; /* 40 */
5099 USHORT MajorVersion
; /* 44 */
5100 USHORT MinorVersion
; /* 46 */
5101 KAFFINITY SetMember
; /* 48 */
5102 ULONG StallScaleFactor
; /* 4C */
5103 UCHAR SpareUnused
; /* 50 */
5104 UCHAR Number
; /* 51 */
5106 UCHAR SecondLevelCacheAssociativity
;
5108 ULONG KernelReserved
[14]; // For use by the kernel
5109 ULONG SecondLevelCacheSize
;
5110 ULONG HalReserved
[16]; // For use by Hal
5111 } KPCR
, *PKPCR
; /* 54 */
5113 #define KeGetPcr() PCR
5115 typedef struct _KFLOATING_SAVE
{
5119 ULONG ErrorSelector
;
5124 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
5128 KeGetCurrentProcessorNumber(VOID
)
5130 return (ULONG
)__readfsbyte(FIELD_OFFSET(KPCR
, Number
));
5145 #define KI_USER_SHARED_DATA 0xffdf0000
5147 #define PAGE_SIZE 0x1000
5148 #define PAGE_SHIFT 12L
5150 #define SharedUserData ((KUSER_SHARED_DATA * CONST) KI_USER_SHARED_DATA)
5152 extern NTKERNELAPI PVOID MmHighestUserAddress
;
5153 extern NTKERNELAPI PVOID MmSystemRangeStart
;
5154 extern NTKERNELAPI ULONG_PTR MmUserProbeAddress
;
5156 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
5157 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
5158 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
5159 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
5160 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0C00000
5162 #define MM_KSEG0_BASE MM_SYSTEM_RANGE_START
5163 #define MM_SYSTEM_SPACE_END 0xFFFFFFFF
5165 #elif defined(__x86_64__)
5167 #define CONTEXT_AMD64 0x100000
5168 #if !defined(RC_INVOKED)
5169 #define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x1L)
5170 #define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x2L)
5171 #define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x4L)
5172 #define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x8L)
5173 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x10L)
5175 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
5176 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
5178 #define CONTEXT_EXCEPTION_ACTIVE 0x8000000
5179 #define CONTEXT_SERVICE_ACTIVE 0x10000000
5180 #define CONTEXT_EXCEPTION_REQUEST 0x40000000
5181 #define CONTEXT_EXCEPTION_REPORTING 0x80000000
5184 typedef struct DECLSPEC_ALIGN(16) _M128A
{
5189 typedef struct _XMM_SAVE_AREA32
{
5196 USHORT ErrorSelector
;
5199 USHORT DataSelector
;
5203 M128A FloatRegisters
[8];
5204 M128A XmmRegisters
[16];
5205 UCHAR Reserved4
[96];
5206 } XMM_SAVE_AREA32
, *PXMM_SAVE_AREA32
;
5208 typedef struct DECLSPEC_ALIGN(16) _CONTEXT
{
5258 /* Floating point */
5260 XMM_SAVE_AREA32 FltSave
;
5284 M128A VectorRegister
[26];
5285 ULONG64 VectorControl
;
5288 ULONG64 DebugControl
;
5289 ULONG64 LastBranchToRip
;
5290 ULONG64 LastBranchFromRip
;
5291 ULONG64 LastExceptionToRip
;
5292 ULONG64 LastExceptionFromRip
;
5296 // Used to contain PFNs and PFN counts
5298 typedef ULONG PFN_COUNT
;
5299 typedef ULONG64 PFN_NUMBER
, *PPFN_NUMBER
;
5300 typedef LONG64 SPFN_NUMBER
, *PSPFN_NUMBER
;
5302 #define PASSIVE_LEVEL 0
5305 #define DISPATCH_LEVEL 2
5306 #define CLOCK_LEVEL 13
5307 #define IPI_LEVEL 14
5308 #define POWER_LEVEL 14
5309 #define PROFILE_LEVEL 15
5310 #define HIGH_LEVEL 15
5312 #define PAGE_SIZE 0x1000
5313 #define PAGE_SHIFT 12L
5314 #define PTI_SHIFT 12L
5315 #define PDI_SHIFT 21L
5316 #define PPI_SHIFT 30L
5317 #define PXI_SHIFT 39L
5318 #define PTE_PER_PAGE 512
5319 #define PDE_PER_PAGE 512
5320 #define PPE_PER_PAGE 512
5321 #define PXE_PER_PAGE 512
5322 #define PTI_MASK_AMD64 (PTE_PER_PAGE - 1)
5323 #define PDI_MASK_AMD64 (PDE_PER_PAGE - 1)
5324 #define PPI_MASK (PPE_PER_PAGE - 1)
5325 #define PXI_MASK (PXE_PER_PAGE - 1)
5327 #define PXE_BASE 0xFFFFF6FB7DBED000ULL
5328 #define PXE_SELFMAP 0xFFFFF6FB7DBEDF68ULL
5329 #define PPE_BASE 0xFFFFF6FB7DA00000ULL
5330 #define PDE_BASE 0xFFFFF6FB40000000ULL
5331 #define PTE_BASE 0xFFFFF68000000000ULL
5332 #define PXE_TOP 0xFFFFF6FB7DBEDFFFULL
5333 #define PPE_TOP 0xFFFFF6FB7DBFFFFFULL
5334 #define PDE_TOP 0xFFFFF6FB7FFFFFFFULL
5335 #define PTE_TOP 0xFFFFF6FFFFFFFFFFULL
5337 extern NTKERNELAPI PVOID MmHighestUserAddress
;
5338 extern NTKERNELAPI PVOID MmSystemRangeStart
;
5339 extern NTKERNELAPI ULONG_PTR MmUserProbeAddress
;
5341 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
5342 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
5343 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
5344 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
5345 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xFFFF080000000000ULL
5346 #define KI_USER_SHARED_DATA 0xFFFFF78000000000ULL
5348 #define SharedUserData ((PKUSER_SHARED_DATA const)KI_USER_SHARED_DATA)
5349 #define SharedInterruptTime (&SharedUserData->InterruptTime)
5350 #define SharedSystemTime (&SharedUserData->SystemTime)
5351 #define SharedTickCount (&SharedUserData->TickCount)
5353 #define KeQueryInterruptTime() \
5354 (*(volatile ULONG64*)SharedInterruptTime)
5355 #define KeQuerySystemTime(CurrentCount) \
5356 *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedSystemTime
5357 #define KeQueryTickCount(CurrentCount) \
5358 *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedTickCount
5360 typedef struct _KPCR
5362 __GNU_EXTENSION
union
5365 __GNU_EXTENSION
struct
5367 union _KGDTENTRY64
*GdtBase
;
5368 struct _KTSS64
*TssBase
;
5371 struct _KPRCB
*CurrentPrcb
;
5372 PKSPIN_LOCK_QUEUE LockArray
;
5376 union _KIDTENTRY64
*IdtBase
;
5379 UCHAR SecondLevelCacheAssociativity
;
5380 UCHAR ObsoleteNumber
;
5383 USHORT MajorVersion
;
5384 USHORT MinorVersion
;
5385 ULONG StallScaleFactor
;
5387 ULONG KernelReserved
[15];
5388 ULONG SecondLevelCacheSize
;
5389 ULONG HalReserved
[16];
5391 PVOID KdVersionBlock
;
5393 ULONG PcrAlign1
[24];
5396 typedef struct _KFLOATING_SAVE
{
5398 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
5410 return (PKPCR
)__readgsqword(FIELD_OFFSET(KPCR
, Self
));
5415 KeGetCurrentProcessorNumber(VOID
)
5417 return (ULONG
)__readgsword(0x184);
5420 #elif defined(__PowerPC__)
5423 // Used to contain PFNs and PFN counts
5425 typedef ULONG PFN_COUNT
;
5426 typedef ULONG PFN_NUMBER
, *PPFN_NUMBER
;
5427 typedef LONG SPFN_NUMBER
, *PSPFN_NUMBER
;
5429 #define PASSIVE_LEVEL 0
5432 #define DISPATCH_LEVEL 2
5433 #define PROFILE_LEVEL 27
5434 #define CLOCK1_LEVEL 28
5435 #define CLOCK2_LEVEL 28
5436 #define IPI_LEVEL 29
5437 #define POWER_LEVEL 30
5438 #define HIGH_LEVEL 31
5440 typedef struct _KFLOATING_SAVE
{
5442 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
5444 typedef struct _KPCR_TIB
{
5445 PVOID ExceptionList
; /* 00 */
5446 PVOID StackBase
; /* 04 */
5447 PVOID StackLimit
; /* 08 */
5448 PVOID SubSystemTib
; /* 0C */
5449 _ANONYMOUS_UNION
union {
5450 PVOID FiberData
; /* 10 */
5451 ULONG Version
; /* 10 */
5453 PVOID ArbitraryUserPointer
; /* 14 */
5454 struct _KPCR_TIB
*Self
; /* 18 */
5455 } KPCR_TIB
, *PKPCR_TIB
; /* 1C */
5457 #define PCR_MINOR_VERSION 1
5458 #define PCR_MAJOR_VERSION 1
5460 typedef struct _KPCR
{
5461 KPCR_TIB Tib
; /* 00 */
5462 struct _KPCR
*Self
; /* 1C */
5463 struct _KPRCB
*Prcb
; /* 20 */
5464 KIRQL Irql
; /* 24 */
5466 ULONG IrrActive
; /* 2C */
5468 PVOID KdVersionBlock
; /* 34 */
5469 PUSHORT IDT
; /* 38 */
5470 PUSHORT GDT
; /* 3C */
5471 struct _KTSS
*TSS
; /* 40 */
5472 USHORT MajorVersion
; /* 44 */
5473 USHORT MinorVersion
; /* 46 */
5474 KAFFINITY SetMember
; /* 48 */
5475 ULONG StallScaleFactor
; /* 4C */
5476 UCHAR SpareUnused
; /* 50 */
5477 UCHAR Number
; /* 51 */
5478 } KPCR
, *PKPCR
; /* 54 */
5480 #define KeGetPcr() PCR
5485 KeGetCurrentProcessorNumber(VOID
)
5488 __asm__
__volatile__ (
5491 : "i" (FIELD_OFFSET(KPCR
, Number
))
5496 #elif defined(_MIPS_)
5498 #error MIPS Headers are totally incorrect
5501 // Used to contain PFNs and PFN counts
5503 typedef ULONG PFN_COUNT
;
5504 typedef ULONG PFN_NUMBER
, *PPFN_NUMBER
;
5505 typedef LONG SPFN_NUMBER
, *PSPFN_NUMBER
;
5507 #define PASSIVE_LEVEL 0
5509 #define DISPATCH_LEVEL 2
5510 #define PROFILE_LEVEL 27
5511 #define IPI_LEVEL 29
5512 #define HIGH_LEVEL 31
5514 typedef struct _KPCR
{
5515 struct _KPRCB
*Prcb
; /* 20 */
5516 KIRQL Irql
; /* 24 */
5521 #define KeGetPcr() PCR
5523 typedef struct _KFLOATING_SAVE
{
5524 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
5529 KeGetCurrentProcessorNumber(VOID
)
5534 #elif defined(_M_ARM)
5537 // NT-ARM is not documented, need DDK-ARM
5542 #error Unknown architecture
5545 #define MM_DONT_ZERO_ALLOCATION 0x00000001
5546 #define MM_ALLOCATE_FROM_LOCAL_NODE_ONLY 0x00000002
5549 #define EFLAG_SIGN 0x8000
5550 #define EFLAG_ZERO 0x4000
5551 #define EFLAG_SELECT (EFLAG_SIGN | EFLAG_ZERO)
5553 #define RESULT_NEGATIVE ((EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
5554 #define RESULT_ZERO ((~EFLAG_SIGN & EFLAG_ZERO) & EFLAG_SELECT)
5555 #define RESULT_POSITIVE ((~EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
5557 typedef enum _INTERLOCKED_RESULT
{
5558 ResultNegative
= RESULT_NEGATIVE
,
5559 ResultZero
= RESULT_ZERO
,
5560 ResultPositive
= RESULT_POSITIVE
5561 } INTERLOCKED_RESULT
;
5564 (NTAPI
*PciPin2Line
)(
5565 IN
struct _BUS_HANDLER
*BusHandler
,
5566 IN
struct _BUS_HANDLER
*RootHandler
,
5567 IN PCI_SLOT_NUMBER SlotNumber
,
5568 IN PPCI_COMMON_CONFIG PciData
5572 (NTAPI
*PciLine2Pin
)(
5573 IN
struct _BUS_HANDLER
*BusHandler
,
5574 IN
struct _BUS_HANDLER
*RootHandler
,
5575 IN PCI_SLOT_NUMBER SlotNumber
,
5576 IN PPCI_COMMON_CONFIG PciNewData
,
5577 IN PPCI_COMMON_CONFIG PciOldData
5581 (NTAPI
*PciReadWriteConfig
)(
5582 IN
struct _BUS_HANDLER
*BusHandler
,
5583 IN PCI_SLOT_NUMBER Slot
,
5589 #define PCI_DATA_TAG ' ICP'
5590 #define PCI_DATA_VERSION 1
5592 typedef struct _PCIBUSDATA
5596 PciReadWriteConfig ReadConfig
;
5597 PciReadWriteConfig WriteConfig
;
5598 PciPin2Line Pin2Line
;
5599 PciLine2Pin Line2Pin
;
5600 PCI_SLOT_NUMBER ParentSlot
;
5602 } PCIBUSDATA
, *PPCIBUSDATA
;
5605 /** SPINLOCK FUNCTIONS ********************************************************/
5610 KeTryToAcquireSpinLockAtDpcLevel(
5611 IN OUT PKSPIN_LOCK SpinLock
5618 IN PKSPIN_LOCK SpinLock
5623 #if defined(WIN9X_COMPAT_SPINLOCK)
5628 KeInitializeSpinLock(
5629 IN PKSPIN_LOCK SpinLock
5636 KeInitializeSpinLock(IN PKSPIN_LOCK SpinLock
)
5638 /* Clear the lock */
5648 IN PKSPIN_LOCK SpinLock
);
5654 IN PKSPIN_LOCK SpinLock
,
5660 KefAcquireSpinLockAtDpcLevel(
5661 IN PKSPIN_LOCK SpinLock
);
5666 KefReleaseSpinLockFromDpcLevel(
5667 IN PKSPIN_LOCK SpinLock
);
5669 #define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock)
5670 #define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock)
5671 #define KeAcquireSpinLock(a,b) *(b) = KfAcquireSpinLock(a)
5672 #define KeReleaseSpinLock(a,b) KfReleaseSpinLock(a,b)
5674 #define KeGetDcacheFillSize() 1L
5676 #elif defined(_M_ARM) // !defined (_X86_)
5680 KeInitializeSpinLock(IN PKSPIN_LOCK SpinLock
)
5682 /* Clear the lock */
5690 IN PKSPIN_LOCK SpinLock
);
5696 IN PKSPIN_LOCK SpinLock
,
5703 KefAcquireSpinLockAtDpcLevel(
5704 IN PKSPIN_LOCK SpinLock
);
5709 KefReleaseSpinLockFromDpcLevel(
5710 IN PKSPIN_LOCK SpinLock
);
5713 #define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock)
5714 #define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock)
5715 #define KeAcquireSpinLock(a,b) *(b) = KfAcquireSpinLock(a)
5716 #define KeReleaseSpinLock(a,b) KfReleaseSpinLock(a,b)
5721 KeInitializeSpinLock(
5722 IN PKSPIN_LOCK SpinLock
);
5729 KeInitializeSpinLock(
5730 PKSPIN_LOCK SpinLock
)
5738 IN PKSPIN_LOCK SpinLock
,
5743 KeAcquireSpinLockAtDpcLevel(
5744 IN PKSPIN_LOCK SpinLock
);
5748 KeReleaseSpinLockFromDpcLevel(
5749 IN PKSPIN_LOCK SpinLock
);
5753 KeAcquireSpinLockRaiseToDpc(
5754 IN PKSPIN_LOCK SpinLock
);
5756 #define KeAcquireSpinLock(SpinLock, OldIrql) \
5757 *(OldIrql) = KeAcquireSpinLockRaiseToDpc(SpinLock)
5759 #endif // !defined (_X86_)
5762 ** Utillity functions
5765 #define ARGUMENT_PRESENT(ArgumentPointer) \
5766 ((CHAR*)((ULONG_PTR)(ArgumentPointer)) != (CHAR*)NULL)
5773 #define BYTE_OFFSET(Va) \
5774 ((ULONG) ((ULONG_PTR) (Va) & (PAGE_SIZE - 1)))
5781 #define BYTES_TO_PAGES(Size) \
5782 ((ULONG) ((ULONG_PTR) (Size) >> PAGE_SHIFT) + (((ULONG) (Size) & (PAGE_SIZE - 1)) != 0))
5789 #define PAGE_ALIGN(Va) \
5790 ((PVOID) ((ULONG_PTR)(Va) & ~(PAGE_SIZE - 1)))
5795 * IN ULONG_PTR Size)
5797 #define ROUND_TO_PAGES(Size) \
5798 ((ULONG_PTR) (((ULONG_PTR) Size + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1)))
5802 #if defined(_X86_) || defined(_AMD64_)
5805 // x86 and x64 performs a 0x2C interrupt
5807 #define DbgRaiseAssertionFailure __int2c
5809 #elif defined(_ARM_)
5816 #error Unsupported Architecture
5821 #define ASSERT(exp) \
5823 RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, NULL ), FALSE : TRUE)
5825 #define ASSERTMSG(msg, exp) \
5827 RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, msg ), FALSE : TRUE)
5829 #define RTL_SOFT_ASSERT(exp) \
5831 DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n", __FILE__, __LINE__, #exp), FALSE : TRUE)
5833 #define RTL_SOFT_ASSERTMSG(msg, exp) \
5835 DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n Message: %s\n", __FILE__, __LINE__, #exp, (msg)), FALSE : TRUE)
5837 #define RTL_VERIFY(exp) ASSERT(exp)
5838 #define RTL_VERIFYMSG(msg, exp) ASSERT(msg, exp)
5840 #define RTL_SOFT_VERIFY(exp) RTL_SOFT_ASSERT(exp)
5841 #define RTL_SOFT_VERIFYMSG(msg, exp) RTL_SOFT_ASSERTMSG(msg, exp)
5843 #if defined(_MSC_VER)
5845 #define NT_ASSERT(exp) \
5847 (__annotation(L"Debug", L"AssertFail", L#exp), \
5848 DbgRaiseAssertionFailure(), FALSE) : TRUE)
5850 #define NT_ASSERTMSG(msg, exp) \
5852 (__annotation(L"Debug", L"AssertFail", L##msg), \
5853 DbgRaiseAssertionFailure(), FALSE) : TRUE)
5855 #define NT_ASSERTMSGW(msg, exp) \
5857 (__annotation(L"Debug", L"AssertFail", msg), \
5858 DbgRaiseAssertionFailure(), FALSE) : TRUE)
5863 // GCC doesn't support __annotation (nor PDB)
5865 #define NT_ASSERT(exp) \
5866 (VOID)((!(exp)) ? (DbgRaiseAssertionFailure(), FALSE) : TRUE)
5868 #define NT_ASSERTMSG NT_ASSERT
5869 #define NT_ASSERTMSGW NT_ASSERT
5875 #define ASSERT(exp) ((VOID) 0)
5876 #define ASSERTMSG(msg, exp) ((VOID) 0)
5878 #define RTL_SOFT_ASSERT(exp) ((VOID) 0)
5879 #define RTL_SOFT_ASSERTMSG(msg, exp) ((VOID) 0)
5881 #define RTL_VERIFY(exp) ((exp) ? TRUE : FALSE)
5882 #define RTL_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE)
5884 #define RTL_SOFT_VERIFY(exp) ((exp) ? TRUE : FALSE)
5885 #define RTL_SOFT_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE)
5887 #define NT_ASSERT(exp) ((VOID)0)
5888 #define NT_ASSERTMSG(exp) ((VOID)0)
5889 #define NT_ASSERTMSGW(exp) ((VOID)0)
5893 /* HACK HACK HACK - GCC (or perhaps LD) is messing this up */
5894 #if defined(_NTSYSTEM_) || defined(__GNUC__)
5895 #define NLS_MB_CODE_PAGE_TAG NlsMbCodePageTag
5896 #define NLS_MB_OEM_CODE_PAGE_TAG NlsMbOemCodePageTag
5898 #define NLS_MB_CODE_PAGE_TAG (*NlsMbCodePageTag)
5899 #define NLS_MB_OEM_CODE_PAGE_TAG (*NlsMbOemCodePageTag)
5900 #endif /* _NT_SYSTEM */
5902 extern BOOLEAN NTSYSAPI NLS_MB_CODE_PAGE_TAG
;
5903 extern BOOLEAN NTSYSAPI NLS_MB_OEM_CODE_PAGE_TAG
;
5906 ** Driver support routines
5909 /** Runtime library routines **/
5911 static __inline VOID
5913 IN PLIST_ENTRY ListHead
)
5915 ListHead
->Flink
= ListHead
->Blink
= ListHead
;
5918 static __inline VOID
5920 IN PLIST_ENTRY ListHead
,
5921 IN PLIST_ENTRY Entry
)
5923 PLIST_ENTRY OldFlink
;
5924 OldFlink
= ListHead
->Flink
;
5925 Entry
->Flink
= OldFlink
;
5926 Entry
->Blink
= ListHead
;
5927 OldFlink
->Blink
= Entry
;
5928 ListHead
->Flink
= Entry
;
5931 static __inline VOID
5933 IN PLIST_ENTRY ListHead
,
5934 IN PLIST_ENTRY Entry
)
5936 PLIST_ENTRY OldBlink
;
5937 OldBlink
= ListHead
->Blink
;
5938 Entry
->Flink
= ListHead
;
5939 Entry
->Blink
= OldBlink
;
5940 OldBlink
->Flink
= Entry
;
5941 ListHead
->Blink
= Entry
;
5947 * IN PLIST_ENTRY ListHead)
5949 #define IsListEmpty(_ListHead) \
5950 ((_ListHead)->Flink == (_ListHead))
5953 * PSINGLE_LIST_ENTRY
5955 * IN PSINGLE_LIST_ENTRY ListHead)
5957 #define PopEntryList(ListHead) \
5960 PSINGLE_LIST_ENTRY _FirstEntry; \
5961 _FirstEntry = (ListHead)->Next; \
5962 if (_FirstEntry != NULL) \
5963 (ListHead)->Next = _FirstEntry->Next; \
5969 * IN PSINGLE_LIST_ENTRY ListHead,
5970 * IN PSINGLE_LIST_ENTRY Entry)
5972 #define PushEntryList(_ListHead, _Entry) \
5973 (_Entry)->Next = (_ListHead)->Next; \
5974 (_ListHead)->Next = (_Entry); \
5976 static __inline BOOLEAN
5978 IN PLIST_ENTRY Entry
)
5980 PLIST_ENTRY OldFlink
;
5981 PLIST_ENTRY OldBlink
;
5983 OldFlink
= Entry
->Flink
;
5984 OldBlink
= Entry
->Blink
;
5985 OldFlink
->Blink
= OldBlink
;
5986 OldBlink
->Flink
= OldFlink
;
5987 return (BOOLEAN
)(OldFlink
== OldBlink
);
5990 static __inline PLIST_ENTRY
5992 IN PLIST_ENTRY ListHead
)
5997 Entry
= ListHead
->Flink
;
5998 Flink
= Entry
->Flink
;
5999 ListHead
->Flink
= Flink
;
6000 Flink
->Blink
= ListHead
;
6004 static __inline PLIST_ENTRY
6006 IN PLIST_ENTRY ListHead
)
6011 Entry
= ListHead
->Blink
;
6012 Blink
= Entry
->Blink
;
6013 ListHead
->Blink
= Blink
;
6014 Blink
->Flink
= ListHead
;
6023 IN ULONG Base OPTIONAL
,
6024 IN OUT PULONG Value
);
6032 BOOLEAN CaseInSensitive
);
6034 #if !defined(MIDL_PASS)
6039 RtlConvertLongToLuid(
6045 Temp
.QuadPart
= Val
;
6046 Luid
.LowPart
= Temp
.u
.LowPart
;
6047 Luid
.HighPart
= Temp
.u
.HighPart
;
6055 RtlConvertUlongToLuid(
6072 IN VOID UNALIGNED
*Destination
,
6073 IN CONST VOID UNALIGNED
*Source
,
6080 IN OUT PSTRING DestinationString
,
6081 IN PSTRING SourceString OPTIONAL
);
6089 IN BOOLEAN CaseInSensitive
);
6091 #if (defined(_M_AMD64) || defined(_M_IA64)) && !defined(_REALLY_GET_CALLERS_CALLER_)
6092 #define RtlGetCallersAddress(CallersAddress, CallersCaller) \
6093 *CallersAddress = (PVOID)_ReturnAddress(); \
6094 *CallersCaller = NULL;
6099 RtlGetCallersAddress(
6100 OUT PVOID
*CallersAddress
,
6101 OUT PVOID
*CallersCaller
);
6108 IN OUT PRTL_OSVERSIONINFOW lpVersionInformation
);
6114 IN OUT PACCESS_MASK AccessMask
,
6115 IN PGENERIC_MAPPING GenericMapping
);
6120 RtlPrefixUnicodeString(
6121 IN PCUNICODE_STRING String1
,
6122 IN PCUNICODE_STRING String2
,
6123 IN BOOLEAN CaseInSensitive
);
6128 RtlUpcaseUnicodeString(
6129 IN OUT PUNICODE_STRING DestinationString OPTIONAL
,
6130 IN PCUNICODE_STRING SourceString
,
6131 IN BOOLEAN AllocateDestinationString
);
6143 IN OUT PSTRING DestinationString
,
6144 IN PSTRING SourceString
);
6149 RtlVerifyVersionInfo(
6150 IN PRTL_OSVERSIONINFOEXW VersionInfo
,
6152 IN ULONGLONG ConditionMask
);
6157 RtlVolumeDeviceToDosName(
6158 IN PVOID VolumeDeviceObject
,
6159 OUT PUNICODE_STRING DosName
);
6172 KeAreAllApcsDisabled(
6176 /* Guarded Mutex routines */
6181 KeAcquireGuardedMutex(
6182 IN OUT PKGUARDED_MUTEX GuardedMutex
6188 KeAcquireGuardedMutexUnsafe(
6189 IN OUT PKGUARDED_MUTEX GuardedMutex
6195 KeEnterGuardedRegion(
6202 KeLeaveGuardedRegion(
6209 KeInitializeGuardedMutex(
6210 OUT PKGUARDED_MUTEX GuardedMutex
6216 KeReleaseGuardedMutexUnsafe(
6217 IN OUT PKGUARDED_MUTEX GuardedMutex
6223 KeReleaseGuardedMutex(
6224 IN OUT PKGUARDED_MUTEX GuardedMutex
6230 KeTryToAcquireGuardedMutex(
6231 IN OUT PKGUARDED_MUTEX GuardedMutex
6235 #define ExInitializeFastMutex(_FastMutex) \
6237 (_FastMutex)->Count = FM_LOCK_BIT; \
6238 (_FastMutex)->Owner = NULL; \
6239 (_FastMutex)->Contention = 0; \
6240 KeInitializeEvent(&(_FastMutex)->Gate, SynchronizationEvent, FALSE); \
6251 /******************************************************************************
6253 ******************************************************************************/
6255 typedef struct _ZONE_SEGMENT_HEADER
{
6256 SINGLE_LIST_ENTRY SegmentList
;
6258 } ZONE_SEGMENT_HEADER
, *PZONE_SEGMENT_HEADER
;
6260 typedef struct _ZONE_HEADER
{
6261 SINGLE_LIST_ENTRY FreeList
;
6262 SINGLE_LIST_ENTRY SegmentList
;
6264 ULONG TotalSegmentSize
;
6265 } ZONE_HEADER
, *PZONE_HEADER
;
6267 #define PROTECTED_POOL 0x80000000
6269 /******************************************************************************
6270 * Executive Functions *
6271 ******************************************************************************/
6277 IN PZONE_HEADER Zone
,
6279 IN ULONG SegmentSize
);
6281 static __inline PVOID
6283 IN PZONE_HEADER Zone
)
6285 if (Zone
->FreeList
.Next
)
6286 Zone
->FreeList
.Next
= Zone
->FreeList
.Next
->Next
;
6287 return (PVOID
) Zone
->FreeList
.Next
;
6290 static __inline PVOID
6292 IN PZONE_HEADER Zone
,
6295 ((PSINGLE_LIST_ENTRY
) Block
)->Next
= Zone
->FreeList
.Next
;
6296 Zone
->FreeList
.Next
= ((PSINGLE_LIST_ENTRY
) Block
);
6297 return ((PSINGLE_LIST_ENTRY
) Block
)->Next
;
6304 IN PZONE_HEADER Zone
,
6306 IN PVOID InitialSegment
,
6307 IN ULONG InitialSegmentSize
);
6311 * ExInterlockedAllocateFromZone(
6312 * IN PZONE_HEADER Zone,
6313 * IN PKSPIN_LOCK Lock)
6315 #define ExInterlockedAllocateFromZone(Zone, Lock) \
6316 ((PVOID) ExInterlockedPopEntryList(&Zone->FreeList, Lock))
6321 ExInterlockedExtendZone(
6322 IN PZONE_HEADER Zone
,
6324 IN ULONG SegmentSize
,
6325 IN PKSPIN_LOCK Lock
);
6328 * ExInterlockedFreeToZone(
6329 * IN PZONE_HEADER Zone,
6331 * IN PKSPIN_LOCK Lock);
6333 #define ExInterlockedFreeToZone(Zone, Block, Lock) \
6334 ExInterlockedPushEntryList(&(Zone)->FreeList, (PSINGLE_LIST_ENTRY)(Block), Lock)
6338 * InitializeSListHead(
6339 * IN PSLIST_HEADER SListHead)
6341 #define InitializeSListHead(_SListHead) \
6342 (_SListHead)->Alignment = 0
6344 #define ExInitializeSListHead InitializeSListHead
6349 * IN PZONE_HEADER Zone)
6351 #define ExIsFullZone(Zone) \
6352 ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL)
6355 * ExIsObjectInFirstZoneSegment(
6356 * IN PZONE_HEADER Zone,
6359 #define ExIsObjectInFirstZoneSegment(Zone,Object) \
6360 ((BOOLEAN)( ((PUCHAR)(Object) >= (PUCHAR)(Zone)->SegmentList.Next) && \
6361 ((PUCHAR)(Object) < (PUCHAR)(Zone)->SegmentList.Next + \
6362 (Zone)->TotalSegmentSize)) )
6368 ExRaiseAccessViolation(
6375 ExRaiseDatatypeMisalignment(
6384 #define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite
6385 #define ExAcquireResourceShared ExAcquireResourceSharedLite
6386 #define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite
6387 #define ExDeleteResource ExDeleteResourceLite
6388 #define ExInitializeResource ExInitializeResourceLite
6389 #define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite
6390 #define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite
6391 #define ExIsResourceAcquired ExIsResourceAcquiredSharedLite
6392 #define ExReleaseResourceForThread ExReleaseResourceForThreadLite
6397 #define PAGED_CODE() { \
6398 if (KeGetCurrentIrql() > APC_LEVEL) { \
6399 KdPrint( ("NTDDK: Pageable code called at IRQL > APC_LEVEL (%d)\n", KeGetCurrentIrql() )); \
6406 #define PAGED_CODE()
6414 IN CONST VOID
*Address
,
6416 IN ULONG Alignment
);
6424 IN ULONG Alignment
);
6428 /** Configuration manager routines **/
6434 IN PEX_CALLBACK_FUNCTION Function
,
6436 IN OUT PLARGE_INTEGER Cookie
);
6441 CmUnRegisterCallback(
6442 IN LARGE_INTEGER Cookie
);
6446 /** Filesystem runtime library routines **/
6451 FsRtlIsTotalDeviceFailure(
6452 IN NTSTATUS Status
);
6456 /** Hardware abstraction layer routines **/
6462 IN ULONG Frequency
);
6468 IN PDEVICE_OBJECT DeviceObject
,
6469 IN ULONG SectorSize
,
6470 IN ULONG MBRTypeIdentifier
,
6476 PADAPTER_OBJECT AdapterObject
6480 /** Io access routines **/
6482 #if !defined(_M_AMD64)
6486 READ_PORT_BUFFER_UCHAR(
6494 READ_PORT_BUFFER_ULONG(
6502 READ_PORT_BUFFER_USHORT(
6528 READ_REGISTER_BUFFER_UCHAR(
6536 READ_REGISTER_BUFFER_ULONG(
6544 READ_REGISTER_BUFFER_USHORT(
6545 IN PUSHORT Register
,
6552 READ_REGISTER_UCHAR(
6553 IN PUCHAR Register
);
6558 READ_REGISTER_ULONG(
6559 IN PULONG Register
);
6564 READ_REGISTER_USHORT(
6565 IN PUSHORT Register
);
6570 WRITE_PORT_BUFFER_UCHAR(
6578 WRITE_PORT_BUFFER_ULONG(
6586 WRITE_PORT_BUFFER_USHORT(
6615 WRITE_REGISTER_BUFFER_UCHAR(
6623 WRITE_REGISTER_BUFFER_ULONG(
6631 WRITE_REGISTER_BUFFER_USHORT(
6632 IN PUSHORT Register
,
6639 WRITE_REGISTER_UCHAR(
6646 WRITE_REGISTER_ULONG(
6653 WRITE_REGISTER_USHORT(
6654 IN PUSHORT Register
,
6661 READ_PORT_BUFFER_UCHAR(
6666 __inbytestring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
6671 READ_PORT_BUFFER_ULONG(
6676 __indwordstring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
6681 READ_PORT_BUFFER_USHORT(
6686 __inwordstring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
6694 return __inbyte((USHORT
)(ULONG_PTR
)Port
);
6702 return __indword((USHORT
)(ULONG_PTR
)Port
);
6710 return __inword((USHORT
)(ULONG_PTR
)Port
);
6715 READ_REGISTER_BUFFER_UCHAR(
6720 __movsb(Register
, Buffer
, Count
);
6725 READ_REGISTER_BUFFER_ULONG(
6730 __movsd(Register
, Buffer
, Count
);
6735 READ_REGISTER_BUFFER_USHORT(
6736 IN PUSHORT Register
,
6740 __movsw(Register
, Buffer
, Count
);
6745 READ_REGISTER_UCHAR(
6753 READ_REGISTER_ULONG(
6761 READ_REGISTER_USHORT(
6762 IN PUSHORT Register
)
6769 WRITE_PORT_BUFFER_UCHAR(
6774 __outbytestring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
6779 WRITE_PORT_BUFFER_ULONG(
6784 __outdwordstring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
6789 WRITE_PORT_BUFFER_USHORT(
6794 __outwordstring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
6803 __outbyte((USHORT
)(ULONG_PTR
)Port
, Value
);
6812 __outdword((USHORT
)(ULONG_PTR
)Port
, Value
);
6821 __outword((USHORT
)(ULONG_PTR
)Port
, Value
);
6826 WRITE_REGISTER_BUFFER_UCHAR(
6832 __movsb(Register
, Buffer
, Count
);
6833 InterlockedOr(&Synch
, 1);
6838 WRITE_REGISTER_BUFFER_ULONG(
6844 __movsd(Register
, Buffer
, Count
);
6845 InterlockedOr(&Synch
, 1);
6850 WRITE_REGISTER_BUFFER_USHORT(
6851 IN PUSHORT Register
,
6856 __movsw(Register
, Buffer
, Count
);
6857 InterlockedOr(&Synch
, 1);
6862 WRITE_REGISTER_UCHAR(
6868 InterlockedOr(&Synch
, 1);
6873 WRITE_REGISTER_ULONG(
6879 InterlockedOr(&Synch
, 1);
6884 WRITE_REGISTER_USHORT(
6885 IN PUSHORT Register
,
6890 InterlockedOr(&Sync
, 1);
6895 /** I/O manager routines **/
6900 IoAcquireCancelSpinLock(
6906 IoAcquireRemoveLockEx(
6907 IN PIO_REMOVE_LOCK RemoveLock
,
6908 IN OPTIONAL PVOID Tag OPTIONAL
,
6911 IN ULONG RemlockSize
);
6915 * IoAcquireRemoveLock(
6916 * IN PIO_REMOVE_LOCK RemoveLock,
6917 * IN OPTIONAL PVOID Tag)
6919 #define IoAcquireRemoveLock(_RemoveLock, \
6921 IoAcquireRemoveLockEx(_RemoveLock, _Tag, __FILE__, __LINE__, sizeof(IO_REMOVE_LOCK))
6925 * IoAdjustPagingPathCount(
6927 * IN BOOLEAN Increment)
6929 #define IoAdjustPagingPathCount(_Count, \
6934 InterlockedIncrement(_Count); \
6938 InterlockedDecrement(_Count); \
6942 #ifndef DMA_MACROS_DEFINED
6946 IoAllocateAdapterChannel(
6947 IN PADAPTER_OBJECT AdapterObject
,
6948 IN PDEVICE_OBJECT DeviceObject
,
6949 IN ULONG NumberOfMapRegisters
,
6950 IN PDRIVER_CONTROL ExecutionRoutine
,
6957 IoAllocateController(
6958 IN PCONTROLLER_OBJECT ControllerObject
,
6959 IN PDEVICE_OBJECT DeviceObject
,
6960 IN PDRIVER_CONTROL ExecutionRoutine
,
6966 IoAllocateDriverObjectExtension(
6967 IN PDRIVER_OBJECT DriverObject
,
6968 IN PVOID ClientIdentificationAddress
,
6969 IN ULONG DriverObjectExtensionSize
,
6970 OUT PVOID
*DriverObjectExtension
);
6975 IoAllocateErrorLogEntry(
6977 IN UCHAR EntrySize
);
6984 IN BOOLEAN ChargeQuota
);
6990 IN PVOID VirtualAddress
,
6992 IN BOOLEAN SecondaryBuffer
,
6993 IN BOOLEAN ChargeQuota
,
6994 IN OUT PIRP Irp OPTIONAL
);
7000 IN PDEVICE_OBJECT DeviceObject
);
7003 * VOID IoAssignArcName(
7004 * IN PUNICODE_STRING ArcName,
7005 * IN PUNICODE_STRING DeviceName);
7007 #define IoAssignArcName(_ArcName, _DeviceName) ( \
7008 IoCreateSymbolicLink((_ArcName), (_DeviceName)))
7014 IN PDEVICE_OBJECT SourceDevice
,
7015 IN PUNICODE_STRING TargetDevice
,
7016 OUT PDEVICE_OBJECT
*AttachedDevice
);
7021 IoAttachDeviceToDeviceStack(
7022 IN PDEVICE_OBJECT SourceDevice
,
7023 IN PDEVICE_OBJECT TargetDevice
);
7028 IoBuildAsynchronousFsdRequest(
7029 IN ULONG MajorFunction
,
7030 IN PDEVICE_OBJECT DeviceObject
,
7031 IN OUT PVOID Buffer OPTIONAL
,
7032 IN ULONG Length OPTIONAL
,
7033 IN PLARGE_INTEGER StartingOffset OPTIONAL
,
7034 IN PIO_STATUS_BLOCK IoStatusBlock OPTIONAL
);
7039 IoBuildDeviceIoControlRequest(
7040 IN ULONG IoControlCode
,
7041 IN PDEVICE_OBJECT DeviceObject
,
7042 IN PVOID InputBuffer OPTIONAL
,
7043 IN ULONG InputBufferLength
,
7044 OUT PVOID OutputBuffer OPTIONAL
,
7045 IN ULONG OutputBufferLength
,
7046 IN BOOLEAN InternalDeviceIoControl
,
7048 OUT PIO_STATUS_BLOCK IoStatusBlock
);
7055 IN OUT PMDL TargetMdl
,
7056 IN PVOID VirtualAddress
,
7062 IoBuildSynchronousFsdRequest(
7063 IN ULONG MajorFunction
,
7064 IN PDEVICE_OBJECT DeviceObject
,
7065 IN OUT PVOID Buffer OPTIONAL
,
7066 IN ULONG Length OPTIONAL
,
7067 IN PLARGE_INTEGER StartingOffset OPTIONAL
,
7069 OUT PIO_STATUS_BLOCK IoStatusBlock
);
7075 IN PDEVICE_OBJECT DeviceObject
,
7081 * IN PDEVICE_OBJECT DeviceObject,
7084 #define IoCallDriver IofCallDriver
7090 IN PDEVICE_OBJECT DeviceObject
,
7091 IN PFILE_OBJECT FileObject
);
7103 IN ACCESS_MASK DesiredAccess
,
7104 IN ULONG DesiredShareAccess
,
7105 IN OUT PFILE_OBJECT FileObject
,
7106 IN OUT PSHARE_ACCESS ShareAccess
,
7114 IN CCHAR PriorityBoost
);
7118 * IoCompleteRequest(
7120 * IN CCHAR PriorityBoost)
7122 #define IoCompleteRequest IofCompleteRequest
7128 OUT PKINTERRUPT
*InterruptObject
,
7129 IN PKSERVICE_ROUTINE ServiceRoutine
,
7130 IN PVOID ServiceContext
,
7131 IN PKSPIN_LOCK SpinLock OPTIONAL
,
7134 IN KIRQL SynchronizeIrql
,
7135 IN KINTERRUPT_MODE InterruptMode
,
7136 IN BOOLEAN ShareVector
,
7137 IN KAFFINITY ProcessorEnableMask
,
7138 IN BOOLEAN FloatingSave
);
7141 * PIO_STACK_LOCATION
7142 * IoGetCurrentIrpStackLocation(
7145 #define IoGetCurrentIrpStackLocation(_Irp) \
7146 ((_Irp)->Tail.Overlay.CurrentStackLocation)
7149 * PIO_STACK_LOCATION
7150 * IoGetNextIrpStackLocation(
7153 #define IoGetNextIrpStackLocation(_Irp) \
7154 ((_Irp)->Tail.Overlay.CurrentStackLocation - 1)
7158 * IoCopyCurrentIrpStackLocationToNext(
7161 #define IoCopyCurrentIrpStackLocationToNext(_Irp) \
7163 PIO_STACK_LOCATION _IrpSp; \
7164 PIO_STACK_LOCATION _NextIrpSp; \
7165 _IrpSp = IoGetCurrentIrpStackLocation(_Irp); \
7166 _NextIrpSp = IoGetNextIrpStackLocation(_Irp); \
7167 RtlCopyMemory(_NextIrpSp, _IrpSp, \
7168 FIELD_OFFSET(IO_STACK_LOCATION, CompletionRoutine)); \
7169 _NextIrpSp->Control = 0; \
7182 IN PDRIVER_OBJECT DriverObject
,
7183 IN ULONG DeviceExtensionSize
,
7184 IN PUNICODE_STRING DeviceName OPTIONAL
,
7185 IN DEVICE_TYPE DeviceType
,
7186 IN ULONG DeviceCharacteristics
,
7187 IN BOOLEAN Exclusive
,
7188 OUT PDEVICE_OBJECT
*DeviceObject
);
7194 IN PDEVICE_OBJECT DeviceObject
,
7195 IN PCREATE_DISK Disk
);
7201 OUT PHANDLE FileHandle
,
7202 IN ACCESS_MASK DesiredAccess
,
7203 IN POBJECT_ATTRIBUTES ObjectAttributes
,
7204 OUT PIO_STATUS_BLOCK IoStatusBlock
,
7205 IN PLARGE_INTEGER AllocationSize OPTIONAL
,
7206 IN ULONG FileAttributes
,
7207 IN ULONG ShareAccess
,
7208 IN ULONG Disposition
,
7209 IN ULONG CreateOptions
,
7210 IN PVOID EaBuffer OPTIONAL
,
7212 IN CREATE_FILE_TYPE CreateFileType
,
7213 IN PVOID ExtraCreateParameters OPTIONAL
,
7219 IoCreateNotificationEvent(
7220 IN PUNICODE_STRING EventName
,
7221 OUT PHANDLE EventHandle
);
7226 IoCreateSymbolicLink(
7227 IN PUNICODE_STRING SymbolicLinkName
,
7228 IN PUNICODE_STRING DeviceName
);
7233 IoCreateSynchronizationEvent(
7234 IN PUNICODE_STRING EventName
,
7235 OUT PHANDLE EventHandle
);
7240 IoCreateUnprotectedSymbolicLink(
7241 IN PUNICODE_STRING SymbolicLinkName
,
7242 IN PUNICODE_STRING DeviceName
);
7249 IN PIO_CSQ_INSERT_IRP CsqInsertIrp
,
7250 IN PIO_CSQ_REMOVE_IRP CsqRemoveIrp
,
7251 IN PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp
,
7252 IN PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock
,
7253 IN PIO_CSQ_RELEASE_LOCK CsqReleaseLock
,
7254 IN PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp
);
7262 IN PIO_CSQ_IRP_CONTEXT Context
);
7269 IN PIO_CSQ_IRP_CONTEXT Context
);
7276 IN PVOID PeekContext
);
7282 IN PCONTROLLER_OBJECT ControllerObject
);
7288 IN PDEVICE_OBJECT DeviceObject
);
7293 IoDeleteSymbolicLink(
7294 IN PUNICODE_STRING SymbolicLinkName
);
7298 * IoDeassignArcName(
7299 * IN PUNICODE_STRING ArcName)
7301 #define IoDeassignArcName IoDeleteSymbolicLink
7307 IN OUT PDEVICE_OBJECT TargetDevice
);
7312 IoDisconnectInterrupt(
7313 IN PKINTERRUPT InterruptObject
);
7318 IoForwardIrpSynchronously(
7319 IN PDEVICE_OBJECT DeviceObject
,
7322 #define IoForwardAndCatchIrp IoForwardIrpSynchronously
7328 IN PCONTROLLER_OBJECT ControllerObject
);
7333 IoFreeErrorLogEntry(
7352 IN PIO_WORKITEM pIOWorkItem
);
7357 IoGetAttachedDevice(
7358 IN PDEVICE_OBJECT DeviceObject
);
7363 IoGetAttachedDeviceReference(
7364 IN PDEVICE_OBJECT DeviceObject
);
7369 IoGetBootDiskInformation(
7370 IN OUT PBOOTDISK_INFORMATION BootDiskInformation
,
7374 PCONFIGURATION_INFORMATION
7376 IoGetConfigurationInformation(
7382 IoGetCurrentProcess(
7388 IoGetDeviceInterfaceAlias(
7389 IN PUNICODE_STRING SymbolicLinkName
,
7390 IN CONST GUID
*AliasInterfaceClassGuid
,
7391 OUT PUNICODE_STRING AliasSymbolicLinkName
);
7393 #define DEVICE_INTERFACE_INCLUDE_NONACTIVE 0x00000001
7398 IoGetDeviceInterfaces(
7399 IN CONST GUID
*InterfaceClassGuid
,
7400 IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL
,
7402 OUT PWSTR
*SymbolicLinkList
);
7407 IoGetDeviceObjectPointer(
7408 IN PUNICODE_STRING ObjectName
,
7409 IN ACCESS_MASK DesiredAccess
,
7410 OUT PFILE_OBJECT
*FileObject
,
7411 OUT PDEVICE_OBJECT
*DeviceObject
);
7416 IoGetDeviceProperty(
7417 IN PDEVICE_OBJECT DeviceObject
,
7418 IN DEVICE_REGISTRY_PROPERTY DeviceProperty
,
7419 IN ULONG BufferLength
,
7420 OUT PVOID PropertyBuffer
,
7421 OUT PULONG ResultLength
);
7426 IoGetDeviceToVerify(
7427 IN PETHREAD Thread
);
7433 IN PDEVICE_OBJECT PhysicalDeviceObject
,
7434 IN PDEVICE_DESCRIPTION DeviceDescription
,
7435 IN OUT PULONG NumberOfMapRegisters
);
7440 IoGetDriverObjectExtension(
7441 IN PDRIVER_OBJECT DriverObject
,
7442 IN PVOID ClientIdentificationAddress
);
7447 IoGetFileObjectGenericMapping(
7452 * IoGetFunctionCodeFromCtlCode(
7453 * IN ULONG ControlCode)
7455 #define IoGetFunctionCodeFromCtlCode(_ControlCode) \
7456 (((_ControlCode) >> 2) & 0x00000FFF)
7467 IoGetRelatedDeviceObject(
7468 IN PFILE_OBJECT FileObject
);
7474 OUT PULONG_PTR LowLimit
,
7475 OUT PULONG_PTR HighLimit
);
7479 IoGetRemainingStackSize(
7483 ULONG_PTR End
, Begin
;
7486 IoGetStackLimits(&Begin
, &End
);
7487 Result
= (ULONG_PTR
)(&End
) - Begin
;
7496 IN PKDEFERRED_ROUTINE DeferredRoutine
,
7497 IN PVOID DeferredContext
);
7501 * IoInitializeDpcRequest(
7502 * IN PDEVICE_OBJECT DeviceObject,
7503 * IN PIO_DPC_ROUTINE DpcRoutine)
7505 #define IoInitializeDpcRequest(_DeviceObject, \
7507 KeInitializeDpc(&(_DeviceObject)->Dpc, \
7508 (PKDEFERRED_ROUTINE) (_DpcRoutine), \
7516 IN USHORT PacketSize
,
7517 IN CCHAR StackSize
);
7522 IoInitializeRemoveLockEx(
7523 IN PIO_REMOVE_LOCK Lock
,
7524 IN ULONG AllocateTag
,
7525 IN ULONG MaxLockedMinutes
,
7526 IN ULONG HighWatermark
,
7527 IN ULONG RemlockSize
);
7530 * IoInitializeRemoveLock(
7531 * IN PIO_REMOVE_LOCK Lock,
7532 * IN ULONG AllocateTag,
7533 * IN ULONG MaxLockedMinutes,
7534 * IN ULONG HighWatermark)
7536 #define IoInitializeRemoveLock( \
7537 Lock, AllocateTag, MaxLockedMinutes, HighWatermark) \
7538 IoInitializeRemoveLockEx(Lock, AllocateTag, MaxLockedMinutes, \
7539 HighWatermark, sizeof(IO_REMOVE_LOCK))
7545 IN PDEVICE_OBJECT DeviceObject
,
7546 IN PIO_TIMER_ROUTINE TimerRoutine
,
7552 IoInvalidateDeviceRelations(
7553 IN PDEVICE_OBJECT DeviceObject
,
7554 IN DEVICE_RELATION_TYPE Type
);
7559 IoInvalidateDeviceState(
7560 IN PDEVICE_OBJECT PhysicalDeviceObject
);
7566 IN PIRP Irp OPTIONAL
);
7570 * IoIsErrorUserInduced(
7571 * IN NTSTATUS Status);
7573 #define IoIsErrorUserInduced(Status) \
7574 ((BOOLEAN)(((Status) == STATUS_DEVICE_NOT_READY) || \
7575 ((Status) == STATUS_IO_TIMEOUT) || \
7576 ((Status) == STATUS_MEDIA_WRITE_PROTECTED) || \
7577 ((Status) == STATUS_NO_MEDIA_IN_DEVICE) || \
7578 ((Status) == STATUS_VERIFY_REQUIRED) || \
7579 ((Status) == STATUS_UNRECOGNIZED_MEDIA) || \
7580 ((Status) == STATUS_WRONG_VOLUME)))
7585 IoIsWdmVersionAvailable(
7586 IN UCHAR MajorVersion
,
7587 IN UCHAR MinorVersion
);
7592 IoMakeAssociatedIrp(
7594 IN CCHAR StackSize
);
7601 #define IoMarkIrpPending(_Irp) \
7602 (IoGetCurrentIrpStackLocation(_Irp)->Control |= SL_PENDING_RETURNED)
7607 IoOpenDeviceInterfaceRegistryKey(
7608 IN PUNICODE_STRING SymbolicLinkName
,
7609 IN ACCESS_MASK DesiredAccess
,
7610 OUT PHANDLE DeviceInterfaceKey
);
7612 #define PLUGPLAY_REGKEY_DEVICE 1
7613 #define PLUGPLAY_REGKEY_DRIVER 2
7614 #define PLUGPLAY_REGKEY_CURRENT_HWPROFILE 4
7619 IoOpenDeviceRegistryKey(
7620 IN PDEVICE_OBJECT DeviceObject
,
7621 IN ULONG DevInstKeyType
,
7622 IN ACCESS_MASK DesiredAccess
,
7623 OUT PHANDLE DevInstRegKey
);
7628 IoQueryDeviceDescription(
7629 IN PINTERFACE_TYPE BusType OPTIONAL
,
7630 IN PULONG BusNumber OPTIONAL
,
7631 IN PCONFIGURATION_TYPE ControllerType OPTIONAL
,
7632 IN PULONG ControllerNumber OPTIONAL
,
7633 IN PCONFIGURATION_TYPE PeripheralType OPTIONAL
,
7634 IN PULONG PeripheralNumber OPTIONAL
,
7635 IN PIO_QUERY_DEVICE_ROUTINE CalloutRoutine
,
7642 IN PIO_WORKITEM pIOWorkItem
,
7643 IN PIO_WORKITEM_ROUTINE Routine
,
7644 IN WORK_QUEUE_TYPE QueueType
,
7652 IN PVPB Vpb OPTIONAL
,
7653 IN PDEVICE_OBJECT RealDeviceObject
);
7658 IoRaiseInformationalHardError(
7659 IN NTSTATUS ErrorStatus
,
7660 IN PUNICODE_STRING String OPTIONAL
,
7661 IN PKTHREAD Thread OPTIONAL
);
7666 IoReadDiskSignature(
7667 IN PDEVICE_OBJECT DeviceObject
,
7668 IN ULONG BytesPerSector
,
7669 OUT PDISK_SIGNATURE Signature
);
7674 IoReadPartitionTable(
7675 IN PDEVICE_OBJECT DeviceObject
,
7676 IN ULONG SectorSize
,
7677 IN BOOLEAN ReturnRecognizedPartitions
,
7678 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
7683 IoReadPartitionTableEx(
7684 IN PDEVICE_OBJECT DeviceObject
,
7685 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
**PartitionBuffer
);
7690 IoRegisterBootDriverReinitialization(
7691 IN PDRIVER_OBJECT DriverObject
,
7692 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
7698 IoRegisterBootDriverReinitialization(
7699 IN PDRIVER_OBJECT DriverObject
,
7700 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
7706 IoRegisterDeviceInterface(
7707 IN PDEVICE_OBJECT PhysicalDeviceObject
,
7708 IN CONST GUID
*InterfaceClassGuid
,
7709 IN PUNICODE_STRING ReferenceString OPTIONAL
,
7710 OUT PUNICODE_STRING SymbolicLinkName
);
7715 IoRegisterDriverReinitialization(
7716 IN PDRIVER_OBJECT DriverObject
,
7717 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
7723 IoRegisterPlugPlayNotification(
7724 IN IO_NOTIFICATION_EVENT_CATEGORY EventCategory
,
7725 IN ULONG EventCategoryFlags
,
7726 IN PVOID EventCategoryData OPTIONAL
,
7727 IN PDRIVER_OBJECT DriverObject
,
7728 IN PDRIVER_NOTIFICATION_CALLBACK_ROUTINE CallbackRoutine
,
7730 OUT PVOID
*NotificationEntry
);
7735 IoRegisterShutdownNotification(
7736 IN PDEVICE_OBJECT DeviceObject
);
7741 IoReleaseCancelSpinLock(
7747 IoReleaseRemoveLockAndWaitEx(
7748 IN PIO_REMOVE_LOCK RemoveLock
,
7750 IN ULONG RemlockSize
);
7755 IoReleaseRemoveLockEx(
7756 IN PIO_REMOVE_LOCK RemoveLock
,
7758 IN ULONG RemlockSize
);
7762 * IoReleaseRemoveLock(
7763 * IN PIO_REMOVE_LOCK RemoveLock,
7766 #define IoReleaseRemoveLock(_RemoveLock, \
7768 IoReleaseRemoveLockEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK))
7772 * IoReleaseRemoveLockAndWait(
7773 * IN PIO_REMOVE_LOCK RemoveLock,
7776 #define IoReleaseRemoveLockAndWait(_RemoveLock, \
7778 IoReleaseRemoveLockAndWaitEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK))
7783 IoRemoveShareAccess(
7784 IN PFILE_OBJECT FileObject
,
7785 IN OUT PSHARE_ACCESS ShareAccess
);
7790 IoReportDetectedDevice(
7791 IN PDRIVER_OBJECT DriverObject
,
7792 IN INTERFACE_TYPE LegacyBusType
,
7794 IN ULONG SlotNumber
,
7795 IN PCM_RESOURCE_LIST ResourceList
,
7796 IN PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements OPTIONAL
,
7797 IN BOOLEAN ResourceAssigned
,
7798 IN OUT PDEVICE_OBJECT
*DeviceObject
);
7803 IoReportResourceForDetection(
7804 IN PDRIVER_OBJECT DriverObject
,
7805 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
7806 IN ULONG DriverListSize OPTIONAL
,
7807 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
7808 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
7809 IN ULONG DeviceListSize OPTIONAL
,
7810 OUT PBOOLEAN ConflictDetected
);
7815 IoReportResourceUsage(
7816 IN PUNICODE_STRING DriverClassName OPTIONAL
,
7817 IN PDRIVER_OBJECT DriverObject
,
7818 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
7819 IN ULONG DriverListSize OPTIONAL
,
7820 IN PDEVICE_OBJECT DeviceObject
,
7821 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
7822 IN ULONG DeviceListSize OPTIONAL
,
7823 IN BOOLEAN OverrideConflict
,
7824 OUT PBOOLEAN ConflictDetected
);
7829 IoReportTargetDeviceChange(
7830 IN PDEVICE_OBJECT PhysicalDeviceObject
,
7831 IN PVOID NotificationStructure
);
7836 IoReportTargetDeviceChangeAsynchronous(
7837 IN PDEVICE_OBJECT PhysicalDeviceObject
,
7838 IN PVOID NotificationStructure
,
7839 IN PDEVICE_CHANGE_COMPLETE_CALLBACK Callback OPTIONAL
,
7840 IN PVOID Context OPTIONAL
);
7845 IoRequestDeviceEject(
7846 IN PDEVICE_OBJECT PhysicalDeviceObject
);
7851 * IN PDEVICE_OBJECT DeviceObject,
7853 * IN PVOID Context);
7855 #define IoRequestDpc(DeviceObject, Irp, Context)( \
7856 KeInsertQueueDpc(&(DeviceObject)->Dpc, (Irp), (Context)))
7863 IN NTSTATUS Status
);
7867 * IoSetCancelRoutine(
7869 * IN PDRIVER_CANCEL CancelRoutine)
7871 #define IoSetCancelRoutine(_Irp, \
7873 ((PDRIVER_CANCEL) InterlockedExchangePointer( \
7874 (PVOID *) &(_Irp)->CancelRoutine, (PVOID) (_CancelRoutine)))
7878 * IoSetCompletionRoutine(
7880 * IN PIO_COMPLETION_ROUTINE CompletionRoutine,
7882 * IN BOOLEAN InvokeOnSuccess,
7883 * IN BOOLEAN InvokeOnError,
7884 * IN BOOLEAN InvokeOnCancel)
7886 #define IoSetCompletionRoutine(_Irp, \
7887 _CompletionRoutine, \
7893 PIO_STACK_LOCATION _IrpSp; \
7894 ASSERT((_InvokeOnSuccess) || (_InvokeOnError) || (_InvokeOnCancel) ? \
7895 (_CompletionRoutine) != NULL : TRUE); \
7896 _IrpSp = IoGetNextIrpStackLocation(_Irp); \
7897 _IrpSp->CompletionRoutine = (PIO_COMPLETION_ROUTINE)(_CompletionRoutine); \
7898 _IrpSp->Context = (_Context); \
7899 _IrpSp->Control = 0; \
7900 if (_InvokeOnSuccess) _IrpSp->Control = SL_INVOKE_ON_SUCCESS; \
7901 if (_InvokeOnError) _IrpSp->Control |= SL_INVOKE_ON_ERROR; \
7902 if (_InvokeOnCancel) _IrpSp->Control |= SL_INVOKE_ON_CANCEL; \
7908 IoSetCompletionRoutineEx(
7909 IN PDEVICE_OBJECT DeviceObject
,
7911 IN PIO_COMPLETION_ROUTINE CompletionRoutine
,
7913 IN BOOLEAN InvokeOnSuccess
,
7914 IN BOOLEAN InvokeOnError
,
7915 IN BOOLEAN InvokeOnCancel
);
7920 IoSetDeviceInterfaceState(
7921 IN PUNICODE_STRING SymbolicLinkName
,
7927 IoSetHardErrorOrVerifyDevice(
7929 IN PDEVICE_OBJECT DeviceObject
);
7933 * IoSetNextIrpStackLocation(
7936 #define IoSetNextIrpStackLocation(_Irp) \
7938 (_Irp)->CurrentLocation--; \
7939 (_Irp)->Tail.Overlay.CurrentStackLocation--; \
7945 IoSetPartitionInformation(
7946 IN PDEVICE_OBJECT DeviceObject
,
7947 IN ULONG SectorSize
,
7948 IN ULONG PartitionNumber
,
7949 IN ULONG PartitionType
);
7954 IoSetPartitionInformationEx(
7955 IN PDEVICE_OBJECT DeviceObject
,
7956 IN ULONG PartitionNumber
,
7957 IN
struct _SET_PARTITION_INFORMATION_EX
*PartitionInfo
);
7963 IN ACCESS_MASK DesiredAccess
,
7964 IN ULONG DesiredShareAccess
,
7965 IN OUT PFILE_OBJECT FileObject
,
7966 OUT PSHARE_ACCESS ShareAccess
);
7971 IoSetStartIoAttributes(
7972 IN PDEVICE_OBJECT DeviceObject
,
7973 IN BOOLEAN DeferredStartIo
,
7974 IN BOOLEAN NonCancelable
);
7979 IoSetSystemPartition(
7980 IN PUNICODE_STRING VolumeNameString
);
7985 IoSetThreadHardErrorMode(
7986 IN BOOLEAN EnableHardErrors
);
7991 * IN CCHAR StackSize)
7993 #define IoSizeOfIrp(_StackSize) \
7994 ((USHORT) (sizeof(IRP) + ((_StackSize) * (sizeof(IO_STACK_LOCATION)))))
7998 * IoSkipCurrentIrpStackLocation(
8001 #define IoSkipCurrentIrpStackLocation(_Irp) \
8003 (_Irp)->CurrentLocation++; \
8004 (_Irp)->Tail.Overlay.CurrentStackLocation++; \
8011 IN PDEVICE_OBJECT DeviceObject
,
8012 IN BOOLEAN Cancelable
);
8017 IoStartNextPacketByKey(
8018 IN PDEVICE_OBJECT DeviceObject
,
8019 IN BOOLEAN Cancelable
,
8026 IN PDEVICE_OBJECT DeviceObject
,
8028 IN PULONG Key OPTIONAL
,
8029 IN PDRIVER_CANCEL CancelFunction OPTIONAL
);
8035 IN PDEVICE_OBJECT DeviceObject
);
8041 IN PDEVICE_OBJECT DeviceObject
);
8046 IoUnregisterPlugPlayNotification(
8047 IN PVOID NotificationEntry
);
8052 IoUnregisterShutdownNotification(
8053 IN PDEVICE_OBJECT DeviceObject
);
8058 IoUpdateShareAccess(
8059 IN PFILE_OBJECT FileObject
,
8060 IN OUT PSHARE_ACCESS ShareAccess
);
8065 IoVerifyPartitionTable(
8066 IN PDEVICE_OBJECT DeviceObject
,
8067 IN BOOLEAN FixErrors
);
8072 IoVolumeDeviceToDosName(
8073 IN PVOID VolumeDeviceObject
,
8074 OUT PUNICODE_STRING DosName
);
8079 IoWMIAllocateInstanceIds(
8081 IN ULONG InstanceCount
,
8082 OUT ULONG
*FirstInstanceId
);
8087 IoWMIDeviceObjectToProviderId(
8088 IN PDEVICE_OBJECT DeviceObject
);
8093 IoWMIDeviceObjectToInstanceName(
8094 IN PVOID DataBlockObject
,
8095 IN PDEVICE_OBJECT DeviceObject
,
8096 OUT PUNICODE_STRING InstanceName
);
8102 IN PVOID DataBlockObject
,
8103 IN PUNICODE_STRING InstanceName
,
8105 IN ULONG InBufferSize
,
8106 IN OUT PULONG OutBufferSize
,
8107 IN OUT PUCHAR InOutBuffer
);
8112 IoWMIHandleToInstanceName(
8113 IN PVOID DataBlockObject
,
8114 IN HANDLE FileHandle
,
8115 OUT PUNICODE_STRING InstanceName
);
8121 IN GUID
*DataBlockGuid
,
8122 IN ULONG DesiredAccess
,
8123 OUT PVOID
*DataBlockObject
);
8129 IN PVOID DataBlockObject
,
8130 IN OUT ULONG
*InOutBufferSize
,
8131 OUT PVOID OutBuffer
);
8136 IoWMIQueryAllDataMultiple(
8137 IN PVOID
*DataBlockObjectList
,
8138 IN ULONG ObjectCount
,
8139 IN OUT ULONG
*InOutBufferSize
,
8140 OUT PVOID OutBuffer
);
8145 IoWMIQuerySingleInstance(
8146 IN PVOID DataBlockObject
,
8147 IN PUNICODE_STRING InstanceName
,
8148 IN OUT ULONG
*InOutBufferSize
,
8149 OUT PVOID OutBuffer
);
8154 IoWMIQuerySingleInstanceMultiple(
8155 IN PVOID
*DataBlockObjectList
,
8156 IN PUNICODE_STRING InstanceNames
,
8157 IN ULONG ObjectCount
,
8158 IN OUT ULONG
*InOutBufferSize
,
8159 OUT PVOID OutBuffer
);
8164 IoWMIRegistrationControl(
8165 IN PDEVICE_OBJECT DeviceObject
,
8171 IoWMISetNotificationCallback(
8173 IN WMI_NOTIFICATION_CALLBACK Callback
,
8179 IoWMISetSingleInstance(
8180 IN PVOID DataBlockObject
,
8181 IN PUNICODE_STRING InstanceName
,
8183 IN ULONG ValueBufferSize
,
8184 IN PVOID ValueBuffer
);
8190 IN PVOID DataBlockObject
,
8191 IN PUNICODE_STRING InstanceName
,
8192 IN ULONG DataItemId
,
8194 IN ULONG ValueBufferSize
,
8195 IN PVOID ValueBuffer
);
8200 IoWMISuggestInstanceName(
8201 IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL
,
8202 IN PUNICODE_STRING SymbolicLinkName OPTIONAL
,
8203 IN BOOLEAN CombineNames
,
8204 OUT PUNICODE_STRING SuggestedInstanceName
);
8210 IN PVOID WnodeEventItem
);
8215 IoWriteErrorLogEntry(
8221 IoWritePartitionTable(
8222 IN PDEVICE_OBJECT DeviceObject
,
8223 IN ULONG SectorSize
,
8224 IN ULONG SectorsPerTrack
,
8225 IN ULONG NumberOfHeads
,
8226 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
8231 IoWritePartitionTableEx(
8232 IN PDEVICE_OBJECT DeviceObject
,
8233 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
*PartitionBuffer
);
8237 /** Kernel routines **/
8239 #if defined (_M_AMD64)
8243 KeAcquireInStackQueuedSpinLock(
8244 IN PKSPIN_LOCK SpinLock
,
8245 IN PKLOCK_QUEUE_HANDLE LockHandle
);
8250 KeReleaseInStackQueuedSpinLock(
8251 IN PKLOCK_QUEUE_HANDLE LockHandle
);
8256 KeAcquireInStackQueuedSpinLock(
8257 IN PKSPIN_LOCK SpinLock
,
8258 IN PKLOCK_QUEUE_HANDLE LockHandle
);
8263 KeReleaseInStackQueuedSpinLock(
8264 IN PKLOCK_QUEUE_HANDLE LockHandle
);
8270 KeAcquireInStackQueuedSpinLockAtDpcLevel(
8271 IN PKSPIN_LOCK SpinLock
,
8272 IN PKLOCK_QUEUE_HANDLE LockHandle
);
8277 KeAcquireInterruptSpinLock(
8278 IN PKINTERRUPT Interrupt
);
8291 IN ULONG BugCheckCode
);
8298 IN ULONG BugCheckCode
,
8299 IN ULONG_PTR BugCheckParameter1
,
8300 IN ULONG_PTR BugCheckParameter2
,
8301 IN ULONG_PTR BugCheckParameter3
,
8302 IN ULONG_PTR BugCheckParameter4
);
8319 KeDelayExecutionThread(
8320 IN KPROCESSOR_MODE WaitMode
,
8321 IN BOOLEAN Alertable
,
8322 IN PLARGE_INTEGER Interval
);
8327 KeDeregisterBugCheckCallback(
8328 IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord
);
8333 KeEnterCriticalRegion(
8340 * IN BOOLEAN ReadOperation,
8341 * IN BOOLEAN DmaOperation)
8343 #define KeFlushIoBuffers(_Mdl, _ReadOperation, _DmaOperation)
8345 #define ExAcquireSpinLock(Lock, OldIrql) KeAcquireSpinLock((Lock), (OldIrql))
8346 #define ExReleaseSpinLock(Lock, OldIrql) KeReleaseSpinLock((Lock), (OldIrql))
8347 #define ExAcquireSpinLockAtDpcLevel(Lock) KeAcquireSpinLockAtDpcLevel(Lock)
8348 #define ExReleaseSpinLockFromDpcLevel(Lock) KeReleaseSpinLockFromDpcLevel(Lock)
8360 KeFlushWriteBuffer(VOID
);
8365 KeGetRecommendedSharedDataAlignment(
8371 KeInitializeDeviceQueue(
8372 IN PKDEVICE_QUEUE DeviceQueue
);
8384 KeInitializeSemaphore(
8385 IN PRKSEMAPHORE Semaphore
,
8398 KeInitializeTimerEx(
8400 IN TIMER_TYPE Type
);
8405 KeInsertByKeyDeviceQueue(
8406 IN PKDEVICE_QUEUE DeviceQueue
,
8407 IN PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
,
8413 KeInsertDeviceQueue(
8414 IN PKDEVICE_QUEUE DeviceQueue
,
8415 IN PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
);
8422 IN PVOID SystemArgument1
,
8423 IN PVOID SystemArgument2
);
8428 KeLeaveCriticalRegion(
8438 volatile LONG Barrier
;
8439 #if defined(__GNUC__)
8440 __asm__
__volatile__ ("xchg %%eax, %0" : : "m" (Barrier
) : "%eax");
8441 #elif defined(_MSC_VER)
8442 __asm xchg
[Barrier
], eax
8453 IN KPRIORITY Increment
,
8459 KeQueryActiveProcessors(
8466 KeQueryPerformanceCounter(
8467 OUT PLARGE_INTEGER PerformanceFrequency OPTIONAL
);
8472 KeQueryPriorityThread(
8473 IN PRKTHREAD Thread
);
8478 KeQueryRuntimeThread(
8480 OUT PULONG UserTime
);
8482 #if !defined(_M_AMD64)
8486 KeQueryInterruptTime(
8493 OUT PLARGE_INTEGER CurrentTime
);
8499 OUT PLARGE_INTEGER TickCount
);
8505 KeQueryTimeIncrement(
8524 KeReadStateSemaphore(
8525 IN PRKSEMAPHORE Semaphore
);
8536 KeRegisterBugCheckCallback(
8537 IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord
,
8538 IN PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine
,
8541 IN PUCHAR Component
);
8546 KeRegisterNmiCallback(
8547 IN PNMI_CALLBACK CallbackRoutine
,
8554 KeDeregisterNmiCallback(
8561 KeReleaseInStackQueuedSpinLockFromDpcLevel(
8562 IN PKLOCK_QUEUE_HANDLE LockHandle
);
8567 KeReleaseInterruptSpinLock(
8568 IN PKINTERRUPT Interrupt
,
8582 IN PRKSEMAPHORE Semaphore
,
8583 IN KPRIORITY Increment
,
8588 PKDEVICE_QUEUE_ENTRY
8590 KeRemoveByKeyDeviceQueue(
8591 IN PKDEVICE_QUEUE DeviceQueue
,
8595 PKDEVICE_QUEUE_ENTRY
8597 KeRemoveDeviceQueue(
8598 IN PKDEVICE_QUEUE DeviceQueue
);
8603 KeRemoveEntryDeviceQueue(
8604 IN PKDEVICE_QUEUE DeviceQueue
,
8605 IN PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
);
8622 KeRestoreFloatingPointState(
8623 IN PKFLOATING_SAVE FloatSave
);
8628 KeRevertToUserAffinityThread(VOID
);
8633 KeSaveFloatingPointState(
8634 OUT PKFLOATING_SAVE FloatSave
);
8639 KeSetBasePriorityThread(
8640 IN PRKTHREAD Thread
,
8648 IN KPRIORITY Increment
,
8656 IN KDPC_IMPORTANCE Importance
);
8661 KeSetPriorityThread(
8663 IN KPRIORITY Priority
);
8668 KeSetSystemAffinityThread(
8669 IN KAFFINITY Affinity
);
8674 KeSetTargetProcessorDpc(
8683 IN LARGE_INTEGER DueTime
,
8684 IN PKDPC Dpc OPTIONAL
);
8691 IN LARGE_INTEGER DueTime
,
8692 IN LONG Period OPTIONAL
,
8693 IN PKDPC Dpc OPTIONAL
);
8698 KeSetTimeUpdateNotifyRoutine(
8699 IN PTIME_UPDATE_NOTIFY_ROUTINE NotifyRoutine
);
8704 KeStallExecutionProcessor(
8705 IN ULONG MicroSeconds
);
8710 KeSynchronizeExecution(
8711 IN PKINTERRUPT Interrupt
,
8712 IN PKSYNCHRONIZE_ROUTINE SynchronizeRoutine
,
8713 IN PVOID SynchronizeContext
);
8718 KeWaitForMultipleObjects(
8721 IN WAIT_TYPE WaitType
,
8722 IN KWAIT_REASON WaitReason
,
8723 IN KPROCESSOR_MODE WaitMode
,
8724 IN BOOLEAN Alertable
,
8725 IN PLARGE_INTEGER Timeout OPTIONAL
,
8726 IN PKWAIT_BLOCK WaitBlockArray OPTIONAL
);
8731 KeWaitForMutexObject(
8733 IN KWAIT_REASON WaitReason
,
8734 IN KPROCESSOR_MODE WaitMode
,
8735 IN BOOLEAN Alertable
,
8736 IN PLARGE_INTEGER Timeout OPTIONAL
);
8741 KeWaitForSingleObject(
8743 IN KWAIT_REASON WaitReason
,
8744 IN KPROCESSOR_MODE WaitMode
,
8745 IN BOOLEAN Alertable
,
8746 IN PLARGE_INTEGER Timeout OPTIONAL
);
8750 (NTAPI
*PKIPI_BROADCAST_WORKER
)(
8751 IN ULONG_PTR Argument
8758 IN PKIPI_BROADCAST_WORKER BroadcastFunction
,
8759 IN ULONG_PTR Context
8779 KeRaiseIrqlToDpcLevel(
8785 KeRaiseIrqlToSynchLevel(
8788 #define KeLowerIrql(a) KfLowerIrql(a)
8789 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
8791 #elif defined(_M_AMD64)
8795 KeGetCurrentIrql(VOID
)
8797 return (KIRQL
)__readcr8();
8802 KeLowerIrql(IN KIRQL NewIrql
)
8804 ASSERT(KeGetCurrentIrql() >= NewIrql
);
8805 __writecr8(NewIrql
);
8810 KfRaiseIrql(IN KIRQL NewIrql
)
8814 OldIrql
= __readcr8();
8815 ASSERT(OldIrql
<= NewIrql
);
8816 __writecr8(NewIrql
);
8819 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
8823 KeRaiseIrqlToDpcLevel(VOID
)
8825 return KfRaiseIrql(DISPATCH_LEVEL
);
8830 KeRaiseIrqlToSynchLevel(VOID
)
8832 return KfRaiseIrql(12); // SYNCH_LEVEL = IPI_LEVEL - 2
8835 #elif defined(__PowerPC__)
8852 KeRaiseIrqlToDpcLevel(
8858 KeRaiseIrqlToSynchLevel(
8861 #define KeLowerIrql(a) KfLowerIrql(a)
8862 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
8864 #elif defined(_M_MIPS)
8866 #define KeLowerIrql(a) KfLowerIrql(a)
8867 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
8884 KeRaiseIrqlToDpcLevel(
8890 KeRaiseIrqlToSynchLevel(
8893 #elif defined(_M_ARM)
8910 OUT PKIRQL OldIrql
);
8915 KeRaiseIrqlToDpcLevel(
8921 KeRaiseIrqlToSynchLevel(
8926 /** Memory manager routines **/
8933 IN ULONG NumberOfBytes
);
8938 MmAllocateContiguousMemory(
8939 IN ULONG NumberOfBytes
,
8940 IN PHYSICAL_ADDRESS HighestAcceptableAddress
);
8945 MmAllocateContiguousMemorySpecifyCache(
8946 IN SIZE_T NumberOfBytes
,
8947 IN PHYSICAL_ADDRESS LowestAcceptableAddress
,
8948 IN PHYSICAL_ADDRESS HighestAcceptableAddress
,
8949 IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL
,
8950 IN MEMORY_CACHING_TYPE CacheType
);
8955 MmAllocateMappingAddress(
8956 IN SIZE_T NumberOfBytes
,
8962 MmAllocateNonCachedMemory(
8963 IN ULONG NumberOfBytes
);
8968 MmAllocatePagesForMdl(
8969 IN PHYSICAL_ADDRESS LowAddress
,
8970 IN PHYSICAL_ADDRESS HighAddress
,
8971 IN PHYSICAL_ADDRESS SkipBytes
,
8972 IN SIZE_T TotalBytes
);
8974 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
8978 MmAllocatePagesForMdlEx(
8979 IN PHYSICAL_ADDRESS LowAddress
,
8980 IN PHYSICAL_ADDRESS HighAddress
,
8981 IN PHYSICAL_ADDRESS SkipBytes
,
8982 IN SIZE_T TotalBytes
,
8983 IN MEMORY_CACHING_TYPE CacheType
,
8990 MmBuildMdlForNonPagedPool(
8991 IN OUT PMDL MemoryDescriptorList
);
8993 typedef enum _MMFLUSH_TYPE
{
9001 MmFlushImageSection(
9002 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
9003 IN MMFLUSH_TYPE FlushType
);
9008 MmFreeContiguousMemory(
9009 IN PVOID BaseAddress
);
9014 MmFreeContiguousMemorySpecifyCache(
9015 IN PVOID BaseAddress
,
9016 IN SIZE_T NumberOfBytes
,
9017 IN MEMORY_CACHING_TYPE CacheType
);
9022 MmFreeMappingAddress(
9023 IN PVOID BaseAddress
,
9029 MmFreeNonCachedMemory(
9030 IN PVOID BaseAddress
,
9031 IN SIZE_T NumberOfBytes
);
9037 IN PMDL MemoryDescriptorList
);
9041 * MmGetMdlByteCount(
9044 #define MmGetMdlByteCount(_Mdl) \
9049 * MmGetMdlByteOffset(
9052 #define MmGetMdlByteOffset(_Mdl) \
9053 ((_Mdl)->ByteOffset)
9060 #define MmGetMdlPfnArray(_Mdl) \
9061 ((PPFN_NUMBER) ((_Mdl) + 1))
9065 * MmGetMdlVirtualAddress(
9068 #define MmGetMdlVirtualAddress(_Mdl) \
9069 ((PVOID) ((PCHAR) ((_Mdl)->StartVa) + (_Mdl)->ByteOffset))
9074 MmGetPhysicalAddress(
9075 IN PVOID BaseAddress
);
9078 PPHYSICAL_MEMORY_RANGE
9080 MmGetPhysicalMemoryRanges(
9086 MmGetVirtualForPhysical(
9087 IN PHYSICAL_ADDRESS PhysicalAddress
);
9092 MmMapLockedPagesSpecifyCache(
9093 IN PMDL MemoryDescriptorList
,
9094 IN KPROCESSOR_MODE AccessMode
,
9095 IN MEMORY_CACHING_TYPE CacheType
,
9096 IN PVOID BaseAddress
,
9097 IN ULONG BugCheckOnFailure
,
9098 IN MM_PAGE_PRIORITY Priority
);
9103 MmMapLockedPagesWithReservedMapping(
9104 IN PVOID MappingAddress
,
9106 IN PMDL MemoryDescriptorList
,
9107 IN MEMORY_CACHING_TYPE CacheType
);
9112 MmMapUserAddressesToPage(
9113 IN PVOID BaseAddress
,
9114 IN SIZE_T NumberOfBytes
,
9115 IN PVOID PageAddress
);
9121 IN PHYSICAL_ADDRESS PhysicalAddress
,
9122 IN SIZE_T NumberOfBytes
,
9123 IN MEMORY_CACHING_TYPE CacheType
);
9128 MmMapViewInSessionSpace(
9130 OUT PVOID
*MappedBase
,
9131 IN OUT PSIZE_T ViewSize
);
9136 MmMapViewInSystemSpace(
9138 OUT PVOID
*MappedBase
,
9139 IN PSIZE_T ViewSize
);
9144 MmMarkPhysicalMemoryAsBad(
9145 IN PPHYSICAL_ADDRESS StartAddress
,
9146 IN OUT PLARGE_INTEGER NumberOfBytes
);
9151 MmMarkPhysicalMemoryAsGood(
9152 IN PPHYSICAL_ADDRESS StartAddress
,
9153 IN OUT PLARGE_INTEGER NumberOfBytes
);
9158 MmGetSystemRoutineAddress(
9159 IN PUNICODE_STRING SystemRoutineName
);
9163 * ADDRESS_AND_SIZE_TO_SPAN_PAGES(
9167 #define ADDRESS_AND_SIZE_TO_SPAN_PAGES(_Va, \
9169 ((ULONG) ((((ULONG_PTR) (_Va) & (PAGE_SIZE - 1)) \
9170 + (_Size) + (PAGE_SIZE - 1)) >> PAGE_SHIFT))
9175 * IN PMDL MemoryDescriptorList,
9179 #define MmInitializeMdl(_MemoryDescriptorList, \
9183 (_MemoryDescriptorList)->Next = (PMDL) NULL; \
9184 (_MemoryDescriptorList)->Size = (CSHORT) (sizeof(MDL) + \
9185 (sizeof(PFN_NUMBER) * ADDRESS_AND_SIZE_TO_SPAN_PAGES(_BaseVa, _Length))); \
9186 (_MemoryDescriptorList)->MdlFlags = 0; \
9187 (_MemoryDescriptorList)->StartVa = (PVOID) PAGE_ALIGN(_BaseVa); \
9188 (_MemoryDescriptorList)->ByteOffset = BYTE_OFFSET(_BaseVa); \
9189 (_MemoryDescriptorList)->ByteCount = (ULONG) _Length; \
9196 IN PVOID VirtualAddress
);
9201 MmIsDriverVerifying(
9202 IN PDRIVER_OBJECT DriverObject
);
9207 MmIsThisAnNtAsSystem(
9213 MmIsVerifierEnabled(
9214 OUT PULONG VerifierFlags
);
9219 MmLockPagableDataSection(
9220 IN PVOID AddressWithinSection
);
9225 MmLockPagableImageSection(
9226 IN PVOID AddressWithinSection
);
9230 * MmLockPagableCodeSection(
9231 * IN PVOID AddressWithinSection)
9233 #define MmLockPagableCodeSection(Address) MmLockPagableDataSection(Address)
9238 MmLockPagableSectionByHandle(
9239 IN PVOID ImageSectionHandle
);
9245 IN PHYSICAL_ADDRESS PhysicalAddress
,
9246 IN ULONG NumberOfBytes
,
9247 IN MEMORY_CACHING_TYPE CacheEnable
);
9253 IN PMDL MemoryDescriptorList
,
9254 IN KPROCESSOR_MODE AccessMode
);
9259 MmLockPageableDataSection (
9260 IN PVOID AddressWithinSection
9266 MmUnlockPageableImageSection(
9267 IN PVOID ImageSectionHandle
9274 IN PVOID AddressWithinSection
);
9279 MmProbeAndLockProcessPages(
9280 IN OUT PMDL MemoryDescriptorList
,
9281 IN PEPROCESS Process
,
9282 IN KPROCESSOR_MODE AccessMode
,
9283 IN LOCK_OPERATION Operation
);
9288 MmProtectMdlSystemAddress(
9289 IN PMDL MemoryDescriptorList
,
9290 IN ULONG NewProtect
);
9296 IN PVOID BaseAddress
,
9297 IN PMDL MemoryDescriptorList
);
9302 MmUnmapViewInSessionSpace(
9303 IN PVOID MappedBase
);
9308 MmUnmapViewInSystemSpace(
9309 IN PVOID MappedBase
);
9314 MmUnsecureVirtualMemory(
9315 IN HANDLE SecureHandle
);
9319 * MmPrepareMdlForReuse(
9322 #define MmPrepareMdlForReuse(_Mdl) \
9324 if (((_Mdl)->MdlFlags & MDL_PARTIAL_HAS_BEEN_MAPPED) != 0) { \
9325 ASSERT(((_Mdl)->MdlFlags & MDL_PARTIAL) != 0); \
9326 MmUnmapLockedPages((_Mdl)->MappedSystemVa, (_Mdl)); \
9327 } else if (((_Mdl)->MdlFlags & MDL_PARTIAL) == 0) { \
9328 ASSERT(((_Mdl)->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA) == 0); \
9332 #define MmGetProcedureAddress(Address) (Address)
9337 MmProbeAndLockPages(
9338 IN OUT PMDL MemoryDescriptorList
,
9339 IN KPROCESSOR_MODE AccessMode
,
9340 IN LOCK_OPERATION Operation
);
9351 MmRemovePhysicalMemory(
9352 IN PPHYSICAL_ADDRESS StartAddress
,
9353 IN OUT PLARGE_INTEGER NumberOfBytes
);
9358 MmResetDriverPaging(
9359 IN PVOID AddressWithinSection
);
9364 MmSecureVirtualMemory(
9367 IN ULONG ProbeMode
);
9379 MmUnlockPagableImageSection(
9380 IN PVOID ImageSectionHandle
);
9386 IN PMDL MemoryDescriptorList
);
9392 IN PVOID BaseAddress
,
9393 IN SIZE_T NumberOfBytes
);
9398 MmUnmapReservedMapping(
9399 IN PVOID BaseAddress
,
9401 IN PMDL MemoryDescriptorList
);
9406 MmUnmapVideoDisplay(
9407 IN PVOID BaseAddress
,
9408 IN SIZE_T NumberOfBytes
);
9412 /** Object manager routines **/
9418 IN PACCESS_STATE AccessState
,
9419 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
9421 IN POBJECT_TYPE Type
);
9426 ObDereferenceSecurityDescriptor(
9427 PSECURITY_DESCRIPTOR SecurityDescriptor
,
9433 ObfDereferenceObject(
9438 * ObDereferenceObject(
9441 #define ObDereferenceObject ObfDereferenceObject
9446 ObGetObjectSecurity(
9448 OUT PSECURITY_DESCRIPTOR
*SecurityDescriptor
,
9449 OUT PBOOLEAN MemoryAllocated
);
9456 IN PACCESS_STATE PassedAccessState OPTIONAL
,
9457 IN ACCESS_MASK DesiredAccess
,
9458 IN ULONG AdditionalReferences
,
9459 OUT PVOID
* ReferencedObject OPTIONAL
,
9460 OUT PHANDLE Handle
);
9471 ObLogSecurityDescriptor(
9472 IN PSECURITY_DESCRIPTOR InputSecurityDescriptor
,
9473 OUT PSECURITY_DESCRIPTOR
*OutputSecurityDescriptor
,
9477 * ObReferenceObject(
9480 #define ObReferenceObject ObfReferenceObject
9485 ObMakeTemporaryObject(
9492 IN POBJECT_ATTRIBUTES ObjectAttributes
,
9493 IN POBJECT_TYPE ObjectType
,
9494 IN KPROCESSOR_MODE AccessMode
,
9495 IN PACCESS_STATE PassedAccessState
,
9496 IN ACCESS_MASK DesiredAccess
,
9497 IN OUT PVOID ParseContext OPTIONAL
,
9498 OUT PHANDLE Handle
);
9503 ObOpenObjectByPointer(
9505 IN ULONG HandleAttributes
,
9506 IN PACCESS_STATE PassedAccessState OPTIONAL
,
9507 IN ACCESS_MASK DesiredAccess OPTIONAL
,
9508 IN POBJECT_TYPE ObjectType OPTIONAL
,
9509 IN KPROCESSOR_MODE AccessMode
,
9510 OUT PHANDLE Handle
);
9515 ObQueryObjectAuditingByHandle(
9517 OUT PBOOLEAN GenerateOnClose
);
9522 ObReferenceObjectByHandle(
9524 IN ACCESS_MASK DesiredAccess
,
9525 IN POBJECT_TYPE ObjectType OPTIONAL
,
9526 IN KPROCESSOR_MODE AccessMode
,
9528 OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL
);
9533 ObReferenceObjectByName(
9534 IN PUNICODE_STRING ObjectPath
,
9535 IN ULONG Attributes
,
9536 IN PACCESS_STATE PassedAccessState OPTIONAL
,
9537 IN ACCESS_MASK DesiredAccess OPTIONAL
,
9538 IN POBJECT_TYPE ObjectType
,
9539 IN KPROCESSOR_MODE AccessMode
,
9540 IN OUT PVOID ParseContext OPTIONAL
,
9546 ObReferenceObjectByPointer(
9548 IN ACCESS_MASK DesiredAccess
,
9549 IN POBJECT_TYPE ObjectType
,
9550 IN KPROCESSOR_MODE AccessMode
);
9555 ObReferenceSecurityDescriptor(
9556 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
9562 ObReleaseObjectSecurity(
9563 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
9564 IN BOOLEAN MemoryAllocated
);
9568 /** Process manager routines **/
9573 PsCreateSystemProcess(
9574 IN PHANDLE ProcessHandle
,
9575 IN ACCESS_MASK DesiredAccess
,
9576 IN POBJECT_ATTRIBUTES ObjectAttributes
);
9581 PsCreateSystemThread(
9582 OUT PHANDLE ThreadHandle
,
9583 IN ULONG DesiredAccess
,
9584 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
9585 IN HANDLE ProcessHandle OPTIONAL
,
9586 OUT PCLIENT_ID ClientId OPTIONAL
,
9587 IN PKSTART_ROUTINE StartRoutine
,
9588 IN PVOID StartContext
);
9592 * PsGetCurrentProcess(VOID)
9594 #define PsGetCurrentProcess IoGetCurrentProcess
9599 PsGetCurrentProcessId(
9604 * PsGetCurrentThread(VOID)
9606 #define PsGetCurrentThread() \
9607 ((PETHREAD) KeGetCurrentThread())
9612 PsGetCurrentThreadId(
9618 PsGetProcessId(PEPROCESS Process
);
9624 PULONG MajorVersion OPTIONAL
,
9625 PULONG MinorVersion OPTIONAL
,
9626 PULONG BuildNumber OPTIONAL
,
9627 PUNICODE_STRING CSDVersion OPTIONAL
);
9632 PsRemoveCreateThreadNotifyRoutine(
9633 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
9638 PsRemoveLoadImageNotifyRoutine(
9639 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
9644 PsSetCreateProcessNotifyRoutine(
9645 IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine
,
9651 PsSetCreateThreadNotifyRoutine(
9652 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
9657 PsSetLoadImageNotifyRoutine(
9658 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
9663 PsTerminateSystemThread(
9664 IN NTSTATUS ExitStatus
);
9666 extern NTSYSAPI PEPROCESS PsInitialSystemProcess
;
9669 /** Security reference monitor routines **/
9675 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
9676 IN PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext
,
9677 IN BOOLEAN SubjectContextLocked
,
9678 IN ACCESS_MASK DesiredAccess
,
9679 IN ACCESS_MASK PreviouslyGrantedAccess
,
9680 OUT PPRIVILEGE_SET
*Privileges OPTIONAL
,
9681 IN PGENERIC_MAPPING GenericMapping
,
9682 IN KPROCESSOR_MODE AccessMode
,
9683 OUT PACCESS_MASK GrantedAccess
,
9684 OUT PNTSTATUS AccessStatus
);
9690 IN PSECURITY_DESCRIPTOR ParentDescriptor OPTIONAL
,
9691 IN PSECURITY_DESCRIPTOR ExplicitDescriptor OPTIONAL
,
9692 OUT PSECURITY_DESCRIPTOR
*NewDescriptor
,
9693 IN BOOLEAN IsDirectoryObject
,
9694 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
,
9695 IN PGENERIC_MAPPING GenericMapping
,
9696 IN POOL_TYPE PoolType
);
9702 IN PSECURITY_DESCRIPTOR ParentDescriptor OPTIONAL
,
9703 IN PSECURITY_DESCRIPTOR ExplicitDescriptor OPTIONAL
,
9704 OUT PSECURITY_DESCRIPTOR
*NewDescriptor
,
9705 IN GUID
*ObjectType OPTIONAL
,
9706 IN BOOLEAN IsDirectoryObject
,
9707 IN ULONG AutoInheritFlags
,
9708 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
,
9709 IN PGENERIC_MAPPING GenericMapping
,
9710 IN POOL_TYPE PoolType
);
9716 IN OUT PSECURITY_DESCRIPTOR
*SecurityDescriptor
);
9721 SeSinglePrivilegeCheck(
9722 LUID PrivilegeValue
,
9723 KPROCESSOR_MODE PreviousMode
);
9728 SeValidSecurityDescriptor(
9730 IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
9734 /** NtXxx routines **/
9740 OUT PHANDLE ProcessHandle
,
9741 IN ACCESS_MASK DesiredAccess
,
9742 IN POBJECT_ATTRIBUTES ObjectAttributes
,
9743 IN PCLIENT_ID ClientId OPTIONAL
);
9748 NtQueryInformationProcess(
9749 IN HANDLE ProcessHandle
,
9750 IN PROCESSINFOCLASS ProcessInformationClass
,
9751 OUT PVOID ProcessInformation
,
9752 IN ULONG ProcessInformationLength
,
9753 OUT PULONG ReturnLength OPTIONAL
);
9757 /** NtXxx and ZwXxx routines **/
9763 IN HANDLE TimerHandle
,
9764 OUT PBOOLEAN CurrentState OPTIONAL
);
9781 ZwCreateDirectoryObject(
9782 OUT PHANDLE DirectoryHandle
,
9783 IN ACCESS_MASK DesiredAccess
,
9784 IN POBJECT_ATTRIBUTES ObjectAttributes
);
9790 OUT PHANDLE EventHandle
,
9791 IN ACCESS_MASK DesiredAccess
,
9792 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
9793 IN EVENT_TYPE EventType
,
9794 IN BOOLEAN InitialState
);
9800 OUT PHANDLE EventHandle
,
9801 IN ACCESS_MASK DesiredAccess
,
9802 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
9803 IN EVENT_TYPE EventType
,
9804 IN BOOLEAN InitialState
);
9810 OUT PHANDLE FileHandle
,
9811 IN ACCESS_MASK DesiredAccess
,
9812 IN POBJECT_ATTRIBUTES ObjectAttributes
,
9813 OUT PIO_STATUS_BLOCK IoStatusBlock
,
9814 IN PLARGE_INTEGER AllocationSize OPTIONAL
,
9815 IN ULONG FileAttributes
,
9816 IN ULONG ShareAccess
,
9817 IN ULONG CreateDisposition
,
9818 IN ULONG CreateOptions
,
9819 IN PVOID EaBuffer OPTIONAL
,
9826 OUT PHANDLE KeyHandle
,
9827 IN ACCESS_MASK DesiredAccess
,
9828 IN POBJECT_ATTRIBUTES ObjectAttributes
,
9829 IN ULONG TitleIndex
,
9830 IN PUNICODE_STRING Class OPTIONAL
,
9831 IN ULONG CreateOptions
,
9832 OUT PULONG Disposition OPTIONAL
);
9838 OUT PHANDLE TimerHandle
,
9839 IN ACCESS_MASK DesiredAccess
,
9840 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
9841 IN TIMER_TYPE TimerType
);
9847 IN HANDLE KeyHandle
);
9853 IN HANDLE KeyHandle
,
9854 IN PUNICODE_STRING ValueName
);
9859 NtDeviceIoControlFile(
9860 IN HANDLE DeviceHandle
,
9861 IN HANDLE Event OPTIONAL
,
9862 IN PIO_APC_ROUTINE UserApcRoutine OPTIONAL
,
9863 IN PVOID UserApcContext OPTIONAL
,
9864 OUT PIO_STATUS_BLOCK IoStatusBlock
,
9865 IN ULONG IoControlCode
,
9866 IN PVOID InputBuffer
,
9867 IN ULONG InputBufferSize
,
9868 OUT PVOID OutputBuffer
,
9869 IN ULONG OutputBufferSize
);
9874 ZwDeviceIoControlFile(
9875 IN HANDLE DeviceHandle
,
9876 IN HANDLE Event OPTIONAL
,
9877 IN PIO_APC_ROUTINE UserApcRoutine OPTIONAL
,
9878 IN PVOID UserApcContext OPTIONAL
,
9879 OUT PIO_STATUS_BLOCK IoStatusBlock
,
9880 IN ULONG IoControlCode
,
9881 IN PVOID InputBuffer
,
9882 IN ULONG InputBufferSize
,
9883 OUT PVOID OutputBuffer
,
9884 IN ULONG OutputBufferSize
);
9890 IN HANDLE KeyHandle
,
9892 IN KEY_INFORMATION_CLASS KeyInformationClass
,
9893 OUT PVOID KeyInformation
,
9895 OUT PULONG ResultLength
);
9900 ZwEnumerateValueKey(
9901 IN HANDLE KeyHandle
,
9903 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
,
9904 OUT PVOID KeyValueInformation
,
9906 OUT PULONG ResultLength
);
9912 IN HANDLE KeyHandle
);
9917 ZwMakeTemporaryObject(
9924 IN HANDLE SectionHandle
,
9925 IN HANDLE ProcessHandle
,
9926 IN OUT PVOID
*BaseAddress
,
9927 IN ULONG_PTR ZeroBits
,
9928 IN SIZE_T CommitSize
,
9929 IN OUT PLARGE_INTEGER SectionOffset OPTIONAL
,
9930 IN OUT PSIZE_T ViewSize
,
9931 IN SECTION_INHERIT InheritDisposition
,
9932 IN ULONG AllocationType
,
9939 IN HANDLE SectionHandle
,
9940 IN HANDLE ProcessHandle
,
9941 IN OUT PVOID
*BaseAddress
,
9942 IN ULONG_PTR ZeroBits
,
9943 IN SIZE_T CommitSize
,
9944 IN OUT PLARGE_INTEGER SectionOffset OPTIONAL
,
9945 IN OUT PSIZE_T ViewSize
,
9946 IN SECTION_INHERIT InheritDisposition
,
9947 IN ULONG AllocationType
,
9954 OUT PHANDLE FileHandle
,
9955 IN ACCESS_MASK DesiredAccess
,
9956 IN POBJECT_ATTRIBUTES ObjectAttributes
,
9957 OUT PIO_STATUS_BLOCK IoStatusBlock
,
9958 IN ULONG ShareAccess
,
9959 IN ULONG OpenOptions
);
9965 OUT PHANDLE FileHandle
,
9966 IN ACCESS_MASK DesiredAccess
,
9967 IN POBJECT_ATTRIBUTES ObjectAttributes
,
9968 OUT PIO_STATUS_BLOCK IoStatusBlock
,
9969 IN ULONG ShareAccess
,
9970 IN ULONG OpenOptions
);
9976 OUT PHANDLE KeyHandle
,
9977 IN ACCESS_MASK DesiredAccess
,
9978 IN POBJECT_ATTRIBUTES ObjectAttributes
);
9984 OUT PHANDLE SectionHandle
,
9985 IN ACCESS_MASK DesiredAccess
,
9986 IN POBJECT_ATTRIBUTES ObjectAttributes
);
9991 ZwOpenSymbolicLinkObject(
9992 OUT PHANDLE LinkHandle
,
9993 IN ACCESS_MASK DesiredAccess
,
9994 IN POBJECT_ATTRIBUTES ObjectAttributes
);
10000 OUT PHANDLE TimerHandle
,
10001 IN ACCESS_MASK DesiredAccess
,
10002 IN POBJECT_ATTRIBUTES ObjectAttributes
);
10007 ZwQueryInformationFile(
10008 IN HANDLE FileHandle
,
10009 OUT PIO_STATUS_BLOCK IoStatusBlock
,
10010 OUT PVOID FileInformation
,
10012 IN FILE_INFORMATION_CLASS FileInformationClass
);
10018 IN HANDLE KeyHandle
,
10019 IN KEY_INFORMATION_CLASS KeyInformationClass
,
10020 OUT PVOID KeyInformation
,
10022 OUT PULONG ResultLength
);
10027 ZwQuerySymbolicLinkObject(
10028 IN HANDLE LinkHandle
,
10029 IN OUT PUNICODE_STRING LinkTarget
,
10030 OUT PULONG ReturnedLength OPTIONAL
);
10036 IN HANDLE KeyHandle
,
10037 IN PUNICODE_STRING ValueName
,
10038 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
,
10039 OUT PVOID KeyValueInformation
,
10041 OUT PULONG ResultLength
);
10047 IN HANDLE FileHandle
,
10048 IN HANDLE Event OPTIONAL
,
10049 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
10050 IN PVOID ApcContext OPTIONAL
,
10051 OUT PIO_STATUS_BLOCK IoStatusBlock
,
10054 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
10055 IN PULONG Key OPTIONAL
);
10061 IN HANDLE FileHandle
,
10062 IN HANDLE Event OPTIONAL
,
10063 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
10064 IN PVOID ApcContext OPTIONAL
,
10065 OUT PIO_STATUS_BLOCK IoStatusBlock
,
10068 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
10069 IN PULONG Key OPTIONAL
);
10075 IN HANDLE EventHandle
,
10076 OUT PLONG PreviousState OPTIONAL
);
10082 IN HANDLE EventHandle
,
10083 OUT PLONG PreviousState OPTIONAL
);
10088 ZwSetInformationFile(
10089 IN HANDLE FileHandle
,
10090 OUT PIO_STATUS_BLOCK IoStatusBlock
,
10091 IN PVOID FileInformation
,
10093 IN FILE_INFORMATION_CLASS FileInformationClass
);
10098 ZwSetInformationThread(
10099 IN HANDLE ThreadHandle
,
10100 IN THREADINFOCLASS ThreadInformationClass
,
10101 IN PVOID ThreadInformation
,
10102 IN ULONG ThreadInformationLength
);
10108 IN HANDLE TimerHandle
,
10109 IN PLARGE_INTEGER DueTime
,
10110 IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL
,
10111 IN PVOID TimerContext OPTIONAL
,
10112 IN BOOLEAN WakeTimer
,
10113 IN LONG Period OPTIONAL
,
10114 OUT PBOOLEAN PreviousState OPTIONAL
);
10120 IN HANDLE KeyHandle
,
10121 IN PUNICODE_STRING ValueName
,
10122 IN ULONG TitleIndex OPTIONAL
,
10125 IN ULONG DataSize
);
10127 /* [Nt|Zw]MapViewOfSection.InheritDisposition constants */
10128 #define AT_EXTENDABLE_FILE 0x00002000
10129 #define AT_RESERVED 0x20000000
10130 #define AT_ROUND_TO_PAGE 0x40000000
10135 NtUnmapViewOfSection(
10136 IN HANDLE ProcessHandle
,
10137 IN PVOID BaseAddress
);
10142 ZwUnmapViewOfSection(
10143 IN HANDLE ProcessHandle
,
10144 IN PVOID BaseAddress
);
10149 NtWaitForSingleObject(
10150 IN HANDLE ObjectHandle
,
10151 IN BOOLEAN Alertable
,
10152 IN PLARGE_INTEGER TimeOut OPTIONAL
);
10157 ZwWaitForSingleObject(
10158 IN HANDLE ObjectHandle
,
10159 IN BOOLEAN Alertable
,
10160 IN PLARGE_INTEGER TimeOut OPTIONAL
);
10166 IN HANDLE FileHandle
,
10167 IN HANDLE Event OPTIONAL
,
10168 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
10169 IN PVOID ApcContext OPTIONAL
,
10170 OUT PIO_STATUS_BLOCK IoStatusBlock
,
10173 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
10174 IN PULONG Key OPTIONAL
);
10180 IN HANDLE FileHandle
,
10181 IN HANDLE Event OPTIONAL
,
10182 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
10183 IN PVOID ApcContext OPTIONAL
,
10184 OUT PIO_STATUS_BLOCK IoStatusBlock
,
10187 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
10188 IN PULONG Key OPTIONAL
);
10192 /** Power management support routines **/
10198 IN PDEVICE_OBJECT DeviceObject
,
10204 PoRegisterDeviceForIdleDetection(
10205 IN PDEVICE_OBJECT DeviceObject
,
10206 IN ULONG ConservationIdleTime
,
10207 IN ULONG PerformanceIdleTime
,
10208 IN DEVICE_POWER_STATE State
);
10213 PoRegisterSystemState(
10214 IN PVOID StateHandle
,
10215 IN EXECUTION_STATE Flags
);
10221 IN PDEVICE_OBJECT DeviceObject
,
10222 IN UCHAR MinorFunction
,
10223 IN POWER_STATE PowerState
,
10224 IN PREQUEST_POWER_COMPLETE CompletionFunction
,
10226 OUT PIRP
*Irp OPTIONAL
);
10231 PoRequestShutdownEvent(
10238 PULONG IdlePointer
);
10240 #define PoSetDeviceBusy(IdlePointer) \
10241 ((void)(*(IdlePointer) = 0))
10247 IN PDEVICE_OBJECT DeviceObject
,
10248 IN POWER_STATE_TYPE Type
,
10249 IN POWER_STATE State
);
10255 IN EXECUTION_STATE Flags
);
10260 PoStartNextPowerIrp(
10266 PoUnregisterSystemState(
10267 IN PVOID StateHandle
);
10271 /** WMI library support routines **/
10275 WmiCompleteRequest(
10276 IN PDEVICE_OBJECT DeviceObject
,
10278 IN NTSTATUS Status
,
10279 IN ULONG BufferUsed
,
10280 IN CCHAR PriorityBoost
);
10285 IN PDEVICE_OBJECT DeviceObject
,
10287 IN ULONG InstanceIndex
,
10288 IN ULONG EventDataSize
,
10289 IN PVOID EventData
);
10294 WmiQueryTraceInformation(
10295 IN TRACE_INFORMATION_CLASS TraceInformationClass
,
10296 OUT PVOID TraceInformation
,
10297 IN ULONG TraceInformationLength
,
10298 OUT PULONG RequiredLength OPTIONAL
,
10299 IN PVOID Buffer OPTIONAL
);
10304 IN PWMILIB_CONTEXT WmiLibInfo
,
10305 IN PDEVICE_OBJECT DeviceObject
,
10307 OUT PSYSCTL_IRP_DISPOSITION IrpDisposition
);
10313 IN TRACEHANDLE LoggerHandle
,
10314 IN ULONG MessageFlags
,
10315 IN LPGUID MessageGuid
,
10316 IN USHORT MessageNumber
,
10320 /* FIXME: Get va_list from where? */
10325 IN TRACEHANDLE LoggerHandle
,
10326 IN ULONG MessageFlags
,
10327 IN LPGUID MessageGuid
,
10328 IN USHORT MessageNumber
,
10329 IN
va_list MessageArgList
);
10333 /** Kernel debugger routines **/
10350 KdRefreshDebuggerNotPresent(
10354 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
10359 IN KD_OPTION Option
,
10360 IN ULONG InBufferBytes OPTIONAL
,
10362 IN ULONG OutBufferBytes OPTIONAL
,
10363 OUT PVOID OutBuffer
,
10364 OUT PULONG OutBufferNeeded OPTIONAL
);
10375 DbgBreakPointWithStatus(
10388 IN ULONG ComponentId
,
10396 IN ULONG ComponentId
,
10403 vDbgPrintExWithPrefix(
10405 IN ULONG ComponentId
,
10413 DbgPrintReturnControlC(
10422 IN ULONG MaximumResponseLength
10428 DbgQueryDebugFilterState(
10429 IN ULONG ComponentId
,
10435 DbgSetDebugFilterState(
10436 IN ULONG ComponentId
,
10442 #define KdPrint(_x_) DbgPrint _x_
10443 #define KdPrintEx(_x_) DbgPrintEx _x_
10444 #define KdBreakPoint() DbgBreakPoint()
10445 #define KdBreakPointWithStatus(s) DbgBreakPointWithStatus(s)
10449 #define KdPrint(_x_)
10450 #define KdPrintEx(_x_)
10451 #define KdBreakPoint()
10452 #define KdBreakPointWithStatus(s)
10456 #if defined(__GNUC__)
10458 extern NTKERNELAPI BOOLEAN KdDebuggerNotPresent
;
10459 extern NTKERNELAPI BOOLEAN KdDebuggerEnabled
;
10460 #define KD_DEBUGGER_ENABLED KdDebuggerEnabled
10461 #define KD_DEBUGGER_NOT_PRESENT KdDebuggerNotPresent
10463 #elif defined(_NTDDK_) || defined(_NTHAL_) || defined(_WDMDDK_) || defined(_NTOSP_)
10465 extern NTKERNELAPI PBOOLEAN KdDebuggerNotPresent
;
10466 extern NTKERNELAPI PBOOLEAN KdDebuggerEnabled
;
10467 #define KD_DEBUGGER_ENABLED *KdDebuggerEnabled
10468 #define KD_DEBUGGER_NOT_PRESENT *KdDebuggerNotPresent
10472 extern BOOLEAN KdDebuggerNotPresent
;
10473 extern BOOLEAN KdDebuggerEnabled
;
10474 #define KD_DEBUGGER_ENABLED KdDebuggerEnabled
10475 #define KD_DEBUGGER_NOT_PRESENT KdDebuggerNotPresent
10479 /** Stuff from winnt4.h */
10481 #ifndef DMA_MACROS_DEFINED
10483 #if (NTDDI_VERSION >= NTDDI_WIN2K)
10485 //DECLSPEC_DEPRECATED_DDK
10489 IoFlushAdapterBuffers(
10490 IN PADAPTER_OBJECT AdapterObject
,
10492 IN PVOID MapRegisterBase
,
10493 IN PVOID CurrentVa
,
10495 IN BOOLEAN WriteToDevice
);
10497 //DECLSPEC_DEPRECATED_DDK
10501 IoFreeAdapterChannel(
10502 IN PADAPTER_OBJECT AdapterObject
);
10504 //DECLSPEC_DEPRECATED_DDK
10508 IoFreeMapRegisters(
10509 IN PADAPTER_OBJECT AdapterObject
,
10510 IN PVOID MapRegisterBase
,
10511 IN ULONG NumberOfMapRegisters
);
10513 //DECLSPEC_DEPRECATED_DDK
10518 IN PADAPTER_OBJECT AdapterObject
,
10520 IN PVOID MapRegisterBase
,
10521 IN PVOID CurrentVa
,
10522 IN OUT PULONG Length
,
10523 IN BOOLEAN WriteToDevice
);
10526 #endif // (NTDDI_VERSION >= NTDDI_WIN2K)
10527 #endif // !defined(DMA_MACROS_DEFINED)
10533 IN PUNICODE_STRING RegistryPath
,
10534 IN PUNICODE_STRING DriverClassName OPTIONAL
,
10535 IN PDRIVER_OBJECT DriverObject
,
10536 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
10537 IN PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources
,
10538 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
10543 IoAttachDeviceByPointer(
10544 IN PDEVICE_OBJECT SourceDevice
,
10545 IN PDEVICE_OBJECT TargetDevice
);
10550 MmIsNonPagedSystemAddressValid(
10551 IN PVOID VirtualAddress
);
10553 #if defined(_AMD64_) || defined(_IA64_)
10554 //DECLSPEC_DEPRECATED_DDK_WINXP
10558 RtlLargeIntegerDivide(
10559 IN LARGE_INTEGER Dividend
,
10560 IN LARGE_INTEGER Divisor
,
10561 IN OUT PLARGE_INTEGER Remainder
)
10564 ret
.QuadPart
= Dividend
.QuadPart
/ Divisor
.QuadPart
;
10566 Remainder
->QuadPart
= Dividend
.QuadPart
% Divisor
.QuadPart
;
10573 RtlLargeIntegerDivide(
10574 IN LARGE_INTEGER Dividend
,
10575 IN LARGE_INTEGER Divisor
,
10576 IN OUT PLARGE_INTEGER Remainder
);
10582 ExInterlockedDecrementLong(
10584 IN PKSPIN_LOCK Lock
);
10589 ExInterlockedExchangeUlong(
10592 IN PKSPIN_LOCK Lock
);
10597 ExInterlockedIncrementLong(
10599 IN PKSPIN_LOCK Lock
);
10604 HalAcquireDisplayOwnership(
10605 IN PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters
);
10610 HalAllocateAdapterChannel(
10611 IN PADAPTER_OBJECT AdapterObject
,
10612 IN PWAIT_CONTEXT_BLOCK Wcb
,
10613 IN ULONG NumberOfMapRegisters
,
10614 IN PDRIVER_CONTROL ExecutionRoutine
);
10619 HalAllocateCommonBuffer(
10620 IN PADAPTER_OBJECT AdapterObject
,
10622 OUT PPHYSICAL_ADDRESS LogicalAddress
,
10623 IN BOOLEAN CacheEnabled
);
10628 HalAssignSlotResources(
10629 IN PUNICODE_STRING RegistryPath
,
10630 IN PUNICODE_STRING DriverClassName
,
10631 IN PDRIVER_OBJECT DriverObject
,
10632 IN PDEVICE_OBJECT DeviceObject
,
10633 IN INTERFACE_TYPE BusType
,
10634 IN ULONG BusNumber
,
10635 IN ULONG SlotNumber
,
10636 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
10641 HalFreeCommonBuffer(
10642 IN PADAPTER_OBJECT AdapterObject
,
10644 IN PHYSICAL_ADDRESS LogicalAddress
,
10645 IN PVOID VirtualAddress
,
10646 IN BOOLEAN CacheEnabled
);
10652 IN PDEVICE_DESCRIPTION DeviceDescription
,
10653 IN OUT PULONG NumberOfMapRegisters
);
10659 IN BUS_DATA_TYPE BusDataType
,
10660 IN ULONG BusNumber
,
10661 IN ULONG SlotNumber
,
10668 HalGetBusDataByOffset(
10669 IN BUS_DATA_TYPE BusDataType
,
10670 IN ULONG BusNumber
,
10671 IN ULONG SlotNumber
,
10679 HalGetDmaAlignmentRequirement(
10685 HalGetInterruptVector(
10686 IN INTERFACE_TYPE InterfaceType
,
10687 IN ULONG BusNumber
,
10688 IN ULONG BusInterruptLevel
,
10689 IN ULONG BusInterruptVector
,
10691 OUT PKAFFINITY Affinity
);
10697 IN PADAPTER_OBJECT AdapterObject
);
10703 IN BUS_DATA_TYPE BusDataType
,
10704 IN ULONG BusNumber
,
10705 IN ULONG SlotNumber
,
10712 HalSetBusDataByOffset(
10713 IN BUS_DATA_TYPE BusDataType
,
10714 IN ULONG BusNumber
,
10715 IN ULONG SlotNumber
,
10723 HalTranslateBusAddress(
10724 IN INTERFACE_TYPE InterfaceType
,
10725 IN ULONG BusNumber
,
10726 IN PHYSICAL_ADDRESS BusAddress
,
10727 IN OUT PULONG AddressSpace
,
10728 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
10733 RtlLargeIntegerEqualToZero(
10734 IN LARGE_INTEGER Operand
);
10739 RtlLargeIntegerGreaterOrEqualToZero(
10740 IN LARGE_INTEGER Operand
);
10745 RtlLargeIntegerGreaterThan(
10746 IN LARGE_INTEGER Operand1
,
10747 IN LARGE_INTEGER Operand2
);
10752 RtlLargeIntegerGreaterThanOrEqualTo(
10753 IN LARGE_INTEGER Operand1
,
10754 IN LARGE_INTEGER Operand2
);
10759 RtlLargeIntegerGreaterThanZero(
10760 IN LARGE_INTEGER Operand
);
10765 RtlLargeIntegerLessOrEqualToZero(
10766 IN LARGE_INTEGER Operand
);
10771 RtlLargeIntegerLessThan(
10772 IN LARGE_INTEGER Operand1
,
10773 IN LARGE_INTEGER Operand2
);
10778 RtlLargeIntegerLessThanOrEqualTo(
10779 IN LARGE_INTEGER Operand1
,
10780 IN LARGE_INTEGER Operand2
);
10785 RtlLargeIntegerLessThanZero(
10786 IN LARGE_INTEGER Operand
);
10791 RtlLargeIntegerNegate(
10792 IN LARGE_INTEGER Subtrahend
);
10797 RtlLargeIntegerNotEqualTo(
10798 IN LARGE_INTEGER Operand1
,
10799 IN LARGE_INTEGER Operand2
);
10804 RtlLargeIntegerNotEqualToZero(
10805 IN LARGE_INTEGER Operand
);
10810 RtlLargeIntegerShiftLeft(
10811 IN LARGE_INTEGER LargeInteger
,
10812 IN CCHAR ShiftCount
);
10817 RtlLargeIntegerShiftRight(
10818 IN LARGE_INTEGER LargeInteger
,
10819 IN CCHAR ShiftCount
);
10824 RtlLargeIntegerSubtract(
10825 IN LARGE_INTEGER Minuend
,
10826 IN LARGE_INTEGER Subtrahend
);
10831 * COMPUTE_PAGES_SPANNED(
10835 #define COMPUTE_PAGES_SPANNED(Va, \
10837 (ADDRESS_AND_SIZE_TO_SPAN_PAGES(Va, Size))
10841 ** Architecture specific structures
10849 Exfi386InterlockedIncrementLong(
10855 Exfi386InterlockedDecrementLong(
10861 Exfi386InterlockedExchangeUlong(
10865 #define ExInterlockedIncrementLong(Addend,Lock) Exfi386InterlockedIncrementLong(Addend)
10866 #define ExInterlockedDecrementLong(Addend,Lock) Exfi386InterlockedDecrementLong(Addend)
10867 #define ExInterlockedExchangeUlong(Target, Value, Lock) Exfi386InterlockedExchangeUlong(Target, Value)
10873 // NT-ARM is not documented
10875 #include <armddk.h>
10882 #endif /* __WINDDK_H */