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 */
67 #define RESTRICTED_POINTER
70 #define POINTER_ALIGNMENT DECLSPEC_ALIGN(8)
72 #define POINTER_ALIGNMENT
75 #define DECLSPEC_ADDRSAFE
77 #ifdef NONAMELESSUNION
78 # define _DDK_DUMMYUNION_MEMBER(name) DUMMYUNIONNAME.name
79 # define _DDK_DUMMYUNION_N_MEMBER(n, name) DUMMYUNIONNAME##n.name
81 # define _DDK_DUMMYUNION_MEMBER(name) name
82 # define _DDK_DUMMYUNION_N_MEMBER(n, name) name
86 ** Forward declarations
92 struct _DRIVE_LAYOUT_INFORMATION_EX
;
93 struct _LOADER_PARAMETER_BLOCK
;
97 /* FIXME: Unknown definitions */
98 struct _SET_PARTITION_INFORMATION_EX
;
99 typedef ULONG WAIT_TYPE
;
102 typedef HANDLE TRACEHANDLE
;
103 typedef PVOID PWMILIB_CONTEXT
;
104 typedef ULONG LOGICAL
;
108 ** WmiLib specific structure
112 IrpProcessed
, // Irp was processed and possibly completed
113 IrpNotCompleted
, // Irp was process and NOT completed
114 IrpNotWmi
, // Irp is not a WMI irp
115 IrpForward
// Irp is wmi irp, but targeted at another device object
116 } SYSCTL_IRP_DISPOSITION
, *PSYSCTL_IRP_DISPOSITION
;
121 struct _COMPRESSED_DATA_INFO
;
123 #define KERNEL_STACK_SIZE 12288
124 #define KERNEL_LARGE_STACK_SIZE 61440
125 #define KERNEL_LARGE_STACK_COMMIT 12288
127 #define EXCEPTION_READ_FAULT 0
128 #define EXCEPTION_WRITE_FAULT 1
129 #define EXCEPTION_EXECUTE_FAULT 8
131 #define DPFLTR_ERROR_LEVEL 0
132 #define DPFLTR_WARNING_LEVEL 1
133 #define DPFLTR_TRACE_LEVEL 2
134 #define DPFLTR_INFO_LEVEL 3
135 #define DPFLTR_MASK 0x80000000
137 typedef enum _DPFLTR_TYPE
139 DPFLTR_SYSTEM_ID
= 0,
144 DPFLTR_CRASHDUMP_ID
= 5,
145 DPFLTR_CDAUDIO_ID
= 6,
147 DPFLTR_CLASSPNP_ID
= 8,
149 DPFLTR_REDBOOK_ID
= 10,
150 DPFLTR_STORPROP_ID
= 11,
151 DPFLTR_SCSIPORT_ID
= 12,
152 DPFLTR_SCSIMINIPORT_ID
= 13,
153 DPFLTR_CONFIG_ID
= 14,
154 DPFLTR_I8042PRT_ID
= 15,
155 DPFLTR_SERMOUSE_ID
= 16,
156 DPFLTR_LSERMOUS_ID
= 17,
157 DPFLTR_KBDHID_ID
= 18,
158 DPFLTR_MOUHID_ID
= 19,
159 DPFLTR_KBDCLASS_ID
= 20,
160 DPFLTR_MOUCLASS_ID
= 21,
161 DPFLTR_TWOTRACK_ID
= 22,
162 DPFLTR_WMILIB_ID
= 23,
165 DPFLTR_HALIA64_ID
= 26,
166 DPFLTR_VIDEO_ID
= 27,
167 DPFLTR_SVCHOST_ID
= 28,
168 DPFLTR_VIDEOPRT_ID
= 29,
169 DPFLTR_TCPIP_ID
= 30,
170 DPFLTR_DMSYNTH_ID
= 31,
171 DPFLTR_NTOSPNP_ID
= 32,
172 DPFLTR_FASTFAT_ID
= 33,
173 DPFLTR_SAMSS_ID
= 34,
174 DPFLTR_PNPMGR_ID
= 35,
175 DPFLTR_NETAPI_ID
= 36,
176 DPFLTR_SCSERVER_ID
= 37,
177 DPFLTR_SCCLIENT_ID
= 38,
178 DPFLTR_SERIAL_ID
= 39,
179 DPFLTR_SERENUM_ID
= 40,
181 DPFLTR_BOOTOK_ID
= 42,
182 DPFLTR_BOOTVRFY_ID
= 43,
183 DPFLTR_RPCPROXY_ID
= 44,
184 DPFLTR_AUTOCHK_ID
= 45,
185 DPFLTR_DCOMSS_ID
= 46,
186 DPFLTR_UNIMODEM_ID
= 47,
188 DPFLTR_FLTMGR_ID
= 49,
189 DPFLTR_WMICORE_ID
= 50,
190 DPFLTR_BURNENG_ID
= 51,
191 DPFLTR_IMAPI_ID
= 52,
193 DPFLTR_FUSION_ID
= 54,
194 DPFLTR_IDLETASK_ID
= 55,
195 DPFLTR_SOFTPCI_ID
= 56,
197 DPFLTR_MCHGR_ID
= 58,
199 DPFLTR_PCIIDE_ID
= 60,
200 DPFLTR_FLOPPY_ID
= 61,
202 DPFLTR_TERMSRV_ID
= 63,
203 DPFLTR_W32TIME_ID
= 64,
204 DPFLTR_PREFETCHER_ID
= 65,
205 DPFLTR_RSFILTER_ID
= 66,
206 DPFLTR_FCPORT_ID
= 67,
209 DPFLTR_DMCONFIG_ID
= 70,
210 DPFLTR_DMADMIN_ID
= 71,
211 DPFLTR_WSOCKTRANSPORT_ID
= 72,
213 DPFLTR_PNPMEM_ID
= 74,
214 DPFLTR_PROCESSOR_ID
= 75,
215 DPFLTR_DMSERVER_ID
= 76,
217 DPFLTR_INFINIBAND_ID
= 78,
218 DPFLTR_IHVDRIVER_ID
= 79,
219 DPFLTR_IHVVIDEO_ID
= 80,
220 DPFLTR_IHVAUDIO_ID
= 81,
221 DPFLTR_IHVNETWORK_ID
= 82,
222 DPFLTR_IHVSTREAMING_ID
= 83,
223 DPFLTR_IHVBUS_ID
= 84,
225 DPFLTR_RTLTHREADPOOL_ID
= 86,
227 DPFLTR_TCPIP6_ID
= 88,
228 DPFLTR_ISAPNP_ID
= 89,
230 DPFLTR_STORPORT_ID
= 91,
231 DPFLTR_STORMINIPORT_ID
= 92,
232 DPFLTR_PRINTSPOOLER_ID
= 93,
234 DPFLTR_VDSBAS_ID
= 95,
235 DPFLTR_VDSDYNDR_ID
= 96,
236 DPFLTR_VDSUTIL_ID
= 97,
237 DPFLTR_DFRGIFC_ID
= 98,
238 DPFLTR_DEFAULT_ID
= 99,
240 DPFLTR_DFSC_ID
= 101,
241 DPFLTR_WOW64_ID
= 102,
245 /* also in winnt.h */
247 #define FILE_COPY_STRUCTURED_STORAGE 0x00000041
248 #define FILE_STRUCTURED_STORAGE 0x00000441
252 #define THREAD_ALERT (0x0004)
254 /* Exported object types */
255 extern POBJECT_TYPE NTSYSAPI ExDesktopObjectType
;
256 extern POBJECT_TYPE NTSYSAPI ExEventObjectType
;
257 extern POBJECT_TYPE NTSYSAPI ExSemaphoreObjectType
;
258 extern POBJECT_TYPE NTSYSAPI ExWindowStationObjectType
;
259 extern ULONG NTSYSAPI IoDeviceHandlerObjectSize
;
260 extern POBJECT_TYPE NTSYSAPI IoDeviceHandlerObjectType
;
261 extern POBJECT_TYPE NTSYSAPI IoDeviceObjectType
;
262 extern POBJECT_TYPE NTSYSAPI IoDriverObjectType
;
263 extern POBJECT_TYPE NTSYSAPI IoFileObjectType
;
264 extern POBJECT_TYPE NTSYSAPI PsThreadType
;
265 extern POBJECT_TYPE NTSYSAPI LpcPortObjectType
;
266 extern POBJECT_TYPE NTSYSAPI SeTokenObjectType
;
267 extern POBJECT_TYPE NTSYSAPI PsProcessType
;
269 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
270 extern volatile CCHAR NTSYSAPI KeNumberProcessors
;
272 #if (NTDDI_VERSION >= NTDDI_WINXP)
273 extern CCHAR NTSYSAPI KeNumberProcessors
;
275 //extern PCCHAR KeNumberProcessors;
276 extern NTSYSAPI CCHAR KeNumberProcessors
; //FIXME: Note to Alex: I won't fix this atm, since I prefer to discuss this with you first.
280 #define MAX_WOW64_SHARED_ENTRIES 16
282 extern volatile KSYSTEM_TIME KeTickCount
;
284 #define NX_SUPPORT_POLICY_ALWAYSOFF 0
285 #define NX_SUPPORT_POLICY_ALWAYSON 1
286 #define NX_SUPPORT_POLICY_OPTIN 2
287 #define NX_SUPPORT_POLICY_OPTOUT 3
289 typedef struct _KUSER_SHARED_DATA
291 ULONG TickCountLowDeprecated
;
292 ULONG TickCountMultiplier
;
293 volatile KSYSTEM_TIME InterruptTime
;
294 volatile KSYSTEM_TIME SystemTime
;
295 volatile KSYSTEM_TIME TimeZoneBias
;
296 USHORT ImageNumberLow
;
297 USHORT ImageNumberHigh
;
298 WCHAR NtSystemRoot
[260];
299 ULONG MaxStackTraceDepth
;
300 ULONG CryptoExponent
;
302 ULONG LargePageMinimum
;
304 NT_PRODUCT_TYPE NtProductType
;
305 BOOLEAN ProductTypeIsValid
;
306 ULONG NtMajorVersion
;
307 ULONG NtMinorVersion
;
308 BOOLEAN ProcessorFeatures
[PROCESSOR_FEATURE_MAX
];
311 volatile ULONG TimeSlip
;
312 ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture
;
313 LARGE_INTEGER SystemExpirationDate
;
315 BOOLEAN KdDebuggerEnabled
;
316 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
317 UCHAR NXSupportPolicy
;
319 volatile ULONG ActiveConsoleId
;
320 volatile ULONG DismountCount
;
321 ULONG ComPlusPackage
;
322 ULONG LastSystemRITEventTickCount
;
323 ULONG NumberOfPhysicalPages
;
324 BOOLEAN SafeBootMode
;
327 ULONGLONG TestRetInstruction
;
329 ULONG SystemCallReturn
;
330 ULONGLONG SystemCallPad
[3];
331 __GNU_EXTENSION
union {
332 volatile KSYSTEM_TIME TickCount
;
333 volatile ULONG64 TickCountQuad
;
336 #if (NTDDI_VERSION >= NTDDI_WS03)
337 LONGLONG ConsoleSessionForegroundProcessId
;
338 ULONG Wow64SharedInformation
[MAX_WOW64_SHARED_ENTRIES
];
340 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
341 USHORT UserModeGlobalLogger
[8];
342 ULONG HeapTracingPid
[2];
343 ULONG CritSecTracingPid
[2];
344 __GNU_EXTENSION
union
346 ULONG SharedDataFlags
;
347 __GNU_EXTENSION
struct
349 ULONG DbgErrorPortPresent
:1;
350 ULONG DbgElevationEnabled
:1;
351 ULONG DbgVirtEnabled
:1;
352 ULONG DbgInstallerDetectEnabled
:1;
356 ULONG ImageFileExecutionOptions
;
357 KAFFINITY ActiveProcessorAffinity
;
359 } KUSER_SHARED_DATA
, *PKUSER_SHARED_DATA
;
362 ** IRP function codes
365 #define IRP_MN_QUERY_DIRECTORY 0x01
366 #define IRP_MN_NOTIFY_CHANGE_DIRECTORY 0x02
368 #define IRP_MN_USER_FS_REQUEST 0x00
369 #define IRP_MN_MOUNT_VOLUME 0x01
370 #define IRP_MN_VERIFY_VOLUME 0x02
371 #define IRP_MN_LOAD_FILE_SYSTEM 0x03
372 #define IRP_MN_TRACK_LINK 0x04
373 #define IRP_MN_KERNEL_CALL 0x04
375 #define IRP_MN_LOCK 0x01
376 #define IRP_MN_UNLOCK_SINGLE 0x02
377 #define IRP_MN_UNLOCK_ALL 0x03
378 #define IRP_MN_UNLOCK_ALL_BY_KEY 0x04
380 #define IRP_MN_NORMAL 0x00
381 #define IRP_MN_DPC 0x01
382 #define IRP_MN_MDL 0x02
383 #define IRP_MN_COMPLETE 0x04
384 #define IRP_MN_COMPRESSED 0x08
386 #define IRP_MN_MDL_DPC (IRP_MN_MDL | IRP_MN_DPC)
387 #define IRP_MN_COMPLETE_MDL (IRP_MN_COMPLETE | IRP_MN_MDL)
388 #define IRP_MN_COMPLETE_MDL_DPC (IRP_MN_COMPLETE_MDL | IRP_MN_DPC)
390 #define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18
392 typedef EXCEPTION_DISPOSITION
393 (DDKAPI
*PEXCEPTION_ROUTINE
)(
394 IN
struct _EXCEPTION_RECORD
*ExceptionRecord
,
395 IN PVOID EstablisherFrame
,
396 IN OUT
struct _CONTEXT
*ContextRecord
,
397 IN OUT PVOID DispatcherContext
);
400 (DDKAPI
*PDRIVER_ENTRY
)(
401 IN
struct _DRIVER_OBJECT
*DriverObject
,
402 IN PUNICODE_STRING RegistryPath
);
405 (DDKAPI
*PDRIVER_REINITIALIZE
)(
406 IN
struct _DRIVER_OBJECT
*DriverObject
,
410 typedef struct _TARGET_DEVICE_CUSTOM_NOTIFICATION
{
414 struct _FILE_OBJECT
*FileObject
;
415 LONG NameBufferOffset
;
416 UCHAR CustomDataBuffer
[1];
417 } TARGET_DEVICE_CUSTOM_NOTIFICATION
, *PTARGET_DEVICE_CUSTOM_NOTIFICATION
;
419 typedef struct _TARGET_DEVICE_REMOVAL_NOTIFICATION
{
423 struct _FILE_OBJECT
*FileObject
;
424 } TARGET_DEVICE_REMOVAL_NOTIFICATION
, *PTARGET_DEVICE_REMOVAL_NOTIFICATION
;
426 typedef enum _BUS_QUERY_ID_TYPE
{
429 BusQueryCompatibleIDs
,
431 BusQueryDeviceSerialNumber
432 } BUS_QUERY_ID_TYPE
, *PBUS_QUERY_ID_TYPE
;
434 typedef enum _DEVICE_TEXT_TYPE
{
435 DeviceTextDescription
,
436 DeviceTextLocationInformation
437 } DEVICE_TEXT_TYPE
, *PDEVICE_TEXT_TYPE
;
439 typedef enum _DEVICE_USAGE_NOTIFICATION_TYPE
{
440 DeviceUsageTypeUndefined
,
441 DeviceUsageTypePaging
,
442 DeviceUsageTypeHibernation
,
443 DeviceUsageTypeDumpFile
444 } DEVICE_USAGE_NOTIFICATION_TYPE
;
446 typedef struct _POWER_SEQUENCE
{
450 } POWER_SEQUENCE
, *PPOWER_SEQUENCE
;
453 DevicePropertyDeviceDescription
,
454 DevicePropertyHardwareID
,
455 DevicePropertyCompatibleIDs
,
456 DevicePropertyBootConfiguration
,
457 DevicePropertyBootConfigurationTranslated
,
458 DevicePropertyClassName
,
459 DevicePropertyClassGuid
,
460 DevicePropertyDriverKeyName
,
461 DevicePropertyManufacturer
,
462 DevicePropertyFriendlyName
,
463 DevicePropertyLocationInformation
,
464 DevicePropertyPhysicalDeviceObjectName
,
465 DevicePropertyBusTypeGuid
,
466 DevicePropertyLegacyBusType
,
467 DevicePropertyBusNumber
,
468 DevicePropertyEnumeratorName
,
469 DevicePropertyAddress
,
470 DevicePropertyUINumber
,
471 DevicePropertyInstallState
,
472 DevicePropertyRemovalPolicy
473 } DEVICE_REGISTRY_PROPERTY
;
475 typedef enum _IO_NOTIFICATION_EVENT_CATEGORY
{
476 EventCategoryReserved
,
477 EventCategoryHardwareProfileChange
,
478 EventCategoryDeviceInterfaceChange
,
479 EventCategoryTargetDeviceChange
480 } IO_NOTIFICATION_EVENT_CATEGORY
;
482 #define PNPNOTIFY_DEVICE_INTERFACE_INCLUDE_EXISTING_INTERFACES 0x00000001
485 (DDKAPI
*PDRIVER_NOTIFICATION_CALLBACK_ROUTINE
)(
486 IN PVOID NotificationStructure
,
490 (DDKAPI
*PDEVICE_CHANGE_COMPLETE_CALLBACK
)(
498 #define SYMBOLIC_LINK_QUERY 0x0001
499 #define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
501 /* also in winnt,h */
502 #define DUPLICATE_CLOSE_SOURCE 0x00000001
503 #define DUPLICATE_SAME_ACCESS 0x00000002
504 #define DUPLICATE_SAME_ATTRIBUTES 0x00000004
507 typedef struct _OBJECT_NAME_INFORMATION
{
509 } OBJECT_NAME_INFORMATION
, *POBJECT_NAME_INFORMATION
;
511 typedef struct _IO_STATUS_BLOCK
{
512 _ANONYMOUS_UNION
union {
516 ULONG_PTR Information
;
517 } IO_STATUS_BLOCK
, *PIO_STATUS_BLOCK
;
520 (DDKAPI
*PIO_APC_ROUTINE
)(
522 IN PIO_STATUS_BLOCK IoStatusBlock
,
526 (DDKAPI
*PKNORMAL_ROUTINE
)(
527 IN PVOID NormalContext
,
528 IN PVOID SystemArgument1
,
529 IN PVOID SystemArgument2
);
532 (DDKAPI
*PKKERNEL_ROUTINE
)(
533 IN
struct _KAPC
*Apc
,
534 IN OUT PKNORMAL_ROUTINE
*NormalRoutine
,
535 IN OUT PVOID
*NormalContext
,
536 IN OUT PVOID
*SystemArgument1
,
537 IN OUT PVOID
*SystemArgument2
);
540 (DDKAPI
*PKRUNDOWN_ROUTINE
)(
541 IN
struct _KAPC
*Apc
);
544 (DDKAPI
*PKTRANSFER_ROUTINE
)(
554 struct _KTHREAD
*Thread
;
555 LIST_ENTRY ApcListEntry
;
556 PKKERNEL_ROUTINE KernelRoutine
;
557 PKRUNDOWN_ROUTINE RundownRoutine
;
558 PKNORMAL_ROUTINE NormalRoutine
;
560 PVOID SystemArgument1
;
561 PVOID SystemArgument2
;
563 KPROCESSOR_MODE ApcMode
;
565 } KAPC
, *PKAPC
, *RESTRICTED_POINTER PRKAPC
;
567 typedef struct _KDEVICE_QUEUE
{
570 LIST_ENTRY DeviceListHead
;
573 } KDEVICE_QUEUE
, *PKDEVICE_QUEUE
, *RESTRICTED_POINTER PRKDEVICE_QUEUE
;
575 typedef struct _KDEVICE_QUEUE_ENTRY
{
576 LIST_ENTRY DeviceListEntry
;
579 } KDEVICE_QUEUE_ENTRY
, *PKDEVICE_QUEUE_ENTRY
,
580 *RESTRICTED_POINTER PRKDEVICE_QUEUE_ENTRY
;
582 #define LOCK_QUEUE_WAIT 1
583 #define LOCK_QUEUE_OWNER 2
584 #define LOCK_QUEUE_TIMER_LOCK_SHIFT 4
585 #define LOCK_QUEUE_TIMER_TABLE_LOCKS (1 << (8 - LOCK_QUEUE_TIMER_LOCK_SHIFT))
587 typedef enum _KSPIN_LOCK_QUEUE_NUMBER
589 LockQueueDispatcherLock
,
590 LockQueueExpansionLock
,
592 LockQueueSystemSpaceLock
,
595 LockQueueNonPagedPoolLock
,
596 LockQueueIoCancelLock
,
597 LockQueueWorkQueueLock
,
599 LockQueueIoDatabaseLock
,
600 LockQueueIoCompletionLock
,
601 LockQueueNtfsStructLock
,
602 LockQueueAfdWorkQueueLock
,
604 LockQueueMmNonPagedPoolLock
,
605 LockQueueUnusedSpare16
,
606 LockQueueTimerTableLock
,
607 LockQueueMaximumLock
= LockQueueTimerTableLock
+ LOCK_QUEUE_TIMER_TABLE_LOCKS
608 } KSPIN_LOCK_QUEUE_NUMBER
, *PKSPIN_LOCK_QUEUE_NUMBER
;
610 typedef struct _KSPIN_LOCK_QUEUE
{
611 struct _KSPIN_LOCK_QUEUE
*volatile Next
;
612 PKSPIN_LOCK
volatile Lock
;
613 } KSPIN_LOCK_QUEUE
, *PKSPIN_LOCK_QUEUE
;
615 typedef struct _KLOCK_QUEUE_HANDLE
{
616 KSPIN_LOCK_QUEUE LockQueue
;
618 } KLOCK_QUEUE_HANDLE
, *PKLOCK_QUEUE_HANDLE
;
621 #define DPC_THREADED 1
623 #define ASSERT_APC(Object) \
624 ASSERT((Object)->Type == ApcObject)
626 #define ASSERT_DPC(Object) \
627 ASSERT(((Object)->Type == 0) || \
628 ((Object)->Type == DpcObject) || \
629 ((Object)->Type == ThreadedDpcObject))
631 #define ASSERT_DEVICE_QUEUE(Object) \
632 ASSERT((Object)->Type == DeviceQueueObject)
639 LIST_ENTRY DpcListEntry
;
640 PKDEFERRED_ROUTINE DeferredRoutine
;
641 PVOID DeferredContext
;
642 PVOID SystemArgument1
;
643 PVOID SystemArgument2
;
644 volatile PVOID DpcData
;
645 } KDPC
, *PKDPC
, *RESTRICTED_POINTER PRKDPC
;
647 typedef PVOID PKIPI_CONTEXT
;
651 (NTAPI
*PKIPI_WORKER
)(
652 IN PKIPI_CONTEXT PacketContext
,
658 typedef struct _WAIT_CONTEXT_BLOCK
{
659 KDEVICE_QUEUE_ENTRY WaitQueueEntry
;
660 PDRIVER_CONTROL DeviceRoutine
;
662 ULONG NumberOfMapRegisters
;
665 PKDPC BufferChainingDpc
;
666 } WAIT_CONTEXT_BLOCK
, *PWAIT_CONTEXT_BLOCK
;
668 #define ASSERT_GATE(object) \
669 ASSERT((((object)->Header.Type & KOBJECT_TYPE_MASK) == GateObject) || \
670 (((object)->Header.Type & KOBJECT_TYPE_MASK) == EventSynchronizationObject))
672 typedef struct _KGATE
674 DISPATCHER_HEADER Header
;
675 } KGATE
, *PKGATE
, *RESTRICTED_POINTER PRKGATE
;
677 #define GM_LOCK_BIT 0x1
678 #define GM_LOCK_BIT_V 0x0
679 #define GM_LOCK_WAITER_WOKEN 0x2
680 #define GM_LOCK_WAITER_INC 0x4
682 typedef struct _KGUARDED_MUTEX
688 __GNU_EXTENSION
union
690 __GNU_EXTENSION
struct
692 SHORT KernelApcDisable
;
693 SHORT SpecialApcDisable
;
695 ULONG CombinedApcDisable
;
697 } KGUARDED_MUTEX
, *PKGUARDED_MUTEX
;
699 #define TIMER_TABLE_SIZE 512
700 #define TIMER_TABLE_SHIFT 9
702 typedef struct _KTIMER
{
703 DISPATCHER_HEADER Header
;
704 ULARGE_INTEGER DueTime
;
705 LIST_ENTRY TimerListEntry
;
708 } KTIMER
, *PKTIMER
, *RESTRICTED_POINTER PRKTIMER
;
710 #define ASSERT_TIMER(E) \
711 ASSERT(((E)->Header.Type == TimerNotificationObject) || \
712 ((E)->Header.Type == TimerSynchronizationObject))
714 #define ASSERT_MUTANT(E) \
715 ASSERT((E)->Header.Type == MutantObject)
717 #define ASSERT_SEMAPHORE(E) \
718 ASSERT((E)->Header.Type == SemaphoreObject)
720 #define ASSERT_EVENT(E) \
721 ASSERT(((E)->Header.Type == NotificationEvent) || \
722 ((E)->Header.Type == SynchronizationEvent))
724 typedef struct _KMUTANT
{
725 DISPATCHER_HEADER Header
;
726 LIST_ENTRY MutantListEntry
;
727 struct _KTHREAD
*RESTRICTED_POINTER OwnerThread
;
730 } KMUTANT
, *PKMUTANT
, *RESTRICTED_POINTER PRKMUTANT
, KMUTEX
, *PKMUTEX
, *RESTRICTED_POINTER PRKMUTEX
;
732 typedef enum _TIMER_TYPE
{
737 #define EVENT_INCREMENT 1
738 #define IO_NO_INCREMENT 0
739 #define IO_CD_ROM_INCREMENT 1
740 #define IO_DISK_INCREMENT 1
741 #define IO_KEYBOARD_INCREMENT 6
742 #define IO_MAILSLOT_INCREMENT 2
743 #define IO_MOUSE_INCREMENT 6
744 #define IO_NAMED_PIPE_INCREMENT 2
745 #define IO_NETWORK_INCREMENT 2
746 #define IO_PARALLEL_INCREMENT 1
747 #define IO_SERIAL_INCREMENT 2
748 #define IO_SOUND_INCREMENT 8
749 #define IO_VIDEO_INCREMENT 1
750 #define SEMAPHORE_INCREMENT 1
752 #define MM_MAXIMUM_DISK_IO_SIZE (0x10000)
754 typedef struct _IRP
{
757 struct _MDL
*MdlAddress
;
760 struct _IRP
*MasterIrp
;
761 volatile LONG IrpCount
;
764 LIST_ENTRY ThreadListEntry
;
765 IO_STATUS_BLOCK IoStatus
;
766 KPROCESSOR_MODE RequestorMode
;
767 BOOLEAN PendingReturned
;
769 CHAR CurrentLocation
;
772 CCHAR ApcEnvironment
;
773 UCHAR AllocationFlags
;
774 PIO_STATUS_BLOCK UserIosb
;
778 PIO_APC_ROUTINE UserApcRoutine
;
779 PVOID UserApcContext
;
780 } AsynchronousParameters
;
781 LARGE_INTEGER AllocationSize
;
783 volatile PDRIVER_CANCEL CancelRoutine
;
787 _ANONYMOUS_UNION
union {
788 KDEVICE_QUEUE_ENTRY DeviceQueueEntry
;
789 _ANONYMOUS_STRUCT
struct {
790 PVOID DriverContext
[4];
794 PCHAR AuxiliaryBuffer
;
795 _ANONYMOUS_STRUCT
struct {
796 LIST_ENTRY ListEntry
;
797 _ANONYMOUS_UNION
union {
798 struct _IO_STACK_LOCATION
*CurrentStackLocation
;
802 struct _FILE_OBJECT
*OriginalFileObject
;
808 typedef struct _IRP
*PIRP
;
812 #define SL_FORCE_ACCESS_CHECK 0x01
813 #define SL_OPEN_PAGING_FILE 0x02
814 #define SL_OPEN_TARGET_DIRECTORY 0x04
815 #define SL_CASE_SENSITIVE 0x80
817 #define SL_KEY_SPECIFIED 0x01
818 #define SL_OVERRIDE_VERIFY_VOLUME 0x02
819 #define SL_WRITE_THROUGH 0x04
820 #define SL_FT_SEQUENTIAL_WRITE 0x08
822 #define SL_FAIL_IMMEDIATELY 0x01
823 #define SL_EXCLUSIVE_LOCK 0x02
825 #define SL_RESTART_SCAN 0x01
826 #define SL_RETURN_SINGLE_ENTRY 0x02
827 #define SL_INDEX_SPECIFIED 0x04
829 #define SL_WATCH_TREE 0x01
831 #define SL_ALLOW_RAW_MOUNT 0x01
833 #define CTL_CODE(DeviceType, Function, Method, Access)( \
834 ((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method))
836 #define DEVICE_TYPE_FROM_CTL_CODE(ctl) (((ULONG) (ctl & 0xffff0000)) >> 16)
842 IRP_MOUNT_COMPLETION
= 0x2,
843 IRP_SYNCHRONOUS_API
= 0x4,
844 IRP_ASSOCIATED_IRP
= 0x8,
845 IRP_BUFFERED_IO
= 0x10,
846 IRP_DEALLOCATE_BUFFER
= 0x20,
847 IRP_INPUT_OPERATION
= 0x40,
848 IRP_SYNCHRONOUS_PAGING_IO
= 0x40,
849 IRP_CREATE_OPERATION
= 0x80,
850 IRP_READ_OPERATION
= 0x100,
851 IRP_WRITE_OPERATION
= 0x200,
852 IRP_CLOSE_OPERATION
= 0x400,
853 IRP_DEFER_IO_COMPLETION
= 0x800,
854 IRP_OB_QUERY_NAME
= 0x1000,
855 IRP_HOLD_DEVICE_QUEUE
= 0x2000,
856 IRP_RETRY_IO_COMPLETION
= 0x4000
859 #define IRP_QUOTA_CHARGED 0x01
860 #define IRP_ALLOCATED_MUST_SUCCEED 0x02
861 #define IRP_ALLOCATED_FIXED_SIZE 0x04
862 #define IRP_LOOKASIDE_ALLOCATION 0x08
864 typedef struct _BOOTDISK_INFORMATION
{
865 LONGLONG BootPartitionOffset
;
866 LONGLONG SystemPartitionOffset
;
867 ULONG BootDeviceSignature
;
868 ULONG SystemDeviceSignature
;
869 } BOOTDISK_INFORMATION
, *PBOOTDISK_INFORMATION
;
871 typedef struct _BOOTDISK_INFORMATION_EX
{
872 LONGLONG BootPartitionOffset
;
873 LONGLONG SystemPartitionOffset
;
874 ULONG BootDeviceSignature
;
875 ULONG SystemDeviceSignature
;
877 GUID SystemDeviceGuid
;
878 BOOLEAN BootDeviceIsGpt
;
879 BOOLEAN SystemDeviceIsGpt
;
880 } BOOTDISK_INFORMATION_EX
, *PBOOTDISK_INFORMATION_EX
;
882 typedef struct _EISA_MEMORY_TYPE
{
889 UCHAR MoreEntries
: 1;
890 } EISA_MEMORY_TYPE
, *PEISA_MEMORY_TYPE
;
892 #include <pshpack1.h>
893 typedef struct _EISA_MEMORY_CONFIGURATION
{
894 EISA_MEMORY_TYPE ConfigurationByte
;
896 USHORT AddressLowWord
;
897 UCHAR AddressHighByte
;
899 } EISA_MEMORY_CONFIGURATION
, *PEISA_MEMORY_CONFIGURATION
;
902 typedef struct _EISA_IRQ_DESCRIPTOR
{
905 UCHAR LevelTriggered
: 1;
907 UCHAR MoreEntries
: 1;
908 } EISA_IRQ_DESCRIPTOR
, *PEISA_IRQ_DESCRIPTOR
;
910 typedef struct _EISA_IRQ_CONFIGURATION
{
911 EISA_IRQ_DESCRIPTOR ConfigurationByte
;
913 } EISA_IRQ_CONFIGURATION
, *PEISA_IRQ_CONFIGURATION
;
915 typedef struct _DMA_CONFIGURATION_BYTE0
{
919 UCHAR MoreEntries
: 1;
920 } DMA_CONFIGURATION_BYTE0
;
922 typedef struct _DMA_CONFIGURATION_BYTE1
{
924 UCHAR TransferSize
: 2;
927 } DMA_CONFIGURATION_BYTE1
;
929 typedef struct _EISA_DMA_CONFIGURATION
{
930 DMA_CONFIGURATION_BYTE0 ConfigurationByte0
;
931 DMA_CONFIGURATION_BYTE1 ConfigurationByte1
;
932 } EISA_DMA_CONFIGURATION
, *PEISA_DMA_CONFIGURATION
;
934 #include <pshpack1.h>
935 typedef struct _EISA_PORT_DESCRIPTOR
{
936 UCHAR NumberPorts
: 5;
939 UCHAR MoreEntries
: 1;
940 } EISA_PORT_DESCRIPTOR
, *PEISA_PORT_DESCRIPTOR
;
942 typedef struct _EISA_PORT_CONFIGURATION
{
943 EISA_PORT_DESCRIPTOR Configuration
;
945 } EISA_PORT_CONFIGURATION
, *PEISA_PORT_CONFIGURATION
;
948 typedef struct _CM_EISA_FUNCTION_INFORMATION
{
954 UCHAR Selections
[26];
956 UCHAR TypeString
[80];
957 EISA_MEMORY_CONFIGURATION EisaMemory
[9];
958 EISA_IRQ_CONFIGURATION EisaIrq
[7];
959 EISA_DMA_CONFIGURATION EisaDma
[4];
960 EISA_PORT_CONFIGURATION EisaPort
[20];
961 UCHAR InitializationData
[60];
962 } CM_EISA_FUNCTION_INFORMATION
, *PCM_EISA_FUNCTION_INFORMATION
;
964 /* CM_EISA_FUNCTION_INFORMATION.FunctionFlags */
966 #define EISA_FUNCTION_ENABLED 0x80
967 #define EISA_FREE_FORM_DATA 0x40
968 #define EISA_HAS_PORT_INIT_ENTRY 0x20
969 #define EISA_HAS_PORT_RANGE 0x10
970 #define EISA_HAS_DMA_ENTRY 0x08
971 #define EISA_HAS_IRQ_ENTRY 0x04
972 #define EISA_HAS_MEMORY_ENTRY 0x02
973 #define EISA_HAS_TYPE_ENTRY 0x01
974 #define EISA_HAS_INFORMATION \
975 (EISA_HAS_PORT_RANGE + EISA_HAS_DMA_ENTRY + EISA_HAS_IRQ_ENTRY \
976 + EISA_HAS_MEMORY_ENTRY + EISA_HAS_TYPE_ENTRY)
978 typedef struct _CM_EISA_SLOT_INFORMATION
{
984 UCHAR NumberFunctions
;
985 UCHAR FunctionInformation
;
987 } CM_EISA_SLOT_INFORMATION
, *PCM_EISA_SLOT_INFORMATION
;
989 /* CM_EISA_SLOT_INFORMATION.ReturnCode */
991 #define EISA_INVALID_SLOT 0x80
992 #define EISA_INVALID_FUNCTION 0x81
993 #define EISA_INVALID_CONFIGURATION 0x82
994 #define EISA_EMPTY_SLOT 0x83
995 #define EISA_INVALID_BIOS_CALL 0x86
997 typedef struct _CM_FLOPPY_DEVICE_DATA
{
1003 UCHAR StepRateHeadUnloadTime
;
1006 UCHAR SectorLengthCode
;
1007 UCHAR SectorPerTrack
;
1008 UCHAR ReadWriteGapLength
;
1009 UCHAR DataTransferLength
;
1010 UCHAR FormatGapLength
;
1011 UCHAR FormatFillCharacter
;
1012 UCHAR HeadSettleTime
;
1013 UCHAR MotorSettleTime
;
1014 UCHAR MaximumTrackValue
;
1015 UCHAR DataTransferRate
;
1016 } CM_FLOPPY_DEVICE_DATA
, *PCM_FLOPPY_DEVICE_DATA
;
1018 typedef struct _PNP_BUS_INFORMATION
{
1020 INTERFACE_TYPE LegacyBusType
;
1022 } PNP_BUS_INFORMATION
, *PPNP_BUS_INFORMATION
;
1024 #include <pshpack1.h>
1025 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Type */
1027 #define CmResourceTypeNull 0
1028 #define CmResourceTypePort 1
1029 #define CmResourceTypeInterrupt 2
1030 #define CmResourceTypeMemory 3
1031 #define CmResourceTypeDma 4
1032 #define CmResourceTypeDeviceSpecific 5
1033 #define CmResourceTypeBusNumber 6
1034 #define CmResourceTypeMaximum 7
1035 #define CmResourceTypeNonArbitrated 128
1036 #define CmResourceTypeConfigData 128
1037 #define CmResourceTypeDevicePrivate 129
1038 #define CmResourceTypePcCardConfig 130
1039 #define CmResourceTypeMfCardConfig 131
1041 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.ShareDisposition */
1043 typedef enum _CM_SHARE_DISPOSITION
{
1044 CmResourceShareUndetermined
,
1045 CmResourceShareDeviceExclusive
,
1046 CmResourceShareDriverExclusive
,
1047 CmResourceShareShared
1048 } CM_SHARE_DISPOSITION
;
1050 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypePort */
1052 #define CM_RESOURCE_PORT_MEMORY 0x0000
1053 #define CM_RESOURCE_PORT_IO 0x0001
1054 #define CM_RESOURCE_PORT_10_BIT_DECODE 0x0004
1055 #define CM_RESOURCE_PORT_12_BIT_DECODE 0x0008
1056 #define CM_RESOURCE_PORT_16_BIT_DECODE 0x0010
1057 #define CM_RESOURCE_PORT_POSITIVE_DECODE 0x0020
1058 #define CM_RESOURCE_PORT_PASSIVE_DECODE 0x0040
1059 #define CM_RESOURCE_PORT_WINDOW_DECODE 0x0080
1061 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeInterrupt */
1063 #define CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE 0x0000
1064 #define CM_RESOURCE_INTERRUPT_LATCHED 0x0001
1066 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeMemory */
1068 #define CM_RESOURCE_MEMORY_READ_WRITE 0x0000
1069 #define CM_RESOURCE_MEMORY_READ_ONLY 0x0001
1070 #define CM_RESOURCE_MEMORY_WRITE_ONLY 0x0002
1071 #define CM_RESOURCE_MEMORY_PREFETCHABLE 0x0004
1072 #define CM_RESOURCE_MEMORY_COMBINEDWRITE 0x0008
1073 #define CM_RESOURCE_MEMORY_24 0x0010
1074 #define CM_RESOURCE_MEMORY_CACHEABLE 0x0020
1076 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeDma */
1078 #define CM_RESOURCE_DMA_8 0x0000
1079 #define CM_RESOURCE_DMA_16 0x0001
1080 #define CM_RESOURCE_DMA_32 0x0002
1081 #define CM_RESOURCE_DMA_8_AND_16 0x0004
1082 #define CM_RESOURCE_DMA_BUS_MASTER 0x0008
1083 #define CM_RESOURCE_DMA_TYPE_A 0x0010
1084 #define CM_RESOURCE_DMA_TYPE_B 0x0020
1085 #define CM_RESOURCE_DMA_TYPE_F 0x0040
1087 typedef struct _CM_PARTIAL_RESOURCE_LIST
{
1091 CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors
[1];
1092 } CM_PARTIAL_RESOURCE_LIST
, *PCM_PARTIAL_RESOURCE_LIST
;
1094 typedef struct _CM_FULL_RESOURCE_DESCRIPTOR
{
1095 INTERFACE_TYPE InterfaceType
;
1097 CM_PARTIAL_RESOURCE_LIST PartialResourceList
;
1098 } CM_FULL_RESOURCE_DESCRIPTOR
, *PCM_FULL_RESOURCE_DESCRIPTOR
;
1100 typedef struct _CM_RESOURCE_LIST
{
1102 CM_FULL_RESOURCE_DESCRIPTOR List
[1];
1103 } CM_RESOURCE_LIST
, *PCM_RESOURCE_LIST
;
1105 typedef struct _CM_INT13_DRIVE_PARAMETER
{
1108 USHORT SectorsPerTrack
;
1110 USHORT NumberDrives
;
1111 } CM_INT13_DRIVE_PARAMETER
, *PCM_INT13_DRIVE_PARAMETER
;
1113 typedef struct _CM_PNP_BIOS_DEVICE_NODE
1118 UCHAR DeviceType
[3];
1119 USHORT DeviceAttributes
;
1120 } CM_PNP_BIOS_DEVICE_NODE
,*PCM_PNP_BIOS_DEVICE_NODE
;
1122 typedef struct _CM_PNP_BIOS_INSTALLATION_CHECK
1127 USHORT ControlField
;
1129 ULONG EventFlagAddress
;
1130 USHORT RealModeEntryOffset
;
1131 USHORT RealModeEntrySegment
;
1132 USHORT ProtectedModeEntryOffset
;
1133 ULONG ProtectedModeCodeBaseAddress
;
1135 USHORT RealModeDataBaseAddress
;
1136 ULONG ProtectedModeDataBaseAddress
;
1137 } CM_PNP_BIOS_INSTALLATION_CHECK
, *PCM_PNP_BIOS_INSTALLATION_CHECK
;
1139 #include <poppack.h>
1142 typedef struct _CM_DISK_GEOMETRY_DEVICE_DATA
1144 ULONG BytesPerSector
;
1145 ULONG NumberOfCylinders
;
1146 ULONG SectorsPerTrack
;
1147 ULONG NumberOfHeads
;
1148 } CM_DISK_GEOMETRY_DEVICE_DATA
, *PCM_DISK_GEOMETRY_DEVICE_DATA
;
1150 typedef struct _CM_KEYBOARD_DEVICE_DATA
{
1155 USHORT KeyboardFlags
;
1156 } CM_KEYBOARD_DEVICE_DATA
, *PCM_KEYBOARD_DEVICE_DATA
;
1158 #define KEYBOARD_INSERT_ON 0x08
1159 #define KEYBOARD_CAPS_LOCK_ON 0x04
1160 #define KEYBOARD_NUM_LOCK_ON 0x02
1161 #define KEYBOARD_SCROLL_LOCK_ON 0x01
1162 #define KEYBOARD_ALT_KEY_DOWN 0x80
1163 #define KEYBOARD_CTRL_KEY_DOWN 0x40
1164 #define KEYBOARD_LEFT_SHIFT_DOWN 0x20
1165 #define KEYBOARD_RIGHT_SHIFT_DOWN 0x10
1167 typedef struct _CM_MCA_POS_DATA
{
1173 } CM_MCA_POS_DATA
, *PCM_MCA_POS_DATA
;
1175 typedef struct CM_Power_Data_s
{
1177 DEVICE_POWER_STATE PD_MostRecentPowerState
;
1178 ULONG PD_Capabilities
;
1182 DEVICE_POWER_STATE PD_PowerStateMapping
[PowerSystemMaximum
];
1183 } CM_POWER_DATA
, *PCM_POWER_DATA
;
1185 #define PDCAP_D0_SUPPORTED 0x00000001
1186 #define PDCAP_D1_SUPPORTED 0x00000002
1187 #define PDCAP_D2_SUPPORTED 0x00000004
1188 #define PDCAP_D3_SUPPORTED 0x00000008
1189 #define PDCAP_WAKE_FROM_D0_SUPPORTED 0x00000010
1190 #define PDCAP_WAKE_FROM_D1_SUPPORTED 0x00000020
1191 #define PDCAP_WAKE_FROM_D2_SUPPORTED 0x00000040
1192 #define PDCAP_WAKE_FROM_D3_SUPPORTED 0x00000080
1193 #define PDCAP_WARM_EJECT_SUPPORTED 0x00000100
1195 typedef struct _CM_SCSI_DEVICE_DATA
{
1198 UCHAR HostIdentifier
;
1199 } CM_SCSI_DEVICE_DATA
, *PCM_SCSI_DEVICE_DATA
;
1201 typedef struct _CM_SERIAL_DEVICE_DATA
{
1205 } CM_SERIAL_DEVICE_DATA
, *PCM_SERIAL_DEVICE_DATA
;
1207 typedef struct _IO_COUNTERS
{
1208 ULONGLONG ReadOperationCount
;
1209 ULONGLONG WriteOperationCount
;
1210 ULONGLONG OtherOperationCount
;
1211 ULONGLONG ReadTransferCount
;
1212 ULONGLONG WriteTransferCount
;
1213 ULONGLONG OtherTransferCount
;
1214 } IO_COUNTERS
, *PIO_COUNTERS
;
1216 typedef struct _VM_COUNTERS
1218 SIZE_T PeakVirtualSize
;
1220 ULONG PageFaultCount
;
1221 SIZE_T PeakWorkingSetSize
;
1222 SIZE_T WorkingSetSize
;
1223 SIZE_T QuotaPeakPagedPoolUsage
;
1224 SIZE_T QuotaPagedPoolUsage
;
1225 SIZE_T QuotaPeakNonPagedPoolUsage
;
1226 SIZE_T QuotaNonPagedPoolUsage
;
1227 SIZE_T PagefileUsage
;
1228 SIZE_T PeakPagefileUsage
;
1229 } VM_COUNTERS
, *PVM_COUNTERS
;
1231 typedef struct _VM_COUNTERS_EX
1233 SIZE_T PeakVirtualSize
;
1235 ULONG PageFaultCount
;
1236 SIZE_T PeakWorkingSetSize
;
1237 SIZE_T WorkingSetSize
;
1238 SIZE_T QuotaPeakPagedPoolUsage
;
1239 SIZE_T QuotaPagedPoolUsage
;
1240 SIZE_T QuotaPeakNonPagedPoolUsage
;
1241 SIZE_T QuotaNonPagedPoolUsage
;
1242 SIZE_T PagefileUsage
;
1243 SIZE_T PeakPagefileUsage
;
1244 SIZE_T PrivateUsage
;
1245 } VM_COUNTERS_EX
, *PVM_COUNTERS_EX
;
1247 typedef struct _POOLED_USAGE_AND_LIMITS
1249 SIZE_T PeakPagedPoolUsage
;
1250 SIZE_T PagedPoolUsage
;
1251 SIZE_T PagedPoolLimit
;
1252 SIZE_T PeakNonPagedPoolUsage
;
1253 SIZE_T NonPagedPoolUsage
;
1254 SIZE_T NonPagedPoolLimit
;
1255 SIZE_T PeakPagefileUsage
;
1256 SIZE_T PagefileUsage
;
1257 SIZE_T PagefileLimit
;
1258 } POOLED_USAGE_AND_LIMITS
, *PPOOLED_USAGE_AND_LIMITS
;
1260 typedef enum _KINTERRUPT_POLARITY
1262 InterruptPolarityUnknown
,
1263 InterruptActiveHigh
,
1265 } KINTERRUPT_POLARITY
, *PKINTERRUPT_POLARITY
;
1267 typedef struct _IO_ERROR_LOG_PACKET
{
1268 UCHAR MajorFunctionCode
;
1270 USHORT DumpDataSize
;
1271 USHORT NumberOfStrings
;
1272 USHORT StringOffset
;
1273 USHORT EventCategory
;
1275 ULONG UniqueErrorValue
;
1276 NTSTATUS FinalStatus
;
1277 ULONG SequenceNumber
;
1278 ULONG IoControlCode
;
1279 LARGE_INTEGER DeviceOffset
;
1281 } IO_ERROR_LOG_PACKET
, *PIO_ERROR_LOG_PACKET
;
1283 typedef struct _IO_ERROR_LOG_MESSAGE
{
1286 USHORT DriverNameLength
;
1287 LARGE_INTEGER TimeStamp
;
1288 ULONG DriverNameOffset
;
1289 IO_ERROR_LOG_PACKET EntryData
;
1290 } IO_ERROR_LOG_MESSAGE
, *PIO_ERROR_LOG_MESSAGE
;
1292 #define ERROR_LOG_LIMIT_SIZE 240
1293 #define IO_ERROR_LOG_MESSAGE_HEADER_LENGTH (sizeof(IO_ERROR_LOG_MESSAGE) - \
1294 sizeof(IO_ERROR_LOG_PACKET) + \
1295 (sizeof(WCHAR) * 40))
1296 #define ERROR_LOG_MESSAGE_LIMIT_SIZE \
1297 (ERROR_LOG_LIMIT_SIZE + IO_ERROR_LOG_MESSAGE_HEADER_LENGTH)
1298 #define IO_ERROR_LOG_MESSAGE_LENGTH \
1299 ((PORT_MAXIMUM_MESSAGE_LENGTH > ERROR_LOG_MESSAGE_LIMIT_SIZE) ? \
1300 ERROR_LOG_MESSAGE_LIMIT_SIZE : \
1301 PORT_MAXIMUM_MESSAGE_LENGTH)
1302 #define ERROR_LOG_MAXIMUM_SIZE (IO_ERROR_LOG_MESSAGE_LENGTH - \
1303 IO_ERROR_LOG_MESSAGE_HEADER_LENGTH)
1305 typedef struct _CONTROLLER_OBJECT
{
1308 PVOID ControllerExtension
;
1309 KDEVICE_QUEUE DeviceWaitQueue
;
1311 LARGE_INTEGER Spare2
;
1312 } CONTROLLER_OBJECT
, *PCONTROLLER_OBJECT
;
1314 typedef enum _DMA_WIDTH
{
1319 } DMA_WIDTH
, *PDMA_WIDTH
;
1321 typedef enum _DMA_SPEED
{
1328 } DMA_SPEED
, *PDMA_SPEED
;
1330 /* DEVICE_DESCRIPTION.Version */
1332 #define DEVICE_DESCRIPTION_VERSION 0x0000
1333 #define DEVICE_DESCRIPTION_VERSION1 0x0001
1334 #define DEVICE_DESCRIPTION_VERSION2 0x0002
1336 typedef struct _DEVICE_DESCRIPTION
{
1339 BOOLEAN ScatterGather
;
1341 BOOLEAN AutoInitialize
;
1342 BOOLEAN Dma32BitAddresses
;
1343 BOOLEAN IgnoreCount
;
1345 BOOLEAN Dma64BitAddresses
;
1348 INTERFACE_TYPE InterfaceType
;
1351 ULONG MaximumLength
;
1353 } DEVICE_DESCRIPTION
, *PDEVICE_DESCRIPTION
;
1356 #define VPB_MOUNTED 0x0001
1357 #define VPB_LOCKED 0x0002
1358 #define VPB_PERSISTENT 0x0004
1359 #define VPB_REMOVE_PENDING 0x0008
1360 #define VPB_RAW_MOUNT 0x0010
1362 #define MAXIMUM_VOLUME_LABEL_LENGTH (32 * sizeof(WCHAR))
1364 typedef struct _VPB
{
1368 USHORT VolumeLabelLength
;
1369 struct _DEVICE_OBJECT
*DeviceObject
;
1370 struct _DEVICE_OBJECT
*RealDevice
;
1372 ULONG ReferenceCount
;
1373 WCHAR VolumeLabel
[MAXIMUM_VOLUME_LABEL_LENGTH
/ sizeof(WCHAR
)];
1376 /* DEVICE_OBJECT.Flags */
1378 #define DO_VERIFY_VOLUME 0x00000002
1379 #define DO_BUFFERED_IO 0x00000004
1380 #define DO_EXCLUSIVE 0x00000008
1381 #define DO_DIRECT_IO 0x00000010
1382 #define DO_MAP_IO_BUFFER 0x00000020
1383 #define DO_DEVICE_HAS_NAME 0x00000040
1384 #define DO_DEVICE_INITIALIZING 0x00000080
1385 #define DO_SYSTEM_BOOT_PARTITION 0x00000100
1386 #define DO_LONG_TERM_REQUESTS 0x00000200
1387 #define DO_NEVER_LAST_DEVICE 0x00000400
1388 #define DO_SHUTDOWN_REGISTERED 0x00000800
1389 #define DO_BUS_ENUMERATED_DEVICE 0x00001000
1390 #define DO_POWER_PAGABLE 0x00002000
1391 #define DO_POWER_INRUSH 0x00004000
1392 #define DO_LOW_PRIORITY_FILESYSTEM 0x00010000
1393 #define DO_XIP 0x00020000
1395 /* DEVICE_OBJECT.Characteristics */
1397 #define FILE_REMOVABLE_MEDIA 0x00000001
1398 #define FILE_READ_ONLY_DEVICE 0x00000002
1399 #define FILE_FLOPPY_DISKETTE 0x00000004
1400 #define FILE_WRITE_ONCE_MEDIA 0x00000008
1401 #define FILE_REMOTE_DEVICE 0x00000010
1402 #define FILE_DEVICE_IS_MOUNTED 0x00000020
1403 #define FILE_VIRTUAL_VOLUME 0x00000040
1404 #define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080
1405 #define FILE_DEVICE_SECURE_OPEN 0x00000100
1407 /* DEVICE_OBJECT.AlignmentRequirement */
1409 #define FILE_BYTE_ALIGNMENT 0x00000000
1410 #define FILE_WORD_ALIGNMENT 0x00000001
1411 #define FILE_LONG_ALIGNMENT 0x00000003
1412 #define FILE_QUAD_ALIGNMENT 0x00000007
1413 #define FILE_OCTA_ALIGNMENT 0x0000000f
1414 #define FILE_32_BYTE_ALIGNMENT 0x0000001f
1415 #define FILE_64_BYTE_ALIGNMENT 0x0000003f
1416 #define FILE_128_BYTE_ALIGNMENT 0x0000007f
1417 #define FILE_256_BYTE_ALIGNMENT 0x000000ff
1418 #define FILE_512_BYTE_ALIGNMENT 0x000001ff
1420 /* DEVICE_OBJECT.DeviceType */
1422 #define DEVICE_TYPE ULONG
1424 #define FILE_DEVICE_BEEP 0x00000001
1425 #define FILE_DEVICE_CD_ROM 0x00000002
1426 #define FILE_DEVICE_CD_ROM_FILE_SYSTEM 0x00000003
1427 #define FILE_DEVICE_CONTROLLER 0x00000004
1428 #define FILE_DEVICE_DATALINK 0x00000005
1429 #define FILE_DEVICE_DFS 0x00000006
1430 #define FILE_DEVICE_DISK 0x00000007
1431 #define FILE_DEVICE_DISK_FILE_SYSTEM 0x00000008
1432 #define FILE_DEVICE_FILE_SYSTEM 0x00000009
1433 #define FILE_DEVICE_INPORT_PORT 0x0000000a
1434 #define FILE_DEVICE_KEYBOARD 0x0000000b
1435 #define FILE_DEVICE_MAILSLOT 0x0000000c
1436 #define FILE_DEVICE_MIDI_IN 0x0000000d
1437 #define FILE_DEVICE_MIDI_OUT 0x0000000e
1438 #define FILE_DEVICE_MOUSE 0x0000000f
1439 #define FILE_DEVICE_MULTI_UNC_PROVIDER 0x00000010
1440 #define FILE_DEVICE_NAMED_PIPE 0x00000011
1441 #define FILE_DEVICE_NETWORK 0x00000012
1442 #define FILE_DEVICE_NETWORK_BROWSER 0x00000013
1443 #define FILE_DEVICE_NETWORK_FILE_SYSTEM 0x00000014
1444 #define FILE_DEVICE_NULL 0x00000015
1445 #define FILE_DEVICE_PARALLEL_PORT 0x00000016
1446 #define FILE_DEVICE_PHYSICAL_NETCARD 0x00000017
1447 #define FILE_DEVICE_PRINTER 0x00000018
1448 #define FILE_DEVICE_SCANNER 0x00000019
1449 #define FILE_DEVICE_SERIAL_MOUSE_PORT 0x0000001a
1450 #define FILE_DEVICE_SERIAL_PORT 0x0000001b
1451 #define FILE_DEVICE_SCREEN 0x0000001c
1452 #define FILE_DEVICE_SOUND 0x0000001d
1453 #define FILE_DEVICE_STREAMS 0x0000001e
1454 #define FILE_DEVICE_TAPE 0x0000001f
1455 #define FILE_DEVICE_TAPE_FILE_SYSTEM 0x00000020
1456 #define FILE_DEVICE_TRANSPORT 0x00000021
1457 #define FILE_DEVICE_UNKNOWN 0x00000022
1458 #define FILE_DEVICE_VIDEO 0x00000023
1459 #define FILE_DEVICE_VIRTUAL_DISK 0x00000024
1460 #define FILE_DEVICE_WAVE_IN 0x00000025
1461 #define FILE_DEVICE_WAVE_OUT 0x00000026
1462 #define FILE_DEVICE_8042_PORT 0x00000027
1463 #define FILE_DEVICE_NETWORK_REDIRECTOR 0x00000028
1464 #define FILE_DEVICE_BATTERY 0x00000029
1465 #define FILE_DEVICE_BUS_EXTENDER 0x0000002a
1466 #define FILE_DEVICE_MODEM 0x0000002b
1467 #define FILE_DEVICE_VDM 0x0000002c
1468 #define FILE_DEVICE_MASS_STORAGE 0x0000002d
1469 #define FILE_DEVICE_SMB 0x0000002e
1470 #define FILE_DEVICE_KS 0x0000002f
1471 #define FILE_DEVICE_CHANGER 0x00000030
1472 #define FILE_DEVICE_SMARTCARD 0x00000031
1473 #define FILE_DEVICE_ACPI 0x00000032
1474 #define FILE_DEVICE_DVD 0x00000033
1475 #define FILE_DEVICE_FULLSCREEN_VIDEO 0x00000034
1476 #define FILE_DEVICE_DFS_FILE_SYSTEM 0x00000035
1477 #define FILE_DEVICE_DFS_VOLUME 0x00000036
1478 #define FILE_DEVICE_SERENUM 0x00000037
1479 #define FILE_DEVICE_TERMSRV 0x00000038
1480 #define FILE_DEVICE_KSEC 0x00000039
1481 #define FILE_DEVICE_FIPS 0x0000003a
1483 typedef struct _DEVICE_OBJECT
{
1486 LONG ReferenceCount
;
1487 struct _DRIVER_OBJECT
*DriverObject
;
1488 struct _DEVICE_OBJECT
*NextDevice
;
1489 struct _DEVICE_OBJECT
*AttachedDevice
;
1490 struct _IRP
*CurrentIrp
;
1493 ULONG Characteristics
;
1495 PVOID DeviceExtension
;
1496 DEVICE_TYPE DeviceType
;
1499 LIST_ENTRY ListEntry
;
1500 WAIT_CONTEXT_BLOCK Wcb
;
1502 ULONG AlignmentRequirement
;
1503 KDEVICE_QUEUE DeviceQueue
;
1505 ULONG ActiveThreadCount
;
1506 PSECURITY_DESCRIPTOR SecurityDescriptor
;
1510 struct _DEVOBJ_EXTENSION
*DeviceObjectExtension
;
1512 } DEVICE_OBJECT
, *PDEVICE_OBJECT
;
1514 typedef enum _DEVICE_RELATION_TYPE
{
1519 TargetDeviceRelation
,
1521 } DEVICE_RELATION_TYPE
, *PDEVICE_RELATION_TYPE
;
1523 typedef struct _DEVICE_RELATIONS
{
1525 PDEVICE_OBJECT Objects
[1];
1526 } DEVICE_RELATIONS
, *PDEVICE_RELATIONS
;
1528 typedef struct _SCATTER_GATHER_ELEMENT
{
1529 PHYSICAL_ADDRESS Address
;
1532 } SCATTER_GATHER_ELEMENT
, *PSCATTER_GATHER_ELEMENT
;
1534 typedef struct _SCATTER_GATHER_LIST
{
1535 ULONG NumberOfElements
;
1537 SCATTER_GATHER_ELEMENT Elements
[1];
1538 } SCATTER_GATHER_LIST
, *PSCATTER_GATHER_LIST
;
1540 #define MDL_MAPPED_TO_SYSTEM_VA 0x0001
1541 #define MDL_PAGES_LOCKED 0x0002
1542 #define MDL_SOURCE_IS_NONPAGED_POOL 0x0004
1543 #define MDL_ALLOCATED_FIXED_SIZE 0x0008
1544 #define MDL_PARTIAL 0x0010
1545 #define MDL_PARTIAL_HAS_BEEN_MAPPED 0x0020
1546 #define MDL_IO_PAGE_READ 0x0040
1547 #define MDL_WRITE_OPERATION 0x0080
1548 #define MDL_PARENT_MAPPED_SYSTEM_VA 0x0100
1549 #define MDL_FREE_EXTRA_PTES 0x0200
1550 #define MDL_DESCRIBES_AWE 0x0400
1551 #define MDL_IO_SPACE 0x0800
1552 #define MDL_NETWORK_HEADER 0x1000
1553 #define MDL_MAPPING_CAN_FAIL 0x2000
1554 #define MDL_ALLOCATED_MUST_SUCCEED 0x4000
1555 #define MDL_INTERNAL 0x8000
1558 #define MDL_MAPPING_FLAGS ( \
1559 MDL_MAPPED_TO_SYSTEM_VA | \
1560 MDL_PAGES_LOCKED | \
1561 MDL_SOURCE_IS_NONPAGED_POOL | \
1562 MDL_PARTIAL_HAS_BEEN_MAPPED | \
1563 MDL_PARENT_MAPPED_SYSTEM_VA | \
1567 typedef struct _DRIVER_EXTENSION
{
1568 struct _DRIVER_OBJECT
*DriverObject
;
1569 PDRIVER_ADD_DEVICE AddDevice
;
1571 UNICODE_STRING ServiceKeyName
;
1572 } DRIVER_EXTENSION
, *PDRIVER_EXTENSION
;
1574 #define DRVO_UNLOAD_INVOKED 0x00000001
1575 #define DRVO_LEGACY_DRIVER 0x00000002
1576 #define DRVO_BUILTIN_DRIVER 0x00000004
1577 #define DRVO_REINIT_REGISTERED 0x00000008
1578 #define DRVO_INITIALIZED 0x00000010
1579 #define DRVO_BOOTREINIT_REGISTERED 0x00000020
1580 #define DRVO_LEGACY_RESOURCES 0x00000040
1582 typedef struct _DRIVER_OBJECT
{
1585 PDEVICE_OBJECT DeviceObject
;
1589 PVOID DriverSection
;
1590 PDRIVER_EXTENSION DriverExtension
;
1591 UNICODE_STRING DriverName
;
1592 PUNICODE_STRING HardwareDatabase
;
1593 struct _FAST_IO_DISPATCH
*FastIoDispatch
;
1594 PDRIVER_INITIALIZE DriverInit
;
1595 PDRIVER_STARTIO DriverStartIo
;
1596 PDRIVER_UNLOAD DriverUnload
;
1597 PDRIVER_DISPATCH MajorFunction
[IRP_MJ_MAXIMUM_FUNCTION
+ 1];
1599 typedef struct _DRIVER_OBJECT
*PDRIVER_OBJECT
;
1601 typedef struct _DMA_ADAPTER
{
1604 struct _DMA_OPERATIONS
* DmaOperations
;
1605 } DMA_ADAPTER
, *PDMA_ADAPTER
;
1608 (DDKAPI
*PPUT_DMA_ADAPTER
)(
1609 IN PDMA_ADAPTER DmaAdapter
);
1612 (DDKAPI
*PALLOCATE_COMMON_BUFFER
)(
1613 IN PDMA_ADAPTER DmaAdapter
,
1615 OUT PPHYSICAL_ADDRESS LogicalAddress
,
1616 IN BOOLEAN CacheEnabled
);
1619 (DDKAPI
*PFREE_COMMON_BUFFER
)(
1620 IN PDMA_ADAPTER DmaAdapter
,
1622 IN PHYSICAL_ADDRESS LogicalAddress
,
1623 IN PVOID VirtualAddress
,
1624 IN BOOLEAN CacheEnabled
);
1627 (DDKAPI
*PALLOCATE_ADAPTER_CHANNEL
)(
1628 IN PDMA_ADAPTER DmaAdapter
,
1629 IN PDEVICE_OBJECT DeviceObject
,
1630 IN ULONG NumberOfMapRegisters
,
1631 IN PDRIVER_CONTROL ExecutionRoutine
,
1635 (DDKAPI
*PFLUSH_ADAPTER_BUFFERS
)(
1636 IN PDMA_ADAPTER DmaAdapter
,
1638 IN PVOID MapRegisterBase
,
1641 IN BOOLEAN WriteToDevice
);
1644 (DDKAPI
*PFREE_ADAPTER_CHANNEL
)(
1645 IN PDMA_ADAPTER DmaAdapter
);
1648 (DDKAPI
*PFREE_MAP_REGISTERS
)(
1649 IN PDMA_ADAPTER DmaAdapter
,
1650 PVOID MapRegisterBase
,
1651 ULONG NumberOfMapRegisters
);
1653 typedef PHYSICAL_ADDRESS
1654 (DDKAPI
*PMAP_TRANSFER
)(
1655 IN PDMA_ADAPTER DmaAdapter
,
1657 IN PVOID MapRegisterBase
,
1659 IN OUT PULONG Length
,
1660 IN BOOLEAN WriteToDevice
);
1663 (DDKAPI
*PGET_DMA_ALIGNMENT
)(
1664 IN PDMA_ADAPTER DmaAdapter
);
1667 (DDKAPI
*PREAD_DMA_COUNTER
)(
1668 IN PDMA_ADAPTER DmaAdapter
);
1671 (DDKAPI
*PGET_SCATTER_GATHER_LIST
)(
1672 IN PDMA_ADAPTER DmaAdapter
,
1673 IN PDEVICE_OBJECT DeviceObject
,
1677 IN PDRIVER_LIST_CONTROL ExecutionRoutine
,
1679 IN BOOLEAN WriteToDevice
);
1682 (DDKAPI
*PPUT_SCATTER_GATHER_LIST
)(
1683 IN PDMA_ADAPTER DmaAdapter
,
1684 IN PSCATTER_GATHER_LIST ScatterGather
,
1685 IN BOOLEAN WriteToDevice
);
1688 (DDKAPI
*PCALCULATE_SCATTER_GATHER_LIST_SIZE
)(
1689 IN PDMA_ADAPTER DmaAdapter
,
1690 IN PMDL Mdl OPTIONAL
,
1693 OUT PULONG ScatterGatherListSize
,
1694 OUT PULONG pNumberOfMapRegisters OPTIONAL
);
1697 (DDKAPI
*PBUILD_SCATTER_GATHER_LIST
)(
1698 IN PDMA_ADAPTER DmaAdapter
,
1699 IN PDEVICE_OBJECT DeviceObject
,
1703 IN PDRIVER_LIST_CONTROL ExecutionRoutine
,
1705 IN BOOLEAN WriteToDevice
,
1706 IN PVOID ScatterGatherBuffer
,
1707 IN ULONG ScatterGatherLength
);
1710 (DDKAPI
*PBUILD_MDL_FROM_SCATTER_GATHER_LIST
)(
1711 IN PDMA_ADAPTER DmaAdapter
,
1712 IN PSCATTER_GATHER_LIST ScatterGather
,
1713 IN PMDL OriginalMdl
,
1714 OUT PMDL
*TargetMdl
);
1716 typedef struct _DMA_OPERATIONS
{
1718 PPUT_DMA_ADAPTER PutDmaAdapter
;
1719 PALLOCATE_COMMON_BUFFER AllocateCommonBuffer
;
1720 PFREE_COMMON_BUFFER FreeCommonBuffer
;
1721 PALLOCATE_ADAPTER_CHANNEL AllocateAdapterChannel
;
1722 PFLUSH_ADAPTER_BUFFERS FlushAdapterBuffers
;
1723 PFREE_ADAPTER_CHANNEL FreeAdapterChannel
;
1724 PFREE_MAP_REGISTERS FreeMapRegisters
;
1725 PMAP_TRANSFER MapTransfer
;
1726 PGET_DMA_ALIGNMENT GetDmaAlignment
;
1727 PREAD_DMA_COUNTER ReadDmaCounter
;
1728 PGET_SCATTER_GATHER_LIST GetScatterGatherList
;
1729 PPUT_SCATTER_GATHER_LIST PutScatterGatherList
;
1730 PCALCULATE_SCATTER_GATHER_LIST_SIZE CalculateScatterGatherList
;
1731 PBUILD_SCATTER_GATHER_LIST BuildScatterGatherList
;
1732 PBUILD_MDL_FROM_SCATTER_GATHER_LIST BuildMdlFromScatterGatherList
;
1733 } DMA_OPERATIONS
, *PDMA_OPERATIONS
;
1735 typedef enum _ARBITER_REQUEST_SOURCE
{
1736 ArbiterRequestUndefined
= -1,
1737 ArbiterRequestLegacyReported
,
1738 ArbiterRequestHalReported
,
1739 ArbiterRequestLegacyAssigned
,
1740 ArbiterRequestPnpDetected
,
1741 ArbiterRequestPnpEnumerated
1742 } ARBITER_REQUEST_SOURCE
;
1744 typedef enum _ARBITER_RESULT
{
1745 ArbiterResultUndefined
= -1,
1746 ArbiterResultSuccess
,
1747 ArbiterResultExternalConflict
,
1748 ArbiterResultNullRequest
1751 typedef enum _ARBITER_ACTION
{
1752 ArbiterActionTestAllocation
,
1753 ArbiterActionRetestAllocation
,
1754 ArbiterActionCommitAllocation
,
1755 ArbiterActionRollbackAllocation
,
1756 ArbiterActionQueryAllocatedResources
,
1757 ArbiterActionWriteReservedResources
,
1758 ArbiterActionQueryConflict
,
1759 ArbiterActionQueryArbitrate
,
1760 ArbiterActionAddReserved
,
1761 ArbiterActionBootAllocation
1762 } ARBITER_ACTION
, *PARBITER_ACTION
;
1764 typedef struct _ARBITER_CONFLICT_INFO
{
1765 PDEVICE_OBJECT OwningObject
;
1768 } ARBITER_CONFLICT_INFO
, *PARBITER_CONFLICT_INFO
;
1770 typedef struct _ARBITER_PARAMETERS
{
1773 IN OUT PLIST_ENTRY ArbitrationList
;
1774 IN ULONG AllocateFromCount
;
1775 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
1779 IN OUT PLIST_ENTRY ArbitrationList
;
1780 IN ULONG AllocateFromCount
;
1781 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
1785 IN OUT PLIST_ENTRY ArbitrationList
;
1789 OUT PCM_PARTIAL_RESOURCE_LIST
*AllocatedResources
;
1790 } QueryAllocatedResources
;
1793 IN PDEVICE_OBJECT PhysicalDeviceObject
;
1794 IN PIO_RESOURCE_DESCRIPTOR ConflictingResource
;
1795 OUT PULONG ConflictCount
;
1796 OUT PARBITER_CONFLICT_INFO
*Conflicts
;
1800 IN PLIST_ENTRY ArbitrationList
;
1804 IN PDEVICE_OBJECT ReserveDevice
;
1807 } ARBITER_PARAMETERS
, *PARBITER_PARAMETERS
;
1809 #define ARBITER_FLAG_BOOT_CONFIG 0x00000001
1811 typedef struct _ARBITER_LIST_ENTRY
{
1812 LIST_ENTRY ListEntry
;
1813 ULONG AlternativeCount
;
1814 PIO_RESOURCE_DESCRIPTOR Alternatives
;
1815 PDEVICE_OBJECT PhysicalDeviceObject
;
1816 ARBITER_REQUEST_SOURCE RequestSource
;
1819 INTERFACE_TYPE InterfaceType
;
1822 PCM_PARTIAL_RESOURCE_DESCRIPTOR Assignment
;
1823 PIO_RESOURCE_DESCRIPTOR SelectedAlternative
;
1824 ARBITER_RESULT Result
;
1825 } ARBITER_LIST_ENTRY
, *PARBITER_LIST_ENTRY
;
1828 (DDKAPI
*PARBITER_HANDLER
)(
1830 IN ARBITER_ACTION Action
,
1831 IN OUT PARBITER_PARAMETERS Parameters
);
1833 #define ARBITER_PARTIAL 0x00000001
1835 typedef struct _ARBITER_INTERFACE
{
1839 PINTERFACE_REFERENCE InterfaceReference
;
1840 PINTERFACE_DEREFERENCE InterfaceDereference
;
1841 PARBITER_HANDLER ArbiterHandler
;
1843 } ARBITER_INTERFACE
, *PARBITER_INTERFACE
;
1845 typedef enum _KPROFILE_SOURCE
{
1847 ProfileAlignmentFixup
,
1850 ProfileLoadInstructions
,
1851 ProfilePipelineFrozen
,
1852 ProfileBranchInstructions
,
1853 ProfileTotalNonissues
,
1854 ProfileDcacheMisses
,
1855 ProfileIcacheMisses
,
1857 ProfileBranchMispredictions
,
1858 ProfileStoreInstructions
,
1859 ProfileFpInstructions
,
1860 ProfileIntegerInstructions
,
1864 ProfileSpecialInstructions
,
1866 ProfileIcacheIssues
,
1867 ProfileDcacheAccesses
,
1868 ProfileMemoryBarrierCycles
,
1869 ProfileLoadLinkedIssues
,
1873 typedef enum _HAL_QUERY_INFORMATION_CLASS
{
1874 HalInstalledBusInformation
,
1875 HalProfileSourceInformation
,
1876 HalInformationClassUnused1
,
1877 HalPowerInformation
,
1878 HalProcessorSpeedInformation
,
1879 HalCallbackInformation
,
1880 HalMapRegisterInformation
,
1881 HalMcaLogInformation
,
1882 HalFrameBufferCachingInformation
,
1883 HalDisplayBiosInformation
,
1884 HalProcessorFeatureInformation
,
1885 HalNumaTopologyInterface
,
1886 HalErrorInformation
,
1887 HalCmcLogInformation
,
1888 HalCpeLogInformation
,
1889 HalQueryMcaInterface
,
1890 HalQueryAMLIIllegalIOPortAddresses
,
1891 HalQueryMaxHotPlugMemoryAddress
,
1892 HalPartitionIpiInterface
,
1893 HalPlatformInformation
,
1894 HalQueryProfileSourceList
1895 } HAL_QUERY_INFORMATION_CLASS
, *PHAL_QUERY_INFORMATION_CLASS
;
1897 typedef enum _HAL_SET_INFORMATION_CLASS
{
1898 HalProfileSourceInterval
,
1899 HalProfileSourceInterruptHandler
,
1900 HalMcaRegisterDriver
,
1901 HalKernelErrorHandler
,
1902 HalCmcRegisterDriver
,
1903 HalCpeRegisterDriver
,
1907 HalGenerateCmcInterrupt
1908 } HAL_SET_INFORMATION_CLASS
, *PHAL_SET_INFORMATION_CLASS
;
1910 typedef struct _HAL_PROFILE_SOURCE_INTERVAL
1912 KPROFILE_SOURCE Source
;
1914 } HAL_PROFILE_SOURCE_INTERVAL
, *PHAL_PROFILE_SOURCE_INTERVAL
;
1916 typedef struct _HAL_PROFILE_SOURCE_INFORMATION
1918 KPROFILE_SOURCE Source
;
1921 } HAL_PROFILE_SOURCE_INFORMATION
, *PHAL_PROFILE_SOURCE_INFORMATION
;
1923 typedef struct _MAP_REGISTER_ENTRY
1926 BOOLEAN WriteToDevice
;
1927 } MAP_REGISTER_ENTRY
, *PMAP_REGISTER_ENTRY
;
1934 PUCHAR TranslatedAddress
;
1936 } DEBUG_DEVICE_ADDRESS
, *PDEBUG_DEVICE_ADDRESS
;
1940 PHYSICAL_ADDRESS Start
;
1941 PHYSICAL_ADDRESS MaxEnd
;
1942 PVOID VirtualAddress
;
1946 } DEBUG_MEMORY_REQUIREMENTS
, *PDEBUG_MEMORY_REQUIREMENTS
;
1957 BOOLEAN Initialized
;
1958 DEBUG_DEVICE_ADDRESS BaseAddress
[6];
1959 DEBUG_MEMORY_REQUIREMENTS Memory
;
1960 } DEBUG_DEVICE_DESCRIPTOR
, *PDEBUG_DEVICE_DESCRIPTOR
;
1962 typedef enum _KD_OPTION
{
1963 KD_OPTION_SET_BLOCK_ENABLE
,
1966 /* Function Type Defintions for Dispatch Functions */
1967 struct _DEVICE_CONTROL_CONTEXT
;
1970 (DDKAPI
*PDEVICE_CONTROL_COMPLETION
)(
1971 IN
struct _DEVICE_CONTROL_CONTEXT
*ControlContext
);
1973 typedef struct _DEVICE_CONTROL_CONTEXT
{
1975 PDEVICE_HANDLER_OBJECT DeviceHandler
;
1976 PDEVICE_OBJECT DeviceObject
;
1979 PULONG BufferLength
;
1981 } DEVICE_CONTROL_CONTEXT
, *PDEVICE_CONTROL_CONTEXT
;
1983 typedef struct _PM_DISPATCH_TABLE
{
1987 } PM_DISPATCH_TABLE
, *PPM_DISPATCH_TABLE
;
1989 typedef enum _RESOURCE_TRANSLATION_DIRECTION
{
1990 TranslateChildToParent
,
1991 TranslateParentToChild
1992 } RESOURCE_TRANSLATION_DIRECTION
;
1995 (DDKAPI
*PTRANSLATE_RESOURCE_HANDLER
)(
1997 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Source
,
1998 IN RESOURCE_TRANSLATION_DIRECTION Direction
,
1999 IN ULONG AlternativesCount
,
2000 IN IO_RESOURCE_DESCRIPTOR Alternatives
[],
2001 IN PDEVICE_OBJECT PhysicalDeviceObject
,
2002 OUT PCM_PARTIAL_RESOURCE_DESCRIPTOR Target
);
2005 (DDKAPI
*PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER
)(
2007 IN PIO_RESOURCE_DESCRIPTOR Source
,
2008 IN PDEVICE_OBJECT PhysicalDeviceObject
,
2009 OUT PULONG TargetCount
,
2010 OUT PIO_RESOURCE_DESCRIPTOR
*Target
);
2012 typedef struct _TRANSLATOR_INTERFACE
{
2016 PINTERFACE_REFERENCE InterfaceReference
;
2017 PINTERFACE_DEREFERENCE InterfaceDereference
;
2018 PTRANSLATE_RESOURCE_HANDLER TranslateResources
;
2019 PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER TranslateResourceRequirements
;
2020 } TRANSLATOR_INTERFACE
, *PTRANSLATOR_INTERFACE
;
2023 (DDKAPI
*pHalDeviceControl
)(
2024 IN PDEVICE_HANDLER_OBJECT DeviceHandler
,
2025 IN PDEVICE_OBJECT DeviceObject
,
2026 IN ULONG ControlCode
,
2027 IN OUT PVOID Buffer OPTIONAL
,
2028 IN OUT PULONG BufferLength OPTIONAL
,
2030 IN PDEVICE_CONTROL_COMPLETION CompletionRoutine
);
2033 (FASTCALL
*pHalExamineMBR
)(
2034 IN PDEVICE_OBJECT DeviceObject
,
2035 IN ULONG SectorSize
,
2036 IN ULONG MBRTypeIdentifier
,
2040 (FASTCALL
*pHalIoAssignDriveLetters
)(
2041 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
2042 IN PSTRING NtDeviceName
,
2043 OUT PUCHAR NtSystemPath
,
2044 OUT PSTRING NtSystemPathString
);
2047 (FASTCALL
*pHalIoReadPartitionTable
)(
2048 IN PDEVICE_OBJECT DeviceObject
,
2049 IN ULONG SectorSize
,
2050 IN BOOLEAN ReturnRecognizedPartitions
,
2051 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
2054 (FASTCALL
*pHalIoSetPartitionInformation
)(
2055 IN PDEVICE_OBJECT DeviceObject
,
2056 IN ULONG SectorSize
,
2057 IN ULONG PartitionNumber
,
2058 IN ULONG PartitionType
);
2061 (FASTCALL
*pHalIoWritePartitionTable
)(
2062 IN PDEVICE_OBJECT DeviceObject
,
2063 IN ULONG SectorSize
,
2064 IN ULONG SectorsPerTrack
,
2065 IN ULONG NumberOfHeads
,
2066 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
2068 typedef PBUS_HANDLER
2069 (FASTCALL
*pHalHandlerForBus
)(
2070 IN INTERFACE_TYPE InterfaceType
,
2071 IN ULONG BusNumber
);
2074 (FASTCALL
*pHalReferenceBusHandler
)(
2075 IN PBUS_HANDLER BusHandler
);
2078 (DDKAPI
*pHalQuerySystemInformation
)(
2079 IN HAL_QUERY_INFORMATION_CLASS InformationClass
,
2080 IN ULONG BufferSize
,
2081 IN OUT PVOID Buffer
,
2082 OUT PULONG ReturnedLength
);
2085 (DDKAPI
*pHalSetSystemInformation
)(
2086 IN HAL_SET_INFORMATION_CLASS InformationClass
,
2087 IN ULONG BufferSize
,
2091 (DDKAPI
*pHalQueryBusSlots
)(
2092 IN PBUS_HANDLER BusHandler
,
2093 IN ULONG BufferSize
,
2094 OUT PULONG SlotNumbers
,
2095 OUT PULONG ReturnedLength
);
2098 (DDKAPI
*pHalInitPnpDriver
)(
2102 (DDKAPI
*pHalInitPowerManagement
)(
2103 IN PPM_DISPATCH_TABLE PmDriverDispatchTable
,
2104 OUT PPM_DISPATCH_TABLE
*PmHalDispatchTable
);
2106 typedef struct _DMA_ADAPTER
*
2107 (DDKAPI
*pHalGetDmaAdapter
)(
2109 IN
struct _DEVICE_DESCRIPTION
*DeviceDescriptor
,
2110 OUT PULONG NumberOfMapRegisters
);
2113 (DDKAPI
*pHalGetInterruptTranslator
)(
2114 IN INTERFACE_TYPE ParentInterfaceType
,
2115 IN ULONG ParentBusNumber
,
2116 IN INTERFACE_TYPE BridgeInterfaceType
,
2119 OUT PTRANSLATOR_INTERFACE Translator
,
2120 OUT PULONG BridgeBusNumber
);
2123 (DDKAPI
*pHalStartMirroring
)(
2127 (DDKAPI
*pHalEndMirroring
)(
2128 IN ULONG PassNumber
);
2131 (DDKAPI
*pHalMirrorPhysicalMemory
)(
2132 IN PHYSICAL_ADDRESS PhysicalAddress
,
2133 IN LARGE_INTEGER NumberOfBytes
);
2136 (DDKAPI
*pHalMirrorVerify
)(
2137 IN PHYSICAL_ADDRESS PhysicalAddress
,
2138 IN LARGE_INTEGER NumberOfBytes
);
2141 (DDKAPI
*pHalEndOfBoot
)(
2146 (DDKAPI
*pHalTranslateBusAddress
)(
2147 IN INTERFACE_TYPE InterfaceType
,
2149 IN PHYSICAL_ADDRESS BusAddress
,
2150 IN OUT PULONG AddressSpace
,
2151 OUT PPHYSICAL_ADDRESS TranslatedAddress
2156 (DDKAPI
*pHalAssignSlotResources
)(
2157 IN PUNICODE_STRING RegistryPath
,
2158 IN PUNICODE_STRING DriverClassName OPTIONAL
,
2159 IN PDRIVER_OBJECT DriverObject
,
2160 IN PDEVICE_OBJECT DeviceObject
,
2161 IN INTERFACE_TYPE BusType
,
2163 IN ULONG SlotNumber
,
2164 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
2169 (DDKAPI
*pHalHaltSystem
)(
2175 (DDKAPI
*pHalResetDisplay
)(
2181 (DDKAPI
*pHalVectorToIDTEntry
)(
2187 (DDKAPI
*pHalFindBusAddressTranslation
)(
2188 IN PHYSICAL_ADDRESS BusAddress
,
2189 IN OUT PULONG AddressSpace
,
2190 OUT PPHYSICAL_ADDRESS TranslatedAddress
,
2191 IN OUT PULONG_PTR Context
,
2197 (DDKAPI
*pKdSetupPciDeviceForDebugging
)(
2198 IN PVOID LoaderBlock OPTIONAL
,
2199 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
2204 (DDKAPI
*pKdReleasePciDeviceForDebugging
)(
2205 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
2210 (DDKAPI
*pKdGetAcpiTablePhase0
)(
2211 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
2217 (DDKAPI
*pKdCheckPowerButton
)(
2223 (DDKAPI
*pHalGetInterruptVector
)(
2224 IN INTERFACE_TYPE InterfaceType
,
2226 IN ULONG BusInterruptLevel
,
2227 IN ULONG BusInterruptVector
,
2229 OUT PKAFFINITY Affinity
2234 (DDKAPI
*pHalGetVectorInput
)(
2236 IN KAFFINITY Affinity
,
2238 OUT PKINTERRUPT_POLARITY Polarity
2243 (DDKAPI
*pKdMapPhysicalMemory64
)(
2244 IN PHYSICAL_ADDRESS PhysicalAddress
,
2245 IN ULONG NumberPages
2250 (DDKAPI
*pKdUnmapVirtualAddress
)(
2251 IN PVOID VirtualAddress
,
2252 IN ULONG NumberPages
2257 (DDKAPI
*pKdGetPciDataByOffset
)(
2259 IN ULONG SlotNumber
,
2267 (DDKAPI
*pKdSetPciDataByOffset
)(
2269 IN ULONG SlotNumber
,
2276 (DDKAPI
*PHAL_RESET_DISPLAY_PARAMETERS
)(
2277 ULONG Columns
, ULONG Rows
);
2281 pHalQuerySystemInformation HalQuerySystemInformation
;
2282 pHalSetSystemInformation HalSetSystemInformation
;
2283 pHalQueryBusSlots HalQueryBusSlots
;
2285 pHalExamineMBR HalExamineMBR
;
2286 pHalIoAssignDriveLetters HalIoAssignDriveLetters
;
2287 pHalIoReadPartitionTable HalIoReadPartitionTable
;
2288 pHalIoSetPartitionInformation HalIoSetPartitionInformation
;
2289 pHalIoWritePartitionTable HalIoWritePartitionTable
;
2290 pHalHandlerForBus HalReferenceHandlerForBus
;
2291 pHalReferenceBusHandler HalReferenceBusHandler
;
2292 pHalReferenceBusHandler HalDereferenceBusHandler
;
2293 pHalInitPnpDriver HalInitPnpDriver
;
2294 pHalInitPowerManagement HalInitPowerManagement
;
2295 pHalGetDmaAdapter HalGetDmaAdapter
;
2296 pHalGetInterruptTranslator HalGetInterruptTranslator
;
2297 pHalStartMirroring HalStartMirroring
;
2298 pHalEndMirroring HalEndMirroring
;
2299 pHalMirrorPhysicalMemory HalMirrorPhysicalMemory
;
2300 pHalEndOfBoot HalEndOfBoot
;
2301 pHalMirrorVerify HalMirrorVerify
;
2302 } HAL_DISPATCH
, *PHAL_DISPATCH
;
2304 #if defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTHAL_)
2305 extern NTSYSAPI PHAL_DISPATCH HalDispatchTable
;
2306 #define HALDISPATCH ((PHAL_DISPATCH)&HalDispatchTable)
2308 extern __declspec(dllexport
) HAL_DISPATCH HalDispatchTable
;
2309 #define HALDISPATCH (&HalDispatchTable)
2312 #define HAL_DISPATCH_VERSION 3
2313 #define HalDispatchTableVersion HALDISPATCH->Version
2314 #define HalQuerySystemInformation HALDISPATCH->HalQuerySystemInformation
2315 #define HalSetSystemInformation HALDISPATCH->HalSetSystemInformation
2316 #define HalQueryBusSlots HALDISPATCH->HalQueryBusSlots
2317 #define HalReferenceHandlerForBus HALDISPATCH->HalReferenceHandlerForBus
2318 #define HalReferenceBusHandler HALDISPATCH->HalReferenceBusHandler
2319 #define HalDereferenceBusHandler HALDISPATCH->HalDereferenceBusHandler
2320 #define HalInitPnpDriver HALDISPATCH->HalInitPnpDriver
2321 #define HalInitPowerManagement HALDISPATCH->HalInitPowerManagement
2322 #define HalGetDmaAdapter HALDISPATCH->HalGetDmaAdapter
2323 #define HalGetInterruptTranslator HALDISPATCH->HalGetInterruptTranslator
2324 #define HalStartMirroring HALDISPATCH->HalStartMirroring
2325 #define HalEndMirroring HALDISPATCH->HalEndMirroring
2326 #define HalMirrorPhysicalMemory HALDISPATCH->HalMirrorPhysicalMemory
2327 #define HalEndOfBoot HALDISPATCH->HalEndOfBoot
2328 #define HalMirrorVerify HALDISPATCH->HalMirrorVerify
2330 typedef enum _FILE_INFORMATION_CLASS
{
2331 FileDirectoryInformation
= 1,
2332 FileFullDirectoryInformation
,
2333 FileBothDirectoryInformation
,
2334 FileBasicInformation
,
2335 FileStandardInformation
,
2336 FileInternalInformation
,
2338 FileAccessInformation
,
2339 FileNameInformation
,
2340 FileRenameInformation
,
2341 FileLinkInformation
,
2342 FileNamesInformation
,
2343 FileDispositionInformation
,
2344 FilePositionInformation
,
2345 FileFullEaInformation
,
2346 FileModeInformation
,
2347 FileAlignmentInformation
,
2349 FileAllocationInformation
,
2350 FileEndOfFileInformation
,
2351 FileAlternateNameInformation
,
2352 FileStreamInformation
,
2353 FilePipeInformation
,
2354 FilePipeLocalInformation
,
2355 FilePipeRemoteInformation
,
2356 FileMailslotQueryInformation
,
2357 FileMailslotSetInformation
,
2358 FileCompressionInformation
,
2359 FileObjectIdInformation
,
2360 FileCompletionInformation
,
2361 FileMoveClusterInformation
,
2362 FileQuotaInformation
,
2363 FileReparsePointInformation
,
2364 FileNetworkOpenInformation
,
2365 FileAttributeTagInformation
,
2366 FileTrackingInformation
,
2367 FileIdBothDirectoryInformation
,
2368 FileIdFullDirectoryInformation
,
2369 FileValidDataLengthInformation
,
2370 FileShortNameInformation
,
2371 FileMaximumInformation
2372 } FILE_INFORMATION_CLASS
, *PFILE_INFORMATION_CLASS
;
2374 typedef struct _FILE_POSITION_INFORMATION
{
2375 LARGE_INTEGER CurrentByteOffset
;
2376 } FILE_POSITION_INFORMATION
, *PFILE_POSITION_INFORMATION
;
2378 typedef struct _FILE_ALIGNMENT_INFORMATION
{
2379 ULONG AlignmentRequirement
;
2380 } FILE_ALIGNMENT_INFORMATION
, *PFILE_ALIGNMENT_INFORMATION
;
2382 typedef struct _FILE_NAME_INFORMATION
{
2383 ULONG FileNameLength
;
2385 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
2387 #include <pshpack8.h>
2388 typedef struct _FILE_BASIC_INFORMATION
{
2389 LARGE_INTEGER CreationTime
;
2390 LARGE_INTEGER LastAccessTime
;
2391 LARGE_INTEGER LastWriteTime
;
2392 LARGE_INTEGER ChangeTime
;
2393 ULONG FileAttributes
;
2394 } FILE_BASIC_INFORMATION
, *PFILE_BASIC_INFORMATION
;
2395 #include <poppack.h>
2397 typedef struct _FILE_STANDARD_INFORMATION
{
2398 LARGE_INTEGER AllocationSize
;
2399 LARGE_INTEGER EndOfFile
;
2400 ULONG NumberOfLinks
;
2401 BOOLEAN DeletePending
;
2403 } FILE_STANDARD_INFORMATION
, *PFILE_STANDARD_INFORMATION
;
2405 typedef struct _FILE_NETWORK_OPEN_INFORMATION
{
2406 LARGE_INTEGER CreationTime
;
2407 LARGE_INTEGER LastAccessTime
;
2408 LARGE_INTEGER LastWriteTime
;
2409 LARGE_INTEGER ChangeTime
;
2410 LARGE_INTEGER AllocationSize
;
2411 LARGE_INTEGER EndOfFile
;
2412 ULONG FileAttributes
;
2413 } FILE_NETWORK_OPEN_INFORMATION
, *PFILE_NETWORK_OPEN_INFORMATION
;
2415 typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION
{
2416 ULONG FileAttributes
;
2418 } FILE_ATTRIBUTE_TAG_INFORMATION
, *PFILE_ATTRIBUTE_TAG_INFORMATION
;
2420 typedef struct _FILE_DISPOSITION_INFORMATION
{
2422 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
2424 typedef struct _FILE_END_OF_FILE_INFORMATION
{
2425 LARGE_INTEGER EndOfFile
;
2426 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
2428 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
{
2429 LARGE_INTEGER ValidDataLength
;
2430 } FILE_VALID_DATA_LENGTH_INFORMATION
, *PFILE_VALID_DATA_LENGTH_INFORMATION
;
2432 typedef union _FILE_SEGMENT_ELEMENT
{
2434 ULONGLONG Alignment
;
2435 }FILE_SEGMENT_ELEMENT
, *PFILE_SEGMENT_ELEMENT
;
2437 typedef enum _FSINFOCLASS
{
2438 FileFsVolumeInformation
= 1,
2439 FileFsLabelInformation
,
2440 FileFsSizeInformation
,
2441 FileFsDeviceInformation
,
2442 FileFsAttributeInformation
,
2443 FileFsControlInformation
,
2444 FileFsFullSizeInformation
,
2445 FileFsObjectIdInformation
,
2446 FileFsDriverPathInformation
,
2447 FileFsMaximumInformation
2448 } FS_INFORMATION_CLASS
, *PFS_INFORMATION_CLASS
;
2450 typedef struct _FILE_FS_DEVICE_INFORMATION
{
2451 DEVICE_TYPE DeviceType
;
2452 ULONG Characteristics
;
2453 } FILE_FS_DEVICE_INFORMATION
, *PFILE_FS_DEVICE_INFORMATION
;
2455 typedef struct _FILE_FULL_EA_INFORMATION
{
2456 ULONG NextEntryOffset
;
2459 USHORT EaValueLength
;
2461 } FILE_FULL_EA_INFORMATION
, *PFILE_FULL_EA_INFORMATION
;
2463 /* ERESOURCE.Flag */
2465 #define ResourceNeverExclusive 0x0010
2466 #define ResourceReleaseByOtherThread 0x0020
2467 #define ResourceOwnedExclusive 0x0080
2469 #define RESOURCE_HASH_TABLE_SIZE 64
2471 typedef struct _DEVOBJ_EXTENSION
2475 PDEVICE_OBJECT DeviceObject
;
2476 } DEVOBJ_EXTENSION
, *PDEVOBJ_EXTENSION
;
2479 (DDKAPI
*PFAST_IO_CHECK_IF_POSSIBLE
)(
2480 IN
struct _FILE_OBJECT
*FileObject
,
2481 IN PLARGE_INTEGER FileOffset
,
2485 IN BOOLEAN CheckForReadOperation
,
2486 OUT PIO_STATUS_BLOCK IoStatus
,
2487 IN
struct _DEVICE_OBJECT
*DeviceObject
);
2490 (DDKAPI
*PFAST_IO_READ
)(
2491 IN
struct _FILE_OBJECT
*FileObject
,
2492 IN PLARGE_INTEGER FileOffset
,
2497 OUT PIO_STATUS_BLOCK IoStatus
,
2498 IN
struct _DEVICE_OBJECT
*DeviceObject
);
2501 (DDKAPI
*PFAST_IO_WRITE
)(
2502 IN
struct _FILE_OBJECT
*FileObject
,
2503 IN PLARGE_INTEGER FileOffset
,
2508 OUT PIO_STATUS_BLOCK IoStatus
,
2509 IN
struct _DEVICE_OBJECT
*DeviceObject
);
2512 (DDKAPI
*PFAST_IO_QUERY_BASIC_INFO
)(
2513 IN
struct _FILE_OBJECT
*FileObject
,
2515 OUT PFILE_BASIC_INFORMATION Buffer
,
2516 OUT PIO_STATUS_BLOCK IoStatus
,
2517 IN
struct _DEVICE_OBJECT
*DeviceObject
);
2520 (DDKAPI
*PFAST_IO_QUERY_STANDARD_INFO
)(
2521 IN
struct _FILE_OBJECT
*FileObject
,
2523 OUT PFILE_STANDARD_INFORMATION Buffer
,
2524 OUT PIO_STATUS_BLOCK IoStatus
,
2525 IN
struct _DEVICE_OBJECT
*DeviceObject
);
2528 (DDKAPI
*PFAST_IO_LOCK
)(
2529 IN
struct _FILE_OBJECT
*FileObject
,
2530 IN PLARGE_INTEGER FileOffset
,
2531 IN PLARGE_INTEGER Length
,
2532 PEPROCESS ProcessId
,
2534 BOOLEAN FailImmediately
,
2535 BOOLEAN ExclusiveLock
,
2536 OUT PIO_STATUS_BLOCK IoStatus
,
2537 IN
struct _DEVICE_OBJECT
*DeviceObject
);
2540 (DDKAPI
*PFAST_IO_UNLOCK_SINGLE
)(
2541 IN
struct _FILE_OBJECT
*FileObject
,
2542 IN PLARGE_INTEGER FileOffset
,
2543 IN PLARGE_INTEGER Length
,
2544 PEPROCESS ProcessId
,
2546 OUT PIO_STATUS_BLOCK IoStatus
,
2547 IN
struct _DEVICE_OBJECT
*DeviceObject
);
2550 (DDKAPI
*PFAST_IO_UNLOCK_ALL
)(
2551 IN
struct _FILE_OBJECT
*FileObject
,
2552 PEPROCESS ProcessId
,
2553 OUT PIO_STATUS_BLOCK IoStatus
,
2554 IN
struct _DEVICE_OBJECT
*DeviceObject
);
2557 (DDKAPI
*PFAST_IO_UNLOCK_ALL_BY_KEY
)(
2558 IN
struct _FILE_OBJECT
*FileObject
,
2561 OUT PIO_STATUS_BLOCK IoStatus
,
2562 IN
struct _DEVICE_OBJECT
*DeviceObject
);
2565 (DDKAPI
*PFAST_IO_DEVICE_CONTROL
)(
2566 IN
struct _FILE_OBJECT
*FileObject
,
2568 IN PVOID InputBuffer OPTIONAL
,
2569 IN ULONG InputBufferLength
,
2570 OUT PVOID OutputBuffer OPTIONAL
,
2571 IN ULONG OutputBufferLength
,
2572 IN ULONG IoControlCode
,
2573 OUT PIO_STATUS_BLOCK IoStatus
,
2574 IN
struct _DEVICE_OBJECT
*DeviceObject
);
2577 (DDKAPI
*PFAST_IO_ACQUIRE_FILE
)(
2578 IN
struct _FILE_OBJECT
*FileObject
);
2581 (DDKAPI
*PFAST_IO_RELEASE_FILE
)(
2582 IN
struct _FILE_OBJECT
*FileObject
);
2585 (DDKAPI
*PFAST_IO_DETACH_DEVICE
)(
2586 IN
struct _DEVICE_OBJECT
*SourceDevice
,
2587 IN
struct _DEVICE_OBJECT
*TargetDevice
);
2590 (DDKAPI
*PFAST_IO_QUERY_NETWORK_OPEN_INFO
)(
2591 IN
struct _FILE_OBJECT
*FileObject
,
2593 OUT
struct _FILE_NETWORK_OPEN_INFORMATION
*Buffer
,
2594 OUT
struct _IO_STATUS_BLOCK
*IoStatus
,
2595 IN
struct _DEVICE_OBJECT
*DeviceObject
);
2598 (DDKAPI
*PFAST_IO_ACQUIRE_FOR_MOD_WRITE
)(
2599 IN
struct _FILE_OBJECT
*FileObject
,
2600 IN PLARGE_INTEGER EndingOffset
,
2601 OUT
struct _ERESOURCE
**ResourceToRelease
,
2602 IN
struct _DEVICE_OBJECT
*DeviceObject
);
2605 (DDKAPI
*PFAST_IO_MDL_READ
)(
2606 IN
struct _FILE_OBJECT
*FileObject
,
2607 IN PLARGE_INTEGER FileOffset
,
2611 OUT PIO_STATUS_BLOCK IoStatus
,
2612 IN
struct _DEVICE_OBJECT
*DeviceObject
);
2615 (DDKAPI
*PFAST_IO_MDL_READ_COMPLETE
)(
2616 IN
struct _FILE_OBJECT
*FileObject
,
2618 IN
struct _DEVICE_OBJECT
*DeviceObject
);
2621 (DDKAPI
*PFAST_IO_PREPARE_MDL_WRITE
)(
2622 IN
struct _FILE_OBJECT
*FileObject
,
2623 IN PLARGE_INTEGER FileOffset
,
2627 OUT PIO_STATUS_BLOCK IoStatus
,
2628 IN
struct _DEVICE_OBJECT
*DeviceObject
);
2631 (DDKAPI
*PFAST_IO_MDL_WRITE_COMPLETE
)(
2632 IN
struct _FILE_OBJECT
*FileObject
,
2633 IN PLARGE_INTEGER FileOffset
,
2635 IN
struct _DEVICE_OBJECT
*DeviceObject
);
2638 (DDKAPI
*PFAST_IO_READ_COMPRESSED
)(
2639 IN
struct _FILE_OBJECT
*FileObject
,
2640 IN PLARGE_INTEGER FileOffset
,
2645 OUT PIO_STATUS_BLOCK IoStatus
,
2646 OUT
struct _COMPRESSED_DATA_INFO
*CompressedDataInfo
,
2647 IN ULONG CompressedDataInfoLength
,
2648 IN
struct _DEVICE_OBJECT
*DeviceObject
);
2651 (DDKAPI
*PFAST_IO_WRITE_COMPRESSED
)(
2652 IN
struct _FILE_OBJECT
*FileObject
,
2653 IN PLARGE_INTEGER FileOffset
,
2658 OUT PIO_STATUS_BLOCK IoStatus
,
2659 IN
struct _COMPRESSED_DATA_INFO
*CompressedDataInfo
,
2660 IN ULONG CompressedDataInfoLength
,
2661 IN
struct _DEVICE_OBJECT
*DeviceObject
);
2664 (DDKAPI
*PFAST_IO_MDL_READ_COMPLETE_COMPRESSED
)(
2665 IN
struct _FILE_OBJECT
*FileObject
,
2667 IN
struct _DEVICE_OBJECT
*DeviceObject
);
2670 (DDKAPI
*PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED
)(
2671 IN
struct _FILE_OBJECT
*FileObject
,
2672 IN PLARGE_INTEGER FileOffset
,
2674 IN
struct _DEVICE_OBJECT
*DeviceObject
);
2677 (DDKAPI
*PFAST_IO_QUERY_OPEN
)(
2678 IN
struct _IRP
*Irp
,
2679 OUT PFILE_NETWORK_OPEN_INFORMATION NetworkInformation
,
2680 IN
struct _DEVICE_OBJECT
*DeviceObject
);
2683 (DDKAPI
*PFAST_IO_RELEASE_FOR_MOD_WRITE
)(
2684 IN
struct _FILE_OBJECT
*FileObject
,
2685 IN
struct _ERESOURCE
*ResourceToRelease
,
2686 IN
struct _DEVICE_OBJECT
*DeviceObject
);
2689 (DDKAPI
*PFAST_IO_ACQUIRE_FOR_CCFLUSH
)(
2690 IN
struct _FILE_OBJECT
*FileObject
,
2691 IN
struct _DEVICE_OBJECT
*DeviceObject
);
2694 (DDKAPI
*PFAST_IO_RELEASE_FOR_CCFLUSH
) (
2695 IN
struct _FILE_OBJECT
*FileObject
,
2696 IN
struct _DEVICE_OBJECT
*DeviceObject
);
2698 typedef struct _FAST_IO_DISPATCH
{
2699 ULONG SizeOfFastIoDispatch
;
2700 PFAST_IO_CHECK_IF_POSSIBLE FastIoCheckIfPossible
;
2701 PFAST_IO_READ FastIoRead
;
2702 PFAST_IO_WRITE FastIoWrite
;
2703 PFAST_IO_QUERY_BASIC_INFO FastIoQueryBasicInfo
;
2704 PFAST_IO_QUERY_STANDARD_INFO FastIoQueryStandardInfo
;
2705 PFAST_IO_LOCK FastIoLock
;
2706 PFAST_IO_UNLOCK_SINGLE FastIoUnlockSingle
;
2707 PFAST_IO_UNLOCK_ALL FastIoUnlockAll
;
2708 PFAST_IO_UNLOCK_ALL_BY_KEY FastIoUnlockAllByKey
;
2709 PFAST_IO_DEVICE_CONTROL FastIoDeviceControl
;
2710 PFAST_IO_ACQUIRE_FILE AcquireFileForNtCreateSection
;
2711 PFAST_IO_RELEASE_FILE ReleaseFileForNtCreateSection
;
2712 PFAST_IO_DETACH_DEVICE FastIoDetachDevice
;
2713 PFAST_IO_QUERY_NETWORK_OPEN_INFO FastIoQueryNetworkOpenInfo
;
2714 PFAST_IO_ACQUIRE_FOR_MOD_WRITE AcquireForModWrite
;
2715 PFAST_IO_MDL_READ MdlRead
;
2716 PFAST_IO_MDL_READ_COMPLETE MdlReadComplete
;
2717 PFAST_IO_PREPARE_MDL_WRITE PrepareMdlWrite
;
2718 PFAST_IO_MDL_WRITE_COMPLETE MdlWriteComplete
;
2719 PFAST_IO_READ_COMPRESSED FastIoReadCompressed
;
2720 PFAST_IO_WRITE_COMPRESSED FastIoWriteCompressed
;
2721 PFAST_IO_MDL_READ_COMPLETE_COMPRESSED MdlReadCompleteCompressed
;
2722 PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED MdlWriteCompleteCompressed
;
2723 PFAST_IO_QUERY_OPEN FastIoQueryOpen
;
2724 PFAST_IO_RELEASE_FOR_MOD_WRITE ReleaseForModWrite
;
2725 PFAST_IO_ACQUIRE_FOR_CCFLUSH AcquireForCcFlush
;
2726 PFAST_IO_RELEASE_FOR_CCFLUSH ReleaseForCcFlush
;
2727 } FAST_IO_DISPATCH
, *PFAST_IO_DISPATCH
;
2729 typedef struct _SECTION_OBJECT_POINTERS
{
2730 PVOID DataSectionObject
;
2731 PVOID SharedCacheMap
;
2732 PVOID ImageSectionObject
;
2733 } SECTION_OBJECT_POINTERS
, *PSECTION_OBJECT_POINTERS
;
2735 typedef struct _IO_COMPLETION_CONTEXT
{
2738 } IO_COMPLETION_CONTEXT
, *PIO_COMPLETION_CONTEXT
;
2740 /* FILE_OBJECT.Flags */
2742 #define FO_FILE_OPEN 0x00000001
2743 #define FO_SYNCHRONOUS_IO 0x00000002
2744 #define FO_ALERTABLE_IO 0x00000004
2745 #define FO_NO_INTERMEDIATE_BUFFERING 0x00000008
2746 #define FO_WRITE_THROUGH 0x00000010
2747 #define FO_SEQUENTIAL_ONLY 0x00000020
2748 #define FO_CACHE_SUPPORTED 0x00000040
2749 #define FO_NAMED_PIPE 0x00000080
2750 #define FO_STREAM_FILE 0x00000100
2751 #define FO_MAILSLOT 0x00000200
2752 #define FO_GENERATE_AUDIT_ON_CLOSE 0x00000400
2753 #define FO_DIRECT_DEVICE_OPEN 0x00000800
2754 #define FO_FILE_MODIFIED 0x00001000
2755 #define FO_FILE_SIZE_CHANGED 0x00002000
2756 #define FO_CLEANUP_COMPLETE 0x00004000
2757 #define FO_TEMPORARY_FILE 0x00008000
2758 #define FO_DELETE_ON_CLOSE 0x00010000
2759 #define FO_OPENED_CASE_SENSITIVE 0x00020000
2760 #define FO_HANDLE_CREATED 0x00040000
2761 #define FO_FILE_FAST_IO_READ 0x00080000
2762 #define FO_RANDOM_ACCESS 0x00100000
2763 #define FO_FILE_OPEN_CANCELLED 0x00200000
2764 #define FO_VOLUME_OPEN 0x00400000
2765 #define FO_REMOTE_ORIGIN 0x01000000
2767 typedef struct _FILE_OBJECT
2771 PDEVICE_OBJECT DeviceObject
;
2775 PSECTION_OBJECT_POINTERS SectionObjectPointer
;
2776 PVOID PrivateCacheMap
;
2777 NTSTATUS FinalStatus
;
2778 struct _FILE_OBJECT
*RelatedFileObject
;
2779 BOOLEAN LockOperation
;
2780 BOOLEAN DeletePending
;
2782 BOOLEAN WriteAccess
;
2783 BOOLEAN DeleteAccess
;
2785 BOOLEAN SharedWrite
;
2786 BOOLEAN SharedDelete
;
2788 UNICODE_STRING FileName
;
2789 LARGE_INTEGER CurrentByteOffset
;
2790 volatile ULONG Waiters
;
2791 volatile ULONG Busy
;
2795 volatile PIO_COMPLETION_CONTEXT CompletionContext
;
2796 KSPIN_LOCK IrpListLock
;
2798 volatile PVOID FileObjectExtension
;
2800 typedef struct _FILE_OBJECT
*PFILE_OBJECT
;
2802 typedef enum _SECURITY_OPERATION_CODE
{
2803 SetSecurityDescriptor
,
2804 QuerySecurityDescriptor
,
2805 DeleteSecurityDescriptor
,
2806 AssignSecurityDescriptor
2807 } SECURITY_OPERATION_CODE
, *PSECURITY_OPERATION_CODE
;
2809 #define INITIAL_PRIVILEGE_COUNT 3
2811 typedef struct _INITIAL_PRIVILEGE_SET
{
2812 ULONG PrivilegeCount
;
2814 LUID_AND_ATTRIBUTES Privilege
[INITIAL_PRIVILEGE_COUNT
];
2815 } INITIAL_PRIVILEGE_SET
, * PINITIAL_PRIVILEGE_SET
;
2817 #define SE_MIN_WELL_KNOWN_PRIVILEGE 2
2818 #define SE_CREATE_TOKEN_PRIVILEGE 2
2819 #define SE_ASSIGNPRIMARYTOKEN_PRIVILEGE 3
2820 #define SE_LOCK_MEMORY_PRIVILEGE 4
2821 #define SE_INCREASE_QUOTA_PRIVILEGE 5
2822 #define SE_UNSOLICITED_INPUT_PRIVILEGE 6
2823 #define SE_MACHINE_ACCOUNT_PRIVILEGE 6
2824 #define SE_TCB_PRIVILEGE 7
2825 #define SE_SECURITY_PRIVILEGE 8
2826 #define SE_TAKE_OWNERSHIP_PRIVILEGE 9
2827 #define SE_LOAD_DRIVER_PRIVILEGE 10
2828 #define SE_SYSTEM_PROFILE_PRIVILEGE 11
2829 #define SE_SYSTEMTIME_PRIVILEGE 12
2830 #define SE_PROF_SINGLE_PROCESS_PRIVILEGE 13
2831 #define SE_INC_BASE_PRIORITY_PRIVILEGE 14
2832 #define SE_CREATE_PAGEFILE_PRIVILEGE 15
2833 #define SE_CREATE_PERMANENT_PRIVILEGE 16
2834 #define SE_BACKUP_PRIVILEGE 17
2835 #define SE_RESTORE_PRIVILEGE 18
2836 #define SE_SHUTDOWN_PRIVILEGE 19
2837 #define SE_DEBUG_PRIVILEGE 20
2838 #define SE_AUDIT_PRIVILEGE 21
2839 #define SE_SYSTEM_ENVIRONMENT_PRIVILEGE 22
2840 #define SE_CHANGE_NOTIFY_PRIVILEGE 23
2841 #define SE_REMOTE_SHUTDOWN_PRIVILEGE 24
2842 #define SE_UNDOCK_PRIVILEGE 25
2843 #define SE_SYNC_AGENT_PRIVILEGE 26
2844 #define SE_ENABLE_DELEGATION_PRIVILEGE 27
2845 #define SE_MANAGE_VOLUME_PRIVILEGE 28
2846 #define SE_IMPERSONATE_PRIVILEGE 29
2847 #define SE_CREATE_GLOBAL_PRIVILEGE 30
2848 #define SE_MAX_WELL_KNOWN_PRIVILEGE SE_CREATE_GLOBAL_PRIVILEGE
2850 typedef struct _SECURITY_SUBJECT_CONTEXT
{
2851 PACCESS_TOKEN ClientToken
;
2852 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
;
2853 PACCESS_TOKEN PrimaryToken
;
2854 PVOID ProcessAuditId
;
2855 } SECURITY_SUBJECT_CONTEXT
, *PSECURITY_SUBJECT_CONTEXT
;
2857 #include <pshpack4.h>
2858 typedef struct _ACCESS_STATE
{
2860 BOOLEAN SecurityEvaluated
;
2861 BOOLEAN GenerateAudit
;
2862 BOOLEAN GenerateOnClose
;
2863 BOOLEAN PrivilegesAllocated
;
2865 ACCESS_MASK RemainingDesiredAccess
;
2866 ACCESS_MASK PreviouslyGrantedAccess
;
2867 ACCESS_MASK OriginalDesiredAccess
;
2868 SECURITY_SUBJECT_CONTEXT SubjectSecurityContext
;
2869 PSECURITY_DESCRIPTOR SecurityDescriptor
;
2872 INITIAL_PRIVILEGE_SET InitialPrivilegeSet
;
2873 PRIVILEGE_SET PrivilegeSet
;
2876 BOOLEAN AuditPrivileges
;
2877 UNICODE_STRING ObjectName
;
2878 UNICODE_STRING ObjectTypeName
;
2879 } ACCESS_STATE
, *PACCESS_STATE
;
2880 #include <poppack.h>
2882 typedef struct _IO_SECURITY_CONTEXT
{
2883 PSECURITY_QUALITY_OF_SERVICE SecurityQos
;
2884 PACCESS_STATE AccessState
;
2885 ACCESS_MASK DesiredAccess
;
2886 ULONG FullCreateOptions
;
2887 } IO_SECURITY_CONTEXT
, *PIO_SECURITY_CONTEXT
;
2889 #define IO_TYPE_ADAPTER 1
2890 #define IO_TYPE_CONTROLLER 2
2891 #define IO_TYPE_DEVICE 3
2892 #define IO_TYPE_DRIVER 4
2893 #define IO_TYPE_FILE 5
2894 #define IO_TYPE_IRP 6
2895 #define IO_TYPE_MASTER_ADAPTER 7
2896 #define IO_TYPE_OPEN_PACKET 8
2897 #define IO_TYPE_TIMER 9
2898 #define IO_TYPE_VPB 10
2899 #define IO_TYPE_ERROR_LOG 11
2900 #define IO_TYPE_ERROR_MESSAGE 12
2901 #define IO_TYPE_DEVICE_OBJECT_EXTENSION 13
2903 #define IO_TYPE_CSQ_IRP_CONTEXT 1
2904 #define IO_TYPE_CSQ 2
2908 typedef struct _IO_CSQ_IRP_CONTEXT
{
2911 struct _IO_CSQ
*Csq
;
2912 } IO_CSQ_IRP_CONTEXT
, *PIO_CSQ_IRP_CONTEXT
;
2915 (DDKAPI
*PIO_CSQ_INSERT_IRP
)(
2916 IN
struct _IO_CSQ
*Csq
,
2920 (DDKAPI
*PIO_CSQ_REMOVE_IRP
)(
2921 IN
struct _IO_CSQ
*Csq
,
2925 (DDKAPI
*PIO_CSQ_PEEK_NEXT_IRP
)(
2926 IN
struct _IO_CSQ
*Csq
,
2928 IN PVOID PeekContext
);
2931 (DDKAPI
*PIO_CSQ_ACQUIRE_LOCK
)(
2932 IN
struct _IO_CSQ
*Csq
,
2936 (DDKAPI
*PIO_CSQ_RELEASE_LOCK
)(
2937 IN
struct _IO_CSQ
*Csq
,
2941 (DDKAPI
*PIO_CSQ_COMPLETE_CANCELED_IRP
)(
2942 IN
struct _IO_CSQ
*Csq
,
2945 typedef struct _IO_CSQ
{
2947 PIO_CSQ_INSERT_IRP CsqInsertIrp
;
2948 PIO_CSQ_REMOVE_IRP CsqRemoveIrp
;
2949 PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp
;
2950 PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock
;
2951 PIO_CSQ_RELEASE_LOCK CsqReleaseLock
;
2952 PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp
;
2953 PVOID ReservePointer
;
2956 #if !defined(_ALPHA_)
2957 #include <pshpack4.h>
2959 typedef struct _IO_STACK_LOCATION
{
2960 UCHAR MajorFunction
;
2961 UCHAR MinorFunction
;
2966 PIO_SECURITY_CONTEXT SecurityContext
;
2968 USHORT POINTER_ALIGNMENT FileAttributes
;
2970 ULONG POINTER_ALIGNMENT EaLength
;
2974 ULONG POINTER_ALIGNMENT Key
;
2975 LARGE_INTEGER ByteOffset
;
2979 ULONG POINTER_ALIGNMENT Key
;
2980 LARGE_INTEGER ByteOffset
;
2984 PUNICODE_STRING FileName
;
2985 FILE_INFORMATION_CLASS FileInformationClass
;
2990 ULONG CompletionFilter
;
2994 FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass
;
2998 FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass
;
2999 PFILE_OBJECT FileObject
;
3000 _ANONYMOUS_UNION
union {
3001 _ANONYMOUS_STRUCT
struct {
3002 BOOLEAN ReplaceIfExists
;
3003 BOOLEAN AdvanceOnly
;
3006 HANDLE DeleteHandle
;
3020 FS_INFORMATION_CLASS POINTER_ALIGNMENT FsInformationClass
;
3024 FS_INFORMATION_CLASS FsInformationClass
;
3027 ULONG OutputBufferLength
;
3028 ULONG InputBufferLength
;
3029 ULONG FsControlCode
;
3030 PVOID Type3InputBuffer
;
3031 } FileSystemControl
;
3033 PLARGE_INTEGER Length
;
3035 LARGE_INTEGER ByteOffset
;
3038 ULONG OutputBufferLength
;
3039 ULONG POINTER_ALIGNMENT InputBufferLength
;
3040 ULONG POINTER_ALIGNMENT IoControlCode
;
3041 PVOID Type3InputBuffer
;
3044 SECURITY_INFORMATION SecurityInformation
;
3045 ULONG POINTER_ALIGNMENT Length
;
3048 SECURITY_INFORMATION SecurityInformation
;
3049 PSECURITY_DESCRIPTOR SecurityDescriptor
;
3053 PDEVICE_OBJECT DeviceObject
;
3057 PDEVICE_OBJECT DeviceObject
;
3060 struct _SCSI_REQUEST_BLOCK
*Srb
;
3065 struct _FILE_GET_QUOTA_INFORMATION
*SidList
;
3066 ULONG SidListLength
;
3072 DEVICE_RELATION_TYPE Type
;
3073 } QueryDeviceRelations
;
3075 CONST GUID
*InterfaceType
;
3078 PINTERFACE Interface
;
3079 PVOID InterfaceSpecificData
;
3082 PDEVICE_CAPABILITIES Capabilities
;
3083 } DeviceCapabilities
;
3085 PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList
;
3086 } FilterResourceRequirements
;
3091 ULONG POINTER_ALIGNMENT Length
;
3097 BUS_QUERY_ID_TYPE IdType
;
3100 DEVICE_TEXT_TYPE DeviceTextType
;
3101 LCID POINTER_ALIGNMENT LocaleId
;
3105 BOOLEAN Reserved
[3];
3106 DEVICE_USAGE_NOTIFICATION_TYPE POINTER_ALIGNMENT Type
;
3107 } UsageNotification
;
3109 SYSTEM_POWER_STATE PowerState
;
3112 PPOWER_SEQUENCE PowerSequence
;
3115 ULONG SystemContext
;
3116 POWER_STATE_TYPE POINTER_ALIGNMENT Type
;
3117 POWER_STATE POINTER_ALIGNMENT State
;
3118 POWER_ACTION POINTER_ALIGNMENT ShutdownType
;
3121 PCM_RESOURCE_LIST AllocatedResources
;
3122 PCM_RESOURCE_LIST AllocatedResourcesTranslated
;
3125 ULONG_PTR ProviderId
;
3137 PDEVICE_OBJECT DeviceObject
;
3138 PFILE_OBJECT FileObject
;
3139 PIO_COMPLETION_ROUTINE CompletionRoutine
;
3141 } IO_STACK_LOCATION
, *PIO_STACK_LOCATION
;
3142 #if !defined(_ALPHA_)
3143 #include <poppack.h>
3146 /* IO_STACK_LOCATION.Control */
3148 #define SL_PENDING_RETURNED 0x01
3149 #define SL_ERROR_RETURNED 0x02
3150 #define SL_INVOKE_ON_CANCEL 0x20
3151 #define SL_INVOKE_ON_SUCCESS 0x40
3152 #define SL_INVOKE_ON_ERROR 0x80
3154 /* IO_STACK_LOCATION.Parameters.ReadWriteControl.WhichSpace */
3156 #define PCI_WHICHSPACE_CONFIG 0x0
3157 #define PCI_WHICHSPACE_ROM 0x52696350 /* 'PciR' */
3159 typedef enum _KEY_INFORMATION_CLASS
{
3160 KeyBasicInformation
,
3164 KeyCachedInformation
,
3166 } KEY_INFORMATION_CLASS
;
3168 typedef struct _KEY_BASIC_INFORMATION
{
3169 LARGE_INTEGER LastWriteTime
;
3173 } KEY_BASIC_INFORMATION
, *PKEY_BASIC_INFORMATION
;
3175 typedef struct _KEY_FULL_INFORMATION
{
3176 LARGE_INTEGER LastWriteTime
;
3184 ULONG MaxValueNameLen
;
3185 ULONG MaxValueDataLen
;
3187 } KEY_FULL_INFORMATION
, *PKEY_FULL_INFORMATION
;
3189 typedef struct _KEY_NODE_INFORMATION
{
3190 LARGE_INTEGER LastWriteTime
;
3196 } KEY_NODE_INFORMATION
, *PKEY_NODE_INFORMATION
;
3198 typedef struct _KEY_VALUE_BASIC_INFORMATION
{
3203 } KEY_VALUE_BASIC_INFORMATION
, *PKEY_VALUE_BASIC_INFORMATION
;
3205 typedef struct _KEY_VALUE_FULL_INFORMATION
{
3212 } KEY_VALUE_FULL_INFORMATION
, *PKEY_VALUE_FULL_INFORMATION
;
3214 typedef struct _KEY_VALUE_PARTIAL_INFORMATION
{
3219 } KEY_VALUE_PARTIAL_INFORMATION
, *PKEY_VALUE_PARTIAL_INFORMATION
;
3221 typedef struct _KEY_VALUE_PARTIAL_INFORMATION_ALIGN64
{
3225 } KEY_VALUE_PARTIAL_INFORMATION_ALIGN64
, *PKEY_VALUE_PARTIAL_INFORMATION_ALIGN64
;
3227 typedef struct _KEY_VALUE_ENTRY
{
3228 PUNICODE_STRING ValueName
;
3232 } KEY_VALUE_ENTRY
, *PKEY_VALUE_ENTRY
;
3234 typedef enum _KEY_VALUE_INFORMATION_CLASS
{
3235 KeyValueBasicInformation
,
3236 KeyValueFullInformation
,
3237 KeyValuePartialInformation
,
3238 KeyValueFullInformationAlign64
,
3239 KeyValuePartialInformationAlign64
3240 } KEY_VALUE_INFORMATION_CLASS
;
3242 typedef struct _KEY_WRITE_TIME_INFORMATION
{
3243 LARGE_INTEGER LastWriteTime
;
3244 } KEY_WRITE_TIME_INFORMATION
, *PKEY_WRITE_TIME_INFORMATION
;
3246 typedef struct _KEY_USER_FLAGS_INFORMATION
{
3248 } KEY_USER_FLAGS_INFORMATION
, *PKEY_USER_FLAGS_INFORMATION
;
3250 typedef enum _KEY_SET_INFORMATION_CLASS
{
3251 KeyWriteTimeInformation
,
3252 KeyUserFlagsInformation
,
3254 } KEY_SET_INFORMATION_CLASS
;
3256 /* KEY_VALUE_Xxx.Type */
3260 #define REG_EXPAND_SZ 2
3261 #define REG_BINARY 3
3263 #define REG_DWORD_LITTLE_ENDIAN 4
3264 #define REG_DWORD_BIG_ENDIAN 5
3266 #define REG_MULTI_SZ 7
3267 #define REG_RESOURCE_LIST 8
3268 #define REG_FULL_RESOURCE_DESCRIPTOR 9
3269 #define REG_RESOURCE_REQUIREMENTS_LIST 10
3270 #define REG_QWORD 11
3271 #define REG_QWORD_LITTLE_ENDIAN 11
3273 #define PCI_TYPE0_ADDRESSES 6
3274 #define PCI_TYPE1_ADDRESSES 2
3275 #define PCI_TYPE2_ADDRESSES 5
3277 typedef struct _PCI_COMMON_CONFIG
{
3286 UCHAR CacheLineSize
;
3291 struct _PCI_HEADER_TYPE_0
{
3292 ULONG BaseAddresses
[PCI_TYPE0_ADDRESSES
];
3296 ULONG ROMBaseAddress
;
3297 UCHAR CapabilitiesPtr
;
3300 UCHAR InterruptLine
;
3303 UCHAR MaximumLatency
;
3305 struct _PCI_HEADER_TYPE_1
{
3306 ULONG BaseAddresses
[PCI_TYPE1_ADDRESSES
];
3309 UCHAR SubordinateBus
;
3310 UCHAR SecondaryLatency
;
3313 USHORT SecondaryStatus
;
3316 USHORT PrefetchBase
;
3317 USHORT PrefetchLimit
;
3318 ULONG PrefetchBaseUpper32
;
3319 ULONG PrefetchLimitUpper32
;
3320 USHORT IOBaseUpper16
;
3321 USHORT IOLimitUpper16
;
3322 UCHAR CapabilitiesPtr
;
3324 ULONG ROMBaseAddress
;
3325 UCHAR InterruptLine
;
3327 USHORT BridgeControl
;
3329 struct _PCI_HEADER_TYPE_2
{
3330 ULONG SocketRegistersBaseAddress
;
3331 UCHAR CapabilitiesPtr
;
3333 USHORT SecondaryStatus
;
3336 UCHAR SubordinateBus
;
3337 UCHAR SecondaryLatency
;
3341 } Range
[PCI_TYPE2_ADDRESSES
- 1];
3342 UCHAR InterruptLine
;
3344 USHORT BridgeControl
;
3347 UCHAR DeviceSpecific
[192];
3348 } PCI_COMMON_CONFIG
, *PPCI_COMMON_CONFIG
;
3350 /* PCI_COMMON_CONFIG.Command */
3352 #define PCI_ENABLE_IO_SPACE 0x0001
3353 #define PCI_ENABLE_MEMORY_SPACE 0x0002
3354 #define PCI_ENABLE_BUS_MASTER 0x0004
3355 #define PCI_ENABLE_SPECIAL_CYCLES 0x0008
3356 #define PCI_ENABLE_WRITE_AND_INVALIDATE 0x0010
3357 #define PCI_ENABLE_VGA_COMPATIBLE_PALETTE 0x0020
3358 #define PCI_ENABLE_PARITY 0x0040
3359 #define PCI_ENABLE_WAIT_CYCLE 0x0080
3360 #define PCI_ENABLE_SERR 0x0100
3361 #define PCI_ENABLE_FAST_BACK_TO_BACK 0x0200
3363 /* PCI_COMMON_CONFIG.Status */
3365 #define PCI_STATUS_CAPABILITIES_LIST 0x0010
3366 #define PCI_STATUS_66MHZ_CAPABLE 0x0020
3367 #define PCI_STATUS_UDF_SUPPORTED 0x0040
3368 #define PCI_STATUS_FAST_BACK_TO_BACK 0x0080
3369 #define PCI_STATUS_DATA_PARITY_DETECTED 0x0100
3370 #define PCI_STATUS_DEVSEL 0x0600
3371 #define PCI_STATUS_SIGNALED_TARGET_ABORT 0x0800
3372 #define PCI_STATUS_RECEIVED_TARGET_ABORT 0x1000
3373 #define PCI_STATUS_RECEIVED_MASTER_ABORT 0x2000
3374 #define PCI_STATUS_SIGNALED_SYSTEM_ERROR 0x4000
3375 #define PCI_STATUS_DETECTED_PARITY_ERROR 0x8000
3377 /* PCI_COMMON_CONFIG.HeaderType */
3379 #define PCI_MULTIFUNCTION 0x80
3380 #define PCI_DEVICE_TYPE 0x00
3381 #define PCI_BRIDGE_TYPE 0x01
3382 #define PCI_CARDBUS_BRIDGE_TYPE 0x02
3384 #define PCI_CONFIGURATION_TYPE(PciData) \
3385 (((PPCI_COMMON_CONFIG) (PciData))->HeaderType & ~PCI_MULTIFUNCTION)
3387 #define PCI_MULTIFUNCTION_DEVICE(PciData) \
3388 ((((PPCI_COMMON_CONFIG) (PciData))->HeaderType & PCI_MULTIFUNCTION) != 0)
3390 /* PCI device classes */
3392 #define PCI_CLASS_PRE_20 0x00
3393 #define PCI_CLASS_MASS_STORAGE_CTLR 0x01
3394 #define PCI_CLASS_NETWORK_CTLR 0x02
3395 #define PCI_CLASS_DISPLAY_CTLR 0x03
3396 #define PCI_CLASS_MULTIMEDIA_DEV 0x04
3397 #define PCI_CLASS_MEMORY_CTLR 0x05
3398 #define PCI_CLASS_BRIDGE_DEV 0x06
3399 #define PCI_CLASS_SIMPLE_COMMS_CTLR 0x07
3400 #define PCI_CLASS_BASE_SYSTEM_DEV 0x08
3401 #define PCI_CLASS_INPUT_DEV 0x09
3402 #define PCI_CLASS_DOCKING_STATION 0x0a
3403 #define PCI_CLASS_PROCESSOR 0x0b
3404 #define PCI_CLASS_SERIAL_BUS_CTLR 0x0c
3406 /* PCI device subclasses for class 0 */
3408 #define PCI_SUBCLASS_PRE_20_NON_VGA 0x00
3409 #define PCI_SUBCLASS_PRE_20_VGA 0x01
3411 /* PCI device subclasses for class 1 (mass storage controllers)*/
3413 #define PCI_SUBCLASS_MSC_SCSI_BUS_CTLR 0x00
3414 #define PCI_SUBCLASS_MSC_IDE_CTLR 0x01
3415 #define PCI_SUBCLASS_MSC_FLOPPY_CTLR 0x02
3416 #define PCI_SUBCLASS_MSC_IPI_CTLR 0x03
3417 #define PCI_SUBCLASS_MSC_RAID_CTLR 0x04
3418 #define PCI_SUBCLASS_MSC_OTHER 0x80
3420 /* PCI device subclasses for class 2 (network controllers)*/
3422 #define PCI_SUBCLASS_NET_ETHERNET_CTLR 0x00
3423 #define PCI_SUBCLASS_NET_TOKEN_RING_CTLR 0x01
3424 #define PCI_SUBCLASS_NET_FDDI_CTLR 0x02
3425 #define PCI_SUBCLASS_NET_ATM_CTLR 0x03
3426 #define PCI_SUBCLASS_NET_OTHER 0x80
3428 /* PCI device subclasses for class 3 (display controllers)*/
3430 #define PCI_SUBCLASS_VID_VGA_CTLR 0x00
3431 #define PCI_SUBCLASS_VID_XGA_CTLR 0x01
3432 #define PCI_SUBCLASS_VID_3D_CTLR 0x02
3433 #define PCI_SUBCLASS_VID_OTHER 0x80
3435 /* PCI device subclasses for class 4 (multimedia device)*/
3437 #define PCI_SUBCLASS_MM_VIDEO_DEV 0x00
3438 #define PCI_SUBCLASS_MM_AUDIO_DEV 0x01
3439 #define PCI_SUBCLASS_MM_TELEPHONY_DEV 0x02
3440 #define PCI_SUBCLASS_MM_OTHER 0x80
3442 /* PCI device subclasses for class 5 (memory controller)*/
3444 #define PCI_SUBCLASS_MEM_RAM 0x00
3445 #define PCI_SUBCLASS_MEM_FLASH 0x01
3446 #define PCI_SUBCLASS_MEM_OTHER 0x80
3448 /* PCI device subclasses for class 6 (bridge device)*/
3450 #define PCI_SUBCLASS_BR_HOST 0x00
3451 #define PCI_SUBCLASS_BR_ISA 0x01
3452 #define PCI_SUBCLASS_BR_EISA 0x02
3453 #define PCI_SUBCLASS_BR_MCA 0x03
3454 #define PCI_SUBCLASS_BR_PCI_TO_PCI 0x04
3455 #define PCI_SUBCLASS_BR_PCMCIA 0x05
3456 #define PCI_SUBCLASS_BR_NUBUS 0x06
3457 #define PCI_SUBCLASS_BR_CARDBUS 0x07
3458 #define PCI_SUBCLASS_BR_OTHER 0x80
3460 /* PCI device subclasses for class C (serial bus controller)*/
3462 #define PCI_SUBCLASS_SB_IEEE1394 0x00
3463 #define PCI_SUBCLASS_SB_ACCESS 0x01
3464 #define PCI_SUBCLASS_SB_SSA 0x02
3465 #define PCI_SUBCLASS_SB_USB 0x03
3466 #define PCI_SUBCLASS_SB_FIBRE_CHANNEL 0x04
3467 #define PCI_SUBCLASS_SB_SMBUS 0x05
3469 #define PCI_MAX_DEVICES 32
3470 #define PCI_MAX_FUNCTION 8
3471 #define PCI_MAX_BRIDGE_NUMBER 0xFF
3472 #define PCI_INVALID_VENDORID 0xFFFF
3473 #define PCI_COMMON_HDR_LENGTH (FIELD_OFFSET(PCI_COMMON_CONFIG, DeviceSpecific))
3475 #define PCI_ADDRESS_MEMORY_SPACE 0x00000000
3476 #define PCI_ADDRESS_IO_SPACE 0x00000001
3477 #define PCI_ADDRESS_MEMORY_TYPE_MASK 0x00000006
3478 #define PCI_ADDRESS_MEMORY_PREFETCHABLE 0x00000008
3479 #define PCI_ADDRESS_IO_ADDRESS_MASK 0xfffffffc
3480 #define PCI_ADDRESS_MEMORY_ADDRESS_MASK 0xfffffff0
3481 #define PCI_ADDRESS_ROM_ADDRESS_MASK 0xfffff800
3483 #define PCI_TYPE_32BIT 0
3484 #define PCI_TYPE_20BIT 2
3485 #define PCI_TYPE_64BIT 4
3487 typedef struct _PCI_SLOT_NUMBER
{
3490 ULONG DeviceNumber
: 5;
3491 ULONG FunctionNumber
: 3;
3492 ULONG Reserved
: 24;
3496 } PCI_SLOT_NUMBER
, *PPCI_SLOT_NUMBER
;
3498 #define POOL_COLD_ALLOCATION 256
3499 #define POOL_QUOTA_FAIL_INSTEAD_OF_RAISE 8
3500 #define POOL_RAISE_IF_ALLOCATION_FAILURE 16
3502 typedef struct _OSVERSIONINFOA
{
3503 ULONG dwOSVersionInfoSize
;
3504 ULONG dwMajorVersion
;
3505 ULONG dwMinorVersion
;
3506 ULONG dwBuildNumber
;
3508 CHAR szCSDVersion
[128];
3509 } OSVERSIONINFOA
, *POSVERSIONINFOA
, *LPOSVERSIONINFOA
;
3511 typedef struct _OSVERSIONINFOW
{
3512 ULONG dwOSVersionInfoSize
;
3513 ULONG dwMajorVersion
;
3514 ULONG dwMinorVersion
;
3515 ULONG dwBuildNumber
;
3517 WCHAR szCSDVersion
[128];
3518 } OSVERSIONINFOW
, *POSVERSIONINFOW
, *LPOSVERSIONINFOW
, RTL_OSVERSIONINFOW
, *PRTL_OSVERSIONINFOW
;
3521 typedef OSVERSIONINFOW OSVERSIONINFO
;
3522 typedef POSVERSIONINFOW POSVERSIONINFO
;
3523 typedef LPOSVERSIONINFOW LPOSVERSIONINFO
;
3525 typedef OSVERSIONINFOA OSVERSIONINFO
;
3526 typedef POSVERSIONINFOA POSVERSIONINFO
;
3527 typedef LPOSVERSIONINFOA LPOSVERSIONINFO
;
3530 typedef struct _OSVERSIONINFOEXA
{
3531 ULONG dwOSVersionInfoSize
;
3532 ULONG dwMajorVersion
;
3533 ULONG dwMinorVersion
;
3534 ULONG dwBuildNumber
;
3536 CHAR szCSDVersion
[128];
3537 USHORT wServicePackMajor
;
3538 USHORT wServicePackMinor
;
3542 } OSVERSIONINFOEXA
, *POSVERSIONINFOEXA
, *LPOSVERSIONINFOEXA
;
3544 typedef struct _OSVERSIONINFOEXW
{
3545 ULONG dwOSVersionInfoSize
;
3546 ULONG dwMajorVersion
;
3547 ULONG dwMinorVersion
;
3548 ULONG dwBuildNumber
;
3550 WCHAR szCSDVersion
[128];
3551 USHORT wServicePackMajor
;
3552 USHORT wServicePackMinor
;
3556 } OSVERSIONINFOEXW
, *POSVERSIONINFOEXW
, *LPOSVERSIONINFOEXW
, RTL_OSVERSIONINFOEXW
, *PRTL_OSVERSIONINFOEXW
;
3559 typedef OSVERSIONINFOEXW OSVERSIONINFOEX
;
3560 typedef POSVERSIONINFOEXW POSVERSIONINFOEX
;
3561 typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX
;
3563 typedef OSVERSIONINFOEXA OSVERSIONINFOEX
;
3564 typedef POSVERSIONINFOEXA POSVERSIONINFOEX
;
3565 typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX
;
3571 VerSetConditionMask(
3572 IN ULONGLONG ConditionMask
,
3574 IN UCHAR Condition
);
3576 #define VER_SET_CONDITION(ConditionMask, TypeBitMask, ComparisonType) \
3577 ((ConditionMask) = VerSetConditionMask((ConditionMask), \
3578 (TypeBitMask), (ComparisonType)))
3580 /* RtlVerifyVersionInfo() TypeMask */
3582 #define VER_MINORVERSION 0x0000001
3583 #define VER_MAJORVERSION 0x0000002
3584 #define VER_BUILDNUMBER 0x0000004
3585 #define VER_PLATFORMID 0x0000008
3586 #define VER_SERVICEPACKMINOR 0x0000010
3587 #define VER_SERVICEPACKMAJOR 0x0000020
3588 #define VER_SUITENAME 0x0000040
3589 #define VER_PRODUCT_TYPE 0x0000080
3591 /* RtlVerifyVersionInfo() ComparisonType */
3594 #define VER_GREATER 2
3595 #define VER_GREATER_EQUAL 3
3597 #define VER_LESS_EQUAL 5
3601 #define VER_CONDITION_MASK 7
3602 #define VER_NUM_BITS_PER_CONDITION_MASK 3
3607 (NTAPI
*PRTL_CONFLICT_RANGE_CALLBACK
) (
3609 struct _RTL_RANGE
*Range
3612 typedef enum _EVENT_TYPE
{
3614 SynchronizationEvent
3617 typedef enum _KWAIT_REASON
{
3655 typedef struct _KWAIT_BLOCK
{
3656 LIST_ENTRY WaitListEntry
;
3657 struct _KTHREAD
* RESTRICTED_POINTER Thread
;
3659 struct _KWAIT_BLOCK
* RESTRICTED_POINTER NextWaitBlock
;
3663 } KWAIT_BLOCK
, *PKWAIT_BLOCK
, *RESTRICTED_POINTER PRKWAIT_BLOCK
;
3665 typedef struct _IO_REMOVE_LOCK_TRACKING_BLOCK
* PIO_REMOVE_LOCK_TRACKING_BLOCK
;
3667 typedef struct _IO_REMOVE_LOCK_COMMON_BLOCK
{
3669 BOOLEAN Reserved
[3];
3670 volatile LONG IoCount
;
3672 } IO_REMOVE_LOCK_COMMON_BLOCK
;
3674 typedef struct _IO_REMOVE_LOCK_DBG_BLOCK
{
3677 LONGLONG MaxLockedTicks
;
3679 LIST_ENTRY LockList
;
3681 volatile LONG LowMemoryCount
;
3684 PIO_REMOVE_LOCK_TRACKING_BLOCK Blocks
;
3685 } IO_REMOVE_LOCK_DBG_BLOCK
;
3687 typedef struct _IO_REMOVE_LOCK
{
3688 IO_REMOVE_LOCK_COMMON_BLOCK Common
;
3690 IO_REMOVE_LOCK_DBG_BLOCK Dbg
;
3692 } IO_REMOVE_LOCK
, *PIO_REMOVE_LOCK
;
3694 typedef struct _IO_WORKITEM
*PIO_WORKITEM
;
3697 (DDKAPI IO_WORKITEM_ROUTINE
)(
3698 IN PDEVICE_OBJECT DeviceObject
,
3700 typedef IO_WORKITEM_ROUTINE
*PIO_WORKITEM_ROUTINE
;
3702 typedef struct _SHARE_ACCESS
{
3710 } SHARE_ACCESS
, *PSHARE_ACCESS
;
3712 typedef enum _KINTERRUPT_MODE
{
3717 #define THREAD_WAIT_OBJECTS 3
3720 (DDKAPI
*PKINTERRUPT_ROUTINE
)(
3723 typedef enum _CREATE_FILE_TYPE
{
3725 CreateFileTypeNamedPipe
,
3726 CreateFileTypeMailslot
3729 typedef struct _CONFIGURATION_INFORMATION
{
3734 ULONG ScsiPortCount
;
3736 ULONG ParallelCount
;
3737 BOOLEAN AtDiskPrimaryAddressClaimed
;
3738 BOOLEAN AtDiskSecondaryAddressClaimed
;
3740 ULONG MediumChangerCount
;
3741 } CONFIGURATION_INFORMATION
, *PCONFIGURATION_INFORMATION
;
3743 typedef enum _CONFIGURATION_TYPE
{
3746 FloatingPointProcessor
,
3756 MultiFunctionAdapter
,
3770 FloppyDiskPeripheral
,
3783 RealModeIrqRoutingTable
,
3784 RealModePCIEnumeration
,
3786 } CONFIGURATION_TYPE
, *PCONFIGURATION_TYPE
;
3788 #define IO_FORCE_ACCESS_CHECK 0x001
3789 #define IO_NO_PARAMETER_CHECKING 0x100
3791 #define IO_REPARSE 0x0
3792 #define IO_REMOUNT 0x1
3795 (DDKAPI
*PIO_QUERY_DEVICE_ROUTINE
)(
3797 IN PUNICODE_STRING PathName
,
3798 IN INTERFACE_TYPE BusType
,
3800 IN PKEY_VALUE_FULL_INFORMATION
*BusInformation
,
3801 IN CONFIGURATION_TYPE ControllerType
,
3802 IN ULONG ControllerNumber
,
3803 IN PKEY_VALUE_FULL_INFORMATION
*ControllerInformation
,
3804 IN CONFIGURATION_TYPE PeripheralType
,
3805 IN ULONG PeripheralNumber
,
3806 IN PKEY_VALUE_FULL_INFORMATION
*PeripheralInformation
);
3808 typedef enum _IO_QUERY_DEVICE_DATA_FORMAT
{
3809 IoQueryDeviceIdentifier
= 0,
3810 IoQueryDeviceConfigurationData
,
3811 IoQueryDeviceComponentInformation
,
3812 IoQueryDeviceMaxData
3813 } IO_QUERY_DEVICE_DATA_FORMAT
, *PIO_QUERY_DEVICE_DATA_FORMAT
;
3815 typedef enum _KBUGCHECK_CALLBACK_REASON
{
3817 KbCallbackReserved1
,
3818 KbCallbackSecondaryDumpData
,
3820 } KBUGCHECK_CALLBACK_REASON
;
3822 struct _KBUGCHECK_REASON_CALLBACK_RECORD
;
3825 (DDKAPI
*PKBUGCHECK_REASON_CALLBACK_ROUTINE
)(
3826 IN KBUGCHECK_CALLBACK_REASON Reason
,
3827 IN
struct _KBUGCHECK_REASON_CALLBACK_RECORD
*Record
,
3828 IN OUT PVOID ReasonSpecificData
,
3829 IN ULONG ReasonSpecificDataLength
);
3831 typedef struct _KBUGCHECK_REASON_CALLBACK_RECORD
{
3833 PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine
;
3836 KBUGCHECK_CALLBACK_REASON Reason
;
3838 } KBUGCHECK_REASON_CALLBACK_RECORD
, *PKBUGCHECK_REASON_CALLBACK_RECORD
;
3840 typedef enum _KBUGCHECK_BUFFER_DUMP_STATE
{
3846 } KBUGCHECK_BUFFER_DUMP_STATE
;
3849 (DDKAPI
*PKBUGCHECK_CALLBACK_ROUTINE
)(
3853 typedef struct _KBUGCHECK_CALLBACK_RECORD
{
3855 PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine
;
3861 } KBUGCHECK_CALLBACK_RECORD
, *PKBUGCHECK_CALLBACK_RECORD
;
3864 (DDKAPI
*PNMI_CALLBACK
)(
3866 IN BOOLEAN Handled
);
3870 * KeInitializeCallbackRecord(
3871 * IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord)
3873 #define KeInitializeCallbackRecord(CallbackRecord) \
3874 CallbackRecord->State = BufferEmpty;
3876 typedef enum _KDPC_IMPORTANCE
{
3882 typedef enum _MEMORY_CACHING_TYPE_ORIG
{
3883 MmFrameBufferCached
= 2
3884 } MEMORY_CACHING_TYPE_ORIG
;
3886 typedef enum _MEMORY_CACHING_TYPE
{
3887 MmNonCached
= FALSE
,
3889 MmWriteCombined
= MmFrameBufferCached
,
3890 MmHardwareCoherentCached
,
3891 MmNonCachedUnordered
,
3894 } MEMORY_CACHING_TYPE
;
3896 typedef enum _MM_PAGE_PRIORITY
{
3898 NormalPagePriority
= 16,
3899 HighPagePriority
= 32
3902 typedef enum _LOCK_OPERATION
{
3908 #define FLUSH_MULTIPLE_MAXIMUM 32
3910 typedef enum _MM_SYSTEM_SIZE
{
3916 typedef struct _OBJECT_HANDLE_INFORMATION
{
3917 ULONG HandleAttributes
;
3918 ACCESS_MASK GrantedAccess
;
3919 } OBJECT_HANDLE_INFORMATION
, *POBJECT_HANDLE_INFORMATION
;
3921 typedef struct _CLIENT_ID
{
3922 HANDLE UniqueProcess
;
3923 HANDLE UniqueThread
;
3924 } CLIENT_ID
, *PCLIENT_ID
;
3927 (DDKAPI
*PKSTART_ROUTINE
)(
3928 IN PVOID StartContext
);
3931 (DDKAPI
*PCREATE_PROCESS_NOTIFY_ROUTINE
)(
3933 IN HANDLE ProcessId
,
3937 (DDKAPI
*PCREATE_THREAD_NOTIFY_ROUTINE
)(
3938 IN HANDLE ProcessId
,
3942 typedef struct _IMAGE_INFO
{
3943 _ANONYMOUS_UNION
union {
3945 _ANONYMOUS_STRUCT
struct {
3946 ULONG ImageAddressingMode
: 8;
3947 ULONG SystemModeImage
: 1;
3948 ULONG ImageMappedToAllPids
: 1;
3949 ULONG Reserved
: 22;
3953 ULONG ImageSelector
;
3955 ULONG ImageSectionNumber
;
3956 } IMAGE_INFO
, *PIMAGE_INFO
;
3958 #define IMAGE_ADDRESSING_MODE_32BIT 3
3961 (DDKAPI
*PLOAD_IMAGE_NOTIFY_ROUTINE
)(
3962 IN PUNICODE_STRING FullImageName
,
3963 IN HANDLE ProcessId
,
3964 IN PIMAGE_INFO ImageInfo
);
3966 #pragma pack(push,4)
3967 typedef enum _BUS_DATA_TYPE
{
3968 ConfigurationSpaceUndefined
= -1,
3976 PCMCIAConfiguration
,
3979 PNPISAConfiguration
,
3980 SgiInternalConfiguration
,
3982 } BUS_DATA_TYPE
, *PBUS_DATA_TYPE
;
3985 typedef struct _NT_TIB
{
3986 struct _EXCEPTION_REGISTRATION_RECORD
*ExceptionList
;
3990 _ANONYMOUS_UNION
union {
3994 PVOID ArbitraryUserPointer
;
3995 struct _NT_TIB
*Self
;
3998 typedef struct _NT_TIB32
{
3999 ULONG ExceptionList
;
4003 __GNU_EXTENSION
union {
4007 ULONG ArbitraryUserPointer
;
4009 } NT_TIB32
,*PNT_TIB32
;
4011 typedef struct _NT_TIB64
{
4012 ULONG64 ExceptionList
;
4015 ULONG64 SubSystemTib
;
4016 __GNU_EXTENSION
union {
4020 ULONG64 ArbitraryUserPointer
;
4022 } NT_TIB64
,*PNT_TIB64
;
4024 typedef enum _PROCESSINFOCLASS
{
4025 ProcessBasicInformation
,
4030 ProcessBasePriority
,
4031 ProcessRaisePriority
,
4033 ProcessExceptionPort
,
4035 ProcessLdtInformation
,
4037 ProcessDefaultHardErrorMode
,
4038 ProcessIoPortHandlers
,
4039 ProcessPooledUsageAndLimits
,
4040 ProcessWorkingSetWatch
,
4041 ProcessUserModeIOPL
,
4042 ProcessEnableAlignmentFaultFixup
,
4043 ProcessPriorityClass
,
4044 ProcessWx86Information
,
4046 ProcessAffinityMask
,
4047 ProcessPriorityBoost
,
4049 ProcessSessionInformation
,
4050 ProcessForegroundInformation
,
4051 ProcessWow64Information
,
4052 ProcessImageFileName
,
4053 ProcessLUIDDeviceMapsEnabled
,
4054 ProcessBreakOnTermination
,
4055 ProcessDebugObjectHandle
,
4057 ProcessHandleTracing
,
4059 ProcessExecuteFlags
,
4060 ProcessTlsInformation
,
4062 ProcessImageInformation
,
4064 ProcessPagePriority
,
4065 ProcessInstrumentationCallback
,
4069 typedef enum _THREADINFOCLASS
{
4070 ThreadBasicInformation
,
4075 ThreadImpersonationToken
,
4076 ThreadDescriptorTableEntry
,
4077 ThreadEnableAlignmentFaultFixup
,
4078 ThreadEventPair_Reusable
,
4079 ThreadQuerySetWin32StartAddress
,
4081 ThreadPerformanceCount
,
4082 ThreadAmILastThread
,
4083 ThreadIdealProcessor
,
4084 ThreadPriorityBoost
,
4085 ThreadSetTlsArrayAddress
,
4087 ThreadHideFromDebugger
,
4088 ThreadBreakOnTermination
,
4089 ThreadSwitchLegacyState
,
4091 ThreadLastSystemCall
,
4095 ThreadActualBasePriority
,
4099 typedef struct _PROCESS_BASIC_INFORMATION
4101 NTSTATUS ExitStatus
;
4102 struct _PEB
*PebBaseAddress
;
4103 ULONG_PTR AffinityMask
;
4104 KPRIORITY BasePriority
;
4105 ULONG_PTR UniqueProcessId
;
4106 ULONG_PTR InheritedFromUniqueProcessId
;
4107 } PROCESS_BASIC_INFORMATION
,*PPROCESS_BASIC_INFORMATION
;
4109 typedef struct _PROCESS_WS_WATCH_INFORMATION
4113 } PROCESS_WS_WATCH_INFORMATION
, *PPROCESS_WS_WATCH_INFORMATION
;
4115 typedef struct _PROCESS_DEVICEMAP_INFORMATION
4117 __GNU_EXTENSION
union
4121 HANDLE DirectoryHandle
;
4126 UCHAR DriveType
[32];
4129 } PROCESS_DEVICEMAP_INFORMATION
, *PPROCESS_DEVICEMAP_INFORMATION
;
4131 typedef struct _KERNEL_USER_TIMES
4133 LARGE_INTEGER CreateTime
;
4134 LARGE_INTEGER ExitTime
;
4135 LARGE_INTEGER KernelTime
;
4136 LARGE_INTEGER UserTime
;
4137 } KERNEL_USER_TIMES
, *PKERNEL_USER_TIMES
;
4139 typedef struct _PROCESS_ACCESS_TOKEN
4143 } PROCESS_ACCESS_TOKEN
, *PPROCESS_ACCESS_TOKEN
;
4145 typedef struct _PROCESS_SESSION_INFORMATION
4148 } PROCESS_SESSION_INFORMATION
, *PPROCESS_SESSION_INFORMATION
;
4151 (DDKAPI
*PREQUEST_POWER_COMPLETE
)(
4152 IN PDEVICE_OBJECT DeviceObject
,
4153 IN UCHAR MinorFunction
,
4154 IN POWER_STATE PowerState
,
4156 IN PIO_STATUS_BLOCK IoStatus
);
4158 typedef enum _TRACE_INFORMATION_CLASS
{
4161 TraceEnableFlagsClass
,
4162 TraceEnableLevelClass
,
4163 GlobalLoggerHandleClass
,
4164 EventLoggerHandleClass
,
4165 AllLoggerHandlesClass
,
4166 TraceHandleByNameClass
4167 } TRACE_INFORMATION_CLASS
;
4169 typedef enum _REG_NOTIFY_CLASS
4172 RegNtPreDeleteKey
= RegNtDeleteKey
,
4174 RegNtPreSetValueKey
= RegNtSetValueKey
,
4175 RegNtDeleteValueKey
,
4176 RegNtPreDeleteValueKey
= RegNtDeleteValueKey
,
4177 RegNtSetInformationKey
,
4178 RegNtPreSetInformationKey
= RegNtSetInformationKey
,
4180 RegNtPreRenameKey
= RegNtRenameKey
,
4182 RegNtPreEnumerateKey
= RegNtEnumerateKey
,
4183 RegNtEnumerateValueKey
,
4184 RegNtPreEnumerateValueKey
= RegNtEnumerateValueKey
,
4186 RegNtPreQueryKey
= RegNtQueryKey
,
4188 RegNtPreQueryValueKey
= RegNtQueryValueKey
,
4189 RegNtQueryMultipleValueKey
,
4190 RegNtPreQueryMultipleValueKey
= RegNtQueryMultipleValueKey
,
4195 RegNtKeyHandleClose
,
4196 RegNtPreKeyHandleClose
= RegNtKeyHandleClose
,
4198 RegNtPostSetValueKey
,
4199 RegNtPostDeleteValueKey
,
4200 RegNtPostSetInformationKey
,
4202 RegNtPostEnumerateKey
,
4203 RegNtPostEnumerateValueKey
,
4205 RegNtPostQueryValueKey
,
4206 RegNtPostQueryMultipleValueKey
,
4207 RegNtPostKeyHandleClose
,
4208 RegNtPreCreateKeyEx
,
4209 RegNtPostCreateKeyEx
,
4212 } REG_NOTIFY_CLASS
, *PREG_NOTIFY_CLASS
;
4215 (NTAPI
*PEX_CALLBACK_FUNCTION
)(
4216 IN PVOID CallbackContext
,
4221 typedef struct _REG_DELETE_KEY_INFORMATION
4224 } REG_DELETE_KEY_INFORMATION
, *PREG_DELETE_KEY_INFORMATION
;
4226 typedef struct _REG_SET_VALUE_KEY_INFORMATION
4229 PUNICODE_STRING ValueName
;
4234 } REG_SET_VALUE_KEY_INFORMATION
, *PREG_SET_VALUE_KEY_INFORMATION
;
4236 typedef struct _REG_DELETE_VALUE_KEY_INFORMATION
4239 PUNICODE_STRING ValueName
;
4240 } REG_DELETE_VALUE_KEY_INFORMATION
, *PREG_DELETE_VALUE_KEY_INFORMATION
;
4242 typedef struct _REG_SET_INFORMATION_KEY_INFORMATION
4245 KEY_SET_INFORMATION_CLASS KeySetInformationClass
;
4246 PVOID KeySetInformation
;
4247 ULONG KeySetInformationLength
;
4248 } REG_SET_INFORMATION_KEY_INFORMATION
, *PREG_SET_INFORMATION_KEY_INFORMATION
;
4250 typedef struct _REG_ENUMERATE_KEY_INFORMATION
4254 KEY_INFORMATION_CLASS KeyInformationClass
;
4255 PVOID KeyInformation
;
4257 PULONG ResultLength
;
4258 } REG_ENUMERATE_KEY_INFORMATION
, *PREG_ENUMERATE_KEY_INFORMATION
;
4260 typedef struct _REG_ENUMERATE_VALUE_KEY_INFORMATION
4264 KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
;
4265 PVOID KeyValueInformation
;
4267 PULONG ResultLength
;
4268 } REG_ENUMERATE_VALUE_KEY_INFORMATION
, *PREG_ENUMERATE_VALUE_KEY_INFORMATION
;
4270 typedef struct _REG_QUERY_KEY_INFORMATION
4273 KEY_INFORMATION_CLASS KeyInformationClass
;
4274 PVOID KeyInformation
;
4276 PULONG ResultLength
;
4277 } REG_QUERY_KEY_INFORMATION
, *PREG_QUERY_KEY_INFORMATION
;
4279 typedef struct _REG_QUERY_VALUE_KEY_INFORMATION
4282 PUNICODE_STRING ValueName
;
4283 KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
;
4284 PVOID KeyValueInformation
;
4286 PULONG ResultLength
;
4287 } REG_QUERY_VALUE_KEY_INFORMATION
, *PREG_QUERY_VALUE_KEY_INFORMATION
;
4289 typedef struct _REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION
4292 PKEY_VALUE_ENTRY ValueEntries
;
4295 PULONG BufferLength
;
4296 PULONG RequiredBufferLength
;
4297 } REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION
, *PREG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION
;
4299 typedef struct _REG_PRE_CREATE_KEY_INFORMATION
4301 PUNICODE_STRING CompleteName
;
4302 } REG_PRE_CREATE_KEY_INFORMATION
, *PREG_PRE_CREATE_KEY_INFORMATION
;
4304 typedef struct _REG_POST_CREATE_KEY_INFORMATION
4306 PUNICODE_STRING CompleteName
;
4309 } REG_POST_CREATE_KEY_INFORMATION
, *PREG_POST_CREATE_KEY_INFORMATION
;
4311 typedef struct _REG_PRE_OPEN_KEY_INFORMATION
4313 PUNICODE_STRING CompleteName
;
4314 } REG_PRE_OPEN_KEY_INFORMATION
, *PREG_PRE_OPEN_KEY_INFORMATION
;
4316 typedef struct _REG_POST_OPEN_KEY_INFORMATION
4318 PUNICODE_STRING CompleteName
;
4321 } REG_POST_OPEN_KEY_INFORMATION
, *PREG_POST_OPEN_KEY_INFORMATION
;
4323 typedef struct _REG_POST_OPERATION_INFORMATION
4327 } REG_POST_OPERATION_INFORMATION
,*PREG_POST_OPERATION_INFORMATION
;
4329 typedef struct _REG_KEY_HANDLE_CLOSE_INFORMATION
4332 } REG_KEY_HANDLE_CLOSE_INFORMATION
, *PREG_KEY_HANDLE_CLOSE_INFORMATION
;
4335 ** Storage structures
4337 typedef enum _PARTITION_STYLE
{
4338 PARTITION_STYLE_MBR
,
4339 PARTITION_STYLE_GPT
,
4343 typedef struct _CREATE_DISK_MBR
{
4345 } CREATE_DISK_MBR
, *PCREATE_DISK_MBR
;
4347 typedef struct _CREATE_DISK_GPT
{
4349 ULONG MaxPartitionCount
;
4350 } CREATE_DISK_GPT
, *PCREATE_DISK_GPT
;
4352 typedef struct _CREATE_DISK
{
4353 PARTITION_STYLE PartitionStyle
;
4354 _ANONYMOUS_UNION
union {
4355 CREATE_DISK_MBR Mbr
;
4356 CREATE_DISK_GPT Gpt
;
4358 } CREATE_DISK
, *PCREATE_DISK
;
4360 typedef struct _DISK_SIGNATURE
{
4361 ULONG PartitionStyle
;
4362 _ANONYMOUS_UNION
union {
4371 } DISK_SIGNATURE
, *PDISK_SIGNATURE
;
4374 (FASTCALL
*PTIME_UPDATE_NOTIFY_ROUTINE
)(
4376 IN KPROCESSOR_MODE Mode
);
4378 #define DBG_STATUS_CONTROL_C 1
4379 #define DBG_STATUS_SYSRQ 2
4380 #define DBG_STATUS_BUGCHECK_FIRST 3
4381 #define DBG_STATUS_BUGCHECK_SECOND 4
4382 #define DBG_STATUS_FATAL 5
4383 #define DBG_STATUS_DEBUG_CONTROL 6
4384 #define DBG_STATUS_WORKER 7
4386 typedef struct _PHYSICAL_MEMORY_RANGE
{
4387 PHYSICAL_ADDRESS BaseAddress
;
4388 LARGE_INTEGER NumberOfBytes
;
4389 } PHYSICAL_MEMORY_RANGE
, *PPHYSICAL_MEMORY_RANGE
;
4392 (NTAPI
*PDRIVER_VERIFIER_THUNK_ROUTINE
)(
4395 typedef struct _DRIVER_VERIFIER_THUNK_PAIRS
{
4396 PDRIVER_VERIFIER_THUNK_ROUTINE PristineRoutine
;
4397 PDRIVER_VERIFIER_THUNK_ROUTINE NewRoutine
;
4398 } DRIVER_VERIFIER_THUNK_PAIRS
, *PDRIVER_VERIFIER_THUNK_PAIRS
;
4400 #define DRIVER_VERIFIER_SPECIAL_POOLING 0x0001
4401 #define DRIVER_VERIFIER_FORCE_IRQL_CHECKING 0x0002
4402 #define DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES 0x0004
4403 #define DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS 0x0008
4404 #define DRIVER_VERIFIER_IO_CHECKING 0x0010
4406 #define HASH_STRING_ALGORITHM_DEFAULT 0
4407 #define HASH_STRING_ALGORITHM_X65599 1
4408 #define HASH_STRING_ALGORITHM_INVALID 0xffffffff
4411 (DDKAPI
*PTIMER_APC_ROUTINE
)(
4412 IN PVOID TimerContext
,
4413 IN ULONG TimerLowValue
,
4414 IN LONG TimerHighValue
);
4423 (DDKAPI
*WMI_NOTIFICATION_CALLBACK
)(
4429 ** Architecture specific structures
4431 #define PCR_MINOR_VERSION 1
4432 #define PCR_MAJOR_VERSION 1
4436 #define SIZE_OF_80387_REGISTERS 80
4437 #define CONTEXT_i386 0x10000
4438 #define CONTEXT_i486 0x10000
4439 #define CONTEXT_CONTROL (CONTEXT_i386|0x00000001L)
4440 #define CONTEXT_INTEGER (CONTEXT_i386|0x00000002L)
4441 #define CONTEXT_SEGMENTS (CONTEXT_i386|0x00000004L)
4442 #define CONTEXT_FLOATING_POINT (CONTEXT_i386|0x00000008L)
4443 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386|0x00000010L)
4444 #define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386|0x00000020L)
4445 #define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS)
4446 #define MAXIMUM_SUPPORTED_EXTENSION 512
4448 typedef struct _FLOATING_SAVE_AREA
{
4453 ULONG ErrorSelector
;
4456 UCHAR RegisterArea
[SIZE_OF_80387_REGISTERS
];
4458 } FLOATING_SAVE_AREA
, *PFLOATING_SAVE_AREA
;
4460 typedef struct _CONTEXT
{
4468 FLOATING_SAVE_AREA FloatSave
;
4485 UCHAR ExtendedRegisters
[MAXIMUM_SUPPORTED_EXTENSION
];
4489 // Used to contain PFNs and PFN counts
4491 typedef ULONG PFN_COUNT
;
4492 typedef ULONG PFN_NUMBER
, *PPFN_NUMBER
;
4493 typedef LONG SPFN_NUMBER
, *PSPFN_NUMBER
;
4495 #define PASSIVE_LEVEL 0
4498 #define DISPATCH_LEVEL 2
4499 #define PROFILE_LEVEL 27
4500 #define CLOCK1_LEVEL 28
4501 #define CLOCK2_LEVEL 28
4502 #define IPI_LEVEL 29
4503 #define POWER_LEVEL 30
4504 #define HIGH_LEVEL 31
4506 typedef struct _KPCR_TIB
{
4507 PVOID ExceptionList
; /* 00 */
4508 PVOID StackBase
; /* 04 */
4509 PVOID StackLimit
; /* 08 */
4510 PVOID SubSystemTib
; /* 0C */
4511 _ANONYMOUS_UNION
union {
4512 PVOID FiberData
; /* 10 */
4513 ULONG Version
; /* 10 */
4515 PVOID ArbitraryUserPointer
; /* 14 */
4516 struct _KPCR_TIB
*Self
; /* 18 */
4517 } KPCR_TIB
, *PKPCR_TIB
; /* 1C */
4519 typedef struct _KPCR
{
4520 KPCR_TIB Tib
; /* 00 */
4521 struct _KPCR
*Self
; /* 1C */
4522 struct _KPRCB
*Prcb
; /* 20 */
4523 KIRQL Irql
; /* 24 */
4525 ULONG IrrActive
; /* 2C */
4527 PVOID KdVersionBlock
; /* 34 */
4528 PUSHORT IDT
; /* 38 */
4529 PUSHORT GDT
; /* 3C */
4530 struct _KTSS
*TSS
; /* 40 */
4531 USHORT MajorVersion
; /* 44 */
4532 USHORT MinorVersion
; /* 46 */
4533 KAFFINITY SetMember
; /* 48 */
4534 ULONG StallScaleFactor
; /* 4C */
4535 UCHAR SpareUnused
; /* 50 */
4536 UCHAR Number
; /* 51 */
4538 UCHAR SecondLevelCacheAssociativity
;
4540 ULONG KernelReserved
[14]; // For use by the kernel
4541 ULONG SecondLevelCacheSize
;
4542 ULONG HalReserved
[16]; // For use by Hal
4543 } KPCR
, *PKPCR
; /* 54 */
4545 #define KeGetPcr() PCR
4547 typedef struct _KFLOATING_SAVE
{
4551 ULONG ErrorSelector
;
4556 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
4560 KeGetCurrentProcessorNumber(VOID
)
4562 return (ULONG
)__readfsbyte(FIELD_OFFSET(KPCR
, Number
));
4577 #define KI_USER_SHARED_DATA 0xffdf0000
4579 #define PAGE_SIZE 0x1000
4580 #define PAGE_SHIFT 12L
4582 #define SharedUserData ((KUSER_SHARED_DATA * CONST) KI_USER_SHARED_DATA)
4584 extern NTKERNELAPI PVOID MmHighestUserAddress
;
4585 extern NTKERNELAPI PVOID MmSystemRangeStart
;
4586 extern NTKERNELAPI ULONG_PTR MmUserProbeAddress
;
4588 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
4589 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
4590 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
4591 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
4592 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0C00000
4594 #define MM_KSEG0_BASE MM_SYSTEM_RANGE_START
4595 #define MM_SYSTEM_SPACE_END 0xFFFFFFFF
4597 #elif defined(__x86_64__)
4599 #define CONTEXT_AMD64 0x100000
4600 #if !defined(RC_INVOKED)
4601 #define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x1L)
4602 #define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x2L)
4603 #define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x4L)
4604 #define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x8L)
4605 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x10L)
4607 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
4608 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
4610 #define CONTEXT_EXCEPTION_ACTIVE 0x8000000
4611 #define CONTEXT_SERVICE_ACTIVE 0x10000000
4612 #define CONTEXT_EXCEPTION_REQUEST 0x40000000
4613 #define CONTEXT_EXCEPTION_REPORTING 0x80000000
4616 typedef struct DECLSPEC_ALIGN(16) _M128A
{
4621 typedef struct _XMM_SAVE_AREA32
{
4628 USHORT ErrorSelector
;
4631 USHORT DataSelector
;
4635 M128A FloatRegisters
[8];
4636 M128A XmmRegisters
[16];
4637 UCHAR Reserved4
[96];
4638 } XMM_SAVE_AREA32
, *PXMM_SAVE_AREA32
;
4640 typedef struct DECLSPEC_ALIGN(16) _CONTEXT
{
4690 /* Floating point */
4692 XMM_SAVE_AREA32 FltSave
;
4716 M128A VectorRegister
[26];
4717 ULONG64 VectorControl
;
4720 ULONG64 DebugControl
;
4721 ULONG64 LastBranchToRip
;
4722 ULONG64 LastBranchFromRip
;
4723 ULONG64 LastExceptionToRip
;
4724 ULONG64 LastExceptionFromRip
;
4728 // Used to contain PFNs and PFN counts
4730 typedef ULONG PFN_COUNT
;
4731 typedef ULONG64 PFN_NUMBER
, *PPFN_NUMBER
;
4732 typedef LONG64 SPFN_NUMBER
, *PSPFN_NUMBER
;
4734 #define PASSIVE_LEVEL 0
4737 #define DISPATCH_LEVEL 2
4738 #define CLOCK_LEVEL 13
4739 #define IPI_LEVEL 14
4740 #define POWER_LEVEL 14
4741 #define PROFILE_LEVEL 15
4742 #define HIGH_LEVEL 15
4744 #define PAGE_SIZE 0x1000
4745 #define PAGE_SHIFT 12L
4746 #define PTI_SHIFT 12L
4747 #define PDI_SHIFT 21L
4748 #define PPI_SHIFT 30L
4749 #define PXI_SHIFT 39L
4750 #define PTE_PER_PAGE 512
4751 #define PDE_PER_PAGE 512
4752 #define PPE_PER_PAGE 512
4753 #define PXE_PER_PAGE 512
4754 #define PTI_MASK_AMD64 (PTE_PER_PAGE - 1)
4755 #define PDI_MASK_AMD64 (PDE_PER_PAGE - 1)
4756 #define PPI_MASK (PPE_PER_PAGE - 1)
4757 #define PXI_MASK (PXE_PER_PAGE - 1)
4759 #define PXE_BASE 0xFFFFF6FB7DBED000ULL
4760 #define PXE_SELFMAP 0xFFFFF6FB7DBEDF68ULL
4761 #define PPE_BASE 0xFFFFF6FB7DA00000ULL
4762 #define PDE_BASE 0xFFFFF6FB40000000ULL
4763 #define PTE_BASE 0xFFFFF68000000000ULL
4764 #define PXE_TOP 0xFFFFF6FB7DBEDFFFULL
4765 #define PPE_TOP 0xFFFFF6FB7DBFFFFFULL
4766 #define PDE_TOP 0xFFFFF6FB7FFFFFFFULL
4767 #define PTE_TOP 0xFFFFF6FFFFFFFFFFULL
4769 extern NTKERNELAPI PVOID MmHighestUserAddress
;
4770 extern NTKERNELAPI PVOID MmSystemRangeStart
;
4771 extern NTKERNELAPI ULONG_PTR MmUserProbeAddress
;
4773 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
4774 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
4775 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
4776 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
4777 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xFFFF080000000000ULL
4778 #define KI_USER_SHARED_DATA 0xFFFFF78000000000ULL
4780 #define SharedUserData ((PKUSER_SHARED_DATA const)KI_USER_SHARED_DATA)
4781 #define SharedInterruptTime (&SharedUserData->InterruptTime)
4782 #define SharedSystemTime (&SharedUserData->SystemTime)
4783 #define SharedTickCount (&SharedUserData->TickCount)
4785 #define KeQueryInterruptTime() \
4786 (*(volatile ULONG64*)SharedInterruptTime)
4787 #define KeQuerySystemTime(CurrentCount) \
4788 *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedSystemTime
4789 #define KeQueryTickCount(CurrentCount) \
4790 *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedTickCount
4792 typedef struct _KPCR
4794 __GNU_EXTENSION
union
4797 __GNU_EXTENSION
struct
4799 union _KGDTENTRY64
*GdtBase
;
4800 struct _KTSS64
*TssBase
;
4803 struct _KPRCB
*CurrentPrcb
;
4804 PKSPIN_LOCK_QUEUE LockArray
;
4808 union _KIDTENTRY64
*IdtBase
;
4811 UCHAR SecondLevelCacheAssociativity
;
4812 UCHAR ObsoleteNumber
;
4815 USHORT MajorVersion
;
4816 USHORT MinorVersion
;
4817 ULONG StallScaleFactor
;
4819 ULONG KernelReserved
[15];
4820 ULONG SecondLevelCacheSize
;
4821 ULONG HalReserved
[16];
4823 PVOID KdVersionBlock
;
4825 ULONG PcrAlign1
[24];
4828 typedef struct _KFLOATING_SAVE
{
4830 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
4842 return (PKPCR
)__readgsqword(FIELD_OFFSET(KPCR
, Self
));
4847 KeGetCurrentProcessorNumber(VOID
)
4849 return (ULONG
)__readgsword(0x184);
4852 #elif defined(__PowerPC__)
4855 // Used to contain PFNs and PFN counts
4857 typedef ULONG PFN_COUNT
;
4858 typedef ULONG PFN_NUMBER
, *PPFN_NUMBER
;
4859 typedef LONG SPFN_NUMBER
, *PSPFN_NUMBER
;
4861 #define PASSIVE_LEVEL 0
4864 #define DISPATCH_LEVEL 2
4865 #define PROFILE_LEVEL 27
4866 #define CLOCK1_LEVEL 28
4867 #define CLOCK2_LEVEL 28
4868 #define IPI_LEVEL 29
4869 #define POWER_LEVEL 30
4870 #define HIGH_LEVEL 31
4872 typedef struct _KFLOATING_SAVE
{
4874 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
4876 typedef struct _KPCR_TIB
{
4877 PVOID ExceptionList
; /* 00 */
4878 PVOID StackBase
; /* 04 */
4879 PVOID StackLimit
; /* 08 */
4880 PVOID SubSystemTib
; /* 0C */
4881 _ANONYMOUS_UNION
union {
4882 PVOID FiberData
; /* 10 */
4883 ULONG Version
; /* 10 */
4885 PVOID ArbitraryUserPointer
; /* 14 */
4886 struct _KPCR_TIB
*Self
; /* 18 */
4887 } KPCR_TIB
, *PKPCR_TIB
; /* 1C */
4889 #define PCR_MINOR_VERSION 1
4890 #define PCR_MAJOR_VERSION 1
4892 typedef struct _KPCR
{
4893 KPCR_TIB Tib
; /* 00 */
4894 struct _KPCR
*Self
; /* 1C */
4895 struct _KPRCB
*Prcb
; /* 20 */
4896 KIRQL Irql
; /* 24 */
4898 ULONG IrrActive
; /* 2C */
4900 PVOID KdVersionBlock
; /* 34 */
4901 PUSHORT IDT
; /* 38 */
4902 PUSHORT GDT
; /* 3C */
4903 struct _KTSS
*TSS
; /* 40 */
4904 USHORT MajorVersion
; /* 44 */
4905 USHORT MinorVersion
; /* 46 */
4906 KAFFINITY SetMember
; /* 48 */
4907 ULONG StallScaleFactor
; /* 4C */
4908 UCHAR SpareUnused
; /* 50 */
4909 UCHAR Number
; /* 51 */
4910 } KPCR
, *PKPCR
; /* 54 */
4912 #define KeGetPcr() PCR
4917 KeGetCurrentProcessorNumber(VOID
)
4920 __asm__
__volatile__ (
4923 : "i" (FIELD_OFFSET(KPCR
, Number
))
4928 #elif defined(_MIPS_)
4930 #error MIPS Headers are totally incorrect
4933 // Used to contain PFNs and PFN counts
4935 typedef ULONG PFN_COUNT
;
4936 typedef ULONG PFN_NUMBER
, *PPFN_NUMBER
;
4937 typedef LONG SPFN_NUMBER
, *PSPFN_NUMBER
;
4939 #define PASSIVE_LEVEL 0
4941 #define DISPATCH_LEVEL 2
4942 #define PROFILE_LEVEL 27
4943 #define IPI_LEVEL 29
4944 #define HIGH_LEVEL 31
4946 typedef struct _KPCR
{
4947 struct _KPRCB
*Prcb
; /* 20 */
4948 KIRQL Irql
; /* 24 */
4953 #define KeGetPcr() PCR
4955 typedef struct _KFLOATING_SAVE
{
4956 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
4961 KeGetCurrentProcessorNumber(VOID
)
4966 #elif defined(_M_ARM)
4969 // NT-ARM is not documented, need DDK-ARM
4974 #error Unknown architecture
4977 #define MM_DONT_ZERO_ALLOCATION 0x00000001
4978 #define MM_ALLOCATE_FROM_LOCAL_NODE_ONLY 0x00000002
4981 #define EFLAG_SIGN 0x8000
4982 #define EFLAG_ZERO 0x4000
4983 #define EFLAG_SELECT (EFLAG_SIGN | EFLAG_ZERO)
4985 #define RESULT_NEGATIVE ((EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
4986 #define RESULT_ZERO ((~EFLAG_SIGN & EFLAG_ZERO) & EFLAG_SELECT)
4987 #define RESULT_POSITIVE ((~EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
4989 typedef enum _INTERLOCKED_RESULT
{
4990 ResultNegative
= RESULT_NEGATIVE
,
4991 ResultZero
= RESULT_ZERO
,
4992 ResultPositive
= RESULT_POSITIVE
4993 } INTERLOCKED_RESULT
;
4996 (NTAPI
*PciPin2Line
)(
4997 IN
struct _BUS_HANDLER
*BusHandler
,
4998 IN
struct _BUS_HANDLER
*RootHandler
,
4999 IN PCI_SLOT_NUMBER SlotNumber
,
5000 IN PPCI_COMMON_CONFIG PciData
5004 (NTAPI
*PciLine2Pin
)(
5005 IN
struct _BUS_HANDLER
*BusHandler
,
5006 IN
struct _BUS_HANDLER
*RootHandler
,
5007 IN PCI_SLOT_NUMBER SlotNumber
,
5008 IN PPCI_COMMON_CONFIG PciNewData
,
5009 IN PPCI_COMMON_CONFIG PciOldData
5013 (NTAPI
*PciReadWriteConfig
)(
5014 IN
struct _BUS_HANDLER
*BusHandler
,
5015 IN PCI_SLOT_NUMBER Slot
,
5021 #define PCI_DATA_TAG ' ICP'
5022 #define PCI_DATA_VERSION 1
5024 typedef struct _PCIBUSDATA
5028 PciReadWriteConfig ReadConfig
;
5029 PciReadWriteConfig WriteConfig
;
5030 PciPin2Line Pin2Line
;
5031 PciLine2Pin Line2Pin
;
5032 PCI_SLOT_NUMBER ParentSlot
;
5034 } PCIBUSDATA
, *PPCIBUSDATA
;
5037 /** SPINLOCK FUNCTIONS ********************************************************/
5042 KeTryToAcquireSpinLockAtDpcLevel(
5043 IN OUT PKSPIN_LOCK SpinLock
5050 IN PKSPIN_LOCK SpinLock
5055 #if defined(WIN9X_COMPAT_SPINLOCK)
5060 KeInitializeSpinLock(
5061 IN PKSPIN_LOCK SpinLock
5068 KeInitializeSpinLock(IN PKSPIN_LOCK SpinLock
)
5070 /* Clear the lock */
5080 IN PKSPIN_LOCK SpinLock
);
5086 IN PKSPIN_LOCK SpinLock
,
5092 KefAcquireSpinLockAtDpcLevel(
5093 IN PKSPIN_LOCK SpinLock
);
5098 KefReleaseSpinLockFromDpcLevel(
5099 IN PKSPIN_LOCK SpinLock
);
5101 #define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock)
5102 #define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock)
5103 #define KeAcquireSpinLock(a,b) *(b) = KfAcquireSpinLock(a)
5104 #define KeReleaseSpinLock(a,b) KfReleaseSpinLock(a,b)
5106 #define KeGetDcacheFillSize() 1L
5108 #elif defined(_M_ARM) // !defined (_X86_)
5112 KeInitializeSpinLock(IN PKSPIN_LOCK SpinLock
)
5114 /* Clear the lock */
5122 IN PKSPIN_LOCK SpinLock
);
5128 IN PKSPIN_LOCK SpinLock
,
5135 KefAcquireSpinLockAtDpcLevel(
5136 IN PKSPIN_LOCK SpinLock
);
5141 KefReleaseSpinLockFromDpcLevel(
5142 IN PKSPIN_LOCK SpinLock
);
5145 #define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock)
5146 #define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock)
5147 #define KeAcquireSpinLock(a,b) *(b) = KfAcquireSpinLock(a)
5148 #define KeReleaseSpinLock(a,b) KfReleaseSpinLock(a,b)
5153 KeInitializeSpinLock(
5154 IN PKSPIN_LOCK SpinLock
);
5161 KeInitializeSpinLock(
5162 PKSPIN_LOCK SpinLock
)
5170 IN PKSPIN_LOCK SpinLock
,
5175 KeAcquireSpinLockAtDpcLevel(
5176 IN PKSPIN_LOCK SpinLock
);
5180 KeReleaseSpinLockFromDpcLevel(
5181 IN PKSPIN_LOCK SpinLock
);
5185 KeAcquireSpinLockRaiseToDpc(
5186 IN PKSPIN_LOCK SpinLock
);
5188 #define KeAcquireSpinLock(SpinLock, OldIrql) \
5189 *(OldIrql) = KeAcquireSpinLockRaiseToDpc(SpinLock)
5191 #endif // !defined (_X86_)
5194 ** Utillity functions
5197 #define ARGUMENT_PRESENT(ArgumentPointer) \
5198 ((CHAR*)((ULONG_PTR)(ArgumentPointer)) != (CHAR*)NULL)
5205 #define BYTE_OFFSET(Va) \
5206 ((ULONG) ((ULONG_PTR) (Va) & (PAGE_SIZE - 1)))
5213 #define BYTES_TO_PAGES(Size) \
5214 ((ULONG) ((ULONG_PTR) (Size) >> PAGE_SHIFT) + (((ULONG) (Size) & (PAGE_SIZE - 1)) != 0))
5221 #define PAGE_ALIGN(Va) \
5222 ((PVOID) ((ULONG_PTR)(Va) & ~(PAGE_SIZE - 1)))
5227 * IN ULONG_PTR Size)
5229 #define ROUND_TO_PAGES(Size) \
5230 ((ULONG_PTR) (((ULONG_PTR) Size + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1)))
5234 #if defined(_X86_) || defined(_AMD64_)
5237 // x86 and x64 performs a 0x2C interrupt
5239 #define DbgRaiseAssertionFailure __int2c
5241 #elif defined(_ARM_)
5248 #error Unsupported Architecture
5253 #define ASSERT(exp) \
5255 RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, NULL ), FALSE : TRUE)
5257 #define ASSERTMSG(msg, exp) \
5259 RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, msg ), FALSE : TRUE)
5261 #define RTL_SOFT_ASSERT(exp) \
5263 DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n", __FILE__, __LINE__, #exp), FALSE : TRUE)
5265 #define RTL_SOFT_ASSERTMSG(msg, exp) \
5267 DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n Message: %s\n", __FILE__, __LINE__, #exp, (msg)), FALSE : TRUE)
5269 #define RTL_VERIFY(exp) ASSERT(exp)
5270 #define RTL_VERIFYMSG(msg, exp) ASSERT(msg, exp)
5272 #define RTL_SOFT_VERIFY(exp) RTL_SOFT_ASSERT(exp)
5273 #define RTL_SOFT_VERIFYMSG(msg, exp) RTL_SOFT_ASSERTMSG(msg, exp)
5275 #if defined(_MSC_VER)
5277 #define NT_ASSERT(exp) \
5279 (__annotation(L"Debug", L"AssertFail", L#exp), \
5280 DbgRaiseAssertionFailure(), FALSE) : TRUE)
5282 #define NT_ASSERTMSG(msg, exp) \
5284 (__annotation(L"Debug", L"AssertFail", L##msg), \
5285 DbgRaiseAssertionFailure(), FALSE) : TRUE)
5287 #define NT_ASSERTMSGW(msg, exp) \
5289 (__annotation(L"Debug", L"AssertFail", msg), \
5290 DbgRaiseAssertionFailure(), FALSE) : TRUE)
5295 // GCC doesn't support __annotation (nor PDB)
5297 #define NT_ASSERT(exp) \
5298 (VOID)((!(exp)) ? (DbgRaiseAssertionFailure(), FALSE) : TRUE)
5300 #define NT_ASSERTMSG NT_ASSERT
5301 #define NT_ASSERTMSGW NT_ASSERT
5307 #define ASSERT(exp) ((VOID) 0)
5308 #define ASSERTMSG(msg, exp) ((VOID) 0)
5310 #define RTL_SOFT_ASSERT(exp) ((VOID) 0)
5311 #define RTL_SOFT_ASSERTMSG(msg, exp) ((VOID) 0)
5313 #define RTL_VERIFY(exp) ((exp) ? TRUE : FALSE)
5314 #define RTL_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE)
5316 #define RTL_SOFT_VERIFY(exp) ((exp) ? TRUE : FALSE)
5317 #define RTL_SOFT_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE)
5319 #define NT_ASSERT(exp) ((VOID)0)
5320 #define NT_ASSERTMSG(exp) ((VOID)0)
5321 #define NT_ASSERTMSGW(exp) ((VOID)0)
5325 /* HACK HACK HACK - GCC (or perhaps LD) is messing this up */
5326 #if defined(_NTSYSTEM_) || defined(__GNUC__)
5327 #define NLS_MB_CODE_PAGE_TAG NlsMbCodePageTag
5328 #define NLS_MB_OEM_CODE_PAGE_TAG NlsMbOemCodePageTag
5330 #define NLS_MB_CODE_PAGE_TAG (*NlsMbCodePageTag)
5331 #define NLS_MB_OEM_CODE_PAGE_TAG (*NlsMbOemCodePageTag)
5332 #endif /* _NT_SYSTEM */
5334 extern BOOLEAN NTSYSAPI NLS_MB_CODE_PAGE_TAG
;
5335 extern BOOLEAN NTSYSAPI NLS_MB_OEM_CODE_PAGE_TAG
;
5338 ** Driver support routines
5341 /** Runtime library routines **/
5343 static __inline VOID
5345 IN PLIST_ENTRY ListHead
)
5347 ListHead
->Flink
= ListHead
->Blink
= ListHead
;
5350 static __inline VOID
5352 IN PLIST_ENTRY ListHead
,
5353 IN PLIST_ENTRY Entry
)
5355 PLIST_ENTRY OldFlink
;
5356 OldFlink
= ListHead
->Flink
;
5357 Entry
->Flink
= OldFlink
;
5358 Entry
->Blink
= ListHead
;
5359 OldFlink
->Blink
= Entry
;
5360 ListHead
->Flink
= Entry
;
5363 static __inline VOID
5365 IN PLIST_ENTRY ListHead
,
5366 IN PLIST_ENTRY Entry
)
5368 PLIST_ENTRY OldBlink
;
5369 OldBlink
= ListHead
->Blink
;
5370 Entry
->Flink
= ListHead
;
5371 Entry
->Blink
= OldBlink
;
5372 OldBlink
->Flink
= Entry
;
5373 ListHead
->Blink
= Entry
;
5379 * IN PLIST_ENTRY ListHead)
5381 #define IsListEmpty(_ListHead) \
5382 ((_ListHead)->Flink == (_ListHead))
5385 * PSINGLE_LIST_ENTRY
5387 * IN PSINGLE_LIST_ENTRY ListHead)
5389 #define PopEntryList(ListHead) \
5392 PSINGLE_LIST_ENTRY _FirstEntry; \
5393 _FirstEntry = (ListHead)->Next; \
5394 if (_FirstEntry != NULL) \
5395 (ListHead)->Next = _FirstEntry->Next; \
5401 * IN PSINGLE_LIST_ENTRY ListHead,
5402 * IN PSINGLE_LIST_ENTRY Entry)
5404 #define PushEntryList(_ListHead, _Entry) \
5405 (_Entry)->Next = (_ListHead)->Next; \
5406 (_ListHead)->Next = (_Entry); \
5408 static __inline BOOLEAN
5410 IN PLIST_ENTRY Entry
)
5412 PLIST_ENTRY OldFlink
;
5413 PLIST_ENTRY OldBlink
;
5415 OldFlink
= Entry
->Flink
;
5416 OldBlink
= Entry
->Blink
;
5417 OldFlink
->Blink
= OldBlink
;
5418 OldBlink
->Flink
= OldFlink
;
5419 return (BOOLEAN
)(OldFlink
== OldBlink
);
5422 static __inline PLIST_ENTRY
5424 IN PLIST_ENTRY ListHead
)
5429 Entry
= ListHead
->Flink
;
5430 Flink
= Entry
->Flink
;
5431 ListHead
->Flink
= Flink
;
5432 Flink
->Blink
= ListHead
;
5436 static __inline PLIST_ENTRY
5438 IN PLIST_ENTRY ListHead
)
5443 Entry
= ListHead
->Blink
;
5444 Blink
= Entry
->Blink
;
5445 ListHead
->Blink
= Blink
;
5446 Blink
->Flink
= ListHead
;
5455 IN ULONG Base OPTIONAL
,
5456 IN OUT PULONG Value
);
5464 BOOLEAN CaseInSensitive
);
5466 #if !defined(MIDL_PASS)
5471 RtlConvertLongToLuid(
5477 Temp
.QuadPart
= Val
;
5478 Luid
.LowPart
= Temp
.u
.LowPart
;
5479 Luid
.HighPart
= Temp
.u
.HighPart
;
5487 RtlConvertUlongToLuid(
5504 IN VOID UNALIGNED
*Destination
,
5505 IN CONST VOID UNALIGNED
*Source
,
5512 IN OUT PSTRING DestinationString
,
5513 IN PSTRING SourceString OPTIONAL
);
5521 IN BOOLEAN CaseInSensitive
);
5523 #if (defined(_M_AMD64) || defined(_M_IA64)) && !defined(_REALLY_GET_CALLERS_CALLER_)
5524 #define RtlGetCallersAddress(CallersAddress, CallersCaller) \
5525 *CallersAddress = (PVOID)_ReturnAddress(); \
5526 *CallersCaller = NULL;
5531 RtlGetCallersAddress(
5532 OUT PVOID
*CallersAddress
,
5533 OUT PVOID
*CallersCaller
);
5540 IN OUT PRTL_OSVERSIONINFOW lpVersionInformation
);
5546 IN OUT PACCESS_MASK AccessMask
,
5547 IN PGENERIC_MAPPING GenericMapping
);
5552 RtlPrefixUnicodeString(
5553 IN PCUNICODE_STRING String1
,
5554 IN PCUNICODE_STRING String2
,
5555 IN BOOLEAN CaseInSensitive
);
5560 RtlUpcaseUnicodeString(
5561 IN OUT PUNICODE_STRING DestinationString OPTIONAL
,
5562 IN PCUNICODE_STRING SourceString
,
5563 IN BOOLEAN AllocateDestinationString
);
5575 IN OUT PSTRING DestinationString
,
5576 IN PSTRING SourceString
);
5581 RtlVerifyVersionInfo(
5582 IN PRTL_OSVERSIONINFOEXW VersionInfo
,
5584 IN ULONGLONG ConditionMask
);
5589 RtlVolumeDeviceToDosName(
5590 IN PVOID VolumeDeviceObject
,
5591 OUT PUNICODE_STRING DosName
);
5604 KeAreAllApcsDisabled(
5608 /* Guarded Mutex routines */
5613 KeAcquireGuardedMutex(
5614 IN OUT PKGUARDED_MUTEX GuardedMutex
5620 KeAcquireGuardedMutexUnsafe(
5621 IN OUT PKGUARDED_MUTEX GuardedMutex
5627 KeEnterGuardedRegion(
5634 KeLeaveGuardedRegion(
5641 KeInitializeGuardedMutex(
5642 OUT PKGUARDED_MUTEX GuardedMutex
5648 KeReleaseGuardedMutexUnsafe(
5649 IN OUT PKGUARDED_MUTEX GuardedMutex
5655 KeReleaseGuardedMutex(
5656 IN OUT PKGUARDED_MUTEX GuardedMutex
5662 KeTryToAcquireGuardedMutex(
5663 IN OUT PKGUARDED_MUTEX GuardedMutex
5667 #define ExInitializeFastMutex(_FastMutex) \
5669 (_FastMutex)->Count = FM_LOCK_BIT; \
5670 (_FastMutex)->Owner = NULL; \
5671 (_FastMutex)->Contention = 0; \
5672 KeInitializeEvent(&(_FastMutex)->Gate, SynchronizationEvent, FALSE); \
5683 /******************************************************************************
5685 ******************************************************************************/
5687 typedef struct _ZONE_SEGMENT_HEADER
{
5688 SINGLE_LIST_ENTRY SegmentList
;
5690 } ZONE_SEGMENT_HEADER
, *PZONE_SEGMENT_HEADER
;
5692 typedef struct _ZONE_HEADER
{
5693 SINGLE_LIST_ENTRY FreeList
;
5694 SINGLE_LIST_ENTRY SegmentList
;
5696 ULONG TotalSegmentSize
;
5697 } ZONE_HEADER
, *PZONE_HEADER
;
5699 #define PROTECTED_POOL 0x80000000
5701 /******************************************************************************
5702 * Executive Functions *
5703 ******************************************************************************/
5709 IN PZONE_HEADER Zone
,
5711 IN ULONG SegmentSize
);
5713 static __inline PVOID
5715 IN PZONE_HEADER Zone
)
5717 if (Zone
->FreeList
.Next
)
5718 Zone
->FreeList
.Next
= Zone
->FreeList
.Next
->Next
;
5719 return (PVOID
) Zone
->FreeList
.Next
;
5722 static __inline PVOID
5724 IN PZONE_HEADER Zone
,
5727 ((PSINGLE_LIST_ENTRY
) Block
)->Next
= Zone
->FreeList
.Next
;
5728 Zone
->FreeList
.Next
= ((PSINGLE_LIST_ENTRY
) Block
);
5729 return ((PSINGLE_LIST_ENTRY
) Block
)->Next
;
5736 IN PZONE_HEADER Zone
,
5738 IN PVOID InitialSegment
,
5739 IN ULONG InitialSegmentSize
);
5743 * ExInterlockedAllocateFromZone(
5744 * IN PZONE_HEADER Zone,
5745 * IN PKSPIN_LOCK Lock)
5747 #define ExInterlockedAllocateFromZone(Zone, Lock) \
5748 ((PVOID) ExInterlockedPopEntryList(&Zone->FreeList, Lock))
5753 ExInterlockedExtendZone(
5754 IN PZONE_HEADER Zone
,
5756 IN ULONG SegmentSize
,
5757 IN PKSPIN_LOCK Lock
);
5760 * ExInterlockedFreeToZone(
5761 * IN PZONE_HEADER Zone,
5763 * IN PKSPIN_LOCK Lock);
5765 #define ExInterlockedFreeToZone(Zone, Block, Lock) \
5766 ExInterlockedPushEntryList(&(Zone)->FreeList, (PSINGLE_LIST_ENTRY)(Block), Lock)
5770 * InitializeSListHead(
5771 * IN PSLIST_HEADER SListHead)
5773 #define InitializeSListHead(_SListHead) \
5774 (_SListHead)->Alignment = 0
5776 #define ExInitializeSListHead InitializeSListHead
5781 * IN PZONE_HEADER Zone)
5783 #define ExIsFullZone(Zone) \
5784 ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL)
5787 * ExIsObjectInFirstZoneSegment(
5788 * IN PZONE_HEADER Zone,
5791 #define ExIsObjectInFirstZoneSegment(Zone,Object) \
5792 ((BOOLEAN)( ((PUCHAR)(Object) >= (PUCHAR)(Zone)->SegmentList.Next) && \
5793 ((PUCHAR)(Object) < (PUCHAR)(Zone)->SegmentList.Next + \
5794 (Zone)->TotalSegmentSize)) )
5800 ExRaiseAccessViolation(
5807 ExRaiseDatatypeMisalignment(
5816 #define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite
5817 #define ExAcquireResourceShared ExAcquireResourceSharedLite
5818 #define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite
5819 #define ExDeleteResource ExDeleteResourceLite
5820 #define ExInitializeResource ExInitializeResourceLite
5821 #define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite
5822 #define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite
5823 #define ExIsResourceAcquired ExIsResourceAcquiredSharedLite
5824 #define ExReleaseResourceForThread ExReleaseResourceForThreadLite
5829 #define PAGED_CODE() { \
5830 if (KeGetCurrentIrql() > APC_LEVEL) { \
5831 KdPrint( ("NTDDK: Pageable code called at IRQL > APC_LEVEL (%d)\n", KeGetCurrentIrql() )); \
5838 #define PAGED_CODE()
5846 IN CONST VOID
*Address
,
5848 IN ULONG Alignment
);
5856 IN ULONG Alignment
);
5860 /** Configuration manager routines **/
5866 IN PEX_CALLBACK_FUNCTION Function
,
5868 IN OUT PLARGE_INTEGER Cookie
);
5873 CmUnRegisterCallback(
5874 IN LARGE_INTEGER Cookie
);
5878 /** Filesystem runtime library routines **/
5883 FsRtlIsTotalDeviceFailure(
5884 IN NTSTATUS Status
);
5888 /** Hardware abstraction layer routines **/
5894 IN ULONG Frequency
);
5900 IN PDEVICE_OBJECT DeviceObject
,
5901 IN ULONG SectorSize
,
5902 IN ULONG MBRTypeIdentifier
,
5908 PADAPTER_OBJECT AdapterObject
5912 /** Io access routines **/
5914 #if !defined(_M_AMD64)
5918 READ_PORT_BUFFER_UCHAR(
5926 READ_PORT_BUFFER_ULONG(
5934 READ_PORT_BUFFER_USHORT(
5960 READ_REGISTER_BUFFER_UCHAR(
5968 READ_REGISTER_BUFFER_ULONG(
5976 READ_REGISTER_BUFFER_USHORT(
5977 IN PUSHORT Register
,
5984 READ_REGISTER_UCHAR(
5985 IN PUCHAR Register
);
5990 READ_REGISTER_ULONG(
5991 IN PULONG Register
);
5996 READ_REGISTER_USHORT(
5997 IN PUSHORT Register
);
6002 WRITE_PORT_BUFFER_UCHAR(
6010 WRITE_PORT_BUFFER_ULONG(
6018 WRITE_PORT_BUFFER_USHORT(
6047 WRITE_REGISTER_BUFFER_UCHAR(
6055 WRITE_REGISTER_BUFFER_ULONG(
6063 WRITE_REGISTER_BUFFER_USHORT(
6064 IN PUSHORT Register
,
6071 WRITE_REGISTER_UCHAR(
6078 WRITE_REGISTER_ULONG(
6085 WRITE_REGISTER_USHORT(
6086 IN PUSHORT Register
,
6093 READ_PORT_BUFFER_UCHAR(
6098 __inbytestring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
6103 READ_PORT_BUFFER_ULONG(
6108 __indwordstring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
6113 READ_PORT_BUFFER_USHORT(
6118 __inwordstring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
6126 return __inbyte((USHORT
)(ULONG_PTR
)Port
);
6134 return __indword((USHORT
)(ULONG_PTR
)Port
);
6142 return __inword((USHORT
)(ULONG_PTR
)Port
);
6147 READ_REGISTER_BUFFER_UCHAR(
6152 __movsb(Register
, Buffer
, Count
);
6157 READ_REGISTER_BUFFER_ULONG(
6162 __movsd(Register
, Buffer
, Count
);
6167 READ_REGISTER_BUFFER_USHORT(
6168 IN PUSHORT Register
,
6172 __movsw(Register
, Buffer
, Count
);
6177 READ_REGISTER_UCHAR(
6185 READ_REGISTER_ULONG(
6193 READ_REGISTER_USHORT(
6194 IN PUSHORT Register
)
6201 WRITE_PORT_BUFFER_UCHAR(
6206 __outbytestring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
6211 WRITE_PORT_BUFFER_ULONG(
6216 __outdwordstring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
6221 WRITE_PORT_BUFFER_USHORT(
6226 __outwordstring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
6235 __outbyte((USHORT
)(ULONG_PTR
)Port
, Value
);
6244 __outdword((USHORT
)(ULONG_PTR
)Port
, Value
);
6253 __outword((USHORT
)(ULONG_PTR
)Port
, Value
);
6258 WRITE_REGISTER_BUFFER_UCHAR(
6264 __movsb(Register
, Buffer
, Count
);
6265 InterlockedOr(&Synch
, 1);
6270 WRITE_REGISTER_BUFFER_ULONG(
6276 __movsd(Register
, Buffer
, Count
);
6277 InterlockedOr(&Synch
, 1);
6282 WRITE_REGISTER_BUFFER_USHORT(
6283 IN PUSHORT Register
,
6288 __movsw(Register
, Buffer
, Count
);
6289 InterlockedOr(&Synch
, 1);
6294 WRITE_REGISTER_UCHAR(
6300 InterlockedOr(&Synch
, 1);
6305 WRITE_REGISTER_ULONG(
6311 InterlockedOr(&Synch
, 1);
6316 WRITE_REGISTER_USHORT(
6317 IN PUSHORT Register
,
6322 InterlockedOr(&Sync
, 1);
6327 /** I/O manager routines **/
6332 IoAcquireCancelSpinLock(
6338 IoAcquireRemoveLockEx(
6339 IN PIO_REMOVE_LOCK RemoveLock
,
6340 IN OPTIONAL PVOID Tag OPTIONAL
,
6343 IN ULONG RemlockSize
);
6347 * IoAcquireRemoveLock(
6348 * IN PIO_REMOVE_LOCK RemoveLock,
6349 * IN OPTIONAL PVOID Tag)
6351 #define IoAcquireRemoveLock(_RemoveLock, \
6353 IoAcquireRemoveLockEx(_RemoveLock, _Tag, __FILE__, __LINE__, sizeof(IO_REMOVE_LOCK))
6357 * IoAdjustPagingPathCount(
6359 * IN BOOLEAN Increment)
6361 #define IoAdjustPagingPathCount(_Count, \
6366 InterlockedIncrement(_Count); \
6370 InterlockedDecrement(_Count); \
6374 #ifndef DMA_MACROS_DEFINED
6378 IoAllocateAdapterChannel(
6379 IN PADAPTER_OBJECT AdapterObject
,
6380 IN PDEVICE_OBJECT DeviceObject
,
6381 IN ULONG NumberOfMapRegisters
,
6382 IN PDRIVER_CONTROL ExecutionRoutine
,
6389 IoAllocateController(
6390 IN PCONTROLLER_OBJECT ControllerObject
,
6391 IN PDEVICE_OBJECT DeviceObject
,
6392 IN PDRIVER_CONTROL ExecutionRoutine
,
6398 IoAllocateDriverObjectExtension(
6399 IN PDRIVER_OBJECT DriverObject
,
6400 IN PVOID ClientIdentificationAddress
,
6401 IN ULONG DriverObjectExtensionSize
,
6402 OUT PVOID
*DriverObjectExtension
);
6407 IoAllocateErrorLogEntry(
6409 IN UCHAR EntrySize
);
6416 IN BOOLEAN ChargeQuota
);
6422 IN PVOID VirtualAddress
,
6424 IN BOOLEAN SecondaryBuffer
,
6425 IN BOOLEAN ChargeQuota
,
6426 IN OUT PIRP Irp OPTIONAL
);
6432 IN PDEVICE_OBJECT DeviceObject
);
6435 * VOID IoAssignArcName(
6436 * IN PUNICODE_STRING ArcName,
6437 * IN PUNICODE_STRING DeviceName);
6439 #define IoAssignArcName(_ArcName, _DeviceName) ( \
6440 IoCreateSymbolicLink((_ArcName), (_DeviceName)))
6446 IN PDEVICE_OBJECT SourceDevice
,
6447 IN PUNICODE_STRING TargetDevice
,
6448 OUT PDEVICE_OBJECT
*AttachedDevice
);
6453 IoAttachDeviceToDeviceStack(
6454 IN PDEVICE_OBJECT SourceDevice
,
6455 IN PDEVICE_OBJECT TargetDevice
);
6460 IoBuildAsynchronousFsdRequest(
6461 IN ULONG MajorFunction
,
6462 IN PDEVICE_OBJECT DeviceObject
,
6463 IN OUT PVOID Buffer OPTIONAL
,
6464 IN ULONG Length OPTIONAL
,
6465 IN PLARGE_INTEGER StartingOffset OPTIONAL
,
6466 IN PIO_STATUS_BLOCK IoStatusBlock OPTIONAL
);
6471 IoBuildDeviceIoControlRequest(
6472 IN ULONG IoControlCode
,
6473 IN PDEVICE_OBJECT DeviceObject
,
6474 IN PVOID InputBuffer OPTIONAL
,
6475 IN ULONG InputBufferLength
,
6476 OUT PVOID OutputBuffer OPTIONAL
,
6477 IN ULONG OutputBufferLength
,
6478 IN BOOLEAN InternalDeviceIoControl
,
6480 OUT PIO_STATUS_BLOCK IoStatusBlock
);
6487 IN OUT PMDL TargetMdl
,
6488 IN PVOID VirtualAddress
,
6494 IoBuildSynchronousFsdRequest(
6495 IN ULONG MajorFunction
,
6496 IN PDEVICE_OBJECT DeviceObject
,
6497 IN OUT PVOID Buffer OPTIONAL
,
6498 IN ULONG Length OPTIONAL
,
6499 IN PLARGE_INTEGER StartingOffset OPTIONAL
,
6501 OUT PIO_STATUS_BLOCK IoStatusBlock
);
6507 IN PDEVICE_OBJECT DeviceObject
,
6513 * IN PDEVICE_OBJECT DeviceObject,
6516 #define IoCallDriver IofCallDriver
6522 IN PDEVICE_OBJECT DeviceObject
,
6523 IN PFILE_OBJECT FileObject
);
6535 IN ACCESS_MASK DesiredAccess
,
6536 IN ULONG DesiredShareAccess
,
6537 IN OUT PFILE_OBJECT FileObject
,
6538 IN OUT PSHARE_ACCESS ShareAccess
,
6546 IN CCHAR PriorityBoost
);
6550 * IoCompleteRequest(
6552 * IN CCHAR PriorityBoost)
6554 #define IoCompleteRequest IofCompleteRequest
6560 OUT PKINTERRUPT
*InterruptObject
,
6561 IN PKSERVICE_ROUTINE ServiceRoutine
,
6562 IN PVOID ServiceContext
,
6563 IN PKSPIN_LOCK SpinLock OPTIONAL
,
6566 IN KIRQL SynchronizeIrql
,
6567 IN KINTERRUPT_MODE InterruptMode
,
6568 IN BOOLEAN ShareVector
,
6569 IN KAFFINITY ProcessorEnableMask
,
6570 IN BOOLEAN FloatingSave
);
6573 * PIO_STACK_LOCATION
6574 * IoGetCurrentIrpStackLocation(
6577 #define IoGetCurrentIrpStackLocation(_Irp) \
6578 ((_Irp)->Tail.Overlay.CurrentStackLocation)
6581 * PIO_STACK_LOCATION
6582 * IoGetNextIrpStackLocation(
6585 #define IoGetNextIrpStackLocation(_Irp) \
6586 ((_Irp)->Tail.Overlay.CurrentStackLocation - 1)
6590 * IoCopyCurrentIrpStackLocationToNext(
6593 #define IoCopyCurrentIrpStackLocationToNext(_Irp) \
6595 PIO_STACK_LOCATION _IrpSp; \
6596 PIO_STACK_LOCATION _NextIrpSp; \
6597 _IrpSp = IoGetCurrentIrpStackLocation(_Irp); \
6598 _NextIrpSp = IoGetNextIrpStackLocation(_Irp); \
6599 RtlCopyMemory(_NextIrpSp, _IrpSp, \
6600 FIELD_OFFSET(IO_STACK_LOCATION, CompletionRoutine)); \
6601 _NextIrpSp->Control = 0; \
6614 IN PDRIVER_OBJECT DriverObject
,
6615 IN ULONG DeviceExtensionSize
,
6616 IN PUNICODE_STRING DeviceName OPTIONAL
,
6617 IN DEVICE_TYPE DeviceType
,
6618 IN ULONG DeviceCharacteristics
,
6619 IN BOOLEAN Exclusive
,
6620 OUT PDEVICE_OBJECT
*DeviceObject
);
6626 IN PDEVICE_OBJECT DeviceObject
,
6627 IN PCREATE_DISK Disk
);
6633 OUT PHANDLE FileHandle
,
6634 IN ACCESS_MASK DesiredAccess
,
6635 IN POBJECT_ATTRIBUTES ObjectAttributes
,
6636 OUT PIO_STATUS_BLOCK IoStatusBlock
,
6637 IN PLARGE_INTEGER AllocationSize OPTIONAL
,
6638 IN ULONG FileAttributes
,
6639 IN ULONG ShareAccess
,
6640 IN ULONG Disposition
,
6641 IN ULONG CreateOptions
,
6642 IN PVOID EaBuffer OPTIONAL
,
6644 IN CREATE_FILE_TYPE CreateFileType
,
6645 IN PVOID ExtraCreateParameters OPTIONAL
,
6651 IoCreateNotificationEvent(
6652 IN PUNICODE_STRING EventName
,
6653 OUT PHANDLE EventHandle
);
6658 IoCreateSymbolicLink(
6659 IN PUNICODE_STRING SymbolicLinkName
,
6660 IN PUNICODE_STRING DeviceName
);
6665 IoCreateSynchronizationEvent(
6666 IN PUNICODE_STRING EventName
,
6667 OUT PHANDLE EventHandle
);
6672 IoCreateUnprotectedSymbolicLink(
6673 IN PUNICODE_STRING SymbolicLinkName
,
6674 IN PUNICODE_STRING DeviceName
);
6681 IN PIO_CSQ_INSERT_IRP CsqInsertIrp
,
6682 IN PIO_CSQ_REMOVE_IRP CsqRemoveIrp
,
6683 IN PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp
,
6684 IN PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock
,
6685 IN PIO_CSQ_RELEASE_LOCK CsqReleaseLock
,
6686 IN PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp
);
6694 IN PIO_CSQ_IRP_CONTEXT Context
);
6701 IN PIO_CSQ_IRP_CONTEXT Context
);
6708 IN PVOID PeekContext
);
6714 IN PCONTROLLER_OBJECT ControllerObject
);
6720 IN PDEVICE_OBJECT DeviceObject
);
6725 IoDeleteSymbolicLink(
6726 IN PUNICODE_STRING SymbolicLinkName
);
6730 * IoDeassignArcName(
6731 * IN PUNICODE_STRING ArcName)
6733 #define IoDeassignArcName IoDeleteSymbolicLink
6739 IN OUT PDEVICE_OBJECT TargetDevice
);
6744 IoDisconnectInterrupt(
6745 IN PKINTERRUPT InterruptObject
);
6750 IoForwardIrpSynchronously(
6751 IN PDEVICE_OBJECT DeviceObject
,
6754 #define IoForwardAndCatchIrp IoForwardIrpSynchronously
6760 IN PCONTROLLER_OBJECT ControllerObject
);
6765 IoFreeErrorLogEntry(
6784 IN PIO_WORKITEM pIOWorkItem
);
6789 IoGetAttachedDevice(
6790 IN PDEVICE_OBJECT DeviceObject
);
6795 IoGetAttachedDeviceReference(
6796 IN PDEVICE_OBJECT DeviceObject
);
6801 IoGetBootDiskInformation(
6802 IN OUT PBOOTDISK_INFORMATION BootDiskInformation
,
6806 PCONFIGURATION_INFORMATION
6808 IoGetConfigurationInformation(
6814 IoGetCurrentProcess(
6820 IoGetDeviceInterfaceAlias(
6821 IN PUNICODE_STRING SymbolicLinkName
,
6822 IN CONST GUID
*AliasInterfaceClassGuid
,
6823 OUT PUNICODE_STRING AliasSymbolicLinkName
);
6825 #define DEVICE_INTERFACE_INCLUDE_NONACTIVE 0x00000001
6830 IoGetDeviceInterfaces(
6831 IN CONST GUID
*InterfaceClassGuid
,
6832 IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL
,
6834 OUT PWSTR
*SymbolicLinkList
);
6839 IoGetDeviceObjectPointer(
6840 IN PUNICODE_STRING ObjectName
,
6841 IN ACCESS_MASK DesiredAccess
,
6842 OUT PFILE_OBJECT
*FileObject
,
6843 OUT PDEVICE_OBJECT
*DeviceObject
);
6848 IoGetDeviceProperty(
6849 IN PDEVICE_OBJECT DeviceObject
,
6850 IN DEVICE_REGISTRY_PROPERTY DeviceProperty
,
6851 IN ULONG BufferLength
,
6852 OUT PVOID PropertyBuffer
,
6853 OUT PULONG ResultLength
);
6858 IoGetDeviceToVerify(
6859 IN PETHREAD Thread
);
6865 IN PDEVICE_OBJECT PhysicalDeviceObject
,
6866 IN PDEVICE_DESCRIPTION DeviceDescription
,
6867 IN OUT PULONG NumberOfMapRegisters
);
6872 IoGetDriverObjectExtension(
6873 IN PDRIVER_OBJECT DriverObject
,
6874 IN PVOID ClientIdentificationAddress
);
6879 IoGetFileObjectGenericMapping(
6884 * IoGetFunctionCodeFromCtlCode(
6885 * IN ULONG ControlCode)
6887 #define IoGetFunctionCodeFromCtlCode(_ControlCode) \
6888 (((_ControlCode) >> 2) & 0x00000FFF)
6899 IoGetRelatedDeviceObject(
6900 IN PFILE_OBJECT FileObject
);
6906 OUT PULONG_PTR LowLimit
,
6907 OUT PULONG_PTR HighLimit
);
6911 IoGetRemainingStackSize(
6915 ULONG_PTR End
, Begin
;
6918 IoGetStackLimits(&Begin
, &End
);
6919 Result
= (ULONG_PTR
)(&End
) - Begin
;
6928 IN PKDEFERRED_ROUTINE DeferredRoutine
,
6929 IN PVOID DeferredContext
);
6933 * IoInitializeDpcRequest(
6934 * IN PDEVICE_OBJECT DeviceObject,
6935 * IN PIO_DPC_ROUTINE DpcRoutine)
6937 #define IoInitializeDpcRequest(_DeviceObject, \
6939 KeInitializeDpc(&(_DeviceObject)->Dpc, \
6940 (PKDEFERRED_ROUTINE) (_DpcRoutine), \
6948 IN USHORT PacketSize
,
6949 IN CCHAR StackSize
);
6954 IoInitializeRemoveLockEx(
6955 IN PIO_REMOVE_LOCK Lock
,
6956 IN ULONG AllocateTag
,
6957 IN ULONG MaxLockedMinutes
,
6958 IN ULONG HighWatermark
,
6959 IN ULONG RemlockSize
);
6962 * IoInitializeRemoveLock(
6963 * IN PIO_REMOVE_LOCK Lock,
6964 * IN ULONG AllocateTag,
6965 * IN ULONG MaxLockedMinutes,
6966 * IN ULONG HighWatermark)
6968 #define IoInitializeRemoveLock( \
6969 Lock, AllocateTag, MaxLockedMinutes, HighWatermark) \
6970 IoInitializeRemoveLockEx(Lock, AllocateTag, MaxLockedMinutes, \
6971 HighWatermark, sizeof(IO_REMOVE_LOCK))
6977 IN PDEVICE_OBJECT DeviceObject
,
6978 IN PIO_TIMER_ROUTINE TimerRoutine
,
6984 IoInvalidateDeviceRelations(
6985 IN PDEVICE_OBJECT DeviceObject
,
6986 IN DEVICE_RELATION_TYPE Type
);
6991 IoInvalidateDeviceState(
6992 IN PDEVICE_OBJECT PhysicalDeviceObject
);
6998 IN PIRP Irp OPTIONAL
);
7002 * IoIsErrorUserInduced(
7003 * IN NTSTATUS Status);
7005 #define IoIsErrorUserInduced(Status) \
7006 ((BOOLEAN)(((Status) == STATUS_DEVICE_NOT_READY) || \
7007 ((Status) == STATUS_IO_TIMEOUT) || \
7008 ((Status) == STATUS_MEDIA_WRITE_PROTECTED) || \
7009 ((Status) == STATUS_NO_MEDIA_IN_DEVICE) || \
7010 ((Status) == STATUS_VERIFY_REQUIRED) || \
7011 ((Status) == STATUS_UNRECOGNIZED_MEDIA) || \
7012 ((Status) == STATUS_WRONG_VOLUME)))
7017 IoIsWdmVersionAvailable(
7018 IN UCHAR MajorVersion
,
7019 IN UCHAR MinorVersion
);
7024 IoMakeAssociatedIrp(
7026 IN CCHAR StackSize
);
7033 #define IoMarkIrpPending(_Irp) \
7034 (IoGetCurrentIrpStackLocation(_Irp)->Control |= SL_PENDING_RETURNED)
7039 IoOpenDeviceInterfaceRegistryKey(
7040 IN PUNICODE_STRING SymbolicLinkName
,
7041 IN ACCESS_MASK DesiredAccess
,
7042 OUT PHANDLE DeviceInterfaceKey
);
7044 #define PLUGPLAY_REGKEY_DEVICE 1
7045 #define PLUGPLAY_REGKEY_DRIVER 2
7046 #define PLUGPLAY_REGKEY_CURRENT_HWPROFILE 4
7051 IoOpenDeviceRegistryKey(
7052 IN PDEVICE_OBJECT DeviceObject
,
7053 IN ULONG DevInstKeyType
,
7054 IN ACCESS_MASK DesiredAccess
,
7055 OUT PHANDLE DevInstRegKey
);
7060 IoQueryDeviceDescription(
7061 IN PINTERFACE_TYPE BusType OPTIONAL
,
7062 IN PULONG BusNumber OPTIONAL
,
7063 IN PCONFIGURATION_TYPE ControllerType OPTIONAL
,
7064 IN PULONG ControllerNumber OPTIONAL
,
7065 IN PCONFIGURATION_TYPE PeripheralType OPTIONAL
,
7066 IN PULONG PeripheralNumber OPTIONAL
,
7067 IN PIO_QUERY_DEVICE_ROUTINE CalloutRoutine
,
7074 IN PIO_WORKITEM pIOWorkItem
,
7075 IN PIO_WORKITEM_ROUTINE Routine
,
7076 IN WORK_QUEUE_TYPE QueueType
,
7084 IN PVPB Vpb OPTIONAL
,
7085 IN PDEVICE_OBJECT RealDeviceObject
);
7090 IoRaiseInformationalHardError(
7091 IN NTSTATUS ErrorStatus
,
7092 IN PUNICODE_STRING String OPTIONAL
,
7093 IN PKTHREAD Thread OPTIONAL
);
7098 IoReadDiskSignature(
7099 IN PDEVICE_OBJECT DeviceObject
,
7100 IN ULONG BytesPerSector
,
7101 OUT PDISK_SIGNATURE Signature
);
7106 IoReadPartitionTable(
7107 IN PDEVICE_OBJECT DeviceObject
,
7108 IN ULONG SectorSize
,
7109 IN BOOLEAN ReturnRecognizedPartitions
,
7110 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
7115 IoReadPartitionTableEx(
7116 IN PDEVICE_OBJECT DeviceObject
,
7117 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
**PartitionBuffer
);
7122 IoRegisterBootDriverReinitialization(
7123 IN PDRIVER_OBJECT DriverObject
,
7124 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
7130 IoRegisterBootDriverReinitialization(
7131 IN PDRIVER_OBJECT DriverObject
,
7132 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
7138 IoRegisterDeviceInterface(
7139 IN PDEVICE_OBJECT PhysicalDeviceObject
,
7140 IN CONST GUID
*InterfaceClassGuid
,
7141 IN PUNICODE_STRING ReferenceString OPTIONAL
,
7142 OUT PUNICODE_STRING SymbolicLinkName
);
7147 IoRegisterDriverReinitialization(
7148 IN PDRIVER_OBJECT DriverObject
,
7149 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
7155 IoRegisterPlugPlayNotification(
7156 IN IO_NOTIFICATION_EVENT_CATEGORY EventCategory
,
7157 IN ULONG EventCategoryFlags
,
7158 IN PVOID EventCategoryData OPTIONAL
,
7159 IN PDRIVER_OBJECT DriverObject
,
7160 IN PDRIVER_NOTIFICATION_CALLBACK_ROUTINE CallbackRoutine
,
7162 OUT PVOID
*NotificationEntry
);
7167 IoRegisterShutdownNotification(
7168 IN PDEVICE_OBJECT DeviceObject
);
7173 IoReleaseCancelSpinLock(
7179 IoReleaseRemoveLockAndWaitEx(
7180 IN PIO_REMOVE_LOCK RemoveLock
,
7182 IN ULONG RemlockSize
);
7187 IoReleaseRemoveLockEx(
7188 IN PIO_REMOVE_LOCK RemoveLock
,
7190 IN ULONG RemlockSize
);
7194 * IoReleaseRemoveLock(
7195 * IN PIO_REMOVE_LOCK RemoveLock,
7198 #define IoReleaseRemoveLock(_RemoveLock, \
7200 IoReleaseRemoveLockEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK))
7204 * IoReleaseRemoveLockAndWait(
7205 * IN PIO_REMOVE_LOCK RemoveLock,
7208 #define IoReleaseRemoveLockAndWait(_RemoveLock, \
7210 IoReleaseRemoveLockAndWaitEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK))
7215 IoRemoveShareAccess(
7216 IN PFILE_OBJECT FileObject
,
7217 IN OUT PSHARE_ACCESS ShareAccess
);
7222 IoReportDetectedDevice(
7223 IN PDRIVER_OBJECT DriverObject
,
7224 IN INTERFACE_TYPE LegacyBusType
,
7226 IN ULONG SlotNumber
,
7227 IN PCM_RESOURCE_LIST ResourceList
,
7228 IN PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements OPTIONAL
,
7229 IN BOOLEAN ResourceAssigned
,
7230 IN OUT PDEVICE_OBJECT
*DeviceObject
);
7235 IoReportResourceForDetection(
7236 IN PDRIVER_OBJECT DriverObject
,
7237 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
7238 IN ULONG DriverListSize OPTIONAL
,
7239 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
7240 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
7241 IN ULONG DeviceListSize OPTIONAL
,
7242 OUT PBOOLEAN ConflictDetected
);
7247 IoReportResourceUsage(
7248 IN PUNICODE_STRING DriverClassName OPTIONAL
,
7249 IN PDRIVER_OBJECT DriverObject
,
7250 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
7251 IN ULONG DriverListSize OPTIONAL
,
7252 IN PDEVICE_OBJECT DeviceObject
,
7253 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
7254 IN ULONG DeviceListSize OPTIONAL
,
7255 IN BOOLEAN OverrideConflict
,
7256 OUT PBOOLEAN ConflictDetected
);
7261 IoReportTargetDeviceChange(
7262 IN PDEVICE_OBJECT PhysicalDeviceObject
,
7263 IN PVOID NotificationStructure
);
7268 IoReportTargetDeviceChangeAsynchronous(
7269 IN PDEVICE_OBJECT PhysicalDeviceObject
,
7270 IN PVOID NotificationStructure
,
7271 IN PDEVICE_CHANGE_COMPLETE_CALLBACK Callback OPTIONAL
,
7272 IN PVOID Context OPTIONAL
);
7277 IoRequestDeviceEject(
7278 IN PDEVICE_OBJECT PhysicalDeviceObject
);
7283 * IN PDEVICE_OBJECT DeviceObject,
7285 * IN PVOID Context);
7287 #define IoRequestDpc(DeviceObject, Irp, Context)( \
7288 KeInsertQueueDpc(&(DeviceObject)->Dpc, (Irp), (Context)))
7295 IN NTSTATUS Status
);
7299 * IoSetCancelRoutine(
7301 * IN PDRIVER_CANCEL CancelRoutine)
7303 #define IoSetCancelRoutine(_Irp, \
7305 ((PDRIVER_CANCEL) InterlockedExchangePointer( \
7306 (PVOID *) &(_Irp)->CancelRoutine, (PVOID) (_CancelRoutine)))
7310 * IoSetCompletionRoutine(
7312 * IN PIO_COMPLETION_ROUTINE CompletionRoutine,
7314 * IN BOOLEAN InvokeOnSuccess,
7315 * IN BOOLEAN InvokeOnError,
7316 * IN BOOLEAN InvokeOnCancel)
7318 #define IoSetCompletionRoutine(_Irp, \
7319 _CompletionRoutine, \
7325 PIO_STACK_LOCATION _IrpSp; \
7326 ASSERT((_InvokeOnSuccess) || (_InvokeOnError) || (_InvokeOnCancel) ? \
7327 (_CompletionRoutine) != NULL : TRUE); \
7328 _IrpSp = IoGetNextIrpStackLocation(_Irp); \
7329 _IrpSp->CompletionRoutine = (PIO_COMPLETION_ROUTINE)(_CompletionRoutine); \
7330 _IrpSp->Context = (_Context); \
7331 _IrpSp->Control = 0; \
7332 if (_InvokeOnSuccess) _IrpSp->Control = SL_INVOKE_ON_SUCCESS; \
7333 if (_InvokeOnError) _IrpSp->Control |= SL_INVOKE_ON_ERROR; \
7334 if (_InvokeOnCancel) _IrpSp->Control |= SL_INVOKE_ON_CANCEL; \
7340 IoSetCompletionRoutineEx(
7341 IN PDEVICE_OBJECT DeviceObject
,
7343 IN PIO_COMPLETION_ROUTINE CompletionRoutine
,
7345 IN BOOLEAN InvokeOnSuccess
,
7346 IN BOOLEAN InvokeOnError
,
7347 IN BOOLEAN InvokeOnCancel
);
7352 IoSetDeviceInterfaceState(
7353 IN PUNICODE_STRING SymbolicLinkName
,
7359 IoSetHardErrorOrVerifyDevice(
7361 IN PDEVICE_OBJECT DeviceObject
);
7365 * IoSetNextIrpStackLocation(
7368 #define IoSetNextIrpStackLocation(_Irp) \
7370 (_Irp)->CurrentLocation--; \
7371 (_Irp)->Tail.Overlay.CurrentStackLocation--; \
7377 IoSetPartitionInformation(
7378 IN PDEVICE_OBJECT DeviceObject
,
7379 IN ULONG SectorSize
,
7380 IN ULONG PartitionNumber
,
7381 IN ULONG PartitionType
);
7386 IoSetPartitionInformationEx(
7387 IN PDEVICE_OBJECT DeviceObject
,
7388 IN ULONG PartitionNumber
,
7389 IN
struct _SET_PARTITION_INFORMATION_EX
*PartitionInfo
);
7395 IN ACCESS_MASK DesiredAccess
,
7396 IN ULONG DesiredShareAccess
,
7397 IN OUT PFILE_OBJECT FileObject
,
7398 OUT PSHARE_ACCESS ShareAccess
);
7403 IoSetStartIoAttributes(
7404 IN PDEVICE_OBJECT DeviceObject
,
7405 IN BOOLEAN DeferredStartIo
,
7406 IN BOOLEAN NonCancelable
);
7411 IoSetSystemPartition(
7412 IN PUNICODE_STRING VolumeNameString
);
7417 IoSetThreadHardErrorMode(
7418 IN BOOLEAN EnableHardErrors
);
7423 * IN CCHAR StackSize)
7425 #define IoSizeOfIrp(_StackSize) \
7426 ((USHORT) (sizeof(IRP) + ((_StackSize) * (sizeof(IO_STACK_LOCATION)))))
7430 * IoSkipCurrentIrpStackLocation(
7433 #define IoSkipCurrentIrpStackLocation(_Irp) \
7435 (_Irp)->CurrentLocation++; \
7436 (_Irp)->Tail.Overlay.CurrentStackLocation++; \
7443 IN PDEVICE_OBJECT DeviceObject
,
7444 IN BOOLEAN Cancelable
);
7449 IoStartNextPacketByKey(
7450 IN PDEVICE_OBJECT DeviceObject
,
7451 IN BOOLEAN Cancelable
,
7458 IN PDEVICE_OBJECT DeviceObject
,
7460 IN PULONG Key OPTIONAL
,
7461 IN PDRIVER_CANCEL CancelFunction OPTIONAL
);
7467 IN PDEVICE_OBJECT DeviceObject
);
7473 IN PDEVICE_OBJECT DeviceObject
);
7478 IoUnregisterPlugPlayNotification(
7479 IN PVOID NotificationEntry
);
7484 IoUnregisterShutdownNotification(
7485 IN PDEVICE_OBJECT DeviceObject
);
7490 IoUpdateShareAccess(
7491 IN PFILE_OBJECT FileObject
,
7492 IN OUT PSHARE_ACCESS ShareAccess
);
7497 IoVerifyPartitionTable(
7498 IN PDEVICE_OBJECT DeviceObject
,
7499 IN BOOLEAN FixErrors
);
7504 IoVolumeDeviceToDosName(
7505 IN PVOID VolumeDeviceObject
,
7506 OUT PUNICODE_STRING DosName
);
7511 IoWMIAllocateInstanceIds(
7513 IN ULONG InstanceCount
,
7514 OUT ULONG
*FirstInstanceId
);
7519 IoWMIDeviceObjectToProviderId(
7520 IN PDEVICE_OBJECT DeviceObject
);
7525 IoWMIDeviceObjectToInstanceName(
7526 IN PVOID DataBlockObject
,
7527 IN PDEVICE_OBJECT DeviceObject
,
7528 OUT PUNICODE_STRING InstanceName
);
7534 IN PVOID DataBlockObject
,
7535 IN PUNICODE_STRING InstanceName
,
7537 IN ULONG InBufferSize
,
7538 IN OUT PULONG OutBufferSize
,
7539 IN OUT PUCHAR InOutBuffer
);
7544 IoWMIHandleToInstanceName(
7545 IN PVOID DataBlockObject
,
7546 IN HANDLE FileHandle
,
7547 OUT PUNICODE_STRING InstanceName
);
7553 IN GUID
*DataBlockGuid
,
7554 IN ULONG DesiredAccess
,
7555 OUT PVOID
*DataBlockObject
);
7561 IN PVOID DataBlockObject
,
7562 IN OUT ULONG
*InOutBufferSize
,
7563 OUT PVOID OutBuffer
);
7568 IoWMIQueryAllDataMultiple(
7569 IN PVOID
*DataBlockObjectList
,
7570 IN ULONG ObjectCount
,
7571 IN OUT ULONG
*InOutBufferSize
,
7572 OUT PVOID OutBuffer
);
7577 IoWMIQuerySingleInstance(
7578 IN PVOID DataBlockObject
,
7579 IN PUNICODE_STRING InstanceName
,
7580 IN OUT ULONG
*InOutBufferSize
,
7581 OUT PVOID OutBuffer
);
7586 IoWMIQuerySingleInstanceMultiple(
7587 IN PVOID
*DataBlockObjectList
,
7588 IN PUNICODE_STRING InstanceNames
,
7589 IN ULONG ObjectCount
,
7590 IN OUT ULONG
*InOutBufferSize
,
7591 OUT PVOID OutBuffer
);
7596 IoWMIRegistrationControl(
7597 IN PDEVICE_OBJECT DeviceObject
,
7603 IoWMISetNotificationCallback(
7605 IN WMI_NOTIFICATION_CALLBACK Callback
,
7611 IoWMISetSingleInstance(
7612 IN PVOID DataBlockObject
,
7613 IN PUNICODE_STRING InstanceName
,
7615 IN ULONG ValueBufferSize
,
7616 IN PVOID ValueBuffer
);
7622 IN PVOID DataBlockObject
,
7623 IN PUNICODE_STRING InstanceName
,
7624 IN ULONG DataItemId
,
7626 IN ULONG ValueBufferSize
,
7627 IN PVOID ValueBuffer
);
7632 IoWMISuggestInstanceName(
7633 IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL
,
7634 IN PUNICODE_STRING SymbolicLinkName OPTIONAL
,
7635 IN BOOLEAN CombineNames
,
7636 OUT PUNICODE_STRING SuggestedInstanceName
);
7642 IN PVOID WnodeEventItem
);
7647 IoWriteErrorLogEntry(
7653 IoWritePartitionTable(
7654 IN PDEVICE_OBJECT DeviceObject
,
7655 IN ULONG SectorSize
,
7656 IN ULONG SectorsPerTrack
,
7657 IN ULONG NumberOfHeads
,
7658 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
7663 IoWritePartitionTableEx(
7664 IN PDEVICE_OBJECT DeviceObject
,
7665 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
*PartitionBuffer
);
7669 /** Kernel routines **/
7671 #if defined (_M_AMD64)
7675 KeAcquireInStackQueuedSpinLock(
7676 IN PKSPIN_LOCK SpinLock
,
7677 IN PKLOCK_QUEUE_HANDLE LockHandle
);
7682 KeReleaseInStackQueuedSpinLock(
7683 IN PKLOCK_QUEUE_HANDLE LockHandle
);
7688 KeAcquireInStackQueuedSpinLock(
7689 IN PKSPIN_LOCK SpinLock
,
7690 IN PKLOCK_QUEUE_HANDLE LockHandle
);
7695 KeReleaseInStackQueuedSpinLock(
7696 IN PKLOCK_QUEUE_HANDLE LockHandle
);
7702 KeAcquireInStackQueuedSpinLockAtDpcLevel(
7703 IN PKSPIN_LOCK SpinLock
,
7704 IN PKLOCK_QUEUE_HANDLE LockHandle
);
7709 KeAcquireInterruptSpinLock(
7710 IN PKINTERRUPT Interrupt
);
7723 IN ULONG BugCheckCode
);
7730 IN ULONG BugCheckCode
,
7731 IN ULONG_PTR BugCheckParameter1
,
7732 IN ULONG_PTR BugCheckParameter2
,
7733 IN ULONG_PTR BugCheckParameter3
,
7734 IN ULONG_PTR BugCheckParameter4
);
7751 KeDelayExecutionThread(
7752 IN KPROCESSOR_MODE WaitMode
,
7753 IN BOOLEAN Alertable
,
7754 IN PLARGE_INTEGER Interval
);
7759 KeDeregisterBugCheckCallback(
7760 IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord
);
7765 KeEnterCriticalRegion(
7772 * IN BOOLEAN ReadOperation,
7773 * IN BOOLEAN DmaOperation)
7775 #define KeFlushIoBuffers(_Mdl, _ReadOperation, _DmaOperation)
7777 #define ExAcquireSpinLock(Lock, OldIrql) KeAcquireSpinLock((Lock), (OldIrql))
7778 #define ExReleaseSpinLock(Lock, OldIrql) KeReleaseSpinLock((Lock), (OldIrql))
7779 #define ExAcquireSpinLockAtDpcLevel(Lock) KeAcquireSpinLockAtDpcLevel(Lock)
7780 #define ExReleaseSpinLockFromDpcLevel(Lock) KeReleaseSpinLockFromDpcLevel(Lock)
7792 KeFlushWriteBuffer(VOID
);
7797 KeGetRecommendedSharedDataAlignment(
7803 KeInitializeDeviceQueue(
7804 IN PKDEVICE_QUEUE DeviceQueue
);
7816 KeInitializeSemaphore(
7817 IN PRKSEMAPHORE Semaphore
,
7830 KeInitializeTimerEx(
7832 IN TIMER_TYPE Type
);
7837 KeInsertByKeyDeviceQueue(
7838 IN PKDEVICE_QUEUE DeviceQueue
,
7839 IN PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
,
7845 KeInsertDeviceQueue(
7846 IN PKDEVICE_QUEUE DeviceQueue
,
7847 IN PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
);
7854 IN PVOID SystemArgument1
,
7855 IN PVOID SystemArgument2
);
7860 KeLeaveCriticalRegion(
7870 volatile LONG Barrier
;
7871 #if defined(__GNUC__)
7872 __asm__
__volatile__ ("xchg %%eax, %0" : : "m" (Barrier
) : "%eax");
7873 #elif defined(_MSC_VER)
7874 __asm xchg
[Barrier
], eax
7885 IN KPRIORITY Increment
,
7891 KeQueryActiveProcessors(
7898 KeQueryPerformanceCounter(
7899 OUT PLARGE_INTEGER PerformanceFrequency OPTIONAL
);
7904 KeQueryPriorityThread(
7905 IN PRKTHREAD Thread
);
7910 KeQueryRuntimeThread(
7912 OUT PULONG UserTime
);
7914 #if !defined(_M_AMD64)
7918 KeQueryInterruptTime(
7925 OUT PLARGE_INTEGER CurrentTime
);
7931 OUT PLARGE_INTEGER TickCount
);
7937 KeQueryTimeIncrement(
7956 KeReadStateSemaphore(
7957 IN PRKSEMAPHORE Semaphore
);
7968 KeRegisterBugCheckCallback(
7969 IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord
,
7970 IN PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine
,
7973 IN PUCHAR Component
);
7978 KeRegisterNmiCallback(
7979 IN PNMI_CALLBACK CallbackRoutine
,
7986 KeDeregisterNmiCallback(
7993 KeReleaseInStackQueuedSpinLockFromDpcLevel(
7994 IN PKLOCK_QUEUE_HANDLE LockHandle
);
7999 KeReleaseInterruptSpinLock(
8000 IN PKINTERRUPT Interrupt
,
8014 IN PRKSEMAPHORE Semaphore
,
8015 IN KPRIORITY Increment
,
8020 PKDEVICE_QUEUE_ENTRY
8022 KeRemoveByKeyDeviceQueue(
8023 IN PKDEVICE_QUEUE DeviceQueue
,
8027 PKDEVICE_QUEUE_ENTRY
8029 KeRemoveDeviceQueue(
8030 IN PKDEVICE_QUEUE DeviceQueue
);
8035 KeRemoveEntryDeviceQueue(
8036 IN PKDEVICE_QUEUE DeviceQueue
,
8037 IN PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
);
8054 KeRestoreFloatingPointState(
8055 IN PKFLOATING_SAVE FloatSave
);
8060 KeRevertToUserAffinityThread(VOID
);
8065 KeSaveFloatingPointState(
8066 OUT PKFLOATING_SAVE FloatSave
);
8071 KeSetBasePriorityThread(
8072 IN PRKTHREAD Thread
,
8080 IN KPRIORITY Increment
,
8088 IN KDPC_IMPORTANCE Importance
);
8093 KeSetPriorityThread(
8095 IN KPRIORITY Priority
);
8100 KeSetSystemAffinityThread(
8101 IN KAFFINITY Affinity
);
8106 KeSetTargetProcessorDpc(
8115 IN LARGE_INTEGER DueTime
,
8116 IN PKDPC Dpc OPTIONAL
);
8123 IN LARGE_INTEGER DueTime
,
8124 IN LONG Period OPTIONAL
,
8125 IN PKDPC Dpc OPTIONAL
);
8130 KeSetTimeUpdateNotifyRoutine(
8131 IN PTIME_UPDATE_NOTIFY_ROUTINE NotifyRoutine
);
8136 KeStallExecutionProcessor(
8137 IN ULONG MicroSeconds
);
8142 KeSynchronizeExecution(
8143 IN PKINTERRUPT Interrupt
,
8144 IN PKSYNCHRONIZE_ROUTINE SynchronizeRoutine
,
8145 IN PVOID SynchronizeContext
);
8150 KeWaitForMultipleObjects(
8153 IN WAIT_TYPE WaitType
,
8154 IN KWAIT_REASON WaitReason
,
8155 IN KPROCESSOR_MODE WaitMode
,
8156 IN BOOLEAN Alertable
,
8157 IN PLARGE_INTEGER Timeout OPTIONAL
,
8158 IN PKWAIT_BLOCK WaitBlockArray OPTIONAL
);
8163 KeWaitForMutexObject(
8165 IN KWAIT_REASON WaitReason
,
8166 IN KPROCESSOR_MODE WaitMode
,
8167 IN BOOLEAN Alertable
,
8168 IN PLARGE_INTEGER Timeout OPTIONAL
);
8173 KeWaitForSingleObject(
8175 IN KWAIT_REASON WaitReason
,
8176 IN KPROCESSOR_MODE WaitMode
,
8177 IN BOOLEAN Alertable
,
8178 IN PLARGE_INTEGER Timeout OPTIONAL
);
8182 (NTAPI
*PKIPI_BROADCAST_WORKER
)(
8183 IN ULONG_PTR Argument
8190 IN PKIPI_BROADCAST_WORKER BroadcastFunction
,
8191 IN ULONG_PTR Context
8211 KeRaiseIrqlToDpcLevel(
8217 KeRaiseIrqlToSynchLevel(
8220 #define KeLowerIrql(a) KfLowerIrql(a)
8221 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
8223 #elif defined(_M_AMD64)
8227 KeGetCurrentIrql(VOID
)
8229 return (KIRQL
)__readcr8();
8234 KeLowerIrql(IN KIRQL NewIrql
)
8236 ASSERT(KeGetCurrentIrql() >= NewIrql
);
8237 __writecr8(NewIrql
);
8242 KfRaiseIrql(IN KIRQL NewIrql
)
8246 OldIrql
= __readcr8();
8247 ASSERT(OldIrql
<= NewIrql
);
8248 __writecr8(NewIrql
);
8251 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
8255 KeRaiseIrqlToDpcLevel(VOID
)
8257 return KfRaiseIrql(DISPATCH_LEVEL
);
8262 KeRaiseIrqlToSynchLevel(VOID
)
8264 return KfRaiseIrql(12); // SYNCH_LEVEL = IPI_LEVEL - 2
8267 #elif defined(__PowerPC__)
8284 KeRaiseIrqlToDpcLevel(
8290 KeRaiseIrqlToSynchLevel(
8293 #define KeLowerIrql(a) KfLowerIrql(a)
8294 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
8296 #elif defined(_M_MIPS)
8298 #define KeLowerIrql(a) KfLowerIrql(a)
8299 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
8316 KeRaiseIrqlToDpcLevel(
8322 KeRaiseIrqlToSynchLevel(
8325 #elif defined(_M_ARM)
8342 OUT PKIRQL OldIrql
);
8347 KeRaiseIrqlToDpcLevel(
8353 KeRaiseIrqlToSynchLevel(
8358 /** Memory manager routines **/
8365 IN ULONG NumberOfBytes
);
8370 MmAllocateContiguousMemory(
8371 IN ULONG NumberOfBytes
,
8372 IN PHYSICAL_ADDRESS HighestAcceptableAddress
);
8377 MmAllocateContiguousMemorySpecifyCache(
8378 IN SIZE_T NumberOfBytes
,
8379 IN PHYSICAL_ADDRESS LowestAcceptableAddress
,
8380 IN PHYSICAL_ADDRESS HighestAcceptableAddress
,
8381 IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL
,
8382 IN MEMORY_CACHING_TYPE CacheType
);
8387 MmAllocateMappingAddress(
8388 IN SIZE_T NumberOfBytes
,
8394 MmAllocateNonCachedMemory(
8395 IN ULONG NumberOfBytes
);
8400 MmAllocatePagesForMdl(
8401 IN PHYSICAL_ADDRESS LowAddress
,
8402 IN PHYSICAL_ADDRESS HighAddress
,
8403 IN PHYSICAL_ADDRESS SkipBytes
,
8404 IN SIZE_T TotalBytes
);
8406 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
8410 MmAllocatePagesForMdlEx(
8411 IN PHYSICAL_ADDRESS LowAddress
,
8412 IN PHYSICAL_ADDRESS HighAddress
,
8413 IN PHYSICAL_ADDRESS SkipBytes
,
8414 IN SIZE_T TotalBytes
,
8415 IN MEMORY_CACHING_TYPE CacheType
,
8422 MmBuildMdlForNonPagedPool(
8423 IN OUT PMDL MemoryDescriptorList
);
8425 typedef enum _MMFLUSH_TYPE
{
8433 MmFlushImageSection(
8434 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
8435 IN MMFLUSH_TYPE FlushType
);
8440 MmFreeContiguousMemory(
8441 IN PVOID BaseAddress
);
8446 MmFreeContiguousMemorySpecifyCache(
8447 IN PVOID BaseAddress
,
8448 IN SIZE_T NumberOfBytes
,
8449 IN MEMORY_CACHING_TYPE CacheType
);
8454 MmFreeMappingAddress(
8455 IN PVOID BaseAddress
,
8461 MmFreeNonCachedMemory(
8462 IN PVOID BaseAddress
,
8463 IN SIZE_T NumberOfBytes
);
8469 IN PMDL MemoryDescriptorList
);
8473 * MmGetMdlByteCount(
8476 #define MmGetMdlByteCount(_Mdl) \
8481 * MmGetMdlByteOffset(
8484 #define MmGetMdlByteOffset(_Mdl) \
8485 ((_Mdl)->ByteOffset)
8492 #define MmGetMdlPfnArray(_Mdl) \
8493 ((PPFN_NUMBER) ((_Mdl) + 1))
8497 * MmGetMdlVirtualAddress(
8500 #define MmGetMdlVirtualAddress(_Mdl) \
8501 ((PVOID) ((PCHAR) ((_Mdl)->StartVa) + (_Mdl)->ByteOffset))
8506 MmGetPhysicalAddress(
8507 IN PVOID BaseAddress
);
8510 PPHYSICAL_MEMORY_RANGE
8512 MmGetPhysicalMemoryRanges(
8518 MmGetVirtualForPhysical(
8519 IN PHYSICAL_ADDRESS PhysicalAddress
);
8524 MmMapLockedPagesSpecifyCache(
8525 IN PMDL MemoryDescriptorList
,
8526 IN KPROCESSOR_MODE AccessMode
,
8527 IN MEMORY_CACHING_TYPE CacheType
,
8528 IN PVOID BaseAddress
,
8529 IN ULONG BugCheckOnFailure
,
8530 IN MM_PAGE_PRIORITY Priority
);
8535 MmMapLockedPagesWithReservedMapping(
8536 IN PVOID MappingAddress
,
8538 IN PMDL MemoryDescriptorList
,
8539 IN MEMORY_CACHING_TYPE CacheType
);
8544 MmMapUserAddressesToPage(
8545 IN PVOID BaseAddress
,
8546 IN SIZE_T NumberOfBytes
,
8547 IN PVOID PageAddress
);
8553 IN PHYSICAL_ADDRESS PhysicalAddress
,
8554 IN SIZE_T NumberOfBytes
,
8555 IN MEMORY_CACHING_TYPE CacheType
);
8560 MmMapViewInSessionSpace(
8562 OUT PVOID
*MappedBase
,
8563 IN OUT PSIZE_T ViewSize
);
8568 MmMapViewInSystemSpace(
8570 OUT PVOID
*MappedBase
,
8571 IN PSIZE_T ViewSize
);
8576 MmMarkPhysicalMemoryAsBad(
8577 IN PPHYSICAL_ADDRESS StartAddress
,
8578 IN OUT PLARGE_INTEGER NumberOfBytes
);
8583 MmMarkPhysicalMemoryAsGood(
8584 IN PPHYSICAL_ADDRESS StartAddress
,
8585 IN OUT PLARGE_INTEGER NumberOfBytes
);
8590 MmGetSystemRoutineAddress(
8591 IN PUNICODE_STRING SystemRoutineName
);
8595 * ADDRESS_AND_SIZE_TO_SPAN_PAGES(
8599 #define ADDRESS_AND_SIZE_TO_SPAN_PAGES(_Va, \
8601 ((ULONG) ((((ULONG_PTR) (_Va) & (PAGE_SIZE - 1)) \
8602 + (_Size) + (PAGE_SIZE - 1)) >> PAGE_SHIFT))
8607 * IN PMDL MemoryDescriptorList,
8611 #define MmInitializeMdl(_MemoryDescriptorList, \
8615 (_MemoryDescriptorList)->Next = (PMDL) NULL; \
8616 (_MemoryDescriptorList)->Size = (CSHORT) (sizeof(MDL) + \
8617 (sizeof(PFN_NUMBER) * ADDRESS_AND_SIZE_TO_SPAN_PAGES(_BaseVa, _Length))); \
8618 (_MemoryDescriptorList)->MdlFlags = 0; \
8619 (_MemoryDescriptorList)->StartVa = (PVOID) PAGE_ALIGN(_BaseVa); \
8620 (_MemoryDescriptorList)->ByteOffset = BYTE_OFFSET(_BaseVa); \
8621 (_MemoryDescriptorList)->ByteCount = (ULONG) _Length; \
8628 IN PVOID VirtualAddress
);
8633 MmIsDriverVerifying(
8634 IN PDRIVER_OBJECT DriverObject
);
8639 MmIsThisAnNtAsSystem(
8645 MmIsVerifierEnabled(
8646 OUT PULONG VerifierFlags
);
8651 MmLockPagableDataSection(
8652 IN PVOID AddressWithinSection
);
8657 MmLockPagableImageSection(
8658 IN PVOID AddressWithinSection
);
8662 * MmLockPagableCodeSection(
8663 * IN PVOID AddressWithinSection)
8665 #define MmLockPagableCodeSection(Address) MmLockPagableDataSection(Address)
8670 MmLockPagableSectionByHandle(
8671 IN PVOID ImageSectionHandle
);
8677 IN PHYSICAL_ADDRESS PhysicalAddress
,
8678 IN ULONG NumberOfBytes
,
8679 IN MEMORY_CACHING_TYPE CacheEnable
);
8685 IN PMDL MemoryDescriptorList
,
8686 IN KPROCESSOR_MODE AccessMode
);
8691 MmLockPageableDataSection (
8692 IN PVOID AddressWithinSection
8698 MmUnlockPageableImageSection(
8699 IN PVOID ImageSectionHandle
8706 IN PVOID AddressWithinSection
);
8711 MmProbeAndLockProcessPages(
8712 IN OUT PMDL MemoryDescriptorList
,
8713 IN PEPROCESS Process
,
8714 IN KPROCESSOR_MODE AccessMode
,
8715 IN LOCK_OPERATION Operation
);
8720 MmProtectMdlSystemAddress(
8721 IN PMDL MemoryDescriptorList
,
8722 IN ULONG NewProtect
);
8728 IN PVOID BaseAddress
,
8729 IN PMDL MemoryDescriptorList
);
8734 MmUnmapViewInSessionSpace(
8735 IN PVOID MappedBase
);
8740 MmUnmapViewInSystemSpace(
8741 IN PVOID MappedBase
);
8746 MmUnsecureVirtualMemory(
8747 IN HANDLE SecureHandle
);
8751 * MmPrepareMdlForReuse(
8754 #define MmPrepareMdlForReuse(_Mdl) \
8756 if (((_Mdl)->MdlFlags & MDL_PARTIAL_HAS_BEEN_MAPPED) != 0) { \
8757 ASSERT(((_Mdl)->MdlFlags & MDL_PARTIAL) != 0); \
8758 MmUnmapLockedPages((_Mdl)->MappedSystemVa, (_Mdl)); \
8759 } else if (((_Mdl)->MdlFlags & MDL_PARTIAL) == 0) { \
8760 ASSERT(((_Mdl)->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA) == 0); \
8764 #define MmGetProcedureAddress(Address) (Address)
8769 MmProbeAndLockPages(
8770 IN OUT PMDL MemoryDescriptorList
,
8771 IN KPROCESSOR_MODE AccessMode
,
8772 IN LOCK_OPERATION Operation
);
8783 MmRemovePhysicalMemory(
8784 IN PPHYSICAL_ADDRESS StartAddress
,
8785 IN OUT PLARGE_INTEGER NumberOfBytes
);
8790 MmResetDriverPaging(
8791 IN PVOID AddressWithinSection
);
8796 MmSecureVirtualMemory(
8799 IN ULONG ProbeMode
);
8811 MmUnlockPagableImageSection(
8812 IN PVOID ImageSectionHandle
);
8818 IN PMDL MemoryDescriptorList
);
8824 IN PVOID BaseAddress
,
8825 IN SIZE_T NumberOfBytes
);
8830 MmUnmapReservedMapping(
8831 IN PVOID BaseAddress
,
8833 IN PMDL MemoryDescriptorList
);
8838 MmUnmapVideoDisplay(
8839 IN PVOID BaseAddress
,
8840 IN SIZE_T NumberOfBytes
);
8844 /** Object manager routines **/
8850 IN PACCESS_STATE AccessState
,
8851 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
8853 IN POBJECT_TYPE Type
);
8858 ObDereferenceSecurityDescriptor(
8859 PSECURITY_DESCRIPTOR SecurityDescriptor
,
8865 ObfDereferenceObject(
8870 * ObDereferenceObject(
8873 #define ObDereferenceObject ObfDereferenceObject
8878 ObGetObjectSecurity(
8880 OUT PSECURITY_DESCRIPTOR
*SecurityDescriptor
,
8881 OUT PBOOLEAN MemoryAllocated
);
8888 IN PACCESS_STATE PassedAccessState OPTIONAL
,
8889 IN ACCESS_MASK DesiredAccess
,
8890 IN ULONG AdditionalReferences
,
8891 OUT PVOID
* ReferencedObject OPTIONAL
,
8892 OUT PHANDLE Handle
);
8903 ObLogSecurityDescriptor(
8904 IN PSECURITY_DESCRIPTOR InputSecurityDescriptor
,
8905 OUT PSECURITY_DESCRIPTOR
*OutputSecurityDescriptor
,
8909 * ObReferenceObject(
8912 #define ObReferenceObject ObfReferenceObject
8917 ObMakeTemporaryObject(
8924 IN POBJECT_ATTRIBUTES ObjectAttributes
,
8925 IN POBJECT_TYPE ObjectType
,
8926 IN KPROCESSOR_MODE AccessMode
,
8927 IN PACCESS_STATE PassedAccessState
,
8928 IN ACCESS_MASK DesiredAccess
,
8929 IN OUT PVOID ParseContext OPTIONAL
,
8930 OUT PHANDLE Handle
);
8935 ObOpenObjectByPointer(
8937 IN ULONG HandleAttributes
,
8938 IN PACCESS_STATE PassedAccessState OPTIONAL
,
8939 IN ACCESS_MASK DesiredAccess OPTIONAL
,
8940 IN POBJECT_TYPE ObjectType OPTIONAL
,
8941 IN KPROCESSOR_MODE AccessMode
,
8942 OUT PHANDLE Handle
);
8947 ObQueryObjectAuditingByHandle(
8949 OUT PBOOLEAN GenerateOnClose
);
8954 ObReferenceObjectByHandle(
8956 IN ACCESS_MASK DesiredAccess
,
8957 IN POBJECT_TYPE ObjectType OPTIONAL
,
8958 IN KPROCESSOR_MODE AccessMode
,
8960 OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL
);
8965 ObReferenceObjectByName(
8966 IN PUNICODE_STRING ObjectPath
,
8967 IN ULONG Attributes
,
8968 IN PACCESS_STATE PassedAccessState OPTIONAL
,
8969 IN ACCESS_MASK DesiredAccess OPTIONAL
,
8970 IN POBJECT_TYPE ObjectType
,
8971 IN KPROCESSOR_MODE AccessMode
,
8972 IN OUT PVOID ParseContext OPTIONAL
,
8978 ObReferenceObjectByPointer(
8980 IN ACCESS_MASK DesiredAccess
,
8981 IN POBJECT_TYPE ObjectType
,
8982 IN KPROCESSOR_MODE AccessMode
);
8987 ObReferenceSecurityDescriptor(
8988 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
8994 ObReleaseObjectSecurity(
8995 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
8996 IN BOOLEAN MemoryAllocated
);
9000 /** Process manager routines **/
9005 PsCreateSystemProcess(
9006 IN PHANDLE ProcessHandle
,
9007 IN ACCESS_MASK DesiredAccess
,
9008 IN POBJECT_ATTRIBUTES ObjectAttributes
);
9013 PsCreateSystemThread(
9014 OUT PHANDLE ThreadHandle
,
9015 IN ULONG DesiredAccess
,
9016 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
9017 IN HANDLE ProcessHandle OPTIONAL
,
9018 OUT PCLIENT_ID ClientId OPTIONAL
,
9019 IN PKSTART_ROUTINE StartRoutine
,
9020 IN PVOID StartContext
);
9024 * PsGetCurrentProcess(VOID)
9026 #define PsGetCurrentProcess IoGetCurrentProcess
9031 PsGetCurrentProcessId(
9036 * PsGetCurrentThread(VOID)
9038 #define PsGetCurrentThread() \
9039 ((PETHREAD) KeGetCurrentThread())
9044 PsGetCurrentThreadId(
9050 PsGetProcessId(PEPROCESS Process
);
9056 PULONG MajorVersion OPTIONAL
,
9057 PULONG MinorVersion OPTIONAL
,
9058 PULONG BuildNumber OPTIONAL
,
9059 PUNICODE_STRING CSDVersion OPTIONAL
);
9064 PsRemoveCreateThreadNotifyRoutine(
9065 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
9070 PsRemoveLoadImageNotifyRoutine(
9071 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
9076 PsSetCreateProcessNotifyRoutine(
9077 IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine
,
9083 PsSetCreateThreadNotifyRoutine(
9084 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
9089 PsSetLoadImageNotifyRoutine(
9090 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
9095 PsTerminateSystemThread(
9096 IN NTSTATUS ExitStatus
);
9098 extern NTSYSAPI PEPROCESS PsInitialSystemProcess
;
9101 /** Security reference monitor routines **/
9107 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
9108 IN PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext
,
9109 IN BOOLEAN SubjectContextLocked
,
9110 IN ACCESS_MASK DesiredAccess
,
9111 IN ACCESS_MASK PreviouslyGrantedAccess
,
9112 OUT PPRIVILEGE_SET
*Privileges OPTIONAL
,
9113 IN PGENERIC_MAPPING GenericMapping
,
9114 IN KPROCESSOR_MODE AccessMode
,
9115 OUT PACCESS_MASK GrantedAccess
,
9116 OUT PNTSTATUS AccessStatus
);
9122 IN PSECURITY_DESCRIPTOR ParentDescriptor OPTIONAL
,
9123 IN PSECURITY_DESCRIPTOR ExplicitDescriptor OPTIONAL
,
9124 OUT PSECURITY_DESCRIPTOR
*NewDescriptor
,
9125 IN BOOLEAN IsDirectoryObject
,
9126 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
,
9127 IN PGENERIC_MAPPING GenericMapping
,
9128 IN POOL_TYPE PoolType
);
9134 IN PSECURITY_DESCRIPTOR ParentDescriptor OPTIONAL
,
9135 IN PSECURITY_DESCRIPTOR ExplicitDescriptor OPTIONAL
,
9136 OUT PSECURITY_DESCRIPTOR
*NewDescriptor
,
9137 IN GUID
*ObjectType OPTIONAL
,
9138 IN BOOLEAN IsDirectoryObject
,
9139 IN ULONG AutoInheritFlags
,
9140 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
,
9141 IN PGENERIC_MAPPING GenericMapping
,
9142 IN POOL_TYPE PoolType
);
9148 IN OUT PSECURITY_DESCRIPTOR
*SecurityDescriptor
);
9153 SeSinglePrivilegeCheck(
9154 LUID PrivilegeValue
,
9155 KPROCESSOR_MODE PreviousMode
);
9160 SeValidSecurityDescriptor(
9162 IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
9166 /** NtXxx routines **/
9172 OUT PHANDLE ProcessHandle
,
9173 IN ACCESS_MASK DesiredAccess
,
9174 IN POBJECT_ATTRIBUTES ObjectAttributes
,
9175 IN PCLIENT_ID ClientId OPTIONAL
);
9180 NtQueryInformationProcess(
9181 IN HANDLE ProcessHandle
,
9182 IN PROCESSINFOCLASS ProcessInformationClass
,
9183 OUT PVOID ProcessInformation
,
9184 IN ULONG ProcessInformationLength
,
9185 OUT PULONG ReturnLength OPTIONAL
);
9189 /** NtXxx and ZwXxx routines **/
9195 IN HANDLE TimerHandle
,
9196 OUT PBOOLEAN CurrentState OPTIONAL
);
9213 ZwCreateDirectoryObject(
9214 OUT PHANDLE DirectoryHandle
,
9215 IN ACCESS_MASK DesiredAccess
,
9216 IN POBJECT_ATTRIBUTES ObjectAttributes
);
9222 OUT PHANDLE EventHandle
,
9223 IN ACCESS_MASK DesiredAccess
,
9224 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
9225 IN EVENT_TYPE EventType
,
9226 IN BOOLEAN InitialState
);
9232 OUT PHANDLE EventHandle
,
9233 IN ACCESS_MASK DesiredAccess
,
9234 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
9235 IN EVENT_TYPE EventType
,
9236 IN BOOLEAN InitialState
);
9242 OUT PHANDLE FileHandle
,
9243 IN ACCESS_MASK DesiredAccess
,
9244 IN POBJECT_ATTRIBUTES ObjectAttributes
,
9245 OUT PIO_STATUS_BLOCK IoStatusBlock
,
9246 IN PLARGE_INTEGER AllocationSize OPTIONAL
,
9247 IN ULONG FileAttributes
,
9248 IN ULONG ShareAccess
,
9249 IN ULONG CreateDisposition
,
9250 IN ULONG CreateOptions
,
9251 IN PVOID EaBuffer OPTIONAL
,
9258 OUT PHANDLE KeyHandle
,
9259 IN ACCESS_MASK DesiredAccess
,
9260 IN POBJECT_ATTRIBUTES ObjectAttributes
,
9261 IN ULONG TitleIndex
,
9262 IN PUNICODE_STRING Class OPTIONAL
,
9263 IN ULONG CreateOptions
,
9264 OUT PULONG Disposition OPTIONAL
);
9270 OUT PHANDLE TimerHandle
,
9271 IN ACCESS_MASK DesiredAccess
,
9272 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
9273 IN TIMER_TYPE TimerType
);
9279 IN HANDLE KeyHandle
);
9285 IN HANDLE KeyHandle
,
9286 IN PUNICODE_STRING ValueName
);
9291 NtDeviceIoControlFile(
9292 IN HANDLE DeviceHandle
,
9293 IN HANDLE Event OPTIONAL
,
9294 IN PIO_APC_ROUTINE UserApcRoutine OPTIONAL
,
9295 IN PVOID UserApcContext OPTIONAL
,
9296 OUT PIO_STATUS_BLOCK IoStatusBlock
,
9297 IN ULONG IoControlCode
,
9298 IN PVOID InputBuffer
,
9299 IN ULONG InputBufferSize
,
9300 OUT PVOID OutputBuffer
,
9301 IN ULONG OutputBufferSize
);
9306 ZwDeviceIoControlFile(
9307 IN HANDLE DeviceHandle
,
9308 IN HANDLE Event OPTIONAL
,
9309 IN PIO_APC_ROUTINE UserApcRoutine OPTIONAL
,
9310 IN PVOID UserApcContext OPTIONAL
,
9311 OUT PIO_STATUS_BLOCK IoStatusBlock
,
9312 IN ULONG IoControlCode
,
9313 IN PVOID InputBuffer
,
9314 IN ULONG InputBufferSize
,
9315 OUT PVOID OutputBuffer
,
9316 IN ULONG OutputBufferSize
);
9322 IN HANDLE KeyHandle
,
9324 IN KEY_INFORMATION_CLASS KeyInformationClass
,
9325 OUT PVOID KeyInformation
,
9327 OUT PULONG ResultLength
);
9332 ZwEnumerateValueKey(
9333 IN HANDLE KeyHandle
,
9335 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
,
9336 OUT PVOID KeyValueInformation
,
9338 OUT PULONG ResultLength
);
9344 IN HANDLE KeyHandle
);
9349 ZwMakeTemporaryObject(
9356 IN HANDLE SectionHandle
,
9357 IN HANDLE ProcessHandle
,
9358 IN OUT PVOID
*BaseAddress
,
9359 IN ULONG_PTR ZeroBits
,
9360 IN SIZE_T CommitSize
,
9361 IN OUT PLARGE_INTEGER SectionOffset OPTIONAL
,
9362 IN OUT PSIZE_T ViewSize
,
9363 IN SECTION_INHERIT InheritDisposition
,
9364 IN ULONG AllocationType
,
9371 IN HANDLE SectionHandle
,
9372 IN HANDLE ProcessHandle
,
9373 IN OUT PVOID
*BaseAddress
,
9374 IN ULONG_PTR ZeroBits
,
9375 IN SIZE_T CommitSize
,
9376 IN OUT PLARGE_INTEGER SectionOffset OPTIONAL
,
9377 IN OUT PSIZE_T ViewSize
,
9378 IN SECTION_INHERIT InheritDisposition
,
9379 IN ULONG AllocationType
,
9386 OUT PHANDLE FileHandle
,
9387 IN ACCESS_MASK DesiredAccess
,
9388 IN POBJECT_ATTRIBUTES ObjectAttributes
,
9389 OUT PIO_STATUS_BLOCK IoStatusBlock
,
9390 IN ULONG ShareAccess
,
9391 IN ULONG OpenOptions
);
9397 OUT PHANDLE FileHandle
,
9398 IN ACCESS_MASK DesiredAccess
,
9399 IN POBJECT_ATTRIBUTES ObjectAttributes
,
9400 OUT PIO_STATUS_BLOCK IoStatusBlock
,
9401 IN ULONG ShareAccess
,
9402 IN ULONG OpenOptions
);
9408 OUT PHANDLE KeyHandle
,
9409 IN ACCESS_MASK DesiredAccess
,
9410 IN POBJECT_ATTRIBUTES ObjectAttributes
);
9416 OUT PHANDLE SectionHandle
,
9417 IN ACCESS_MASK DesiredAccess
,
9418 IN POBJECT_ATTRIBUTES ObjectAttributes
);
9423 ZwOpenSymbolicLinkObject(
9424 OUT PHANDLE LinkHandle
,
9425 IN ACCESS_MASK DesiredAccess
,
9426 IN POBJECT_ATTRIBUTES ObjectAttributes
);
9432 OUT PHANDLE TimerHandle
,
9433 IN ACCESS_MASK DesiredAccess
,
9434 IN POBJECT_ATTRIBUTES ObjectAttributes
);
9439 ZwQueryInformationFile(
9440 IN HANDLE FileHandle
,
9441 OUT PIO_STATUS_BLOCK IoStatusBlock
,
9442 OUT PVOID FileInformation
,
9444 IN FILE_INFORMATION_CLASS FileInformationClass
);
9450 IN HANDLE KeyHandle
,
9451 IN KEY_INFORMATION_CLASS KeyInformationClass
,
9452 OUT PVOID KeyInformation
,
9454 OUT PULONG ResultLength
);
9459 ZwQuerySymbolicLinkObject(
9460 IN HANDLE LinkHandle
,
9461 IN OUT PUNICODE_STRING LinkTarget
,
9462 OUT PULONG ReturnedLength OPTIONAL
);
9468 IN HANDLE KeyHandle
,
9469 IN PUNICODE_STRING ValueName
,
9470 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
,
9471 OUT PVOID KeyValueInformation
,
9473 OUT PULONG ResultLength
);
9479 IN HANDLE FileHandle
,
9480 IN HANDLE Event OPTIONAL
,
9481 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
9482 IN PVOID ApcContext OPTIONAL
,
9483 OUT PIO_STATUS_BLOCK IoStatusBlock
,
9486 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
9487 IN PULONG Key OPTIONAL
);
9493 IN HANDLE FileHandle
,
9494 IN HANDLE Event OPTIONAL
,
9495 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
9496 IN PVOID ApcContext OPTIONAL
,
9497 OUT PIO_STATUS_BLOCK IoStatusBlock
,
9500 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
9501 IN PULONG Key OPTIONAL
);
9507 IN HANDLE EventHandle
,
9508 OUT PLONG PreviousState OPTIONAL
);
9514 IN HANDLE EventHandle
,
9515 OUT PLONG PreviousState OPTIONAL
);
9520 ZwSetInformationFile(
9521 IN HANDLE FileHandle
,
9522 OUT PIO_STATUS_BLOCK IoStatusBlock
,
9523 IN PVOID FileInformation
,
9525 IN FILE_INFORMATION_CLASS FileInformationClass
);
9530 ZwSetInformationThread(
9531 IN HANDLE ThreadHandle
,
9532 IN THREADINFOCLASS ThreadInformationClass
,
9533 IN PVOID ThreadInformation
,
9534 IN ULONG ThreadInformationLength
);
9540 IN HANDLE TimerHandle
,
9541 IN PLARGE_INTEGER DueTime
,
9542 IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL
,
9543 IN PVOID TimerContext OPTIONAL
,
9544 IN BOOLEAN WakeTimer
,
9545 IN LONG Period OPTIONAL
,
9546 OUT PBOOLEAN PreviousState OPTIONAL
);
9552 IN HANDLE KeyHandle
,
9553 IN PUNICODE_STRING ValueName
,
9554 IN ULONG TitleIndex OPTIONAL
,
9559 /* [Nt|Zw]MapViewOfSection.InheritDisposition constants */
9560 #define AT_EXTENDABLE_FILE 0x00002000
9561 #define AT_RESERVED 0x20000000
9562 #define AT_ROUND_TO_PAGE 0x40000000
9567 NtUnmapViewOfSection(
9568 IN HANDLE ProcessHandle
,
9569 IN PVOID BaseAddress
);
9574 ZwUnmapViewOfSection(
9575 IN HANDLE ProcessHandle
,
9576 IN PVOID BaseAddress
);
9581 NtWaitForSingleObject(
9582 IN HANDLE ObjectHandle
,
9583 IN BOOLEAN Alertable
,
9584 IN PLARGE_INTEGER TimeOut OPTIONAL
);
9589 ZwWaitForSingleObject(
9590 IN HANDLE ObjectHandle
,
9591 IN BOOLEAN Alertable
,
9592 IN PLARGE_INTEGER TimeOut OPTIONAL
);
9598 IN HANDLE FileHandle
,
9599 IN HANDLE Event OPTIONAL
,
9600 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
9601 IN PVOID ApcContext OPTIONAL
,
9602 OUT PIO_STATUS_BLOCK IoStatusBlock
,
9605 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
9606 IN PULONG Key OPTIONAL
);
9612 IN HANDLE FileHandle
,
9613 IN HANDLE Event OPTIONAL
,
9614 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
9615 IN PVOID ApcContext OPTIONAL
,
9616 OUT PIO_STATUS_BLOCK IoStatusBlock
,
9619 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
9620 IN PULONG Key OPTIONAL
);
9624 /** Power management support routines **/
9630 IN PDEVICE_OBJECT DeviceObject
,
9636 PoRegisterDeviceForIdleDetection(
9637 IN PDEVICE_OBJECT DeviceObject
,
9638 IN ULONG ConservationIdleTime
,
9639 IN ULONG PerformanceIdleTime
,
9640 IN DEVICE_POWER_STATE State
);
9645 PoRegisterSystemState(
9646 IN PVOID StateHandle
,
9647 IN EXECUTION_STATE Flags
);
9653 IN PDEVICE_OBJECT DeviceObject
,
9654 IN UCHAR MinorFunction
,
9655 IN POWER_STATE PowerState
,
9656 IN PREQUEST_POWER_COMPLETE CompletionFunction
,
9658 OUT PIRP
*Irp OPTIONAL
);
9663 PoRequestShutdownEvent(
9670 PULONG IdlePointer
);
9672 #define PoSetDeviceBusy(IdlePointer) \
9673 ((void)(*(IdlePointer) = 0))
9679 IN PDEVICE_OBJECT DeviceObject
,
9680 IN POWER_STATE_TYPE Type
,
9681 IN POWER_STATE State
);
9687 IN EXECUTION_STATE Flags
);
9692 PoStartNextPowerIrp(
9698 PoUnregisterSystemState(
9699 IN PVOID StateHandle
);
9703 /** WMI library support routines **/
9708 IN PDEVICE_OBJECT DeviceObject
,
9711 IN ULONG BufferUsed
,
9712 IN CCHAR PriorityBoost
);
9717 IN PDEVICE_OBJECT DeviceObject
,
9719 IN ULONG InstanceIndex
,
9720 IN ULONG EventDataSize
,
9721 IN PVOID EventData
);
9726 WmiQueryTraceInformation(
9727 IN TRACE_INFORMATION_CLASS TraceInformationClass
,
9728 OUT PVOID TraceInformation
,
9729 IN ULONG TraceInformationLength
,
9730 OUT PULONG RequiredLength OPTIONAL
,
9731 IN PVOID Buffer OPTIONAL
);
9736 IN PWMILIB_CONTEXT WmiLibInfo
,
9737 IN PDEVICE_OBJECT DeviceObject
,
9739 OUT PSYSCTL_IRP_DISPOSITION IrpDisposition
);
9745 IN TRACEHANDLE LoggerHandle
,
9746 IN ULONG MessageFlags
,
9747 IN LPGUID MessageGuid
,
9748 IN USHORT MessageNumber
,
9752 /* FIXME: Get va_list from where? */
9757 IN TRACEHANDLE LoggerHandle
,
9758 IN ULONG MessageFlags
,
9759 IN LPGUID MessageGuid
,
9760 IN USHORT MessageNumber
,
9761 IN
va_list MessageArgList
);
9765 /** Kernel debugger routines **/
9782 KdRefreshDebuggerNotPresent(
9786 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
9791 IN KD_OPTION Option
,
9792 IN ULONG InBufferBytes OPTIONAL
,
9794 IN ULONG OutBufferBytes OPTIONAL
,
9795 OUT PVOID OutBuffer
,
9796 OUT PULONG OutBufferNeeded OPTIONAL
);
9807 DbgBreakPointWithStatus(
9820 IN ULONG ComponentId
,
9828 IN ULONG ComponentId
,
9835 vDbgPrintExWithPrefix(
9837 IN ULONG ComponentId
,
9845 DbgPrintReturnControlC(
9854 IN ULONG MaximumResponseLength
9860 DbgQueryDebugFilterState(
9861 IN ULONG ComponentId
,
9867 DbgSetDebugFilterState(
9868 IN ULONG ComponentId
,
9874 #define KdPrint(_x_) DbgPrint _x_
9875 #define KdPrintEx(_x_) DbgPrintEx _x_
9876 #define KdBreakPoint() DbgBreakPoint()
9877 #define KdBreakPointWithStatus(s) DbgBreakPointWithStatus(s)
9881 #define KdPrint(_x_)
9882 #define KdPrintEx(_x_)
9883 #define KdBreakPoint()
9884 #define KdBreakPointWithStatus(s)
9888 #if defined(__GNUC__)
9890 extern NTKERNELAPI BOOLEAN KdDebuggerNotPresent
;
9891 extern NTKERNELAPI BOOLEAN KdDebuggerEnabled
;
9892 #define KD_DEBUGGER_ENABLED KdDebuggerEnabled
9893 #define KD_DEBUGGER_NOT_PRESENT KdDebuggerNotPresent
9895 #elif defined(_NTDDK_) || defined(_NTHAL_) || defined(_WDMDDK_) || defined(_NTOSP_)
9897 extern NTKERNELAPI PBOOLEAN KdDebuggerNotPresent
;
9898 extern NTKERNELAPI PBOOLEAN KdDebuggerEnabled
;
9899 #define KD_DEBUGGER_ENABLED *KdDebuggerEnabled
9900 #define KD_DEBUGGER_NOT_PRESENT *KdDebuggerNotPresent
9904 extern BOOLEAN KdDebuggerNotPresent
;
9905 extern BOOLEAN KdDebuggerEnabled
;
9906 #define KD_DEBUGGER_ENABLED KdDebuggerEnabled
9907 #define KD_DEBUGGER_NOT_PRESENT KdDebuggerNotPresent
9911 /** Stuff from winnt4.h */
9913 #ifndef DMA_MACROS_DEFINED
9915 #if (NTDDI_VERSION >= NTDDI_WIN2K)
9917 //DECLSPEC_DEPRECATED_DDK
9921 IoFlushAdapterBuffers(
9922 IN PADAPTER_OBJECT AdapterObject
,
9924 IN PVOID MapRegisterBase
,
9927 IN BOOLEAN WriteToDevice
);
9929 //DECLSPEC_DEPRECATED_DDK
9933 IoFreeAdapterChannel(
9934 IN PADAPTER_OBJECT AdapterObject
);
9936 //DECLSPEC_DEPRECATED_DDK
9941 IN PADAPTER_OBJECT AdapterObject
,
9942 IN PVOID MapRegisterBase
,
9943 IN ULONG NumberOfMapRegisters
);
9945 //DECLSPEC_DEPRECATED_DDK
9950 IN PADAPTER_OBJECT AdapterObject
,
9952 IN PVOID MapRegisterBase
,
9954 IN OUT PULONG Length
,
9955 IN BOOLEAN WriteToDevice
);
9958 #endif // (NTDDI_VERSION >= NTDDI_WIN2K)
9959 #endif // !defined(DMA_MACROS_DEFINED)
9965 IN PUNICODE_STRING RegistryPath
,
9966 IN PUNICODE_STRING DriverClassName OPTIONAL
,
9967 IN PDRIVER_OBJECT DriverObject
,
9968 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
9969 IN PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources
,
9970 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
9975 IoAttachDeviceByPointer(
9976 IN PDEVICE_OBJECT SourceDevice
,
9977 IN PDEVICE_OBJECT TargetDevice
);
9982 MmIsNonPagedSystemAddressValid(
9983 IN PVOID VirtualAddress
);
9985 #if defined(_AMD64_) || defined(_IA64_)
9986 //DECLSPEC_DEPRECATED_DDK_WINXP
9990 RtlLargeIntegerDivide(
9991 IN LARGE_INTEGER Dividend
,
9992 IN LARGE_INTEGER Divisor
,
9993 IN OUT PLARGE_INTEGER Remainder
)
9996 ret
.QuadPart
= Dividend
.QuadPart
/ Divisor
.QuadPart
;
9998 Remainder
->QuadPart
= Dividend
.QuadPart
% Divisor
.QuadPart
;
10005 RtlLargeIntegerDivide(
10006 IN LARGE_INTEGER Dividend
,
10007 IN LARGE_INTEGER Divisor
,
10008 IN OUT PLARGE_INTEGER Remainder
);
10014 ExInterlockedDecrementLong(
10016 IN PKSPIN_LOCK Lock
);
10021 ExInterlockedExchangeUlong(
10024 IN PKSPIN_LOCK Lock
);
10029 ExInterlockedIncrementLong(
10031 IN PKSPIN_LOCK Lock
);
10036 HalAcquireDisplayOwnership(
10037 IN PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters
);
10042 HalAllocateAdapterChannel(
10043 IN PADAPTER_OBJECT AdapterObject
,
10044 IN PWAIT_CONTEXT_BLOCK Wcb
,
10045 IN ULONG NumberOfMapRegisters
,
10046 IN PDRIVER_CONTROL ExecutionRoutine
);
10051 HalAllocateCommonBuffer(
10052 IN PADAPTER_OBJECT AdapterObject
,
10054 OUT PPHYSICAL_ADDRESS LogicalAddress
,
10055 IN BOOLEAN CacheEnabled
);
10060 HalAssignSlotResources(
10061 IN PUNICODE_STRING RegistryPath
,
10062 IN PUNICODE_STRING DriverClassName
,
10063 IN PDRIVER_OBJECT DriverObject
,
10064 IN PDEVICE_OBJECT DeviceObject
,
10065 IN INTERFACE_TYPE BusType
,
10066 IN ULONG BusNumber
,
10067 IN ULONG SlotNumber
,
10068 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
10073 HalFreeCommonBuffer(
10074 IN PADAPTER_OBJECT AdapterObject
,
10076 IN PHYSICAL_ADDRESS LogicalAddress
,
10077 IN PVOID VirtualAddress
,
10078 IN BOOLEAN CacheEnabled
);
10084 IN PDEVICE_DESCRIPTION DeviceDescription
,
10085 IN OUT PULONG NumberOfMapRegisters
);
10091 IN BUS_DATA_TYPE BusDataType
,
10092 IN ULONG BusNumber
,
10093 IN ULONG SlotNumber
,
10100 HalGetBusDataByOffset(
10101 IN BUS_DATA_TYPE BusDataType
,
10102 IN ULONG BusNumber
,
10103 IN ULONG SlotNumber
,
10111 HalGetDmaAlignmentRequirement(
10117 HalGetInterruptVector(
10118 IN INTERFACE_TYPE InterfaceType
,
10119 IN ULONG BusNumber
,
10120 IN ULONG BusInterruptLevel
,
10121 IN ULONG BusInterruptVector
,
10123 OUT PKAFFINITY Affinity
);
10129 IN PADAPTER_OBJECT AdapterObject
);
10135 IN BUS_DATA_TYPE BusDataType
,
10136 IN ULONG BusNumber
,
10137 IN ULONG SlotNumber
,
10144 HalSetBusDataByOffset(
10145 IN BUS_DATA_TYPE BusDataType
,
10146 IN ULONG BusNumber
,
10147 IN ULONG SlotNumber
,
10155 HalTranslateBusAddress(
10156 IN INTERFACE_TYPE InterfaceType
,
10157 IN ULONG BusNumber
,
10158 IN PHYSICAL_ADDRESS BusAddress
,
10159 IN OUT PULONG AddressSpace
,
10160 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
10165 RtlLargeIntegerEqualToZero(
10166 IN LARGE_INTEGER Operand
);
10171 RtlLargeIntegerGreaterOrEqualToZero(
10172 IN LARGE_INTEGER Operand
);
10177 RtlLargeIntegerGreaterThan(
10178 IN LARGE_INTEGER Operand1
,
10179 IN LARGE_INTEGER Operand2
);
10184 RtlLargeIntegerGreaterThanOrEqualTo(
10185 IN LARGE_INTEGER Operand1
,
10186 IN LARGE_INTEGER Operand2
);
10191 RtlLargeIntegerGreaterThanZero(
10192 IN LARGE_INTEGER Operand
);
10197 RtlLargeIntegerLessOrEqualToZero(
10198 IN LARGE_INTEGER Operand
);
10203 RtlLargeIntegerLessThan(
10204 IN LARGE_INTEGER Operand1
,
10205 IN LARGE_INTEGER Operand2
);
10210 RtlLargeIntegerLessThanOrEqualTo(
10211 IN LARGE_INTEGER Operand1
,
10212 IN LARGE_INTEGER Operand2
);
10217 RtlLargeIntegerLessThanZero(
10218 IN LARGE_INTEGER Operand
);
10223 RtlLargeIntegerNegate(
10224 IN LARGE_INTEGER Subtrahend
);
10229 RtlLargeIntegerNotEqualTo(
10230 IN LARGE_INTEGER Operand1
,
10231 IN LARGE_INTEGER Operand2
);
10236 RtlLargeIntegerNotEqualToZero(
10237 IN LARGE_INTEGER Operand
);
10242 RtlLargeIntegerShiftLeft(
10243 IN LARGE_INTEGER LargeInteger
,
10244 IN CCHAR ShiftCount
);
10249 RtlLargeIntegerShiftRight(
10250 IN LARGE_INTEGER LargeInteger
,
10251 IN CCHAR ShiftCount
);
10256 RtlLargeIntegerSubtract(
10257 IN LARGE_INTEGER Minuend
,
10258 IN LARGE_INTEGER Subtrahend
);
10263 * COMPUTE_PAGES_SPANNED(
10267 #define COMPUTE_PAGES_SPANNED(Va, \
10269 (ADDRESS_AND_SIZE_TO_SPAN_PAGES(Va, Size))
10273 ** Architecture specific structures
10281 Exfi386InterlockedIncrementLong(
10287 Exfi386InterlockedDecrementLong(
10293 Exfi386InterlockedExchangeUlong(
10297 #define ExInterlockedIncrementLong(Addend,Lock) Exfi386InterlockedIncrementLong(Addend)
10298 #define ExInterlockedDecrementLong(Addend,Lock) Exfi386InterlockedDecrementLong(Addend)
10299 #define ExInterlockedExchangeUlong(Target, Value, Lock) Exfi386InterlockedExchangeUlong(Target, Value)
10305 // NT-ARM is not documented
10307 #include <armddk.h>
10314 #endif /* __WINDDK_H */