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.
27 #pragma GCC system_header
35 ** Definitions specific to this Device Driver Kit
37 #define DDKAPI __attribute__((stdcall))
38 #define DDKFASTAPI __attribute__((fastcall))
39 #define DDKCDECLAPI __attribute__((cdecl))
41 #if defined(_NTOSKRNL_)
43 #define NTOSAPI DECL_EXPORT
45 #define DECLARE_INTERNAL_OBJECT(x) typedef struct _##x; typedef struct _##x *P##x;
46 #define DECLARE_INTERNAL_OBJECT2(x,y) typedef struct _##x; typedef struct _##x *P##y;
49 #define NTOSAPI DECL_IMPORT
51 #define DECLARE_INTERNAL_OBJECT(x) struct _##x; typedef struct _##x *P##x;
52 #define DECLARE_INTERNAL_OBJECT2(x,y) struct _##x; typedef struct _##x *P##y;
55 /* Pseudo modifiers for parameters */
62 #define VOLATILE volatile
64 #define RESTRICTED_POINTER
65 #define POINTER_ALIGNMENT
67 #ifdef NONAMELESSUNION
68 # define _DDK_DUMMYUNION_MEMBER(name) DUMMYUNIONNAME.name
69 # define _DDK_DUMMYUNION_N_MEMBER(n, name) DUMMYUNIONNAME##n.name
71 # define _DDK_DUMMYUNION_MEMBER(name) name
72 # define _DDK_DUMMYUNION_N_MEMBER(n, name) name
76 ** Forward declarations
88 struct _DEVICE_OBJECT
;
89 struct _DRIVER_OBJECT
;
90 struct _SECTION_OBJECT
;
91 struct _IO_STATUS_BLOCK
;
92 struct _DEVICE_DESCRIPTION
;
93 struct _SCATTER_GATHER_LIST
;
95 DECLARE_INTERNAL_OBJECT(ADAPTER_OBJECT
)
96 DECLARE_INTERNAL_OBJECT(DMA_ADAPTER
)
97 DECLARE_INTERNAL_OBJECT(IO_STATUS_BLOCK
)
98 DECLARE_INTERNAL_OBJECT(SECTION_OBJECT
)
101 /* FIXME: Unknown definitions */
102 struct _SET_PARTITION_INFORMATION_EX
;
103 typedef ULONG WAIT_TYPE
;
106 typedef HANDLE TRACEHANDLE
;
107 typedef PVOID PWMILIB_CONTEXT
;
108 typedef PVOID PSYSCTL_IRP_DISPOSITION
;
109 typedef ULONG LOGICAL
;
113 ** Routines specific to this DDK
116 #define TAG(_a, _b, _c, _d) (ULONG) \
117 (((_a) << 0) + ((_b) << 8) + ((_c) << 16) + ((_d) << 24))
119 static __inline
struct _KPCR
* KeGetCurrentKPCR(
124 __asm__
__volatile__ ("movl %%fs:0x1C, %0\n\t"
128 return (struct _KPCR
*) Value
;
131 static __inline
struct _KPRCB
* KeGetCurrentPrcb(
136 __asm__
__volatile__ ("movl %%fs:0x20, %0\n\t"
140 return (struct _KPRCB
*) Value
;
147 typedef LONG KPRIORITY
;
148 typedef UCHAR KIRQL
, *PKIRQL
;
149 typedef ULONG_PTR KSPIN_LOCK
, *PKSPIN_LOCK
;
150 typedef ULONG KAFFINITY
, *PKAFFINITY
;
151 typedef UCHAR KPROCESSOR_MODE
;
160 /* Structures not exposed to drivers */
161 typedef struct _IO_TIMER
*PIO_TIMER
;
162 typedef struct _KPROCESS
*PKPROCESS
;
163 typedef struct _EPROCESS
*PEPROCESS
;
164 typedef struct _ETHREAD
*PETHREAD
;
165 typedef struct _KINTERRUPT
*PKINTERRUPT
;
166 typedef struct _OBJECT_TYPE
*POBJECT_TYPE
;
167 typedef struct _KTHREAD
*PKTHREAD
, *PRKTHREAD
;
168 typedef struct _COMPRESSED_DATA_INFO
*PCOMPRESSED_DATA_INFO
;
169 typedef struct _HAL_DISPATCH_TABLE
*PHAL_DISPATCH_TABLE
;
170 typedef struct _HAL_PRIVATE_DISPATCH_TABLE
*PHAL_PRIVATE_DISPATCH_TABLE
;
171 typedef struct _DEVICE_HANDLER_OBJECT
*PDEVICE_HANDLER_OBJECT
;
172 typedef struct _BUS_HANDLER
*PBUS_HANDLER
;
173 typedef struct _DRIVE_LAYOUT_INFORMATION
*PDRIVE_LAYOUT_INFORMATION
;
174 typedef struct _DRIVE_LAYOUT_INFORMATION_EX
*PDRIVE_LAYOUT_INFORMATION_EX
;
175 typedef struct _NAMED_PIPE_CREATE_PARAMETERS
*PNAMED_PIPE_CREATE_PARAMETERS
;
176 typedef struct _MAILSLOT_CREATE_PARAMETERS
*PMAILSLOT_CREATE_PARAMETERS
;
177 typedef struct _FILE_GET_QUOTA_INFORMATION
*PFILE_GET_QUOTA_INFORMATION
;
180 #define MAXIMUM_PROCESSORS 32
182 #define MAXIMUM_WAIT_OBJECTS 64
184 #define METHOD_BUFFERED 0
185 #define METHOD_IN_DIRECT 1
186 #define METHOD_OUT_DIRECT 2
187 #define METHOD_NEITHER 3
189 #define LOW_PRIORITY 0
190 #define LOW_REALTIME_PRIORITY 16
191 #define HIGH_PRIORITY 31
192 #define MAXIMUM_PRIORITY 32
194 #define FILE_SUPERSEDED 0x00000000
195 #define FILE_OPENED 0x00000001
196 #define FILE_CREATED 0x00000002
197 #define FILE_OVERWRITTEN 0x00000003
198 #define FILE_EXISTS 0x00000004
199 #define FILE_DOES_NOT_EXIST 0x00000005
201 #define FILE_USE_FILE_POINTER_POSITION 0xfffffffe
202 #define FILE_WRITE_TO_END_OF_FILE 0xffffffff
204 /* also in winnt.h */
205 #define FILE_LIST_DIRECTORY 0x00000001
206 #define FILE_READ_DATA 0x00000001
207 #define FILE_ADD_FILE 0x00000002
208 #define FILE_WRITE_DATA 0x00000002
209 #define FILE_ADD_SUBDIRECTORY 0x00000004
210 #define FILE_APPEND_DATA 0x00000004
211 #define FILE_CREATE_PIPE_INSTANCE 0x00000004
212 #define FILE_READ_EA 0x00000008
213 #define FILE_WRITE_EA 0x00000010
214 #define FILE_EXECUTE 0x00000020
215 #define FILE_TRAVERSE 0x00000020
216 #define FILE_DELETE_CHILD 0x00000040
217 #define FILE_READ_ATTRIBUTES 0x00000080
218 #define FILE_WRITE_ATTRIBUTES 0x00000100
220 #define FILE_SHARE_READ 0x00000001
221 #define FILE_SHARE_WRITE 0x00000002
222 #define FILE_SHARE_DELETE 0x00000004
223 #define FILE_SHARE_VALID_FLAGS 0x00000007
225 #define FILE_ATTRIBUTE_READONLY 0x00000001
226 #define FILE_ATTRIBUTE_HIDDEN 0x00000002
227 #define FILE_ATTRIBUTE_SYSTEM 0x00000004
228 #define FILE_ATTRIBUTE_DIRECTORY 0x00000010
229 #define FILE_ATTRIBUTE_ARCHIVE 0x00000020
230 #define FILE_ATTRIBUTE_DEVICE 0x00000040
231 #define FILE_ATTRIBUTE_NORMAL 0x00000080
232 #define FILE_ATTRIBUTE_TEMPORARY 0x00000100
233 #define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200
234 #define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400
235 #define FILE_ATTRIBUTE_COMPRESSED 0x00000800
236 #define FILE_ATTRIBUTE_OFFLINE 0x00001000
237 #define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000
238 #define FILE_ATTRIBUTE_ENCRYPTED 0x00004000
240 #define FILE_ATTRIBUTE_VALID_FLAGS 0x00007fb7
241 #define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x000031a7
243 #define FILE_COPY_STRUCTURED_STORAGE 0x00000041
244 #define FILE_STRUCTURED_STORAGE 0x00000441
246 #define FILE_VALID_OPTION_FLAGS 0x00ffffff
247 #define FILE_VALID_PIPE_OPTION_FLAGS 0x00000032
248 #define FILE_VALID_MAILSLOT_OPTION_FLAGS 0x00000032
249 #define FILE_VALID_SET_FLAGS 0x00000036
251 #define FILE_SUPERSEDE 0x00000000
252 #define FILE_OPEN 0x00000001
253 #define FILE_CREATE 0x00000002
254 #define FILE_OPEN_IF 0x00000003
255 #define FILE_OVERWRITE 0x00000004
256 #define FILE_OVERWRITE_IF 0x00000005
257 #define FILE_MAXIMUM_DISPOSITION 0x00000005
259 #define FILE_DIRECTORY_FILE 0x00000001
260 #define FILE_WRITE_THROUGH 0x00000002
261 #define FILE_SEQUENTIAL_ONLY 0x00000004
262 #define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008
263 #define FILE_SYNCHRONOUS_IO_ALERT 0x00000010
264 #define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020
265 #define FILE_NON_DIRECTORY_FILE 0x00000040
266 #define FILE_CREATE_TREE_CONNECTION 0x00000080
267 #define FILE_COMPLETE_IF_OPLOCKED 0x00000100
268 #define FILE_NO_EA_KNOWLEDGE 0x00000200
269 #define FILE_OPEN_FOR_RECOVERY 0x00000400
270 #define FILE_RANDOM_ACCESS 0x00000800
271 #define FILE_DELETE_ON_CLOSE 0x00001000
272 #define FILE_OPEN_BY_FILE_ID 0x00002000
273 #define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000
274 #define FILE_NO_COMPRESSION 0x00008000
275 #define FILE_RESERVE_OPFILTER 0x00100000
276 #define FILE_OPEN_REPARSE_POINT 0x00200000
277 #define FILE_OPEN_NO_RECALL 0x00400000
278 #define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000
280 #define FILE_ANY_ACCESS 0x00000000
281 #define FILE_SPECIAL_ACCESS FILE_ANY_ACCESS
282 #define FILE_READ_ACCESS 0x00000001
283 #define FILE_WRITE_ACCESS 0x00000002
285 #define FILE_ALL_ACCESS \
286 (STANDARD_RIGHTS_REQUIRED | \
290 #define FILE_GENERIC_EXECUTE \
291 (STANDARD_RIGHTS_EXECUTE | \
292 FILE_READ_ATTRIBUTES | \
296 #define FILE_GENERIC_READ \
297 (STANDARD_RIGHTS_READ | \
299 FILE_READ_ATTRIBUTES | \
303 #define FILE_GENERIC_WRITE \
304 (STANDARD_RIGHTS_WRITE | \
306 FILE_WRITE_ATTRIBUTES | \
312 #define DIRECTORY_QUERY (0x0001)
313 #define DIRECTORY_TRAVERSE (0x0002)
314 #define DIRECTORY_CREATE_OBJECT (0x0004)
315 #define DIRECTORY_CREATE_SUBDIRECTORY (0x0008)
316 #define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF)
318 /* Exported object types */
319 extern NTOSAPI POBJECT_TYPE ExDesktopObjectType
;
320 extern NTOSAPI POBJECT_TYPE ExEventObjectType
;
321 extern NTOSAPI POBJECT_TYPE ExSemaphoreObjectType
;
322 extern NTOSAPI POBJECT_TYPE ExWindowStationObjectType
;
323 extern NTOSAPI POBJECT_TYPE IoAdapterObjectType
;
324 extern NTOSAPI ULONG IoDeviceHandlerObjectSize
;
325 extern NTOSAPI POBJECT_TYPE IoDeviceHandlerObjectType
;
326 extern NTOSAPI POBJECT_TYPE IoDeviceObjectType
;
327 extern NTOSAPI POBJECT_TYPE IoDriverObjectType
;
328 extern NTOSAPI POBJECT_TYPE IoFileObjectType
;
329 extern NTOSAPI POBJECT_TYPE LpcPortObjectType
;
330 extern NTOSAPI POBJECT_TYPE MmSectionObjectType
;
331 extern NTOSAPI POBJECT_TYPE SeTokenObjectType
;
333 extern NTOSAPI CCHAR KeNumberProcessors
;
334 extern NTOSAPI PHAL_PRIVATE_DISPATCH_TABLE HalPrivateDispatchTable
;
338 ** IRP function codes
341 #define IRP_MJ_CREATE 0x00
342 #define IRP_MJ_CREATE_NAMED_PIPE 0x01
343 #define IRP_MJ_CLOSE 0x02
344 #define IRP_MJ_READ 0x03
345 #define IRP_MJ_WRITE 0x04
346 #define IRP_MJ_QUERY_INFORMATION 0x05
347 #define IRP_MJ_SET_INFORMATION 0x06
348 #define IRP_MJ_QUERY_EA 0x07
349 #define IRP_MJ_SET_EA 0x08
350 #define IRP_MJ_FLUSH_BUFFERS 0x09
351 #define IRP_MJ_QUERY_VOLUME_INFORMATION 0x0a
352 #define IRP_MJ_SET_VOLUME_INFORMATION 0x0b
353 #define IRP_MJ_DIRECTORY_CONTROL 0x0c
354 #define IRP_MJ_FILE_SYSTEM_CONTROL 0x0d
355 #define IRP_MJ_DEVICE_CONTROL 0x0e
356 #define IRP_MJ_INTERNAL_DEVICE_CONTROL 0x0f
357 #define IRP_MJ_SCSI 0x0f
358 #define IRP_MJ_SHUTDOWN 0x10
359 #define IRP_MJ_LOCK_CONTROL 0x11
360 #define IRP_MJ_CLEANUP 0x12
361 #define IRP_MJ_CREATE_MAILSLOT 0x13
362 #define IRP_MJ_QUERY_SECURITY 0x14
363 #define IRP_MJ_SET_SECURITY 0x15
364 #define IRP_MJ_POWER 0x16
365 #define IRP_MJ_SYSTEM_CONTROL 0x17
366 #define IRP_MJ_DEVICE_CHANGE 0x18
367 #define IRP_MJ_QUERY_QUOTA 0x19
368 #define IRP_MJ_SET_QUOTA 0x1a
369 #define IRP_MJ_PNP 0x1b
370 #define IRP_MJ_PNP_POWER 0x1b
371 #define IRP_MJ_MAXIMUM_FUNCTION 0x1b
373 #define IRP_MN_QUERY_DIRECTORY 0x01
374 #define IRP_MN_NOTIFY_CHANGE_DIRECTORY 0x02
376 #define IRP_MN_USER_FS_REQUEST 0x00
377 #define IRP_MN_MOUNT_VOLUME 0x01
378 #define IRP_MN_VERIFY_VOLUME 0x02
379 #define IRP_MN_LOAD_FILE_SYSTEM 0x03
380 #define IRP_MN_TRACK_LINK 0x04
381 #define IRP_MN_KERNEL_CALL 0x04
383 #define IRP_MN_LOCK 0x01
384 #define IRP_MN_UNLOCK_SINGLE 0x02
385 #define IRP_MN_UNLOCK_ALL 0x03
386 #define IRP_MN_UNLOCK_ALL_BY_KEY 0x04
388 #define IRP_MN_NORMAL 0x00
389 #define IRP_MN_DPC 0x01
390 #define IRP_MN_MDL 0x02
391 #define IRP_MN_COMPLETE 0x04
392 #define IRP_MN_COMPRESSED 0x08
394 #define IRP_MN_MDL_DPC (IRP_MN_MDL | IRP_MN_DPC)
395 #define IRP_MN_COMPLETE_MDL (IRP_MN_COMPLETE | IRP_MN_MDL)
396 #define IRP_MN_COMPLETE_MDL_DPC (IRP_MN_COMPLETE_MDL | IRP_MN_DPC)
398 #define IRP_MN_SCSI_CLASS 0x01
400 #define IRP_MN_START_DEVICE 0x00
401 #define IRP_MN_QUERY_REMOVE_DEVICE 0x01
402 #define IRP_MN_REMOVE_DEVICE 0x02
403 #define IRP_MN_CANCEL_REMOVE_DEVICE 0x03
404 #define IRP_MN_STOP_DEVICE 0x04
405 #define IRP_MN_QUERY_STOP_DEVICE 0x05
406 #define IRP_MN_CANCEL_STOP_DEVICE 0x06
408 #define IRP_MN_QUERY_DEVICE_RELATIONS 0x07
409 #define IRP_MN_QUERY_INTERFACE 0x08
410 #define IRP_MN_QUERY_CAPABILITIES 0x09
411 #define IRP_MN_QUERY_RESOURCES 0x0A
412 #define IRP_MN_QUERY_RESOURCE_REQUIREMENTS 0x0B
413 #define IRP_MN_QUERY_DEVICE_TEXT 0x0C
414 #define IRP_MN_FILTER_RESOURCE_REQUIREMENTS 0x0D
416 #define IRP_MN_READ_CONFIG 0x0F
417 #define IRP_MN_WRITE_CONFIG 0x10
418 #define IRP_MN_EJECT 0x11
419 #define IRP_MN_SET_LOCK 0x12
420 #define IRP_MN_QUERY_ID 0x13
421 #define IRP_MN_QUERY_PNP_DEVICE_STATE 0x14
422 #define IRP_MN_QUERY_BUS_INFORMATION 0x15
423 #define IRP_MN_DEVICE_USAGE_NOTIFICATION 0x16
424 #define IRP_MN_SURPRISE_REMOVAL 0x17
425 #define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18
427 #define IRP_MN_WAIT_WAKE 0x00
428 #define IRP_MN_POWER_SEQUENCE 0x01
429 #define IRP_MN_SET_POWER 0x02
430 #define IRP_MN_QUERY_POWER 0x03
432 #define IRP_MN_QUERY_ALL_DATA 0x00
433 #define IRP_MN_QUERY_SINGLE_INSTANCE 0x01
434 #define IRP_MN_CHANGE_SINGLE_INSTANCE 0x02
435 #define IRP_MN_CHANGE_SINGLE_ITEM 0x03
436 #define IRP_MN_ENABLE_EVENTS 0x04
437 #define IRP_MN_DISABLE_EVENTS 0x05
438 #define IRP_MN_ENABLE_COLLECTION 0x06
439 #define IRP_MN_DISABLE_COLLECTION 0x07
440 #define IRP_MN_REGINFO 0x08
441 #define IRP_MN_EXECUTE_METHOD 0x09
443 #define IRP_MN_REGINFO_EX 0x0b
445 typedef enum _IO_ALLOCATION_ACTION
{
448 DeallocateObjectKeepRegisters
449 } IO_ALLOCATION_ACTION
, *PIO_ALLOCATION_ACTION
;
451 typedef IO_ALLOCATION_ACTION
452 (DDKAPI
*PDRIVER_CONTROL
)(
453 IN
struct _DEVICE_OBJECT
*DeviceObject
,
455 IN PVOID MapRegisterBase
,
459 (DDKAPI
*PDRIVER_LIST_CONTROL
)(
460 IN
struct _DEVICE_OBJECT
*DeviceObject
,
462 IN
struct _SCATTER_GATHER_LIST
*ScatterGather
,
466 (DDKAPI
*PDRIVER_ADD_DEVICE
)(
467 IN
struct _DRIVER_OBJECT
*DriverObject
,
468 IN
struct _DEVICE_OBJECT
*PhysicalDeviceObject
);
471 (DDKAPI
*PIO_COMPLETION_ROUTINE
)(
472 IN
struct _DEVICE_OBJECT
*DeviceObject
,
477 (DDKAPI
*PDRIVER_CANCEL
)(
478 IN
struct _DEVICE_OBJECT
*DeviceObject
,
479 IN
struct _IRP
*Irp
);
482 (DDKAPI
*PKDEFERRED_ROUTINE
)(
483 IN
struct _KDPC
*Dpc
,
484 IN PVOID DeferredContext
,
485 IN PVOID SystemArgument1
,
486 IN PVOID SystemArgument2
);
489 (DDKAPI
*PDRIVER_DISPATCH
)(
490 IN
struct _DEVICE_OBJECT
*DeviceObject
,
491 IN
struct _IRP
*Irp
);
494 (DDKAPI
*PIO_DPC_ROUTINE
)(
495 IN
struct _KDPC
*Dpc
,
496 IN
struct _DEVICE_OBJECT
*DeviceObject
,
501 (DDKAPI
*PMM_DLL_INITIALIZE
)(
502 IN PUNICODE_STRING RegistryPath
);
505 (DDKAPI
*PMM_DLL_UNLOAD
)(
509 (DDKAPI
*PDRIVER_ENTRY
)(
510 IN
struct _DRIVER_OBJECT
*DriverObject
,
511 IN PUNICODE_STRING RegistryPath
);
514 (DDKAPI
*PDRIVER_INITIALIZE
)(
515 IN
struct _DRIVER_OBJECT
*DriverObject
,
516 IN PUNICODE_STRING RegistryPath
);
519 (DDKAPI
*PKSERVICE_ROUTINE
)(
520 IN
struct _KINTERRUPT
*Interrupt
,
521 IN PVOID ServiceContext
);
524 (DDKAPI
*PIO_TIMER_ROUTINE
)(
525 IN
struct _DEVICE_OBJECT
*DeviceObject
,
529 (DDKAPI
*PDRIVER_REINITIALIZE
)(
530 IN
struct _DRIVER_OBJECT
*DriverObject
,
535 (DDKAPI
*PDRIVER_STARTIO
)(
536 IN
struct _DEVICE_OBJECT
*DeviceObject
,
537 IN
struct _IRP
*Irp
);
540 (DDKAPI
*PKSYNCHRONIZE_ROUTINE
)(
541 IN PVOID SynchronizeContext
);
544 (DDKAPI
*PDRIVER_UNLOAD
)(
545 IN
struct _DRIVER_OBJECT
*DriverObject
);
550 ** Plug and Play structures
554 (DDKAPI
*PINTERFACE_REFERENCE
)(
558 (DDKAPI
*PINTERFACE_DEREFERENCE
)(
562 (DDKAPI
*PTRANSLATE_BUS_ADDRESS
)(
564 IN PHYSICAL_ADDRESS BusAddress
,
566 IN OUT PULONG AddressSpace
,
567 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
569 typedef struct _DMA_ADAPTER
*
570 (DDKAPI
*PGET_DMA_ADAPTER
)(
572 IN
struct _DEVICE_DESCRIPTION
*DeviceDescriptor
,
573 OUT PULONG NumberOfMapRegisters
);
576 (DDKAPI
*PGET_SET_DEVICE_DATA
)(
583 typedef union _POWER_STATE
{
584 SYSTEM_POWER_STATE SystemState
;
585 DEVICE_POWER_STATE DeviceState
;
586 } POWER_STATE
, *PPOWER_STATE
;
588 typedef enum _POWER_STATE_TYPE
{
591 } POWER_STATE_TYPE
, *PPOWER_STATE_TYPE
;
593 typedef struct _BUS_INTERFACE_STANDARD
{
597 PINTERFACE_REFERENCE InterfaceReference
;
598 PINTERFACE_DEREFERENCE InterfaceDereference
;
599 PTRANSLATE_BUS_ADDRESS TranslateBusAddress
;
600 PGET_DMA_ADAPTER GetDmaAdapter
;
601 PGET_SET_DEVICE_DATA SetBusData
;
602 PGET_SET_DEVICE_DATA GetBusData
;
603 } BUS_INTERFACE_STANDARD
, *PBUS_INTERFACE_STANDARD
;
605 typedef struct _DEVICE_CAPABILITIES
{
610 ULONG LockSupported
: 1;
611 ULONG EjectSupported
: 1;
613 ULONG DockDevice
: 1;
615 ULONG SilentInstall
: 1;
616 ULONG RawDeviceOK
: 1;
617 ULONG SurpriseRemovalOK
: 1;
618 ULONG WakeFromD0
: 1;
619 ULONG WakeFromD1
: 1;
620 ULONG WakeFromD2
: 1;
621 ULONG WakeFromD3
: 1;
622 ULONG HardwareDisabled
: 1;
623 ULONG NonDynamic
: 1;
624 ULONG WarmEjectSupported
: 1;
625 ULONG NoDisplayInUI
: 1;
629 DEVICE_POWER_STATE DeviceState
[PowerSystemMaximum
];
630 SYSTEM_POWER_STATE SystemWake
;
631 DEVICE_POWER_STATE DeviceWake
;
635 } DEVICE_CAPABILITIES
, *PDEVICE_CAPABILITIES
;
637 typedef struct _DEVICE_INTERFACE_CHANGE_NOTIFICATION
{
641 GUID InterfaceClassGuid
;
642 PUNICODE_STRING SymbolicLinkName
;
643 } DEVICE_INTERFACE_CHANGE_NOTIFICATION
, *PDEVICE_INTERFACE_CHANGE_NOTIFICATION
;
645 typedef struct _HWPROFILE_CHANGE_NOTIFICATION
{
649 } HWPROFILE_CHANGE_NOTIFICATION
, *PHWPROFILE_CHANGE_NOTIFICATION
;
653 typedef struct _INTERFACE
{
657 PINTERFACE_REFERENCE InterfaceReference
;
658 PINTERFACE_DEREFERENCE InterfaceDereference
;
659 } INTERFACE
, *PINTERFACE
;
661 typedef struct _PLUGPLAY_NOTIFICATION_HEADER
{
665 } PLUGPLAY_NOTIFICATION_HEADER
, *PPLUGPLAY_NOTIFICATION_HEADER
;
667 typedef ULONG PNP_DEVICE_STATE
, *PPNP_DEVICE_STATE
;
669 /* PNP_DEVICE_STATE */
671 #define PNP_DEVICE_DISABLED 0x00000001
672 #define PNP_DEVICE_DONT_DISPLAY_IN_UI 0x00000002
673 #define PNP_DEVICE_FAILED 0x00000004
674 #define PNP_DEVICE_REMOVED 0x00000008
675 #define PNP_DEVICE_RESOURCE_REQUIREMENTS_CHANGED 0x00000010
676 #define PNP_DEVICE_NOT_DISABLEABLE 0x00000020
678 typedef struct _TARGET_DEVICE_CUSTOM_NOTIFICATION
{
682 struct _FILE_OBJECT
*FileObject
;
683 LONG NameBufferOffset
;
684 UCHAR CustomDataBuffer
[1];
685 } TARGET_DEVICE_CUSTOM_NOTIFICATION
, *PTARGET_DEVICE_CUSTOM_NOTIFICATION
;
687 typedef struct _TARGET_DEVICE_REMOVAL_NOTIFICATION
{
691 struct _FILE_OBJECT
*FileObject
;
692 } TARGET_DEVICE_REMOVAL_NOTIFICATION
, *PTARGET_DEVICE_REMOVAL_NOTIFICATION
;
694 typedef enum _BUS_QUERY_ID_TYPE
{
697 BusQueryCompatibleIDs
,
699 BusQueryDeviceSerialNumber
700 } BUS_QUERY_ID_TYPE
, *PBUS_QUERY_ID_TYPE
;
702 typedef enum _DEVICE_TEXT_TYPE
{
703 DeviceTextDescription
,
704 DeviceTextLocationInformation
705 } DEVICE_TEXT_TYPE
, *PDEVICE_TEXT_TYPE
;
707 typedef enum _DEVICE_USAGE_NOTIFICATION_TYPE
{
708 DeviceUsageTypeUndefined
,
709 DeviceUsageTypePaging
,
710 DeviceUsageTypeHibernation
,
711 DeviceUsageTypeDumpFile
712 } DEVICE_USAGE_NOTIFICATION_TYPE
;
714 typedef struct _POWER_SEQUENCE
{
718 } POWER_SEQUENCE
, *PPOWER_SEQUENCE
;
721 DevicePropertyDeviceDescription
,
722 DevicePropertyHardwareID
,
723 DevicePropertyCompatibleIDs
,
724 DevicePropertyBootConfiguration
,
725 DevicePropertyBootConfigurationTranslated
,
726 DevicePropertyClassName
,
727 DevicePropertyClassGuid
,
728 DevicePropertyDriverKeyName
,
729 DevicePropertyManufacturer
,
730 DevicePropertyFriendlyName
,
731 DevicePropertyLocationInformation
,
732 DevicePropertyPhysicalDeviceObjectName
,
733 DevicePropertyBusTypeGuid
,
734 DevicePropertyLegacyBusType
,
735 DevicePropertyBusNumber
,
736 DevicePropertyEnumeratorName
,
737 DevicePropertyAddress
,
738 DevicePropertyUINumber
,
739 DevicePropertyInstallState
,
740 DevicePropertyRemovalPolicy
741 } DEVICE_REGISTRY_PROPERTY
;
743 typedef enum _IO_NOTIFICATION_EVENT_CATEGORY
{
744 EventCategoryReserved
,
745 EventCategoryHardwareProfileChange
,
746 EventCategoryDeviceInterfaceChange
,
747 EventCategoryTargetDeviceChange
748 } IO_NOTIFICATION_EVENT_CATEGORY
;
750 #define PNPNOTIFY_DEVICE_INTERFACE_INCLUDE_EXISTING_INTERFACES 0x00000001
753 (DDKAPI
*PDRIVER_NOTIFICATION_CALLBACK_ROUTINE
)(
754 IN PVOID NotificationStructure
,
758 (DDKAPI
*PDEVICE_CHANGE_COMPLETE_CALLBACK
)(
766 #define SYMBOLIC_LINK_QUERY 0x0001
767 #define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
769 /* also in winnt,h */
770 #define DUPLICATE_CLOSE_SOURCE 0x00000001
771 #define DUPLICATE_SAME_ACCESS 0x00000002
772 #define DUPLICATE_SAME_ATTRIBUTES 0x00000004
775 typedef struct _OBJECT_NAME_INFORMATION
{
777 } OBJECT_NAME_INFORMATION
, *POBJECT_NAME_INFORMATION
;
780 (DDKAPI
*PIO_APC_ROUTINE
)(
782 IN PIO_STATUS_BLOCK IoStatusBlock
,
785 typedef struct _IO_STATUS_BLOCK
{
786 _ANONYMOUS_UNION
union {
790 ULONG_PTR Information
;
794 (DDKAPI
*PKNORMAL_ROUTINE
)(
795 IN PVOID NormalContext
,
796 IN PVOID SystemArgument1
,
797 IN PVOID SystemArgument2
);
800 (DDKAPI
*PKKERNEL_ROUTINE
)(
801 IN
struct _KAPC
*Apc
,
802 IN OUT PKNORMAL_ROUTINE
*NormalRoutine
,
803 IN OUT PVOID
*NormalContext
,
804 IN OUT PVOID
*SystemArgument1
,
805 IN OUT PVOID
*SystemArgument2
);
808 (DDKAPI
*PKRUNDOWN_ROUTINE
)(
809 IN
struct _KAPC
*Apc
);
812 (DDKAPI
*PKTRANSFER_ROUTINE
)(
815 typedef struct _KAPC
{
819 struct _KTHREAD
*Thread
;
820 LIST_ENTRY ApcListEntry
;
821 PKKERNEL_ROUTINE KernelRoutine
;
822 PKRUNDOWN_ROUTINE RundownRoutine
;
823 PKNORMAL_ROUTINE NormalRoutine
;
825 PVOID SystemArgument1
;
826 PVOID SystemArgument2
;
828 KPROCESSOR_MODE ApcMode
;
830 } KAPC
, *PKAPC
, *RESTRICTED_POINTER PRKAPC
;
832 typedef struct _KDEVICE_QUEUE
{
835 LIST_ENTRY DeviceListHead
;
838 } KDEVICE_QUEUE
, *PKDEVICE_QUEUE
, *RESTRICTED_POINTER PRKDEVICE_QUEUE
;
840 typedef struct _KDEVICE_QUEUE_ENTRY
{
841 LIST_ENTRY DeviceListEntry
;
844 } KDEVICE_QUEUE_ENTRY
, *PKDEVICE_QUEUE_ENTRY
,
845 *RESTRICTED_POINTER PRKDEVICE_QUEUE_ENTRY
;
847 #define LOCK_QUEUE_WAIT 1
848 #define LOCK_QUEUE_OWNER 2
850 typedef enum _KSPIN_LOCK_QUEUE_NUMBER
{
851 LockQueueDispatcherLock
,
852 LockQueueContextSwapLock
,
854 LockQueueSystemSpaceLock
,
857 LockQueueNonPagedPoolLock
,
858 LockQueueIoCancelLock
,
859 LockQueueWorkQueueLock
,
861 LockQueueIoDatabaseLock
,
862 LockQueueIoCompletionLock
,
863 LockQueueNtfsStructLock
,
864 LockQueueAfdWorkQueueLock
,
867 } KSPIN_LOCK_QUEUE_NUMBER
, *PKSPIN_LOCK_QUEUE_NUMBER
;
869 typedef struct _KSPIN_LOCK_QUEUE
{
870 struct _KSPIN_LOCK_QUEUE
*VOLATILE Next
;
871 PKSPIN_LOCK VOLATILE Lock
;
872 } KSPIN_LOCK_QUEUE
, *PKSPIN_LOCK_QUEUE
;
874 typedef struct _KLOCK_QUEUE_HANDLE
{
875 KSPIN_LOCK_QUEUE LockQueue
;
877 } KLOCK_QUEUE_HANDLE
, *PKLOCK_QUEUE_HANDLE
;
879 typedef struct _KDPC
{
883 LIST_ENTRY DpcListEntry
;
884 PKDEFERRED_ROUTINE DeferredRoutine
;
885 PVOID DeferredContext
;
886 PVOID SystemArgument1
;
887 PVOID SystemArgument2
;
889 } KDPC
, *PKDPC
, *RESTRICTED_POINTER PRKDPC
;
891 typedef struct _KDPC_DATA
{
892 LIST_ENTRY DpcListHead
;
896 } KDPC_DATA
, *PKDPC_DATA
;
898 typedef struct _WAIT_CONTEXT_BLOCK
{
899 KDEVICE_QUEUE_ENTRY WaitQueueEntry
;
900 struct _DRIVER_CONTROL
*DeviceRoutine
;
902 ULONG NumberOfMapRegisters
;
905 PKDPC BufferChainingDpc
;
906 } WAIT_CONTEXT_BLOCK
, *PWAIT_CONTEXT_BLOCK
;
908 typedef struct _DISPATCHER_HEADER
{
914 LIST_ENTRY WaitListHead
;
915 } DISPATCHER_HEADER
, *PDISPATCHER_HEADER
;
917 typedef struct _KEVENT
{
918 DISPATCHER_HEADER Header
;
919 } KEVENT
, *PKEVENT
, *RESTRICTED_POINTER PRKEVENT
;
921 typedef struct _KSEMAPHORE
{
922 DISPATCHER_HEADER Header
;
924 } KSEMAPHORE
, *PKSEMAPHORE
, *RESTRICTED_POINTER PRKSEMAPHORE
;
926 typedef struct _FAST_MUTEX
{
928 struct _KTHREAD
*Owner
;
932 } FAST_MUTEX
, *PFAST_MUTEX
;
934 typedef struct _KGATE
936 DISPATCHER_HEADER Header
;
937 } KGATE
, *PKGATE
, *RESTRICTED_POINTER PRKGATE
;
939 typedef struct _KGUARDED_MUTEX
942 struct _KTHREAD
* Owner
;
947 SHORT KernelApcDisable
;
948 SHORT SpecialApcDisable
;
950 ULONG CombinedApcDisable
;
952 } KGUARDED_MUTEX
, *PKGUARDED_MUTEX
, *RESTRICTED_POINTER PRKGUARDED_MUTEX
;
954 typedef struct _KTIMER
{
955 DISPATCHER_HEADER Header
;
956 ULARGE_INTEGER DueTime
;
957 LIST_ENTRY TimerListEntry
;
960 } KTIMER
, *PKTIMER
, *RESTRICTED_POINTER PRKTIMER
;
962 typedef struct _KMUTANT
{
963 DISPATCHER_HEADER Header
;
964 LIST_ENTRY MutantListEntry
;
965 struct _KTHREAD
*RESTRICTED_POINTER OwnerThread
;
968 } KMUTANT
, *PKMUTANT
, *RESTRICTED_POINTER PRKMUTANT
, KMUTEX
, *PKMUTEX
, *RESTRICTED_POINTER PRKMUTEX
;
970 typedef enum _TIMER_TYPE
{
975 #define EVENT_INCREMENT 1
976 #define IO_NO_INCREMENT 0
977 #define IO_CD_ROM_INCREMENT 1
978 #define IO_DISK_INCREMENT 1
979 #define IO_KEYBOARD_INCREMENT 6
980 #define IO_MAILSLOT_INCREMENT 2
981 #define IO_MOUSE_INCREMENT 6
982 #define IO_NAMED_PIPE_INCREMENT 2
983 #define IO_NETWORK_INCREMENT 2
984 #define IO_PARALLEL_INCREMENT 1
985 #define IO_SERIAL_INCREMENT 2
986 #define IO_SOUND_INCREMENT 8
987 #define IO_VIDEO_INCREMENT 1
988 #define SEMAPHORE_INCREMENT 1
990 typedef struct _IRP
{
993 struct _MDL
*MdlAddress
;
996 struct _IRP
*MasterIrp
;
1000 LIST_ENTRY ThreadListEntry
;
1001 IO_STATUS_BLOCK IoStatus
;
1002 KPROCESSOR_MODE RequestorMode
;
1003 BOOLEAN PendingReturned
;
1005 CHAR CurrentLocation
;
1008 CCHAR ApcEnvironment
;
1009 UCHAR AllocationFlags
;
1010 PIO_STATUS_BLOCK UserIosb
;
1014 PIO_APC_ROUTINE UserApcRoutine
;
1015 PVOID UserApcContext
;
1016 } AsynchronousParameters
;
1017 LARGE_INTEGER AllocationSize
;
1019 PDRIVER_CANCEL CancelRoutine
;
1023 _ANONYMOUS_UNION
union {
1024 KDEVICE_QUEUE_ENTRY DeviceQueueEntry
;
1025 _ANONYMOUS_STRUCT
struct {
1026 PVOID DriverContext
[4];
1030 PCHAR AuxiliaryBuffer
;
1031 _ANONYMOUS_STRUCT
struct {
1032 LIST_ENTRY ListEntry
;
1033 _ANONYMOUS_UNION
union {
1034 struct _IO_STACK_LOCATION
*CurrentStackLocation
;
1038 struct _FILE_OBJECT
*OriginalFileObject
;
1041 PVOID CompletionKey
;
1044 typedef struct _IRP
*PIRP
;
1048 #define SL_FORCE_ACCESS_CHECK 0x01
1049 #define SL_OPEN_PAGING_FILE 0x02
1050 #define SL_OPEN_TARGET_DIRECTORY 0x04
1051 #define SL_CASE_SENSITIVE 0x80
1053 #define SL_KEY_SPECIFIED 0x01
1054 #define SL_OVERRIDE_VERIFY_VOLUME 0x02
1055 #define SL_WRITE_THROUGH 0x04
1056 #define SL_FT_SEQUENTIAL_WRITE 0x08
1058 #define SL_FAIL_IMMEDIATELY 0x01
1059 #define SL_EXCLUSIVE_LOCK 0x02
1061 #define SL_RESTART_SCAN 0x01
1062 #define SL_RETURN_SINGLE_ENTRY 0x02
1063 #define SL_INDEX_SPECIFIED 0x04
1065 #define SL_WATCH_TREE 0x01
1067 #define SL_ALLOW_RAW_MOUNT 0x01
1069 #define CTL_CODE(DeviceType, Function, Method, Access)( \
1070 ((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method))
1072 #define DEVICE_TYPE_FROM_CTL_CODE(ctl) (((ULONG) (ctl & 0xffff0000)) >> 16)
1077 IRP_PAGING_IO
= 0x2,
1078 IRP_MOUNT_COMPLETION
= 0x2,
1079 IRP_SYNCHRONOUS_API
= 0x4,
1080 IRP_ASSOCIATED_IRP
= 0x8,
1081 IRP_BUFFERED_IO
= 0x10,
1082 IRP_DEALLOCATE_BUFFER
= 0x20,
1083 IRP_INPUT_OPERATION
= 0x40,
1084 IRP_SYNCHRONOUS_PAGING_IO
= 0x40,
1085 IRP_CREATE_OPERATION
= 0x80,
1086 IRP_READ_OPERATION
= 0x100,
1087 IRP_WRITE_OPERATION
= 0x200,
1088 IRP_CLOSE_OPERATION
= 0x400,
1089 IRP_DEFER_IO_COMPLETION
= 0x800,
1090 IRP_OB_QUERY_NAME
= 0x1000,
1091 IRP_HOLD_DEVICE_QUEUE
= 0x2000,
1092 IRP_RETRY_IO_COMPLETION
= 0x4000
1095 typedef struct _BOOTDISK_INFORMATION
{
1096 LONGLONG BootPartitionOffset
;
1097 LONGLONG SystemPartitionOffset
;
1098 ULONG BootDeviceSignature
;
1099 ULONG SystemDeviceSignature
;
1100 } BOOTDISK_INFORMATION
, *PBOOTDISK_INFORMATION
;
1102 typedef struct _BOOTDISK_INFORMATION_EX
{
1103 LONGLONG BootPartitionOffset
;
1104 LONGLONG SystemPartitionOffset
;
1105 ULONG BootDeviceSignature
;
1106 ULONG SystemDeviceSignature
;
1107 GUID BootDeviceGuid
;
1108 GUID SystemDeviceGuid
;
1109 BOOLEAN BootDeviceIsGpt
;
1110 BOOLEAN SystemDeviceIsGpt
;
1111 } BOOTDISK_INFORMATION_EX
, *PBOOTDISK_INFORMATION_EX
;
1113 typedef struct _EISA_MEMORY_TYPE
{
1114 UCHAR ReadWrite
: 1;
1116 UCHAR Reserved0
: 1;
1119 UCHAR Reserved1
: 1;
1120 UCHAR MoreEntries
: 1;
1121 } EISA_MEMORY_TYPE
, *PEISA_MEMORY_TYPE
;
1123 #include <pshpack1.h>
1124 typedef struct _EISA_MEMORY_CONFIGURATION
{
1125 EISA_MEMORY_TYPE ConfigurationByte
;
1127 USHORT AddressLowWord
;
1128 UCHAR AddressHighByte
;
1130 } EISA_MEMORY_CONFIGURATION
, *PEISA_MEMORY_CONFIGURATION
;
1131 #include <poppack.h>
1133 typedef struct _EISA_IRQ_DESCRIPTOR
{
1134 UCHAR Interrupt
: 4;
1136 UCHAR LevelTriggered
: 1;
1138 UCHAR MoreEntries
: 1;
1139 } EISA_IRQ_DESCRIPTOR
, *PEISA_IRQ_DESCRIPTOR
;
1141 typedef struct _EISA_IRQ_CONFIGURATION
{
1142 EISA_IRQ_DESCRIPTOR ConfigurationByte
;
1144 } EISA_IRQ_CONFIGURATION
, *PEISA_IRQ_CONFIGURATION
;
1146 typedef struct _DMA_CONFIGURATION_BYTE0
{
1150 UCHAR MoreEntries
: 1;
1151 } DMA_CONFIGURATION_BYTE0
;
1153 typedef struct _DMA_CONFIGURATION_BYTE1
{
1154 UCHAR Reserved0
: 2;
1155 UCHAR TransferSize
: 2;
1157 UCHAR Reserved1
: 2;
1158 } DMA_CONFIGURATION_BYTE1
;
1160 typedef struct _EISA_DMA_CONFIGURATION
{
1161 DMA_CONFIGURATION_BYTE0 ConfigurationByte0
;
1162 DMA_CONFIGURATION_BYTE1 ConfigurationByte1
;
1163 } EISA_DMA_CONFIGURATION
, *PEISA_DMA_CONFIGURATION
;
1165 #include <pshpack1.h>
1166 typedef struct _EISA_PORT_DESCRIPTOR
{
1167 UCHAR NumberPorts
: 5;
1170 UCHAR MoreEntries
: 1;
1171 } EISA_PORT_DESCRIPTOR
, *PEISA_PORT_DESCRIPTOR
;
1173 typedef struct _EISA_PORT_CONFIGURATION
{
1174 EISA_PORT_DESCRIPTOR Configuration
;
1176 } EISA_PORT_CONFIGURATION
, *PEISA_PORT_CONFIGURATION
;
1177 #include <poppack.h>
1179 typedef struct _CM_EISA_FUNCTION_INFORMATION
{
1183 UCHAR MinorRevision
;
1184 UCHAR MajorRevision
;
1185 UCHAR Selections
[26];
1186 UCHAR FunctionFlags
;
1187 UCHAR TypeString
[80];
1188 EISA_MEMORY_CONFIGURATION EisaMemory
[9];
1189 EISA_IRQ_CONFIGURATION EisaIrq
[7];
1190 EISA_DMA_CONFIGURATION EisaDma
[4];
1191 EISA_PORT_CONFIGURATION EisaPort
[20];
1192 UCHAR InitializationData
[60];
1193 } CM_EISA_FUNCTION_INFORMATION
, *PCM_EISA_FUNCTION_INFORMATION
;
1195 /* CM_EISA_FUNCTION_INFORMATION.FunctionFlags */
1197 #define EISA_FUNCTION_ENABLED 0x80
1198 #define EISA_FREE_FORM_DATA 0x40
1199 #define EISA_HAS_PORT_INIT_ENTRY 0x20
1200 #define EISA_HAS_PORT_RANGE 0x10
1201 #define EISA_HAS_DMA_ENTRY 0x08
1202 #define EISA_HAS_IRQ_ENTRY 0x04
1203 #define EISA_HAS_MEMORY_ENTRY 0x02
1204 #define EISA_HAS_TYPE_ENTRY 0x01
1205 #define EISA_HAS_INFORMATION \
1206 (EISA_HAS_PORT_RANGE + EISA_HAS_DMA_ENTRY + EISA_HAS_IRQ_ENTRY \
1207 + EISA_HAS_MEMORY_ENTRY + EISA_HAS_TYPE_ENTRY)
1209 typedef struct _CM_EISA_SLOT_INFORMATION
{
1212 UCHAR MajorRevision
;
1213 UCHAR MinorRevision
;
1215 UCHAR NumberFunctions
;
1216 UCHAR FunctionInformation
;
1218 } CM_EISA_SLOT_INFORMATION
, *PCM_EISA_SLOT_INFORMATION
;
1220 /* CM_EISA_SLOT_INFORMATION.ReturnCode */
1222 #define EISA_INVALID_SLOT 0x80
1223 #define EISA_INVALID_FUNCTION 0x81
1224 #define EISA_INVALID_CONFIGURATION 0x82
1225 #define EISA_EMPTY_SLOT 0x83
1226 #define EISA_INVALID_BIOS_CALL 0x86
1228 typedef struct _CM_FLOPPY_DEVICE_DATA
{
1234 UCHAR StepRateHeadUnloadTime
;
1237 UCHAR SectorLengthCode
;
1238 UCHAR SectorPerTrack
;
1239 UCHAR ReadWriteGapLength
;
1240 UCHAR DataTransferLength
;
1241 UCHAR FormatGapLength
;
1242 UCHAR FormatFillCharacter
;
1243 UCHAR HeadSettleTime
;
1244 UCHAR MotorSettleTime
;
1245 UCHAR MaximumTrackValue
;
1246 UCHAR DataTransferRate
;
1247 } CM_FLOPPY_DEVICE_DATA
, *PCM_FLOPPY_DEVICE_DATA
;
1249 typedef enum _INTERFACE_TYPE
{
1250 InterfaceTypeUndefined
= -1,
1267 MaximumInterfaceType
1268 } INTERFACE_TYPE
, *PINTERFACE_TYPE
;
1270 typedef struct _PNP_BUS_INFORMATION
{
1272 INTERFACE_TYPE LegacyBusType
;
1274 } PNP_BUS_INFORMATION
, *PPNP_BUS_INFORMATION
;
1276 #include <pshpack1.h>
1277 typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR
{
1279 UCHAR ShareDisposition
;
1283 PHYSICAL_ADDRESS Start
;
1287 PHYSICAL_ADDRESS Start
;
1296 PHYSICAL_ADDRESS Start
;
1316 } DeviceSpecificData
;
1318 } CM_PARTIAL_RESOURCE_DESCRIPTOR
, *PCM_PARTIAL_RESOURCE_DESCRIPTOR
;
1320 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Type */
1322 #define CmResourceTypeNull 0
1323 #define CmResourceTypePort 1
1324 #define CmResourceTypeInterrupt 2
1325 #define CmResourceTypeMemory 3
1326 #define CmResourceTypeDma 4
1327 #define CmResourceTypeDeviceSpecific 5
1328 #define CmResourceTypeBusNumber 6
1329 #define CmResourceTypeMaximum 7
1330 #define CmResourceTypeNonArbitrated 128
1331 #define CmResourceTypeConfigData 128
1332 #define CmResourceTypeDevicePrivate 129
1333 #define CmResourceTypePcCardConfig 130
1334 #define CmResourceTypeMfCardConfig 131
1336 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.ShareDisposition */
1338 typedef enum _CM_SHARE_DISPOSITION
{
1339 CmResourceShareUndetermined
,
1340 CmResourceShareDeviceExclusive
,
1341 CmResourceShareDriverExclusive
,
1342 CmResourceShareShared
1343 } CM_SHARE_DISPOSITION
;
1345 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypePort */
1347 #define CM_RESOURCE_PORT_MEMORY 0x0000
1348 #define CM_RESOURCE_PORT_IO 0x0001
1349 #define CM_RESOURCE_PORT_10_BIT_DECODE 0x0004
1350 #define CM_RESOURCE_PORT_12_BIT_DECODE 0x0008
1351 #define CM_RESOURCE_PORT_16_BIT_DECODE 0x0010
1352 #define CM_RESOURCE_PORT_POSITIVE_DECODE 0x0020
1353 #define CM_RESOURCE_PORT_PASSIVE_DECODE 0x0040
1354 #define CM_RESOURCE_PORT_WINDOW_DECODE 0x0080
1356 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeInterrupt */
1358 #define CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE 0x0000
1359 #define CM_RESOURCE_INTERRUPT_LATCHED 0x0001
1361 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeMemory */
1363 #define CM_RESOURCE_MEMORY_READ_WRITE 0x0000
1364 #define CM_RESOURCE_MEMORY_READ_ONLY 0x0001
1365 #define CM_RESOURCE_MEMORY_WRITE_ONLY 0x0002
1366 #define CM_RESOURCE_MEMORY_PREFETCHABLE 0x0004
1367 #define CM_RESOURCE_MEMORY_COMBINEDWRITE 0x0008
1368 #define CM_RESOURCE_MEMORY_24 0x0010
1369 #define CM_RESOURCE_MEMORY_CACHEABLE 0x0020
1371 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeDma */
1373 #define CM_RESOURCE_DMA_8 0x0000
1374 #define CM_RESOURCE_DMA_16 0x0001
1375 #define CM_RESOURCE_DMA_32 0x0002
1376 #define CM_RESOURCE_DMA_8_AND_16 0x0004
1377 #define CM_RESOURCE_DMA_BUS_MASTER 0x0008
1378 #define CM_RESOURCE_DMA_TYPE_A 0x0010
1379 #define CM_RESOURCE_DMA_TYPE_B 0x0020
1380 #define CM_RESOURCE_DMA_TYPE_F 0x0040
1382 typedef struct _CM_PARTIAL_RESOURCE_LIST
{
1386 CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors
[1];
1387 } CM_PARTIAL_RESOURCE_LIST
, *PCM_PARTIAL_RESOURCE_LIST
;
1389 typedef struct _CM_FULL_RESOURCE_DESCRIPTOR
{
1390 INTERFACE_TYPE InterfaceType
;
1392 CM_PARTIAL_RESOURCE_LIST PartialResourceList
;
1393 } CM_FULL_RESOURCE_DESCRIPTOR
, *PCM_FULL_RESOURCE_DESCRIPTOR
;
1395 typedef struct _CM_RESOURCE_LIST
{
1397 CM_FULL_RESOURCE_DESCRIPTOR List
[1];
1398 } CM_RESOURCE_LIST
, *PCM_RESOURCE_LIST
;
1400 typedef struct _CM_INT13_DRIVE_PARAMETER
{
1403 USHORT SectorsPerTrack
;
1405 USHORT NumberDrives
;
1406 } CM_INT13_DRIVE_PARAMETER
, *PCM_INT13_DRIVE_PARAMETER
;
1407 #include <poppack.h>
1409 typedef struct _CM_KEYBOARD_DEVICE_DATA
{
1414 USHORT KeyboardFlags
;
1415 } CM_KEYBOARD_DEVICE_DATA
, *PCM_KEYBOARD_DEVICE_DATA
;
1417 #define KEYBOARD_INSERT_ON 0x08
1418 #define KEYBOARD_CAPS_LOCK_ON 0x04
1419 #define KEYBOARD_NUM_LOCK_ON 0x02
1420 #define KEYBOARD_SCROLL_LOCK_ON 0x01
1421 #define KEYBOARD_ALT_KEY_DOWN 0x80
1422 #define KEYBOARD_CTRL_KEY_DOWN 0x40
1423 #define KEYBOARD_LEFT_SHIFT_DOWN 0x20
1424 #define KEYBOARD_RIGHT_SHIFT_DOWN 0x10
1426 typedef struct _CM_MCA_POS_DATA
{
1432 } CM_MCA_POS_DATA
, *PCM_MCA_POS_DATA
;
1434 typedef struct CM_Power_Data_s
{
1436 DEVICE_POWER_STATE PD_MostRecentPowerState
;
1437 ULONG PD_Capabilities
;
1441 DEVICE_POWER_STATE PD_PowerStateMapping
[PowerSystemMaximum
];
1442 } CM_POWER_DATA
, *PCM_POWER_DATA
;
1444 #define PDCAP_D0_SUPPORTED 0x00000001
1445 #define PDCAP_D1_SUPPORTED 0x00000002
1446 #define PDCAP_D2_SUPPORTED 0x00000004
1447 #define PDCAP_D3_SUPPORTED 0x00000008
1448 #define PDCAP_WAKE_FROM_D0_SUPPORTED 0x00000010
1449 #define PDCAP_WAKE_FROM_D1_SUPPORTED 0x00000020
1450 #define PDCAP_WAKE_FROM_D2_SUPPORTED 0x00000040
1451 #define PDCAP_WAKE_FROM_D3_SUPPORTED 0x00000080
1452 #define PDCAP_WARM_EJECT_SUPPORTED 0x00000100
1454 typedef struct _CM_SCSI_DEVICE_DATA
{
1457 UCHAR HostIdentifier
;
1458 } CM_SCSI_DEVICE_DATA
, *PCM_SCSI_DEVICE_DATA
;
1460 typedef struct _CM_SERIAL_DEVICE_DATA
{
1464 } CM_SERIAL_DEVICE_DATA
, *PCM_SERIAL_DEVICE_DATA
;
1466 /* IO_RESOURCE_DESCRIPTOR.Option */
1468 #define IO_RESOURCE_PREFERRED 0x01
1469 #define IO_RESOURCE_DEFAULT 0x02
1470 #define IO_RESOURCE_ALTERNATIVE 0x08
1472 typedef struct _IO_RESOURCE_DESCRIPTOR
{
1475 UCHAR ShareDisposition
;
1483 PHYSICAL_ADDRESS MinimumAddress
;
1484 PHYSICAL_ADDRESS MaximumAddress
;
1489 PHYSICAL_ADDRESS MinimumAddress
;
1490 PHYSICAL_ADDRESS MaximumAddress
;
1493 ULONG MinimumVector
;
1494 ULONG MaximumVector
;
1497 ULONG MinimumChannel
;
1498 ULONG MaximumChannel
;
1503 PHYSICAL_ADDRESS MinimumAddress
;
1504 PHYSICAL_ADDRESS MaximumAddress
;
1521 } IO_RESOURCE_DESCRIPTOR
, *PIO_RESOURCE_DESCRIPTOR
;
1523 typedef struct _IO_RESOURCE_LIST
{
1527 IO_RESOURCE_DESCRIPTOR Descriptors
[1];
1528 } IO_RESOURCE_LIST
, *PIO_RESOURCE_LIST
;
1530 typedef struct _IO_RESOURCE_REQUIREMENTS_LIST
{
1532 INTERFACE_TYPE InterfaceType
;
1536 ULONG AlternativeLists
;
1537 IO_RESOURCE_LIST List
[1];
1538 } IO_RESOURCE_REQUIREMENTS_LIST
, *PIO_RESOURCE_REQUIREMENTS_LIST
;
1540 typedef struct _IO_ERROR_LOG_PACKET
{
1541 UCHAR MajorFunctionCode
;
1543 USHORT DumpDataSize
;
1544 USHORT NumberOfStrings
;
1545 USHORT StringOffset
;
1546 USHORT EventCategory
;
1548 ULONG UniqueErrorValue
;
1549 NTSTATUS FinalStatus
;
1550 ULONG SequenceNumber
;
1551 ULONG IoControlCode
;
1552 LARGE_INTEGER DeviceOffset
;
1554 } IO_ERROR_LOG_PACKET
, *PIO_ERROR_LOG_PACKET
;
1556 typedef struct _IO_ERROR_LOG_MESSAGE
{
1559 USHORT DriverNameLength
;
1560 LARGE_INTEGER TimeStamp
;
1561 ULONG DriverNameOffset
;
1562 IO_ERROR_LOG_PACKET EntryData
;
1563 } IO_ERROR_LOG_MESSAGE
, *PIO_ERROR_LOG_MESSAGE
;
1565 #define ERROR_LOG_LIMIT_SIZE 240
1566 #define IO_ERROR_LOG_MESSAGE_HEADER_LENGTH (sizeof(IO_ERROR_LOG_MESSAGE) - \
1567 sizeof(IO_ERROR_LOG_PACKET) + \
1568 (sizeof(WCHAR) * 40))
1570 typedef struct _CONTROLLER_OBJECT
{
1573 PVOID ControllerExtension
;
1574 KDEVICE_QUEUE DeviceWaitQueue
;
1576 LARGE_INTEGER Spare2
;
1577 } CONTROLLER_OBJECT
, *PCONTROLLER_OBJECT
;
1579 typedef enum _DMA_WIDTH
{
1584 } DMA_WIDTH
, *PDMA_WIDTH
;
1586 typedef enum _DMA_SPEED
{
1593 } DMA_SPEED
, *PDMA_SPEED
;
1595 /* DEVICE_DESCRIPTION.Version */
1597 #define DEVICE_DESCRIPTION_VERSION 0x0000
1598 #define DEVICE_DESCRIPTION_VERSION1 0x0001
1599 #define DEVICE_DESCRIPTION_VERSION2 0x0002
1601 typedef struct _DEVICE_DESCRIPTION
{
1604 BOOLEAN ScatterGather
;
1606 BOOLEAN AutoInitialize
;
1607 BOOLEAN Dma32BitAddresses
;
1608 BOOLEAN IgnoreCount
;
1610 BOOLEAN Dma64BitAddresses
;
1613 INTERFACE_TYPE InterfaceType
;
1616 ULONG MaximumLength
;
1618 } DEVICE_DESCRIPTION
, *PDEVICE_DESCRIPTION
;
1621 #define VPB_MOUNTED 0x0001
1622 #define VPB_LOCKED 0x0002
1623 #define VPB_PERSISTENT 0x0004
1624 #define VPB_REMOVE_PENDING 0x0008
1625 #define VPB_RAW_MOUNT 0x0010
1627 #define MAXIMUM_VOLUME_LABEL_LENGTH (32 * sizeof(WCHAR))
1629 typedef struct _VPB
{
1633 USHORT VolumeLabelLength
;
1634 struct _DEVICE_OBJECT
*DeviceObject
;
1635 struct _DEVICE_OBJECT
*RealDevice
;
1637 ULONG ReferenceCount
;
1638 WCHAR VolumeLabel
[MAXIMUM_VOLUME_LABEL_LENGTH
/ sizeof(WCHAR
)];
1641 /* DEVICE_OBJECT.Flags */
1643 #define DO_VERIFY_VOLUME 0x00000002
1644 #define DO_BUFFERED_IO 0x00000004
1645 #define DO_EXCLUSIVE 0x00000008
1646 #define DO_DIRECT_IO 0x00000010
1647 #define DO_MAP_IO_BUFFER 0x00000020
1648 #define DO_DEVICE_HAS_NAME 0x00000040
1649 #define DO_DEVICE_INITIALIZING 0x00000080
1650 #define DO_SYSTEM_BOOT_PARTITION 0x00000100
1651 #define DO_LONG_TERM_REQUESTS 0x00000200
1652 #define DO_NEVER_LAST_DEVICE 0x00000400
1653 #define DO_SHUTDOWN_REGISTERED 0x00000800
1654 #define DO_BUS_ENUMERATED_DEVICE 0x00001000
1655 #define DO_POWER_PAGABLE 0x00002000
1656 #define DO_POWER_INRUSH 0x00004000
1657 #define DO_LOW_PRIORITY_FILESYSTEM 0x00010000
1659 /* DEVICE_OBJECT.Characteristics */
1661 #define FILE_REMOVABLE_MEDIA 0x00000001
1662 #define FILE_READ_ONLY_DEVICE 0x00000002
1663 #define FILE_FLOPPY_DISKETTE 0x00000004
1664 #define FILE_WRITE_ONCE_MEDIA 0x00000008
1665 #define FILE_REMOTE_DEVICE 0x00000010
1666 #define FILE_DEVICE_IS_MOUNTED 0x00000020
1667 #define FILE_VIRTUAL_VOLUME 0x00000040
1668 #define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080
1669 #define FILE_DEVICE_SECURE_OPEN 0x00000100
1671 /* DEVICE_OBJECT.AlignmentRequirement */
1673 #define FILE_BYTE_ALIGNMENT 0x00000000
1674 #define FILE_WORD_ALIGNMENT 0x00000001
1675 #define FILE_LONG_ALIGNMENT 0x00000003
1676 #define FILE_QUAD_ALIGNMENT 0x00000007
1677 #define FILE_OCTA_ALIGNMENT 0x0000000f
1678 #define FILE_32_BYTE_ALIGNMENT 0x0000001f
1679 #define FILE_64_BYTE_ALIGNMENT 0x0000003f
1680 #define FILE_128_BYTE_ALIGNMENT 0x0000007f
1681 #define FILE_256_BYTE_ALIGNMENT 0x000000ff
1682 #define FILE_512_BYTE_ALIGNMENT 0x000001ff
1684 /* DEVICE_OBJECT.DeviceType */
1686 #define DEVICE_TYPE ULONG
1688 #define FILE_DEVICE_BEEP 0x00000001
1689 #define FILE_DEVICE_CD_ROM 0x00000002
1690 #define FILE_DEVICE_CD_ROM_FILE_SYSTEM 0x00000003
1691 #define FILE_DEVICE_CONTROLLER 0x00000004
1692 #define FILE_DEVICE_DATALINK 0x00000005
1693 #define FILE_DEVICE_DFS 0x00000006
1694 #define FILE_DEVICE_DISK 0x00000007
1695 #define FILE_DEVICE_DISK_FILE_SYSTEM 0x00000008
1696 #define FILE_DEVICE_FILE_SYSTEM 0x00000009
1697 #define FILE_DEVICE_INPORT_PORT 0x0000000a
1698 #define FILE_DEVICE_KEYBOARD 0x0000000b
1699 #define FILE_DEVICE_MAILSLOT 0x0000000c
1700 #define FILE_DEVICE_MIDI_IN 0x0000000d
1701 #define FILE_DEVICE_MIDI_OUT 0x0000000e
1702 #define FILE_DEVICE_MOUSE 0x0000000f
1703 #define FILE_DEVICE_MULTI_UNC_PROVIDER 0x00000010
1704 #define FILE_DEVICE_NAMED_PIPE 0x00000011
1705 #define FILE_DEVICE_NETWORK 0x00000012
1706 #define FILE_DEVICE_NETWORK_BROWSER 0x00000013
1707 #define FILE_DEVICE_NETWORK_FILE_SYSTEM 0x00000014
1708 #define FILE_DEVICE_NULL 0x00000015
1709 #define FILE_DEVICE_PARALLEL_PORT 0x00000016
1710 #define FILE_DEVICE_PHYSICAL_NETCARD 0x00000017
1711 #define FILE_DEVICE_PRINTER 0x00000018
1712 #define FILE_DEVICE_SCANNER 0x00000019
1713 #define FILE_DEVICE_SERIAL_MOUSE_PORT 0x0000001a
1714 #define FILE_DEVICE_SERIAL_PORT 0x0000001b
1715 #define FILE_DEVICE_SCREEN 0x0000001c
1716 #define FILE_DEVICE_SOUND 0x0000001d
1717 #define FILE_DEVICE_STREAMS 0x0000001e
1718 #define FILE_DEVICE_TAPE 0x0000001f
1719 #define FILE_DEVICE_TAPE_FILE_SYSTEM 0x00000020
1720 #define FILE_DEVICE_TRANSPORT 0x00000021
1721 #define FILE_DEVICE_UNKNOWN 0x00000022
1722 #define FILE_DEVICE_VIDEO 0x00000023
1723 #define FILE_DEVICE_VIRTUAL_DISK 0x00000024
1724 #define FILE_DEVICE_WAVE_IN 0x00000025
1725 #define FILE_DEVICE_WAVE_OUT 0x00000026
1726 #define FILE_DEVICE_8042_PORT 0x00000027
1727 #define FILE_DEVICE_NETWORK_REDIRECTOR 0x00000028
1728 #define FILE_DEVICE_BATTERY 0x00000029
1729 #define FILE_DEVICE_BUS_EXTENDER 0x0000002a
1730 #define FILE_DEVICE_MODEM 0x0000002b
1731 #define FILE_DEVICE_VDM 0x0000002c
1732 #define FILE_DEVICE_MASS_STORAGE 0x0000002d
1733 #define FILE_DEVICE_SMB 0x0000002e
1734 #define FILE_DEVICE_KS 0x0000002f
1735 #define FILE_DEVICE_CHANGER 0x00000030
1736 #define FILE_DEVICE_SMARTCARD 0x00000031
1737 #define FILE_DEVICE_ACPI 0x00000032
1738 #define FILE_DEVICE_DVD 0x00000033
1739 #define FILE_DEVICE_FULLSCREEN_VIDEO 0x00000034
1740 #define FILE_DEVICE_DFS_FILE_SYSTEM 0x00000035
1741 #define FILE_DEVICE_DFS_VOLUME 0x00000036
1742 #define FILE_DEVICE_SERENUM 0x00000037
1743 #define FILE_DEVICE_TERMSRV 0x00000038
1744 #define FILE_DEVICE_KSEC 0x00000039
1745 #define FILE_DEVICE_FIPS 0x0000003a
1747 typedef struct _DEVICE_OBJECT
{
1750 LONG ReferenceCount
;
1751 struct _DRIVER_OBJECT
*DriverObject
;
1752 struct _DEVICE_OBJECT
*NextDevice
;
1753 struct _DEVICE_OBJECT
*AttachedDevice
;
1754 struct _IRP
*CurrentIrp
;
1757 ULONG Characteristics
;
1759 PVOID DeviceExtension
;
1760 DEVICE_TYPE DeviceType
;
1763 LIST_ENTRY ListEntry
;
1764 WAIT_CONTEXT_BLOCK Wcb
;
1766 ULONG AlignmentRequirement
;
1767 KDEVICE_QUEUE DeviceQueue
;
1769 ULONG ActiveThreadCount
;
1770 PSECURITY_DESCRIPTOR SecurityDescriptor
;
1774 struct _DEVOBJ_EXTENSION
*DeviceObjectExtension
;
1776 } DEVICE_OBJECT
, *PDEVICE_OBJECT
;
1778 typedef enum _DEVICE_RELATION_TYPE
{
1783 TargetDeviceRelation
,
1785 } DEVICE_RELATION_TYPE
, *PDEVICE_RELATION_TYPE
;
1787 typedef struct _DEVICE_RELATIONS
{
1789 PDEVICE_OBJECT Objects
[1];
1790 } DEVICE_RELATIONS
, *PDEVICE_RELATIONS
;
1792 typedef struct _SCATTER_GATHER_ELEMENT
{
1793 PHYSICAL_ADDRESS Address
;
1796 } SCATTER_GATHER_ELEMENT
, *PSCATTER_GATHER_ELEMENT
;
1798 typedef struct _SCATTER_GATHER_LIST
{
1799 ULONG NumberOfElements
;
1801 SCATTER_GATHER_ELEMENT Elements
[0];
1802 } SCATTER_GATHER_LIST
, *PSCATTER_GATHER_LIST
;
1804 typedef struct _MDL
{
1808 struct _EPROCESS
*Process
;
1809 PVOID MappedSystemVa
;
1815 #define MDL_MAPPED_TO_SYSTEM_VA 0x0001
1816 #define MDL_PAGES_LOCKED 0x0002
1817 #define MDL_SOURCE_IS_NONPAGED_POOL 0x0004
1818 #define MDL_ALLOCATED_FIXED_SIZE 0x0008
1819 #define MDL_PARTIAL 0x0010
1820 #define MDL_PARTIAL_HAS_BEEN_MAPPED 0x0020
1821 #define MDL_IO_PAGE_READ 0x0040
1822 #define MDL_WRITE_OPERATION 0x0080
1823 #define MDL_PARENT_MAPPED_SYSTEM_VA 0x0100
1824 #define MDL_FREE_EXTRA_PTES 0x0200
1825 #define MDL_IO_SPACE 0x0800
1826 #define MDL_NETWORK_HEADER 0x1000
1827 #define MDL_MAPPING_CAN_FAIL 0x2000
1828 #define MDL_ALLOCATED_MUST_SUCCEED 0x4000
1830 #define MDL_MAPPING_FLAGS ( \
1831 MDL_MAPPED_TO_SYSTEM_VA | \
1832 MDL_PAGES_LOCKED | \
1833 MDL_SOURCE_IS_NONPAGED_POOL | \
1834 MDL_PARTIAL_HAS_BEEN_MAPPED | \
1835 MDL_PARENT_MAPPED_SYSTEM_VA | \
1840 (DDKAPI
*PPUT_DMA_ADAPTER
)(
1841 IN PDMA_ADAPTER DmaAdapter
);
1844 (DDKAPI
*PALLOCATE_COMMON_BUFFER
)(
1845 IN PDMA_ADAPTER DmaAdapter
,
1847 OUT PPHYSICAL_ADDRESS LogicalAddress
,
1848 IN BOOLEAN CacheEnabled
);
1851 (DDKAPI
*PFREE_COMMON_BUFFER
)(
1852 IN PDMA_ADAPTER DmaAdapter
,
1854 IN PHYSICAL_ADDRESS LogicalAddress
,
1855 IN PVOID VirtualAddress
,
1856 IN BOOLEAN CacheEnabled
);
1859 (DDKAPI
*PALLOCATE_ADAPTER_CHANNEL
)(
1860 IN PDMA_ADAPTER DmaAdapter
,
1861 IN PDEVICE_OBJECT DeviceObject
,
1862 IN ULONG NumberOfMapRegisters
,
1863 IN PDRIVER_CONTROL ExecutionRoutine
,
1867 (DDKAPI
*PFLUSH_ADAPTER_BUFFERS
)(
1868 IN PDMA_ADAPTER DmaAdapter
,
1870 IN PVOID MapRegisterBase
,
1873 IN BOOLEAN WriteToDevice
);
1876 (DDKAPI
*PFREE_ADAPTER_CHANNEL
)(
1877 IN PDMA_ADAPTER DmaAdapter
);
1880 (DDKAPI
*PFREE_MAP_REGISTERS
)(
1881 IN PDMA_ADAPTER DmaAdapter
,
1882 PVOID MapRegisterBase
,
1883 ULONG NumberOfMapRegisters
);
1885 typedef PHYSICAL_ADDRESS
1886 (DDKAPI
*PMAP_TRANSFER
)(
1887 IN PDMA_ADAPTER DmaAdapter
,
1889 IN PVOID MapRegisterBase
,
1891 IN OUT PULONG Length
,
1892 IN BOOLEAN WriteToDevice
);
1895 (DDKAPI
*PGET_DMA_ALIGNMENT
)(
1896 IN PDMA_ADAPTER DmaAdapter
);
1899 (DDKAPI
*PREAD_DMA_COUNTER
)(
1900 IN PDMA_ADAPTER DmaAdapter
);
1903 (DDKAPI
*PGET_SCATTER_GATHER_LIST
)(
1904 IN PDMA_ADAPTER DmaAdapter
,
1905 IN PDEVICE_OBJECT DeviceObject
,
1909 IN PDRIVER_LIST_CONTROL ExecutionRoutine
,
1911 IN BOOLEAN WriteToDevice
);
1914 (DDKAPI
*PPUT_SCATTER_GATHER_LIST
)(
1915 IN PDMA_ADAPTER DmaAdapter
,
1916 IN PSCATTER_GATHER_LIST ScatterGather
,
1917 IN BOOLEAN WriteToDevice
);
1920 (DDKAPI
*PCALCULATE_SCATTER_GATHER_LIST_SIZE
)(
1921 IN PDMA_ADAPTER DmaAdapter
,
1922 IN PMDL Mdl OPTIONAL
,
1925 OUT PULONG ScatterGatherListSize
,
1926 OUT PULONG pNumberOfMapRegisters OPTIONAL
);
1929 (DDKAPI
*PBUILD_SCATTER_GATHER_LIST
)(
1930 IN PDMA_ADAPTER DmaAdapter
,
1931 IN PDEVICE_OBJECT DeviceObject
,
1935 IN PDRIVER_LIST_CONTROL ExecutionRoutine
,
1937 IN BOOLEAN WriteToDevice
,
1938 IN PVOID ScatterGatherBuffer
,
1939 IN ULONG ScatterGatherLength
);
1942 (DDKAPI
*PBUILD_MDL_FROM_SCATTER_GATHER_LIST
)(
1943 IN PDMA_ADAPTER DmaAdapter
,
1944 IN PSCATTER_GATHER_LIST ScatterGather
,
1945 IN PMDL OriginalMdl
,
1946 OUT PMDL
*TargetMdl
);
1948 typedef struct _DMA_OPERATIONS
{
1950 PPUT_DMA_ADAPTER PutDmaAdapter
;
1951 PALLOCATE_COMMON_BUFFER AllocateCommonBuffer
;
1952 PFREE_COMMON_BUFFER FreeCommonBuffer
;
1953 PALLOCATE_ADAPTER_CHANNEL AllocateAdapterChannel
;
1954 PFLUSH_ADAPTER_BUFFERS FlushAdapterBuffers
;
1955 PFREE_ADAPTER_CHANNEL FreeAdapterChannel
;
1956 PFREE_MAP_REGISTERS FreeMapRegisters
;
1957 PMAP_TRANSFER MapTransfer
;
1958 PGET_DMA_ALIGNMENT GetDmaAlignment
;
1959 PREAD_DMA_COUNTER ReadDmaCounter
;
1960 PGET_SCATTER_GATHER_LIST GetScatterGatherList
;
1961 PPUT_SCATTER_GATHER_LIST PutScatterGatherList
;
1962 PCALCULATE_SCATTER_GATHER_LIST_SIZE CalculateScatterGatherList
;
1963 PBUILD_SCATTER_GATHER_LIST BuildScatterGatherList
;
1964 PBUILD_MDL_FROM_SCATTER_GATHER_LIST BuildMdlFromScatterGatherList
;
1965 } DMA_OPERATIONS
, *PDMA_OPERATIONS
;
1967 typedef struct _DMA_ADAPTER
{
1970 PDMA_OPERATIONS DmaOperations
;
1974 typedef enum _ARBITER_REQUEST_SOURCE
{
1975 ArbiterRequestUndefined
= -1,
1976 ArbiterRequestLegacyReported
,
1977 ArbiterRequestHalReported
,
1978 ArbiterRequestLegacyAssigned
,
1979 ArbiterRequestPnpDetected
,
1980 ArbiterRequestPnpEnumerated
1981 } ARBITER_REQUEST_SOURCE
;
1983 typedef enum _ARBITER_RESULT
{
1984 ArbiterResultUndefined
= -1,
1985 ArbiterResultSuccess
,
1986 ArbiterResultExternalConflict
,
1987 ArbiterResultNullRequest
1990 typedef enum _ARBITER_ACTION
{
1991 ArbiterActionTestAllocation
,
1992 ArbiterActionRetestAllocation
,
1993 ArbiterActionCommitAllocation
,
1994 ArbiterActionRollbackAllocation
,
1995 ArbiterActionQueryAllocatedResources
,
1996 ArbiterActionWriteReservedResources
,
1997 ArbiterActionQueryConflict
,
1998 ArbiterActionQueryArbitrate
,
1999 ArbiterActionAddReserved
,
2000 ArbiterActionBootAllocation
2001 } ARBITER_ACTION
, *PARBITER_ACTION
;
2003 typedef struct _ARBITER_CONFLICT_INFO
{
2004 PDEVICE_OBJECT OwningObject
;
2007 } ARBITER_CONFLICT_INFO
, *PARBITER_CONFLICT_INFO
;
2009 typedef struct _ARBITER_PARAMETERS
{
2012 IN OUT PLIST_ENTRY ArbitrationList
;
2013 IN ULONG AllocateFromCount
;
2014 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
2018 IN OUT PLIST_ENTRY ArbitrationList
;
2019 IN ULONG AllocateFromCount
;
2020 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
2024 IN OUT PLIST_ENTRY ArbitrationList
;
2028 OUT PCM_PARTIAL_RESOURCE_LIST
*AllocatedResources
;
2029 } QueryAllocatedResources
;
2032 IN PDEVICE_OBJECT PhysicalDeviceObject
;
2033 IN PIO_RESOURCE_DESCRIPTOR ConflictingResource
;
2034 OUT PULONG ConflictCount
;
2035 OUT PARBITER_CONFLICT_INFO
*Conflicts
;
2039 IN PLIST_ENTRY ArbitrationList
;
2043 IN PDEVICE_OBJECT ReserveDevice
;
2046 } ARBITER_PARAMETERS
, *PARBITER_PARAMETERS
;
2048 #define ARBITER_FLAG_BOOT_CONFIG 0x00000001
2050 typedef struct _ARBITER_LIST_ENTRY
{
2051 LIST_ENTRY ListEntry
;
2052 ULONG AlternativeCount
;
2053 PIO_RESOURCE_DESCRIPTOR Alternatives
;
2054 PDEVICE_OBJECT PhysicalDeviceObject
;
2055 ARBITER_REQUEST_SOURCE RequestSource
;
2058 INTERFACE_TYPE InterfaceType
;
2061 PCM_PARTIAL_RESOURCE_DESCRIPTOR Assignment
;
2062 PIO_RESOURCE_DESCRIPTOR SelectedAlternative
;
2063 ARBITER_RESULT Result
;
2064 } ARBITER_LIST_ENTRY
, *PARBITER_LIST_ENTRY
;
2067 (DDKAPI
*PARBITER_HANDLER
)(
2069 IN ARBITER_ACTION Action
,
2070 IN OUT PARBITER_PARAMETERS Parameters
);
2072 #define ARBITER_PARTIAL 0x00000001
2074 typedef struct _ARBITER_INTERFACE
{
2078 PINTERFACE_REFERENCE InterfaceReference
;
2079 PINTERFACE_DEREFERENCE InterfaceDereference
;
2080 PARBITER_HANDLER ArbiterHandler
;
2082 } ARBITER_INTERFACE
, *PARBITER_INTERFACE
;
2084 typedef enum _HAL_QUERY_INFORMATION_CLASS
{
2085 HalInstalledBusInformation
,
2086 HalProfileSourceInformation
,
2087 HalInformationClassUnused1
,
2088 HalPowerInformation
,
2089 HalProcessorSpeedInformation
,
2090 HalCallbackInformation
,
2091 HalMapRegisterInformation
,
2092 HalMcaLogInformation
,
2093 HalFrameBufferCachingInformation
,
2094 HalDisplayBiosInformation
,
2095 HalProcessorFeatureInformation
,
2096 HalNumaTopologyInterface
,
2097 HalErrorInformation
,
2098 HalCmcLogInformation
,
2099 HalCpeLogInformation
,
2100 HalQueryMcaInterface
,
2101 HalQueryAMLIIllegalIOPortAddresses
,
2102 HalQueryMaxHotPlugMemoryAddress
,
2103 HalPartitionIpiInterface
,
2104 HalPlatformInformation
,
2105 HalQueryProfileSourceList
2106 } HAL_QUERY_INFORMATION_CLASS
, *PHAL_QUERY_INFORMATION_CLASS
;
2108 typedef enum _HAL_SET_INFORMATION_CLASS
{
2109 HalProfileSourceInterval
,
2110 HalProfileSourceInterruptHandler
,
2111 HalMcaRegisterDriver
,
2112 HalKernelErrorHandler
,
2113 HalCmcRegisterDriver
,
2114 HalCpeRegisterDriver
,
2118 HalGenerateCmcInterrupt
2119 } HAL_SET_INFORMATION_CLASS
, *PHAL_SET_INFORMATION_CLASS
;
2121 /* Function Type Defintions for Dispatch Functions */
2124 (DDKAPI
*PDEVICE_CONTROL_COMPLETION
)(
2125 IN
struct _DEVICE_CONTROL_CONTEXT
*ControlContext
);
2127 typedef struct _DEVICE_CONTROL_CONTEXT
{
2129 PDEVICE_HANDLER_OBJECT DeviceHandler
;
2130 PDEVICE_OBJECT DeviceObject
;
2133 PULONG BufferLength
;
2135 } DEVICE_CONTROL_CONTEXT
, *PDEVICE_CONTROL_CONTEXT
;
2137 typedef struct _PM_DISPATCH_TABLE
{
2141 } PM_DISPATCH_TABLE
, *PPM_DISPATCH_TABLE
;
2143 typedef enum _RESOURCE_TRANSLATION_DIRECTION
{
2144 TranslateChildToParent
,
2145 TranslateParentToChild
2146 } RESOURCE_TRANSLATION_DIRECTION
;
2149 (DDKAPI
*PTRANSLATE_RESOURCE_HANDLER
)(
2151 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Source
,
2152 IN RESOURCE_TRANSLATION_DIRECTION Direction
,
2153 IN ULONG AlternativesCount
,
2154 IN IO_RESOURCE_DESCRIPTOR Alternatives
[],
2155 IN PDEVICE_OBJECT PhysicalDeviceObject
,
2156 OUT PCM_PARTIAL_RESOURCE_DESCRIPTOR Target
);
2159 (DDKAPI
*PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER
)(
2161 IN PIO_RESOURCE_DESCRIPTOR Source
,
2162 IN PDEVICE_OBJECT PhysicalDeviceObject
,
2163 OUT PULONG TargetCount
,
2164 OUT PIO_RESOURCE_DESCRIPTOR
*Target
);
2166 typedef struct _TRANSLATOR_INTERFACE
{
2170 PINTERFACE_REFERENCE InterfaceReference
;
2171 PINTERFACE_DEREFERENCE InterfaceDereference
;
2172 PTRANSLATE_RESOURCE_HANDLER TranslateResources
;
2173 PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER TranslateResourceRequirements
;
2174 } TRANSLATOR_INTERFACE
, *PTRANSLATOR_INTERFACE
;
2177 (DDKAPI
*pHalDeviceControl
)(
2178 IN PDEVICE_HANDLER_OBJECT DeviceHandler
,
2179 IN PDEVICE_OBJECT DeviceObject
,
2180 IN ULONG ControlCode
,
2181 IN OUT PVOID Buffer OPTIONAL
,
2182 IN OUT PULONG BufferLength OPTIONAL
,
2184 IN PDEVICE_CONTROL_COMPLETION CompletionRoutine
);
2187 (DDKFASTAPI
*pHalExamineMBR
)(
2188 IN PDEVICE_OBJECT DeviceObject
,
2189 IN ULONG SectorSize
,
2190 IN ULONG MBRTypeIdentifier
,
2194 (DDKFASTAPI
*pHalIoAssignDriveLetters
)(
2195 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
2196 IN PSTRING NtDeviceName
,
2197 OUT PUCHAR NtSystemPath
,
2198 OUT PSTRING NtSystemPathString
);
2201 (DDKFASTAPI
*pHalIoReadPartitionTable
)(
2202 IN PDEVICE_OBJECT DeviceObject
,
2203 IN ULONG SectorSize
,
2204 IN BOOLEAN ReturnRecognizedPartitions
,
2205 OUT PDRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
2208 (DDKFASTAPI
*pHalIoSetPartitionInformation
)(
2209 IN PDEVICE_OBJECT DeviceObject
,
2210 IN ULONG SectorSize
,
2211 IN ULONG PartitionNumber
,
2212 IN ULONG PartitionType
);
2215 (DDKFASTAPI
*pHalIoWritePartitionTable
)(
2216 IN PDEVICE_OBJECT DeviceObject
,
2217 IN ULONG SectorSize
,
2218 IN ULONG SectorsPerTrack
,
2219 IN ULONG NumberOfHeads
,
2220 IN PDRIVE_LAYOUT_INFORMATION PartitionBuffer
);
2222 typedef PBUS_HANDLER
2223 (DDKFASTAPI
*pHalHandlerForBus
)(
2224 IN INTERFACE_TYPE InterfaceType
,
2225 IN ULONG BusNumber
);
2228 (DDKFASTAPI
*pHalReferenceBusHandler
)(
2229 IN PBUS_HANDLER BusHandler
);
2232 (DDKAPI
*pHalQuerySystemInformation
)(
2233 IN HAL_QUERY_INFORMATION_CLASS InformationClass
,
2234 IN ULONG BufferSize
,
2235 IN OUT PVOID Buffer
,
2236 OUT PULONG ReturnedLength
);
2239 (DDKAPI
*pHalSetSystemInformation
)(
2240 IN HAL_SET_INFORMATION_CLASS InformationClass
,
2241 IN ULONG BufferSize
,
2245 (DDKAPI
*pHalQueryBusSlots
)(
2246 IN PBUS_HANDLER BusHandler
,
2247 IN ULONG BufferSize
,
2248 OUT PULONG SlotNumbers
,
2249 OUT PULONG ReturnedLength
);
2252 (DDKAPI
*pHalInitPnpDriver
)(
2256 (DDKAPI
*pHalInitPowerManagement
)(
2257 IN PPM_DISPATCH_TABLE PmDriverDispatchTable
,
2258 OUT PPM_DISPATCH_TABLE
*PmHalDispatchTable
);
2260 typedef struct _DMA_ADAPTER
*
2261 (DDKAPI
*pHalGetDmaAdapter
)(
2263 IN
struct _DEVICE_DESCRIPTION
*DeviceDescriptor
,
2264 OUT PULONG NumberOfMapRegisters
);
2267 (DDKAPI
*pHalGetInterruptTranslator
)(
2268 IN INTERFACE_TYPE ParentInterfaceType
,
2269 IN ULONG ParentBusNumber
,
2270 IN INTERFACE_TYPE BridgeInterfaceType
,
2273 OUT PTRANSLATOR_INTERFACE Translator
,
2274 OUT PULONG BridgeBusNumber
);
2277 (DDKAPI
*pHalStartMirroring
)(
2281 (DDKAPI
*pHalEndMirroring
)(
2282 IN ULONG PassNumber
);
2285 (DDKAPI
*pHalMirrorPhysicalMemory
)(
2286 IN PHYSICAL_ADDRESS PhysicalAddress
,
2287 IN LARGE_INTEGER NumberOfBytes
);
2290 (DDKAPI
*pHalMirrorVerify
)(
2291 IN PHYSICAL_ADDRESS PhysicalAddress
,
2292 IN LARGE_INTEGER NumberOfBytes
);
2295 (DDKAPI
*pHalEndOfBoot
)(
2299 (DDKAPI
*PHAL_RESET_DISPLAY_PARAMETERS
)(
2300 ULONG Columns
, ULONG Rows
);
2304 pHalQuerySystemInformation HalQuerySystemInformation
;
2305 pHalSetSystemInformation HalSetSystemInformation
;
2306 pHalQueryBusSlots HalQueryBusSlots
;
2308 pHalExamineMBR HalExamineMBR
;
2309 pHalIoAssignDriveLetters HalIoAssignDriveLetters
;
2310 pHalIoReadPartitionTable HalIoReadPartitionTable
;
2311 pHalIoSetPartitionInformation HalIoSetPartitionInformation
;
2312 pHalIoWritePartitionTable HalIoWritePartitionTable
;
2313 pHalHandlerForBus HalReferenceHandlerForBus
;
2314 pHalReferenceBusHandler HalReferenceBusHandler
;
2315 pHalReferenceBusHandler HalDereferenceBusHandler
;
2316 pHalInitPnpDriver HalInitPnpDriver
;
2317 pHalInitPowerManagement HalInitPowerManagement
;
2318 pHalGetDmaAdapter HalGetDmaAdapter
;
2319 pHalGetInterruptTranslator HalGetInterruptTranslator
;
2320 pHalStartMirroring HalStartMirroring
;
2321 pHalEndMirroring HalEndMirroring
;
2322 pHalMirrorPhysicalMemory HalMirrorPhysicalMemory
;
2323 pHalEndOfBoot HalEndOfBoot
;
2324 pHalMirrorVerify HalMirrorVerify
;
2325 } HAL_DISPATCH
, *PHAL_DISPATCH
;
2327 extern HAL_DISPATCH HalDispatchTable
;
2328 #define HALDISPATCH HalDispatchTable
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
;
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 enum _FSINFOCLASS
{
2433 FileFsVolumeInformation
= 1,
2434 FileFsLabelInformation
,
2435 FileFsSizeInformation
,
2436 FileFsDeviceInformation
,
2437 FileFsAttributeInformation
,
2438 FileFsControlInformation
,
2439 FileFsFullSizeInformation
,
2440 FileFsObjectIdInformation
,
2441 FileFsDriverPathInformation
,
2442 FileFsMaximumInformation
2443 } FS_INFORMATION_CLASS
, *PFS_INFORMATION_CLASS
;
2445 typedef struct _FILE_FS_DEVICE_INFORMATION
{
2446 DEVICE_TYPE DeviceType
;
2447 ULONG Characteristics
;
2448 } FILE_FS_DEVICE_INFORMATION
, *PFILE_FS_DEVICE_INFORMATION
;
2450 typedef struct _FILE_FULL_EA_INFORMATION
{
2451 ULONG NextEntryOffset
;
2454 USHORT EaValueLength
;
2456 } FILE_FULL_EA_INFORMATION
, *PFILE_FULL_EA_INFORMATION
;
2458 typedef ULONG_PTR ERESOURCE_THREAD
;
2459 typedef ERESOURCE_THREAD
*PERESOURCE_THREAD
;
2461 typedef struct _OWNER_ENTRY
{
2462 ERESOURCE_THREAD OwnerThread
;
2463 _ANONYMOUS_UNION
union {
2467 } OWNER_ENTRY
, *POWNER_ENTRY
;
2469 /* ERESOURCE.Flag */
2471 #define ResourceNeverExclusive 0x0010
2472 #define ResourceReleaseByOtherThread 0x0020
2473 #define ResourceOwnedExclusive 0x0080
2475 #define RESOURCE_HASH_TABLE_SIZE 64
2477 typedef struct _ERESOURCE
{
2478 LIST_ENTRY SystemResourcesList
;
2479 POWNER_ENTRY OwnerTable
;
2482 PKSEMAPHORE SharedWaiters
;
2483 PKEVENT ExclusiveWaiters
;
2484 OWNER_ENTRY OwnerThreads
[2];
2485 ULONG ContentionCount
;
2486 USHORT NumberOfSharedWaiters
;
2487 USHORT NumberOfExclusiveWaiters
;
2488 _ANONYMOUS_UNION
union {
2490 ULONG_PTR CreatorBackTraceIndex
;
2492 KSPIN_LOCK SpinLock
;
2493 } ERESOURCE
, *PERESOURCE
;
2495 /* NOTE: PVOID for methods to avoid 'assignment from incompatible pointer type' warning */
2496 typedef struct _DRIVER_EXTENSION
{
2497 struct _DRIVER_OBJECT
*DriverObject
;
2500 UNICODE_STRING ServiceKeyName
;
2501 } DRIVER_EXTENSION
, *PDRIVER_EXTENSION
;
2504 (DDKAPI
*PFAST_IO_CHECK_IF_POSSIBLE
)(
2505 IN
struct _FILE_OBJECT
*FileObject
,
2506 IN PLARGE_INTEGER FileOffset
,
2510 IN BOOLEAN CheckForReadOperation
,
2511 OUT PIO_STATUS_BLOCK IoStatus
,
2512 IN
struct _DEVICE_OBJECT
*DeviceObject
);
2515 (DDKAPI
*PFAST_IO_READ
)(
2516 IN
struct _FILE_OBJECT
*FileObject
,
2517 IN PLARGE_INTEGER FileOffset
,
2522 OUT PIO_STATUS_BLOCK IoStatus
,
2523 IN
struct _DEVICE_OBJECT
*DeviceObject
);
2526 (DDKAPI
*PFAST_IO_WRITE
)(
2527 IN
struct _FILE_OBJECT
*FileObject
,
2528 IN PLARGE_INTEGER FileOffset
,
2533 OUT PIO_STATUS_BLOCK IoStatus
,
2534 IN
struct _DEVICE_OBJECT
*DeviceObject
);
2537 (DDKAPI
*PFAST_IO_QUERY_BASIC_INFO
)(
2538 IN
struct _FILE_OBJECT
*FileObject
,
2540 OUT PFILE_BASIC_INFORMATION Buffer
,
2541 OUT PIO_STATUS_BLOCK IoStatus
,
2542 IN
struct _DEVICE_OBJECT
*DeviceObject
);
2545 (DDKAPI
*PFAST_IO_QUERY_STANDARD_INFO
)(
2546 IN
struct _FILE_OBJECT
*FileObject
,
2548 OUT PFILE_STANDARD_INFORMATION Buffer
,
2549 OUT PIO_STATUS_BLOCK IoStatus
,
2550 IN
struct _DEVICE_OBJECT
*DeviceObject
);
2553 (DDKAPI
*PFAST_IO_LOCK
)(
2554 IN
struct _FILE_OBJECT
*FileObject
,
2555 IN PLARGE_INTEGER FileOffset
,
2556 IN PLARGE_INTEGER Length
,
2557 PEPROCESS ProcessId
,
2559 BOOLEAN FailImmediately
,
2560 BOOLEAN ExclusiveLock
,
2561 OUT PIO_STATUS_BLOCK IoStatus
,
2562 IN
struct _DEVICE_OBJECT
*DeviceObject
);
2565 (DDKAPI
*PFAST_IO_UNLOCK_SINGLE
)(
2566 IN
struct _FILE_OBJECT
*FileObject
,
2567 IN PLARGE_INTEGER FileOffset
,
2568 IN PLARGE_INTEGER Length
,
2569 PEPROCESS ProcessId
,
2571 OUT PIO_STATUS_BLOCK IoStatus
,
2572 IN
struct _DEVICE_OBJECT
*DeviceObject
);
2575 (DDKAPI
*PFAST_IO_UNLOCK_ALL
)(
2576 IN
struct _FILE_OBJECT
*FileObject
,
2577 PEPROCESS ProcessId
,
2578 OUT PIO_STATUS_BLOCK IoStatus
,
2579 IN
struct _DEVICE_OBJECT
*DeviceObject
);
2582 (DDKAPI
*PFAST_IO_UNLOCK_ALL_BY_KEY
)(
2583 IN
struct _FILE_OBJECT
*FileObject
,
2584 PEPROCESS ProcessId
,
2586 OUT PIO_STATUS_BLOCK IoStatus
,
2587 IN
struct _DEVICE_OBJECT
*DeviceObject
);
2590 (DDKAPI
*PFAST_IO_DEVICE_CONTROL
)(
2591 IN
struct _FILE_OBJECT
*FileObject
,
2593 IN PVOID InputBuffer OPTIONAL
,
2594 IN ULONG InputBufferLength
,
2595 OUT PVOID OutputBuffer OPTIONAL
,
2596 IN ULONG OutputBufferLength
,
2597 IN ULONG IoControlCode
,
2598 OUT PIO_STATUS_BLOCK IoStatus
,
2599 IN
struct _DEVICE_OBJECT
*DeviceObject
);
2602 (DDKAPI
*PFAST_IO_ACQUIRE_FILE
)(
2603 IN
struct _FILE_OBJECT
*FileObject
);
2606 (DDKAPI
*PFAST_IO_RELEASE_FILE
)(
2607 IN
struct _FILE_OBJECT
*FileObject
);
2610 (DDKAPI
*PFAST_IO_DETACH_DEVICE
)(
2611 IN
struct _DEVICE_OBJECT
*SourceDevice
,
2612 IN
struct _DEVICE_OBJECT
*TargetDevice
);
2615 (DDKAPI
*PFAST_IO_QUERY_NETWORK_OPEN_INFO
)(
2616 IN
struct _FILE_OBJECT
*FileObject
,
2618 OUT
struct _FILE_NETWORK_OPEN_INFORMATION
*Buffer
,
2619 OUT
struct _IO_STATUS_BLOCK
*IoStatus
,
2620 IN
struct _DEVICE_OBJECT
*DeviceObject
);
2623 (DDKAPI
*PFAST_IO_ACQUIRE_FOR_MOD_WRITE
)(
2624 IN
struct _FILE_OBJECT
*FileObject
,
2625 IN PLARGE_INTEGER EndingOffset
,
2626 OUT
struct _ERESOURCE
**ResourceToRelease
,
2627 IN
struct _DEVICE_OBJECT
*DeviceObject
);
2630 (DDKAPI
*PFAST_IO_MDL_READ
)(
2631 IN
struct _FILE_OBJECT
*FileObject
,
2632 IN PLARGE_INTEGER FileOffset
,
2636 OUT PIO_STATUS_BLOCK IoStatus
,
2637 IN
struct _DEVICE_OBJECT
*DeviceObject
);
2640 (DDKAPI
*PFAST_IO_MDL_READ_COMPLETE
)(
2641 IN
struct _FILE_OBJECT
*FileObject
,
2643 IN
struct _DEVICE_OBJECT
*DeviceObject
);
2646 (DDKAPI
*PFAST_IO_PREPARE_MDL_WRITE
)(
2647 IN
struct _FILE_OBJECT
*FileObject
,
2648 IN PLARGE_INTEGER FileOffset
,
2652 OUT PIO_STATUS_BLOCK IoStatus
,
2653 IN
struct _DEVICE_OBJECT
*DeviceObject
);
2656 (DDKAPI
*PFAST_IO_MDL_WRITE_COMPLETE
)(
2657 IN
struct _FILE_OBJECT
*FileObject
,
2658 IN PLARGE_INTEGER FileOffset
,
2660 IN
struct _DEVICE_OBJECT
*DeviceObject
);
2663 (DDKAPI
*PFAST_IO_READ_COMPRESSED
)(
2664 IN
struct _FILE_OBJECT
*FileObject
,
2665 IN PLARGE_INTEGER FileOffset
,
2670 OUT PIO_STATUS_BLOCK IoStatus
,
2671 OUT
struct _COMPRESSED_DATA_INFO
*CompressedDataInfo
,
2672 IN ULONG CompressedDataInfoLength
,
2673 IN
struct _DEVICE_OBJECT
*DeviceObject
);
2676 (DDKAPI
*PFAST_IO_WRITE_COMPRESSED
)(
2677 IN
struct _FILE_OBJECT
*FileObject
,
2678 IN PLARGE_INTEGER FileOffset
,
2683 OUT PIO_STATUS_BLOCK IoStatus
,
2684 IN
struct _COMPRESSED_DATA_INFO
*CompressedDataInfo
,
2685 IN ULONG CompressedDataInfoLength
,
2686 IN
struct _DEVICE_OBJECT
*DeviceObject
);
2689 (DDKAPI
*PFAST_IO_MDL_READ_COMPLETE_COMPRESSED
)(
2690 IN
struct _FILE_OBJECT
*FileObject
,
2692 IN
struct _DEVICE_OBJECT
*DeviceObject
);
2695 (DDKAPI
*PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED
)(
2696 IN
struct _FILE_OBJECT
*FileObject
,
2697 IN PLARGE_INTEGER FileOffset
,
2699 IN
struct _DEVICE_OBJECT
*DeviceObject
);
2702 (DDKAPI
*PFAST_IO_QUERY_OPEN
)(
2703 IN
struct _IRP
*Irp
,
2704 OUT PFILE_NETWORK_OPEN_INFORMATION NetworkInformation
,
2705 IN
struct _DEVICE_OBJECT
*DeviceObject
);
2708 (DDKAPI
*PFAST_IO_RELEASE_FOR_MOD_WRITE
)(
2709 IN
struct _FILE_OBJECT
*FileObject
,
2710 IN
struct _ERESOURCE
*ResourceToRelease
,
2711 IN
struct _DEVICE_OBJECT
*DeviceObject
);
2714 (DDKAPI
*PFAST_IO_ACQUIRE_FOR_CCFLUSH
)(
2715 IN
struct _FILE_OBJECT
*FileObject
,
2716 IN
struct _DEVICE_OBJECT
*DeviceObject
);
2719 (DDKAPI
*PFAST_IO_RELEASE_FOR_CCFLUSH
) (
2720 IN
struct _FILE_OBJECT
*FileObject
,
2721 IN
struct _DEVICE_OBJECT
*DeviceObject
);
2723 typedef struct _FAST_IO_DISPATCH
{
2724 ULONG SizeOfFastIoDispatch
;
2725 PFAST_IO_CHECK_IF_POSSIBLE FastIoCheckIfPossible
;
2726 PFAST_IO_READ FastIoRead
;
2727 PFAST_IO_WRITE FastIoWrite
;
2728 PFAST_IO_QUERY_BASIC_INFO FastIoQueryBasicInfo
;
2729 PFAST_IO_QUERY_STANDARD_INFO FastIoQueryStandardInfo
;
2730 PFAST_IO_LOCK FastIoLock
;
2731 PFAST_IO_UNLOCK_SINGLE FastIoUnlockSingle
;
2732 PFAST_IO_UNLOCK_ALL FastIoUnlockAll
;
2733 PFAST_IO_UNLOCK_ALL_BY_KEY FastIoUnlockAllByKey
;
2734 PFAST_IO_DEVICE_CONTROL FastIoDeviceControl
;
2735 PFAST_IO_ACQUIRE_FILE AcquireFileForNtCreateSection
;
2736 PFAST_IO_RELEASE_FILE ReleaseFileForNtCreateSection
;
2737 PFAST_IO_DETACH_DEVICE FastIoDetachDevice
;
2738 PFAST_IO_QUERY_NETWORK_OPEN_INFO FastIoQueryNetworkOpenInfo
;
2739 PFAST_IO_ACQUIRE_FOR_MOD_WRITE AcquireForModWrite
;
2740 PFAST_IO_MDL_READ MdlRead
;
2741 PFAST_IO_MDL_READ_COMPLETE MdlReadComplete
;
2742 PFAST_IO_PREPARE_MDL_WRITE PrepareMdlWrite
;
2743 PFAST_IO_MDL_WRITE_COMPLETE MdlWriteComplete
;
2744 PFAST_IO_READ_COMPRESSED FastIoReadCompressed
;
2745 PFAST_IO_WRITE_COMPRESSED FastIoWriteCompressed
;
2746 PFAST_IO_MDL_READ_COMPLETE_COMPRESSED MdlReadCompleteCompressed
;
2747 PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED MdlWriteCompleteCompressed
;
2748 PFAST_IO_QUERY_OPEN FastIoQueryOpen
;
2749 PFAST_IO_RELEASE_FOR_MOD_WRITE ReleaseForModWrite
;
2750 PFAST_IO_ACQUIRE_FOR_CCFLUSH AcquireForCcFlush
;
2751 PFAST_IO_RELEASE_FOR_CCFLUSH ReleaseForCcFlush
;
2752 } FAST_IO_DISPATCH
, *PFAST_IO_DISPATCH
;
2754 typedef struct _DRIVER_OBJECT
{
2757 PDEVICE_OBJECT DeviceObject
;
2761 PVOID DriverSection
;
2762 PDRIVER_EXTENSION DriverExtension
;
2763 UNICODE_STRING DriverName
;
2764 PUNICODE_STRING HardwareDatabase
;
2765 PFAST_IO_DISPATCH FastIoDispatch
;
2766 PDRIVER_INITIALIZE DriverInit
;
2767 PDRIVER_STARTIO DriverStartIo
;
2768 PDRIVER_UNLOAD DriverUnload
;
2769 PDRIVER_DISPATCH MajorFunction
[IRP_MJ_MAXIMUM_FUNCTION
+ 1];
2771 typedef struct _DRIVER_OBJECT
*PDRIVER_OBJECT
;
2773 typedef struct _SECTION_OBJECT_POINTERS
{
2774 PVOID DataSectionObject
;
2775 PVOID SharedCacheMap
;
2776 PVOID ImageSectionObject
;
2777 } SECTION_OBJECT_POINTERS
, *PSECTION_OBJECT_POINTERS
;
2779 typedef struct _IO_COMPLETION_CONTEXT
{
2782 } IO_COMPLETION_CONTEXT
, *PIO_COMPLETION_CONTEXT
;
2784 /* FILE_OBJECT.Flags */
2786 #define FO_FILE_OPEN 0x00000001
2787 #define FO_SYNCHRONOUS_IO 0x00000002
2788 #define FO_ALERTABLE_IO 0x00000004
2789 #define FO_NO_INTERMEDIATE_BUFFERING 0x00000008
2790 #define FO_WRITE_THROUGH 0x00000010
2791 #define FO_SEQUENTIAL_ONLY 0x00000020
2792 #define FO_CACHE_SUPPORTED 0x00000040
2793 #define FO_NAMED_PIPE 0x00000080
2794 #define FO_STREAM_FILE 0x00000100
2795 #define FO_MAILSLOT 0x00000200
2796 #define FO_GENERATE_AUDIT_ON_CLOSE 0x00000400
2797 #define FO_DIRECT_DEVICE_OPEN 0x00000800
2798 #define FO_FILE_MODIFIED 0x00001000
2799 #define FO_FILE_SIZE_CHANGED 0x00002000
2800 #define FO_CLEANUP_COMPLETE 0x00004000
2801 #define FO_TEMPORARY_FILE 0x00008000
2802 #define FO_DELETE_ON_CLOSE 0x00010000
2803 #define FO_OPENED_CASE_SENSITIVE 0x00020000
2804 #define FO_HANDLE_CREATED 0x00040000
2805 #define FO_FILE_FAST_IO_READ 0x00080000
2806 #define FO_RANDOM_ACCESS 0x00100000
2807 #define FO_FILE_OPEN_CANCELLED 0x00200000
2808 #define FO_VOLUME_OPEN 0x00400000
2809 #define FO_FILE_OBJECT_HAS_EXTENSION 0x00800000
2810 #define FO_REMOTE_ORIGIN 0x01000000
2812 typedef struct _FILE_OBJECT
{
2815 PDEVICE_OBJECT DeviceObject
;
2819 PSECTION_OBJECT_POINTERS SectionObjectPointer
;
2820 PVOID PrivateCacheMap
;
2821 NTSTATUS FinalStatus
;
2822 struct _FILE_OBJECT
*RelatedFileObject
;
2823 BOOLEAN LockOperation
;
2824 BOOLEAN DeletePending
;
2826 BOOLEAN WriteAccess
;
2827 BOOLEAN DeleteAccess
;
2829 BOOLEAN SharedWrite
;
2830 BOOLEAN SharedDelete
;
2832 UNICODE_STRING FileName
;
2833 LARGE_INTEGER CurrentByteOffset
;
2839 PIO_COMPLETION_CONTEXT CompletionContext
;
2841 typedef struct _FILE_OBJECT
*PFILE_OBJECT
;
2843 typedef enum _SECURITY_OPERATION_CODE
{
2844 SetSecurityDescriptor
,
2845 QuerySecurityDescriptor
,
2846 DeleteSecurityDescriptor
,
2847 AssignSecurityDescriptor
2848 } SECURITY_OPERATION_CODE
, *PSECURITY_OPERATION_CODE
;
2850 #define INITIAL_PRIVILEGE_COUNT 3
2852 typedef struct _INITIAL_PRIVILEGE_SET
{
2853 ULONG PrivilegeCount
;
2855 LUID_AND_ATTRIBUTES Privilege
[INITIAL_PRIVILEGE_COUNT
];
2856 } INITIAL_PRIVILEGE_SET
, * PINITIAL_PRIVILEGE_SET
;
2858 typedef struct _SECURITY_SUBJECT_CONTEXT
{
2859 PACCESS_TOKEN ClientToken
;
2860 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
;
2861 PACCESS_TOKEN PrimaryToken
;
2862 PVOID ProcessAuditId
;
2863 } SECURITY_SUBJECT_CONTEXT
, *PSECURITY_SUBJECT_CONTEXT
;
2865 #include <pshpack4.h>
2866 typedef struct _ACCESS_STATE
{
2868 BOOLEAN SecurityEvaluated
;
2869 BOOLEAN GenerateAudit
;
2870 BOOLEAN GenerateOnClose
;
2871 BOOLEAN PrivilegesAllocated
;
2873 ACCESS_MASK RemainingDesiredAccess
;
2874 ACCESS_MASK PreviouslyGrantedAccess
;
2875 ACCESS_MASK OriginalDesiredAccess
;
2876 SECURITY_SUBJECT_CONTEXT SubjectSecurityContext
;
2877 PSECURITY_DESCRIPTOR SecurityDescriptor
;
2880 INITIAL_PRIVILEGE_SET InitialPrivilegeSet
;
2881 PRIVILEGE_SET PrivilegeSet
;
2884 BOOLEAN AuditPrivileges
;
2885 UNICODE_STRING ObjectName
;
2886 UNICODE_STRING ObjectTypeName
;
2887 } ACCESS_STATE
, *PACCESS_STATE
;
2888 #include <poppack.h>
2890 typedef struct _IO_SECURITY_CONTEXT
{
2891 PSECURITY_QUALITY_OF_SERVICE SecurityQos
;
2892 PACCESS_STATE AccessState
;
2893 ACCESS_MASK DesiredAccess
;
2894 ULONG FullCreateOptions
;
2895 } IO_SECURITY_CONTEXT
, *PIO_SECURITY_CONTEXT
;
2897 #define IO_TYPE_CSQ_IRP_CONTEXT 1
2898 #define IO_TYPE_CSQ 2
2902 typedef struct _IO_CSQ_IRP_CONTEXT
{
2905 struct _IO_CSQ
*Csq
;
2906 } IO_CSQ_IRP_CONTEXT
, *PIO_CSQ_IRP_CONTEXT
;
2909 (DDKAPI
*PIO_CSQ_INSERT_IRP
)(
2910 IN
struct _IO_CSQ
*Csq
,
2914 (DDKAPI
*PIO_CSQ_REMOVE_IRP
)(
2915 IN
struct _IO_CSQ
*Csq
,
2919 (DDKAPI
*PIO_CSQ_PEEK_NEXT_IRP
)(
2920 IN
struct _IO_CSQ
*Csq
,
2922 IN PVOID PeekContext
);
2925 (DDKAPI
*PIO_CSQ_ACQUIRE_LOCK
)(
2926 IN
struct _IO_CSQ
*Csq
,
2930 (DDKAPI
*PIO_CSQ_RELEASE_LOCK
)(
2931 IN
struct _IO_CSQ
*Csq
,
2935 (DDKAPI
*PIO_CSQ_COMPLETE_CANCELED_IRP
)(
2936 IN
struct _IO_CSQ
*Csq
,
2939 typedef struct _IO_CSQ
{
2941 PIO_CSQ_INSERT_IRP CsqInsertIrp
;
2942 PIO_CSQ_REMOVE_IRP CsqRemoveIrp
;
2943 PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp
;
2944 PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock
;
2945 PIO_CSQ_RELEASE_LOCK CsqReleaseLock
;
2946 PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp
;
2947 PVOID ReservePointer
;
2950 #if !defined(_ALPHA_)
2951 #include <pshpack4.h>
2953 typedef struct _IO_STACK_LOCATION
{
2954 UCHAR MajorFunction
;
2955 UCHAR MinorFunction
;
2960 PIO_SECURITY_CONTEXT SecurityContext
;
2962 USHORT POINTER_ALIGNMENT FileAttributes
;
2964 ULONG POINTER_ALIGNMENT EaLength
;
2967 PIO_SECURITY_CONTEXT SecurityContext
;
2971 PNAMED_PIPE_CREATE_PARAMETERS Parameters
;
2974 PIO_SECURITY_CONTEXT SecurityContext
;
2978 PMAILSLOT_CREATE_PARAMETERS Parameters
;
2982 ULONG POINTER_ALIGNMENT Key
;
2983 LARGE_INTEGER ByteOffset
;
2987 ULONG POINTER_ALIGNMENT Key
;
2988 LARGE_INTEGER ByteOffset
;
2992 PUNICODE_STRING FileName
;
2993 FILE_INFORMATION_CLASS FileInformationClass
;
2998 ULONG CompletionFilter
;
3002 FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass
;
3006 FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass
;
3007 PFILE_OBJECT FileObject
;
3008 _ANONYMOUS_UNION
union {
3009 _ANONYMOUS_STRUCT
struct {
3010 BOOLEAN ReplaceIfExists
;
3011 BOOLEAN AdvanceOnly
;
3014 HANDLE DeleteHandle
;
3028 FS_INFORMATION_CLASS POINTER_ALIGNMENT FsInformationClass
;
3032 FS_INFORMATION_CLASS FsInformationClass
;
3035 ULONG OutputBufferLength
;
3036 ULONG InputBufferLength
;
3037 ULONG FsControlCode
;
3038 PVOID Type3InputBuffer
;
3039 } FileSystemControl
;
3041 PLARGE_INTEGER Length
;
3043 LARGE_INTEGER ByteOffset
;
3046 ULONG OutputBufferLength
;
3047 ULONG POINTER_ALIGNMENT InputBufferLength
;
3048 ULONG POINTER_ALIGNMENT IoControlCode
;
3049 PVOID Type3InputBuffer
;
3052 SECURITY_INFORMATION SecurityInformation
;
3053 ULONG POINTER_ALIGNMENT Length
;
3056 SECURITY_INFORMATION SecurityInformation
;
3057 PSECURITY_DESCRIPTOR SecurityDescriptor
;
3061 PDEVICE_OBJECT DeviceObject
;
3065 PDEVICE_OBJECT DeviceObject
;
3068 struct _SCSI_REQUEST_BLOCK
*Srb
;
3073 PFILE_GET_QUOTA_INFORMATION SidList
;
3074 ULONG SidListLength
;
3080 DEVICE_RELATION_TYPE Type
;
3081 } QueryDeviceRelations
;
3083 CONST GUID
*InterfaceType
;
3086 PINTERFACE Interface
;
3087 PVOID InterfaceSpecificData
;
3090 PDEVICE_CAPABILITIES Capabilities
;
3091 } DeviceCapabilities
;
3093 PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList
;
3094 } FilterResourceRequirements
;
3099 ULONG POINTER_ALIGNMENT Length
;
3105 BUS_QUERY_ID_TYPE IdType
;
3108 DEVICE_TEXT_TYPE DeviceTextType
;
3109 LCID POINTER_ALIGNMENT LocaleId
;
3113 BOOLEAN Reserved
[3];
3114 DEVICE_USAGE_NOTIFICATION_TYPE POINTER_ALIGNMENT Type
;
3115 } UsageNotification
;
3117 SYSTEM_POWER_STATE PowerState
;
3120 PPOWER_SEQUENCE PowerSequence
;
3123 ULONG SystemContext
;
3124 POWER_STATE_TYPE POINTER_ALIGNMENT Type
;
3125 POWER_STATE POINTER_ALIGNMENT State
;
3126 POWER_ACTION POINTER_ALIGNMENT ShutdownType
;
3129 PCM_RESOURCE_LIST AllocatedResources
;
3130 PCM_RESOURCE_LIST AllocatedResourcesTranslated
;
3133 ULONG_PTR ProviderId
;
3145 PDEVICE_OBJECT DeviceObject
;
3146 PFILE_OBJECT FileObject
;
3147 PIO_COMPLETION_ROUTINE CompletionRoutine
;
3149 } IO_STACK_LOCATION
, *PIO_STACK_LOCATION
;
3150 #if !defined(_ALPHA_)
3151 #include <poppack.h>
3154 /* IO_STACK_LOCATION.Control */
3156 #define SL_PENDING_RETURNED 0x01
3157 #define SL_INVOKE_ON_CANCEL 0x20
3158 #define SL_INVOKE_ON_SUCCESS 0x40
3159 #define SL_INVOKE_ON_ERROR 0x80
3161 typedef enum _KEY_INFORMATION_CLASS
{
3162 KeyBasicInformation
,
3166 KeyCachedInformation
,
3168 } KEY_INFORMATION_CLASS
;
3170 typedef struct _KEY_BASIC_INFORMATION
{
3171 LARGE_INTEGER LastWriteTime
;
3175 } KEY_BASIC_INFORMATION
, *PKEY_BASIC_INFORMATION
;
3177 typedef struct _KEY_FULL_INFORMATION
{
3178 LARGE_INTEGER LastWriteTime
;
3186 ULONG MaxValueNameLen
;
3187 ULONG MaxValueDataLen
;
3189 } KEY_FULL_INFORMATION
, *PKEY_FULL_INFORMATION
;
3191 typedef struct _KEY_NODE_INFORMATION
{
3192 LARGE_INTEGER LastWriteTime
;
3198 } KEY_NODE_INFORMATION
, *PKEY_NODE_INFORMATION
;
3200 typedef struct _KEY_VALUE_BASIC_INFORMATION
{
3205 } KEY_VALUE_BASIC_INFORMATION
, *PKEY_VALUE_BASIC_INFORMATION
;
3207 typedef struct _KEY_VALUE_FULL_INFORMATION
{
3214 } KEY_VALUE_FULL_INFORMATION
, *PKEY_VALUE_FULL_INFORMATION
;
3216 typedef struct _KEY_VALUE_PARTIAL_INFORMATION
{
3221 } KEY_VALUE_PARTIAL_INFORMATION
, *PKEY_VALUE_PARTIAL_INFORMATION
;
3223 typedef struct _KEY_VALUE_PARTIAL_INFORMATION_ALIGN64
{
3227 } KEY_VALUE_PARTIAL_INFORMATION_ALIGN64
, *PKEY_VALUE_PARTIAL_INFORMATION_ALIGN64
;
3229 typedef struct _KEY_VALUE_ENTRY
{
3230 PUNICODE_STRING ValueName
;
3234 } KEY_VALUE_ENTRY
, *PKEY_VALUE_ENTRY
;
3236 typedef enum _KEY_VALUE_INFORMATION_CLASS
{
3237 KeyValueBasicInformation
,
3238 KeyValueFullInformation
,
3239 KeyValuePartialInformation
,
3240 KeyValueFullInformationAlign64
,
3241 KeyValuePartialInformationAlign64
3242 } KEY_VALUE_INFORMATION_CLASS
;
3244 /* KEY_VALUE_Xxx.Type */
3248 #define REG_EXPAND_SZ 2
3249 #define REG_BINARY 3
3251 #define REG_DWORD_LITTLE_ENDIAN 4
3252 #define REG_DWORD_BIG_ENDIAN 5
3254 #define REG_MULTI_SZ 7
3255 #define REG_RESOURCE_LIST 8
3256 #define REG_FULL_RESOURCE_DESCRIPTOR 9
3257 #define REG_RESOURCE_REQUIREMENTS_LIST 10
3258 #define REG_QWORD 11
3259 #define REG_QWORD_LITTLE_ENDIAN 11
3261 #define PCI_TYPE0_ADDRESSES 6
3262 #define PCI_TYPE1_ADDRESSES 2
3263 #define PCI_TYPE2_ADDRESSES 5
3265 typedef struct _PCI_COMMON_CONFIG
{
3274 UCHAR CacheLineSize
;
3279 struct _PCI_HEADER_TYPE_0
{
3280 ULONG BaseAddresses
[PCI_TYPE0_ADDRESSES
];
3284 ULONG ROMBaseAddress
;
3285 UCHAR CapabilitiesPtr
;
3288 UCHAR InterruptLine
;
3291 UCHAR MaximumLatency
;
3293 struct _PCI_HEADER_TYPE_1
{
3294 ULONG BaseAddresses
[PCI_TYPE1_ADDRESSES
];
3297 UCHAR SubordinateBus
;
3298 UCHAR SecondaryLatency
;
3301 USHORT SecondaryStatus
;
3304 USHORT PrefetchBase
;
3305 USHORT PrefetchLimit
;
3306 ULONG PrefetchBaseUpper32
;
3307 ULONG PrefetchLimitUpper32
;
3308 USHORT IOBaseUpper16
;
3309 USHORT IOLimitUpper16
;
3310 UCHAR CapabilitiesPtr
;
3312 ULONG ROMBaseAddress
;
3313 UCHAR InterruptLine
;
3315 USHORT BridgeControl
;
3317 struct _PCI_HEADER_TYPE_2
{
3318 ULONG SocketRegistersBaseAddress
;
3319 UCHAR CapabilitiesPtr
;
3321 USHORT SecondaryStatus
;
3324 UCHAR SubordinateBus
;
3325 UCHAR SecondaryLatency
;
3329 } Range
[PCI_TYPE2_ADDRESSES
- 1];
3330 UCHAR InterruptLine
;
3332 USHORT BridgeControl
;
3335 UCHAR DeviceSpecific
[192];
3336 } PCI_COMMON_CONFIG
, *PPCI_COMMON_CONFIG
;
3338 /* PCI_COMMON_CONFIG.Command */
3340 #define PCI_ENABLE_IO_SPACE 0x0001
3341 #define PCI_ENABLE_MEMORY_SPACE 0x0002
3342 #define PCI_ENABLE_BUS_MASTER 0x0004
3343 #define PCI_ENABLE_SPECIAL_CYCLES 0x0008
3344 #define PCI_ENABLE_WRITE_AND_INVALIDATE 0x0010
3345 #define PCI_ENABLE_VGA_COMPATIBLE_PALETTE 0x0020
3346 #define PCI_ENABLE_PARITY 0x0040
3347 #define PCI_ENABLE_WAIT_CYCLE 0x0080
3348 #define PCI_ENABLE_SERR 0x0100
3349 #define PCI_ENABLE_FAST_BACK_TO_BACK 0x0200
3351 /* PCI_COMMON_CONFIG.Status */
3353 #define PCI_STATUS_CAPABILITIES_LIST 0x0010
3354 #define PCI_STATUS_66MHZ_CAPABLE 0x0020
3355 #define PCI_STATUS_UDF_SUPPORTED 0x0040
3356 #define PCI_STATUS_FAST_BACK_TO_BACK 0x0080
3357 #define PCI_STATUS_DATA_PARITY_DETECTED 0x0100
3358 #define PCI_STATUS_DEVSEL 0x0600
3359 #define PCI_STATUS_SIGNALED_TARGET_ABORT 0x0800
3360 #define PCI_STATUS_RECEIVED_TARGET_ABORT 0x1000
3361 #define PCI_STATUS_RECEIVED_MASTER_ABORT 0x2000
3362 #define PCI_STATUS_SIGNALED_SYSTEM_ERROR 0x4000
3363 #define PCI_STATUS_DETECTED_PARITY_ERROR 0x8000
3365 /* PCI_COMMON_CONFIG.HeaderType */
3367 #define PCI_MULTIFUNCTION 0x80
3368 #define PCI_DEVICE_TYPE 0x00
3369 #define PCI_BRIDGE_TYPE 0x01
3370 #define PCI_CARDBUS_BRIDGE_TYPE 0x02
3372 #define PCI_CONFIGURATION_TYPE(PciData) \
3373 (((PPCI_COMMON_CONFIG) (PciData))->HeaderType & ~PCI_MULTIFUNCTION)
3375 #define PCI_MULTIFUNCTION_DEVICE(PciData) \
3376 ((((PPCI_COMMON_CONFIG) (PciData))->HeaderType & PCI_MULTIFUNCTION) != 0)
3378 /* PCI device classes */
3380 #define PCI_CLASS_PRE_20 0x00
3381 #define PCI_CLASS_MASS_STORAGE_CTLR 0x01
3382 #define PCI_CLASS_NETWORK_CTLR 0x02
3383 #define PCI_CLASS_DISPLAY_CTLR 0x03
3384 #define PCI_CLASS_MULTIMEDIA_DEV 0x04
3385 #define PCI_CLASS_MEMORY_CTLR 0x05
3386 #define PCI_CLASS_BRIDGE_DEV 0x06
3387 #define PCI_CLASS_SIMPLE_COMMS_CTLR 0x07
3388 #define PCI_CLASS_BASE_SYSTEM_DEV 0x08
3389 #define PCI_CLASS_INPUT_DEV 0x09
3390 #define PCI_CLASS_DOCKING_STATION 0x0a
3391 #define PCI_CLASS_PROCESSOR 0x0b
3392 #define PCI_CLASS_SERIAL_BUS_CTLR 0x0c
3394 /* PCI device subclasses for class 0 */
3396 #define PCI_SUBCLASS_PRE_20_NON_VGA 0x00
3397 #define PCI_SUBCLASS_PRE_20_VGA 0x01
3399 /* PCI device subclasses for class 1 (mass storage controllers)*/
3401 #define PCI_SUBCLASS_MSC_SCSI_BUS_CTLR 0x00
3402 #define PCI_SUBCLASS_MSC_IDE_CTLR 0x01
3403 #define PCI_SUBCLASS_MSC_FLOPPY_CTLR 0x02
3404 #define PCI_SUBCLASS_MSC_IPI_CTLR 0x03
3405 #define PCI_SUBCLASS_MSC_RAID_CTLR 0x04
3406 #define PCI_SUBCLASS_MSC_OTHER 0x80
3408 /* PCI device subclasses for class 2 (network controllers)*/
3410 #define PCI_SUBCLASS_NET_ETHERNET_CTLR 0x00
3411 #define PCI_SUBCLASS_NET_TOKEN_RING_CTLR 0x01
3412 #define PCI_SUBCLASS_NET_FDDI_CTLR 0x02
3413 #define PCI_SUBCLASS_NET_ATM_CTLR 0x03
3414 #define PCI_SUBCLASS_NET_OTHER 0x80
3416 /* PCI device subclasses for class 3 (display controllers)*/
3418 #define PCI_SUBCLASS_VID_VGA_CTLR 0x00
3419 #define PCI_SUBCLASS_VID_XGA_CTLR 0x01
3420 #define PCI_SUBLCASS_VID_3D_CTLR 0x02
3421 #define PCI_SUBCLASS_VID_OTHER 0x80
3423 /* PCI device subclasses for class 4 (multimedia device)*/
3425 #define PCI_SUBCLASS_MM_VIDEO_DEV 0x00
3426 #define PCI_SUBCLASS_MM_AUDIO_DEV 0x01
3427 #define PCI_SUBCLASS_MM_TELEPHONY_DEV 0x02
3428 #define PCI_SUBCLASS_MM_OTHER 0x80
3430 /* PCI device subclasses for class 5 (memory controller)*/
3432 #define PCI_SUBCLASS_MEM_RAM 0x00
3433 #define PCI_SUBCLASS_MEM_FLASH 0x01
3434 #define PCI_SUBCLASS_MEM_OTHER 0x80
3436 /* PCI device subclasses for class 6 (bridge device)*/
3438 #define PCI_SUBCLASS_BR_HOST 0x00
3439 #define PCI_SUBCLASS_BR_ISA 0x01
3440 #define PCI_SUBCLASS_BR_EISA 0x02
3441 #define PCI_SUBCLASS_BR_MCA 0x03
3442 #define PCI_SUBCLASS_BR_PCI_TO_PCI 0x04
3443 #define PCI_SUBCLASS_BR_PCMCIA 0x05
3444 #define PCI_SUBCLASS_BR_NUBUS 0x06
3445 #define PCI_SUBCLASS_BR_CARDBUS 0x07
3446 #define PCI_SUBCLASS_BR_OTHER 0x80
3448 /* PCI device subclasses for class C (serial bus controller)*/
3450 #define PCI_SUBCLASS_SB_IEEE1394 0x00
3451 #define PCI_SUBCLASS_SB_ACCESS 0x01
3452 #define PCI_SUBCLASS_SB_SSA 0x02
3453 #define PCI_SUBCLASS_SB_USB 0x03
3454 #define PCI_SUBCLASS_SB_FIBRE_CHANNEL 0x04
3456 #define PCI_MAX_DEVICES 32
3457 #define PCI_MAX_FUNCTION 8
3458 #define PCI_MAX_BRIDGE_NUMBER 0xFF
3459 #define PCI_INVALID_VENDORID 0xFFFF
3460 #define PCI_COMMON_HDR_LENGTH (FIELD_OFFSET(PCI_COMMON_CONFIG, DeviceSpecific))
3462 #define PCI_ADDRESS_IO_SPACE 0x01
3463 #define PCI_ADDRESS_MEMORY_TYPE_MASK 0x06
3464 #define PCI_ADDRESS_MEMORY_PREFETCHABLE 0x08
3465 #define PCI_ADDRESS_IO_ADDRESS_MASK 0xfffffffc
3466 #define PCI_ADDRESS_MEMORY_ADDRESS_MASK 0xfffffff0
3467 #define PCI_ADDRESS_ROM_ADDRESS_MASK 0xfffff800
3469 #define PCI_TYPE_32BIT 0
3470 #define PCI_TYPE_20BIT 2
3471 #define PCI_TYPE_64BIT 4
3473 typedef struct _PCI_SLOT_NUMBER
{
3476 ULONG DeviceNumber
: 5;
3477 ULONG FunctionNumber
: 3;
3478 ULONG Reserved
: 24;
3482 } PCI_SLOT_NUMBER
, *PPCI_SLOT_NUMBER
;
3484 typedef enum _POOL_TYPE
{
3487 NonPagedPoolMustSucceed
,
3489 NonPagedPoolCacheAligned
,
3490 PagedPoolCacheAligned
,
3491 NonPagedPoolCacheAlignedMustS
,
3493 NonPagedPoolSession
= 32,
3495 NonPagedPoolMustSucceedSession
,
3496 DontUseThisTypeSession
,
3497 NonPagedPoolCacheAlignedSession
,
3498 PagedPoolCacheAlignedSession
,
3499 NonPagedPoolCacheAlignedMustSSession
3502 typedef enum _EX_POOL_PRIORITY
{
3504 LowPoolPrioritySpecialPoolOverrun
= 8,
3505 LowPoolPrioritySpecialPoolUnderrun
= 9,
3506 NormalPoolPriority
= 16,
3507 NormalPoolPrioritySpecialPoolOverrun
= 24,
3508 NormalPoolPrioritySpecialPoolUnderrun
= 25,
3509 HighPoolPriority
= 32,
3510 HighPoolPrioritySpecialPoolOverrun
= 40,
3511 HighPoolPrioritySpecialPoolUnderrun
= 41
3514 /* PRIVILEGE_SET.Control */
3516 #define PRIVILEGE_SET_ALL_NECESSARY 1
3518 typedef struct _RTL_OSVERSIONINFOW
{
3519 ULONG dwOSVersionInfoSize
;
3520 ULONG dwMajorVersion
;
3521 ULONG dwMinorVersion
;
3522 ULONG dwBuildNumber
;
3524 WCHAR szCSDVersion
[128];
3525 } RTL_OSVERSIONINFOW
, *PRTL_OSVERSIONINFOW
;
3527 typedef struct _RTL_OSVERSIONINFOEXW
{
3528 ULONG dwOSVersionInfoSize
;
3529 ULONG dwMajorVersion
;
3530 ULONG dwMinorVersion
;
3531 ULONG dwBuildNumber
;
3533 WCHAR szCSDVersion
[128];
3534 USHORT wServicePackMajor
;
3535 USHORT wServicePackMinor
;
3539 } RTL_OSVERSIONINFOEXW
, *PRTL_OSVERSIONINFOEXW
;
3544 VerSetConditionMask(
3545 IN ULONGLONG ConditionMask
,
3547 IN UCHAR Condition
);
3549 #define VER_SET_CONDITION(ConditionMask, TypeBitMask, ComparisonType) \
3550 ((ConditionMask) = VerSetConditionMask((ConditionMask), \
3551 (TypeBitMask), (ComparisonType)))
3553 /* RtlVerifyVersionInfo() TypeMask */
3555 #define VER_MINORVERSION 0x0000001
3556 #define VER_MAJORVERSION 0x0000002
3557 #define VER_BUILDNUMBER 0x0000004
3558 #define VER_PLATFORMID 0x0000008
3559 #define VER_SERVICEPACKMINOR 0x0000010
3560 #define VER_SERVICEPACKMAJOR 0x0000020
3561 #define VER_SUITENAME 0x0000040
3562 #define VER_PRODUCT_TYPE 0x0000080
3564 /* RtlVerifyVersionInfo() ComparisonType */
3567 #define VER_GREATER 2
3568 #define VER_GREATER_EQUAL 3
3570 #define VER_LESS_EQUAL 5
3574 #define VER_CONDITION_MASK 7
3575 #define VER_NUM_BITS_PER_CONDITION_MASK 3
3577 typedef struct _RTL_BITMAP
{
3580 } RTL_BITMAP
, *PRTL_BITMAP
;
3582 typedef struct _RTL_BITMAP_RUN
{
3583 ULONG StartingIndex
;
3585 } RTL_BITMAP_RUN
, *PRTL_BITMAP_RUN
;
3588 (DDKAPI
*PRTL_QUERY_REGISTRY_ROUTINE
)(
3592 IN ULONG ValueLength
,
3594 IN PVOID EntryContext
);
3596 #define RTL_REGISTRY_ABSOLUTE 0
3597 #define RTL_REGISTRY_SERVICES 1
3598 #define RTL_REGISTRY_CONTROL 2
3599 #define RTL_REGISTRY_WINDOWS_NT 3
3600 #define RTL_REGISTRY_DEVICEMAP 4
3601 #define RTL_REGISTRY_USER 5
3602 #define RTL_REGISTRY_HANDLE 0x40000000
3603 #define RTL_REGISTRY_OPTIONAL 0x80000000
3605 /* RTL_QUERY_REGISTRY_TABLE.Flags */
3606 #define RTL_QUERY_REGISTRY_SUBKEY 0x00000001
3607 #define RTL_QUERY_REGISTRY_TOPKEY 0x00000002
3608 #define RTL_QUERY_REGISTRY_REQUIRED 0x00000004
3609 #define RTL_QUERY_REGISTRY_NOVALUE 0x00000008
3610 #define RTL_QUERY_REGISTRY_NOEXPAND 0x00000010
3611 #define RTL_QUERY_REGISTRY_DIRECT 0x00000020
3612 #define RTL_QUERY_REGISTRY_DELETE 0x00000040
3614 typedef struct _RTL_QUERY_REGISTRY_TABLE
{
3615 PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine
;
3621 ULONG DefaultLength
;
3622 } RTL_QUERY_REGISTRY_TABLE
, *PRTL_QUERY_REGISTRY_TABLE
;
3624 typedef struct _TIME_FIELDS
{
3631 CSHORT Milliseconds
;
3633 } TIME_FIELDS
, *PTIME_FIELDS
;
3636 (DDKAPI
*PALLOCATE_FUNCTION
)(
3637 IN POOL_TYPE PoolType
,
3638 IN SIZE_T NumberOfBytes
,
3642 (DDKAPI
*PFREE_FUNCTION
)(
3645 #define GENERAL_LOOKASIDE_S \
3646 SLIST_HEADER ListHead; \
3648 USHORT MaximumDepth; \
3649 ULONG TotalAllocates; \
3650 _ANONYMOUS_UNION union { \
3651 ULONG AllocateMisses; \
3652 ULONG AllocateHits; \
3655 _ANONYMOUS_UNION union { \
3658 } DUMMYUNIONNAME2; \
3662 PALLOCATE_FUNCTION Allocate; \
3663 PFREE_FUNCTION Free; \
3664 LIST_ENTRY ListEntry; \
3665 ULONG LastTotalAllocates; \
3666 _ANONYMOUS_UNION union { \
3667 ULONG LastAllocateMisses; \
3668 ULONG LastAllocateHits; \
3669 } DUMMYUNIONNAME3; \
3672 typedef struct _GENERAL_LOOKASIDE
{
3674 } GENERAL_LOOKASIDE
, *PGENERAL_LOOKASIDE
;
3676 typedef struct _NPAGED_LOOKASIDE_LIST
{
3678 KSPIN_LOCK Obsoleted
;
3679 } NPAGED_LOOKASIDE_LIST
, *PNPAGED_LOOKASIDE_LIST
;
3681 typedef struct _PAGED_LOOKASIDE_LIST
{
3683 FAST_MUTEX Obsoleted
;
3684 } PAGED_LOOKASIDE_LIST
, *PPAGED_LOOKASIDE_LIST
;
3686 typedef struct _PP_LOOKASIDE_LIST
{
3687 struct _GENERAL_LOOKASIDE
*P
;
3688 struct _GENERAL_LOOKASIDE
*L
;
3689 } PP_LOOKASIDE_LIST
, *PPP_LOOKASIDE_LIST
;
3691 typedef struct _CALLBACK_OBJECT
*PCALLBACK_OBJECT
;
3694 (DDKAPI
*PCALLBACK_FUNCTION
)(
3695 IN PVOID CallbackContext
,
3697 IN PVOID Argument2
);
3699 typedef enum _EVENT_TYPE
{
3701 SynchronizationEvent
3704 typedef enum _KWAIT_REASON
{
3742 typedef struct _KWAIT_BLOCK
{
3743 LIST_ENTRY WaitListEntry
;
3744 struct _KTHREAD
* RESTRICTED_POINTER Thread
;
3746 struct _KWAIT_BLOCK
* RESTRICTED_POINTER NextWaitBlock
;
3749 } KWAIT_BLOCK
, *PKWAIT_BLOCK
, *RESTRICTED_POINTER PRKWAIT_BLOCK
;
3751 typedef struct _IO_REMOVE_LOCK_TRACKING_BLOCK
* PIO_REMOVE_LOCK_TRACKING_BLOCK
;
3753 typedef struct _IO_REMOVE_LOCK_COMMON_BLOCK
{
3755 BOOLEAN Reserved
[3];
3758 } IO_REMOVE_LOCK_COMMON_BLOCK
;
3760 typedef struct _IO_REMOVE_LOCK_DBG_BLOCK
{
3763 LONGLONG MaxLockedTicks
;
3765 LIST_ENTRY LockList
;
3767 LONG LowMemoryCount
;
3770 PIO_REMOVE_LOCK_TRACKING_BLOCK Blocks
;
3771 } IO_REMOVE_LOCK_DBG_BLOCK
;
3773 typedef struct _IO_REMOVE_LOCK
{
3774 IO_REMOVE_LOCK_COMMON_BLOCK Common
;
3776 IO_REMOVE_LOCK_DBG_BLOCK Dbg
;
3778 } IO_REMOVE_LOCK
, *PIO_REMOVE_LOCK
;
3780 typedef struct _IO_WORKITEM
*PIO_WORKITEM
;
3783 (DDKAPI
*PIO_WORKITEM_ROUTINE
)(
3784 IN PDEVICE_OBJECT DeviceObject
,
3787 typedef struct _SHARE_ACCESS
{
3795 } SHARE_ACCESS
, *PSHARE_ACCESS
;
3797 typedef enum _KINTERRUPT_MODE
{
3803 (DDKAPI
*PKINTERRUPT_ROUTINE
)(
3806 typedef enum _KPROFILE_SOURCE
{
3808 ProfileAlignmentFixup
,
3811 ProfileLoadInstructions
,
3812 ProfilePipelineFrozen
,
3813 ProfileBranchInstructions
,
3814 ProfileTotalNonissues
,
3815 ProfileDcacheMisses
,
3816 ProfileIcacheMisses
,
3818 ProfileBranchMispredictions
,
3819 ProfileStoreInstructions
,
3820 ProfileFpInstructions
,
3821 ProfileIntegerInstructions
,
3825 ProfileSpecialInstructions
,
3827 ProfileIcacheIssues
,
3828 ProfileDcacheAccesses
,
3829 ProfileMemoryBarrierCycles
,
3830 ProfileLoadLinkedIssues
,
3834 typedef enum _CREATE_FILE_TYPE
{
3836 CreateFileTypeNamedPipe
,
3837 CreateFileTypeMailslot
3840 typedef struct _CONFIGURATION_INFORMATION
{
3845 ULONG ScsiPortCount
;
3847 ULONG ParallelCount
;
3848 BOOLEAN AtDiskPrimaryAddressClaimed
;
3849 BOOLEAN AtDiskSecondaryAddressClaimed
;
3851 ULONG MediumChangerCount
;
3852 } CONFIGURATION_INFORMATION
, *PCONFIGURATION_INFORMATION
;
3854 typedef enum _CONFIGURATION_TYPE
{
3857 FloatingPointProcessor
,
3867 MultiFunctionAdapter
,
3881 FloppyDiskPeripheral
,
3894 RealModeIrqRoutingTable
,
3896 } CONFIGURATION_TYPE
, *PCONFIGURATION_TYPE
;
3899 (DDKAPI
*PIO_QUERY_DEVICE_ROUTINE
)(
3901 IN PUNICODE_STRING PathName
,
3902 IN INTERFACE_TYPE BusType
,
3904 IN PKEY_VALUE_FULL_INFORMATION
*BusInformation
,
3905 IN CONFIGURATION_TYPE ControllerType
,
3906 IN ULONG ControllerNumber
,
3907 IN PKEY_VALUE_FULL_INFORMATION
*ControllerInformation
,
3908 IN CONFIGURATION_TYPE PeripheralType
,
3909 IN ULONG PeripheralNumber
,
3910 IN PKEY_VALUE_FULL_INFORMATION
*PeripheralInformation
);
3912 typedef enum _IO_QUERY_DEVICE_DATA_FORMAT
{
3913 IoQueryDeviceIdentifier
= 0,
3914 IoQueryDeviceConfigurationData
,
3915 IoQueryDeviceComponentInformation
,
3916 IoQueryDeviceMaxData
3917 } IO_QUERY_DEVICE_DATA_FORMAT
, *PIO_QUERY_DEVICE_DATA_FORMAT
;
3919 typedef enum _WORK_QUEUE_TYPE
{
3922 HyperCriticalWorkQueue
,
3927 (DDKAPI
*PWORKER_THREAD_ROUTINE
)(
3928 IN PVOID Parameter
);
3930 typedef struct _WORK_QUEUE_ITEM
{
3932 PWORKER_THREAD_ROUTINE WorkerRoutine
;
3934 } WORK_QUEUE_ITEM
, *PWORK_QUEUE_ITEM
;
3936 typedef enum _KBUGCHECK_CALLBACK_REASON
{
3938 KbCallbackReserved1
,
3939 KbCallbackSecondaryDumpData
,
3941 } KBUGCHECK_CALLBACK_REASON
;
3944 (DDKAPI
*PKBUGCHECK_REASON_CALLBACK_ROUTINE
)(
3945 IN KBUGCHECK_CALLBACK_REASON Reason
,
3946 IN
struct _KBUGCHECK_REASON_CALLBACK_RECORD
*Record
,
3947 IN OUT PVOID ReasonSpecificData
,
3948 IN ULONG ReasonSpecificDataLength
);
3950 typedef struct _KBUGCHECK_REASON_CALLBACK_RECORD
{
3952 PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine
;
3955 KBUGCHECK_CALLBACK_REASON Reason
;
3957 } KBUGCHECK_REASON_CALLBACK_RECORD
, *PKBUGCHECK_REASON_CALLBACK_RECORD
;
3959 typedef enum _KBUGCHECK_BUFFER_DUMP_STATE
{
3965 } KBUGCHECK_BUFFER_DUMP_STATE
;
3968 (DDKAPI
*PKBUGCHECK_CALLBACK_ROUTINE
)(
3972 typedef struct _KBUGCHECK_CALLBACK_RECORD
{
3974 PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine
;
3980 } KBUGCHECK_CALLBACK_RECORD
, *PKBUGCHECK_CALLBACK_RECORD
;
3984 * KeInitializeCallbackRecord(
3985 * IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord)
3987 #define KeInitializeCallbackRecord(CallbackRecord) \
3988 CallbackRecord->State = BufferEmpty;
3990 typedef enum _KDPC_IMPORTANCE
{
3996 typedef enum _MEMORY_CACHING_TYPE_ORIG
{
3997 MmFrameBufferCached
= 2
3998 } MEMORY_CACHING_TYPE_ORIG
;
4000 typedef enum _MEMORY_CACHING_TYPE
{
4001 MmNonCached
= FALSE
,
4003 MmWriteCombined
= MmFrameBufferCached
,
4004 MmHardwareCoherentCached
,
4005 MmNonCachedUnordered
,
4008 } MEMORY_CACHING_TYPE
;
4010 typedef enum _MM_PAGE_PRIORITY
{
4012 NormalPagePriority
= 16,
4013 HighPagePriority
= 32
4016 typedef enum _LOCK_OPERATION
{
4022 typedef enum _MM_SYSTEM_SIZE
{
4028 typedef struct _OBJECT_HANDLE_INFORMATION
{
4029 ULONG HandleAttributes
;
4030 ACCESS_MASK GrantedAccess
;
4031 } OBJECT_HANDLE_INFORMATION
, *POBJECT_HANDLE_INFORMATION
;
4033 typedef struct _CLIENT_ID
{
4034 HANDLE UniqueProcess
;
4035 HANDLE UniqueThread
;
4036 } CLIENT_ID
, *PCLIENT_ID
;
4039 (DDKAPI
*PKSTART_ROUTINE
)(
4040 IN PVOID StartContext
);
4043 (DDKAPI
*PCREATE_PROCESS_NOTIFY_ROUTINE
)(
4045 IN HANDLE ProcessId
,
4049 (DDKAPI
*PCREATE_THREAD_NOTIFY_ROUTINE
)(
4050 IN HANDLE ProcessId
,
4054 typedef struct _IMAGE_INFO
{
4055 _ANONYMOUS_UNION
union {
4057 _ANONYMOUS_STRUCT
struct {
4058 ULONG ImageAddressingMode
: 8;
4059 ULONG SystemModeImage
: 1;
4060 ULONG ImageMappedToAllPids
: 1;
4061 ULONG Reserved
: 22;
4065 ULONG ImageSelector
;
4067 ULONG ImageSectionNumber
;
4068 } IMAGE_INFO
, *PIMAGE_INFO
;
4070 #define IMAGE_ADDRESSING_MODE_32BIT 3
4073 (DDKAPI
*PLOAD_IMAGE_NOTIFY_ROUTINE
)(
4074 IN PUNICODE_STRING FullImageName
,
4075 IN HANDLE ProcessId
,
4076 IN PIMAGE_INFO ImageInfo
);
4078 typedef enum _PROCESSINFOCLASS
{
4079 ProcessBasicInformation
,
4084 ProcessBasePriority
,
4085 ProcessRaisePriority
,
4087 ProcessExceptionPort
,
4089 ProcessLdtInformation
,
4091 ProcessDefaultHardErrorMode
,
4092 ProcessIoPortHandlers
,
4093 ProcessPooledUsageAndLimits
,
4094 ProcessWorkingSetWatch
,
4095 ProcessUserModeIOPL
,
4096 ProcessEnableAlignmentFaultFixup
,
4097 ProcessPriorityClass
,
4098 ProcessWx86Information
,
4100 ProcessAffinityMask
,
4101 ProcessPriorityBoost
,
4103 ProcessSessionInformation
,
4104 ProcessForegroundInformation
,
4105 ProcessWow64Information
,
4106 ProcessImageFileName
,
4107 ProcessLUIDDeviceMapsEnabled
,
4108 ProcessBreakOnTermination
,
4109 ProcessDebugObjectHandle
,
4111 ProcessHandleTracing
,
4119 typedef enum _THREADINFOCLASS
{
4120 ThreadBasicInformation
,
4125 ThreadImpersonationToken
,
4126 ThreadDescriptorTableEntry
,
4127 ThreadEnableAlignmentFaultFixup
,
4128 ThreadEventPair_Reusable
,
4129 ThreadQuerySetWin32StartAddress
,
4131 ThreadPerformanceCount
,
4132 ThreadAmILastThread
,
4133 ThreadIdealProcessor
,
4134 ThreadPriorityBoost
,
4135 ThreadSetTlsArrayAddress
,
4137 ThreadHideFromDebugger
,
4138 ThreadBreakOnTermination
,
4142 #define ES_SYSTEM_REQUIRED 0x00000001
4143 #define ES_DISPLAY_REQUIRED 0x00000002
4144 #define ES_USER_PRESENT 0x00000004
4145 #define ES_CONTINUOUS 0x80000000
4147 typedef ULONG EXECUTION_STATE
;
4150 (DDKAPI
*PREQUEST_POWER_COMPLETE
)(
4151 IN PDEVICE_OBJECT DeviceObject
,
4152 IN UCHAR MinorFunction
,
4153 IN POWER_STATE PowerState
,
4155 IN PIO_STATUS_BLOCK IoStatus
);
4157 typedef enum _TRACE_INFORMATION_CLASS
{
4160 TraceEnableFlagsClass
,
4161 TraceEnableLevelClass
,
4162 GlobalLoggerHandleClass
,
4163 EventLoggerHandleClass
,
4164 AllLoggerHandlesClass
,
4165 TraceHandleByNameClass
4166 } TRACE_INFORMATION_CLASS
;
4169 (DDKAPI
*PEX_CALLBACK_FUNCTION
)(
4170 IN PVOID CallbackContext
,
4172 IN PVOID Argument2
);
4177 ** Storage structures
4179 typedef enum _PARTITION_STYLE
{
4180 PARTITION_STYLE_MBR
,
4184 typedef struct _CREATE_DISK_MBR
{
4186 } CREATE_DISK_MBR
, *PCREATE_DISK_MBR
;
4188 typedef struct _CREATE_DISK_GPT
{
4190 ULONG MaxPartitionCount
;
4191 } CREATE_DISK_GPT
, *PCREATE_DISK_GPT
;
4193 typedef struct _CREATE_DISK
{
4194 PARTITION_STYLE PartitionStyle
;
4195 _ANONYMOUS_UNION
union {
4196 CREATE_DISK_MBR Mbr
;
4197 CREATE_DISK_GPT Gpt
;
4199 } CREATE_DISK
, *PCREATE_DISK
;
4201 typedef struct _DISK_SIGNATURE
{
4202 ULONG PartitionStyle
;
4203 _ANONYMOUS_UNION
union {
4212 } DISK_SIGNATURE
, *PDISK_SIGNATURE
;
4214 typedef VOID DDKFASTAPI
4215 (*PTIME_UPDATE_NOTIFY_ROUTINE
)(
4217 IN KPROCESSOR_MODE Mode
);
4219 #define DBG_STATUS_CONTROL_C 1
4220 #define DBG_STATUS_SYSRQ 2
4221 #define DBG_STATUS_BUGCHECK_FIRST 3
4222 #define DBG_STATUS_BUGCHECK_SECOND 4
4223 #define DBG_STATUS_FATAL 5
4224 #define DBG_STATUS_DEBUG_CONTROL 6
4225 #define DBG_STATUS_WORKER 7
4227 typedef struct _PHYSICAL_MEMORY_RANGE
{
4228 PHYSICAL_ADDRESS BaseAddress
;
4229 LARGE_INTEGER NumberOfBytes
;
4230 } PHYSICAL_MEMORY_RANGE
, *PPHYSICAL_MEMORY_RANGE
;
4233 (*PDRIVER_VERIFIER_THUNK_ROUTINE
)(
4236 typedef struct _DRIVER_VERIFIER_THUNK_PAIRS
{
4237 PDRIVER_VERIFIER_THUNK_ROUTINE PristineRoutine
;
4238 PDRIVER_VERIFIER_THUNK_ROUTINE NewRoutine
;
4239 } DRIVER_VERIFIER_THUNK_PAIRS
, *PDRIVER_VERIFIER_THUNK_PAIRS
;
4241 #define DRIVER_VERIFIER_SPECIAL_POOLING 0x0001
4242 #define DRIVER_VERIFIER_FORCE_IRQL_CHECKING 0x0002
4243 #define DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES 0x0004
4244 #define DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS 0x0008
4245 #define DRIVER_VERIFIER_IO_CHECKING 0x0010
4247 #define RTL_RANGE_LIST_ADD_IF_CONFLICT 0x00000001
4248 #define RTL_RANGE_LIST_ADD_SHARED 0x00000002
4250 #define RTL_RANGE_LIST_SHARED_OK 0x00000001
4251 #define RTL_RANGE_LIST_NULL_CONFLICT_OK 0x00000002
4253 #define RTL_RANGE_LIST_MERGE_IF_CONFLICT RTL_RANGE_LIST_ADD_IF_CONFLICT
4255 typedef struct _RTL_RANGE
{
4262 } RTL_RANGE
, *PRTL_RANGE
;
4264 #define RTL_RANGE_SHARED 0x01
4265 #define RTL_RANGE_CONFLICT 0x02
4267 typedef struct _RTL_RANGE_LIST
{
4268 LIST_ENTRY ListHead
;
4272 } RTL_RANGE_LIST
, *PRTL_RANGE_LIST
;
4274 typedef struct _RANGE_LIST_ITERATOR
{
4275 PLIST_ENTRY RangeListHead
;
4276 PLIST_ENTRY MergedHead
;
4279 } RTL_RANGE_LIST_ITERATOR
, *PRTL_RANGE_LIST_ITERATOR
;
4282 (DDKAPI
*PRTL_CONFLICT_RANGE_CALLBACK
)(
4284 IN PRTL_RANGE Range
);
4286 #define HASH_STRING_ALGORITHM_DEFAULT 0
4287 #define HASH_STRING_ALGORITHM_X65599 1
4288 #define HASH_STRING_ALGORITHM_INVALID 0xffffffff
4290 typedef enum _SUITE_TYPE
{
4294 CommunicationServer
,
4296 SmallBusinessRestricted
,
4306 (DDKAPI
*PTIMER_APC_ROUTINE
)(
4307 IN PVOID TimerContext
,
4308 IN ULONG TimerLowValue
,
4309 IN LONG TimerHighValue
);
4318 (DDKAPI
*WMI_NOTIFICATION_CALLBACK
)(
4324 ** Architecture specific structures
4329 typedef ULONG PFN_NUMBER
, *PPFN_NUMBER
;
4331 #define PASSIVE_LEVEL 0
4334 #define DISPATCH_LEVEL 2
4335 #define PROFILE_LEVEL 27
4336 #define CLOCK1_LEVEL 28
4337 #define CLOCK2_LEVEL 28
4338 #define IPI_LEVEL 29
4339 #define SYNCH_LEVEL (IPI_LEVEL-1)
4340 #define POWER_LEVEL 30
4341 #define HIGH_LEVEL 31
4343 typedef struct _KPCR_TIB
{
4344 PVOID ExceptionList
; /* 00 */
4345 PVOID StackBase
; /* 04 */
4346 PVOID StackLimit
; /* 08 */
4347 PVOID SubSystemTib
; /* 0C */
4348 _ANONYMOUS_UNION
union {
4349 PVOID FiberData
; /* 10 */
4350 DWORD Version
; /* 10 */
4352 PVOID ArbitraryUserPointer
; /* 14 */
4353 struct _NT_TIB
*Self
; /* 18 */
4354 } KPCR_TIB
, *PKPCR_TIB
; /* 1C */
4356 #define PCR_MINOR_VERSION 1
4357 #define PCR_MAJOR_VERSION 1
4359 typedef struct _KPCR
{
4360 KPCR_TIB Tib
; /* 00 */
4361 struct _KPCR
*Self
; /* 1C */
4362 struct _KPRCB
*Prcb
; /* 20 */
4363 KIRQL Irql
; /* 24 */
4365 ULONG IrrActive
; /* 2C */
4367 PVOID KdVersionBlock
; /* 34 */
4368 PUSHORT IDT
; /* 38 */
4369 PUSHORT GDT
; /* 3C */
4370 struct _KTSS
*TSS
; /* 40 */
4371 USHORT MajorVersion
; /* 44 */
4372 USHORT MinorVersion
; /* 46 */
4373 KAFFINITY SetMember
; /* 48 */
4374 ULONG StallScaleFactor
; /* 4C */
4375 UCHAR SpareUnused
; /* 50 */
4376 UCHAR Number
; /* 51 */
4377 } KPCR
, *PKPCR
; /* 54 */
4379 typedef struct _KFLOATING_SAVE
{
4383 ULONG ErrorSelector
;
4388 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
4390 #define PAGE_SIZE 0x1000
4391 #define PAGE_SHIFT 12L
4393 extern NTOSAPI PVOID
*MmHighestUserAddress
;
4394 extern NTOSAPI PVOID
*MmSystemRangeStart
;
4395 extern NTOSAPI ULONG
*MmUserProbeAddress
;
4397 #define MM_HIGHEST_USER_ADDRESS *MmHighestUserAddress
4398 #define MM_SYSTEM_RANGE_START *MmSystemRangeStart
4399 #define MM_USER_PROBE_ADDRESS *MmUserProbeAddress
4400 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
4401 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0C00000
4403 #define KI_USER_SHARED_DATA 0xffdf0000
4404 #define SharedUserData ((KUSER_SHARED_DATA * CONST) KI_USER_SHARED_DATA)
4406 #define EFLAG_SIGN 0x8000
4407 #define EFLAG_ZERO 0x4000
4408 #define EFLAG_SELECT (EFLAG_SIGN | EFLAG_ZERO)
4410 #define RESULT_NEGATIVE ((EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
4411 #define RESULT_ZERO ((~EFLAG_SIGN & EFLAG_ZERO) & EFLAG_SELECT)
4412 #define RESULT_POSITIVE ((~EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
4414 typedef enum _INTERLOCKED_RESULT
{
4415 ResultNegative
= RESULT_NEGATIVE
,
4416 ResultZero
= RESULT_ZERO
,
4417 ResultPositive
= RESULT_POSITIVE
4418 } INTERLOCKED_RESULT
;
4428 * KeGetCurrentProcessorNumber(
4431 #define KeGetCurrentProcessorNumber() \
4432 ((ULONG)KeGetCurrentKPCR()->Number)
4434 #if !defined(__INTERLOCKED_DECLARED)
4435 #define __INTERLOCKED_DECLARED
4440 InterlockedIncrement(
4441 IN PLONG VOLATILE Addend
);
4446 InterlockedDecrement(
4447 IN PLONG VOLATILE Addend
);
4452 InterlockedCompareExchange(
4453 IN OUT PLONG VOLATILE Destination
,
4460 InterlockedExchange(
4461 IN OUT PLONG VOLATILE Target
,
4467 InterlockedExchangeAdd(
4468 IN OUT PLONG VOLATILE Addend
,
4473 * InterlockedExchangePointer(
4474 * IN OUT PVOID VOLATILE *Target,
4477 #define InterlockedExchangePointer(Target, Value) \
4478 ((PVOID) InterlockedExchange((PLONG) Target, (LONG) Value))
4482 * InterlockedCompareExchangePointer(
4483 * IN OUT PVOID *Destination,
4484 * IN PVOID Exchange,
4485 * IN PVOID Comparand)
4487 #define InterlockedCompareExchangePointer(Destination, Exchange, Comparand) \
4488 ((PVOID) InterlockedCompareExchange((PLONG) Destination, (LONG) Exchange, (LONG) Comparand))
4490 #endif /* !__INTERLOCKED_DECLARED */
4495 KefAcquireSpinLockAtDpcLevel(
4496 IN PKSPIN_LOCK SpinLock
);
4501 KefReleaseSpinLockFromDpcLevel(
4502 IN PKSPIN_LOCK SpinLock
);
4504 #define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock)
4505 #define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock)
4507 #define RtlCopyMemoryNonTemporal RtlCopyMemory
4509 #define KeGetDcacheFillSize() 1L
4516 ** Utillity functions
4519 #define ARGUMENT_PRESENT(ArgumentPointer) \
4520 ((BOOLEAN) ((PVOID)ArgumentPointer != (PVOID)NULL))
4527 #define BYTE_OFFSET(Va) \
4528 ((ULONG) ((ULONG_PTR) (Va) & (PAGE_SIZE - 1)))
4535 #define BYTES_TO_PAGES(Size) \
4536 ((ULONG) ((ULONG_PTR) (Size) >> PAGE_SHIFT) + (((ULONG) (Size) & (PAGE_SIZE - 1)) != 0))
4540 * CONTAINING_RECORD(
4545 #ifndef CONTAINING_RECORD
4546 #define CONTAINING_RECORD(Address, Type, Field) \
4547 ((Type *) (((ULONG_PTR) Address) - FIELD_OFFSET(Type, Field)))
4555 #ifndef FIELD_OFFSET
4556 #define FIELD_OFFSET(Type, Field) \
4557 ((LONG) (&(((Type *) 0)->Field)))
4565 #define PAGE_ALIGN(Va) \
4566 ((PVOID) ((ULONG_PTR)(Va) & ~(PAGE_SIZE - 1)))
4571 * IN ULONG_PTR Size)
4573 #define ROUND_TO_PAGES(Size) \
4574 ((ULONG_PTR) (((ULONG_PTR) Size + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1)))
4580 IN PVOID FailedAssertion
,
4582 IN ULONG LineNumber
,
4587 #define ASSERT(exp) \
4589 RtlAssert( #exp, __FILE__, __LINE__, NULL ), FALSE : TRUE)
4591 #define ASSERTMSG(msg, exp) \
4593 RtlAssert( #exp, __FILE__, __LINE__, msg ), FALSE : TRUE)
4595 #define RTL_SOFT_ASSERT(exp) \
4596 (VOID)((!(_exp)) ? \
4597 DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n", __FILE__, __LINE__, #exp), FALSE : TRUE)
4599 #define RTL_SOFT_ASSERTMSG(msg, exp) \
4601 DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n Message: %s\n", __FILE__, __LINE__, #exp, (msg)), FALSE : TRUE)
4603 #define RTL_VERIFY(exp) ASSERT(exp)
4604 #define RTL_VERIFYMSG(msg, exp) ASSERT(msg, exp)
4606 #define RTL_SOFT_VERIFY(exp) RTL_SOFT_ASSERT(exp)
4607 #define RTL_SOFT_VERIFYMSG(msg, exp) RTL_SOFT_ASSERTMSG(msg, exp)
4611 #define ASSERT(exp) ((VOID) 0)
4612 #define ASSERTMSG(msg, exp) ((VOID) 0)
4614 #define RTL_SOFT_ASSERT(exp) ((VOID) 0)
4615 #define RTL_SOFT_ASSERTMSG(msg, exp) ((VOID) 0)
4617 #define RTL_VERIFY(exp) ((exp) ? TRUE : FALSE)
4618 #define RTL_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE)
4620 #define RTL_SOFT_VERIFY(exp) ((exp) ? TRUE : FALSE)
4621 #define RTL_SOFT_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE)
4627 ** Driver support routines
4630 /** Runtime library routines **/
4632 static __inline VOID
4634 IN PLIST_ENTRY ListHead
)
4636 ListHead
->Flink
= ListHead
->Blink
= ListHead
;
4639 static __inline VOID
4641 IN PLIST_ENTRY ListHead
,
4642 IN PLIST_ENTRY Entry
)
4644 PLIST_ENTRY OldFlink
;
4645 OldFlink
= ListHead
->Flink
;
4646 Entry
->Flink
= OldFlink
;
4647 Entry
->Blink
= ListHead
;
4648 OldFlink
->Blink
= Entry
;
4649 ListHead
->Flink
= Entry
;
4652 static __inline VOID
4654 IN PLIST_ENTRY ListHead
,
4655 IN PLIST_ENTRY Entry
)
4657 PLIST_ENTRY OldBlink
;
4658 OldBlink
= ListHead
->Blink
;
4659 Entry
->Flink
= ListHead
;
4660 Entry
->Blink
= OldBlink
;
4661 OldBlink
->Flink
= Entry
;
4662 ListHead
->Blink
= Entry
;
4668 * IN PLIST_ENTRY ListHead)
4670 #define IsListEmpty(_ListHead) \
4671 ((_ListHead)->Flink == (_ListHead))
4674 * PSINGLE_LIST_ENTRY
4676 * IN PSINGLE_LIST_ENTRY ListHead)
4678 #define PopEntryList(ListHead) \
4681 PSINGLE_LIST_ENTRY _FirstEntry; \
4682 _FirstEntry = (ListHead)->Next; \
4683 if (_FirstEntry != NULL) \
4684 (ListHead)->Next = _FirstEntry->Next; \
4690 * IN PSINGLE_LIST_ENTRY ListHead,
4691 * IN PSINGLE_LIST_ENTRY Entry)
4693 #define PushEntryList(_ListHead, _Entry) \
4694 (_Entry)->Next = (_ListHead)->Next; \
4695 (_ListHead)->Next = (_Entry); \
4697 static __inline BOOLEAN
4699 IN PLIST_ENTRY Entry
)
4701 PLIST_ENTRY OldFlink
;
4702 PLIST_ENTRY OldBlink
;
4704 OldFlink
= Entry
->Flink
;
4705 OldBlink
= Entry
->Blink
;
4706 OldFlink
->Blink
= OldBlink
;
4707 OldBlink
->Flink
= OldFlink
;
4708 return (OldFlink
== OldBlink
);
4711 static __inline PLIST_ENTRY
4713 IN PLIST_ENTRY ListHead
)
4718 Entry
= ListHead
->Flink
;
4719 Flink
= Entry
->Flink
;
4720 ListHead
->Flink
= Flink
;
4721 Flink
->Blink
= ListHead
;
4725 static __inline PLIST_ENTRY
4727 IN PLIST_ENTRY ListHead
)
4732 Entry
= ListHead
->Blink
;
4733 Blink
= Entry
->Blink
;
4734 ListHead
->Blink
= Blink
;
4735 Blink
->Flink
= ListHead
;
4739 #if !defined(_WINBASE_H) || _WIN32_WINNT < 0x0501
4744 InterlockedPopEntrySList(
4745 IN PSLIST_HEADER ListHead
);
4750 InterlockedPushEntrySList(
4751 IN PSLIST_HEADER ListHead
,
4752 IN PSLIST_ENTRY ListEntry
);
4759 * IN PSLIST_HEADER SListHead)
4761 #define QueryDepthSList(_SListHead) \
4762 ((USHORT) ((_SListHead)->Alignment & 0xffff))
4764 #define InterlockedFlushSList(ListHead) ExInterlockedFlushSList(ListHead)
4769 RtlAnsiStringToUnicodeSize(
4770 IN PANSI_STRING AnsiString
);
4776 IN OUT PRTL_RANGE_LIST RangeList
,
4779 IN UCHAR Attributes
,
4781 IN PVOID UserData OPTIONAL
,
4782 IN PVOID Owner OPTIONAL
);
4787 RtlAnsiStringToUnicodeString(
4788 IN OUT PUNICODE_STRING DestinationString
,
4789 IN PANSI_STRING SourceString
,
4790 IN BOOLEAN AllocateDestinationString
);
4795 RtlAppendUnicodeStringToString(
4796 IN OUT PUNICODE_STRING Destination
,
4797 IN PUNICODE_STRING Source
);
4802 RtlAppendUnicodeToString(
4803 IN OUT PUNICODE_STRING Destination
,
4810 IN PRTL_BITMAP BitMapHeader
,
4811 IN ULONG StartingIndex
,
4818 IN PRTL_BITMAP BitMapHeader
,
4819 IN ULONG StartingIndex
,
4827 IN ULONG Base OPTIONAL
,
4828 IN OUT PULONG Value
);
4834 IN PRTL_BITMAP BitMapHeader
,
4835 IN ULONG BitPosition
);
4840 RtlCheckRegistryKey(
4841 IN ULONG RelativeTo
,
4848 IN PRTL_BITMAP BitMapHeader
);
4854 PRTL_BITMAP BitMapHeader
,
4861 IN PRTL_BITMAP BitMapHeader
,
4862 IN ULONG StartingIndex
,
4863 IN ULONG NumberToClear
);
4869 IN CONST VOID
*Source1
,
4870 IN CONST VOID
*Source2
,
4879 BOOLEAN CaseInSensitive
);
4884 RtlCompareUnicodeString(
4885 IN PUNICODE_STRING String1
,
4886 IN PUNICODE_STRING String2
,
4887 IN BOOLEAN CaseInSensitive
);
4892 RtlConvertLongToLargeInteger(
4893 IN LONG SignedInteger
);
4898 RtlConvertLongToLuid(
4904 RtlConvertUlongToLargeInteger(
4905 IN ULONG UnsignedInteger
);
4910 RtlConvertUlongToLuid(
4916 * IN VOID UNALIGNED *Destination,
4917 * IN CONST VOID UNALIGNED *Source,
4920 #ifndef RtlCopyMemory
4921 #define RtlCopyMemory(Destination, Source, Length) \
4922 memcpy(Destination, Source, Length)
4925 #ifndef RtlCopyBytes
4926 #define RtlCopyBytes RtlCopyMemory
4933 IN VOID UNALIGNED
*Destination
,
4934 IN CONST VOID UNALIGNED
*Source
,
4941 OUT PRTL_RANGE_LIST CopyRangeList
,
4942 IN PRTL_RANGE_LIST RangeList
);
4948 IN OUT PSTRING DestinationString
,
4949 IN PSTRING SourceString OPTIONAL
);
4954 RtlCopyUnicodeString(
4955 IN OUT PUNICODE_STRING DestinationString
,
4956 IN PUNICODE_STRING SourceString
);
4961 RtlCreateRegistryKey(
4962 IN ULONG RelativeTo
,
4968 RtlCreateSecurityDescriptor(
4969 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
4975 RtlDeleteOwnersRanges(
4976 IN OUT PRTL_RANGE_LIST RangeList
,
4983 IN OUT PRTL_RANGE_LIST RangeList
,
4991 RtlDeleteRegistryValue(
4992 IN ULONG RelativeTo
,
4994 IN PCWSTR ValueName
);
5002 #define RtlEqualLuid(Luid1, \
5004 (((Luid1)->LowPart == (Luid2)->LowPart) && ((Luid1)->HighPart == (Luid2)->HighPart))
5009 * IN VOID UNALIGNED *Destination,
5010 * IN CONST VOID UNALIGNED *Source,
5013 #define RtlEqualMemory(Destination, Source, Length) (!memcmp(Destination, Source, Length))
5021 IN BOOLEAN CaseInSensitive
);
5026 RtlEqualUnicodeString(
5027 IN CONST UNICODE_STRING
*String1
,
5028 IN CONST UNICODE_STRING
*String2
,
5029 IN BOOLEAN CaseInSensitive
);
5034 * IN VOID UNALIGNED *Destination,
5038 #ifndef RtlFillMemory
5039 #define RtlFillMemory(Destination, Length, Fill) \
5040 memset(Destination, Fill, Length)
5043 #ifndef RtlFillBytes
5044 #define RtlFillBytes RtlFillMemory
5051 IN PRTL_BITMAP BitMapHeader
,
5052 IN ULONG NumberToFind
,
5053 IN ULONG HintIndex
);
5058 RtlFindClearBitsAndSet(
5059 IN PRTL_BITMAP BitMapHeader
,
5060 IN ULONG NumberToFind
,
5061 IN ULONG HintIndex
);
5067 IN PRTL_BITMAP BitMapHeader
,
5068 OUT PRTL_BITMAP_RUN RunArray
,
5069 IN ULONG SizeOfRunArray
,
5070 IN BOOLEAN LocateLongestRuns
);
5075 RtlFindFirstRunClear(
5076 IN PRTL_BITMAP BitMapHeader
,
5077 OUT PULONG StartingIndex
);
5082 RtlFindLastBackwardRunClear(
5083 IN PRTL_BITMAP BitMapHeader
,
5085 OUT PULONG StartingRunIndex
);
5090 RtlFindLeastSignificantBit(
5096 RtlFindLongestRunClear(
5097 IN PRTL_BITMAP BitMapHeader
,
5098 OUT PULONG StartingIndex
);
5103 RtlFindMostSignificantBit(
5109 RtlFindNextForwardRunClear(
5110 IN PRTL_BITMAP BitMapHeader
,
5112 OUT PULONG StartingRunIndex
);
5118 IN PRTL_RANGE_LIST RangeList
,
5119 IN ULONGLONG Minimum
,
5120 IN ULONGLONG Maximum
,
5124 IN UCHAR AttributeAvailableMask
,
5125 IN PVOID Context OPTIONAL
,
5126 IN PRTL_CONFLICT_RANGE_CALLBACK Callback OPTIONAL
,
5127 OUT PULONGLONG Start
);
5133 IN PRTL_BITMAP BitMapHeader
,
5134 IN ULONG NumberToFind
,
5135 IN ULONG HintIndex
);
5140 RtlFindSetBitsAndClear(
5141 IN PRTL_BITMAP BitMapHeader
,
5142 IN ULONG NumberToFind
,
5143 IN ULONG HintIndex
);
5149 IN PANSI_STRING AnsiString
);
5155 IN PRTL_RANGE_LIST RangeList
);
5160 RtlFreeUnicodeString(
5161 IN PUNICODE_STRING UnicodeString
);
5166 RtlGetCallersAddress(
5167 OUT PVOID
*CallersAddress
,
5168 OUT PVOID
*CallersCaller
);
5174 IN OUT PRTL_OSVERSIONINFOW lpVersionInformation
);
5180 IN PRTL_RANGE_LIST RangeList
,
5181 OUT PRTL_RANGE_LIST_ITERATOR Iterator
,
5182 OUT PRTL_RANGE
*Range
);
5188 IN OUT PRTL_RANGE_LIST_ITERATOR Iterator
,
5189 OUT PRTL_RANGE
*Range
,
5190 IN BOOLEAN MoveForwards
);
5192 #define FOR_ALL_RANGES(RangeList, Iterator, Current) \
5193 for (RtlGetFirstRange((RangeList), (Iterator), &(Current)); \
5194 (Current) != NULL; \
5195 RtlGetNextRange((Iterator), &(Current), TRUE))
5197 #define FOR_ALL_RANGES_BACKWARDS(RangeList, Iterator, Current) \
5198 for (RtlGetLastRange((RangeList), (Iterator), &(Current)); \
5199 (Current) != NULL; \
5200 RtlGetNextRange((Iterator), &(Current), FALSE))
5206 IN PUNICODE_STRING GuidString
,
5212 RtlHashUnicodeString(
5213 IN CONST UNICODE_STRING
*String
,
5214 IN BOOLEAN CaseInSensitive
,
5215 IN ULONG HashAlgorithm
,
5216 OUT PULONG HashValue
);
5222 IN OUT PANSI_STRING DestinationString
,
5223 IN PCSZ SourceString
);
5228 RtlInitializeBitMap(
5229 IN PRTL_BITMAP BitMapHeader
,
5230 IN PULONG BitMapBuffer
,
5231 IN ULONG SizeOfBitMap
);
5236 RtlInitializeRangeList(
5237 IN OUT PRTL_RANGE_LIST RangeList
);
5243 IN OUT PSTRING DestinationString
,
5244 IN PCSZ SourceString
);
5249 RtlInitUnicodeString(
5250 IN OUT PUNICODE_STRING DestinationString
,
5251 IN PCWSTR SourceString
);
5256 RtlInt64ToUnicodeString(
5258 IN ULONG Base OPTIONAL
,
5259 IN OUT PUNICODE_STRING String
);
5264 RtlIntegerToUnicodeString(
5266 IN ULONG Base OPTIONAL
,
5267 IN OUT PUNICODE_STRING String
);
5272 RtlIntPtrToUnicodeString(
5274 ULONG Base OPTIONAL
,
5275 PUNICODE_STRING String
);
5281 OUT PRTL_RANGE_LIST InvertedRangeList
,
5282 IN PRTL_RANGE_LIST RangeList
);
5287 RtlIsRangeAvailable(
5288 IN PRTL_RANGE_LIST RangeList
,
5292 IN UCHAR AttributeAvailableMask
,
5293 IN PVOID Context OPTIONAL
,
5294 IN PRTL_CONFLICT_RANGE_CALLBACK Callback OPTIONAL
,
5295 OUT PBOOLEAN Available
);
5302 #define RtlIsZeroLuid(_L1) \
5303 ((BOOLEAN) ((!(_L1)->LowPart) && (!(_L1)->HighPart)))
5308 RtlLengthSecurityDescriptor(
5309 IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
5315 IN OUT PACCESS_MASK AccessMask
,
5316 IN PGENERIC_MAPPING GenericMapping
);
5322 OUT PRTL_RANGE_LIST MergedRangeList
,
5323 IN PRTL_RANGE_LIST RangeList1
,
5324 IN PRTL_RANGE_LIST RangeList2
,
5330 * IN VOID UNALIGNED *Destination,
5331 * IN CONST VOID UNALIGNED *Source,
5334 #define RtlMoveMemory memmove
5339 RtlNumberOfClearBits(
5340 IN PRTL_BITMAP BitMapHeader
);
5346 IN PRTL_BITMAP BitMapHeader
);
5351 RtlPrefetchMemoryNonTemporal(
5358 RtlPrefixUnicodeString(
5359 IN PUNICODE_STRING String1
,
5360 IN PUNICODE_STRING String2
,
5361 IN BOOLEAN CaseInSensitive
);
5366 RtlQueryRegistryValues(
5367 IN ULONG RelativeTo
,
5369 IN PRTL_QUERY_REGISTRY_TABLE QueryTable
,
5371 IN PVOID Environment OPTIONAL
);
5377 IN OUT PULONG DestinationAddress
,
5378 IN PULONG SourceAddress
);
5384 IN OUT PUSHORT DestinationAddress
,
5385 IN PUSHORT SourceAddress
);
5391 IN PRTL_BITMAP BitMapHeader
);
5397 PRTL_BITMAP BitMapHeader
,
5404 IN PRTL_BITMAP BitMapHeader
,
5405 IN ULONG StartingIndex
,
5406 IN ULONG NumberToSet
);
5411 RtlSetDaclSecurityDescriptor(
5412 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
5413 IN BOOLEAN DaclPresent
,
5414 IN PACL Dacl OPTIONAL
,
5415 IN BOOLEAN DaclDefaulted OPTIONAL
);
5428 IN OUT PULONGLONG Address
,
5435 IN OUT PULONG_PTR Address
,
5436 IN ULONG_PTR Value
);
5450 OUT PUNICODE_STRING GuidString
);
5456 IN PRTL_BITMAP BitMapHeader
,
5457 IN ULONG BitNumber
);
5462 RtlTimeFieldsToTime(
5463 IN PTIME_FIELDS TimeFields
,
5464 IN PLARGE_INTEGER Time
);
5469 RtlTimeToTimeFields(
5470 IN PLARGE_INTEGER Time
,
5471 IN PTIME_FIELDS TimeFields
);
5482 RtlUlonglongByteSwap(
5483 IN ULONGLONG Source
);
5488 RtlUnicodeStringToAnsiSize(
5489 IN PUNICODE_STRING UnicodeString
);
5494 RtlUnicodeStringToAnsiString(
5495 IN OUT PANSI_STRING DestinationString
,
5496 IN PUNICODE_STRING SourceString
,
5497 IN BOOLEAN AllocateDestinationString
);
5502 RtlUnicodeStringToInteger(
5503 IN PUNICODE_STRING String
,
5504 IN ULONG Base OPTIONAL
,
5510 RtlUpcaseUnicodeChar(
5511 IN WCHAR SourceCharacter
);
5516 RtlUpcaseUnicodeString(
5517 IN OUT PUNICODE_STRING DestinationString OPTIONAL
,
5518 IN PCUNICODE_STRING SourceString
,
5519 IN BOOLEAN AllocateDestinationString
);
5531 IN OUT PSTRING DestinationString
,
5532 IN PSTRING SourceString
);
5543 RtlValidRelativeSecurityDescriptor(
5544 IN PSECURITY_DESCRIPTOR_RELATIVE SecurityDescriptorInput
,
5545 IN ULONG SecurityDescriptorLength
,
5546 IN SECURITY_INFORMATION RequiredInformation
);
5551 RtlValidSecurityDescriptor(
5552 IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
5557 RtlVerifyVersionInfo(
5558 IN PRTL_OSVERSIONINFOEXW VersionInfo
,
5560 IN ULONGLONG ConditionMask
);
5565 RtlVolumeDeviceToDosName(
5566 IN PVOID VolumeDeviceObject
,
5567 OUT PUNICODE_STRING DosName
);
5580 RtlWriteRegistryValue(
5581 IN ULONG RelativeTo
,
5583 IN PCWSTR ValueName
,
5586 IN ULONG ValueLength
);
5591 RtlxUnicodeStringToAnsiSize(
5592 IN PUNICODE_STRING UnicodeString
);
5597 * IN VOID UNALIGNED *Destination,
5600 #ifndef RtlZeroMemory
5601 #define RtlZeroMemory(Destination, Length) \
5602 memset(Destination, 0, Length)
5605 #ifndef RtlZeroBytes
5606 #define RtlZeroBytes RtlZeroMemory
5610 /* Guarded Mutex routines */
5614 KeAcquireGuardedMutex(
5615 PKGUARDED_MUTEX GuardedMutex
5620 KeAcquireGuardedMutexUnsafe(
5621 PKGUARDED_MUTEX GuardedMutex
5626 KeEnterGuardedRegion(VOID
);
5630 KeLeaveGuardedRegion(VOID
);
5634 KeInitializeGuardedMutex(
5635 PKGUARDED_MUTEX GuardedMutex
5640 KeReleaseGuardedMutexUnsafe(
5641 PKGUARDED_MUTEX GuardedMutex
5646 KeReleaseGuardedMutex(
5647 PKGUARDED_MUTEX GuardedMutex
5652 KeTryToAcquireGuardedMutex(
5653 PKGUARDED_MUTEX GuardedMutex
5656 /** Executive support routines **/
5662 IN PFAST_MUTEX FastMutex
);
5667 ExAcquireFastMutexUnsafe(
5668 IN PFAST_MUTEX FastMutex
);
5673 ExAcquireResourceExclusiveLite(
5674 IN PERESOURCE Resource
,
5680 ExAcquireResourceSharedLite(
5681 IN PERESOURCE Resource
,
5687 ExAcquireSharedStarveExclusive(
5688 IN PERESOURCE Resource
,
5694 ExAcquireSharedWaitForExclusive(
5695 IN PERESOURCE Resource
,
5698 static __inline PVOID
5699 ExAllocateFromNPagedLookasideList(
5700 IN PNPAGED_LOOKASIDE_LIST Lookaside
)
5704 Lookaside
->TotalAllocates
++;
5705 Entry
= InterlockedPopEntrySList(&Lookaside
->ListHead
);
5706 if (Entry
== NULL
) {
5707 Lookaside
->_DDK_DUMMYUNION_MEMBER(AllocateMisses
)++;
5708 Entry
= (Lookaside
->Allocate
)(Lookaside
->Type
, Lookaside
->Size
, Lookaside
->Tag
);
5713 static __inline PVOID
5714 ExAllocateFromPagedLookasideList(
5715 IN PPAGED_LOOKASIDE_LIST Lookaside
)
5719 Lookaside
->TotalAllocates
++;
5720 Entry
= InterlockedPopEntrySList(&Lookaside
->ListHead
);
5721 if (Entry
== NULL
) {
5722 Lookaside
->_DDK_DUMMYUNION_MEMBER(AllocateMisses
)++;
5723 Entry
= (Lookaside
->Allocate
)(Lookaside
->Type
,
5724 Lookaside
->Size
, Lookaside
->Tag
);
5732 ExAllocatePoolWithQuotaTag(
5733 IN POOL_TYPE PoolType
,
5734 IN SIZE_T NumberOfBytes
,
5740 ExAllocatePoolWithTag(
5741 IN POOL_TYPE PoolType
,
5742 IN SIZE_T NumberOfBytes
,
5747 #define ExAllocatePoolWithQuota(p,n) ExAllocatePoolWithQuotaTag(p,n,' kdD')
5748 #define ExAllocatePool(p,n) ExAllocatePoolWithTag(p,n,' kdD')
5750 #else /* !POOL_TAGGING */
5756 IN POOL_TYPE PoolType
,
5757 IN SIZE_T NumberOfBytes
);
5762 ExAllocatePoolWithQuota(
5763 IN POOL_TYPE PoolType
,
5764 IN SIZE_T NumberOfBytes
);
5766 #endif /* POOL_TAGGING */
5771 ExAllocatePoolWithTagPriority(
5772 IN POOL_TYPE PoolType
,
5773 IN SIZE_T NumberOfBytes
,
5775 IN EX_POOL_PRIORITY Priority
);
5780 ExConvertExclusiveToSharedLite(
5781 IN PERESOURCE Resource
);
5787 OUT PCALLBACK_OBJECT
*CallbackObject
,
5788 IN POBJECT_ATTRIBUTES ObjectAttributes
,
5790 IN BOOLEAN AllowMultipleCallbacks
);
5795 ExDeleteNPagedLookasideList(
5796 IN PNPAGED_LOOKASIDE_LIST Lookaside
);
5801 ExDeletePagedLookasideList(
5802 IN PPAGED_LOOKASIDE_LIST Lookaside
);
5807 ExDeleteResourceLite(
5808 IN PERESOURCE Resource
);
5816 #define PROTECTED_POOL 0x80000000
5819 #define ExFreePool(P) ExFreePoolWithTag(P, 0)
5829 #define ExQueryDepthSList(ListHead) QueryDepthSList(ListHead)
5831 static __inline VOID
5832 ExFreeToNPagedLookasideList(
5833 IN PNPAGED_LOOKASIDE_LIST Lookaside
,
5836 Lookaside
->TotalFrees
++;
5837 if (ExQueryDepthSList(&Lookaside
->ListHead
) >= Lookaside
->Depth
) {
5838 Lookaside
->_DDK_DUMMYUNION_N_MEMBER(2,FreeMisses
)++;
5839 (Lookaside
->Free
)(Entry
);
5841 InterlockedPushEntrySList(&Lookaside
->ListHead
,
5842 (PSLIST_ENTRY
)Entry
);
5846 static __inline VOID
5847 ExFreeToPagedLookasideList(
5848 IN PPAGED_LOOKASIDE_LIST Lookaside
,
5851 Lookaside
->TotalFrees
++;
5852 if (ExQueryDepthSList(&Lookaside
->ListHead
) >= Lookaside
->Depth
) {
5853 Lookaside
->_DDK_DUMMYUNION_N_MEMBER(2,FreeMisses
)++;
5854 (Lookaside
->Free
)(Entry
);
5856 InterlockedPushEntrySList(&Lookaside
->ListHead
, (PSLIST_ENTRY
)Entry
);
5862 * ExGetCurrentResourceThread(
5865 #define ExGetCurrentResourceThread() ((ERESOURCE_THREAD) PsGetCurrentThread())
5870 ExGetExclusiveWaiterCount(
5871 IN PERESOURCE Resource
);
5882 ExGetSharedWaiterCount(
5883 IN PERESOURCE Resource
);
5895 * ExInitializeFastMutex(
5896 * IN PFAST_MUTEX FastMutex)
5898 #define ExInitializeFastMutex(_FastMutex) \
5900 (_FastMutex)->Count = 1; \
5901 (_FastMutex)->Owner = NULL; \
5902 (_FastMutex)->Contention = 0; \
5903 KeInitializeEvent(&(_FastMutex)->Event, SynchronizationEvent, FALSE); \
5909 ExInitializeNPagedLookasideList(
5910 IN PNPAGED_LOOKASIDE_LIST Lookaside
,
5911 IN PALLOCATE_FUNCTION Allocate OPTIONAL
,
5912 IN PFREE_FUNCTION Free OPTIONAL
,
5921 ExInitializePagedLookasideList(
5922 IN PPAGED_LOOKASIDE_LIST Lookaside
,
5923 IN PALLOCATE_FUNCTION Allocate OPTIONAL
,
5924 IN PFREE_FUNCTION Free OPTIONAL
,
5933 ExInitializeResourceLite(
5934 IN PERESOURCE Resource
);
5938 * InitializeSListHead(
5939 * IN PSLIST_HEADER SListHead)
5941 #define InitializeSListHead(_SListHead) \
5942 (_SListHead)->Alignment = 0
5944 #define ExInitializeSListHead InitializeSListHead
5949 ExInterlockedAddLargeInteger(
5950 IN PLARGE_INTEGER Addend
,
5951 IN LARGE_INTEGER Increment
,
5952 IN PKSPIN_LOCK Lock
);
5957 ExInterlockedAddLargeStatistic(
5958 IN PLARGE_INTEGER Addend
,
5959 IN ULONG Increment
);
5964 ExInterlockedAddUlong(
5972 ExInterlockedCompareExchange64(
5973 IN OUT PLONGLONG Destination
,
5974 IN PLONGLONG Exchange
,
5975 IN PLONGLONG Comparand
,
5976 IN PKSPIN_LOCK Lock
);
5981 ExInterlockedFlushSList(
5982 IN PSLIST_HEADER ListHead
);
5987 ExInterlockedInsertHeadList(
5988 IN PLIST_ENTRY ListHead
,
5989 IN PLIST_ENTRY ListEntry
,
5990 IN PKSPIN_LOCK Lock
);
5995 ExInterlockedInsertTailList(
5996 IN PLIST_ENTRY ListHead
,
5997 IN PLIST_ENTRY ListEntry
,
5998 IN PKSPIN_LOCK Lock
);
6003 ExInterlockedPopEntryList(
6004 IN PSINGLE_LIST_ENTRY ListHead
,
6005 IN PKSPIN_LOCK Lock
);
6008 * PSINGLE_LIST_ENTRY
6009 * ExInterlockedPopEntrySList(
6010 * IN PSLIST_HEADER ListHead,
6011 * IN PKSPIN_LOCK Lock)
6013 #define ExInterlockedPopEntrySList(_ListHead, \
6015 InterlockedPopEntrySList(_ListHead)
6020 ExInterlockedPushEntryList(
6021 IN PSINGLE_LIST_ENTRY ListHead
,
6022 IN PSINGLE_LIST_ENTRY ListEntry
,
6023 IN PKSPIN_LOCK Lock
);
6026 * PSINGLE_LIST_ENTRY FASTCALL
6027 * ExInterlockedPushEntrySList(
6028 * IN PSLIST_HEADER ListHead,
6029 * IN PSINGLE_LIST_ENTRY ListEntry,
6030 * IN PKSPIN_LOCK Lock)
6032 #define ExInterlockedPushEntrySList(_ListHead, \
6035 InterlockedPushEntrySList(_ListHead, _ListEntry)
6040 ExInterlockedRemoveHeadList(
6041 IN PLIST_ENTRY ListHead
,
6042 IN PKSPIN_LOCK Lock
);
6047 ExIsProcessorFeaturePresent(
6048 IN ULONG ProcessorFeature
);
6053 ExIsResourceAcquiredExclusiveLite(
6054 IN PERESOURCE Resource
);
6059 ExIsResourceAcquiredLite(
6060 IN PERESOURCE Resource
);
6065 ExIsResourceAcquiredSharedLite(
6066 IN PERESOURCE Resource
);
6071 ExLocalTimeToSystemTime(
6072 IN PLARGE_INTEGER LocalTime
,
6073 OUT PLARGE_INTEGER SystemTime
);
6079 IN PCALLBACK_OBJECT CallbackObject
,
6081 IN PVOID Argument2
);
6086 ExRaiseAccessViolation(
6092 ExRaiseDatatypeMisalignment(
6099 IN NTSTATUS Status
);
6105 IN PCALLBACK_OBJECT CallbackObject
,
6106 IN PCALLBACK_FUNCTION CallbackFunction
,
6107 IN PVOID CallbackContext
);
6112 ExReinitializeResourceLite(
6113 IN PERESOURCE Resource
);
6119 IN PFAST_MUTEX FastMutex
);
6124 ExReleaseFastMutexUnsafe(
6125 IN PFAST_MUTEX FastMutex
);
6130 ExReleaseResourceForThreadLite(
6131 IN PERESOURCE Resource
,
6132 IN ERESOURCE_THREAD ResourceThreadId
);
6137 ExReleaseResourceLite(
6138 IN PERESOURCE Resource
);
6143 ExSetResourceOwnerPointer(
6144 IN PERESOURCE Resource
,
6145 IN PVOID OwnerPointer
);
6150 ExSetTimerResolution(
6151 IN ULONG DesiredTime
,
6152 IN BOOLEAN SetResolution
);
6157 ExSystemTimeToLocalTime(
6158 IN PLARGE_INTEGER SystemTime
,
6159 OUT PLARGE_INTEGER LocalTime
);
6164 ExTryToAcquireFastMutex(
6165 IN PFAST_MUTEX FastMutex
);
6170 ExTryToAcquireResourceExclusiveLite(
6171 IN PERESOURCE Resource
);
6176 ExUnregisterCallback(
6177 IN PVOID CbRegistration
);
6189 IN SUITE_TYPE SuiteType
);
6193 #define PAGED_CODE() { \
6194 if (KeGetCurrentIrql() > APC_LEVEL) { \
6195 KdPrint( ("NTDDK: Pageable code called at IRQL > APC_LEVEL (%d)\n", KeGetCurrentIrql() )); \
6202 #define PAGED_CODE()
6210 IN CONST VOID
*Address
,
6212 IN ULONG Alignment
);
6218 IN CONST VOID
*Address
,
6220 IN ULONG Alignment
);
6224 /** Configuration manager routines **/
6230 IN PEX_CALLBACK_FUNCTION Function
,
6232 IN OUT PLARGE_INTEGER Cookie
);
6237 CmUnRegisterCallback(
6238 IN LARGE_INTEGER Cookie
);
6242 /** Filesystem runtime library routines **/
6247 FsRtlIsTotalDeviceFailure(
6248 IN NTSTATUS Status
);
6252 /** Hardware abstraction layer routines **/
6258 IN ULONG Frequency
);
6264 IN PDEVICE_OBJECT DeviceObject
,
6265 IN ULONG SectorSize
,
6266 IN ULONG MBRTypeIdentifier
,
6272 READ_PORT_BUFFER_UCHAR(
6280 READ_PORT_BUFFER_ULONG(
6288 READ_PORT_BUFFER_USHORT(
6314 READ_REGISTER_BUFFER_UCHAR(
6322 READ_REGISTER_BUFFER_ULONG(
6330 READ_REGISTER_BUFFER_USHORT(
6331 IN PUSHORT Register
,
6338 READ_REGISTER_UCHAR(
6339 IN PUCHAR Register
);
6344 READ_REGISTER_ULONG(
6345 IN PULONG Register
);
6350 READ_REGISTER_USHORT(
6351 IN PUSHORT Register
);
6356 WRITE_PORT_BUFFER_UCHAR(
6364 WRITE_PORT_BUFFER_ULONG(
6372 WRITE_PORT_BUFFER_USHORT(
6401 WRITE_REGISTER_BUFFER_UCHAR(
6409 WRITE_REGISTER_BUFFER_ULONG(
6417 WRITE_REGISTER_BUFFER_USHORT(
6418 IN PUSHORT Register
,
6425 WRITE_REGISTER_UCHAR(
6432 WRITE_REGISTER_ULONG(
6439 WRITE_REGISTER_USHORT(
6440 IN PUSHORT Register
,
6443 /** I/O manager routines **/
6448 IoAcquireCancelSpinLock(
6454 IoAcquireRemoveLockEx(
6455 IN PIO_REMOVE_LOCK RemoveLock
,
6456 IN OPTIONAL PVOID Tag OPTIONAL
,
6459 IN ULONG RemlockSize
);
6463 * IoAcquireRemoveLock(
6464 * IN PIO_REMOVE_LOCK RemoveLock,
6465 * IN OPTIONAL PVOID Tag)
6467 #define IoAcquireRemoveLock(_RemoveLock, \
6469 IoAcquireRemoveLockEx(_RemoveLock, _Tag, __FILE__, __LINE__, sizeof(IO_REMOVE_LOCK))
6473 * IoAdjustPagingPathCount(
6475 * IN BOOLEAN Increment)
6477 #define IoAdjustPagingPathCount(_Count, \
6482 InterlockedIncrement(_Count); \
6486 InterlockedDecrement(_Count); \
6493 IoAllocateController(
6494 IN PCONTROLLER_OBJECT ControllerObject
,
6495 IN PDEVICE_OBJECT DeviceObject
,
6496 IN PDRIVER_CONTROL ExecutionRoutine
,
6502 IoAllocateDriverObjectExtension(
6503 IN PDRIVER_OBJECT DriverObject
,
6504 IN PVOID ClientIdentificationAddress
,
6505 IN ULONG DriverObjectExtensionSize
,
6506 OUT PVOID
*DriverObjectExtension
);
6511 IoAllocateErrorLogEntry(
6513 IN UCHAR EntrySize
);
6520 IN BOOLEAN ChargeQuota
);
6526 IN PVOID VirtualAddress
,
6528 IN BOOLEAN SecondaryBuffer
,
6529 IN BOOLEAN ChargeQuota
,
6530 IN OUT PIRP Irp OPTIONAL
);
6536 IN PDEVICE_OBJECT DeviceObject
);
6539 * VOID IoAssignArcName(
6540 * IN PUNICODE_STRING ArcName,
6541 * IN PUNICODE_STRING DeviceName);
6543 #define IoAssignArcName(_ArcName, _DeviceName) ( \
6544 IoCreateSymbolicLink((_ArcName), (_DeviceName)))
6550 IN PDEVICE_OBJECT SourceDevice
,
6551 IN PUNICODE_STRING TargetDevice
,
6552 OUT PDEVICE_OBJECT
*AttachedDevice
);
6557 IoAttachDeviceToDeviceStack(
6558 IN PDEVICE_OBJECT SourceDevice
,
6559 IN PDEVICE_OBJECT TargetDevice
);
6564 IoBuildAsynchronousFsdRequest(
6565 IN ULONG MajorFunction
,
6566 IN PDEVICE_OBJECT DeviceObject
,
6567 IN OUT PVOID Buffer OPTIONAL
,
6568 IN ULONG Length OPTIONAL
,
6569 IN PLARGE_INTEGER StartingOffset OPTIONAL
,
6570 IN PIO_STATUS_BLOCK IoStatusBlock OPTIONAL
);
6575 IoBuildDeviceIoControlRequest(
6576 IN ULONG IoControlCode
,
6577 IN PDEVICE_OBJECT DeviceObject
,
6578 IN PVOID InputBuffer OPTIONAL
,
6579 IN ULONG InputBufferLength
,
6580 OUT PVOID OutputBuffer OPTIONAL
,
6581 IN ULONG OutputBufferLength
,
6582 IN BOOLEAN InternalDeviceIoControl
,
6584 OUT PIO_STATUS_BLOCK IoStatusBlock
);
6591 IN OUT PMDL TargetMdl
,
6592 IN PVOID VirtualAddress
,
6598 IoBuildSynchronousFsdRequest(
6599 IN ULONG MajorFunction
,
6600 IN PDEVICE_OBJECT DeviceObject
,
6601 IN OUT PVOID Buffer OPTIONAL
,
6602 IN ULONG Length OPTIONAL
,
6603 IN PLARGE_INTEGER StartingOffset OPTIONAL
,
6605 OUT PIO_STATUS_BLOCK IoStatusBlock
);
6611 IN PDEVICE_OBJECT DeviceObject
,
6617 * IN PDEVICE_OBJECT DeviceObject,
6620 #define IoCallDriver IofCallDriver
6626 IN PDEVICE_OBJECT DeviceObject
,
6627 IN PFILE_OBJECT FileObject
);
6639 IN ACCESS_MASK DesiredAccess
,
6640 IN ULONG DesiredShareAccess
,
6641 IN OUT PFILE_OBJECT FileObject
,
6642 IN OUT PSHARE_ACCESS ShareAccess
,
6650 IN CCHAR PriorityBoost
);
6654 * IoCompleteRequest(
6656 * IN CCHAR PriorityBoost)
6658 #define IoCompleteRequest IofCompleteRequest
6664 OUT PKINTERRUPT
*InterruptObject
,
6665 IN PKSERVICE_ROUTINE ServiceRoutine
,
6666 IN PVOID ServiceContext
,
6667 IN PKSPIN_LOCK SpinLock OPTIONAL
,
6670 IN KIRQL SynchronizeIrql
,
6671 IN KINTERRUPT_MODE InterruptMode
,
6672 IN BOOLEAN ShareVector
,
6673 IN KAFFINITY ProcessorEnableMask
,
6674 IN BOOLEAN FloatingSave
);
6677 * PIO_STACK_LOCATION
6678 * IoGetCurrentIrpStackLocation(
6681 #define IoGetCurrentIrpStackLocation(_Irp) \
6682 ((_Irp)->Tail.Overlay.CurrentStackLocation)
6685 * PIO_STACK_LOCATION
6686 * IoGetNextIrpStackLocation(
6689 #define IoGetNextIrpStackLocation(_Irp) \
6690 ((_Irp)->Tail.Overlay.CurrentStackLocation - 1)
6694 * IoCopyCurrentIrpStackLocationToNext(
6697 #define IoCopyCurrentIrpStackLocationToNext(_Irp) \
6699 PIO_STACK_LOCATION _IrpSp; \
6700 PIO_STACK_LOCATION _NextIrpSp; \
6701 _IrpSp = IoGetCurrentIrpStackLocation(_Irp); \
6702 _NextIrpSp = IoGetNextIrpStackLocation(_Irp); \
6703 RtlCopyMemory(_NextIrpSp, _IrpSp, \
6704 FIELD_OFFSET(IO_STACK_LOCATION, CompletionRoutine)); \
6705 _NextIrpSp->Control = 0; \
6718 IN PDRIVER_OBJECT DriverObject
,
6719 IN ULONG DeviceExtensionSize
,
6720 IN PUNICODE_STRING DeviceName OPTIONAL
,
6721 IN DEVICE_TYPE DeviceType
,
6722 IN ULONG DeviceCharacteristics
,
6723 IN BOOLEAN Exclusive
,
6724 OUT PDEVICE_OBJECT
*DeviceObject
);
6730 IN PDEVICE_OBJECT DeviceObject
,
6731 IN PCREATE_DISK Disk
);
6737 OUT PHANDLE FileHandle
,
6738 IN ACCESS_MASK DesiredAccess
,
6739 IN POBJECT_ATTRIBUTES ObjectAttributes
,
6740 OUT PIO_STATUS_BLOCK IoStatusBlock
,
6741 IN PLARGE_INTEGER AllocationSize OPTIONAL
,
6742 IN ULONG FileAttributes
,
6743 IN ULONG ShareAccess
,
6744 IN ULONG Disposition
,
6745 IN ULONG CreateOptions
,
6746 IN PVOID EaBuffer OPTIONAL
,
6748 IN CREATE_FILE_TYPE CreateFileType
,
6749 IN PVOID ExtraCreateParameters OPTIONAL
,
6755 IoCreateNotificationEvent(
6756 IN PUNICODE_STRING EventName
,
6757 OUT PHANDLE EventHandle
);
6762 IoCreateSymbolicLink(
6763 IN PUNICODE_STRING SymbolicLinkName
,
6764 IN PUNICODE_STRING DeviceName
);
6769 IoCreateSynchronizationEvent(
6770 IN PUNICODE_STRING EventName
,
6771 OUT PHANDLE EventHandle
);
6776 IoCreateUnprotectedSymbolicLink(
6777 IN PUNICODE_STRING SymbolicLinkName
,
6778 IN PUNICODE_STRING DeviceName
);
6785 IN PIO_CSQ_INSERT_IRP CsqInsertIrp
,
6786 IN PIO_CSQ_REMOVE_IRP CsqRemoveIrp
,
6787 IN PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp
,
6788 IN PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock
,
6789 IN PIO_CSQ_RELEASE_LOCK CsqReleaseLock
,
6790 IN PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp
);
6798 IN PIO_CSQ_IRP_CONTEXT Context
);
6805 IN PIO_CSQ_IRP_CONTEXT Context
);
6812 IN PVOID PeekContext
);
6818 IN PCONTROLLER_OBJECT ControllerObject
);
6824 IN PDEVICE_OBJECT DeviceObject
);
6829 IoDeleteSymbolicLink(
6830 IN PUNICODE_STRING SymbolicLinkName
);
6834 * IoDeassignArcName(
6835 * IN PUNICODE_STRING ArcName)
6837 #define IoDeassignArcName IoDeleteSymbolicLink
6843 IN OUT PDEVICE_OBJECT TargetDevice
);
6848 IoDisconnectInterrupt(
6849 IN PKINTERRUPT InterruptObject
);
6854 IoForwardIrpSynchronously(
6855 IN PDEVICE_OBJECT DeviceObject
,
6858 #define IoForwardAndCatchIrp IoForwardIrpSynchronously
6864 IN PCONTROLLER_OBJECT ControllerObject
);
6869 IoFreeErrorLogEntry(
6888 IN PIO_WORKITEM pIOWorkItem
);
6893 IoGetAttachedDevice(
6894 IN PDEVICE_OBJECT DeviceObject
);
6899 IoGetAttachedDeviceReference(
6900 IN PDEVICE_OBJECT DeviceObject
);
6905 IoGetBootDiskInformation(
6906 IN OUT PBOOTDISK_INFORMATION BootDiskInformation
,
6910 PCONFIGURATION_INFORMATION
6912 IoGetConfigurationInformation(
6918 IoGetCurrentProcess(
6924 IoGetDeviceInterfaceAlias(
6925 IN PUNICODE_STRING SymbolicLinkName
,
6926 IN CONST GUID
*AliasInterfaceClassGuid
,
6927 OUT PUNICODE_STRING AliasSymbolicLinkName
);
6932 IoGetDeviceInterfaces(
6933 IN CONST GUID
*InterfaceClassGuid
,
6934 IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL
,
6936 OUT PWSTR
*SymbolicLinkList
);
6941 IoGetDeviceObjectPointer(
6942 IN PUNICODE_STRING ObjectName
,
6943 IN ACCESS_MASK DesiredAccess
,
6944 OUT PFILE_OBJECT
*FileObject
,
6945 OUT PDEVICE_OBJECT
*DeviceObject
);
6950 IoGetDeviceProperty(
6951 IN PDEVICE_OBJECT DeviceObject
,
6952 IN DEVICE_REGISTRY_PROPERTY DeviceProperty
,
6953 IN ULONG BufferLength
,
6954 OUT PVOID PropertyBuffer
,
6955 OUT PULONG ResultLength
);
6960 IoGetDeviceToVerify(
6961 IN PETHREAD Thread
);
6967 IN PDEVICE_OBJECT PhysicalDeviceObject
,
6968 IN PDEVICE_DESCRIPTION DeviceDescription
,
6969 IN OUT PULONG NumberOfMapRegisters
);
6974 IoGetDriverObjectExtension(
6975 IN PDRIVER_OBJECT DriverObject
,
6976 IN PVOID ClientIdentificationAddress
);
6981 IoGetFileObjectGenericMapping(
6986 * IoGetFunctionCodeFromCtlCode(
6987 * IN ULONG ControlCode)
6989 #define IoGetFunctionCodeFromCtlCode(_ControlCode) \
6990 (((_ControlCode) >> 2) & 0x00000FFF)
7001 IoGetRelatedDeviceObject(
7002 IN PFILE_OBJECT FileObject
);
7007 IoGetRemainingStackSize(
7014 OUT PULONG_PTR LowLimit
,
7015 OUT PULONG_PTR HighLimit
);
7022 IN PKDEFERRED_ROUTINE DeferredRoutine
,
7023 IN PVOID DeferredContext
);
7027 * IoInitializeDpcRequest(
7028 * IN PDEVICE_OBJECT DeviceObject,
7029 * IN PIO_DPC_ROUTINE DpcRoutine)
7031 #define IoInitializeDpcRequest(_DeviceObject, \
7033 KeInitializeDpc(&(_DeviceObject)->Dpc, \
7034 (PKDEFERRED_ROUTINE) (_DpcRoutine), \
7042 IN USHORT PacketSize
,
7043 IN CCHAR StackSize
);
7048 IoInitializeRemoveLockEx(
7049 IN PIO_REMOVE_LOCK Lock
,
7050 IN ULONG AllocateTag
,
7051 IN ULONG MaxLockedMinutes
,
7052 IN ULONG HighWatermark
,
7053 IN ULONG RemlockSize
);
7056 * IoInitializeRemoveLock(
7057 * IN PIO_REMOVE_LOCK Lock,
7058 * IN ULONG AllocateTag,
7059 * IN ULONG MaxLockedMinutes,
7060 * IN ULONG HighWatermark)
7062 #define IoInitializeRemoveLock( \
7063 Lock, AllocateTag, MaxLockedMinutes, HighWatermark) \
7064 IoInitializeRemoveLockEx(Lock, AllocateTag, MaxLockedMinutes, \
7065 HighWatermark, sizeof(IO_REMOVE_LOCK))
7071 IN PDEVICE_OBJECT DeviceObject
,
7072 IN PIO_TIMER_ROUTINE TimerRoutine
,
7078 IoInvalidateDeviceRelations(
7079 IN PDEVICE_OBJECT DeviceObject
,
7080 IN DEVICE_RELATION_TYPE Type
);
7085 IoInvalidateDeviceState(
7086 IN PDEVICE_OBJECT PhysicalDeviceObject
);
7092 IN PIRP Irp OPTIONAL
);
7096 * IoIsErrorUserInduced(
7097 * IN NTSTATUS Status);
7099 #define IoIsErrorUserInduced(Status) \
7100 ((BOOLEAN)(((Status) == STATUS_DEVICE_NOT_READY) || \
7101 ((Status) == STATUS_IO_TIMEOUT) || \
7102 ((Status) == STATUS_MEDIA_WRITE_PROTECTED) || \
7103 ((Status) == STATUS_NO_MEDIA_IN_DEVICE) || \
7104 ((Status) == STATUS_VERIFY_REQUIRED) || \
7105 ((Status) == STATUS_UNRECOGNIZED_MEDIA) || \
7106 ((Status) == STATUS_WRONG_VOLUME)))
7111 IoIsWdmVersionAvailable(
7112 IN UCHAR MajorVersion
,
7113 IN UCHAR MinorVersion
);
7118 IoMakeAssociatedIrp(
7120 IN CCHAR StackSize
);
7127 #define IoMarkIrpPending(_Irp) \
7128 (IoGetCurrentIrpStackLocation(_Irp)->Control |= SL_PENDING_RETURNED)
7133 IoOpenDeviceInterfaceRegistryKey(
7134 IN PUNICODE_STRING SymbolicLinkName
,
7135 IN ACCESS_MASK DesiredAccess
,
7136 OUT PHANDLE DeviceInterfaceKey
);
7138 #define PLUGPLAY_REGKEY_DEVICE 1
7139 #define PLUGPLAY_REGKEY_DRIVER 2
7140 #define PLUGPLAY_REGKEY_CURRENT_HWPROFILE 4
7145 IoOpenDeviceRegistryKey(
7146 IN PDEVICE_OBJECT DeviceObject
,
7147 IN ULONG DevInstKeyType
,
7148 IN ACCESS_MASK DesiredAccess
,
7149 OUT PHANDLE DevInstRegKey
);
7154 IoQueryDeviceDescription(
7155 IN PINTERFACE_TYPE BusType OPTIONAL
,
7156 IN PULONG BusNumber OPTIONAL
,
7157 IN PCONFIGURATION_TYPE ControllerType OPTIONAL
,
7158 IN PULONG ControllerNumber OPTIONAL
,
7159 IN PCONFIGURATION_TYPE PeripheralType OPTIONAL
,
7160 IN PULONG PeripheralNumber OPTIONAL
,
7161 IN PIO_QUERY_DEVICE_ROUTINE CalloutRoutine
,
7168 IN PIO_WORKITEM pIOWorkItem
,
7169 IN PIO_WORKITEM_ROUTINE Routine
,
7170 IN WORK_QUEUE_TYPE QueueType
,
7178 IN PVPB Vpb OPTIONAL
,
7179 IN PDEVICE_OBJECT RealDeviceObject
);
7184 IoRaiseInformationalHardError(
7185 IN NTSTATUS ErrorStatus
,
7186 IN PUNICODE_STRING String OPTIONAL
,
7187 IN PKTHREAD Thread OPTIONAL
);
7192 IoReadDiskSignature(
7193 IN PDEVICE_OBJECT DeviceObject
,
7194 IN ULONG BytesPerSector
,
7195 OUT PDISK_SIGNATURE Signature
);
7200 IoReadPartitionTableEx(
7201 IN PDEVICE_OBJECT DeviceObject
,
7202 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
**PartitionBuffer
);
7207 IoRegisterBootDriverReinitialization(
7208 IN PDRIVER_OBJECT DriverObject
,
7209 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
7215 IoRegisterBootDriverReinitialization(
7216 IN PDRIVER_OBJECT DriverObject
,
7217 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
7223 IoRegisterDeviceInterface(
7224 IN PDEVICE_OBJECT PhysicalDeviceObject
,
7225 IN CONST GUID
*InterfaceClassGuid
,
7226 IN PUNICODE_STRING ReferenceString OPTIONAL
,
7227 OUT PUNICODE_STRING SymbolicLinkName
);
7232 IoRegisterDriverReinitialization(
7233 IN PDRIVER_OBJECT DriverObject
,
7234 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
7240 IoRegisterPlugPlayNotification(
7241 IN IO_NOTIFICATION_EVENT_CATEGORY EventCategory
,
7242 IN ULONG EventCategoryFlags
,
7243 IN PVOID EventCategoryData OPTIONAL
,
7244 IN PDRIVER_OBJECT DriverObject
,
7245 IN PDRIVER_NOTIFICATION_CALLBACK_ROUTINE CallbackRoutine
,
7247 OUT PVOID
*NotificationEntry
);
7252 IoRegisterShutdownNotification(
7253 IN PDEVICE_OBJECT DeviceObject
);
7258 IoReleaseCancelSpinLock(
7264 IoReleaseRemoveLockAndWaitEx(
7265 IN PIO_REMOVE_LOCK RemoveLock
,
7267 IN ULONG RemlockSize
);
7272 IoReleaseRemoveLockEx(
7273 IN PIO_REMOVE_LOCK RemoveLock
,
7275 IN ULONG RemlockSize
);
7279 * IoReleaseRemoveLock(
7280 * IN PIO_REMOVE_LOCK RemoveLock,
7283 #define IoReleaseRemoveLock(_RemoveLock, \
7285 IoReleaseRemoveLockEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK))
7289 * IoReleaseRemoveLockAndWait(
7290 * IN PIO_REMOVE_LOCK RemoveLock,
7293 #define IoReleaseRemoveLockAndWait(_RemoveLock, \
7295 IoReleaseRemoveLockAndWaitEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK))
7300 IoRemoveShareAccess(
7301 IN PFILE_OBJECT FileObject
,
7302 IN OUT PSHARE_ACCESS ShareAccess
);
7307 IoReportDetectedDevice(
7308 IN PDRIVER_OBJECT DriverObject
,
7309 IN INTERFACE_TYPE LegacyBusType
,
7311 IN ULONG SlotNumber
,
7312 IN PCM_RESOURCE_LIST ResourceList
,
7313 IN PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements OPTIONAL
,
7314 IN BOOLEAN ResourceAssigned
,
7315 IN OUT PDEVICE_OBJECT
*DeviceObject
);
7320 IoReportResourceForDetection(
7321 IN PDRIVER_OBJECT DriverObject
,
7322 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
7323 IN ULONG DriverListSize OPTIONAL
,
7324 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
7325 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
7326 IN ULONG DeviceListSize OPTIONAL
,
7327 OUT PBOOLEAN ConflictDetected
);
7332 IoReportResourceUsage(
7333 IN PUNICODE_STRING DriverClassName OPTIONAL
,
7334 IN PDRIVER_OBJECT DriverObject
,
7335 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
7336 IN ULONG DriverListSize OPTIONAL
,
7337 IN PDEVICE_OBJECT DeviceObject
,
7338 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
7339 IN ULONG DeviceListSize OPTIONAL
,
7340 IN BOOLEAN OverrideConflict
,
7341 OUT PBOOLEAN ConflictDetected
);
7346 IoReportTargetDeviceChange(
7347 IN PDEVICE_OBJECT PhysicalDeviceObject
,
7348 IN PVOID NotificationStructure
);
7353 IoReportTargetDeviceChangeAsynchronous(
7354 IN PDEVICE_OBJECT PhysicalDeviceObject
,
7355 IN PVOID NotificationStructure
,
7356 IN PDEVICE_CHANGE_COMPLETE_CALLBACK Callback OPTIONAL
,
7357 IN PVOID Context OPTIONAL
);
7362 IoRequestDeviceEject(
7363 IN PDEVICE_OBJECT PhysicalDeviceObject
);
7368 * IN PDEVICE_OBJECT DeviceObject,
7370 * IN PVOID Context);
7372 #define IoRequestDpc(DeviceObject, Irp, Context)( \
7373 KeInsertQueueDpc(&(DeviceObject)->Dpc, (Irp), (Context)))
7380 IN NTSTATUS Status
);
7384 * IoSetCancelRoutine(
7386 * IN PDRIVER_CANCEL CancelRoutine)
7388 #define IoSetCancelRoutine(_Irp, \
7390 ((PDRIVER_CANCEL) InterlockedExchangePointer( \
7391 (PVOID *) &(_Irp)->CancelRoutine, (PVOID) (_CancelRoutine)))
7395 * IoSetCompletionRoutine(
7397 * IN PIO_COMPLETION_ROUTINE CompletionRoutine,
7399 * IN BOOLEAN InvokeOnSuccess,
7400 * IN BOOLEAN InvokeOnError,
7401 * IN BOOLEAN InvokeOnCancel)
7403 #define IoSetCompletionRoutine(_Irp, \
7404 _CompletionRoutine, \
7410 PIO_STACK_LOCATION _IrpSp; \
7411 ASSERT(_InvokeOnSuccess || _InvokeOnError || _InvokeOnCancel ? \
7412 _CompletionRoutine != NULL : TRUE); \
7413 _IrpSp = IoGetNextIrpStackLocation(_Irp); \
7414 _IrpSp->CompletionRoutine = (PIO_COMPLETION_ROUTINE)(_CompletionRoutine); \
7415 _IrpSp->Context = (_Context); \
7416 _IrpSp->Control = 0; \
7417 if (_InvokeOnSuccess) _IrpSp->Control = SL_INVOKE_ON_SUCCESS; \
7418 if (_InvokeOnError) _IrpSp->Control |= SL_INVOKE_ON_ERROR; \
7419 if (_InvokeOnCancel) _IrpSp->Control |= SL_INVOKE_ON_CANCEL; \
7425 IoSetCompletionRoutineEx(
7426 IN PDEVICE_OBJECT DeviceObject
,
7428 IN PIO_COMPLETION_ROUTINE CompletionRoutine
,
7430 IN BOOLEAN InvokeOnSuccess
,
7431 IN BOOLEAN InvokeOnError
,
7432 IN BOOLEAN InvokeOnCancel
);
7437 IoSetDeviceInterfaceState(
7438 IN PUNICODE_STRING SymbolicLinkName
,
7444 IoSetHardErrorOrVerifyDevice(
7446 IN PDEVICE_OBJECT DeviceObject
);
7450 * IoSetNextIrpStackLocation(
7453 #define IoSetNextIrpStackLocation(_Irp) \
7455 (_Irp)->CurrentLocation--; \
7456 (_Irp)->Tail.Overlay.CurrentStackLocation--; \
7462 IoSetPartitionInformationEx(
7463 IN PDEVICE_OBJECT DeviceObject
,
7464 IN ULONG PartitionNumber
,
7465 IN
struct _SET_PARTITION_INFORMATION_EX
*PartitionInfo
);
7471 IN ACCESS_MASK DesiredAccess
,
7472 IN ULONG DesiredShareAccess
,
7473 IN OUT PFILE_OBJECT FileObject
,
7474 OUT PSHARE_ACCESS ShareAccess
);
7479 IoSetStartIoAttributes(
7480 IN PDEVICE_OBJECT DeviceObject
,
7481 IN BOOLEAN DeferredStartIo
,
7482 IN BOOLEAN NonCancelable
);
7487 IoSetSystemPartition(
7488 IN PUNICODE_STRING VolumeNameString
);
7493 IoSetThreadHardErrorMode(
7494 IN BOOLEAN EnableHardErrors
);
7499 * IN CCHAR StackSize)
7501 #define IoSizeOfIrp(_StackSize) \
7502 ((USHORT) (sizeof(IRP) + ((_StackSize) * (sizeof(IO_STACK_LOCATION)))))
7506 * IoSkipCurrentIrpStackLocation(
7509 #define IoSkipCurrentIrpStackLocation(_Irp) \
7511 (_Irp)->CurrentLocation++; \
7512 (_Irp)->Tail.Overlay.CurrentStackLocation++; \
7519 IN PDEVICE_OBJECT DeviceObject
,
7520 IN BOOLEAN Cancelable
);
7525 IoStartNextPacketByKey(
7526 IN PDEVICE_OBJECT DeviceObject
,
7527 IN BOOLEAN Cancelable
,
7534 IN PDEVICE_OBJECT DeviceObject
,
7536 IN PULONG Key OPTIONAL
,
7537 IN PDRIVER_CANCEL CancelFunction OPTIONAL
);
7543 IN PDEVICE_OBJECT DeviceObject
);
7549 IN PDEVICE_OBJECT DeviceObject
);
7554 IoUnregisterPlugPlayNotification(
7555 IN PVOID NotificationEntry
);
7560 IoUnregisterShutdownNotification(
7561 IN PDEVICE_OBJECT DeviceObject
);
7566 IoUpdateShareAccess(
7567 IN PFILE_OBJECT FileObject
,
7568 IN OUT PSHARE_ACCESS ShareAccess
);
7573 IoVerifyPartitionTable(
7574 IN PDEVICE_OBJECT DeviceObject
,
7575 IN BOOLEAN FixErrors
);
7580 IoVolumeDeviceToDosName(
7581 IN PVOID VolumeDeviceObject
,
7582 OUT PUNICODE_STRING DosName
);
7587 IoWMIAllocateInstanceIds(
7589 IN ULONG InstanceCount
,
7590 OUT ULONG
*FirstInstanceId
);
7595 IoWMIDeviceObjectToProviderId(
7596 IN PDEVICE_OBJECT DeviceObject
);
7601 IoWMIDeviceObjectToInstanceName(
7602 IN PVOID DataBlockObject
,
7603 IN PDEVICE_OBJECT DeviceObject
,
7604 OUT PUNICODE_STRING InstanceName
);
7610 IN PVOID DataBlockObject
,
7611 IN PUNICODE_STRING InstanceName
,
7613 IN ULONG InBufferSize
,
7614 IN OUT PULONG OutBufferSize
,
7615 IN OUT PUCHAR InOutBuffer
);
7620 IoWMIHandleToInstanceName(
7621 IN PVOID DataBlockObject
,
7622 IN HANDLE FileHandle
,
7623 OUT PUNICODE_STRING InstanceName
);
7629 IN GUID
*DataBlockGuid
,
7630 IN ULONG DesiredAccess
,
7631 OUT PVOID
*DataBlockObject
);
7637 IN PVOID DataBlockObject
,
7638 IN OUT ULONG
*InOutBufferSize
,
7639 OUT PVOID OutBuffer
);
7644 IoWMIQueryAllDataMultiple(
7645 IN PVOID
*DataBlockObjectList
,
7646 IN ULONG ObjectCount
,
7647 IN OUT ULONG
*InOutBufferSize
,
7648 OUT PVOID OutBuffer
);
7653 IoWMIQuerySingleInstance(
7654 IN PVOID DataBlockObject
,
7655 IN PUNICODE_STRING InstanceName
,
7656 IN OUT ULONG
*InOutBufferSize
,
7657 OUT PVOID OutBuffer
);
7662 IoWMIQuerySingleInstanceMultiple(
7663 IN PVOID
*DataBlockObjectList
,
7664 IN PUNICODE_STRING InstanceNames
,
7665 IN ULONG ObjectCount
,
7666 IN OUT ULONG
*InOutBufferSize
,
7667 OUT PVOID OutBuffer
);
7672 IoWMIRegistrationControl(
7673 IN PDEVICE_OBJECT DeviceObject
,
7679 IoWMISetNotificationCallback(
7681 IN WMI_NOTIFICATION_CALLBACK Callback
,
7687 IoWMISetSingleInstance(
7688 IN PVOID DataBlockObject
,
7689 IN PUNICODE_STRING InstanceName
,
7691 IN ULONG ValueBufferSize
,
7692 IN PVOID ValueBuffer
);
7698 IN PVOID DataBlockObject
,
7699 IN PUNICODE_STRING InstanceName
,
7700 IN ULONG DataItemId
,
7702 IN ULONG ValueBufferSize
,
7703 IN PVOID ValueBuffer
);
7708 IoWMISuggestInstanceName(
7709 IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL
,
7710 IN PUNICODE_STRING SymbolicLinkName OPTIONAL
,
7711 IN BOOLEAN CombineNames
,
7712 OUT PUNICODE_STRING SuggestedInstanceName
);
7718 IN PVOID WnodeEventItem
);
7723 IoWriteErrorLogEntry(
7729 IoWritePartitionTableEx(
7730 IN PDEVICE_OBJECT DeviceObject
,
7731 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
*PartitionBuffer
);
7735 /** Kernel routines **/
7740 KeAcquireInStackQueuedSpinLock(
7741 IN PKSPIN_LOCK SpinLock
,
7742 IN PKLOCK_QUEUE_HANDLE LockHandle
);
7747 KeAcquireInStackQueuedSpinLockAtDpcLevel(
7748 IN PKSPIN_LOCK SpinLock
,
7749 IN PKLOCK_QUEUE_HANDLE LockHandle
);
7754 KeAcquireInterruptSpinLock(
7755 IN PKINTERRUPT Interrupt
);
7761 IN PKSPIN_LOCK SpinLock
,
7762 OUT PKIRQL OldIrql
);
7764 /* System Service Dispatch Table */
7765 typedef PVOID (NTAPI
* SSDT
)(VOID
);
7766 typedef SSDT
* PSSDT
;
7768 /* System Service Parameters Table */
7769 typedef UCHAR SSPT
, * PSSPT
;
7771 typedef struct _SSDT_ENTRY
{
7773 PULONG ServiceCounterTable
;
7774 ULONG NumberOfServices
;
7776 } SSDT_ENTRY
, *PSSDT_ENTRY
;
7781 KeAddSystemServiceTable(
7783 IN PULONG ServiceCounterTable
,
7784 IN ULONG NumberOfServices
,
7786 IN ULONG TableIndex
);
7798 IN ULONG BugCheckCode
);
7804 IN ULONG BugCheckCode
,
7805 IN ULONG_PTR BugCheckParameter1
,
7806 IN ULONG_PTR BugCheckParameter2
,
7807 IN ULONG_PTR BugCheckParameter3
,
7808 IN ULONG_PTR BugCheckParameter4
);
7825 KeDelayExecutionThread(
7826 IN KPROCESSOR_MODE WaitMode
,
7827 IN BOOLEAN Alertable
,
7828 IN PLARGE_INTEGER Interval
);
7833 KeDeregisterBugCheckCallback(
7834 IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord
);
7839 KeEnterCriticalRegion(
7846 * IN BOOLEAN ReadOperation,
7847 * IN BOOLEAN DmaOperation)
7849 #define KeFlushIoBuffers(_Mdl, _ReadOperation, _DmaOperation)
7866 KeGetRecommendedSharedDataAlignment(
7872 KeInitializeDeviceQueue(
7873 IN PKDEVICE_QUEUE DeviceQueue
);
7885 KeInitializeSemaphore(
7886 IN PRKSEMAPHORE Semaphore
,
7893 KeInitializeSpinLock(
7894 IN PKSPIN_LOCK SpinLock
);
7905 KeInitializeTimerEx(
7907 IN TIMER_TYPE Type
);
7912 KeInsertByKeyDeviceQueue(
7913 IN PKDEVICE_QUEUE DeviceQueue
,
7914 IN PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
,
7920 KeInsertDeviceQueue(
7921 IN PKDEVICE_QUEUE DeviceQueue
,
7922 IN PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
);
7929 IN PVOID SystemArgument1
,
7930 IN PVOID SystemArgument2
);
7935 KeLeaveCriticalRegion(
7943 volatile LONG Barrier
;
7944 __asm__
__volatile__ ("xchg %%eax, %0" : : "m" (Barrier
) : "%eax");
7952 IN KPRIORITY Increment
,
7958 KeQueryInterruptTime(
7964 KeQueryPerformanceCounter(
7965 OUT PLARGE_INTEGER PerformanceFrequency OPTIONAL
);
7970 KeQueryPriorityThread(
7971 IN PRKTHREAD Thread
);
7977 OUT PLARGE_INTEGER CurrentTime
);
7983 OUT PLARGE_INTEGER TickCount
);
7988 KeQueryTimeIncrement(
8006 KeReadStateSemaphore(
8007 IN PRKSEMAPHORE Semaphore
);
8018 KeRegisterBugCheckCallback(
8019 IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord
,
8020 IN PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine
,
8023 IN PUCHAR Component
);
8028 KeReleaseInStackQueuedSpinLock(
8029 IN PKLOCK_QUEUE_HANDLE LockHandle
);
8034 KeReleaseInStackQueuedSpinLockFromDpcLevel(
8035 IN PKLOCK_QUEUE_HANDLE LockHandle
);
8040 KeReleaseInterruptSpinLock(
8041 IN PKINTERRUPT Interrupt
,
8055 IN PRKSEMAPHORE Semaphore
,
8056 IN KPRIORITY Increment
,
8064 IN PKSPIN_LOCK SpinLock
,
8068 PKDEVICE_QUEUE_ENTRY
8070 KeRemoveByKeyDeviceQueue(
8071 IN PKDEVICE_QUEUE DeviceQueue
,
8075 PKDEVICE_QUEUE_ENTRY
8077 KeRemoveDeviceQueue(
8078 IN PKDEVICE_QUEUE DeviceQueue
);
8083 KeRemoveEntryDeviceQueue(
8084 IN PKDEVICE_QUEUE DeviceQueue
,
8085 IN PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
);
8102 KeRestoreFloatingPointState(
8103 IN PKFLOATING_SAVE FloatSave
);
8108 KeSaveFloatingPointState(
8109 OUT PKFLOATING_SAVE FloatSave
);
8114 KeSetBasePriorityThread(
8115 IN PRKTHREAD Thread
,
8123 IN KPRIORITY Increment
,
8131 IN KDPC_IMPORTANCE Importance
);
8136 KeSetPriorityThread(
8138 IN KPRIORITY Priority
);
8143 KeSetTargetProcessorDpc(
8152 IN LARGE_INTEGER DueTime
,
8153 IN PKDPC Dpc OPTIONAL
);
8160 IN LARGE_INTEGER DueTime
,
8161 IN LONG Period OPTIONAL
,
8162 IN PKDPC Dpc OPTIONAL
);
8167 KeSetTimeUpdateNotifyRoutine(
8168 IN PTIME_UPDATE_NOTIFY_ROUTINE NotifyRoutine
);
8173 KeStallExecutionProcessor(
8174 IN ULONG MicroSeconds
);
8179 KeSynchronizeExecution(
8180 IN PKINTERRUPT Interrupt
,
8181 IN PKSYNCHRONIZE_ROUTINE SynchronizeRoutine
,
8182 IN PVOID SynchronizeContext
);
8187 KeWaitForMultipleObjects(
8190 IN WAIT_TYPE WaitType
,
8191 IN KWAIT_REASON WaitReason
,
8192 IN KPROCESSOR_MODE WaitMode
,
8193 IN BOOLEAN Alertable
,
8194 IN PLARGE_INTEGER Timeout OPTIONAL
,
8195 IN PKWAIT_BLOCK WaitBlockArray OPTIONAL
);
8200 KeWaitForMutexObject(
8202 IN KWAIT_REASON WaitReason
,
8203 IN KPROCESSOR_MODE WaitMode
,
8204 IN BOOLEAN Alertable
,
8205 IN PLARGE_INTEGER Timeout OPTIONAL
);
8210 KeWaitForSingleObject(
8212 IN KWAIT_REASON WaitReason
,
8213 IN KPROCESSOR_MODE WaitMode
,
8214 IN BOOLEAN Alertable
,
8215 IN PLARGE_INTEGER Timeout OPTIONAL
);
8231 #define KeLowerIrql(a) KfLowerIrql(a)
8232 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
8253 KeRaiseIrqlToDpcLevel(
8256 /** Memory manager routines **/
8263 IN ULONG NumberOfBytes
);
8268 MmAllocateContiguousMemory(
8269 IN ULONG NumberOfBytes
,
8270 IN PHYSICAL_ADDRESS HighestAcceptableAddress
);
8275 MmAllocateContiguousMemorySpecifyCache(
8276 IN SIZE_T NumberOfBytes
,
8277 IN PHYSICAL_ADDRESS LowestAcceptableAddress
,
8278 IN PHYSICAL_ADDRESS HighestAcceptableAddress
,
8279 IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL
,
8280 IN MEMORY_CACHING_TYPE CacheType
);
8285 MmAllocateMappingAddress(
8286 IN SIZE_T NumberOfBytes
,
8292 MmAllocateNonCachedMemory(
8293 IN ULONG NumberOfBytes
);
8298 MmAllocatePagesForMdl(
8299 IN PHYSICAL_ADDRESS LowAddress
,
8300 IN PHYSICAL_ADDRESS HighAddress
,
8301 IN PHYSICAL_ADDRESS SkipBytes
,
8302 IN SIZE_T TotalBytes
);
8307 MmBuildMdlForNonPagedPool(
8308 IN OUT PMDL MemoryDescriptorList
);
8314 OUT PSECTION_OBJECT
*SectionObject
,
8315 IN ACCESS_MASK DesiredAccess
,
8316 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
8317 IN PLARGE_INTEGER MaximumSize
,
8318 IN ULONG SectionPageProtection
,
8319 IN ULONG AllocationAttributes
,
8320 IN HANDLE FileHandle OPTIONAL
,
8321 IN PFILE_OBJECT File OPTIONAL
);
8323 typedef enum _MMFLUSH_TYPE
{
8331 MmFlushImageSection(
8332 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
8333 IN MMFLUSH_TYPE FlushType
);
8338 MmFreeContiguousMemory(
8339 IN PVOID BaseAddress
);
8344 MmFreeContiguousMemorySpecifyCache(
8345 IN PVOID BaseAddress
,
8346 IN SIZE_T NumberOfBytes
,
8347 IN MEMORY_CACHING_TYPE CacheType
);
8352 MmFreeMappingAddress(
8353 IN PVOID BaseAddress
,
8359 MmFreeNonCachedMemory(
8360 IN PVOID BaseAddress
,
8361 IN SIZE_T NumberOfBytes
);
8367 IN PMDL MemoryDescriptorList
);
8371 * MmGetMdlByteCount(
8374 #define MmGetMdlByteCount(_Mdl) \
8379 * MmGetMdlByteOffset(
8382 #define MmGetMdlByteOffset(_Mdl) \
8383 ((_Mdl)->ByteOffset)
8390 #define MmGetMdlPfnArray(_Mdl) \
8391 ((PPFN_NUMBER) ((_Mdl) + 1))
8395 * MmGetMdlVirtualAddress(
8398 #define MmGetMdlVirtualAddress(_Mdl) \
8399 ((PVOID) ((PCHAR) ((_Mdl)->StartVa) + (_Mdl)->ByteOffset))
8404 MmGetPhysicalAddress(
8405 IN PVOID BaseAddress
);
8408 PPHYSICAL_MEMORY_RANGE
8410 MmGetPhysicalMemoryRanges(
8416 MmGetVirtualForPhysical(
8417 IN PHYSICAL_ADDRESS PhysicalAddress
);
8422 MmMapLockedPagesSpecifyCache(
8423 IN PMDL MemoryDescriptorList
,
8424 IN KPROCESSOR_MODE AccessMode
,
8425 IN MEMORY_CACHING_TYPE CacheType
,
8426 IN PVOID BaseAddress
,
8427 IN ULONG BugCheckOnFailure
,
8428 IN MM_PAGE_PRIORITY Priority
);
8433 MmMapLockedPagesWithReservedMapping(
8434 IN PVOID MappingAddress
,
8436 IN PMDL MemoryDescriptorList
,
8437 IN MEMORY_CACHING_TYPE CacheType
);
8442 MmMapUserAddressesToPage(
8443 IN PVOID BaseAddress
,
8444 IN SIZE_T NumberOfBytes
,
8445 IN PVOID PageAddress
);
8451 IN PHYSICAL_ADDRESS PhysicalAddress
,
8452 IN SIZE_T NumberOfBytes
,
8453 IN MEMORY_CACHING_TYPE CacheType
);
8458 MmMapViewInSessionSpace(
8460 OUT PVOID
*MappedBase
,
8461 IN OUT PSIZE_T ViewSize
);
8466 MmMapViewInSystemSpace(
8468 OUT PVOID
*MappedBase
,
8469 IN PSIZE_T ViewSize
);
8474 MmMarkPhysicalMemoryAsBad(
8475 IN PPHYSICAL_ADDRESS StartAddress
,
8476 IN OUT PLARGE_INTEGER NumberOfBytes
);
8481 MmMarkPhysicalMemoryAsGood(
8482 IN PPHYSICAL_ADDRESS StartAddress
,
8483 IN OUT PLARGE_INTEGER NumberOfBytes
);
8487 * MmGetSystemAddressForMdlSafe(
8489 * IN MM_PAGE_PRIORITY Priority)
8491 #define MmGetSystemAddressForMdlSafe(_Mdl, _Priority) \
8492 ((_Mdl)->MdlFlags & (MDL_MAPPED_TO_SYSTEM_VA \
8493 | MDL_SOURCE_IS_NONPAGED_POOL)) ? \
8494 (_Mdl)->MappedSystemVa : \
8495 (PVOID) MmMapLockedPagesSpecifyCache((_Mdl), \
8496 KernelMode, MmCached, NULL, FALSE, _Priority)
8501 MmGetSystemRoutineAddress(
8502 IN PUNICODE_STRING SystemRoutineName
);
8506 * ADDRESS_AND_SIZE_TO_SPAN_PAGES(
8510 #define ADDRESS_AND_SIZE_TO_SPAN_PAGES(_Va, \
8512 ((ULONG) ((((ULONG_PTR) (_Va) & (PAGE_SIZE - 1)) \
8513 + (_Size) + (PAGE_SIZE - 1)) >> PAGE_SHIFT))
8518 * IN PMDL MemoryDescriptorList,
8522 #define MmInitializeMdl(_MemoryDescriptorList, \
8526 (_MemoryDescriptorList)->Next = (PMDL) NULL; \
8527 (_MemoryDescriptorList)->Size = (CSHORT) (sizeof(MDL) + \
8528 (sizeof(PFN_NUMBER) * ADDRESS_AND_SIZE_TO_SPAN_PAGES(_BaseVa, _Length))); \
8529 (_MemoryDescriptorList)->MdlFlags = 0; \
8530 (_MemoryDescriptorList)->StartVa = (PVOID) PAGE_ALIGN(_BaseVa); \
8531 (_MemoryDescriptorList)->ByteOffset = BYTE_OFFSET(_BaseVa); \
8532 (_MemoryDescriptorList)->ByteCount = (ULONG) _Length; \
8539 IN PVOID VirtualAddress
);
8544 MmIsDriverVerifying(
8545 IN PDRIVER_OBJECT DriverObject
);
8550 MmIsThisAnNtAsSystem(
8556 MmIsVerifierEnabled(
8557 OUT PULONG VerifierFlags
);
8562 MmLockPagableDataSection(
8563 IN PVOID AddressWithinSection
);
8568 MmLockPagableImageSection(
8569 IN PVOID AddressWithinSection
);
8573 * MmLockPagableCodeSection(
8574 * IN PVOID AddressWithinSection)
8576 #define MmLockPagableCodeSection MmLockPagableDataSection
8581 MmLockPagableSectionByHandle(
8582 IN PVOID ImageSectionHandle
);
8588 IN PHYSICAL_ADDRESS PhysicalAddress
,
8589 IN ULONG NumberOfBytes
,
8590 IN MEMORY_CACHING_TYPE CacheEnable
);
8596 IN PMDL MemoryDescriptorList
,
8597 IN KPROCESSOR_MODE AccessMode
);
8603 IN PVOID AddressWithinSection
);
8608 MmProbeAndLockProcessPages(
8609 IN OUT PMDL MemoryDescriptorList
,
8610 IN PEPROCESS Process
,
8611 IN KPROCESSOR_MODE AccessMode
,
8612 IN LOCK_OPERATION Operation
);
8617 MmProtectMdlSystemAddress(
8618 IN PMDL MemoryDescriptorList
,
8619 IN ULONG NewProtect
);
8625 IN PVOID BaseAddress
,
8626 IN PMDL MemoryDescriptorList
);
8631 MmUnmapViewInSessionSpace(
8632 IN PVOID MappedBase
);
8637 MmUnmapViewInSystemSpace(
8638 IN PVOID MappedBase
);
8643 MmUnsecureVirtualMemory(
8644 IN HANDLE SecureHandle
);
8648 * MmPrepareMdlForReuse(
8651 #define MmPrepareMdlForReuse(_Mdl) \
8653 if (((_Mdl)->MdlFlags & MDL_PARTIAL_HAS_BEEN_MAPPED) != 0) { \
8654 ASSERT(((_Mdl)->MdlFlags & MDL_PARTIAL) != 0); \
8655 MmUnmapLockedPages((_Mdl)->MappedSystemVa, (_Mdl)); \
8656 } else if (((_Mdl)->MdlFlags & MDL_PARTIAL) == 0) { \
8657 ASSERT(((_Mdl)->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA) == 0); \
8664 MmProbeAndLockPages(
8665 IN OUT PMDL MemoryDescriptorList
,
8666 IN KPROCESSOR_MODE AccessMode
,
8667 IN LOCK_OPERATION Operation
);
8678 MmRemovePhysicalMemory(
8679 IN PPHYSICAL_ADDRESS StartAddress
,
8680 IN OUT PLARGE_INTEGER NumberOfBytes
);
8685 MmResetDriverPaging(
8686 IN PVOID AddressWithinSection
);
8691 MmSecureVirtualMemory(
8694 IN ULONG ProbeMode
);
8706 MmUnlockPagableImageSection(
8707 IN PVOID ImageSectionHandle
);
8713 IN PMDL MemoryDescriptorList
);
8719 IN PVOID BaseAddress
,
8720 IN SIZE_T NumberOfBytes
);
8725 MmUnmapReservedMapping(
8726 IN PVOID BaseAddress
,
8728 IN PMDL MemoryDescriptorList
);
8733 MmUnmapVideoDisplay(
8734 IN PVOID BaseAddress
,
8735 IN SIZE_T NumberOfBytes
);
8739 /** Object manager routines **/
8745 IN PACCESS_STATE AccessState
,
8746 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
8748 IN POBJECT_TYPE Type
);
8753 ObDereferenceSecurityDescriptor(
8754 PSECURITY_DESCRIPTOR SecurityDescriptor
,
8760 ObfDereferenceObject(
8765 * ObDereferenceObject(
8768 #define ObDereferenceObject ObfDereferenceObject
8773 ObGetObjectSecurity(
8775 OUT PSECURITY_DESCRIPTOR
*SecurityDescriptor
,
8776 OUT PBOOLEAN MemoryAllocated
);
8783 IN PACCESS_STATE PassedAccessState OPTIONAL
,
8784 IN ACCESS_MASK DesiredAccess
,
8785 IN ULONG AdditionalReferences
,
8786 OUT PVOID
* ReferencedObject OPTIONAL
,
8787 OUT PHANDLE Handle
);
8798 ObLogSecurityDescriptor(
8799 IN PSECURITY_DESCRIPTOR InputSecurityDescriptor
,
8800 OUT PSECURITY_DESCRIPTOR
*OutputSecurityDescriptor
,
8804 * ObReferenceObject(
8807 #define ObReferenceObject ObfReferenceObject
8812 ObMakeTemporaryObject(
8819 IN POBJECT_ATTRIBUTES ObjectAttributes
,
8820 IN POBJECT_TYPE ObjectType
,
8821 IN OUT PVOID ParseContext OPTIONAL
,
8822 IN KPROCESSOR_MODE AccessMode
,
8823 IN ACCESS_MASK DesiredAccess
,
8824 IN PACCESS_STATE PassedAccessState
,
8825 OUT PHANDLE Handle
);
8830 ObOpenObjectByPointer(
8832 IN ULONG HandleAttributes
,
8833 IN PACCESS_STATE PassedAccessState OPTIONAL
,
8834 IN ACCESS_MASK DesiredAccess OPTIONAL
,
8835 IN POBJECT_TYPE ObjectType OPTIONAL
,
8836 IN KPROCESSOR_MODE AccessMode
,
8837 OUT PHANDLE Handle
);
8842 ObQueryObjectAuditingByHandle(
8844 OUT PBOOLEAN GenerateOnClose
);
8849 ObReferenceObjectByHandle(
8851 IN ACCESS_MASK DesiredAccess
,
8852 IN POBJECT_TYPE ObjectType OPTIONAL
,
8853 IN KPROCESSOR_MODE AccessMode
,
8855 OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL
);
8860 ObReferenceObjectByName(
8861 IN PUNICODE_STRING ObjectPath
,
8862 IN ULONG Attributes
,
8863 IN PACCESS_STATE PassedAccessState OPTIONAL
,
8864 IN ACCESS_MASK DesiredAccess OPTIONAL
,
8865 IN POBJECT_TYPE ObjectType
,
8866 IN KPROCESSOR_MODE AccessMode
,
8867 IN OUT PVOID ParseContext OPTIONAL
,
8873 ObReferenceObjectByPointer(
8875 IN ACCESS_MASK DesiredAccess
,
8876 IN POBJECT_TYPE ObjectType
,
8877 IN KPROCESSOR_MODE AccessMode
);
8882 ObReferenceSecurityDescriptor(
8883 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
8889 ObReleaseObjectSecurity(
8890 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
8891 IN BOOLEAN MemoryAllocated
);
8895 /** Process manager routines **/
8900 PsCreateSystemProcess(
8901 IN PHANDLE ProcessHandle
,
8902 IN ACCESS_MASK DesiredAccess
,
8903 IN POBJECT_ATTRIBUTES ObjectAttributes
);
8908 PsCreateSystemThread(
8909 OUT PHANDLE ThreadHandle
,
8910 IN ULONG DesiredAccess
,
8911 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
8912 IN HANDLE ProcessHandle OPTIONAL
,
8913 OUT PCLIENT_ID ClientId OPTIONAL
,
8914 IN PKSTART_ROUTINE StartRoutine
,
8915 IN PVOID StartContext
);
8919 * PsGetCurrentProcess(VOID)
8921 #define PsGetCurrentProcess IoGetCurrentProcess
8926 PsGetCurrentProcessId(
8931 * PsGetCurrentThread(VOID)
8933 #define PsGetCurrentThread() \
8934 ((PETHREAD) KeGetCurrentThread())
8939 PsGetCurrentThreadId(
8946 PULONG MajorVersion OPTIONAL
,
8947 PULONG MinorVersion OPTIONAL
,
8948 PULONG BuildNumber OPTIONAL
,
8949 PUNICODE_STRING CSDVersion OPTIONAL
);
8954 PsRemoveCreateThreadNotifyRoutine(
8955 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
8960 PsRemoveLoadImageNotifyRoutine(
8961 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
8966 PsSetCreateProcessNotifyRoutine(
8967 IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine
,
8973 PsSetCreateThreadNotifyRoutine(
8974 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
8979 PsSetLoadImageNotifyRoutine(
8980 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
8985 PsTerminateSystemThread(
8986 IN NTSTATUS ExitStatus
);
8990 /** Security reference monitor routines **/
8996 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
8997 IN PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext
,
8998 IN BOOLEAN SubjectContextLocked
,
8999 IN ACCESS_MASK DesiredAccess
,
9000 IN ACCESS_MASK PreviouslyGrantedAccess
,
9001 OUT PPRIVILEGE_SET
*Privileges OPTIONAL
,
9002 IN PGENERIC_MAPPING GenericMapping
,
9003 IN KPROCESSOR_MODE AccessMode
,
9004 OUT PACCESS_MASK GrantedAccess
,
9005 OUT PNTSTATUS AccessStatus
);
9011 IN PSECURITY_DESCRIPTOR ParentDescriptor OPTIONAL
,
9012 IN PSECURITY_DESCRIPTOR ExplicitDescriptor OPTIONAL
,
9013 OUT PSECURITY_DESCRIPTOR
*NewDescriptor
,
9014 IN BOOLEAN IsDirectoryObject
,
9015 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
,
9016 IN PGENERIC_MAPPING GenericMapping
,
9017 IN POOL_TYPE PoolType
);
9023 IN PSECURITY_DESCRIPTOR ParentDescriptor OPTIONAL
,
9024 IN PSECURITY_DESCRIPTOR ExplicitDescriptor OPTIONAL
,
9025 OUT PSECURITY_DESCRIPTOR
*NewDescriptor
,
9026 IN GUID
*ObjectType OPTIONAL
,
9027 IN BOOLEAN IsDirectoryObject
,
9028 IN ULONG AutoInheritFlags
,
9029 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
,
9030 IN PGENERIC_MAPPING GenericMapping
,
9031 IN POOL_TYPE PoolType
);
9037 IN OUT PSECURITY_DESCRIPTOR
*SecurityDescriptor
);
9042 SeSinglePrivilegeCheck(
9043 LUID PrivilegeValue
,
9044 KPROCESSOR_MODE PreviousMode
);
9049 SeValidSecurityDescriptor(
9051 IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
9055 /** NtXxx routines **/
9061 OUT PHANDLE ProcessHandle
,
9062 IN ACCESS_MASK DesiredAccess
,
9063 IN POBJECT_ATTRIBUTES ObjectAttributes
,
9064 IN PCLIENT_ID ClientId OPTIONAL
);
9069 NtQueryInformationProcess(
9070 IN HANDLE ProcessHandle
,
9071 IN PROCESSINFOCLASS ProcessInformationClass
,
9072 OUT PVOID ProcessInformation
,
9073 IN ULONG ProcessInformationLength
,
9074 OUT PULONG ReturnLength OPTIONAL
);
9078 /** NtXxx and ZwXxx routines **/
9084 IN HANDLE TimerHandle
,
9085 OUT PBOOLEAN CurrentState OPTIONAL
);
9102 ZwCreateDirectoryObject(
9103 OUT PHANDLE DirectoryHandle
,
9104 IN ACCESS_MASK DesiredAccess
,
9105 IN POBJECT_ATTRIBUTES ObjectAttributes
);
9111 OUT PHANDLE EventHandle
,
9112 IN ACCESS_MASK DesiredAccess
,
9113 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
9114 IN EVENT_TYPE EventType
,
9115 IN BOOLEAN InitialState
);
9121 OUT PHANDLE EventHandle
,
9122 IN ACCESS_MASK DesiredAccess
,
9123 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
9124 IN EVENT_TYPE EventType
,
9125 IN BOOLEAN InitialState
);
9131 OUT PHANDLE FileHandle
,
9132 IN ACCESS_MASK DesiredAccess
,
9133 IN POBJECT_ATTRIBUTES ObjectAttributes
,
9134 OUT PIO_STATUS_BLOCK IoStatusBlock
,
9135 IN PLARGE_INTEGER AllocationSize OPTIONAL
,
9136 IN ULONG FileAttributes
,
9137 IN ULONG ShareAccess
,
9138 IN ULONG CreateDisposition
,
9139 IN ULONG CreateOptions
,
9140 IN PVOID EaBuffer OPTIONAL
,
9147 OUT PHANDLE KeyHandle
,
9148 IN ACCESS_MASK DesiredAccess
,
9149 IN POBJECT_ATTRIBUTES ObjectAttributes
,
9150 IN ULONG TitleIndex
,
9151 IN PUNICODE_STRING Class OPTIONAL
,
9152 IN ULONG CreateOptions
,
9153 OUT PULONG Disposition OPTIONAL
);
9159 OUT PHANDLE TimerHandle
,
9160 IN ACCESS_MASK DesiredAccess
,
9161 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
9162 IN TIMER_TYPE TimerType
);
9168 IN HANDLE KeyHandle
);
9174 IN HANDLE KeyHandle
,
9175 IN PUNICODE_STRING ValueName
);
9180 NtDeviceIoControlFile(
9181 IN HANDLE DeviceHandle
,
9182 IN HANDLE Event OPTIONAL
,
9183 IN PIO_APC_ROUTINE UserApcRoutine OPTIONAL
,
9184 IN PVOID UserApcContext OPTIONAL
,
9185 OUT PIO_STATUS_BLOCK IoStatusBlock
,
9186 IN ULONG IoControlCode
,
9187 IN PVOID InputBuffer
,
9188 IN ULONG InputBufferSize
,
9189 OUT PVOID OutputBuffer
,
9190 IN ULONG OutputBufferSize
);
9195 ZwDeviceIoControlFile(
9196 IN HANDLE DeviceHandle
,
9197 IN HANDLE Event OPTIONAL
,
9198 IN PIO_APC_ROUTINE UserApcRoutine OPTIONAL
,
9199 IN PVOID UserApcContext OPTIONAL
,
9200 OUT PIO_STATUS_BLOCK IoStatusBlock
,
9201 IN ULONG IoControlCode
,
9202 IN PVOID InputBuffer
,
9203 IN ULONG InputBufferSize
,
9204 OUT PVOID OutputBuffer
,
9205 IN ULONG OutputBufferSize
);
9211 IN HANDLE KeyHandle
,
9213 IN KEY_INFORMATION_CLASS KeyInformationClass
,
9214 OUT PVOID KeyInformation
,
9216 OUT PULONG ResultLength
);
9221 ZwEnumerateValueKey(
9222 IN HANDLE KeyHandle
,
9224 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
,
9225 OUT PVOID KeyValueInformation
,
9227 OUT PULONG ResultLength
);
9233 IN HANDLE KeyHandle
);
9238 ZwMakeTemporaryObject(
9245 IN HANDLE SectionHandle
,
9246 IN HANDLE ProcessHandle
,
9247 IN OUT PVOID
*BaseAddress
,
9249 IN ULONG CommitSize
,
9250 IN OUT PLARGE_INTEGER SectionOffset OPTIONAL
,
9251 IN OUT PSIZE_T ViewSize
,
9252 IN SECTION_INHERIT InheritDisposition
,
9253 IN ULONG AllocationType
,
9260 IN HANDLE SectionHandle
,
9261 IN HANDLE ProcessHandle
,
9262 IN OUT PVOID
*BaseAddress
,
9264 IN ULONG CommitSize
,
9265 IN OUT PLARGE_INTEGER SectionOffset OPTIONAL
,
9266 IN OUT PSIZE_T ViewSize
,
9267 IN SECTION_INHERIT InheritDisposition
,
9268 IN ULONG AllocationType
,
9275 OUT PHANDLE FileHandle
,
9276 IN ACCESS_MASK DesiredAccess
,
9277 IN POBJECT_ATTRIBUTES ObjectAttributes
,
9278 OUT PIO_STATUS_BLOCK IoStatusBlock
,
9279 IN ULONG ShareAccess
,
9280 IN ULONG OpenOptions
);
9286 OUT PHANDLE FileHandle
,
9287 IN ACCESS_MASK DesiredAccess
,
9288 IN POBJECT_ATTRIBUTES ObjectAttributes
,
9289 OUT PIO_STATUS_BLOCK IoStatusBlock
,
9290 IN ULONG ShareAccess
,
9291 IN ULONG OpenOptions
);
9297 OUT PHANDLE KeyHandle
,
9298 IN ACCESS_MASK DesiredAccess
,
9299 IN POBJECT_ATTRIBUTES ObjectAttributes
);
9305 OUT PHANDLE SectionHandle
,
9306 IN ACCESS_MASK DesiredAccess
,
9307 IN POBJECT_ATTRIBUTES ObjectAttributes
);
9312 ZwOpenSymbolicLinkObject(
9313 OUT PHANDLE LinkHandle
,
9314 IN ACCESS_MASK DesiredAccess
,
9315 IN POBJECT_ATTRIBUTES ObjectAttributes
);
9321 OUT PHANDLE TimerHandle
,
9322 IN ACCESS_MASK DesiredAccess
,
9323 IN POBJECT_ATTRIBUTES ObjectAttributes
);
9328 ZwQueryInformationFile(
9329 IN HANDLE FileHandle
,
9330 OUT PIO_STATUS_BLOCK IoStatusBlock
,
9331 OUT PVOID FileInformation
,
9333 IN FILE_INFORMATION_CLASS FileInformationClass
);
9339 IN HANDLE KeyHandle
,
9340 IN KEY_INFORMATION_CLASS KeyInformationClass
,
9341 OUT PVOID KeyInformation
,
9343 OUT PULONG ResultLength
);
9348 ZwQuerySymbolicLinkObject(
9349 IN HANDLE LinkHandle
,
9350 IN OUT PUNICODE_STRING LinkTarget
,
9351 OUT PULONG ReturnedLength OPTIONAL
);
9357 IN HANDLE KeyHandle
,
9358 IN PUNICODE_STRING ValueName
,
9359 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
,
9360 OUT PVOID KeyValueInformation
,
9362 OUT PULONG ResultLength
);
9368 IN HANDLE FileHandle
,
9369 IN HANDLE Event OPTIONAL
,
9370 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
9371 IN PVOID ApcContext OPTIONAL
,
9372 OUT PIO_STATUS_BLOCK IoStatusBlock
,
9375 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
9376 IN PULONG Key OPTIONAL
);
9382 IN HANDLE FileHandle
,
9383 IN HANDLE Event OPTIONAL
,
9384 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
9385 IN PVOID ApcContext OPTIONAL
,
9386 OUT PIO_STATUS_BLOCK IoStatusBlock
,
9389 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
9390 IN PULONG Key OPTIONAL
);
9396 IN HANDLE EventHandle
,
9397 OUT PLONG PreviousState OPTIONAL
);
9403 IN HANDLE EventHandle
,
9404 OUT PLONG PreviousState OPTIONAL
);
9409 ZwSetInformationFile(
9410 IN HANDLE FileHandle
,
9411 OUT PIO_STATUS_BLOCK IoStatusBlock
,
9412 IN PVOID FileInformation
,
9414 IN FILE_INFORMATION_CLASS FileInformationClass
);
9419 ZwSetInformationThread(
9420 IN HANDLE ThreadHandle
,
9421 IN THREADINFOCLASS ThreadInformationClass
,
9422 IN PVOID ThreadInformation
,
9423 IN ULONG ThreadInformationLength
);
9429 IN HANDLE TimerHandle
,
9430 IN PLARGE_INTEGER DueTime
,
9431 IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL
,
9432 IN PVOID TimerContext OPTIONAL
,
9433 IN BOOLEAN WakeTimer
,
9434 IN LONG Period OPTIONAL
,
9435 OUT PBOOLEAN PreviousState OPTIONAL
);
9441 IN HANDLE KeyHandle
,
9442 IN PUNICODE_STRING ValueName
,
9443 IN ULONG TitleIndex OPTIONAL
,
9448 /* [Nt|Zw]MapViewOfSection.InheritDisposition constants */
9449 #define AT_EXTENDABLE_FILE 0x00002000
9450 #define SEC_NO_CHANGE 0x00400000
9451 #define AT_RESERVED 0x20000000
9452 #define AT_ROUND_TO_PAGE 0x40000000
9457 NtUnmapViewOfSection(
9458 IN HANDLE ProcessHandle
,
9459 IN PVOID BaseAddress
);
9464 ZwUnmapViewOfSection(
9465 IN HANDLE ProcessHandle
,
9466 IN PVOID BaseAddress
);
9471 NtWaitForSingleObject(
9472 IN HANDLE ObjectHandle
,
9473 IN BOOLEAN Alertable
,
9474 IN PLARGE_INTEGER TimeOut OPTIONAL
);
9479 ZwWaitForSingleObject(
9480 IN HANDLE ObjectHandle
,
9481 IN BOOLEAN Alertable
,
9482 IN PLARGE_INTEGER TimeOut OPTIONAL
);
9488 IN HANDLE FileHandle
,
9489 IN HANDLE Event OPTIONAL
,
9490 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
9491 IN PVOID ApcContext OPTIONAL
,
9492 OUT PIO_STATUS_BLOCK IoStatusBlock
,
9495 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
9496 IN PULONG Key OPTIONAL
);
9502 IN HANDLE FileHandle
,
9503 IN HANDLE Event OPTIONAL
,
9504 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
9505 IN PVOID ApcContext OPTIONAL
,
9506 OUT PIO_STATUS_BLOCK IoStatusBlock
,
9509 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
9510 IN PULONG Key OPTIONAL
);
9514 /** Power management support routines **/
9520 IN PDEVICE_OBJECT DeviceObject
,
9526 PoRegisterDeviceForIdleDetection(
9527 IN PDEVICE_OBJECT DeviceObject
,
9528 IN ULONG ConservationIdleTime
,
9529 IN ULONG PerformanceIdleTime
,
9530 IN DEVICE_POWER_STATE State
);
9535 PoRegisterSystemState(
9536 IN PVOID StateHandle
,
9537 IN EXECUTION_STATE Flags
);
9543 IN PDEVICE_OBJECT DeviceObject
,
9544 IN UCHAR MinorFunction
,
9545 IN POWER_STATE PowerState
,
9546 IN PREQUEST_POWER_COMPLETE CompletionFunction
,
9548 OUT PIRP
*Irp OPTIONAL
);
9553 PoRequestShutdownEvent(
9560 PULONG IdlePointer
);
9566 IN PDEVICE_OBJECT DeviceObject
,
9567 IN POWER_STATE_TYPE Type
,
9568 IN POWER_STATE State
);
9574 IN EXECUTION_STATE Flags
);
9579 PoStartNextPowerIrp(
9585 PoUnregisterSystemState(
9586 IN PVOID StateHandle
);
9590 /** WMI library support routines **/
9596 IN PDEVICE_OBJECT DeviceObject
,
9599 IN ULONG BufferUsed
,
9600 IN CCHAR PriorityBoost
);
9606 IN PDEVICE_OBJECT DeviceObject
,
9608 IN ULONG InstanceIndex
,
9609 IN ULONG EventDataSize
,
9610 IN PVOID EventData
);
9615 WmiQueryTraceInformation(
9616 IN TRACE_INFORMATION_CLASS TraceInformationClass
,
9617 OUT PVOID TraceInformation
,
9618 IN ULONG TraceInformationLength
,
9619 OUT PULONG RequiredLength OPTIONAL
,
9620 IN PVOID Buffer OPTIONAL
);
9626 IN PWMILIB_CONTEXT WmiLibInfo
,
9627 IN PDEVICE_OBJECT DeviceObject
,
9629 OUT PSYSCTL_IRP_DISPOSITION IrpDisposition
);
9635 IN TRACEHANDLE LoggerHandle
,
9636 IN ULONG MessageFlags
,
9637 IN LPGUID MessageGuid
,
9638 IN USHORT MessageNumber
,
9642 /* FIXME: Get va_list from where? */
9647 IN TRACEHANDLE LoggerHandle
,
9648 IN ULONG MessageFlags
,
9649 IN LPGUID MessageGuid
,
9650 IN USHORT MessageNumber
,
9651 IN
va_list MessageArgList
);
9655 /** Kernel debugger routines **/
9678 DbgBreakPointWithStatus(
9692 IN ULONG ComponentId
,
9700 DbgPrintReturnControlC(
9707 DbgQueryDebugFilterState(
9708 IN ULONG ComponentId
,
9714 DbgSetDebugFilterState(
9715 IN ULONG ComponentId
,
9722 KeRosPrintAddress ( PVOID address
);
9727 KeRosDumpStackFrames ( PULONG Frame
, ULONG FrameCount
);
9731 #define KdPrint(_x_) DbgPrint _x_
9732 #define KdPrintEx(_x_) DbgPrintEx _x_
9733 #define KdBreakPoint() DbgBreakPoint()
9734 #define KdBreakPointWithStatus(s) DbgBreakPointWithStatus(s)
9738 #define KdPrint(_x_)
9739 #define KdPrintEx(_x_)
9740 #define KdBreakPoint()
9741 #define KdBreakPointWithStatus(s)
9745 extern NTOSAPI PBOOLEAN KdDebuggerNotPresent
;
9746 extern NTOSAPI PBOOLEAN KdDebuggerEnabled
;
9747 #define KD_DEBUGGER_ENABLED *KdDebuggerEnabled
9748 #define KD_DEBUGGER_NOT_PRESENT *KdDebuggerNotPresent
9754 #endif /* __WINDDK_H */