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
39 ** Definitions specific to this Device Driver Kit
41 #define DDKAPI __stdcall
42 #define FASTCALL __fastcall
43 #define DDKCDECLAPI __cdecl
46 /* HACKHACKHACK!!! We shouldn't include this header from ntoskrnl! */
49 #define NTKERNELAPI DECLSPEC_IMPORT
52 #if defined(_NTOSKRNL_)
53 #define DECLARE_INTERNAL_OBJECT(x) typedef struct _##x; typedef struct _##x *P##x;
54 #define DECLARE_INTERNAL_OBJECT2(x,y) typedef struct _##x; typedef struct _##x *P##y;
56 #define DECLARE_INTERNAL_OBJECT(x) struct _##x; typedef struct _##x *P##x;
57 #define DECLARE_INTERNAL_OBJECT2(x,y) struct _##x; typedef struct _##x *P##y;
61 #define NTHALAPI DECLSPEC_IMPORT
66 /* Pseudo modifiers for parameters */
73 #define VOLATILE volatile
75 #define RESTRICTED_POINTER
76 #define POINTER_ALIGNMENT
77 #define DECLSPEC_ADDRSAFE
79 #ifdef NONAMELESSUNION
80 # define _DDK_DUMMYUNION_MEMBER(name) DUMMYUNIONNAME.name
81 # define _DDK_DUMMYUNION_N_MEMBER(n, name) DUMMYUNIONNAME##n.name
83 # define _DDK_DUMMYUNION_MEMBER(name) name
84 # define _DDK_DUMMYUNION_N_MEMBER(n, name) name
87 #if !defined(_NTSYSTEM_)
88 #define NTSYSAPI DECLSPEC_IMPORT
89 #define NTSYSCALLAPI DECLSPEC_IMPORT
92 #if defined(_NTDLLBUILD_)
95 #define NTSYSCALLAPI DECLSPEC_ADDRSAFE
102 #define ALIGN_DOWN(s, t) \
103 ((ULONG)(s) & ~(sizeof(t) - 1))
105 #define ALIGN_UP(s, t) \
106 (ALIGN_DOWN(((ULONG)(s) + sizeof(t) - 1), t))
108 #define ALIGN_DOWN_POINTER(p, t) \
109 ((PVOID)((ULONG_PTR)(p) & ~((ULONG_PTR)sizeof(t) - 1)))
111 #define ALIGN_UP_POINTER(p, t) \
112 (ALIGN_DOWN_POINTER(((ULONG_PTR)(p) + sizeof(t) - 1), t))
115 ** Forward declarations
127 struct _DEVICE_OBJECT
;
128 struct _DRIVER_OBJECT
;
129 struct _IO_STATUS_BLOCK
;
130 struct _DEVICE_DESCRIPTION
;
131 struct _SCATTER_GATHER_LIST
;
132 struct _DRIVE_LAYOUT_INFORMATION
;
133 struct _DRIVE_LAYOUT_INFORMATION_EX
;
135 typedef PVOID PSECURITY_DESCRIPTOR
;
136 typedef ULONG SECURITY_INFORMATION
, *PSECURITY_INFORMATION
;
139 DECLARE_INTERNAL_OBJECT(ADAPTER_OBJECT
)
140 DECLARE_INTERNAL_OBJECT(DMA_ADAPTER
)
141 DECLARE_INTERNAL_OBJECT(IO_STATUS_BLOCK
)
144 /* FIXME: Unknown definitions */
145 struct _SET_PARTITION_INFORMATION_EX
;
146 typedef ULONG WAIT_TYPE
;
149 typedef HANDLE TRACEHANDLE
;
150 typedef PVOID PWMILIB_CONTEXT
;
151 typedef ULONG LOGICAL
;
155 ** WmiLib specific structure
159 IrpProcessed
, // Irp was processed and possibly completed
160 IrpNotCompleted
, // Irp was process and NOT completed
161 IrpNotWmi
, // Irp is not a WMI irp
162 IrpForward
// Irp is wmi irp, but targeted at another device object
163 } SYSCTL_IRP_DISPOSITION
, *PSYSCTL_IRP_DISPOSITION
;
166 ** Routines specific to this DDK
168 #define NtCurrentThread() ( (HANDLE)(LONG_PTR) -2 )
174 typedef LONG KPRIORITY
;
175 typedef UCHAR KIRQL
, *PKIRQL
;
176 typedef ULONG_PTR KSPIN_LOCK
, *PKSPIN_LOCK
;
177 typedef UCHAR KPROCESSOR_MODE
;
189 LONGLONG UseThisFieldToCopy
;
190 float DoNotUseThisField
;
194 /* Structures not exposed to drivers */
195 typedef struct _IO_TIMER
*PIO_TIMER
;
196 typedef struct _KPROCESS
*PKPROCESS
;
197 typedef struct _EPROCESS
*PEPROCESS
;
198 typedef struct _ETHREAD
*PETHREAD
;
199 typedef struct _KINTERRUPT
*PKINTERRUPT
;
200 typedef struct _OBJECT_TYPE
*POBJECT_TYPE
;
201 typedef struct _KTHREAD
*PKTHREAD
, *PRKTHREAD
;
202 typedef struct _COMPRESSED_DATA_INFO
*PCOMPRESSED_DATA_INFO
;
203 typedef struct _HAL_DISPATCH_TABLE
*PHAL_DISPATCH_TABLE
;
204 typedef struct _HAL_PRIVATE_DISPATCH_TABLE
*PHAL_PRIVATE_DISPATCH_TABLE
;
205 typedef struct _DEVICE_HANDLER_OBJECT
*PDEVICE_HANDLER_OBJECT
;
206 typedef struct _BUS_HANDLER
*PBUS_HANDLER
;
207 typedef struct _PEB
*PPEB
;
208 typedef struct _ADAPTER_OBJECT
*PADAPTER_OBJECT
;
211 #define NtCurrentProcess() ( (HANDLE)(LONG_PTR) -1 )
212 #define ZwCurrentProcess() NtCurrentProcess()
213 #define NtCurrentThread() ( (HANDLE)(LONG_PTR) -2 )
214 #define ZwCurrentThread() NtCurrentThread()
216 #define KIP0PCRADDRESS 0xff000000
218 #define KIP0PCRADDRESS 0xffdff000
221 #define KERNEL_STACK_SIZE 12288
222 #define KERNEL_LARGE_STACK_SIZE 61440
225 #define DPFLTR_ERROR_LEVEL 0
226 #define DPFLTR_WARNING_LEVEL 1
227 #define DPFLTR_TRACE_LEVEL 2
228 #define DPFLTR_INFO_LEVEL 3
229 #define DPFLTR_MASK 0x80000000
231 #define MAXIMUM_PROCESSORS 32
233 #define MAXIMUM_WAIT_OBJECTS 64
235 #define EX_RUNDOWN_ACTIVE 0x1
236 #define EX_RUNDOWN_COUNT_SHIFT 0x1
237 #define EX_RUNDOWN_COUNT_INC (1 << EX_RUNDOWN_COUNT_SHIFT)
239 #define METHOD_BUFFERED 0
240 #define METHOD_IN_DIRECT 1
241 #define METHOD_OUT_DIRECT 2
242 #define METHOD_NEITHER 3
244 #define LOW_PRIORITY 0
245 #define LOW_REALTIME_PRIORITY 16
246 #define HIGH_PRIORITY 31
247 #define MAXIMUM_PRIORITY 32
249 #define MAXIMUM_SUSPEND_COUNT MAXCHAR
251 #define FILE_SUPERSEDED 0x00000000
252 #define FILE_OPENED 0x00000001
253 #define FILE_CREATED 0x00000002
254 #define FILE_OVERWRITTEN 0x00000003
255 #define FILE_EXISTS 0x00000004
256 #define FILE_DOES_NOT_EXIST 0x00000005
258 #define FILE_USE_FILE_POINTER_POSITION 0xfffffffe
259 #define FILE_WRITE_TO_END_OF_FILE 0xffffffff
261 /* also in winnt.h */
262 #define FILE_LIST_DIRECTORY 0x00000001
263 #define FILE_READ_DATA 0x00000001
264 #define FILE_ADD_FILE 0x00000002
265 #define FILE_WRITE_DATA 0x00000002
266 #define FILE_ADD_SUBDIRECTORY 0x00000004
267 #define FILE_APPEND_DATA 0x00000004
268 #define FILE_CREATE_PIPE_INSTANCE 0x00000004
269 #define FILE_READ_EA 0x00000008
270 #define FILE_WRITE_EA 0x00000010
271 #define FILE_EXECUTE 0x00000020
272 #define FILE_TRAVERSE 0x00000020
273 #define FILE_DELETE_CHILD 0x00000040
274 #define FILE_READ_ATTRIBUTES 0x00000080
275 #define FILE_WRITE_ATTRIBUTES 0x00000100
277 #define FILE_SHARE_READ 0x00000001
278 #define FILE_SHARE_WRITE 0x00000002
279 #define FILE_SHARE_DELETE 0x00000004
280 #define FILE_SHARE_VALID_FLAGS 0x00000007
282 #define FILE_ATTRIBUTE_READONLY 0x00000001
283 #define FILE_ATTRIBUTE_HIDDEN 0x00000002
284 #define FILE_ATTRIBUTE_SYSTEM 0x00000004
285 #define FILE_ATTRIBUTE_DIRECTORY 0x00000010
286 #define FILE_ATTRIBUTE_ARCHIVE 0x00000020
287 #define FILE_ATTRIBUTE_DEVICE 0x00000040
288 #define FILE_ATTRIBUTE_NORMAL 0x00000080
289 #define FILE_ATTRIBUTE_TEMPORARY 0x00000100
290 #define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200
291 #define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400
292 #define FILE_ATTRIBUTE_COMPRESSED 0x00000800
293 #define FILE_ATTRIBUTE_OFFLINE 0x00001000
294 #define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000
295 #define FILE_ATTRIBUTE_ENCRYPTED 0x00004000
297 #define FILE_ATTRIBUTE_VALID_FLAGS 0x00007fb7
298 #define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x000031a7
300 #define FILE_COPY_STRUCTURED_STORAGE 0x00000041
301 #define FILE_STRUCTURED_STORAGE 0x00000441
303 #define FILE_VALID_OPTION_FLAGS 0x00ffffff
304 #define FILE_VALID_PIPE_OPTION_FLAGS 0x00000032
305 #define FILE_VALID_MAILSLOT_OPTION_FLAGS 0x00000032
306 #define FILE_VALID_SET_FLAGS 0x00000036
308 #define FILE_SUPERSEDE 0x00000000
309 #define FILE_OPEN 0x00000001
310 #define FILE_CREATE 0x00000002
311 #define FILE_OPEN_IF 0x00000003
312 #define FILE_OVERWRITE 0x00000004
313 #define FILE_OVERWRITE_IF 0x00000005
314 #define FILE_MAXIMUM_DISPOSITION 0x00000005
316 #define FILE_DIRECTORY_FILE 0x00000001
317 #define FILE_WRITE_THROUGH 0x00000002
318 #define FILE_SEQUENTIAL_ONLY 0x00000004
319 #define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008
320 #define FILE_SYNCHRONOUS_IO_ALERT 0x00000010
321 #define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020
322 #define FILE_NON_DIRECTORY_FILE 0x00000040
323 #define FILE_CREATE_TREE_CONNECTION 0x00000080
324 #define FILE_COMPLETE_IF_OPLOCKED 0x00000100
325 #define FILE_NO_EA_KNOWLEDGE 0x00000200
326 #define FILE_OPEN_FOR_RECOVERY 0x00000400
327 #define FILE_RANDOM_ACCESS 0x00000800
328 #define FILE_DELETE_ON_CLOSE 0x00001000
329 #define FILE_OPEN_BY_FILE_ID 0x00002000
330 #define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000
331 #define FILE_NO_COMPRESSION 0x00008000
332 #define FILE_RESERVE_OPFILTER 0x00100000
333 #define FILE_OPEN_REPARSE_POINT 0x00200000
334 #define FILE_OPEN_NO_RECALL 0x00400000
335 #define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000
337 #define FILE_ANY_ACCESS 0x00000000
338 #define FILE_SPECIAL_ACCESS FILE_ANY_ACCESS
339 #define FILE_READ_ACCESS 0x00000001
340 #define FILE_WRITE_ACCESS 0x00000002
342 #define FILE_ALL_ACCESS \
343 (STANDARD_RIGHTS_REQUIRED | \
347 #define FILE_GENERIC_EXECUTE \
348 (STANDARD_RIGHTS_EXECUTE | \
349 FILE_READ_ATTRIBUTES | \
353 #define FILE_GENERIC_READ \
354 (STANDARD_RIGHTS_READ | \
356 FILE_READ_ATTRIBUTES | \
360 #define FILE_GENERIC_WRITE \
361 (STANDARD_RIGHTS_WRITE | \
363 FILE_WRITE_ATTRIBUTES | \
369 #define OBJ_NAME_PATH_SEPARATOR ((WCHAR)L'\\')
371 #define OBJECT_TYPE_CREATE (0x0001)
372 #define OBJECT_TYPE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
374 #define DIRECTORY_QUERY (0x0001)
375 #define DIRECTORY_TRAVERSE (0x0002)
376 #define DIRECTORY_CREATE_OBJECT (0x0004)
377 #define DIRECTORY_CREATE_SUBDIRECTORY (0x0008)
378 #define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF)
380 #define EVENT_QUERY_STATE (0x0001)
381 #define EVENT_MODIFY_STATE (0x0002)
382 #define EVENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3)
384 #define SEMAPHORE_QUERY_STATE (0x0001)
385 #define SEMAPHORE_MODIFY_STATE (0x0002)
386 #define SEMAPHORE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3)
388 #define THREAD_ALERT (0x0004)
390 #define FM_LOCK_BIT (0x1)
391 #define FM_LOCK_BIT_V (0x0)
392 #define FM_LOCK_WAITER_WOKEN (0x2)
393 #define FM_LOCK_WAITER_INC (0x4)
395 /* Exported object types */
396 extern POBJECT_TYPE NTSYSAPI ExDesktopObjectType
;
397 extern POBJECT_TYPE NTSYSAPI ExEventObjectType
;
398 extern POBJECT_TYPE NTSYSAPI ExSemaphoreObjectType
;
399 extern POBJECT_TYPE NTSYSAPI ExWindowStationObjectType
;
400 extern ULONG NTSYSAPI IoDeviceHandlerObjectSize
;
401 extern POBJECT_TYPE NTSYSAPI IoDeviceHandlerObjectType
;
402 extern POBJECT_TYPE NTSYSAPI IoDeviceObjectType
;
403 extern POBJECT_TYPE NTSYSAPI IoDriverObjectType
;
404 extern POBJECT_TYPE NTSYSAPI IoFileObjectType
;
405 extern POBJECT_TYPE NTSYSAPI PsThreadType
;
406 extern POBJECT_TYPE NTSYSAPI LpcPortObjectType
;
407 extern POBJECT_TYPE NTSYSAPI SeTokenObjectType
;
408 extern POBJECT_TYPE NTSYSAPI PsProcessType
;
410 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
411 extern volatile CCHAR NTSYSAPI KeNumberProcessors
;
413 #if (NTDDI_VERSION >= NTDDI_WINXP)
414 extern CCHAR NTSYSAPI KeNumberProcessors
;
416 //extern PCCHAR KeNumberProcessors;
417 extern NTSYSAPI CCHAR KeNumberProcessors
; //FIXME: Note to Alex: I won't fix this atm, since I prefer to discuss this with you first.
421 #define PROCESSOR_FEATURE_MAX 64
422 #define MAX_WOW64_SHARED_ENTRIES 16
424 typedef enum _ALTERNATIVE_ARCHITECTURE_TYPE
429 } ALTERNATIVE_ARCHITECTURE_TYPE
;
431 typedef struct _KSYSTEM_TIME
436 } KSYSTEM_TIME
, *PKSYSTEM_TIME
;
438 extern volatile KSYSTEM_TIME KeTickCount
;
440 #define NX_SUPPORT_POLICY_ALWAYSOFF 0
441 #define NX_SUPPORT_POLICY_ALWAYSON 1
442 #define NX_SUPPORT_POLICY_OPTIN 2
443 #define NX_SUPPORT_POLICY_OPTOUT 3
445 typedef struct _KUSER_SHARED_DATA
447 ULONG TickCountLowDeprecated
;
448 ULONG TickCountMultiplier
;
449 volatile KSYSTEM_TIME InterruptTime
;
450 volatile KSYSTEM_TIME SystemTime
;
451 volatile KSYSTEM_TIME TimeZoneBias
;
452 USHORT ImageNumberLow
;
453 USHORT ImageNumberHigh
;
454 WCHAR NtSystemRoot
[260];
455 ULONG MaxStackTraceDepth
;
456 ULONG CryptoExponent
;
458 ULONG LargePageMinimum
;
460 NT_PRODUCT_TYPE NtProductType
;
461 BOOLEAN ProductTypeIsValid
;
462 ULONG NtMajorVersion
;
463 ULONG NtMinorVersion
;
464 BOOLEAN ProcessorFeatures
[PROCESSOR_FEATURE_MAX
];
467 volatile ULONG TimeSlip
;
468 ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture
;
469 LARGE_INTEGER SystemExpirationDate
;
471 BOOLEAN KdDebuggerEnabled
;
472 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
473 UCHAR NXSupportPolicy
;
475 volatile ULONG ActiveConsoleId
;
476 volatile ULONG DismountCount
;
477 ULONG ComPlusPackage
;
478 ULONG LastSystemRITEventTickCount
;
479 ULONG NumberOfPhysicalPages
;
480 BOOLEAN SafeBootMode
;
483 ULONGLONG TestRetInstruction
;
485 ULONG SystemCallReturn
;
486 ULONGLONG SystemCallPad
[3];
488 volatile KSYSTEM_TIME TickCount
;
489 volatile ULONG64 TickCountQuad
;
492 #if (NTDDI_VERSION >= NTDDI_WS03)
493 LONGLONG ConsoleSessionForegroundProcessId
;
494 ULONG Wow64SharedInformation
[MAX_WOW64_SHARED_ENTRIES
];
496 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
497 USHORT UserModeGlobalLogger
[8];
498 ULONG HeapTracingPid
[2];
499 ULONG CritSecTracingPid
[2];
502 ULONG SharedDataFlags
;
505 ULONG DbgErrorPortPresent
:1;
506 ULONG DbgElevationEnabled
:1;
507 ULONG DbgVirtEnabled
:1;
508 ULONG DbgInstallerDetectEnabled
:1;
512 ULONG ImageFileExecutionOptions
;
513 KAFFINITY ActiveProcessorAffinity
;
515 } KUSER_SHARED_DATA
, *PKUSER_SHARED_DATA
;
518 ** IRP function codes
521 #define IRP_MJ_CREATE 0x00
522 #define IRP_MJ_CREATE_NAMED_PIPE 0x01
523 #define IRP_MJ_CLOSE 0x02
524 #define IRP_MJ_READ 0x03
525 #define IRP_MJ_WRITE 0x04
526 #define IRP_MJ_QUERY_INFORMATION 0x05
527 #define IRP_MJ_SET_INFORMATION 0x06
528 #define IRP_MJ_QUERY_EA 0x07
529 #define IRP_MJ_SET_EA 0x08
530 #define IRP_MJ_FLUSH_BUFFERS 0x09
531 #define IRP_MJ_QUERY_VOLUME_INFORMATION 0x0a
532 #define IRP_MJ_SET_VOLUME_INFORMATION 0x0b
533 #define IRP_MJ_DIRECTORY_CONTROL 0x0c
534 #define IRP_MJ_FILE_SYSTEM_CONTROL 0x0d
535 #define IRP_MJ_DEVICE_CONTROL 0x0e
536 #define IRP_MJ_INTERNAL_DEVICE_CONTROL 0x0f
537 #define IRP_MJ_SCSI 0x0f
538 #define IRP_MJ_SHUTDOWN 0x10
539 #define IRP_MJ_LOCK_CONTROL 0x11
540 #define IRP_MJ_CLEANUP 0x12
541 #define IRP_MJ_CREATE_MAILSLOT 0x13
542 #define IRP_MJ_QUERY_SECURITY 0x14
543 #define IRP_MJ_SET_SECURITY 0x15
544 #define IRP_MJ_POWER 0x16
545 #define IRP_MJ_SYSTEM_CONTROL 0x17
546 #define IRP_MJ_DEVICE_CHANGE 0x18
547 #define IRP_MJ_QUERY_QUOTA 0x19
548 #define IRP_MJ_SET_QUOTA 0x1a
549 #define IRP_MJ_PNP 0x1b
550 #define IRP_MJ_PNP_POWER 0x1b
551 #define IRP_MJ_MAXIMUM_FUNCTION 0x1b
553 #define IRP_MN_QUERY_DIRECTORY 0x01
554 #define IRP_MN_NOTIFY_CHANGE_DIRECTORY 0x02
556 #define IRP_MN_USER_FS_REQUEST 0x00
557 #define IRP_MN_MOUNT_VOLUME 0x01
558 #define IRP_MN_VERIFY_VOLUME 0x02
559 #define IRP_MN_LOAD_FILE_SYSTEM 0x03
560 #define IRP_MN_TRACK_LINK 0x04
561 #define IRP_MN_KERNEL_CALL 0x04
563 #define IRP_MN_LOCK 0x01
564 #define IRP_MN_UNLOCK_SINGLE 0x02
565 #define IRP_MN_UNLOCK_ALL 0x03
566 #define IRP_MN_UNLOCK_ALL_BY_KEY 0x04
568 #define IRP_MN_NORMAL 0x00
569 #define IRP_MN_DPC 0x01
570 #define IRP_MN_MDL 0x02
571 #define IRP_MN_COMPLETE 0x04
572 #define IRP_MN_COMPRESSED 0x08
574 #define IRP_MN_MDL_DPC (IRP_MN_MDL | IRP_MN_DPC)
575 #define IRP_MN_COMPLETE_MDL (IRP_MN_COMPLETE | IRP_MN_MDL)
576 #define IRP_MN_COMPLETE_MDL_DPC (IRP_MN_COMPLETE_MDL | IRP_MN_DPC)
578 #define IRP_MN_SCSI_CLASS 0x01
580 #define IRP_MN_START_DEVICE 0x00
581 #define IRP_MN_QUERY_REMOVE_DEVICE 0x01
582 #define IRP_MN_REMOVE_DEVICE 0x02
583 #define IRP_MN_CANCEL_REMOVE_DEVICE 0x03
584 #define IRP_MN_STOP_DEVICE 0x04
585 #define IRP_MN_QUERY_STOP_DEVICE 0x05
586 #define IRP_MN_CANCEL_STOP_DEVICE 0x06
588 #define IRP_MN_QUERY_DEVICE_RELATIONS 0x07
589 #define IRP_MN_QUERY_INTERFACE 0x08
590 #define IRP_MN_QUERY_CAPABILITIES 0x09
591 #define IRP_MN_QUERY_RESOURCES 0x0A
592 #define IRP_MN_QUERY_RESOURCE_REQUIREMENTS 0x0B
593 #define IRP_MN_QUERY_DEVICE_TEXT 0x0C
594 #define IRP_MN_FILTER_RESOURCE_REQUIREMENTS 0x0D
596 #define IRP_MN_READ_CONFIG 0x0F
597 #define IRP_MN_WRITE_CONFIG 0x10
598 #define IRP_MN_EJECT 0x11
599 #define IRP_MN_SET_LOCK 0x12
600 #define IRP_MN_QUERY_ID 0x13
601 #define IRP_MN_QUERY_PNP_DEVICE_STATE 0x14
602 #define IRP_MN_QUERY_BUS_INFORMATION 0x15
603 #define IRP_MN_DEVICE_USAGE_NOTIFICATION 0x16
604 #define IRP_MN_SURPRISE_REMOVAL 0x17
605 #define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18
607 #define IRP_MN_WAIT_WAKE 0x00
608 #define IRP_MN_POWER_SEQUENCE 0x01
609 #define IRP_MN_SET_POWER 0x02
610 #define IRP_MN_QUERY_POWER 0x03
612 #define IRP_MN_QUERY_ALL_DATA 0x00
613 #define IRP_MN_QUERY_SINGLE_INSTANCE 0x01
614 #define IRP_MN_CHANGE_SINGLE_INSTANCE 0x02
615 #define IRP_MN_CHANGE_SINGLE_ITEM 0x03
616 #define IRP_MN_ENABLE_EVENTS 0x04
617 #define IRP_MN_DISABLE_EVENTS 0x05
618 #define IRP_MN_ENABLE_COLLECTION 0x06
619 #define IRP_MN_DISABLE_COLLECTION 0x07
620 #define IRP_MN_REGINFO 0x08
621 #define IRP_MN_EXECUTE_METHOD 0x09
623 #define IRP_MN_REGINFO_EX 0x0b
625 typedef enum _IO_ALLOCATION_ACTION
{
628 DeallocateObjectKeepRegisters
629 } IO_ALLOCATION_ACTION
, *PIO_ALLOCATION_ACTION
;
631 typedef IO_ALLOCATION_ACTION
632 (DDKAPI
*PDRIVER_CONTROL
)(
633 IN
struct _DEVICE_OBJECT
*DeviceObject
,
635 IN PVOID MapRegisterBase
,
638 typedef EXCEPTION_DISPOSITION
639 (DDKAPI
*PEXCEPTION_ROUTINE
)(
640 IN
struct _EXCEPTION_RECORD
*ExceptionRecord
,
641 IN PVOID EstablisherFrame
,
642 IN OUT
struct _CONTEXT
*ContextRecord
,
643 IN OUT PVOID DispatcherContext
);
646 (DDKAPI
*PDRIVER_LIST_CONTROL
)(
647 IN
struct _DEVICE_OBJECT
*DeviceObject
,
649 IN
struct _SCATTER_GATHER_LIST
*ScatterGather
,
653 (DDKAPI
*PDRIVER_ADD_DEVICE
)(
654 IN
struct _DRIVER_OBJECT
*DriverObject
,
655 IN
struct _DEVICE_OBJECT
*PhysicalDeviceObject
);
658 (DDKAPI
*PIO_COMPLETION_ROUTINE
)(
659 IN
struct _DEVICE_OBJECT
*DeviceObject
,
664 (DDKAPI
*PDRIVER_CANCEL
)(
665 IN
struct _DEVICE_OBJECT
*DeviceObject
,
666 IN
struct _IRP
*Irp
);
669 (DDKAPI
*PKDEFERRED_ROUTINE
)(
670 IN
struct _KDPC
*Dpc
,
671 IN PVOID DeferredContext
,
672 IN PVOID SystemArgument1
,
673 IN PVOID SystemArgument2
);
676 (DDKAPI
*PDRIVER_DISPATCH
)(
677 IN
struct _DEVICE_OBJECT
*DeviceObject
,
678 IN
struct _IRP
*Irp
);
681 (DDKAPI
*PIO_DPC_ROUTINE
)(
682 IN
struct _KDPC
*Dpc
,
683 IN
struct _DEVICE_OBJECT
*DeviceObject
,
688 (DDKAPI
*PMM_DLL_INITIALIZE
)(
689 IN PUNICODE_STRING RegistryPath
);
692 (DDKAPI
*PMM_DLL_UNLOAD
)(
696 (DDKAPI
*PDRIVER_ENTRY
)(
697 IN
struct _DRIVER_OBJECT
*DriverObject
,
698 IN PUNICODE_STRING RegistryPath
);
701 (DDKAPI
*PDRIVER_INITIALIZE
)(
702 IN
struct _DRIVER_OBJECT
*DriverObject
,
703 IN PUNICODE_STRING RegistryPath
);
706 (DDKAPI
*PKSERVICE_ROUTINE
)(
707 IN
struct _KINTERRUPT
*Interrupt
,
708 IN PVOID ServiceContext
);
711 (DDKAPI
*PIO_TIMER_ROUTINE
)(
712 IN
struct _DEVICE_OBJECT
*DeviceObject
,
716 (DDKAPI
*PDRIVER_REINITIALIZE
)(
717 IN
struct _DRIVER_OBJECT
*DriverObject
,
722 (DDKAPI
*PDRIVER_STARTIO
)(
723 IN
struct _DEVICE_OBJECT
*DeviceObject
,
724 IN
struct _IRP
*Irp
);
727 (DDKAPI
*PKSYNCHRONIZE_ROUTINE
)(
728 IN PVOID SynchronizeContext
);
731 (DDKAPI
*PDRIVER_UNLOAD
)(
732 IN
struct _DRIVER_OBJECT
*DriverObject
);
737 ** Plug and Play structures
741 (DDKAPI
*PINTERFACE_REFERENCE
)(
745 (DDKAPI
*PINTERFACE_DEREFERENCE
)(
749 (DDKAPI
*PTRANSLATE_BUS_ADDRESS
)(
751 IN PHYSICAL_ADDRESS BusAddress
,
753 IN OUT PULONG AddressSpace
,
754 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
756 typedef struct _DMA_ADAPTER
*
757 (DDKAPI
*PGET_DMA_ADAPTER
)(
759 IN
struct _DEVICE_DESCRIPTION
*DeviceDescriptor
,
760 OUT PULONG NumberOfMapRegisters
);
763 (DDKAPI
*PGET_SET_DEVICE_DATA
)(
770 /* PCI_DEVICE_PRESENCE_PARAMETERS.Flags */
771 #define PCI_USE_SUBSYSTEM_IDS 0x00000001
772 #define PCI_USE_REVISION 0x00000002
773 #define PCI_USE_VENDEV_IDS 0x00000004
774 #define PCI_USE_CLASS_SUBCLASS 0x00000008
775 #define PCI_USE_PROGIF 0x00000010
776 #define PCI_USE_LOCAL_BUS 0x00000020
777 #define PCI_USE_LOCAL_DEVICE 0x00000040
779 typedef struct _PCI_DEVICE_PRESENCE_PARAMETERS
{
790 } PCI_DEVICE_PRESENCE_PARAMETERS
, *PPCI_DEVICE_PRESENCE_PARAMETERS
;
793 (DDKAPI
*PPCI_IS_DEVICE_PRESENT
)(
797 IN USHORT SubVendorID
,
798 IN USHORT SubSystemID
,
802 (DDKAPI
*PPCI_IS_DEVICE_PRESENT_EX
)(
804 IN PPCI_DEVICE_PRESENCE_PARAMETERS Parameters
);
806 typedef union _POWER_STATE
{
807 SYSTEM_POWER_STATE SystemState
;
808 DEVICE_POWER_STATE DeviceState
;
809 } POWER_STATE
, *PPOWER_STATE
;
811 typedef enum _POWER_STATE_TYPE
{
814 } POWER_STATE_TYPE
, *PPOWER_STATE_TYPE
;
816 typedef struct _BUS_INTERFACE_STANDARD
{
820 PINTERFACE_REFERENCE InterfaceReference
;
821 PINTERFACE_DEREFERENCE InterfaceDereference
;
822 PTRANSLATE_BUS_ADDRESS TranslateBusAddress
;
823 PGET_DMA_ADAPTER GetDmaAdapter
;
824 PGET_SET_DEVICE_DATA SetBusData
;
825 PGET_SET_DEVICE_DATA GetBusData
;
826 } BUS_INTERFACE_STANDARD
, *PBUS_INTERFACE_STANDARD
;
828 typedef struct _PCI_DEVICE_PRESENT_INTERFACE
{
832 PINTERFACE_REFERENCE InterfaceReference
;
833 PINTERFACE_DEREFERENCE InterfaceDereference
;
834 PPCI_IS_DEVICE_PRESENT IsDevicePresent
;
835 PPCI_IS_DEVICE_PRESENT_EX IsDevicePresentEx
;
836 } PCI_DEVICE_PRESENT_INTERFACE
, *PPCI_DEVICE_PRESENT_INTERFACE
;
838 typedef struct _DEVICE_CAPABILITIES
{
843 ULONG LockSupported
: 1;
844 ULONG EjectSupported
: 1;
846 ULONG DockDevice
: 1;
848 ULONG SilentInstall
: 1;
849 ULONG RawDeviceOK
: 1;
850 ULONG SurpriseRemovalOK
: 1;
851 ULONG WakeFromD0
: 1;
852 ULONG WakeFromD1
: 1;
853 ULONG WakeFromD2
: 1;
854 ULONG WakeFromD3
: 1;
855 ULONG HardwareDisabled
: 1;
856 ULONG NonDynamic
: 1;
857 ULONG WarmEjectSupported
: 1;
858 ULONG NoDisplayInUI
: 1;
862 DEVICE_POWER_STATE DeviceState
[PowerSystemMaximum
];
863 SYSTEM_POWER_STATE SystemWake
;
864 DEVICE_POWER_STATE DeviceWake
;
868 } DEVICE_CAPABILITIES
, *PDEVICE_CAPABILITIES
;
870 typedef struct _DEVICE_INTERFACE_CHANGE_NOTIFICATION
{
874 GUID InterfaceClassGuid
;
875 PUNICODE_STRING SymbolicLinkName
;
876 } DEVICE_INTERFACE_CHANGE_NOTIFICATION
, *PDEVICE_INTERFACE_CHANGE_NOTIFICATION
;
878 typedef struct _HWPROFILE_CHANGE_NOTIFICATION
{
882 } HWPROFILE_CHANGE_NOTIFICATION
, *PHWPROFILE_CHANGE_NOTIFICATION
;
886 typedef struct _INTERFACE
{
890 PINTERFACE_REFERENCE InterfaceReference
;
891 PINTERFACE_DEREFERENCE InterfaceDereference
;
892 } INTERFACE
, *PINTERFACE
;
894 typedef struct _PLUGPLAY_NOTIFICATION_HEADER
{
898 } PLUGPLAY_NOTIFICATION_HEADER
, *PPLUGPLAY_NOTIFICATION_HEADER
;
900 typedef ULONG PNP_DEVICE_STATE
, *PPNP_DEVICE_STATE
;
902 /* PNP_DEVICE_STATE */
904 #define PNP_DEVICE_DISABLED 0x00000001
905 #define PNP_DEVICE_DONT_DISPLAY_IN_UI 0x00000002
906 #define PNP_DEVICE_FAILED 0x00000004
907 #define PNP_DEVICE_REMOVED 0x00000008
908 #define PNP_DEVICE_RESOURCE_REQUIREMENTS_CHANGED 0x00000010
909 #define PNP_DEVICE_NOT_DISABLEABLE 0x00000020
911 typedef struct _TARGET_DEVICE_CUSTOM_NOTIFICATION
{
915 struct _FILE_OBJECT
*FileObject
;
916 LONG NameBufferOffset
;
917 UCHAR CustomDataBuffer
[1];
918 } TARGET_DEVICE_CUSTOM_NOTIFICATION
, *PTARGET_DEVICE_CUSTOM_NOTIFICATION
;
920 typedef struct _TARGET_DEVICE_REMOVAL_NOTIFICATION
{
924 struct _FILE_OBJECT
*FileObject
;
925 } TARGET_DEVICE_REMOVAL_NOTIFICATION
, *PTARGET_DEVICE_REMOVAL_NOTIFICATION
;
927 typedef enum _BUS_QUERY_ID_TYPE
{
930 BusQueryCompatibleIDs
,
932 BusQueryDeviceSerialNumber
933 } BUS_QUERY_ID_TYPE
, *PBUS_QUERY_ID_TYPE
;
935 typedef enum _DEVICE_TEXT_TYPE
{
936 DeviceTextDescription
,
937 DeviceTextLocationInformation
938 } DEVICE_TEXT_TYPE
, *PDEVICE_TEXT_TYPE
;
940 typedef enum _DEVICE_USAGE_NOTIFICATION_TYPE
{
941 DeviceUsageTypeUndefined
,
942 DeviceUsageTypePaging
,
943 DeviceUsageTypeHibernation
,
944 DeviceUsageTypeDumpFile
945 } DEVICE_USAGE_NOTIFICATION_TYPE
;
947 typedef struct _POWER_SEQUENCE
{
951 } POWER_SEQUENCE
, *PPOWER_SEQUENCE
;
954 DevicePropertyDeviceDescription
,
955 DevicePropertyHardwareID
,
956 DevicePropertyCompatibleIDs
,
957 DevicePropertyBootConfiguration
,
958 DevicePropertyBootConfigurationTranslated
,
959 DevicePropertyClassName
,
960 DevicePropertyClassGuid
,
961 DevicePropertyDriverKeyName
,
962 DevicePropertyManufacturer
,
963 DevicePropertyFriendlyName
,
964 DevicePropertyLocationInformation
,
965 DevicePropertyPhysicalDeviceObjectName
,
966 DevicePropertyBusTypeGuid
,
967 DevicePropertyLegacyBusType
,
968 DevicePropertyBusNumber
,
969 DevicePropertyEnumeratorName
,
970 DevicePropertyAddress
,
971 DevicePropertyUINumber
,
972 DevicePropertyInstallState
,
973 DevicePropertyRemovalPolicy
974 } DEVICE_REGISTRY_PROPERTY
;
976 typedef enum _IO_NOTIFICATION_EVENT_CATEGORY
{
977 EventCategoryReserved
,
978 EventCategoryHardwareProfileChange
,
979 EventCategoryDeviceInterfaceChange
,
980 EventCategoryTargetDeviceChange
981 } IO_NOTIFICATION_EVENT_CATEGORY
;
983 #define PNPNOTIFY_DEVICE_INTERFACE_INCLUDE_EXISTING_INTERFACES 0x00000001
986 (DDKAPI
*PDRIVER_NOTIFICATION_CALLBACK_ROUTINE
)(
987 IN PVOID NotificationStructure
,
991 (DDKAPI
*PDEVICE_CHANGE_COMPLETE_CALLBACK
)(
999 #define SYMBOLIC_LINK_QUERY 0x0001
1000 #define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
1002 /* also in winnt,h */
1003 #define DUPLICATE_CLOSE_SOURCE 0x00000001
1004 #define DUPLICATE_SAME_ACCESS 0x00000002
1005 #define DUPLICATE_SAME_ATTRIBUTES 0x00000004
1008 typedef struct _OBJECT_NAME_INFORMATION
{
1009 UNICODE_STRING Name
;
1010 } OBJECT_NAME_INFORMATION
, *POBJECT_NAME_INFORMATION
;
1013 (DDKAPI
*PIO_APC_ROUTINE
)(
1014 IN PVOID ApcContext
,
1015 IN PIO_STATUS_BLOCK IoStatusBlock
,
1018 typedef struct _IO_STATUS_BLOCK
{
1019 _ANONYMOUS_UNION
union {
1023 ULONG_PTR Information
;
1027 (DDKAPI
*PKNORMAL_ROUTINE
)(
1028 IN PVOID NormalContext
,
1029 IN PVOID SystemArgument1
,
1030 IN PVOID SystemArgument2
);
1033 (DDKAPI
*PKKERNEL_ROUTINE
)(
1034 IN
struct _KAPC
*Apc
,
1035 IN OUT PKNORMAL_ROUTINE
*NormalRoutine
,
1036 IN OUT PVOID
*NormalContext
,
1037 IN OUT PVOID
*SystemArgument1
,
1038 IN OUT PVOID
*SystemArgument2
);
1041 (DDKAPI
*PKRUNDOWN_ROUTINE
)(
1042 IN
struct _KAPC
*Apc
);
1045 (DDKAPI
*PKTRANSFER_ROUTINE
)(
1048 typedef struct _KAPC
1055 struct _KTHREAD
*Thread
;
1056 LIST_ENTRY ApcListEntry
;
1057 PKKERNEL_ROUTINE KernelRoutine
;
1058 PKRUNDOWN_ROUTINE RundownRoutine
;
1059 PKNORMAL_ROUTINE NormalRoutine
;
1060 PVOID NormalContext
;
1061 PVOID SystemArgument1
;
1062 PVOID SystemArgument2
;
1063 CCHAR ApcStateIndex
;
1064 KPROCESSOR_MODE ApcMode
;
1066 } KAPC
, *PKAPC
, *RESTRICTED_POINTER PRKAPC
;
1068 typedef struct _KDEVICE_QUEUE
{
1071 LIST_ENTRY DeviceListHead
;
1074 } KDEVICE_QUEUE
, *PKDEVICE_QUEUE
, *RESTRICTED_POINTER PRKDEVICE_QUEUE
;
1076 typedef struct _KDEVICE_QUEUE_ENTRY
{
1077 LIST_ENTRY DeviceListEntry
;
1080 } KDEVICE_QUEUE_ENTRY
, *PKDEVICE_QUEUE_ENTRY
,
1081 *RESTRICTED_POINTER PRKDEVICE_QUEUE_ENTRY
;
1083 #define LOCK_QUEUE_WAIT 1
1084 #define LOCK_QUEUE_OWNER 2
1085 #define LOCK_QUEUE_TIMER_LOCK_SHIFT 4
1086 #define LOCK_QUEUE_TIMER_TABLE_LOCKS (1 << (8 - LOCK_QUEUE_TIMER_LOCK_SHIFT))
1088 typedef enum _KSPIN_LOCK_QUEUE_NUMBER
1090 LockQueueDispatcherLock
,
1091 LockQueueExpansionLock
,
1093 LockQueueSystemSpaceLock
,
1095 LockQueueMasterLock
,
1096 LockQueueNonPagedPoolLock
,
1097 LockQueueIoCancelLock
,
1098 LockQueueWorkQueueLock
,
1100 LockQueueIoDatabaseLock
,
1101 LockQueueIoCompletionLock
,
1102 LockQueueNtfsStructLock
,
1103 LockQueueAfdWorkQueueLock
,
1105 LockQueueMmNonPagedPoolLock
,
1106 LockQueueUnusedSpare16
,
1107 LockQueueTimerTableLock
,
1108 LockQueueMaximumLock
= LockQueueTimerTableLock
+ LOCK_QUEUE_TIMER_TABLE_LOCKS
1109 } KSPIN_LOCK_QUEUE_NUMBER
, *PKSPIN_LOCK_QUEUE_NUMBER
;
1111 typedef struct _KSPIN_LOCK_QUEUE
{
1112 struct _KSPIN_LOCK_QUEUE
*VOLATILE Next
;
1113 PKSPIN_LOCK VOLATILE Lock
;
1114 } KSPIN_LOCK_QUEUE
, *PKSPIN_LOCK_QUEUE
;
1116 typedef struct _KLOCK_QUEUE_HANDLE
{
1117 KSPIN_LOCK_QUEUE LockQueue
;
1119 } KLOCK_QUEUE_HANDLE
, *PKLOCK_QUEUE_HANDLE
;
1121 #define DPC_NORMAL 0
1122 #define DPC_THREADED 1
1124 #define ASSERT_APC(Object) \
1125 ASSERT((Object)->Type == ApcObject)
1127 #define ASSERT_DPC(Object) \
1128 ASSERT(((Object)->Type == 0) || \
1129 ((Object)->Type == DpcObject) || \
1130 ((Object)->Type == ThreadedDpcObject))
1132 #define ASSERT_DEVICE_QUEUE(Object) \
1133 ASSERT((Object)->Type == DeviceQueueObject)
1135 typedef struct _KDPC
1140 LIST_ENTRY DpcListEntry
;
1141 PKDEFERRED_ROUTINE DeferredRoutine
;
1142 PVOID DeferredContext
;
1143 PVOID SystemArgument1
;
1144 PVOID SystemArgument2
;
1145 volatile PVOID DpcData
;
1146 } KDPC
, *PKDPC
, *RESTRICTED_POINTER PRKDPC
;
1148 typedef PVOID PKIPI_CONTEXT
;
1153 IN PKIPI_CONTEXT PacketContext
,
1154 IN PVOID Parameter1
,
1155 IN PVOID Parameter2
,
1159 typedef struct _WAIT_CONTEXT_BLOCK
{
1160 KDEVICE_QUEUE_ENTRY WaitQueueEntry
;
1161 PDRIVER_CONTROL DeviceRoutine
;
1162 PVOID DeviceContext
;
1163 ULONG NumberOfMapRegisters
;
1166 PKDPC BufferChainingDpc
;
1167 } WAIT_CONTEXT_BLOCK
, *PWAIT_CONTEXT_BLOCK
;
1169 typedef struct _DISPATCHER_HEADER
1189 BOOLEAN DebugActive
;
1195 LIST_ENTRY WaitListHead
;
1196 } DISPATCHER_HEADER
, *PDISPATCHER_HEADER
;
1198 typedef struct _KEVENT
{
1199 DISPATCHER_HEADER Header
;
1200 } KEVENT
, *PKEVENT
, *RESTRICTED_POINTER PRKEVENT
;
1202 typedef struct _KSEMAPHORE
{
1203 DISPATCHER_HEADER Header
;
1205 } KSEMAPHORE
, *PKSEMAPHORE
, *RESTRICTED_POINTER PRKSEMAPHORE
;
1207 typedef struct _FAST_MUTEX
1214 } FAST_MUTEX
, *PFAST_MUTEX
;
1216 typedef struct _EX_RUNDOWN_REF
1220 __volatile ULONG_PTR Count
;
1221 __volatile PVOID Ptr
;
1223 } EX_RUNDOWN_REF
, *PEX_RUNDOWN_REF
;
1225 #define ASSERT_GATE(object) \
1226 ASSERT((((object)->Header.Type & KOBJECT_TYPE_MASK) == GateObject) || \
1227 (((object)->Header.Type & KOBJECT_TYPE_MASK) == EventSynchronizationObject))
1229 typedef struct _KGATE
1231 DISPATCHER_HEADER Header
;
1232 } KGATE
, *PKGATE
, *RESTRICTED_POINTER PRKGATE
;
1234 #define GM_LOCK_BIT 0x1
1235 #define GM_LOCK_BIT_V 0x0
1236 #define GM_LOCK_WAITER_WOKEN 0x2
1237 #define GM_LOCK_WAITER_INC 0x4
1239 typedef struct _KGUARDED_MUTEX
1241 volatile LONG Count
;
1249 SHORT KernelApcDisable
;
1250 SHORT SpecialApcDisable
;
1252 ULONG CombinedApcDisable
;
1254 } KGUARDED_MUTEX
, *PKGUARDED_MUTEX
;
1256 #define TIMER_TABLE_SIZE 512
1257 #define TIMER_TABLE_SHIFT 9
1259 typedef struct _KTIMER
{
1260 DISPATCHER_HEADER Header
;
1261 ULARGE_INTEGER DueTime
;
1262 LIST_ENTRY TimerListEntry
;
1265 } KTIMER
, *PKTIMER
, *RESTRICTED_POINTER PRKTIMER
;
1267 #define ASSERT_TIMER(E) \
1268 ASSERT(((E)->Header.Type == TimerNotificationObject) || \
1269 ((E)->Header.Type == TimerSynchronizationObject))
1271 #define ASSERT_MUTANT(E) \
1272 ASSERT((E)->Header.Type == MutantObject)
1274 #define ASSERT_SEMAPHORE(E) \
1275 ASSERT((E)->Header.Type == SemaphoreObject)
1277 #define ASSERT_EVENT(E) \
1278 ASSERT(((E)->Header.Type == NotificationEvent) || \
1279 ((E)->Header.Type == SynchronizationEvent))
1281 typedef struct _KMUTANT
{
1282 DISPATCHER_HEADER Header
;
1283 LIST_ENTRY MutantListEntry
;
1284 struct _KTHREAD
*RESTRICTED_POINTER OwnerThread
;
1287 } KMUTANT
, *PKMUTANT
, *RESTRICTED_POINTER PRKMUTANT
, KMUTEX
, *PKMUTEX
, *RESTRICTED_POINTER PRKMUTEX
;
1289 typedef enum _TIMER_TYPE
{
1291 SynchronizationTimer
1294 #define EVENT_INCREMENT 1
1295 #define IO_NO_INCREMENT 0
1296 #define IO_CD_ROM_INCREMENT 1
1297 #define IO_DISK_INCREMENT 1
1298 #define IO_KEYBOARD_INCREMENT 6
1299 #define IO_MAILSLOT_INCREMENT 2
1300 #define IO_MOUSE_INCREMENT 6
1301 #define IO_NAMED_PIPE_INCREMENT 2
1302 #define IO_NETWORK_INCREMENT 2
1303 #define IO_PARALLEL_INCREMENT 1
1304 #define IO_SERIAL_INCREMENT 2
1305 #define IO_SOUND_INCREMENT 8
1306 #define IO_VIDEO_INCREMENT 1
1307 #define SEMAPHORE_INCREMENT 1
1309 typedef struct _IRP
{
1312 struct _MDL
*MdlAddress
;
1315 struct _IRP
*MasterIrp
;
1316 __volatile LONG IrpCount
;
1319 LIST_ENTRY ThreadListEntry
;
1320 IO_STATUS_BLOCK IoStatus
;
1321 KPROCESSOR_MODE RequestorMode
;
1322 BOOLEAN PendingReturned
;
1324 CHAR CurrentLocation
;
1327 CCHAR ApcEnvironment
;
1328 UCHAR AllocationFlags
;
1329 PIO_STATUS_BLOCK UserIosb
;
1333 PIO_APC_ROUTINE UserApcRoutine
;
1334 PVOID UserApcContext
;
1335 } AsynchronousParameters
;
1336 LARGE_INTEGER AllocationSize
;
1338 __volatile PDRIVER_CANCEL CancelRoutine
;
1342 _ANONYMOUS_UNION
union {
1343 KDEVICE_QUEUE_ENTRY DeviceQueueEntry
;
1344 _ANONYMOUS_STRUCT
struct {
1345 PVOID DriverContext
[4];
1349 PCHAR AuxiliaryBuffer
;
1350 _ANONYMOUS_STRUCT
struct {
1351 LIST_ENTRY ListEntry
;
1352 _ANONYMOUS_UNION
union {
1353 struct _IO_STACK_LOCATION
*CurrentStackLocation
;
1357 struct _FILE_OBJECT
*OriginalFileObject
;
1360 PVOID CompletionKey
;
1363 typedef struct _IRP
*PIRP
;
1367 #define SL_FORCE_ACCESS_CHECK 0x01
1368 #define SL_OPEN_PAGING_FILE 0x02
1369 #define SL_OPEN_TARGET_DIRECTORY 0x04
1370 #define SL_CASE_SENSITIVE 0x80
1372 #define SL_KEY_SPECIFIED 0x01
1373 #define SL_OVERRIDE_VERIFY_VOLUME 0x02
1374 #define SL_WRITE_THROUGH 0x04
1375 #define SL_FT_SEQUENTIAL_WRITE 0x08
1377 #define SL_FAIL_IMMEDIATELY 0x01
1378 #define SL_EXCLUSIVE_LOCK 0x02
1380 #define SL_RESTART_SCAN 0x01
1381 #define SL_RETURN_SINGLE_ENTRY 0x02
1382 #define SL_INDEX_SPECIFIED 0x04
1384 #define SL_WATCH_TREE 0x01
1386 #define SL_ALLOW_RAW_MOUNT 0x01
1388 #define CTL_CODE(DeviceType, Function, Method, Access)( \
1389 ((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method))
1391 #define DEVICE_TYPE_FROM_CTL_CODE(ctl) (((ULONG) (ctl & 0xffff0000)) >> 16)
1396 IRP_PAGING_IO
= 0x2,
1397 IRP_MOUNT_COMPLETION
= 0x2,
1398 IRP_SYNCHRONOUS_API
= 0x4,
1399 IRP_ASSOCIATED_IRP
= 0x8,
1400 IRP_BUFFERED_IO
= 0x10,
1401 IRP_DEALLOCATE_BUFFER
= 0x20,
1402 IRP_INPUT_OPERATION
= 0x40,
1403 IRP_SYNCHRONOUS_PAGING_IO
= 0x40,
1404 IRP_CREATE_OPERATION
= 0x80,
1405 IRP_READ_OPERATION
= 0x100,
1406 IRP_WRITE_OPERATION
= 0x200,
1407 IRP_CLOSE_OPERATION
= 0x400,
1408 IRP_DEFER_IO_COMPLETION
= 0x800,
1409 IRP_OB_QUERY_NAME
= 0x1000,
1410 IRP_HOLD_DEVICE_QUEUE
= 0x2000,
1411 IRP_RETRY_IO_COMPLETION
= 0x4000
1414 #define IRP_QUOTA_CHARGED 0x01
1415 #define IRP_ALLOCATED_MUST_SUCCEED 0x02
1416 #define IRP_ALLOCATED_FIXED_SIZE 0x04
1417 #define IRP_LOOKASIDE_ALLOCATION 0x08
1419 typedef struct _BOOTDISK_INFORMATION
{
1420 LONGLONG BootPartitionOffset
;
1421 LONGLONG SystemPartitionOffset
;
1422 ULONG BootDeviceSignature
;
1423 ULONG SystemDeviceSignature
;
1424 } BOOTDISK_INFORMATION
, *PBOOTDISK_INFORMATION
;
1426 typedef struct _BOOTDISK_INFORMATION_EX
{
1427 LONGLONG BootPartitionOffset
;
1428 LONGLONG SystemPartitionOffset
;
1429 ULONG BootDeviceSignature
;
1430 ULONG SystemDeviceSignature
;
1431 GUID BootDeviceGuid
;
1432 GUID SystemDeviceGuid
;
1433 BOOLEAN BootDeviceIsGpt
;
1434 BOOLEAN SystemDeviceIsGpt
;
1435 } BOOTDISK_INFORMATION_EX
, *PBOOTDISK_INFORMATION_EX
;
1437 typedef struct _EISA_MEMORY_TYPE
{
1438 UCHAR ReadWrite
: 1;
1440 UCHAR Reserved0
: 1;
1443 UCHAR Reserved1
: 1;
1444 UCHAR MoreEntries
: 1;
1445 } EISA_MEMORY_TYPE
, *PEISA_MEMORY_TYPE
;
1447 #include <pshpack1.h>
1448 typedef struct _EISA_MEMORY_CONFIGURATION
{
1449 EISA_MEMORY_TYPE ConfigurationByte
;
1451 USHORT AddressLowWord
;
1452 UCHAR AddressHighByte
;
1454 } EISA_MEMORY_CONFIGURATION
, *PEISA_MEMORY_CONFIGURATION
;
1455 #include <poppack.h>
1457 typedef struct _EISA_IRQ_DESCRIPTOR
{
1458 UCHAR Interrupt
: 4;
1460 UCHAR LevelTriggered
: 1;
1462 UCHAR MoreEntries
: 1;
1463 } EISA_IRQ_DESCRIPTOR
, *PEISA_IRQ_DESCRIPTOR
;
1465 typedef struct _EISA_IRQ_CONFIGURATION
{
1466 EISA_IRQ_DESCRIPTOR ConfigurationByte
;
1468 } EISA_IRQ_CONFIGURATION
, *PEISA_IRQ_CONFIGURATION
;
1470 typedef struct _DMA_CONFIGURATION_BYTE0
{
1474 UCHAR MoreEntries
: 1;
1475 } DMA_CONFIGURATION_BYTE0
;
1477 typedef struct _DMA_CONFIGURATION_BYTE1
{
1478 UCHAR Reserved0
: 2;
1479 UCHAR TransferSize
: 2;
1481 UCHAR Reserved1
: 2;
1482 } DMA_CONFIGURATION_BYTE1
;
1484 typedef struct _EISA_DMA_CONFIGURATION
{
1485 DMA_CONFIGURATION_BYTE0 ConfigurationByte0
;
1486 DMA_CONFIGURATION_BYTE1 ConfigurationByte1
;
1487 } EISA_DMA_CONFIGURATION
, *PEISA_DMA_CONFIGURATION
;
1489 #include <pshpack1.h>
1490 typedef struct _EISA_PORT_DESCRIPTOR
{
1491 UCHAR NumberPorts
: 5;
1494 UCHAR MoreEntries
: 1;
1495 } EISA_PORT_DESCRIPTOR
, *PEISA_PORT_DESCRIPTOR
;
1497 typedef struct _EISA_PORT_CONFIGURATION
{
1498 EISA_PORT_DESCRIPTOR Configuration
;
1500 } EISA_PORT_CONFIGURATION
, *PEISA_PORT_CONFIGURATION
;
1501 #include <poppack.h>
1503 typedef struct _CM_EISA_FUNCTION_INFORMATION
{
1507 UCHAR MinorRevision
;
1508 UCHAR MajorRevision
;
1509 UCHAR Selections
[26];
1510 UCHAR FunctionFlags
;
1511 UCHAR TypeString
[80];
1512 EISA_MEMORY_CONFIGURATION EisaMemory
[9];
1513 EISA_IRQ_CONFIGURATION EisaIrq
[7];
1514 EISA_DMA_CONFIGURATION EisaDma
[4];
1515 EISA_PORT_CONFIGURATION EisaPort
[20];
1516 UCHAR InitializationData
[60];
1517 } CM_EISA_FUNCTION_INFORMATION
, *PCM_EISA_FUNCTION_INFORMATION
;
1519 /* CM_EISA_FUNCTION_INFORMATION.FunctionFlags */
1521 #define EISA_FUNCTION_ENABLED 0x80
1522 #define EISA_FREE_FORM_DATA 0x40
1523 #define EISA_HAS_PORT_INIT_ENTRY 0x20
1524 #define EISA_HAS_PORT_RANGE 0x10
1525 #define EISA_HAS_DMA_ENTRY 0x08
1526 #define EISA_HAS_IRQ_ENTRY 0x04
1527 #define EISA_HAS_MEMORY_ENTRY 0x02
1528 #define EISA_HAS_TYPE_ENTRY 0x01
1529 #define EISA_HAS_INFORMATION \
1530 (EISA_HAS_PORT_RANGE + EISA_HAS_DMA_ENTRY + EISA_HAS_IRQ_ENTRY \
1531 + EISA_HAS_MEMORY_ENTRY + EISA_HAS_TYPE_ENTRY)
1533 typedef struct _CM_EISA_SLOT_INFORMATION
{
1536 UCHAR MajorRevision
;
1537 UCHAR MinorRevision
;
1539 UCHAR NumberFunctions
;
1540 UCHAR FunctionInformation
;
1542 } CM_EISA_SLOT_INFORMATION
, *PCM_EISA_SLOT_INFORMATION
;
1544 /* CM_EISA_SLOT_INFORMATION.ReturnCode */
1546 #define EISA_INVALID_SLOT 0x80
1547 #define EISA_INVALID_FUNCTION 0x81
1548 #define EISA_INVALID_CONFIGURATION 0x82
1549 #define EISA_EMPTY_SLOT 0x83
1550 #define EISA_INVALID_BIOS_CALL 0x86
1552 typedef struct _CM_FLOPPY_DEVICE_DATA
{
1558 UCHAR StepRateHeadUnloadTime
;
1561 UCHAR SectorLengthCode
;
1562 UCHAR SectorPerTrack
;
1563 UCHAR ReadWriteGapLength
;
1564 UCHAR DataTransferLength
;
1565 UCHAR FormatGapLength
;
1566 UCHAR FormatFillCharacter
;
1567 UCHAR HeadSettleTime
;
1568 UCHAR MotorSettleTime
;
1569 UCHAR MaximumTrackValue
;
1570 UCHAR DataTransferRate
;
1571 } CM_FLOPPY_DEVICE_DATA
, *PCM_FLOPPY_DEVICE_DATA
;
1573 typedef enum _INTERFACE_TYPE
{
1574 InterfaceTypeUndefined
= -1,
1591 MaximumInterfaceType
1592 } INTERFACE_TYPE
, *PINTERFACE_TYPE
;
1594 typedef struct _PNP_BUS_INFORMATION
{
1596 INTERFACE_TYPE LegacyBusType
;
1598 } PNP_BUS_INFORMATION
, *PPNP_BUS_INFORMATION
;
1600 #include <pshpack1.h>
1601 typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR
{
1603 UCHAR ShareDisposition
;
1607 PHYSICAL_ADDRESS Start
;
1611 PHYSICAL_ADDRESS Start
;
1620 PHYSICAL_ADDRESS Start
;
1640 } DeviceSpecificData
;
1642 } CM_PARTIAL_RESOURCE_DESCRIPTOR
, *PCM_PARTIAL_RESOURCE_DESCRIPTOR
;
1644 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Type */
1646 #define CmResourceTypeNull 0
1647 #define CmResourceTypePort 1
1648 #define CmResourceTypeInterrupt 2
1649 #define CmResourceTypeMemory 3
1650 #define CmResourceTypeDma 4
1651 #define CmResourceTypeDeviceSpecific 5
1652 #define CmResourceTypeBusNumber 6
1653 #define CmResourceTypeMaximum 7
1654 #define CmResourceTypeNonArbitrated 128
1655 #define CmResourceTypeConfigData 128
1656 #define CmResourceTypeDevicePrivate 129
1657 #define CmResourceTypePcCardConfig 130
1658 #define CmResourceTypeMfCardConfig 131
1660 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.ShareDisposition */
1662 typedef enum _CM_SHARE_DISPOSITION
{
1663 CmResourceShareUndetermined
,
1664 CmResourceShareDeviceExclusive
,
1665 CmResourceShareDriverExclusive
,
1666 CmResourceShareShared
1667 } CM_SHARE_DISPOSITION
;
1669 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypePort */
1671 #define CM_RESOURCE_PORT_MEMORY 0x0000
1672 #define CM_RESOURCE_PORT_IO 0x0001
1673 #define CM_RESOURCE_PORT_10_BIT_DECODE 0x0004
1674 #define CM_RESOURCE_PORT_12_BIT_DECODE 0x0008
1675 #define CM_RESOURCE_PORT_16_BIT_DECODE 0x0010
1676 #define CM_RESOURCE_PORT_POSITIVE_DECODE 0x0020
1677 #define CM_RESOURCE_PORT_PASSIVE_DECODE 0x0040
1678 #define CM_RESOURCE_PORT_WINDOW_DECODE 0x0080
1680 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeInterrupt */
1682 #define CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE 0x0000
1683 #define CM_RESOURCE_INTERRUPT_LATCHED 0x0001
1685 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeMemory */
1687 #define CM_RESOURCE_MEMORY_READ_WRITE 0x0000
1688 #define CM_RESOURCE_MEMORY_READ_ONLY 0x0001
1689 #define CM_RESOURCE_MEMORY_WRITE_ONLY 0x0002
1690 #define CM_RESOURCE_MEMORY_PREFETCHABLE 0x0004
1691 #define CM_RESOURCE_MEMORY_COMBINEDWRITE 0x0008
1692 #define CM_RESOURCE_MEMORY_24 0x0010
1693 #define CM_RESOURCE_MEMORY_CACHEABLE 0x0020
1695 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeDma */
1697 #define CM_RESOURCE_DMA_8 0x0000
1698 #define CM_RESOURCE_DMA_16 0x0001
1699 #define CM_RESOURCE_DMA_32 0x0002
1700 #define CM_RESOURCE_DMA_8_AND_16 0x0004
1701 #define CM_RESOURCE_DMA_BUS_MASTER 0x0008
1702 #define CM_RESOURCE_DMA_TYPE_A 0x0010
1703 #define CM_RESOURCE_DMA_TYPE_B 0x0020
1704 #define CM_RESOURCE_DMA_TYPE_F 0x0040
1706 typedef struct _CM_PARTIAL_RESOURCE_LIST
{
1710 CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors
[1];
1711 } CM_PARTIAL_RESOURCE_LIST
, *PCM_PARTIAL_RESOURCE_LIST
;
1713 typedef struct _CM_FULL_RESOURCE_DESCRIPTOR
{
1714 INTERFACE_TYPE InterfaceType
;
1716 CM_PARTIAL_RESOURCE_LIST PartialResourceList
;
1717 } CM_FULL_RESOURCE_DESCRIPTOR
, *PCM_FULL_RESOURCE_DESCRIPTOR
;
1719 typedef struct _CM_RESOURCE_LIST
{
1721 CM_FULL_RESOURCE_DESCRIPTOR List
[1];
1722 } CM_RESOURCE_LIST
, *PCM_RESOURCE_LIST
;
1724 typedef struct _CM_INT13_DRIVE_PARAMETER
{
1727 USHORT SectorsPerTrack
;
1729 USHORT NumberDrives
;
1730 } CM_INT13_DRIVE_PARAMETER
, *PCM_INT13_DRIVE_PARAMETER
;
1731 #include <poppack.h>
1733 typedef struct _CM_KEYBOARD_DEVICE_DATA
{
1738 USHORT KeyboardFlags
;
1739 } CM_KEYBOARD_DEVICE_DATA
, *PCM_KEYBOARD_DEVICE_DATA
;
1741 #define KEYBOARD_INSERT_ON 0x08
1742 #define KEYBOARD_CAPS_LOCK_ON 0x04
1743 #define KEYBOARD_NUM_LOCK_ON 0x02
1744 #define KEYBOARD_SCROLL_LOCK_ON 0x01
1745 #define KEYBOARD_ALT_KEY_DOWN 0x80
1746 #define KEYBOARD_CTRL_KEY_DOWN 0x40
1747 #define KEYBOARD_LEFT_SHIFT_DOWN 0x20
1748 #define KEYBOARD_RIGHT_SHIFT_DOWN 0x10
1750 typedef struct _CM_MCA_POS_DATA
{
1756 } CM_MCA_POS_DATA
, *PCM_MCA_POS_DATA
;
1758 typedef struct CM_Power_Data_s
{
1760 DEVICE_POWER_STATE PD_MostRecentPowerState
;
1761 ULONG PD_Capabilities
;
1765 DEVICE_POWER_STATE PD_PowerStateMapping
[PowerSystemMaximum
];
1766 } CM_POWER_DATA
, *PCM_POWER_DATA
;
1768 #define PDCAP_D0_SUPPORTED 0x00000001
1769 #define PDCAP_D1_SUPPORTED 0x00000002
1770 #define PDCAP_D2_SUPPORTED 0x00000004
1771 #define PDCAP_D3_SUPPORTED 0x00000008
1772 #define PDCAP_WAKE_FROM_D0_SUPPORTED 0x00000010
1773 #define PDCAP_WAKE_FROM_D1_SUPPORTED 0x00000020
1774 #define PDCAP_WAKE_FROM_D2_SUPPORTED 0x00000040
1775 #define PDCAP_WAKE_FROM_D3_SUPPORTED 0x00000080
1776 #define PDCAP_WARM_EJECT_SUPPORTED 0x00000100
1778 typedef struct _CM_SCSI_DEVICE_DATA
{
1781 UCHAR HostIdentifier
;
1782 } CM_SCSI_DEVICE_DATA
, *PCM_SCSI_DEVICE_DATA
;
1784 typedef struct _CM_SERIAL_DEVICE_DATA
{
1788 } CM_SERIAL_DEVICE_DATA
, *PCM_SERIAL_DEVICE_DATA
;
1790 typedef struct _VM_COUNTERS
1792 SIZE_T PeakVirtualSize
;
1794 ULONG PageFaultCount
;
1795 SIZE_T PeakWorkingSetSize
;
1796 SIZE_T WorkingSetSize
;
1797 SIZE_T QuotaPeakPagedPoolUsage
;
1798 SIZE_T QuotaPagedPoolUsage
;
1799 SIZE_T QuotaPeakNonPagedPoolUsage
;
1800 SIZE_T QuotaNonPagedPoolUsage
;
1801 SIZE_T PagefileUsage
;
1802 SIZE_T PeakPagefileUsage
;
1803 } VM_COUNTERS
, *PVM_COUNTERS
;
1805 typedef struct _VM_COUNTERS_EX
1807 SIZE_T PeakVirtualSize
;
1809 ULONG PageFaultCount
;
1810 SIZE_T PeakWorkingSetSize
;
1811 SIZE_T WorkingSetSize
;
1812 SIZE_T QuotaPeakPagedPoolUsage
;
1813 SIZE_T QuotaPagedPoolUsage
;
1814 SIZE_T QuotaPeakNonPagedPoolUsage
;
1815 SIZE_T QuotaNonPagedPoolUsage
;
1816 SIZE_T PagefileUsage
;
1817 SIZE_T PeakPagefileUsage
;
1818 SIZE_T PrivateUsage
;
1819 } VM_COUNTERS_EX
, *PVM_COUNTERS_EX
;
1821 typedef struct _POOLED_USAGE_AND_LIMITS
1823 SIZE_T PeakPagedPoolUsage
;
1824 SIZE_T PagedPoolUsage
;
1825 SIZE_T PagedPoolLimit
;
1826 SIZE_T PeakNonPagedPoolUsage
;
1827 SIZE_T NonPagedPoolUsage
;
1828 SIZE_T NonPagedPoolLimit
;
1829 SIZE_T PeakPagefileUsage
;
1830 SIZE_T PagefileUsage
;
1831 SIZE_T PagefileLimit
;
1832 } POOLED_USAGE_AND_LIMITS
, *PPOOLED_USAGE_AND_LIMITS
;
1834 typedef enum _KINTERRUPT_POLARITY
1836 InterruptPolarityUnknown
,
1837 InterruptActiveHigh
,
1839 } KINTERRUPT_POLARITY
, *PKINTERRUPT_POLARITY
;
1841 /* IO_RESOURCE_DESCRIPTOR.Option */
1843 #define IO_RESOURCE_PREFERRED 0x01
1844 #define IO_RESOURCE_DEFAULT 0x02
1845 #define IO_RESOURCE_ALTERNATIVE 0x08
1847 typedef struct _IO_RESOURCE_DESCRIPTOR
{
1850 UCHAR ShareDisposition
;
1858 PHYSICAL_ADDRESS MinimumAddress
;
1859 PHYSICAL_ADDRESS MaximumAddress
;
1864 PHYSICAL_ADDRESS MinimumAddress
;
1865 PHYSICAL_ADDRESS MaximumAddress
;
1868 ULONG MinimumVector
;
1869 ULONG MaximumVector
;
1872 ULONG MinimumChannel
;
1873 ULONG MaximumChannel
;
1878 PHYSICAL_ADDRESS MinimumAddress
;
1879 PHYSICAL_ADDRESS MaximumAddress
;
1896 } IO_RESOURCE_DESCRIPTOR
, *PIO_RESOURCE_DESCRIPTOR
;
1898 typedef struct _IO_RESOURCE_LIST
{
1902 IO_RESOURCE_DESCRIPTOR Descriptors
[1];
1903 } IO_RESOURCE_LIST
, *PIO_RESOURCE_LIST
;
1905 typedef struct _IO_RESOURCE_REQUIREMENTS_LIST
{
1907 INTERFACE_TYPE InterfaceType
;
1911 ULONG AlternativeLists
;
1912 IO_RESOURCE_LIST List
[1];
1913 } IO_RESOURCE_REQUIREMENTS_LIST
, *PIO_RESOURCE_REQUIREMENTS_LIST
;
1915 typedef struct _IO_ERROR_LOG_PACKET
{
1916 UCHAR MajorFunctionCode
;
1918 USHORT DumpDataSize
;
1919 USHORT NumberOfStrings
;
1920 USHORT StringOffset
;
1921 USHORT EventCategory
;
1923 ULONG UniqueErrorValue
;
1924 NTSTATUS FinalStatus
;
1925 ULONG SequenceNumber
;
1926 ULONG IoControlCode
;
1927 LARGE_INTEGER DeviceOffset
;
1929 } IO_ERROR_LOG_PACKET
, *PIO_ERROR_LOG_PACKET
;
1931 typedef struct _IO_ERROR_LOG_MESSAGE
{
1934 USHORT DriverNameLength
;
1935 LARGE_INTEGER TimeStamp
;
1936 ULONG DriverNameOffset
;
1937 IO_ERROR_LOG_PACKET EntryData
;
1938 } IO_ERROR_LOG_MESSAGE
, *PIO_ERROR_LOG_MESSAGE
;
1940 #define ERROR_LOG_LIMIT_SIZE 240
1941 #define IO_ERROR_LOG_MESSAGE_HEADER_LENGTH (sizeof(IO_ERROR_LOG_MESSAGE) - \
1942 sizeof(IO_ERROR_LOG_PACKET) + \
1943 (sizeof(WCHAR) * 40))
1944 #define ERROR_LOG_MESSAGE_LIMIT_SIZE \
1945 (ERROR_LOG_LIMIT_SIZE + IO_ERROR_LOG_MESSAGE_HEADER_LENGTH)
1946 #define IO_ERROR_LOG_MESSAGE_LENGTH \
1947 ((PORT_MAXIMUM_MESSAGE_LENGTH > ERROR_LOG_MESSAGE_LIMIT_SIZE) ? \
1948 ERROR_LOG_MESSAGE_LIMIT_SIZE : \
1949 PORT_MAXIMUM_MESSAGE_LENGTH)
1950 #define ERROR_LOG_MAXIMUM_SIZE (IO_ERROR_LOG_MESSAGE_LENGTH - \
1951 IO_ERROR_LOG_MESSAGE_HEADER_LENGTH)
1953 typedef struct _CONTROLLER_OBJECT
{
1956 PVOID ControllerExtension
;
1957 KDEVICE_QUEUE DeviceWaitQueue
;
1959 LARGE_INTEGER Spare2
;
1960 } CONTROLLER_OBJECT
, *PCONTROLLER_OBJECT
;
1962 typedef enum _DMA_WIDTH
{
1967 } DMA_WIDTH
, *PDMA_WIDTH
;
1969 typedef enum _DMA_SPEED
{
1976 } DMA_SPEED
, *PDMA_SPEED
;
1978 /* DEVICE_DESCRIPTION.Version */
1980 #define DEVICE_DESCRIPTION_VERSION 0x0000
1981 #define DEVICE_DESCRIPTION_VERSION1 0x0001
1982 #define DEVICE_DESCRIPTION_VERSION2 0x0002
1984 typedef struct _DEVICE_DESCRIPTION
{
1987 BOOLEAN ScatterGather
;
1989 BOOLEAN AutoInitialize
;
1990 BOOLEAN Dma32BitAddresses
;
1991 BOOLEAN IgnoreCount
;
1993 BOOLEAN Dma64BitAddresses
;
1996 INTERFACE_TYPE InterfaceType
;
1999 ULONG MaximumLength
;
2001 } DEVICE_DESCRIPTION
, *PDEVICE_DESCRIPTION
;
2004 #define VPB_MOUNTED 0x0001
2005 #define VPB_LOCKED 0x0002
2006 #define VPB_PERSISTENT 0x0004
2007 #define VPB_REMOVE_PENDING 0x0008
2008 #define VPB_RAW_MOUNT 0x0010
2010 #define MAXIMUM_VOLUME_LABEL_LENGTH (32 * sizeof(WCHAR))
2012 typedef struct _VPB
{
2016 USHORT VolumeLabelLength
;
2017 struct _DEVICE_OBJECT
*DeviceObject
;
2018 struct _DEVICE_OBJECT
*RealDevice
;
2020 ULONG ReferenceCount
;
2021 WCHAR VolumeLabel
[MAXIMUM_VOLUME_LABEL_LENGTH
/ sizeof(WCHAR
)];
2024 /* DEVICE_OBJECT.Flags */
2026 #define DO_VERIFY_VOLUME 0x00000002
2027 #define DO_BUFFERED_IO 0x00000004
2028 #define DO_EXCLUSIVE 0x00000008
2029 #define DO_DIRECT_IO 0x00000010
2030 #define DO_MAP_IO_BUFFER 0x00000020
2031 #define DO_DEVICE_HAS_NAME 0x00000040
2032 #define DO_DEVICE_INITIALIZING 0x00000080
2033 #define DO_SYSTEM_BOOT_PARTITION 0x00000100
2034 #define DO_LONG_TERM_REQUESTS 0x00000200
2035 #define DO_NEVER_LAST_DEVICE 0x00000400
2036 #define DO_SHUTDOWN_REGISTERED 0x00000800
2037 #define DO_BUS_ENUMERATED_DEVICE 0x00001000
2038 #define DO_POWER_PAGABLE 0x00002000
2039 #define DO_POWER_INRUSH 0x00004000
2040 #define DO_LOW_PRIORITY_FILESYSTEM 0x00010000
2042 /* DEVICE_OBJECT.Characteristics */
2044 #define FILE_REMOVABLE_MEDIA 0x00000001
2045 #define FILE_READ_ONLY_DEVICE 0x00000002
2046 #define FILE_FLOPPY_DISKETTE 0x00000004
2047 #define FILE_WRITE_ONCE_MEDIA 0x00000008
2048 #define FILE_REMOTE_DEVICE 0x00000010
2049 #define FILE_DEVICE_IS_MOUNTED 0x00000020
2050 #define FILE_VIRTUAL_VOLUME 0x00000040
2051 #define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080
2052 #define FILE_DEVICE_SECURE_OPEN 0x00000100
2054 /* DEVICE_OBJECT.AlignmentRequirement */
2056 #define FILE_BYTE_ALIGNMENT 0x00000000
2057 #define FILE_WORD_ALIGNMENT 0x00000001
2058 #define FILE_LONG_ALIGNMENT 0x00000003
2059 #define FILE_QUAD_ALIGNMENT 0x00000007
2060 #define FILE_OCTA_ALIGNMENT 0x0000000f
2061 #define FILE_32_BYTE_ALIGNMENT 0x0000001f
2062 #define FILE_64_BYTE_ALIGNMENT 0x0000003f
2063 #define FILE_128_BYTE_ALIGNMENT 0x0000007f
2064 #define FILE_256_BYTE_ALIGNMENT 0x000000ff
2065 #define FILE_512_BYTE_ALIGNMENT 0x000001ff
2067 /* DEVICE_OBJECT.DeviceType */
2069 #define DEVICE_TYPE ULONG
2071 #define FILE_DEVICE_BEEP 0x00000001
2072 #define FILE_DEVICE_CD_ROM 0x00000002
2073 #define FILE_DEVICE_CD_ROM_FILE_SYSTEM 0x00000003
2074 #define FILE_DEVICE_CONTROLLER 0x00000004
2075 #define FILE_DEVICE_DATALINK 0x00000005
2076 #define FILE_DEVICE_DFS 0x00000006
2077 #define FILE_DEVICE_DISK 0x00000007
2078 #define FILE_DEVICE_DISK_FILE_SYSTEM 0x00000008
2079 #define FILE_DEVICE_FILE_SYSTEM 0x00000009
2080 #define FILE_DEVICE_INPORT_PORT 0x0000000a
2081 #define FILE_DEVICE_KEYBOARD 0x0000000b
2082 #define FILE_DEVICE_MAILSLOT 0x0000000c
2083 #define FILE_DEVICE_MIDI_IN 0x0000000d
2084 #define FILE_DEVICE_MIDI_OUT 0x0000000e
2085 #define FILE_DEVICE_MOUSE 0x0000000f
2086 #define FILE_DEVICE_MULTI_UNC_PROVIDER 0x00000010
2087 #define FILE_DEVICE_NAMED_PIPE 0x00000011
2088 #define FILE_DEVICE_NETWORK 0x00000012
2089 #define FILE_DEVICE_NETWORK_BROWSER 0x00000013
2090 #define FILE_DEVICE_NETWORK_FILE_SYSTEM 0x00000014
2091 #define FILE_DEVICE_NULL 0x00000015
2092 #define FILE_DEVICE_PARALLEL_PORT 0x00000016
2093 #define FILE_DEVICE_PHYSICAL_NETCARD 0x00000017
2094 #define FILE_DEVICE_PRINTER 0x00000018
2095 #define FILE_DEVICE_SCANNER 0x00000019
2096 #define FILE_DEVICE_SERIAL_MOUSE_PORT 0x0000001a
2097 #define FILE_DEVICE_SERIAL_PORT 0x0000001b
2098 #define FILE_DEVICE_SCREEN 0x0000001c
2099 #define FILE_DEVICE_SOUND 0x0000001d
2100 #define FILE_DEVICE_STREAMS 0x0000001e
2101 #define FILE_DEVICE_TAPE 0x0000001f
2102 #define FILE_DEVICE_TAPE_FILE_SYSTEM 0x00000020
2103 #define FILE_DEVICE_TRANSPORT 0x00000021
2104 #define FILE_DEVICE_UNKNOWN 0x00000022
2105 #define FILE_DEVICE_VIDEO 0x00000023
2106 #define FILE_DEVICE_VIRTUAL_DISK 0x00000024
2107 #define FILE_DEVICE_WAVE_IN 0x00000025
2108 #define FILE_DEVICE_WAVE_OUT 0x00000026
2109 #define FILE_DEVICE_8042_PORT 0x00000027
2110 #define FILE_DEVICE_NETWORK_REDIRECTOR 0x00000028
2111 #define FILE_DEVICE_BATTERY 0x00000029
2112 #define FILE_DEVICE_BUS_EXTENDER 0x0000002a
2113 #define FILE_DEVICE_MODEM 0x0000002b
2114 #define FILE_DEVICE_VDM 0x0000002c
2115 #define FILE_DEVICE_MASS_STORAGE 0x0000002d
2116 #define FILE_DEVICE_SMB 0x0000002e
2117 #define FILE_DEVICE_KS 0x0000002f
2118 #define FILE_DEVICE_CHANGER 0x00000030
2119 #define FILE_DEVICE_SMARTCARD 0x00000031
2120 #define FILE_DEVICE_ACPI 0x00000032
2121 #define FILE_DEVICE_DVD 0x00000033
2122 #define FILE_DEVICE_FULLSCREEN_VIDEO 0x00000034
2123 #define FILE_DEVICE_DFS_FILE_SYSTEM 0x00000035
2124 #define FILE_DEVICE_DFS_VOLUME 0x00000036
2125 #define FILE_DEVICE_SERENUM 0x00000037
2126 #define FILE_DEVICE_TERMSRV 0x00000038
2127 #define FILE_DEVICE_KSEC 0x00000039
2128 #define FILE_DEVICE_FIPS 0x0000003a
2130 typedef struct _DEVICE_OBJECT
{
2133 LONG ReferenceCount
;
2134 struct _DRIVER_OBJECT
*DriverObject
;
2135 struct _DEVICE_OBJECT
*NextDevice
;
2136 struct _DEVICE_OBJECT
*AttachedDevice
;
2137 struct _IRP
*CurrentIrp
;
2140 ULONG Characteristics
;
2141 __volatile PVPB Vpb
;
2142 PVOID DeviceExtension
;
2143 DEVICE_TYPE DeviceType
;
2146 LIST_ENTRY ListEntry
;
2147 WAIT_CONTEXT_BLOCK Wcb
;
2149 ULONG AlignmentRequirement
;
2150 KDEVICE_QUEUE DeviceQueue
;
2152 ULONG ActiveThreadCount
;
2153 PSECURITY_DESCRIPTOR SecurityDescriptor
;
2157 struct _DEVOBJ_EXTENSION
*DeviceObjectExtension
;
2159 } DEVICE_OBJECT
, *PDEVICE_OBJECT
;
2161 typedef enum _DEVICE_RELATION_TYPE
{
2166 TargetDeviceRelation
,
2168 } DEVICE_RELATION_TYPE
, *PDEVICE_RELATION_TYPE
;
2170 typedef struct _DEVICE_RELATIONS
{
2172 PDEVICE_OBJECT Objects
[1];
2173 } DEVICE_RELATIONS
, *PDEVICE_RELATIONS
;
2175 typedef struct _SCATTER_GATHER_ELEMENT
{
2176 PHYSICAL_ADDRESS Address
;
2179 } SCATTER_GATHER_ELEMENT
, *PSCATTER_GATHER_ELEMENT
;
2181 typedef struct _SCATTER_GATHER_LIST
{
2182 ULONG NumberOfElements
;
2184 SCATTER_GATHER_ELEMENT Elements
[0];
2185 } SCATTER_GATHER_LIST
, *PSCATTER_GATHER_LIST
;
2187 typedef struct _MDL
{
2191 struct _EPROCESS
*Process
;
2192 PVOID MappedSystemVa
;
2198 #define MDL_MAPPED_TO_SYSTEM_VA 0x0001
2199 #define MDL_PAGES_LOCKED 0x0002
2200 #define MDL_SOURCE_IS_NONPAGED_POOL 0x0004
2201 #define MDL_ALLOCATED_FIXED_SIZE 0x0008
2202 #define MDL_PARTIAL 0x0010
2203 #define MDL_PARTIAL_HAS_BEEN_MAPPED 0x0020
2204 #define MDL_IO_PAGE_READ 0x0040
2205 #define MDL_WRITE_OPERATION 0x0080
2206 #define MDL_PARENT_MAPPED_SYSTEM_VA 0x0100
2207 #define MDL_FREE_EXTRA_PTES 0x0200
2208 #define MDL_IO_SPACE 0x0800
2209 #define MDL_NETWORK_HEADER 0x1000
2210 #define MDL_MAPPING_CAN_FAIL 0x2000
2211 #define MDL_ALLOCATED_MUST_SUCCEED 0x4000
2213 #define MDL_MAPPING_FLAGS ( \
2214 MDL_MAPPED_TO_SYSTEM_VA | \
2215 MDL_PAGES_LOCKED | \
2216 MDL_SOURCE_IS_NONPAGED_POOL | \
2217 MDL_PARTIAL_HAS_BEEN_MAPPED | \
2218 MDL_PARENT_MAPPED_SYSTEM_VA | \
2222 typedef struct _DRIVER_EXTENSION
{
2223 struct _DRIVER_OBJECT
*DriverObject
;
2224 PDRIVER_ADD_DEVICE AddDevice
;
2226 UNICODE_STRING ServiceKeyName
;
2227 } DRIVER_EXTENSION
, *PDRIVER_EXTENSION
;
2229 #define DRVO_UNLOAD_INVOKED 0x00000001
2230 #define DRVO_LEGACY_DRIVER 0x00000002
2231 #define DRVO_BUILTIN_DRIVER 0x00000004
2232 #define DRVO_REINIT_REGISTERED 0x00000008
2233 #define DRVO_INITIALIZED 0x00000010
2234 #define DRVO_BOOTREINIT_REGISTERED 0x00000020
2235 #define DRVO_LEGACY_RESOURCES 0x00000040
2237 typedef struct _DRIVER_OBJECT
{
2240 PDEVICE_OBJECT DeviceObject
;
2244 PVOID DriverSection
;
2245 PDRIVER_EXTENSION DriverExtension
;
2246 UNICODE_STRING DriverName
;
2247 PUNICODE_STRING HardwareDatabase
;
2248 struct _FAST_IO_DISPATCH
*FastIoDispatch
;
2249 PDRIVER_INITIALIZE DriverInit
;
2250 PDRIVER_STARTIO DriverStartIo
;
2251 PDRIVER_UNLOAD DriverUnload
;
2252 PDRIVER_DISPATCH MajorFunction
[IRP_MJ_MAXIMUM_FUNCTION
+ 1];
2254 typedef struct _DRIVER_OBJECT
*PDRIVER_OBJECT
;
2257 (DDKAPI
*PPUT_DMA_ADAPTER
)(
2258 IN PDMA_ADAPTER DmaAdapter
);
2261 (DDKAPI
*PALLOCATE_COMMON_BUFFER
)(
2262 IN PDMA_ADAPTER DmaAdapter
,
2264 OUT PPHYSICAL_ADDRESS LogicalAddress
,
2265 IN BOOLEAN CacheEnabled
);
2268 (DDKAPI
*PFREE_COMMON_BUFFER
)(
2269 IN PDMA_ADAPTER DmaAdapter
,
2271 IN PHYSICAL_ADDRESS LogicalAddress
,
2272 IN PVOID VirtualAddress
,
2273 IN BOOLEAN CacheEnabled
);
2276 (DDKAPI
*PALLOCATE_ADAPTER_CHANNEL
)(
2277 IN PDMA_ADAPTER DmaAdapter
,
2278 IN PDEVICE_OBJECT DeviceObject
,
2279 IN ULONG NumberOfMapRegisters
,
2280 IN PDRIVER_CONTROL ExecutionRoutine
,
2284 (DDKAPI
*PFLUSH_ADAPTER_BUFFERS
)(
2285 IN PDMA_ADAPTER DmaAdapter
,
2287 IN PVOID MapRegisterBase
,
2290 IN BOOLEAN WriteToDevice
);
2293 (DDKAPI
*PFREE_ADAPTER_CHANNEL
)(
2294 IN PDMA_ADAPTER DmaAdapter
);
2297 (DDKAPI
*PFREE_MAP_REGISTERS
)(
2298 IN PDMA_ADAPTER DmaAdapter
,
2299 PVOID MapRegisterBase
,
2300 ULONG NumberOfMapRegisters
);
2302 typedef PHYSICAL_ADDRESS
2303 (DDKAPI
*PMAP_TRANSFER
)(
2304 IN PDMA_ADAPTER DmaAdapter
,
2306 IN PVOID MapRegisterBase
,
2308 IN OUT PULONG Length
,
2309 IN BOOLEAN WriteToDevice
);
2312 (DDKAPI
*PGET_DMA_ALIGNMENT
)(
2313 IN PDMA_ADAPTER DmaAdapter
);
2316 (DDKAPI
*PREAD_DMA_COUNTER
)(
2317 IN PDMA_ADAPTER DmaAdapter
);
2320 (DDKAPI
*PGET_SCATTER_GATHER_LIST
)(
2321 IN PDMA_ADAPTER DmaAdapter
,
2322 IN PDEVICE_OBJECT DeviceObject
,
2326 IN PDRIVER_LIST_CONTROL ExecutionRoutine
,
2328 IN BOOLEAN WriteToDevice
);
2331 (DDKAPI
*PPUT_SCATTER_GATHER_LIST
)(
2332 IN PDMA_ADAPTER DmaAdapter
,
2333 IN PSCATTER_GATHER_LIST ScatterGather
,
2334 IN BOOLEAN WriteToDevice
);
2337 (DDKAPI
*PCALCULATE_SCATTER_GATHER_LIST_SIZE
)(
2338 IN PDMA_ADAPTER DmaAdapter
,
2339 IN PMDL Mdl OPTIONAL
,
2342 OUT PULONG ScatterGatherListSize
,
2343 OUT PULONG pNumberOfMapRegisters OPTIONAL
);
2346 (DDKAPI
*PBUILD_SCATTER_GATHER_LIST
)(
2347 IN PDMA_ADAPTER DmaAdapter
,
2348 IN PDEVICE_OBJECT DeviceObject
,
2352 IN PDRIVER_LIST_CONTROL ExecutionRoutine
,
2354 IN BOOLEAN WriteToDevice
,
2355 IN PVOID ScatterGatherBuffer
,
2356 IN ULONG ScatterGatherLength
);
2359 (DDKAPI
*PBUILD_MDL_FROM_SCATTER_GATHER_LIST
)(
2360 IN PDMA_ADAPTER DmaAdapter
,
2361 IN PSCATTER_GATHER_LIST ScatterGather
,
2362 IN PMDL OriginalMdl
,
2363 OUT PMDL
*TargetMdl
);
2365 typedef struct _DMA_OPERATIONS
{
2367 PPUT_DMA_ADAPTER PutDmaAdapter
;
2368 PALLOCATE_COMMON_BUFFER AllocateCommonBuffer
;
2369 PFREE_COMMON_BUFFER FreeCommonBuffer
;
2370 PALLOCATE_ADAPTER_CHANNEL AllocateAdapterChannel
;
2371 PFLUSH_ADAPTER_BUFFERS FlushAdapterBuffers
;
2372 PFREE_ADAPTER_CHANNEL FreeAdapterChannel
;
2373 PFREE_MAP_REGISTERS FreeMapRegisters
;
2374 PMAP_TRANSFER MapTransfer
;
2375 PGET_DMA_ALIGNMENT GetDmaAlignment
;
2376 PREAD_DMA_COUNTER ReadDmaCounter
;
2377 PGET_SCATTER_GATHER_LIST GetScatterGatherList
;
2378 PPUT_SCATTER_GATHER_LIST PutScatterGatherList
;
2379 PCALCULATE_SCATTER_GATHER_LIST_SIZE CalculateScatterGatherList
;
2380 PBUILD_SCATTER_GATHER_LIST BuildScatterGatherList
;
2381 PBUILD_MDL_FROM_SCATTER_GATHER_LIST BuildMdlFromScatterGatherList
;
2382 } DMA_OPERATIONS
, *PDMA_OPERATIONS
;
2384 typedef struct _DMA_ADAPTER
{
2387 PDMA_OPERATIONS DmaOperations
;
2391 typedef enum _ARBITER_REQUEST_SOURCE
{
2392 ArbiterRequestUndefined
= -1,
2393 ArbiterRequestLegacyReported
,
2394 ArbiterRequestHalReported
,
2395 ArbiterRequestLegacyAssigned
,
2396 ArbiterRequestPnpDetected
,
2397 ArbiterRequestPnpEnumerated
2398 } ARBITER_REQUEST_SOURCE
;
2400 typedef enum _ARBITER_RESULT
{
2401 ArbiterResultUndefined
= -1,
2402 ArbiterResultSuccess
,
2403 ArbiterResultExternalConflict
,
2404 ArbiterResultNullRequest
2407 typedef enum _ARBITER_ACTION
{
2408 ArbiterActionTestAllocation
,
2409 ArbiterActionRetestAllocation
,
2410 ArbiterActionCommitAllocation
,
2411 ArbiterActionRollbackAllocation
,
2412 ArbiterActionQueryAllocatedResources
,
2413 ArbiterActionWriteReservedResources
,
2414 ArbiterActionQueryConflict
,
2415 ArbiterActionQueryArbitrate
,
2416 ArbiterActionAddReserved
,
2417 ArbiterActionBootAllocation
2418 } ARBITER_ACTION
, *PARBITER_ACTION
;
2420 typedef struct _ARBITER_CONFLICT_INFO
{
2421 PDEVICE_OBJECT OwningObject
;
2424 } ARBITER_CONFLICT_INFO
, *PARBITER_CONFLICT_INFO
;
2426 typedef struct _ARBITER_PARAMETERS
{
2429 IN OUT PLIST_ENTRY ArbitrationList
;
2430 IN ULONG AllocateFromCount
;
2431 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
2435 IN OUT PLIST_ENTRY ArbitrationList
;
2436 IN ULONG AllocateFromCount
;
2437 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
2441 IN OUT PLIST_ENTRY ArbitrationList
;
2445 OUT PCM_PARTIAL_RESOURCE_LIST
*AllocatedResources
;
2446 } QueryAllocatedResources
;
2449 IN PDEVICE_OBJECT PhysicalDeviceObject
;
2450 IN PIO_RESOURCE_DESCRIPTOR ConflictingResource
;
2451 OUT PULONG ConflictCount
;
2452 OUT PARBITER_CONFLICT_INFO
*Conflicts
;
2456 IN PLIST_ENTRY ArbitrationList
;
2460 IN PDEVICE_OBJECT ReserveDevice
;
2463 } ARBITER_PARAMETERS
, *PARBITER_PARAMETERS
;
2465 #define ARBITER_FLAG_BOOT_CONFIG 0x00000001
2467 typedef struct _ARBITER_LIST_ENTRY
{
2468 LIST_ENTRY ListEntry
;
2469 ULONG AlternativeCount
;
2470 PIO_RESOURCE_DESCRIPTOR Alternatives
;
2471 PDEVICE_OBJECT PhysicalDeviceObject
;
2472 ARBITER_REQUEST_SOURCE RequestSource
;
2475 INTERFACE_TYPE InterfaceType
;
2478 PCM_PARTIAL_RESOURCE_DESCRIPTOR Assignment
;
2479 PIO_RESOURCE_DESCRIPTOR SelectedAlternative
;
2480 ARBITER_RESULT Result
;
2481 } ARBITER_LIST_ENTRY
, *PARBITER_LIST_ENTRY
;
2484 (DDKAPI
*PARBITER_HANDLER
)(
2486 IN ARBITER_ACTION Action
,
2487 IN OUT PARBITER_PARAMETERS Parameters
);
2489 #define ARBITER_PARTIAL 0x00000001
2491 typedef struct _ARBITER_INTERFACE
{
2495 PINTERFACE_REFERENCE InterfaceReference
;
2496 PINTERFACE_DEREFERENCE InterfaceDereference
;
2497 PARBITER_HANDLER ArbiterHandler
;
2499 } ARBITER_INTERFACE
, *PARBITER_INTERFACE
;
2501 typedef enum _HAL_QUERY_INFORMATION_CLASS
{
2502 HalInstalledBusInformation
,
2503 HalProfileSourceInformation
,
2504 HalInformationClassUnused1
,
2505 HalPowerInformation
,
2506 HalProcessorSpeedInformation
,
2507 HalCallbackInformation
,
2508 HalMapRegisterInformation
,
2509 HalMcaLogInformation
,
2510 HalFrameBufferCachingInformation
,
2511 HalDisplayBiosInformation
,
2512 HalProcessorFeatureInformation
,
2513 HalNumaTopologyInterface
,
2514 HalErrorInformation
,
2515 HalCmcLogInformation
,
2516 HalCpeLogInformation
,
2517 HalQueryMcaInterface
,
2518 HalQueryAMLIIllegalIOPortAddresses
,
2519 HalQueryMaxHotPlugMemoryAddress
,
2520 HalPartitionIpiInterface
,
2521 HalPlatformInformation
,
2522 HalQueryProfileSourceList
2523 } HAL_QUERY_INFORMATION_CLASS
, *PHAL_QUERY_INFORMATION_CLASS
;
2525 typedef enum _HAL_SET_INFORMATION_CLASS
{
2526 HalProfileSourceInterval
,
2527 HalProfileSourceInterruptHandler
,
2528 HalMcaRegisterDriver
,
2529 HalKernelErrorHandler
,
2530 HalCmcRegisterDriver
,
2531 HalCpeRegisterDriver
,
2535 HalGenerateCmcInterrupt
2536 } HAL_SET_INFORMATION_CLASS
, *PHAL_SET_INFORMATION_CLASS
;
2538 typedef struct _MAP_REGISTER_ENTRY
2541 BOOLEAN WriteToDevice
;
2542 } MAP_REGISTER_ENTRY
, *PMAP_REGISTER_ENTRY
;
2549 PUCHAR TranslatedAddress
;
2551 } DEBUG_DEVICE_ADDRESS
, *PDEBUG_DEVICE_ADDRESS
;
2555 PHYSICAL_ADDRESS Start
;
2556 PHYSICAL_ADDRESS MaxEnd
;
2557 PVOID VirtualAddress
;
2561 } DEBUG_MEMORY_REQUIREMENTS
, *PDEBUG_MEMORY_REQUIREMENTS
;
2572 BOOLEAN Initialized
;
2573 DEBUG_DEVICE_ADDRESS BaseAddress
[6];
2574 DEBUG_MEMORY_REQUIREMENTS Memory
;
2575 } DEBUG_DEVICE_DESCRIPTOR
, *PDEBUG_DEVICE_DESCRIPTOR
;
2577 typedef enum _KD_OPTION
{
2578 KD_OPTION_SET_BLOCK_ENABLE
,
2581 /* Function Type Defintions for Dispatch Functions */
2584 (DDKAPI
*PDEVICE_CONTROL_COMPLETION
)(
2585 IN
struct _DEVICE_CONTROL_CONTEXT
*ControlContext
);
2587 typedef struct _DEVICE_CONTROL_CONTEXT
{
2589 PDEVICE_HANDLER_OBJECT DeviceHandler
;
2590 PDEVICE_OBJECT DeviceObject
;
2593 PULONG BufferLength
;
2595 } DEVICE_CONTROL_CONTEXT
, *PDEVICE_CONTROL_CONTEXT
;
2597 typedef struct _PM_DISPATCH_TABLE
{
2601 } PM_DISPATCH_TABLE
, *PPM_DISPATCH_TABLE
;
2603 typedef enum _RESOURCE_TRANSLATION_DIRECTION
{
2604 TranslateChildToParent
,
2605 TranslateParentToChild
2606 } RESOURCE_TRANSLATION_DIRECTION
;
2609 (DDKAPI
*PTRANSLATE_RESOURCE_HANDLER
)(
2611 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Source
,
2612 IN RESOURCE_TRANSLATION_DIRECTION Direction
,
2613 IN ULONG AlternativesCount
,
2614 IN IO_RESOURCE_DESCRIPTOR Alternatives
[],
2615 IN PDEVICE_OBJECT PhysicalDeviceObject
,
2616 OUT PCM_PARTIAL_RESOURCE_DESCRIPTOR Target
);
2619 (DDKAPI
*PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER
)(
2621 IN PIO_RESOURCE_DESCRIPTOR Source
,
2622 IN PDEVICE_OBJECT PhysicalDeviceObject
,
2623 OUT PULONG TargetCount
,
2624 OUT PIO_RESOURCE_DESCRIPTOR
*Target
);
2626 typedef struct _TRANSLATOR_INTERFACE
{
2630 PINTERFACE_REFERENCE InterfaceReference
;
2631 PINTERFACE_DEREFERENCE InterfaceDereference
;
2632 PTRANSLATE_RESOURCE_HANDLER TranslateResources
;
2633 PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER TranslateResourceRequirements
;
2634 } TRANSLATOR_INTERFACE
, *PTRANSLATOR_INTERFACE
;
2637 (DDKAPI
*pHalDeviceControl
)(
2638 IN PDEVICE_HANDLER_OBJECT DeviceHandler
,
2639 IN PDEVICE_OBJECT DeviceObject
,
2640 IN ULONG ControlCode
,
2641 IN OUT PVOID Buffer OPTIONAL
,
2642 IN OUT PULONG BufferLength OPTIONAL
,
2644 IN PDEVICE_CONTROL_COMPLETION CompletionRoutine
);
2647 (FASTCALL
*pHalExamineMBR
)(
2648 IN PDEVICE_OBJECT DeviceObject
,
2649 IN ULONG SectorSize
,
2650 IN ULONG MBRTypeIdentifier
,
2654 (FASTCALL
*pHalIoAssignDriveLetters
)(
2655 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
2656 IN PSTRING NtDeviceName
,
2657 OUT PUCHAR NtSystemPath
,
2658 OUT PSTRING NtSystemPathString
);
2661 (FASTCALL
*pHalIoReadPartitionTable
)(
2662 IN PDEVICE_OBJECT DeviceObject
,
2663 IN ULONG SectorSize
,
2664 IN BOOLEAN ReturnRecognizedPartitions
,
2665 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
2668 (FASTCALL
*pHalIoSetPartitionInformation
)(
2669 IN PDEVICE_OBJECT DeviceObject
,
2670 IN ULONG SectorSize
,
2671 IN ULONG PartitionNumber
,
2672 IN ULONG PartitionType
);
2675 (FASTCALL
*pHalIoWritePartitionTable
)(
2676 IN PDEVICE_OBJECT DeviceObject
,
2677 IN ULONG SectorSize
,
2678 IN ULONG SectorsPerTrack
,
2679 IN ULONG NumberOfHeads
,
2680 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
2682 typedef PBUS_HANDLER
2683 (FASTCALL
*pHalHandlerForBus
)(
2684 IN INTERFACE_TYPE InterfaceType
,
2685 IN ULONG BusNumber
);
2688 (FASTCALL
*pHalReferenceBusHandler
)(
2689 IN PBUS_HANDLER BusHandler
);
2692 (DDKAPI
*pHalQuerySystemInformation
)(
2693 IN HAL_QUERY_INFORMATION_CLASS InformationClass
,
2694 IN ULONG BufferSize
,
2695 IN OUT PVOID Buffer
,
2696 OUT PULONG ReturnedLength
);
2699 (DDKAPI
*pHalSetSystemInformation
)(
2700 IN HAL_SET_INFORMATION_CLASS InformationClass
,
2701 IN ULONG BufferSize
,
2705 (DDKAPI
*pHalQueryBusSlots
)(
2706 IN PBUS_HANDLER BusHandler
,
2707 IN ULONG BufferSize
,
2708 OUT PULONG SlotNumbers
,
2709 OUT PULONG ReturnedLength
);
2712 (DDKAPI
*pHalInitPnpDriver
)(
2716 (DDKAPI
*pHalInitPowerManagement
)(
2717 IN PPM_DISPATCH_TABLE PmDriverDispatchTable
,
2718 OUT PPM_DISPATCH_TABLE
*PmHalDispatchTable
);
2720 typedef struct _DMA_ADAPTER
*
2721 (DDKAPI
*pHalGetDmaAdapter
)(
2723 IN
struct _DEVICE_DESCRIPTION
*DeviceDescriptor
,
2724 OUT PULONG NumberOfMapRegisters
);
2727 (DDKAPI
*pHalGetInterruptTranslator
)(
2728 IN INTERFACE_TYPE ParentInterfaceType
,
2729 IN ULONG ParentBusNumber
,
2730 IN INTERFACE_TYPE BridgeInterfaceType
,
2733 OUT PTRANSLATOR_INTERFACE Translator
,
2734 OUT PULONG BridgeBusNumber
);
2737 (DDKAPI
*pHalStartMirroring
)(
2741 (DDKAPI
*pHalEndMirroring
)(
2742 IN ULONG PassNumber
);
2745 (DDKAPI
*pHalMirrorPhysicalMemory
)(
2746 IN PHYSICAL_ADDRESS PhysicalAddress
,
2747 IN LARGE_INTEGER NumberOfBytes
);
2750 (DDKAPI
*pHalMirrorVerify
)(
2751 IN PHYSICAL_ADDRESS PhysicalAddress
,
2752 IN LARGE_INTEGER NumberOfBytes
);
2755 (DDKAPI
*pHalEndOfBoot
)(
2760 (DDKAPI
*pHalTranslateBusAddress
)(
2761 IN INTERFACE_TYPE InterfaceType
,
2763 IN PHYSICAL_ADDRESS BusAddress
,
2764 IN OUT PULONG AddressSpace
,
2765 OUT PPHYSICAL_ADDRESS TranslatedAddress
2770 (DDKAPI
*pHalAssignSlotResources
)(
2771 IN PUNICODE_STRING RegistryPath
,
2772 IN PUNICODE_STRING DriverClassName OPTIONAL
,
2773 IN PDRIVER_OBJECT DriverObject
,
2774 IN PDEVICE_OBJECT DeviceObject
,
2775 IN INTERFACE_TYPE BusType
,
2777 IN ULONG SlotNumber
,
2778 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
2783 (DDKAPI
*pHalHaltSystem
)(
2789 (DDKAPI
*pHalResetDisplay
)(
2795 (DDKAPI
*pHalVectorToIDTEntry
)(
2801 (DDKAPI
*pHalFindBusAddressTranslation
)(
2802 IN PHYSICAL_ADDRESS BusAddress
,
2803 IN OUT PULONG AddressSpace
,
2804 OUT PPHYSICAL_ADDRESS TranslatedAddress
,
2805 IN OUT PULONG_PTR Context
,
2811 (DDKAPI
*pKdSetupPciDeviceForDebugging
)(
2812 IN PVOID LoaderBlock OPTIONAL
,
2813 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
2818 (DDKAPI
*pKdReleasePciDeviceForDebugging
)(
2819 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
2824 (DDKAPI
*pKdGetAcpiTablePhase0
)(
2825 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
2831 (DDKAPI
*pKdCheckPowerButton
)(
2837 (DDKAPI
*pHalGetInterruptVector
)(
2838 IN INTERFACE_TYPE InterfaceType
,
2840 IN ULONG BusInterruptLevel
,
2841 IN ULONG BusInterruptVector
,
2843 OUT PKAFFINITY Affinity
2848 (DDKAPI
*pHalGetVectorInput
)(
2850 IN KAFFINITY Affinity
,
2852 OUT PKINTERRUPT_POLARITY Polarity
2857 (DDKAPI
*pKdMapPhysicalMemory64
)(
2858 IN PHYSICAL_ADDRESS PhysicalAddress
,
2859 IN ULONG NumberPages
2864 (DDKAPI
*pKdUnmapVirtualAddress
)(
2865 IN PVOID VirtualAddress
,
2866 IN ULONG NumberPages
2871 (DDKAPI
*pKdGetPciDataByOffset
)(
2873 IN ULONG SlotNumber
,
2881 (DDKAPI
*pKdSetPciDataByOffset
)(
2883 IN ULONG SlotNumber
,
2890 (DDKAPI
*PHAL_RESET_DISPLAY_PARAMETERS
)(
2891 ULONG Columns
, ULONG Rows
);
2895 pHalQuerySystemInformation HalQuerySystemInformation
;
2896 pHalSetSystemInformation HalSetSystemInformation
;
2897 pHalQueryBusSlots HalQueryBusSlots
;
2899 pHalExamineMBR HalExamineMBR
;
2900 pHalIoAssignDriveLetters HalIoAssignDriveLetters
;
2901 pHalIoReadPartitionTable HalIoReadPartitionTable
;
2902 pHalIoSetPartitionInformation HalIoSetPartitionInformation
;
2903 pHalIoWritePartitionTable HalIoWritePartitionTable
;
2904 pHalHandlerForBus HalReferenceHandlerForBus
;
2905 pHalReferenceBusHandler HalReferenceBusHandler
;
2906 pHalReferenceBusHandler HalDereferenceBusHandler
;
2907 pHalInitPnpDriver HalInitPnpDriver
;
2908 pHalInitPowerManagement HalInitPowerManagement
;
2909 pHalGetDmaAdapter HalGetDmaAdapter
;
2910 pHalGetInterruptTranslator HalGetInterruptTranslator
;
2911 pHalStartMirroring HalStartMirroring
;
2912 pHalEndMirroring HalEndMirroring
;
2913 pHalMirrorPhysicalMemory HalMirrorPhysicalMemory
;
2914 pHalEndOfBoot HalEndOfBoot
;
2915 pHalMirrorVerify HalMirrorVerify
;
2916 } HAL_DISPATCH
, *PHAL_DISPATCH
;
2918 #if defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTHAL_)
2919 extern DECL_IMPORT PHAL_DISPATCH HalDispatchTable
;
2920 #define HALDISPATCH ((PHAL_DISPATCH)&HalDispatchTable)
2922 extern DECL_EXPORT HAL_DISPATCH HalDispatchTable
;
2923 #define HALDISPATCH (&HalDispatchTable)
2926 #define HAL_DISPATCH_VERSION 3
2927 #define HalDispatchTableVersion HALDISPATCH->Version
2928 #define HalQuerySystemInformation HALDISPATCH->HalQuerySystemInformation
2929 #define HalSetSystemInformation HALDISPATCH->HalSetSystemInformation
2930 #define HalQueryBusSlots HALDISPATCH->HalQueryBusSlots
2931 #define HalDeviceControl HALDISPATCH->HalDeviceControl
2932 #define HalIoAssignDriveLetters HALDISPATCH->HalIoAssignDriveLetters
2933 #define HalIoReadPartitionTable HALDISPATCH->HalIoReadPartitionTable
2934 #define HalIoSetPartitionInformation HALDISPATCH->HalIoSetPartitionInformation
2935 #define HalIoWritePartitionTable HALDISPATCH->HalIoWritePartitionTable
2936 #define HalReferenceHandlerForBus HALDISPATCH->HalReferenceHandlerForBus
2937 #define HalReferenceBusHandler HALDISPATCH->HalReferenceBusHandler
2938 #define HalDereferenceBusHandler HALDISPATCH->HalDereferenceBusHandler
2939 #define HalInitPnpDriver HALDISPATCH->HalInitPnpDriver
2940 #define HalInitPowerManagement HALDISPATCH->HalInitPowerManagement
2941 #define HalGetDmaAdapter HALDISPATCH->HalGetDmaAdapter
2942 #define HalGetInterruptTranslator HALDISPATCH->HalGetInterruptTranslator
2943 #define HalStartMirroring HALDISPATCH->HalStartMirroring
2944 #define HalEndMirroring HALDISPATCH->HalEndMirroring
2945 #define HalMirrorPhysicalMemory HALDISPATCH->HalMirrorPhysicalMemory
2946 #define HalEndOfBoot HALDISPATCH->HalEndOfBoot
2947 #define HalMirrorVerify HALDISPATCH->HalMirrorVerify
2949 typedef enum _FILE_INFORMATION_CLASS
{
2950 FileDirectoryInformation
= 1,
2951 FileFullDirectoryInformation
,
2952 FileBothDirectoryInformation
,
2953 FileBasicInformation
,
2954 FileStandardInformation
,
2955 FileInternalInformation
,
2957 FileAccessInformation
,
2958 FileNameInformation
,
2959 FileRenameInformation
,
2960 FileLinkInformation
,
2961 FileNamesInformation
,
2962 FileDispositionInformation
,
2963 FilePositionInformation
,
2964 FileFullEaInformation
,
2965 FileModeInformation
,
2966 FileAlignmentInformation
,
2968 FileAllocationInformation
,
2969 FileEndOfFileInformation
,
2970 FileAlternateNameInformation
,
2971 FileStreamInformation
,
2972 FilePipeInformation
,
2973 FilePipeLocalInformation
,
2974 FilePipeRemoteInformation
,
2975 FileMailslotQueryInformation
,
2976 FileMailslotSetInformation
,
2977 FileCompressionInformation
,
2978 FileObjectIdInformation
,
2979 FileCompletionInformation
,
2980 FileMoveClusterInformation
,
2981 FileQuotaInformation
,
2982 FileReparsePointInformation
,
2983 FileNetworkOpenInformation
,
2984 FileAttributeTagInformation
,
2985 FileTrackingInformation
,
2986 FileIdBothDirectoryInformation
,
2987 FileIdFullDirectoryInformation
,
2988 FileValidDataLengthInformation
,
2989 FileShortNameInformation
,
2990 FileMaximumInformation
2991 } FILE_INFORMATION_CLASS
, *PFILE_INFORMATION_CLASS
;
2993 typedef struct _FILE_POSITION_INFORMATION
{
2994 LARGE_INTEGER CurrentByteOffset
;
2995 } FILE_POSITION_INFORMATION
, *PFILE_POSITION_INFORMATION
;
2997 typedef struct _FILE_ALIGNMENT_INFORMATION
{
2998 ULONG AlignmentRequirement
;
2999 } FILE_ALIGNMENT_INFORMATION
, *PFILE_ALIGNMENT_INFORMATION
;
3001 typedef struct _FILE_NAME_INFORMATION
{
3002 ULONG FileNameLength
;
3004 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
3006 #include <pshpack8.h>
3007 typedef struct _FILE_BASIC_INFORMATION
{
3008 LARGE_INTEGER CreationTime
;
3009 LARGE_INTEGER LastAccessTime
;
3010 LARGE_INTEGER LastWriteTime
;
3011 LARGE_INTEGER ChangeTime
;
3012 ULONG FileAttributes
;
3013 } FILE_BASIC_INFORMATION
, *PFILE_BASIC_INFORMATION
;
3014 #include <poppack.h>
3016 typedef struct _FILE_STANDARD_INFORMATION
{
3017 LARGE_INTEGER AllocationSize
;
3018 LARGE_INTEGER EndOfFile
;
3019 ULONG NumberOfLinks
;
3020 BOOLEAN DeletePending
;
3022 } FILE_STANDARD_INFORMATION
, *PFILE_STANDARD_INFORMATION
;
3024 typedef struct _FILE_NETWORK_OPEN_INFORMATION
{
3025 LARGE_INTEGER CreationTime
;
3026 LARGE_INTEGER LastAccessTime
;
3027 LARGE_INTEGER LastWriteTime
;
3028 LARGE_INTEGER ChangeTime
;
3029 LARGE_INTEGER AllocationSize
;
3030 LARGE_INTEGER EndOfFile
;
3031 ULONG FileAttributes
;
3032 } FILE_NETWORK_OPEN_INFORMATION
, *PFILE_NETWORK_OPEN_INFORMATION
;
3034 typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION
{
3035 ULONG FileAttributes
;
3037 } FILE_ATTRIBUTE_TAG_INFORMATION
, *PFILE_ATTRIBUTE_TAG_INFORMATION
;
3039 typedef struct _FILE_DISPOSITION_INFORMATION
{
3041 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
3043 typedef struct _FILE_END_OF_FILE_INFORMATION
{
3044 LARGE_INTEGER EndOfFile
;
3045 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
3047 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
{
3048 LARGE_INTEGER ValidDataLength
;
3049 } FILE_VALID_DATA_LENGTH_INFORMATION
, *PFILE_VALID_DATA_LENGTH_INFORMATION
;
3051 typedef enum _FSINFOCLASS
{
3052 FileFsVolumeInformation
= 1,
3053 FileFsLabelInformation
,
3054 FileFsSizeInformation
,
3055 FileFsDeviceInformation
,
3056 FileFsAttributeInformation
,
3057 FileFsControlInformation
,
3058 FileFsFullSizeInformation
,
3059 FileFsObjectIdInformation
,
3060 FileFsDriverPathInformation
,
3061 FileFsMaximumInformation
3062 } FS_INFORMATION_CLASS
, *PFS_INFORMATION_CLASS
;
3064 typedef struct _FILE_FS_DEVICE_INFORMATION
{
3065 DEVICE_TYPE DeviceType
;
3066 ULONG Characteristics
;
3067 } FILE_FS_DEVICE_INFORMATION
, *PFILE_FS_DEVICE_INFORMATION
;
3069 typedef struct _FILE_FULL_EA_INFORMATION
{
3070 ULONG NextEntryOffset
;
3073 USHORT EaValueLength
;
3075 } FILE_FULL_EA_INFORMATION
, *PFILE_FULL_EA_INFORMATION
;
3077 typedef ULONG_PTR ERESOURCE_THREAD
;
3078 typedef ERESOURCE_THREAD
*PERESOURCE_THREAD
;
3080 typedef struct _OWNER_ENTRY
{
3081 ERESOURCE_THREAD OwnerThread
;
3082 _ANONYMOUS_UNION
union {
3086 } OWNER_ENTRY
, *POWNER_ENTRY
;
3088 /* ERESOURCE.Flag */
3090 #define ResourceNeverExclusive 0x0010
3091 #define ResourceReleaseByOtherThread 0x0020
3092 #define ResourceOwnedExclusive 0x0080
3094 #define RESOURCE_HASH_TABLE_SIZE 64
3096 typedef struct _ERESOURCE
{
3097 LIST_ENTRY SystemResourcesList
;
3098 POWNER_ENTRY OwnerTable
;
3101 __volatile PKSEMAPHORE SharedWaiters
;
3102 __volatile PKEVENT ExclusiveWaiters
;
3103 OWNER_ENTRY OwnerThreads
[2];
3104 ULONG ContentionCount
;
3105 USHORT NumberOfSharedWaiters
;
3106 USHORT NumberOfExclusiveWaiters
;
3107 _ANONYMOUS_UNION
union {
3109 ULONG_PTR CreatorBackTraceIndex
;
3111 KSPIN_LOCK SpinLock
;
3112 } ERESOURCE
, *PERESOURCE
;
3114 typedef struct _DEVOBJ_EXTENSION
3118 PDEVICE_OBJECT DeviceObject
;
3119 } DEVOBJ_EXTENSION
, *PDEVOBJ_EXTENSION
;
3122 (DDKAPI
*PFAST_IO_CHECK_IF_POSSIBLE
)(
3123 IN
struct _FILE_OBJECT
*FileObject
,
3124 IN PLARGE_INTEGER FileOffset
,
3128 IN BOOLEAN CheckForReadOperation
,
3129 OUT PIO_STATUS_BLOCK IoStatus
,
3130 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3133 (DDKAPI
*PFAST_IO_READ
)(
3134 IN
struct _FILE_OBJECT
*FileObject
,
3135 IN PLARGE_INTEGER FileOffset
,
3140 OUT PIO_STATUS_BLOCK IoStatus
,
3141 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3144 (DDKAPI
*PFAST_IO_WRITE
)(
3145 IN
struct _FILE_OBJECT
*FileObject
,
3146 IN PLARGE_INTEGER FileOffset
,
3151 OUT PIO_STATUS_BLOCK IoStatus
,
3152 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3155 (DDKAPI
*PFAST_IO_QUERY_BASIC_INFO
)(
3156 IN
struct _FILE_OBJECT
*FileObject
,
3158 OUT PFILE_BASIC_INFORMATION Buffer
,
3159 OUT PIO_STATUS_BLOCK IoStatus
,
3160 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3163 (DDKAPI
*PFAST_IO_QUERY_STANDARD_INFO
)(
3164 IN
struct _FILE_OBJECT
*FileObject
,
3166 OUT PFILE_STANDARD_INFORMATION Buffer
,
3167 OUT PIO_STATUS_BLOCK IoStatus
,
3168 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3171 (DDKAPI
*PFAST_IO_LOCK
)(
3172 IN
struct _FILE_OBJECT
*FileObject
,
3173 IN PLARGE_INTEGER FileOffset
,
3174 IN PLARGE_INTEGER Length
,
3175 PEPROCESS ProcessId
,
3177 BOOLEAN FailImmediately
,
3178 BOOLEAN ExclusiveLock
,
3179 OUT PIO_STATUS_BLOCK IoStatus
,
3180 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3183 (DDKAPI
*PFAST_IO_UNLOCK_SINGLE
)(
3184 IN
struct _FILE_OBJECT
*FileObject
,
3185 IN PLARGE_INTEGER FileOffset
,
3186 IN PLARGE_INTEGER Length
,
3187 PEPROCESS ProcessId
,
3189 OUT PIO_STATUS_BLOCK IoStatus
,
3190 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3193 (DDKAPI
*PFAST_IO_UNLOCK_ALL
)(
3194 IN
struct _FILE_OBJECT
*FileObject
,
3195 PEPROCESS ProcessId
,
3196 OUT PIO_STATUS_BLOCK IoStatus
,
3197 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3200 (DDKAPI
*PFAST_IO_UNLOCK_ALL_BY_KEY
)(
3201 IN
struct _FILE_OBJECT
*FileObject
,
3202 PEPROCESS ProcessId
,
3204 OUT PIO_STATUS_BLOCK IoStatus
,
3205 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3208 (DDKAPI
*PFAST_IO_DEVICE_CONTROL
)(
3209 IN
struct _FILE_OBJECT
*FileObject
,
3211 IN PVOID InputBuffer OPTIONAL
,
3212 IN ULONG InputBufferLength
,
3213 OUT PVOID OutputBuffer OPTIONAL
,
3214 IN ULONG OutputBufferLength
,
3215 IN ULONG IoControlCode
,
3216 OUT PIO_STATUS_BLOCK IoStatus
,
3217 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3220 (DDKAPI
*PFAST_IO_ACQUIRE_FILE
)(
3221 IN
struct _FILE_OBJECT
*FileObject
);
3224 (DDKAPI
*PFAST_IO_RELEASE_FILE
)(
3225 IN
struct _FILE_OBJECT
*FileObject
);
3228 (DDKAPI
*PFAST_IO_DETACH_DEVICE
)(
3229 IN
struct _DEVICE_OBJECT
*SourceDevice
,
3230 IN
struct _DEVICE_OBJECT
*TargetDevice
);
3233 (DDKAPI
*PFAST_IO_QUERY_NETWORK_OPEN_INFO
)(
3234 IN
struct _FILE_OBJECT
*FileObject
,
3236 OUT
struct _FILE_NETWORK_OPEN_INFORMATION
*Buffer
,
3237 OUT
struct _IO_STATUS_BLOCK
*IoStatus
,
3238 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3241 (DDKAPI
*PFAST_IO_ACQUIRE_FOR_MOD_WRITE
)(
3242 IN
struct _FILE_OBJECT
*FileObject
,
3243 IN PLARGE_INTEGER EndingOffset
,
3244 OUT
struct _ERESOURCE
**ResourceToRelease
,
3245 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3248 (DDKAPI
*PFAST_IO_MDL_READ
)(
3249 IN
struct _FILE_OBJECT
*FileObject
,
3250 IN PLARGE_INTEGER FileOffset
,
3254 OUT PIO_STATUS_BLOCK IoStatus
,
3255 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3258 (DDKAPI
*PFAST_IO_MDL_READ_COMPLETE
)(
3259 IN
struct _FILE_OBJECT
*FileObject
,
3261 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3264 (DDKAPI
*PFAST_IO_PREPARE_MDL_WRITE
)(
3265 IN
struct _FILE_OBJECT
*FileObject
,
3266 IN PLARGE_INTEGER FileOffset
,
3270 OUT PIO_STATUS_BLOCK IoStatus
,
3271 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3274 (DDKAPI
*PFAST_IO_MDL_WRITE_COMPLETE
)(
3275 IN
struct _FILE_OBJECT
*FileObject
,
3276 IN PLARGE_INTEGER FileOffset
,
3278 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3281 (DDKAPI
*PFAST_IO_READ_COMPRESSED
)(
3282 IN
struct _FILE_OBJECT
*FileObject
,
3283 IN PLARGE_INTEGER FileOffset
,
3288 OUT PIO_STATUS_BLOCK IoStatus
,
3289 OUT
struct _COMPRESSED_DATA_INFO
*CompressedDataInfo
,
3290 IN ULONG CompressedDataInfoLength
,
3291 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3294 (DDKAPI
*PFAST_IO_WRITE_COMPRESSED
)(
3295 IN
struct _FILE_OBJECT
*FileObject
,
3296 IN PLARGE_INTEGER FileOffset
,
3301 OUT PIO_STATUS_BLOCK IoStatus
,
3302 IN
struct _COMPRESSED_DATA_INFO
*CompressedDataInfo
,
3303 IN ULONG CompressedDataInfoLength
,
3304 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3307 (DDKAPI
*PFAST_IO_MDL_READ_COMPLETE_COMPRESSED
)(
3308 IN
struct _FILE_OBJECT
*FileObject
,
3310 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3313 (DDKAPI
*PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED
)(
3314 IN
struct _FILE_OBJECT
*FileObject
,
3315 IN PLARGE_INTEGER FileOffset
,
3317 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3320 (DDKAPI
*PFAST_IO_QUERY_OPEN
)(
3321 IN
struct _IRP
*Irp
,
3322 OUT PFILE_NETWORK_OPEN_INFORMATION NetworkInformation
,
3323 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3326 (DDKAPI
*PFAST_IO_RELEASE_FOR_MOD_WRITE
)(
3327 IN
struct _FILE_OBJECT
*FileObject
,
3328 IN
struct _ERESOURCE
*ResourceToRelease
,
3329 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3332 (DDKAPI
*PFAST_IO_ACQUIRE_FOR_CCFLUSH
)(
3333 IN
struct _FILE_OBJECT
*FileObject
,
3334 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3337 (DDKAPI
*PFAST_IO_RELEASE_FOR_CCFLUSH
) (
3338 IN
struct _FILE_OBJECT
*FileObject
,
3339 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3341 typedef struct _FAST_IO_DISPATCH
{
3342 ULONG SizeOfFastIoDispatch
;
3343 PFAST_IO_CHECK_IF_POSSIBLE FastIoCheckIfPossible
;
3344 PFAST_IO_READ FastIoRead
;
3345 PFAST_IO_WRITE FastIoWrite
;
3346 PFAST_IO_QUERY_BASIC_INFO FastIoQueryBasicInfo
;
3347 PFAST_IO_QUERY_STANDARD_INFO FastIoQueryStandardInfo
;
3348 PFAST_IO_LOCK FastIoLock
;
3349 PFAST_IO_UNLOCK_SINGLE FastIoUnlockSingle
;
3350 PFAST_IO_UNLOCK_ALL FastIoUnlockAll
;
3351 PFAST_IO_UNLOCK_ALL_BY_KEY FastIoUnlockAllByKey
;
3352 PFAST_IO_DEVICE_CONTROL FastIoDeviceControl
;
3353 PFAST_IO_ACQUIRE_FILE AcquireFileForNtCreateSection
;
3354 PFAST_IO_RELEASE_FILE ReleaseFileForNtCreateSection
;
3355 PFAST_IO_DETACH_DEVICE FastIoDetachDevice
;
3356 PFAST_IO_QUERY_NETWORK_OPEN_INFO FastIoQueryNetworkOpenInfo
;
3357 PFAST_IO_ACQUIRE_FOR_MOD_WRITE AcquireForModWrite
;
3358 PFAST_IO_MDL_READ MdlRead
;
3359 PFAST_IO_MDL_READ_COMPLETE MdlReadComplete
;
3360 PFAST_IO_PREPARE_MDL_WRITE PrepareMdlWrite
;
3361 PFAST_IO_MDL_WRITE_COMPLETE MdlWriteComplete
;
3362 PFAST_IO_READ_COMPRESSED FastIoReadCompressed
;
3363 PFAST_IO_WRITE_COMPRESSED FastIoWriteCompressed
;
3364 PFAST_IO_MDL_READ_COMPLETE_COMPRESSED MdlReadCompleteCompressed
;
3365 PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED MdlWriteCompleteCompressed
;
3366 PFAST_IO_QUERY_OPEN FastIoQueryOpen
;
3367 PFAST_IO_RELEASE_FOR_MOD_WRITE ReleaseForModWrite
;
3368 PFAST_IO_ACQUIRE_FOR_CCFLUSH AcquireForCcFlush
;
3369 PFAST_IO_RELEASE_FOR_CCFLUSH ReleaseForCcFlush
;
3370 } FAST_IO_DISPATCH
, *PFAST_IO_DISPATCH
;
3372 typedef struct _SECTION_OBJECT_POINTERS
{
3373 PVOID DataSectionObject
;
3374 PVOID SharedCacheMap
;
3375 PVOID ImageSectionObject
;
3376 } SECTION_OBJECT_POINTERS
, *PSECTION_OBJECT_POINTERS
;
3378 typedef struct _IO_COMPLETION_CONTEXT
{
3381 } IO_COMPLETION_CONTEXT
, *PIO_COMPLETION_CONTEXT
;
3383 /* FILE_OBJECT.Flags */
3385 #define FO_FILE_OPEN 0x00000001
3386 #define FO_SYNCHRONOUS_IO 0x00000002
3387 #define FO_ALERTABLE_IO 0x00000004
3388 #define FO_NO_INTERMEDIATE_BUFFERING 0x00000008
3389 #define FO_WRITE_THROUGH 0x00000010
3390 #define FO_SEQUENTIAL_ONLY 0x00000020
3391 #define FO_CACHE_SUPPORTED 0x00000040
3392 #define FO_NAMED_PIPE 0x00000080
3393 #define FO_STREAM_FILE 0x00000100
3394 #define FO_MAILSLOT 0x00000200
3395 #define FO_GENERATE_AUDIT_ON_CLOSE 0x00000400
3396 #define FO_DIRECT_DEVICE_OPEN 0x00000800
3397 #define FO_FILE_MODIFIED 0x00001000
3398 #define FO_FILE_SIZE_CHANGED 0x00002000
3399 #define FO_CLEANUP_COMPLETE 0x00004000
3400 #define FO_TEMPORARY_FILE 0x00008000
3401 #define FO_DELETE_ON_CLOSE 0x00010000
3402 #define FO_OPENED_CASE_SENSITIVE 0x00020000
3403 #define FO_HANDLE_CREATED 0x00040000
3404 #define FO_FILE_FAST_IO_READ 0x00080000
3405 #define FO_RANDOM_ACCESS 0x00100000
3406 #define FO_FILE_OPEN_CANCELLED 0x00200000
3407 #define FO_VOLUME_OPEN 0x00400000
3408 #define FO_FILE_OBJECT_HAS_EXTENSION 0x00800000
3409 #define FO_REMOTE_ORIGIN 0x01000000
3411 typedef struct _FILE_OBJECT
3415 PDEVICE_OBJECT DeviceObject
;
3419 PSECTION_OBJECT_POINTERS SectionObjectPointer
;
3420 PVOID PrivateCacheMap
;
3421 NTSTATUS FinalStatus
;
3422 struct _FILE_OBJECT
*RelatedFileObject
;
3423 BOOLEAN LockOperation
;
3424 BOOLEAN DeletePending
;
3426 BOOLEAN WriteAccess
;
3427 BOOLEAN DeleteAccess
;
3429 BOOLEAN SharedWrite
;
3430 BOOLEAN SharedDelete
;
3432 UNICODE_STRING FileName
;
3433 LARGE_INTEGER CurrentByteOffset
;
3434 __volatile ULONG Waiters
;
3435 __volatile ULONG Busy
;
3439 __volatile PIO_COMPLETION_CONTEXT CompletionContext
;
3440 KSPIN_LOCK IrpListLock
;
3442 __volatile PVOID FileObjectExtension
;
3444 typedef struct _FILE_OBJECT
*PFILE_OBJECT
;
3446 typedef enum _SECURITY_OPERATION_CODE
{
3447 SetSecurityDescriptor
,
3448 QuerySecurityDescriptor
,
3449 DeleteSecurityDescriptor
,
3450 AssignSecurityDescriptor
3451 } SECURITY_OPERATION_CODE
, *PSECURITY_OPERATION_CODE
;
3453 #define INITIAL_PRIVILEGE_COUNT 3
3455 typedef struct _INITIAL_PRIVILEGE_SET
{
3456 ULONG PrivilegeCount
;
3458 LUID_AND_ATTRIBUTES Privilege
[INITIAL_PRIVILEGE_COUNT
];
3459 } INITIAL_PRIVILEGE_SET
, * PINITIAL_PRIVILEGE_SET
;
3461 #define SE_MIN_WELL_KNOWN_PRIVILEGE 2
3462 #define SE_CREATE_TOKEN_PRIVILEGE 2
3463 #define SE_ASSIGNPRIMARYTOKEN_PRIVILEGE 3
3464 #define SE_LOCK_MEMORY_PRIVILEGE 4
3465 #define SE_INCREASE_QUOTA_PRIVILEGE 5
3466 #define SE_UNSOLICITED_INPUT_PRIVILEGE 6
3467 #define SE_MACHINE_ACCOUNT_PRIVILEGE 6
3468 #define SE_TCB_PRIVILEGE 7
3469 #define SE_SECURITY_PRIVILEGE 8
3470 #define SE_TAKE_OWNERSHIP_PRIVILEGE 9
3471 #define SE_LOAD_DRIVER_PRIVILEGE 10
3472 #define SE_SYSTEM_PROFILE_PRIVILEGE 11
3473 #define SE_SYSTEMTIME_PRIVILEGE 12
3474 #define SE_PROF_SINGLE_PROCESS_PRIVILEGE 13
3475 #define SE_INC_BASE_PRIORITY_PRIVILEGE 14
3476 #define SE_CREATE_PAGEFILE_PRIVILEGE 15
3477 #define SE_CREATE_PERMANENT_PRIVILEGE 16
3478 #define SE_BACKUP_PRIVILEGE 17
3479 #define SE_RESTORE_PRIVILEGE 18
3480 #define SE_SHUTDOWN_PRIVILEGE 19
3481 #define SE_DEBUG_PRIVILEGE 20
3482 #define SE_AUDIT_PRIVILEGE 21
3483 #define SE_SYSTEM_ENVIRONMENT_PRIVILEGE 22
3484 #define SE_CHANGE_NOTIFY_PRIVILEGE 23
3485 #define SE_REMOTE_SHUTDOWN_PRIVILEGE 24
3486 #define SE_UNDOCK_PRIVILEGE 25
3487 #define SE_SYNC_AGENT_PRIVILEGE 26
3488 #define SE_ENABLE_DELEGATION_PRIVILEGE 27
3489 #define SE_MANAGE_VOLUME_PRIVILEGE 28
3490 #define SE_IMPERSONATE_PRIVILEGE 29
3491 #define SE_CREATE_GLOBAL_PRIVILEGE 30
3492 #define SE_MAX_WELL_KNOWN_PRIVILEGE SE_CREATE_GLOBAL_PRIVILEGE
3494 typedef struct _SECURITY_SUBJECT_CONTEXT
{
3495 PACCESS_TOKEN ClientToken
;
3496 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
;
3497 PACCESS_TOKEN PrimaryToken
;
3498 PVOID ProcessAuditId
;
3499 } SECURITY_SUBJECT_CONTEXT
, *PSECURITY_SUBJECT_CONTEXT
;
3501 #include <pshpack4.h>
3502 typedef struct _ACCESS_STATE
{
3504 BOOLEAN SecurityEvaluated
;
3505 BOOLEAN GenerateAudit
;
3506 BOOLEAN GenerateOnClose
;
3507 BOOLEAN PrivilegesAllocated
;
3509 ACCESS_MASK RemainingDesiredAccess
;
3510 ACCESS_MASK PreviouslyGrantedAccess
;
3511 ACCESS_MASK OriginalDesiredAccess
;
3512 SECURITY_SUBJECT_CONTEXT SubjectSecurityContext
;
3513 PSECURITY_DESCRIPTOR SecurityDescriptor
;
3516 INITIAL_PRIVILEGE_SET InitialPrivilegeSet
;
3517 PRIVILEGE_SET PrivilegeSet
;
3520 BOOLEAN AuditPrivileges
;
3521 UNICODE_STRING ObjectName
;
3522 UNICODE_STRING ObjectTypeName
;
3523 } ACCESS_STATE
, *PACCESS_STATE
;
3524 #include <poppack.h>
3526 typedef struct _IO_SECURITY_CONTEXT
{
3527 PSECURITY_QUALITY_OF_SERVICE SecurityQos
;
3528 PACCESS_STATE AccessState
;
3529 ACCESS_MASK DesiredAccess
;
3530 ULONG FullCreateOptions
;
3531 } IO_SECURITY_CONTEXT
, *PIO_SECURITY_CONTEXT
;
3533 #define IO_TYPE_ADAPTER 1
3534 #define IO_TYPE_CONTROLLER 2
3535 #define IO_TYPE_DEVICE 3
3536 #define IO_TYPE_DRIVER 4
3537 #define IO_TYPE_FILE 5
3538 #define IO_TYPE_IRP 6
3539 #define IO_TYPE_MASTER_ADAPTER 7
3540 #define IO_TYPE_OPEN_PACKET 8
3541 #define IO_TYPE_TIMER 9
3542 #define IO_TYPE_VPB 10
3543 #define IO_TYPE_ERROR_LOG 11
3544 #define IO_TYPE_ERROR_MESSAGE 12
3545 #define IO_TYPE_DEVICE_OBJECT_EXTENSION 13
3547 #define IO_TYPE_CSQ_IRP_CONTEXT 1
3548 #define IO_TYPE_CSQ 2
3552 typedef struct _IO_CSQ_IRP_CONTEXT
{
3555 struct _IO_CSQ
*Csq
;
3556 } IO_CSQ_IRP_CONTEXT
, *PIO_CSQ_IRP_CONTEXT
;
3559 (DDKAPI
*PIO_CSQ_INSERT_IRP
)(
3560 IN
struct _IO_CSQ
*Csq
,
3564 (DDKAPI
*PIO_CSQ_REMOVE_IRP
)(
3565 IN
struct _IO_CSQ
*Csq
,
3569 (DDKAPI
*PIO_CSQ_PEEK_NEXT_IRP
)(
3570 IN
struct _IO_CSQ
*Csq
,
3572 IN PVOID PeekContext
);
3575 (DDKAPI
*PIO_CSQ_ACQUIRE_LOCK
)(
3576 IN
struct _IO_CSQ
*Csq
,
3580 (DDKAPI
*PIO_CSQ_RELEASE_LOCK
)(
3581 IN
struct _IO_CSQ
*Csq
,
3585 (DDKAPI
*PIO_CSQ_COMPLETE_CANCELED_IRP
)(
3586 IN
struct _IO_CSQ
*Csq
,
3589 typedef struct _IO_CSQ
{
3591 PIO_CSQ_INSERT_IRP CsqInsertIrp
;
3592 PIO_CSQ_REMOVE_IRP CsqRemoveIrp
;
3593 PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp
;
3594 PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock
;
3595 PIO_CSQ_RELEASE_LOCK CsqReleaseLock
;
3596 PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp
;
3597 PVOID ReservePointer
;
3600 #if !defined(_ALPHA_)
3601 #include <pshpack4.h>
3603 typedef struct _IO_STACK_LOCATION
{
3604 UCHAR MajorFunction
;
3605 UCHAR MinorFunction
;
3610 PIO_SECURITY_CONTEXT SecurityContext
;
3612 USHORT POINTER_ALIGNMENT FileAttributes
;
3614 ULONG POINTER_ALIGNMENT EaLength
;
3618 ULONG POINTER_ALIGNMENT Key
;
3619 LARGE_INTEGER ByteOffset
;
3623 ULONG POINTER_ALIGNMENT Key
;
3624 LARGE_INTEGER ByteOffset
;
3628 PUNICODE_STRING FileName
;
3629 FILE_INFORMATION_CLASS FileInformationClass
;
3634 ULONG CompletionFilter
;
3638 FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass
;
3642 FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass
;
3643 PFILE_OBJECT FileObject
;
3644 _ANONYMOUS_UNION
union {
3645 _ANONYMOUS_STRUCT
struct {
3646 BOOLEAN ReplaceIfExists
;
3647 BOOLEAN AdvanceOnly
;
3650 HANDLE DeleteHandle
;
3664 FS_INFORMATION_CLASS POINTER_ALIGNMENT FsInformationClass
;
3668 FS_INFORMATION_CLASS FsInformationClass
;
3671 ULONG OutputBufferLength
;
3672 ULONG InputBufferLength
;
3673 ULONG FsControlCode
;
3674 PVOID Type3InputBuffer
;
3675 } FileSystemControl
;
3677 PLARGE_INTEGER Length
;
3679 LARGE_INTEGER ByteOffset
;
3682 ULONG OutputBufferLength
;
3683 ULONG POINTER_ALIGNMENT InputBufferLength
;
3684 ULONG POINTER_ALIGNMENT IoControlCode
;
3685 PVOID Type3InputBuffer
;
3688 SECURITY_INFORMATION SecurityInformation
;
3689 ULONG POINTER_ALIGNMENT Length
;
3692 SECURITY_INFORMATION SecurityInformation
;
3693 PSECURITY_DESCRIPTOR SecurityDescriptor
;
3697 PDEVICE_OBJECT DeviceObject
;
3701 PDEVICE_OBJECT DeviceObject
;
3704 struct _SCSI_REQUEST_BLOCK
*Srb
;
3709 struct _FILE_GET_QUOTA_INFORMATION
*SidList
;
3710 ULONG SidListLength
;
3716 DEVICE_RELATION_TYPE Type
;
3717 } QueryDeviceRelations
;
3719 CONST GUID
*InterfaceType
;
3722 PINTERFACE Interface
;
3723 PVOID InterfaceSpecificData
;
3726 PDEVICE_CAPABILITIES Capabilities
;
3727 } DeviceCapabilities
;
3729 PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList
;
3730 } FilterResourceRequirements
;
3735 ULONG POINTER_ALIGNMENT Length
;
3741 BUS_QUERY_ID_TYPE IdType
;
3744 DEVICE_TEXT_TYPE DeviceTextType
;
3745 LCID POINTER_ALIGNMENT LocaleId
;
3749 BOOLEAN Reserved
[3];
3750 DEVICE_USAGE_NOTIFICATION_TYPE POINTER_ALIGNMENT Type
;
3751 } UsageNotification
;
3753 SYSTEM_POWER_STATE PowerState
;
3756 PPOWER_SEQUENCE PowerSequence
;
3759 ULONG SystemContext
;
3760 POWER_STATE_TYPE POINTER_ALIGNMENT Type
;
3761 POWER_STATE POINTER_ALIGNMENT State
;
3762 POWER_ACTION POINTER_ALIGNMENT ShutdownType
;
3765 PCM_RESOURCE_LIST AllocatedResources
;
3766 PCM_RESOURCE_LIST AllocatedResourcesTranslated
;
3769 ULONG_PTR ProviderId
;
3781 PDEVICE_OBJECT DeviceObject
;
3782 PFILE_OBJECT FileObject
;
3783 PIO_COMPLETION_ROUTINE CompletionRoutine
;
3785 } IO_STACK_LOCATION
, *PIO_STACK_LOCATION
;
3786 #if !defined(_ALPHA_)
3787 #include <poppack.h>
3790 /* IO_STACK_LOCATION.Control */
3792 #define SL_PENDING_RETURNED 0x01
3793 #define SL_INVOKE_ON_CANCEL 0x20
3794 #define SL_INVOKE_ON_SUCCESS 0x40
3795 #define SL_INVOKE_ON_ERROR 0x80
3797 /* IO_STACK_LOCATION.Parameters.ReadWriteControl.WhichSpace */
3799 #define PCI_WHICHSPACE_CONFIG 0x0
3800 #define PCI_WHICHSPACE_ROM 0x52696350 /* 'PciR' */
3802 typedef enum _KEY_INFORMATION_CLASS
{
3803 KeyBasicInformation
,
3807 KeyCachedInformation
,
3809 } KEY_INFORMATION_CLASS
;
3811 typedef struct _KEY_BASIC_INFORMATION
{
3812 LARGE_INTEGER LastWriteTime
;
3816 } KEY_BASIC_INFORMATION
, *PKEY_BASIC_INFORMATION
;
3818 typedef struct _KEY_FULL_INFORMATION
{
3819 LARGE_INTEGER LastWriteTime
;
3827 ULONG MaxValueNameLen
;
3828 ULONG MaxValueDataLen
;
3830 } KEY_FULL_INFORMATION
, *PKEY_FULL_INFORMATION
;
3832 typedef struct _KEY_NODE_INFORMATION
{
3833 LARGE_INTEGER LastWriteTime
;
3839 } KEY_NODE_INFORMATION
, *PKEY_NODE_INFORMATION
;
3841 typedef struct _KEY_VALUE_BASIC_INFORMATION
{
3846 } KEY_VALUE_BASIC_INFORMATION
, *PKEY_VALUE_BASIC_INFORMATION
;
3848 typedef struct _KEY_VALUE_FULL_INFORMATION
{
3855 } KEY_VALUE_FULL_INFORMATION
, *PKEY_VALUE_FULL_INFORMATION
;
3857 typedef struct _KEY_VALUE_PARTIAL_INFORMATION
{
3862 } KEY_VALUE_PARTIAL_INFORMATION
, *PKEY_VALUE_PARTIAL_INFORMATION
;
3864 typedef struct _KEY_VALUE_PARTIAL_INFORMATION_ALIGN64
{
3868 } KEY_VALUE_PARTIAL_INFORMATION_ALIGN64
, *PKEY_VALUE_PARTIAL_INFORMATION_ALIGN64
;
3870 typedef struct _KEY_VALUE_ENTRY
{
3871 PUNICODE_STRING ValueName
;
3875 } KEY_VALUE_ENTRY
, *PKEY_VALUE_ENTRY
;
3877 typedef enum _KEY_VALUE_INFORMATION_CLASS
{
3878 KeyValueBasicInformation
,
3879 KeyValueFullInformation
,
3880 KeyValuePartialInformation
,
3881 KeyValueFullInformationAlign64
,
3882 KeyValuePartialInformationAlign64
3883 } KEY_VALUE_INFORMATION_CLASS
;
3885 typedef struct _KEY_WRITE_TIME_INFORMATION
{
3886 LARGE_INTEGER LastWriteTime
;
3887 } KEY_WRITE_TIME_INFORMATION
, *PKEY_WRITE_TIME_INFORMATION
;
3889 typedef struct _KEY_USER_FLAGS_INFORMATION
{
3891 } KEY_USER_FLAGS_INFORMATION
, *PKEY_USER_FLAGS_INFORMATION
;
3893 typedef enum _KEY_SET_INFORMATION_CLASS
{
3894 KeyWriteTimeInformation
,
3895 KeyUserFlagsInformation
,
3897 } KEY_SET_INFORMATION_CLASS
;
3899 #define REG_CREATED_NEW_KEY 0x00000001L
3900 #define REG_OPENED_EXISTING_KEY 0x00000002L
3903 /* KEY_VALUE_Xxx.Type */
3907 #define REG_EXPAND_SZ 2
3908 #define REG_BINARY 3
3910 #define REG_DWORD_LITTLE_ENDIAN 4
3911 #define REG_DWORD_BIG_ENDIAN 5
3913 #define REG_MULTI_SZ 7
3914 #define REG_RESOURCE_LIST 8
3915 #define REG_FULL_RESOURCE_DESCRIPTOR 9
3916 #define REG_RESOURCE_REQUIREMENTS_LIST 10
3917 #define REG_QWORD 11
3918 #define REG_QWORD_LITTLE_ENDIAN 11
3920 #define PCI_TYPE0_ADDRESSES 6
3921 #define PCI_TYPE1_ADDRESSES 2
3922 #define PCI_TYPE2_ADDRESSES 5
3924 typedef struct _PCI_COMMON_CONFIG
{
3933 UCHAR CacheLineSize
;
3938 struct _PCI_HEADER_TYPE_0
{
3939 ULONG BaseAddresses
[PCI_TYPE0_ADDRESSES
];
3943 ULONG ROMBaseAddress
;
3944 UCHAR CapabilitiesPtr
;
3947 UCHAR InterruptLine
;
3950 UCHAR MaximumLatency
;
3952 struct _PCI_HEADER_TYPE_1
{
3953 ULONG BaseAddresses
[PCI_TYPE1_ADDRESSES
];
3956 UCHAR SubordinateBus
;
3957 UCHAR SecondaryLatency
;
3960 USHORT SecondaryStatus
;
3963 USHORT PrefetchBase
;
3964 USHORT PrefetchLimit
;
3965 ULONG PrefetchBaseUpper32
;
3966 ULONG PrefetchLimitUpper32
;
3967 USHORT IOBaseUpper16
;
3968 USHORT IOLimitUpper16
;
3969 UCHAR CapabilitiesPtr
;
3971 ULONG ROMBaseAddress
;
3972 UCHAR InterruptLine
;
3974 USHORT BridgeControl
;
3976 struct _PCI_HEADER_TYPE_2
{
3977 ULONG SocketRegistersBaseAddress
;
3978 UCHAR CapabilitiesPtr
;
3980 USHORT SecondaryStatus
;
3983 UCHAR SubordinateBus
;
3984 UCHAR SecondaryLatency
;
3988 } Range
[PCI_TYPE2_ADDRESSES
- 1];
3989 UCHAR InterruptLine
;
3991 USHORT BridgeControl
;
3994 UCHAR DeviceSpecific
[192];
3995 } PCI_COMMON_CONFIG
, *PPCI_COMMON_CONFIG
;
3997 /* PCI_COMMON_CONFIG.Command */
3999 #define PCI_ENABLE_IO_SPACE 0x0001
4000 #define PCI_ENABLE_MEMORY_SPACE 0x0002
4001 #define PCI_ENABLE_BUS_MASTER 0x0004
4002 #define PCI_ENABLE_SPECIAL_CYCLES 0x0008
4003 #define PCI_ENABLE_WRITE_AND_INVALIDATE 0x0010
4004 #define PCI_ENABLE_VGA_COMPATIBLE_PALETTE 0x0020
4005 #define PCI_ENABLE_PARITY 0x0040
4006 #define PCI_ENABLE_WAIT_CYCLE 0x0080
4007 #define PCI_ENABLE_SERR 0x0100
4008 #define PCI_ENABLE_FAST_BACK_TO_BACK 0x0200
4010 /* PCI_COMMON_CONFIG.Status */
4012 #define PCI_STATUS_CAPABILITIES_LIST 0x0010
4013 #define PCI_STATUS_66MHZ_CAPABLE 0x0020
4014 #define PCI_STATUS_UDF_SUPPORTED 0x0040
4015 #define PCI_STATUS_FAST_BACK_TO_BACK 0x0080
4016 #define PCI_STATUS_DATA_PARITY_DETECTED 0x0100
4017 #define PCI_STATUS_DEVSEL 0x0600
4018 #define PCI_STATUS_SIGNALED_TARGET_ABORT 0x0800
4019 #define PCI_STATUS_RECEIVED_TARGET_ABORT 0x1000
4020 #define PCI_STATUS_RECEIVED_MASTER_ABORT 0x2000
4021 #define PCI_STATUS_SIGNALED_SYSTEM_ERROR 0x4000
4022 #define PCI_STATUS_DETECTED_PARITY_ERROR 0x8000
4024 /* PCI_COMMON_CONFIG.HeaderType */
4026 #define PCI_MULTIFUNCTION 0x80
4027 #define PCI_DEVICE_TYPE 0x00
4028 #define PCI_BRIDGE_TYPE 0x01
4029 #define PCI_CARDBUS_BRIDGE_TYPE 0x02
4031 #define PCI_CONFIGURATION_TYPE(PciData) \
4032 (((PPCI_COMMON_CONFIG) (PciData))->HeaderType & ~PCI_MULTIFUNCTION)
4034 #define PCI_MULTIFUNCTION_DEVICE(PciData) \
4035 ((((PPCI_COMMON_CONFIG) (PciData))->HeaderType & PCI_MULTIFUNCTION) != 0)
4037 /* PCI device classes */
4039 #define PCI_CLASS_PRE_20 0x00
4040 #define PCI_CLASS_MASS_STORAGE_CTLR 0x01
4041 #define PCI_CLASS_NETWORK_CTLR 0x02
4042 #define PCI_CLASS_DISPLAY_CTLR 0x03
4043 #define PCI_CLASS_MULTIMEDIA_DEV 0x04
4044 #define PCI_CLASS_MEMORY_CTLR 0x05
4045 #define PCI_CLASS_BRIDGE_DEV 0x06
4046 #define PCI_CLASS_SIMPLE_COMMS_CTLR 0x07
4047 #define PCI_CLASS_BASE_SYSTEM_DEV 0x08
4048 #define PCI_CLASS_INPUT_DEV 0x09
4049 #define PCI_CLASS_DOCKING_STATION 0x0a
4050 #define PCI_CLASS_PROCESSOR 0x0b
4051 #define PCI_CLASS_SERIAL_BUS_CTLR 0x0c
4053 /* PCI device subclasses for class 0 */
4055 #define PCI_SUBCLASS_PRE_20_NON_VGA 0x00
4056 #define PCI_SUBCLASS_PRE_20_VGA 0x01
4058 /* PCI device subclasses for class 1 (mass storage controllers)*/
4060 #define PCI_SUBCLASS_MSC_SCSI_BUS_CTLR 0x00
4061 #define PCI_SUBCLASS_MSC_IDE_CTLR 0x01
4062 #define PCI_SUBCLASS_MSC_FLOPPY_CTLR 0x02
4063 #define PCI_SUBCLASS_MSC_IPI_CTLR 0x03
4064 #define PCI_SUBCLASS_MSC_RAID_CTLR 0x04
4065 #define PCI_SUBCLASS_MSC_OTHER 0x80
4067 /* PCI device subclasses for class 2 (network controllers)*/
4069 #define PCI_SUBCLASS_NET_ETHERNET_CTLR 0x00
4070 #define PCI_SUBCLASS_NET_TOKEN_RING_CTLR 0x01
4071 #define PCI_SUBCLASS_NET_FDDI_CTLR 0x02
4072 #define PCI_SUBCLASS_NET_ATM_CTLR 0x03
4073 #define PCI_SUBCLASS_NET_OTHER 0x80
4075 /* PCI device subclasses for class 3 (display controllers)*/
4077 #define PCI_SUBCLASS_VID_VGA_CTLR 0x00
4078 #define PCI_SUBCLASS_VID_XGA_CTLR 0x01
4079 #define PCI_SUBLCASS_VID_3D_CTLR 0x02
4080 #define PCI_SUBCLASS_VID_OTHER 0x80
4082 /* PCI device subclasses for class 4 (multimedia device)*/
4084 #define PCI_SUBCLASS_MM_VIDEO_DEV 0x00
4085 #define PCI_SUBCLASS_MM_AUDIO_DEV 0x01
4086 #define PCI_SUBCLASS_MM_TELEPHONY_DEV 0x02
4087 #define PCI_SUBCLASS_MM_OTHER 0x80
4089 /* PCI device subclasses for class 5 (memory controller)*/
4091 #define PCI_SUBCLASS_MEM_RAM 0x00
4092 #define PCI_SUBCLASS_MEM_FLASH 0x01
4093 #define PCI_SUBCLASS_MEM_OTHER 0x80
4095 /* PCI device subclasses for class 6 (bridge device)*/
4097 #define PCI_SUBCLASS_BR_HOST 0x00
4098 #define PCI_SUBCLASS_BR_ISA 0x01
4099 #define PCI_SUBCLASS_BR_EISA 0x02
4100 #define PCI_SUBCLASS_BR_MCA 0x03
4101 #define PCI_SUBCLASS_BR_PCI_TO_PCI 0x04
4102 #define PCI_SUBCLASS_BR_PCMCIA 0x05
4103 #define PCI_SUBCLASS_BR_NUBUS 0x06
4104 #define PCI_SUBCLASS_BR_CARDBUS 0x07
4105 #define PCI_SUBCLASS_BR_OTHER 0x80
4107 /* PCI device subclasses for class C (serial bus controller)*/
4109 #define PCI_SUBCLASS_SB_IEEE1394 0x00
4110 #define PCI_SUBCLASS_SB_ACCESS 0x01
4111 #define PCI_SUBCLASS_SB_SSA 0x02
4112 #define PCI_SUBCLASS_SB_USB 0x03
4113 #define PCI_SUBCLASS_SB_FIBRE_CHANNEL 0x04
4115 #define PCI_MAX_DEVICES 32
4116 #define PCI_MAX_FUNCTION 8
4117 #define PCI_MAX_BRIDGE_NUMBER 0xFF
4118 #define PCI_INVALID_VENDORID 0xFFFF
4119 #define PCI_COMMON_HDR_LENGTH (FIELD_OFFSET(PCI_COMMON_CONFIG, DeviceSpecific))
4121 #define PCI_ADDRESS_IO_SPACE 0x01
4122 #define PCI_ADDRESS_MEMORY_TYPE_MASK 0x06
4123 #define PCI_ADDRESS_MEMORY_PREFETCHABLE 0x08
4124 #define PCI_ADDRESS_IO_ADDRESS_MASK 0xfffffffc
4125 #define PCI_ADDRESS_MEMORY_ADDRESS_MASK 0xfffffff0
4126 #define PCI_ADDRESS_ROM_ADDRESS_MASK 0xfffff800
4128 #define PCI_TYPE_32BIT 0
4129 #define PCI_TYPE_20BIT 2
4130 #define PCI_TYPE_64BIT 4
4132 typedef struct _PCI_SLOT_NUMBER
{
4135 ULONG DeviceNumber
: 5;
4136 ULONG FunctionNumber
: 3;
4137 ULONG Reserved
: 24;
4141 } PCI_SLOT_NUMBER
, *PPCI_SLOT_NUMBER
;
4143 typedef enum _POOL_TYPE
{
4146 NonPagedPoolMustSucceed
,
4148 NonPagedPoolCacheAligned
,
4149 PagedPoolCacheAligned
,
4150 NonPagedPoolCacheAlignedMustS
,
4152 NonPagedPoolSession
= 32,
4154 NonPagedPoolMustSucceedSession
,
4155 DontUseThisTypeSession
,
4156 NonPagedPoolCacheAlignedSession
,
4157 PagedPoolCacheAlignedSession
,
4158 NonPagedPoolCacheAlignedMustSSession
4161 #define POOL_COLD_ALLOCATION 256
4162 #define POOL_QUOTA_FAIL_INSTEAD_OF_RAISE 8
4163 #define POOL_RAISE_IF_ALLOCATION_FAILURE 16
4166 typedef enum _EX_POOL_PRIORITY
{
4168 LowPoolPrioritySpecialPoolOverrun
= 8,
4169 LowPoolPrioritySpecialPoolUnderrun
= 9,
4170 NormalPoolPriority
= 16,
4171 NormalPoolPrioritySpecialPoolOverrun
= 24,
4172 NormalPoolPrioritySpecialPoolUnderrun
= 25,
4173 HighPoolPriority
= 32,
4174 HighPoolPrioritySpecialPoolOverrun
= 40,
4175 HighPoolPrioritySpecialPoolUnderrun
= 41
4178 /* PRIVILEGE_SET.Control */
4180 #define PRIVILEGE_SET_ALL_NECESSARY 1
4182 typedef struct _RTL_OSVERSIONINFOW
{
4183 ULONG dwOSVersionInfoSize
;
4184 ULONG dwMajorVersion
;
4185 ULONG dwMinorVersion
;
4186 ULONG dwBuildNumber
;
4188 WCHAR szCSDVersion
[128];
4189 } RTL_OSVERSIONINFOW
, *PRTL_OSVERSIONINFOW
;
4191 typedef struct _RTL_OSVERSIONINFOEXW
{
4192 ULONG dwOSVersionInfoSize
;
4193 ULONG dwMajorVersion
;
4194 ULONG dwMinorVersion
;
4195 ULONG dwBuildNumber
;
4197 WCHAR szCSDVersion
[128];
4198 USHORT wServicePackMajor
;
4199 USHORT wServicePackMinor
;
4203 } RTL_OSVERSIONINFOEXW
, *PRTL_OSVERSIONINFOEXW
;
4208 VerSetConditionMask(
4209 IN ULONGLONG ConditionMask
,
4211 IN UCHAR Condition
);
4213 #define VER_SET_CONDITION(ConditionMask, TypeBitMask, ComparisonType) \
4214 ((ConditionMask) = VerSetConditionMask((ConditionMask), \
4215 (TypeBitMask), (ComparisonType)))
4217 /* RtlVerifyVersionInfo() TypeMask */
4219 #define VER_MINORVERSION 0x0000001
4220 #define VER_MAJORVERSION 0x0000002
4221 #define VER_BUILDNUMBER 0x0000004
4222 #define VER_PLATFORMID 0x0000008
4223 #define VER_SERVICEPACKMINOR 0x0000010
4224 #define VER_SERVICEPACKMAJOR 0x0000020
4225 #define VER_SUITENAME 0x0000040
4226 #define VER_PRODUCT_TYPE 0x0000080
4228 /* RtlVerifyVersionInfo() ComparisonType */
4231 #define VER_GREATER 2
4232 #define VER_GREATER_EQUAL 3
4234 #define VER_LESS_EQUAL 5
4238 #define VER_CONDITION_MASK 7
4239 #define VER_NUM_BITS_PER_CONDITION_MASK 3
4241 typedef struct _RTL_BITMAP
{
4244 } RTL_BITMAP
, *PRTL_BITMAP
;
4246 typedef struct _RTL_BITMAP_RUN
{
4247 ULONG StartingIndex
;
4249 } RTL_BITMAP_RUN
, *PRTL_BITMAP_RUN
;
4252 (NTAPI
*PRTL_CONFLICT_RANGE_CALLBACK
) (
4254 struct _RTL_RANGE
*Range
4258 (DDKAPI
*PRTL_QUERY_REGISTRY_ROUTINE
)(
4262 IN ULONG ValueLength
,
4264 IN PVOID EntryContext
);
4266 #define RTL_REGISTRY_ABSOLUTE 0
4267 #define RTL_REGISTRY_SERVICES 1
4268 #define RTL_REGISTRY_CONTROL 2
4269 #define RTL_REGISTRY_WINDOWS_NT 3
4270 #define RTL_REGISTRY_DEVICEMAP 4
4271 #define RTL_REGISTRY_USER 5
4272 #define RTL_REGISTRY_HANDLE 0x40000000
4273 #define RTL_REGISTRY_OPTIONAL 0x80000000
4275 /* RTL_QUERY_REGISTRY_TABLE.Flags */
4276 #define RTL_QUERY_REGISTRY_SUBKEY 0x00000001
4277 #define RTL_QUERY_REGISTRY_TOPKEY 0x00000002
4278 #define RTL_QUERY_REGISTRY_REQUIRED 0x00000004
4279 #define RTL_QUERY_REGISTRY_NOVALUE 0x00000008
4280 #define RTL_QUERY_REGISTRY_NOEXPAND 0x00000010
4281 #define RTL_QUERY_REGISTRY_DIRECT 0x00000020
4282 #define RTL_QUERY_REGISTRY_DELETE 0x00000040
4284 typedef struct _RTL_QUERY_REGISTRY_TABLE
{
4285 PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine
;
4291 ULONG DefaultLength
;
4292 } RTL_QUERY_REGISTRY_TABLE
, *PRTL_QUERY_REGISTRY_TABLE
;
4294 typedef struct _TIME_FIELDS
{
4301 CSHORT Milliseconds
;
4303 } TIME_FIELDS
, *PTIME_FIELDS
;
4306 (DDKAPI
*PALLOCATE_FUNCTION
)(
4307 IN POOL_TYPE PoolType
,
4308 IN SIZE_T NumberOfBytes
,
4312 (DDKAPI
*PFREE_FUNCTION
)(
4315 typedef struct _GENERAL_LOOKASIDE
{
4316 SLIST_HEADER ListHead
;
4318 USHORT MaximumDepth
;
4319 ULONG TotalAllocates
;
4321 ULONG AllocateMisses
;
4332 PALLOCATE_FUNCTION Allocate
;
4333 PFREE_FUNCTION Free
;
4334 LIST_ENTRY ListEntry
;
4335 ULONG LastTotalAllocates
;
4337 ULONG LastAllocateMisses
;
4338 ULONG LastAllocateHits
;
4341 } GENERAL_LOOKASIDE
, *PGENERAL_LOOKASIDE
;
4343 typedef struct _NPAGED_LOOKASIDE_LIST
{
4344 GENERAL_LOOKASIDE L
;
4345 KSPIN_LOCK Obsoleted
;
4346 } NPAGED_LOOKASIDE_LIST
, *PNPAGED_LOOKASIDE_LIST
;
4348 typedef struct _PAGED_LOOKASIDE_LIST
{
4349 GENERAL_LOOKASIDE L
;
4350 FAST_MUTEX Obsoleted
;
4351 } PAGED_LOOKASIDE_LIST
, *PPAGED_LOOKASIDE_LIST
;
4353 typedef struct _CALLBACK_OBJECT
*PCALLBACK_OBJECT
;
4356 (DDKAPI
*PCALLBACK_FUNCTION
)(
4357 IN PVOID CallbackContext
,
4359 IN PVOID Argument2
);
4361 typedef enum _EVENT_TYPE
{
4363 SynchronizationEvent
4366 typedef enum _KWAIT_REASON
{
4404 typedef struct _KWAIT_BLOCK
{
4405 LIST_ENTRY WaitListEntry
;
4406 struct _KTHREAD
* RESTRICTED_POINTER Thread
;
4408 struct _KWAIT_BLOCK
* RESTRICTED_POINTER NextWaitBlock
;
4412 } KWAIT_BLOCK
, *PKWAIT_BLOCK
, *RESTRICTED_POINTER PRKWAIT_BLOCK
;
4414 typedef struct _IO_REMOVE_LOCK_TRACKING_BLOCK
* PIO_REMOVE_LOCK_TRACKING_BLOCK
;
4416 typedef struct _IO_REMOVE_LOCK_COMMON_BLOCK
{
4418 BOOLEAN Reserved
[3];
4419 __volatile LONG IoCount
;
4421 } IO_REMOVE_LOCK_COMMON_BLOCK
;
4423 typedef struct _IO_REMOVE_LOCK_DBG_BLOCK
{
4426 LONGLONG MaxLockedTicks
;
4428 LIST_ENTRY LockList
;
4430 __volatile LONG LowMemoryCount
;
4433 PIO_REMOVE_LOCK_TRACKING_BLOCK Blocks
;
4434 } IO_REMOVE_LOCK_DBG_BLOCK
;
4436 typedef struct _IO_REMOVE_LOCK
{
4437 IO_REMOVE_LOCK_COMMON_BLOCK Common
;
4439 IO_REMOVE_LOCK_DBG_BLOCK Dbg
;
4441 } IO_REMOVE_LOCK
, *PIO_REMOVE_LOCK
;
4443 typedef struct _IO_WORKITEM
*PIO_WORKITEM
;
4446 (DDKAPI
*PIO_WORKITEM_ROUTINE
)(
4447 IN PDEVICE_OBJECT DeviceObject
,
4450 typedef struct _SHARE_ACCESS
{
4458 } SHARE_ACCESS
, *PSHARE_ACCESS
;
4460 typedef enum _KINTERRUPT_MODE
{
4465 #define THREAD_WAIT_OBJECTS 3
4468 (DDKAPI
*PKINTERRUPT_ROUTINE
)(
4471 typedef enum _KPROFILE_SOURCE
{
4473 ProfileAlignmentFixup
,
4476 ProfileLoadInstructions
,
4477 ProfilePipelineFrozen
,
4478 ProfileBranchInstructions
,
4479 ProfileTotalNonissues
,
4480 ProfileDcacheMisses
,
4481 ProfileIcacheMisses
,
4483 ProfileBranchMispredictions
,
4484 ProfileStoreInstructions
,
4485 ProfileFpInstructions
,
4486 ProfileIntegerInstructions
,
4490 ProfileSpecialInstructions
,
4492 ProfileIcacheIssues
,
4493 ProfileDcacheAccesses
,
4494 ProfileMemoryBarrierCycles
,
4495 ProfileLoadLinkedIssues
,
4499 typedef enum _CREATE_FILE_TYPE
{
4501 CreateFileTypeNamedPipe
,
4502 CreateFileTypeMailslot
4505 typedef struct _CONFIGURATION_INFORMATION
{
4510 ULONG ScsiPortCount
;
4512 ULONG ParallelCount
;
4513 BOOLEAN AtDiskPrimaryAddressClaimed
;
4514 BOOLEAN AtDiskSecondaryAddressClaimed
;
4516 ULONG MediumChangerCount
;
4517 } CONFIGURATION_INFORMATION
, *PCONFIGURATION_INFORMATION
;
4519 typedef enum _CONFIGURATION_TYPE
{
4522 FloatingPointProcessor
,
4532 MultiFunctionAdapter
,
4546 FloppyDiskPeripheral
,
4559 RealModeIrqRoutingTable
,
4561 } CONFIGURATION_TYPE
, *PCONFIGURATION_TYPE
;
4563 #define IO_FORCE_ACCESS_CHECK 0x001
4564 #define IO_NO_PARAMETER_CHECKING 0x100
4567 (DDKAPI
*PIO_QUERY_DEVICE_ROUTINE
)(
4569 IN PUNICODE_STRING PathName
,
4570 IN INTERFACE_TYPE BusType
,
4572 IN PKEY_VALUE_FULL_INFORMATION
*BusInformation
,
4573 IN CONFIGURATION_TYPE ControllerType
,
4574 IN ULONG ControllerNumber
,
4575 IN PKEY_VALUE_FULL_INFORMATION
*ControllerInformation
,
4576 IN CONFIGURATION_TYPE PeripheralType
,
4577 IN ULONG PeripheralNumber
,
4578 IN PKEY_VALUE_FULL_INFORMATION
*PeripheralInformation
);
4580 typedef enum _IO_QUERY_DEVICE_DATA_FORMAT
{
4581 IoQueryDeviceIdentifier
= 0,
4582 IoQueryDeviceConfigurationData
,
4583 IoQueryDeviceComponentInformation
,
4584 IoQueryDeviceMaxData
4585 } IO_QUERY_DEVICE_DATA_FORMAT
, *PIO_QUERY_DEVICE_DATA_FORMAT
;
4587 typedef enum _WORK_QUEUE_TYPE
{
4590 HyperCriticalWorkQueue
,
4595 (DDKAPI
*PWORKER_THREAD_ROUTINE
)(
4596 IN PVOID Parameter
);
4598 typedef struct _WORK_QUEUE_ITEM
{
4600 PWORKER_THREAD_ROUTINE WorkerRoutine
;
4601 __volatile PVOID Parameter
;
4602 } WORK_QUEUE_ITEM
, *PWORK_QUEUE_ITEM
;
4604 typedef enum _KBUGCHECK_CALLBACK_REASON
{
4606 KbCallbackReserved1
,
4607 KbCallbackSecondaryDumpData
,
4609 } KBUGCHECK_CALLBACK_REASON
;
4612 (DDKAPI
*PKBUGCHECK_REASON_CALLBACK_ROUTINE
)(
4613 IN KBUGCHECK_CALLBACK_REASON Reason
,
4614 IN
struct _KBUGCHECK_REASON_CALLBACK_RECORD
*Record
,
4615 IN OUT PVOID ReasonSpecificData
,
4616 IN ULONG ReasonSpecificDataLength
);
4618 typedef struct _KBUGCHECK_REASON_CALLBACK_RECORD
{
4620 PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine
;
4623 KBUGCHECK_CALLBACK_REASON Reason
;
4625 } KBUGCHECK_REASON_CALLBACK_RECORD
, *PKBUGCHECK_REASON_CALLBACK_RECORD
;
4627 typedef enum _KBUGCHECK_BUFFER_DUMP_STATE
{
4633 } KBUGCHECK_BUFFER_DUMP_STATE
;
4636 (DDKAPI
*PKBUGCHECK_CALLBACK_ROUTINE
)(
4640 typedef struct _KBUGCHECK_CALLBACK_RECORD
{
4642 PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine
;
4648 } KBUGCHECK_CALLBACK_RECORD
, *PKBUGCHECK_CALLBACK_RECORD
;
4652 * KeInitializeCallbackRecord(
4653 * IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord)
4655 #define KeInitializeCallbackRecord(CallbackRecord) \
4656 CallbackRecord->State = BufferEmpty;
4658 typedef enum _KDPC_IMPORTANCE
{
4664 typedef enum _MEMORY_CACHING_TYPE_ORIG
{
4665 MmFrameBufferCached
= 2
4666 } MEMORY_CACHING_TYPE_ORIG
;
4668 typedef enum _MEMORY_CACHING_TYPE
{
4669 MmNonCached
= FALSE
,
4671 MmWriteCombined
= MmFrameBufferCached
,
4672 MmHardwareCoherentCached
,
4673 MmNonCachedUnordered
,
4676 } MEMORY_CACHING_TYPE
;
4678 typedef enum _MM_PAGE_PRIORITY
{
4680 NormalPagePriority
= 16,
4681 HighPagePriority
= 32
4684 typedef enum _LOCK_OPERATION
{
4690 typedef enum _MM_SYSTEM_SIZE
{
4696 typedef struct _OBJECT_HANDLE_INFORMATION
{
4697 ULONG HandleAttributes
;
4698 ACCESS_MASK GrantedAccess
;
4699 } OBJECT_HANDLE_INFORMATION
, *POBJECT_HANDLE_INFORMATION
;
4701 typedef struct _CLIENT_ID
{
4702 HANDLE UniqueProcess
;
4703 HANDLE UniqueThread
;
4704 } CLIENT_ID
, *PCLIENT_ID
;
4707 (DDKAPI
*PKSTART_ROUTINE
)(
4708 IN PVOID StartContext
);
4711 (DDKAPI
*PCREATE_PROCESS_NOTIFY_ROUTINE
)(
4713 IN HANDLE ProcessId
,
4717 (DDKAPI
*PCREATE_THREAD_NOTIFY_ROUTINE
)(
4718 IN HANDLE ProcessId
,
4722 typedef struct _IMAGE_INFO
{
4723 _ANONYMOUS_UNION
union {
4725 _ANONYMOUS_STRUCT
struct {
4726 ULONG ImageAddressingMode
: 8;
4727 ULONG SystemModeImage
: 1;
4728 ULONG ImageMappedToAllPids
: 1;
4729 ULONG Reserved
: 22;
4733 ULONG ImageSelector
;
4735 ULONG ImageSectionNumber
;
4736 } IMAGE_INFO
, *PIMAGE_INFO
;
4738 #define IMAGE_ADDRESSING_MODE_32BIT 3
4741 (DDKAPI
*PLOAD_IMAGE_NOTIFY_ROUTINE
)(
4742 IN PUNICODE_STRING FullImageName
,
4743 IN HANDLE ProcessId
,
4744 IN PIMAGE_INFO ImageInfo
);
4746 typedef enum _PROCESSINFOCLASS
{
4747 ProcessBasicInformation
,
4752 ProcessBasePriority
,
4753 ProcessRaisePriority
,
4755 ProcessExceptionPort
,
4757 ProcessLdtInformation
,
4759 ProcessDefaultHardErrorMode
,
4760 ProcessIoPortHandlers
,
4761 ProcessPooledUsageAndLimits
,
4762 ProcessWorkingSetWatch
,
4763 ProcessUserModeIOPL
,
4764 ProcessEnableAlignmentFaultFixup
,
4765 ProcessPriorityClass
,
4766 ProcessWx86Information
,
4768 ProcessAffinityMask
,
4769 ProcessPriorityBoost
,
4771 ProcessSessionInformation
,
4772 ProcessForegroundInformation
,
4773 ProcessWow64Information
,
4774 ProcessImageFileName
,
4775 ProcessLUIDDeviceMapsEnabled
,
4776 ProcessBreakOnTermination
,
4777 ProcessDebugObjectHandle
,
4779 ProcessHandleTracing
,
4781 ProcessExecuteFlags
,
4782 ProcessTlsInformation
,
4784 ProcessImageInformation
,
4786 ProcessPagePriority
,
4787 ProcessInstrumentationCallback
,
4791 typedef enum _THREADINFOCLASS
{
4792 ThreadBasicInformation
,
4797 ThreadImpersonationToken
,
4798 ThreadDescriptorTableEntry
,
4799 ThreadEnableAlignmentFaultFixup
,
4800 ThreadEventPair_Reusable
,
4801 ThreadQuerySetWin32StartAddress
,
4803 ThreadPerformanceCount
,
4804 ThreadAmILastThread
,
4805 ThreadIdealProcessor
,
4806 ThreadPriorityBoost
,
4807 ThreadSetTlsArrayAddress
,
4809 ThreadHideFromDebugger
,
4810 ThreadBreakOnTermination
,
4811 ThreadSwitchLegacyState
,
4813 ThreadLastSystemCall
,
4817 ThreadActualBasePriority
,
4821 typedef struct _PROCESS_BASIC_INFORMATION
4823 NTSTATUS ExitStatus
;
4824 PPEB PebBaseAddress
;
4825 ULONG_PTR AffinityMask
;
4826 KPRIORITY BasePriority
;
4827 ULONG_PTR UniqueProcessId
;
4828 ULONG_PTR InheritedFromUniqueProcessId
;
4829 } PROCESS_BASIC_INFORMATION
,*PPROCESS_BASIC_INFORMATION
;
4831 typedef struct _PROCESS_WS_WATCH_INFORMATION
4835 } PROCESS_WS_WATCH_INFORMATION
, *PPROCESS_WS_WATCH_INFORMATION
;
4837 typedef struct _PROCESS_DEVICEMAP_INFORMATION
4843 HANDLE DirectoryHandle
;
4848 UCHAR DriveType
[32];
4851 } PROCESS_DEVICEMAP_INFORMATION
, *PPROCESS_DEVICEMAP_INFORMATION
;
4853 typedef struct _KERNEL_USER_TIMES
4855 LARGE_INTEGER CreateTime
;
4856 LARGE_INTEGER ExitTime
;
4857 LARGE_INTEGER KernelTime
;
4858 LARGE_INTEGER UserTime
;
4859 } KERNEL_USER_TIMES
, *PKERNEL_USER_TIMES
;
4861 typedef struct _PROCESS_ACCESS_TOKEN
4865 } PROCESS_ACCESS_TOKEN
, *PPROCESS_ACCESS_TOKEN
;
4867 typedef struct _PROCESS_SESSION_INFORMATION
4870 } PROCESS_SESSION_INFORMATION
, *PPROCESS_SESSION_INFORMATION
;
4872 #define ES_SYSTEM_REQUIRED 0x00000001
4873 #define ES_DISPLAY_REQUIRED 0x00000002
4874 #define ES_USER_PRESENT 0x00000004
4875 #define ES_CONTINUOUS 0x80000000
4877 typedef ULONG EXECUTION_STATE
;
4880 (DDKAPI
*PREQUEST_POWER_COMPLETE
)(
4881 IN PDEVICE_OBJECT DeviceObject
,
4882 IN UCHAR MinorFunction
,
4883 IN POWER_STATE PowerState
,
4885 IN PIO_STATUS_BLOCK IoStatus
);
4887 typedef enum _TRACE_INFORMATION_CLASS
{
4890 TraceEnableFlagsClass
,
4891 TraceEnableLevelClass
,
4892 GlobalLoggerHandleClass
,
4893 EventLoggerHandleClass
,
4894 AllLoggerHandlesClass
,
4895 TraceHandleByNameClass
4896 } TRACE_INFORMATION_CLASS
;
4898 typedef enum _REG_NOTIFY_CLASS
4901 RegNtPreDeleteKey
= RegNtDeleteKey
,
4903 RegNtPreSetValueKey
= RegNtSetValueKey
,
4904 RegNtDeleteValueKey
,
4905 RegNtPreDeleteValueKey
= RegNtDeleteValueKey
,
4906 RegNtSetInformationKey
,
4907 RegNtPreSetInformationKey
= RegNtSetInformationKey
,
4909 RegNtPreRenameKey
= RegNtRenameKey
,
4911 RegNtPreEnumerateKey
= RegNtEnumerateKey
,
4912 RegNtEnumerateValueKey
,
4913 RegNtPreEnumerateValueKey
= RegNtEnumerateValueKey
,
4915 RegNtPreQueryKey
= RegNtQueryKey
,
4917 RegNtPreQueryValueKey
= RegNtQueryValueKey
,
4918 RegNtQueryMultipleValueKey
,
4919 RegNtPreQueryMultipleValueKey
= RegNtQueryMultipleValueKey
,
4924 RegNtKeyHandleClose
,
4925 RegNtPreKeyHandleClose
= RegNtKeyHandleClose
,
4927 RegNtPostSetValueKey
,
4928 RegNtPostDeleteValueKey
,
4929 RegNtPostSetInformationKey
,
4931 RegNtPostEnumerateKey
,
4932 RegNtPostEnumerateValueKey
,
4934 RegNtPostQueryValueKey
,
4935 RegNtPostQueryMultipleValueKey
,
4936 RegNtPostKeyHandleClose
,
4937 RegNtPreCreateKeyEx
,
4938 RegNtPostCreateKeyEx
,
4941 } REG_NOTIFY_CLASS
, *PREG_NOTIFY_CLASS
;
4944 (NTAPI
*PEX_CALLBACK_FUNCTION
)(
4945 IN PVOID CallbackContext
,
4950 typedef struct _REG_DELETE_KEY_INFORMATION
4953 } REG_DELETE_KEY_INFORMATION
, *PREG_DELETE_KEY_INFORMATION
;
4955 typedef struct _REG_SET_VALUE_KEY_INFORMATION
4958 PUNICODE_STRING ValueName
;
4963 } REG_SET_VALUE_KEY_INFORMATION
, *PREG_SET_VALUE_KEY_INFORMATION
;
4965 typedef struct _REG_DELETE_VALUE_KEY_INFORMATION
4968 PUNICODE_STRING ValueName
;
4969 } REG_DELETE_VALUE_KEY_INFORMATION
, *PREG_DELETE_VALUE_KEY_INFORMATION
;
4971 typedef struct _REG_SET_INFORMATION_KEY_INFORMATION
4974 KEY_SET_INFORMATION_CLASS KeySetInformationClass
;
4975 PVOID KeySetInformation
;
4976 ULONG KeySetInformationLength
;
4977 } REG_SET_INFORMATION_KEY_INFORMATION
, *PREG_SET_INFORMATION_KEY_INFORMATION
;
4979 typedef struct _REG_ENUMERATE_KEY_INFORMATION
4983 KEY_INFORMATION_CLASS KeyInformationClass
;
4984 PVOID KeyInformation
;
4986 PULONG ResultLength
;
4987 } REG_ENUMERATE_KEY_INFORMATION
, *PREG_ENUMERATE_KEY_INFORMATION
;
4989 typedef struct _REG_ENUMERATE_VALUE_KEY_INFORMATION
4993 KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
;
4994 PVOID KeyValueInformation
;
4996 PULONG ResultLength
;
4997 } REG_ENUMERATE_VALUE_KEY_INFORMATION
, *PREG_ENUMERATE_VALUE_KEY_INFORMATION
;
4999 typedef struct _REG_QUERY_KEY_INFORMATION
5002 KEY_INFORMATION_CLASS KeyInformationClass
;
5003 PVOID KeyInformation
;
5005 PULONG ResultLength
;
5006 } REG_QUERY_KEY_INFORMATION
, *PREG_QUERY_KEY_INFORMATION
;
5008 typedef struct _REG_QUERY_VALUE_KEY_INFORMATION
5011 PUNICODE_STRING ValueName
;
5012 KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
;
5013 PVOID KeyValueInformation
;
5015 PULONG ResultLength
;
5016 } REG_QUERY_VALUE_KEY_INFORMATION
, *PREG_QUERY_VALUE_KEY_INFORMATION
;
5018 typedef struct _REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION
5021 PKEY_VALUE_ENTRY ValueEntries
;
5024 PULONG BufferLength
;
5025 PULONG RequiredBufferLength
;
5026 } REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION
, *PREG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION
;
5028 typedef struct _REG_PRE_CREATE_KEY_INFORMATION
5030 PUNICODE_STRING CompleteName
;
5031 } REG_PRE_CREATE_KEY_INFORMATION
, *PREG_PRE_CREATE_KEY_INFORMATION
;
5033 typedef struct _REG_POST_CREATE_KEY_INFORMATION
5035 PUNICODE_STRING CompleteName
;
5038 } REG_POST_CREATE_KEY_INFORMATION
, *PREG_POST_CREATE_KEY_INFORMATION
;
5040 typedef struct _REG_PRE_OPEN_KEY_INFORMATION
5042 PUNICODE_STRING CompleteName
;
5043 } REG_PRE_OPEN_KEY_INFORMATION
, *PREG_PRE_OPEN_KEY_INFORMATION
;
5045 typedef struct _REG_POST_OPEN_KEY_INFORMATION
5047 PUNICODE_STRING CompleteName
;
5050 } REG_POST_OPEN_KEY_INFORMATION
, *PREG_POST_OPEN_KEY_INFORMATION
;
5052 typedef struct _REG_POST_OPERATION_INFORMATION
5056 } REG_POST_OPERATION_INFORMATION
,*PREG_POST_OPERATION_INFORMATION
;
5058 typedef struct _REG_KEY_HANDLE_CLOSE_INFORMATION
5061 } REG_KEY_HANDLE_CLOSE_INFORMATION
, *PREG_KEY_HANDLE_CLOSE_INFORMATION
;
5064 ** Storage structures
5066 typedef enum _PARTITION_STYLE
{
5067 PARTITION_STYLE_MBR
,
5071 typedef struct _CREATE_DISK_MBR
{
5073 } CREATE_DISK_MBR
, *PCREATE_DISK_MBR
;
5075 typedef struct _CREATE_DISK_GPT
{
5077 ULONG MaxPartitionCount
;
5078 } CREATE_DISK_GPT
, *PCREATE_DISK_GPT
;
5080 typedef struct _CREATE_DISK
{
5081 PARTITION_STYLE PartitionStyle
;
5082 _ANONYMOUS_UNION
union {
5083 CREATE_DISK_MBR Mbr
;
5084 CREATE_DISK_GPT Gpt
;
5086 } CREATE_DISK
, *PCREATE_DISK
;
5088 typedef struct _DISK_SIGNATURE
{
5089 ULONG PartitionStyle
;
5090 _ANONYMOUS_UNION
union {
5099 } DISK_SIGNATURE
, *PDISK_SIGNATURE
;
5102 (FASTCALL
*PTIME_UPDATE_NOTIFY_ROUTINE
)(
5104 IN KPROCESSOR_MODE Mode
);
5106 #define DBG_STATUS_CONTROL_C 1
5107 #define DBG_STATUS_SYSRQ 2
5108 #define DBG_STATUS_BUGCHECK_FIRST 3
5109 #define DBG_STATUS_BUGCHECK_SECOND 4
5110 #define DBG_STATUS_FATAL 5
5111 #define DBG_STATUS_DEBUG_CONTROL 6
5112 #define DBG_STATUS_WORKER 7
5114 typedef struct _PHYSICAL_MEMORY_RANGE
{
5115 PHYSICAL_ADDRESS BaseAddress
;
5116 LARGE_INTEGER NumberOfBytes
;
5117 } PHYSICAL_MEMORY_RANGE
, *PPHYSICAL_MEMORY_RANGE
;
5120 (*PDRIVER_VERIFIER_THUNK_ROUTINE
)(
5123 typedef struct _DRIVER_VERIFIER_THUNK_PAIRS
{
5124 PDRIVER_VERIFIER_THUNK_ROUTINE PristineRoutine
;
5125 PDRIVER_VERIFIER_THUNK_ROUTINE NewRoutine
;
5126 } DRIVER_VERIFIER_THUNK_PAIRS
, *PDRIVER_VERIFIER_THUNK_PAIRS
;
5128 #define DRIVER_VERIFIER_SPECIAL_POOLING 0x0001
5129 #define DRIVER_VERIFIER_FORCE_IRQL_CHECKING 0x0002
5130 #define DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES 0x0004
5131 #define DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS 0x0008
5132 #define DRIVER_VERIFIER_IO_CHECKING 0x0010
5134 #define HASH_STRING_ALGORITHM_DEFAULT 0
5135 #define HASH_STRING_ALGORITHM_X65599 1
5136 #define HASH_STRING_ALGORITHM_INVALID 0xffffffff
5138 typedef enum _SUITE_TYPE
{
5142 CommunicationServer
,
5144 SmallBusinessRestricted
,
5154 (DDKAPI
*PTIMER_APC_ROUTINE
)(
5155 IN PVOID TimerContext
,
5156 IN ULONG TimerLowValue
,
5157 IN LONG TimerHighValue
);
5166 (DDKAPI
*WMI_NOTIFICATION_CALLBACK
)(
5172 ** Architecture specific structures
5177 typedef ULONG PFN_NUMBER
, *PPFN_NUMBER
;
5179 #define PASSIVE_LEVEL 0
5182 #define DISPATCH_LEVEL 2
5183 #define PROFILE_LEVEL 27
5184 #define CLOCK1_LEVEL 28
5185 #define CLOCK2_LEVEL 28
5186 #define IPI_LEVEL 29
5187 #define POWER_LEVEL 30
5188 #define HIGH_LEVEL 31
5190 typedef struct _KPCR_TIB
{
5191 PVOID ExceptionList
; /* 00 */
5192 PVOID StackBase
; /* 04 */
5193 PVOID StackLimit
; /* 08 */
5194 PVOID SubSystemTib
; /* 0C */
5195 _ANONYMOUS_UNION
union {
5196 PVOID FiberData
; /* 10 */
5197 DWORD Version
; /* 10 */
5199 PVOID ArbitraryUserPointer
; /* 14 */
5200 struct _KPCR_TIB
*Self
; /* 18 */
5201 } KPCR_TIB
, *PKPCR_TIB
; /* 1C */
5203 #define PCR_MINOR_VERSION 1
5204 #define PCR_MAJOR_VERSION 1
5206 typedef struct _KPCR
{
5207 KPCR_TIB Tib
; /* 00 */
5208 struct _KPCR
*Self
; /* 1C */
5209 struct _KPRCB
*Prcb
; /* 20 */
5210 KIRQL Irql
; /* 24 */
5212 ULONG IrrActive
; /* 2C */
5214 PVOID KdVersionBlock
; /* 34 */
5215 PUSHORT IDT
; /* 38 */
5216 PUSHORT GDT
; /* 3C */
5217 struct _KTSS
*TSS
; /* 40 */
5218 USHORT MajorVersion
; /* 44 */
5219 USHORT MinorVersion
; /* 46 */
5220 KAFFINITY SetMember
; /* 48 */
5221 ULONG StallScaleFactor
; /* 4C */
5222 UCHAR SpareUnused
; /* 50 */
5223 UCHAR Number
; /* 51 */
5224 } KPCR
, *PKPCR
; /* 54 */
5226 typedef struct _KFLOATING_SAVE
{
5230 ULONG ErrorSelector
;
5235 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
5240 KeGetCurrentProcessorNumber(VOID
)
5242 #if defined(__GNUC__)
5244 __asm__
__volatile__ (
5245 "movl %%fs:%c1, %0\n"
5247 : "i" (FIELD_OFFSET(KPCR
, Number
))
5250 #elif defined(_MSC_VER)
5251 #if _MSC_FULL_VER >= 13012035
5252 return (ULONG
)__readfsbyte(FIELD_OFFSET(KPCR
, Number
));
5254 __asm
{ movzx eax
, _PCR KPCR
.Number
}
5257 #error Unknown compiler
5262 #define PAGE_SIZE 0x1000
5263 #define PAGE_SHIFT 12L
5265 extern NTKERNELAPI PVOID MmHighestUserAddress
;
5266 extern NTKERNELAPI PVOID MmSystemRangeStart
;
5267 extern NTKERNELAPI ULONG_PTR MmUserProbeAddress
;
5269 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
5270 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
5271 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
5272 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
5273 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0C00000
5275 #define KI_USER_SHARED_DATA 0xffdf0000
5276 #define SharedUserData ((KUSER_SHARED_DATA * CONST) KI_USER_SHARED_DATA)
5278 #define EFLAG_SIGN 0x8000
5279 #define EFLAG_ZERO 0x4000
5280 #define EFLAG_SELECT (EFLAG_SIGN | EFLAG_ZERO)
5282 #define RESULT_NEGATIVE ((EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
5283 #define RESULT_ZERO ((~EFLAG_SIGN & EFLAG_ZERO) & EFLAG_SELECT)
5284 #define RESULT_POSITIVE ((~EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
5286 typedef enum _INTERLOCKED_RESULT
{
5287 ResultNegative
= RESULT_NEGATIVE
,
5288 ResultZero
= RESULT_ZERO
,
5289 ResultPositive
= RESULT_POSITIVE
5290 } INTERLOCKED_RESULT
;
5293 (NTAPI
*PciPin2Line
)(
5294 IN
struct _BUS_HANDLER
*BusHandler
,
5295 IN
struct _BUS_HANDLER
*RootHandler
,
5296 IN PCI_SLOT_NUMBER SlotNumber
,
5297 IN PPCI_COMMON_CONFIG PciData
5301 (NTAPI
*PciLine2Pin
)(
5302 IN
struct _BUS_HANDLER
*BusHandler
,
5303 IN
struct _BUS_HANDLER
*RootHandler
,
5304 IN PCI_SLOT_NUMBER SlotNumber
,
5305 IN PPCI_COMMON_CONFIG PciNewData
,
5306 IN PPCI_COMMON_CONFIG PciOldData
5310 (NTAPI
*PciReadWriteConfig
)(
5311 IN
struct _BUS_HANDLER
*BusHandler
,
5312 IN PCI_SLOT_NUMBER Slot
,
5318 #define PCI_DATA_TAG TAG('P', 'C', 'I', ' ')
5319 #define PCI_DATA_VERSION 1
5321 typedef struct _PCIBUSDATA
5325 PciReadWriteConfig ReadConfig
;
5326 PciReadWriteConfig WriteConfig
;
5327 PciPin2Line Pin2Line
;
5328 PciLine2Pin Line2Pin
;
5329 PCI_SLOT_NUMBER ParentSlot
;
5331 } PCIBUSDATA
, *PPCIBUSDATA
;
5339 #if !defined(__INTERLOCKED_DECLARED)
5340 #define __INTERLOCKED_DECLARED
5345 InterlockedIncrement(
5346 IN OUT LONG
volatile *Addend
);
5351 InterlockedDecrement(
5352 IN OUT LONG
volatile *Addend
);
5357 InterlockedCompareExchange(
5358 IN OUT LONG
volatile *Destination
,
5365 InterlockedExchange(
5366 IN OUT LONG
volatile *Destination
,
5372 InterlockedExchangeAdd(
5373 IN OUT LONG
volatile *Addend
,
5378 * InterlockedExchangePointer(
5379 * IN OUT PVOID VOLATILE *Target,
5382 #define InterlockedExchangePointer(Target, Value) \
5383 ((PVOID) InterlockedExchange((PLONG) Target, (LONG) Value))
5387 * InterlockedCompareExchangePointer(
5388 * IN OUT PVOID *Destination,
5389 * IN PVOID Exchange,
5390 * IN PVOID Comparand)
5392 #define InterlockedCompareExchangePointer(Destination, Exchange, Comparand) \
5393 ((PVOID) InterlockedCompareExchange((PLONG) Destination, (LONG) Exchange, (LONG) Comparand))
5395 #define InterlockedExchangeAddSizeT(a, b) InterlockedExchangeAdd((LONG *)a, b)
5396 #define InterlockedIncrementSizeT(a) InterlockedIncrement((LONG *)a)
5397 #define InterlockedDecrementSizeT(a) InterlockedDecrement((LONG *)a)
5399 #endif /* !__INTERLOCKED_DECLARED */
5404 KefAcquireSpinLockAtDpcLevel(
5405 IN PKSPIN_LOCK SpinLock
);
5410 KefReleaseSpinLockFromDpcLevel(
5411 IN PKSPIN_LOCK SpinLock
);
5417 IN PKSPIN_LOCK SpinLock
);
5423 IN PKSPIN_LOCK SpinLock
,
5426 #define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock)
5427 #define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock)
5428 #define KeAcquireSpinLock(a,b) *(b) = KfAcquireSpinLock(a)
5429 #define KeReleaseSpinLock(a,b) KfReleaseSpinLock(a,b)
5431 #define RtlCopyMemoryNonTemporal RtlCopyMemory
5433 #define KeGetDcacheFillSize() 1L
5438 ** Utillity functions
5441 #define ARGUMENT_PRESENT(ArgumentPointer) \
5442 ((CHAR*)((ULONG_PTR)(ArgumentPointer)) != (CHAR*)NULL)
5449 #define BYTE_OFFSET(Va) \
5450 ((ULONG) ((ULONG_PTR) (Va) & (PAGE_SIZE - 1)))
5457 #define BYTES_TO_PAGES(Size) \
5458 ((ULONG) ((ULONG_PTR) (Size) >> PAGE_SHIFT) + (((ULONG) (Size) & (PAGE_SIZE - 1)) != 0))
5462 * CONTAINING_RECORD(
5467 #ifndef CONTAINING_RECORD
5468 #define CONTAINING_RECORD(address, type, field) \
5469 ((type *)(((ULONG_PTR)address) - (ULONG_PTR)(&(((type *)0)->field))))
5477 #ifndef FIELD_OFFSET
5478 #define FIELD_OFFSET(Type, Field) \
5479 ((LONG) (&(((Type *) 0)->Field)))
5487 #define PAGE_ALIGN(Va) \
5488 ((PVOID) ((ULONG_PTR)(Va) & ~(PAGE_SIZE - 1)))
5493 * IN ULONG_PTR Size)
5495 #define ROUND_TO_PAGES(Size) \
5496 ((ULONG_PTR) (((ULONG_PTR) Size + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1)))
5502 IN PVOID FailedAssertion
,
5504 IN ULONG LineNumber
,
5509 #define ASSERT(exp) \
5511 RtlAssert( #exp, __FILE__, __LINE__, NULL ), FALSE : TRUE)
5513 #define ASSERTMSG(msg, exp) \
5515 RtlAssert( #exp, __FILE__, __LINE__, msg ), FALSE : TRUE)
5517 #define RTL_SOFT_ASSERT(exp) \
5518 (VOID)((!(_exp)) ? \
5519 DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n", __FILE__, __LINE__, #exp), FALSE : TRUE)
5521 #define RTL_SOFT_ASSERTMSG(msg, exp) \
5523 DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n Message: %s\n", __FILE__, __LINE__, #exp, (msg)), FALSE : TRUE)
5525 #define RTL_VERIFY(exp) ASSERT(exp)
5526 #define RTL_VERIFYMSG(msg, exp) ASSERT(msg, exp)
5528 #define RTL_SOFT_VERIFY(exp) RTL_SOFT_ASSERT(exp)
5529 #define RTL_SOFT_VERIFYMSG(msg, exp) RTL_SOFT_ASSERTMSG(msg, exp)
5533 #define ASSERT(exp) ((VOID) 0)
5534 #define ASSERTMSG(msg, exp) ((VOID) 0)
5536 #define RTL_SOFT_ASSERT(exp) ((VOID) 0)
5537 #define RTL_SOFT_ASSERTMSG(msg, exp) ((VOID) 0)
5539 #define RTL_VERIFY(exp) ((exp) ? TRUE : FALSE)
5540 #define RTL_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE)
5542 #define RTL_SOFT_VERIFY(exp) ((exp) ? TRUE : FALSE)
5543 #define RTL_SOFT_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE)
5547 /* HACK HACK HACK - GCC (or perhaps LD) is messing this up */
5548 #if defined(_NTSYSTEM_) || defined(__GNUC__)
5549 #define NLS_MB_CODE_PAGE_TAG NlsMbCodePageTag
5550 #define NLS_MB_OEM_CODE_PAGE_TAG NlsMbOemCodePageTag
5552 #define NLS_MB_CODE_PAGE_TAG (*NlsMbCodePageTag)
5553 #define NLS_MB_OEM_CODE_PAGE_TAG (*NlsMbOemCodePageTag)
5554 #endif /* _NT_SYSTEM */
5556 extern BOOLEAN NTSYSAPI NLS_MB_CODE_PAGE_TAG
;
5557 extern BOOLEAN NTSYSAPI NLS_MB_OEM_CODE_PAGE_TAG
;
5560 ** Driver support routines
5563 /** Runtime library routines **/
5565 static __inline VOID
5567 IN PLIST_ENTRY ListHead
)
5569 ListHead
->Flink
= ListHead
->Blink
= ListHead
;
5572 static __inline VOID
5574 IN PLIST_ENTRY ListHead
,
5575 IN PLIST_ENTRY Entry
)
5577 PLIST_ENTRY OldFlink
;
5578 OldFlink
= ListHead
->Flink
;
5579 Entry
->Flink
= OldFlink
;
5580 Entry
->Blink
= ListHead
;
5581 OldFlink
->Blink
= Entry
;
5582 ListHead
->Flink
= Entry
;
5585 static __inline VOID
5587 IN PLIST_ENTRY ListHead
,
5588 IN PLIST_ENTRY Entry
)
5590 PLIST_ENTRY OldBlink
;
5591 OldBlink
= ListHead
->Blink
;
5592 Entry
->Flink
= ListHead
;
5593 Entry
->Blink
= OldBlink
;
5594 OldBlink
->Flink
= Entry
;
5595 ListHead
->Blink
= Entry
;
5601 * IN PLIST_ENTRY ListHead)
5603 #define IsListEmpty(_ListHead) \
5604 ((_ListHead)->Flink == (_ListHead))
5607 * PSINGLE_LIST_ENTRY
5609 * IN PSINGLE_LIST_ENTRY ListHead)
5611 #define PopEntryList(ListHead) \
5614 PSINGLE_LIST_ENTRY _FirstEntry; \
5615 _FirstEntry = (ListHead)->Next; \
5616 if (_FirstEntry != NULL) \
5617 (ListHead)->Next = _FirstEntry->Next; \
5623 * IN PSINGLE_LIST_ENTRY ListHead,
5624 * IN PSINGLE_LIST_ENTRY Entry)
5626 #define PushEntryList(_ListHead, _Entry) \
5627 (_Entry)->Next = (_ListHead)->Next; \
5628 (_ListHead)->Next = (_Entry); \
5630 static __inline BOOLEAN
5632 IN PLIST_ENTRY Entry
)
5634 PLIST_ENTRY OldFlink
;
5635 PLIST_ENTRY OldBlink
;
5637 OldFlink
= Entry
->Flink
;
5638 OldBlink
= Entry
->Blink
;
5639 OldFlink
->Blink
= OldBlink
;
5640 OldBlink
->Flink
= OldFlink
;
5641 return (OldFlink
== OldBlink
);
5644 static __inline PLIST_ENTRY
5646 IN PLIST_ENTRY ListHead
)
5651 Entry
= ListHead
->Flink
;
5652 Flink
= Entry
->Flink
;
5653 ListHead
->Flink
= Flink
;
5654 Flink
->Blink
= ListHead
;
5658 static __inline PLIST_ENTRY
5660 IN PLIST_ENTRY ListHead
)
5665 Entry
= ListHead
->Blink
;
5666 Blink
= Entry
->Blink
;
5667 ListHead
->Blink
= Blink
;
5668 Blink
->Flink
= ListHead
;
5672 #if !defined(_WINBASE_H) || _WIN32_WINNT < 0x0501
5677 InterlockedPopEntrySList(
5678 IN PSLIST_HEADER ListHead
);
5683 InterlockedPushEntrySList(
5684 IN PSLIST_HEADER ListHead
,
5685 IN PSLIST_ENTRY ListEntry
);
5692 * IN PSLIST_HEADER SListHead)
5694 #define QueryDepthSList(_SListHead) \
5695 ((USHORT) ((_SListHead)->Alignment & 0xffff))
5697 #define InterlockedFlushSList(ListHead) ExInterlockedFlushSList(ListHead)
5702 RtlxAnsiStringToUnicodeSize(
5703 IN PCANSI_STRING AnsiString
);
5705 #define RtlAnsiStringToUnicodeSize(STRING) ( \
5706 NLS_MB_CODE_PAGE_TAG ? \
5707 RtlxAnsiStringToUnicodeSize(STRING) : \
5708 ((STRING)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR) \
5714 RtlAnsiStringToUnicodeString(
5715 IN OUT PUNICODE_STRING DestinationString
,
5716 IN PANSI_STRING SourceString
,
5717 IN BOOLEAN AllocateDestinationString
);
5722 RtlAppendUnicodeStringToString(
5723 IN OUT PUNICODE_STRING Destination
,
5724 IN PCUNICODE_STRING Source
);
5729 RtlAppendUnicodeToString(
5730 IN OUT PUNICODE_STRING Destination
,
5737 IN PRTL_BITMAP BitMapHeader
,
5738 IN ULONG StartingIndex
,
5745 IN PRTL_BITMAP BitMapHeader
,
5746 IN ULONG StartingIndex
,
5754 IN ULONG Base OPTIONAL
,
5755 IN OUT PULONG Value
);
5761 IN PRTL_BITMAP BitMapHeader
,
5762 IN ULONG BitPosition
);
5767 RtlCheckRegistryKey(
5768 IN ULONG RelativeTo
,
5775 IN PRTL_BITMAP BitMapHeader
);
5781 PRTL_BITMAP BitMapHeader
,
5788 IN PRTL_BITMAP BitMapHeader
,
5789 IN ULONG StartingIndex
,
5790 IN ULONG NumberToClear
);
5796 IN CONST VOID
*Source1
,
5797 IN CONST VOID
*Source2
,
5806 BOOLEAN CaseInSensitive
);
5811 RtlCompareUnicodeString(
5812 IN PCUNICODE_STRING String1
,
5813 IN PCUNICODE_STRING String2
,
5814 IN BOOLEAN CaseInSensitive
);
5819 RtlConvertLongToLargeInteger(LONG SignedInteger
)
5821 LARGE_INTEGER Result
;
5823 Result
.QuadPart
= SignedInteger
;
5830 RtlConvertLongToLuid(
5836 RtlConvertUlongToLargeInteger(
5837 IN ULONG UnsignedInteger
);
5842 RtlConvertUlongToLuid(
5848 * IN VOID UNALIGNED *Destination,
5849 * IN CONST VOID UNALIGNED *Source,
5852 #ifndef RtlCopyMemory
5853 #define RtlCopyMemory(Destination, Source, Length) \
5854 memcpy(Destination, Source, Length)
5857 #ifndef RtlCopyBytes
5858 #define RtlCopyBytes RtlCopyMemory
5865 IN VOID UNALIGNED
*Destination
,
5866 IN CONST VOID UNALIGNED
*Source
,
5873 IN OUT PSTRING DestinationString
,
5874 IN PSTRING SourceString OPTIONAL
);
5879 RtlCopyUnicodeString(
5880 IN OUT PUNICODE_STRING DestinationString
,
5881 IN PCUNICODE_STRING SourceString
);
5886 RtlCreateRegistryKey(
5887 IN ULONG RelativeTo
,
5893 RtlCreateSecurityDescriptor(
5894 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
5900 RtlDeleteRegistryValue(
5901 IN ULONG RelativeTo
,
5903 IN PCWSTR ValueName
);
5911 #define RtlEqualLuid(Luid1, \
5913 (((Luid1)->LowPart == (Luid2)->LowPart) && ((Luid1)->HighPart == (Luid2)->HighPart))
5918 * IN VOID UNALIGNED *Destination,
5919 * IN CONST VOID UNALIGNED *Source,
5922 #define RtlEqualMemory(Destination, Source, Length) (!memcmp(Destination, Source, Length))
5930 IN BOOLEAN CaseInSensitive
);
5935 RtlEqualUnicodeString(
5936 IN CONST UNICODE_STRING
*String1
,
5937 IN CONST UNICODE_STRING
*String2
,
5938 IN BOOLEAN CaseInSensitive
);
5943 * IN VOID UNALIGNED *Destination,
5947 #ifndef RtlFillMemory
5948 #define RtlFillMemory(Destination, Length, Fill) \
5949 memset(Destination, Fill, Length)
5952 #ifndef RtlFillBytes
5953 #define RtlFillBytes RtlFillMemory
5960 IN PRTL_BITMAP BitMapHeader
,
5961 IN ULONG NumberToFind
,
5962 IN ULONG HintIndex
);
5967 RtlFindClearBitsAndSet(
5968 IN PRTL_BITMAP BitMapHeader
,
5969 IN ULONG NumberToFind
,
5970 IN ULONG HintIndex
);
5976 IN PRTL_BITMAP BitMapHeader
,
5977 OUT PRTL_BITMAP_RUN RunArray
,
5978 IN ULONG SizeOfRunArray
,
5979 IN BOOLEAN LocateLongestRuns
);
5984 RtlFindFirstRunClear(
5985 IN PRTL_BITMAP BitMapHeader
,
5986 OUT PULONG StartingIndex
);
5991 RtlFindLastBackwardRunClear(
5992 IN PRTL_BITMAP BitMapHeader
,
5994 OUT PULONG StartingRunIndex
);
5999 RtlFindLeastSignificantBit(
6005 RtlFindLongestRunClear(
6006 IN PRTL_BITMAP BitMapHeader
,
6007 OUT PULONG StartingIndex
);
6012 RtlFindMostSignificantBit(
6018 RtlFindNextForwardRunClear(
6019 IN PRTL_BITMAP BitMapHeader
,
6021 OUT PULONG StartingRunIndex
);
6027 IN PRTL_BITMAP BitMapHeader
,
6028 IN ULONG NumberToFind
,
6029 IN ULONG HintIndex
);
6034 RtlFindSetBitsAndClear(
6035 IN PRTL_BITMAP BitMapHeader
,
6036 IN ULONG NumberToFind
,
6037 IN ULONG HintIndex
);
6043 IN PANSI_STRING AnsiString
);
6048 RtlFreeUnicodeString(
6049 IN PUNICODE_STRING UnicodeString
);
6054 RtlGetCallersAddress(
6055 OUT PVOID
*CallersAddress
,
6056 OUT PVOID
*CallersCaller
);
6062 IN OUT PRTL_OSVERSIONINFOW lpVersionInformation
);
6068 IN PUNICODE_STRING GuidString
,
6074 RtlHashUnicodeString(
6075 IN CONST UNICODE_STRING
*String
,
6076 IN BOOLEAN CaseInSensitive
,
6077 IN ULONG HashAlgorithm
,
6078 OUT PULONG HashValue
);
6084 IN OUT PANSI_STRING DestinationString
,
6085 IN PCSZ SourceString
);
6090 RtlInitializeBitMap(
6091 IN PRTL_BITMAP BitMapHeader
,
6092 IN PULONG BitMapBuffer
,
6093 IN ULONG SizeOfBitMap
);
6099 IN OUT PSTRING DestinationString
,
6100 IN PCSZ SourceString
);
6105 RtlInitUnicodeString(
6106 IN OUT PUNICODE_STRING DestinationString
,
6107 IN PCWSTR SourceString
);
6112 RtlInt64ToUnicodeString(
6114 IN ULONG Base OPTIONAL
,
6115 IN OUT PUNICODE_STRING String
);
6120 RtlIntegerToUnicodeString(
6122 IN ULONG Base OPTIONAL
,
6123 IN OUT PUNICODE_STRING String
);
6128 RtlIntPtrToUnicodeString(
6130 ULONG Base OPTIONAL
,
6131 PUNICODE_STRING String
);
6138 #define RtlIsZeroLuid(_L1) \
6139 ((BOOLEAN) ((!(_L1)->LowPart) && (!(_L1)->HighPart)))
6144 RtlLengthSecurityDescriptor(
6145 IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
6151 IN OUT PACCESS_MASK AccessMask
,
6152 IN PGENERIC_MAPPING GenericMapping
);
6157 * IN VOID UNALIGNED *Destination,
6158 * IN CONST VOID UNALIGNED *Source,
6161 #define RtlMoveMemory memmove
6166 RtlNumberOfClearBits(
6167 IN PRTL_BITMAP BitMapHeader
);
6173 IN PRTL_BITMAP BitMapHeader
);
6178 RtlPrefetchMemoryNonTemporal(
6185 RtlPrefixUnicodeString(
6186 IN PCUNICODE_STRING String1
,
6187 IN PCUNICODE_STRING String2
,
6188 IN BOOLEAN CaseInSensitive
);
6193 RtlQueryRegistryValues(
6194 IN ULONG RelativeTo
,
6196 IN PRTL_QUERY_REGISTRY_TABLE QueryTable
,
6198 IN PVOID Environment OPTIONAL
);
6201 #define LONG_SIZE (sizeof(LONG))
6202 #define LONG_MASK (LONG_SIZE - 1)
6206 * RtlRetrieveUlong (
6207 * PULONG DestinationAddress,
6208 * PULONG SourceAddress
6211 #define RtlRetrieveUlong(DestAddress,SrcAddress) \
6212 if ((ULONG_PTR)(SrcAddress) & LONG_MASK) \
6214 ((PUCHAR)(DestAddress))[0]=((PUCHAR)(SrcAddress))[0]; \
6215 ((PUCHAR)(DestAddress))[1]=((PUCHAR)(SrcAddress))[1]; \
6216 ((PUCHAR)(DestAddress))[2]=((PUCHAR)(SrcAddress))[2]; \
6217 ((PUCHAR)(DestAddress))[3]=((PUCHAR)(SrcAddress))[3]; \
6221 *((PULONG)(DestAddress))=*((PULONG)(SrcAddress)); \
6228 IN OUT PUSHORT DestinationAddress
,
6229 IN PUSHORT SourceAddress
);
6235 IN PRTL_BITMAP BitMapHeader
);
6241 PRTL_BITMAP BitMapHeader
,
6248 IN PRTL_BITMAP BitMapHeader
,
6249 IN ULONG StartingIndex
,
6250 IN ULONG NumberToSet
);
6255 RtlSetDaclSecurityDescriptor(
6256 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
6257 IN BOOLEAN DaclPresent
,
6258 IN PACL Dacl OPTIONAL
,
6259 IN BOOLEAN DaclDefaulted OPTIONAL
);
6272 IN OUT PULONGLONG Address
,
6279 IN OUT PULONG_PTR Address
,
6280 IN ULONG_PTR Value
);
6294 OUT PUNICODE_STRING GuidString
);
6300 IN PRTL_BITMAP BitMapHeader
,
6301 IN ULONG BitNumber
);
6306 RtlTimeFieldsToTime(
6307 IN PTIME_FIELDS TimeFields
,
6308 IN PLARGE_INTEGER Time
);
6313 RtlTimeToTimeFields(
6314 IN PLARGE_INTEGER Time
,
6315 IN PTIME_FIELDS TimeFields
);
6324 RtlUlonglongByteSwap(
6325 IN ULONGLONG Source
);
6327 #define RtlUnicodeStringToAnsiSize(STRING) ( \
6328 NLS_MB_CODE_PAGE_TAG ? \
6329 RtlxUnicodeStringToAnsiSize(STRING) : \
6330 ((STRING)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \
6335 RtlInitEmptyUnicodeString(OUT PUNICODE_STRING UnicodeString
,
6337 IN USHORT BufferSize
)
6339 UnicodeString
->Length
= 0;
6340 UnicodeString
->MaximumLength
= BufferSize
;
6341 UnicodeString
->Buffer
= Buffer
;
6346 RtlInitEmptyAnsiString(OUT PANSI_STRING AnsiString
,
6348 IN USHORT BufferSize
)
6350 AnsiString
->Length
= 0;
6351 AnsiString
->MaximumLength
= BufferSize
;
6352 AnsiString
->Buffer
= Buffer
;
6358 RtlUnicodeStringToAnsiString(
6359 IN OUT PANSI_STRING DestinationString
,
6360 IN PCUNICODE_STRING SourceString
,
6361 IN BOOLEAN AllocateDestinationString
);
6366 RtlUnicodeStringToInteger(
6367 IN PCUNICODE_STRING String
,
6368 IN ULONG Base OPTIONAL
,
6374 RtlUpcaseUnicodeChar(
6375 IN WCHAR SourceCharacter
);
6380 RtlUpcaseUnicodeString(
6381 IN OUT PUNICODE_STRING DestinationString OPTIONAL
,
6382 IN PCUNICODE_STRING SourceString
,
6383 IN BOOLEAN AllocateDestinationString
);
6395 IN OUT PSTRING DestinationString
,
6396 IN PSTRING SourceString
);
6406 RtlValidRelativeSecurityDescriptor(
6407 IN PSECURITY_DESCRIPTOR SecurityDescriptorInput
,
6408 IN ULONG SecurityDescriptorLength
,
6409 IN SECURITY_INFORMATION RequiredInformation
);
6414 RtlValidSecurityDescriptor(
6415 IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
6420 RtlVerifyVersionInfo(
6421 IN PRTL_OSVERSIONINFOEXW VersionInfo
,
6423 IN ULONGLONG ConditionMask
);
6428 RtlVolumeDeviceToDosName(
6429 IN PVOID VolumeDeviceObject
,
6430 OUT PUNICODE_STRING DosName
);
6443 RtlWriteRegistryValue(
6444 IN ULONG RelativeTo
,
6446 IN PCWSTR ValueName
,
6449 IN ULONG ValueLength
);
6454 RtlxUnicodeStringToAnsiSize(
6455 IN PCUNICODE_STRING UnicodeString
);
6460 * IN VOID UNALIGNED *Destination,
6463 #ifndef RtlZeroMemory
6464 #define RtlZeroMemory(Destination, Length) \
6465 memset(Destination, 0, Length)
6468 #ifndef RtlZeroBytes
6469 #define RtlZeroBytes RtlZeroMemory
6475 KeAreAllApcsDisabled(
6479 /* Guarded Mutex routines */
6484 KeAcquireGuardedMutex(
6485 IN OUT PKGUARDED_MUTEX GuardedMutex
6491 KeAcquireGuardedMutexUnsafe(
6492 IN OUT PKGUARDED_MUTEX GuardedMutex
6498 KeEnterGuardedRegion(
6505 KeLeaveGuardedRegion(
6512 KeInitializeGuardedMutex(
6513 OUT PKGUARDED_MUTEX GuardedMutex
6519 KeReleaseGuardedMutexUnsafe(
6520 IN OUT PKGUARDED_MUTEX GuardedMutex
6526 KeReleaseGuardedMutex(
6527 IN OUT PKGUARDED_MUTEX GuardedMutex
6533 KeTryToAcquireGuardedMutex(
6534 IN OUT PKGUARDED_MUTEX GuardedMutex
6540 ExAcquireRundownProtectionEx(
6541 IN OUT PEX_RUNDOWN_REF RunRef
,
6548 ExReleaseRundownProtectionEx(
6549 IN OUT PEX_RUNDOWN_REF RunRef
,
6554 #define ExInitializeFastMutex(_FastMutex) \
6556 (_FastMutex)->Count = FM_LOCK_BIT; \
6557 (_FastMutex)->Owner = NULL; \
6558 (_FastMutex)->Contention = 0; \
6559 KeInitializeEvent(&(_FastMutex)->Gate, SynchronizationEvent, FALSE); \
6565 ExAcquireFastMutexUnsafe(IN OUT PFAST_MUTEX FastMutex
);
6570 ExReleaseFastMutexUnsafe(IN OUT PFAST_MUTEX FastMutex
);
6572 #if defined(_NTHAL_) && defined(_X86_)
6576 ExiAcquireFastMutex(IN OUT PFAST_MUTEX FastMutex
);
6581 ExiReleaseFastMutex(IN OUT PFAST_MUTEX FastMutex
);
6586 ExiTryToAcquireFastMutex(IN OUT PFAST_MUTEX FastMutex
);
6588 #define ExAcquireFastMutex(FastMutex) ExiAcquireFastMutex(FastMutex)
6589 #define ExReleaseFastMutex(FastMutex) ExiReleaseFastMutex(FastMutex)
6590 #define ExTryToAcquireFastMutex(FastMutex) ExiTryToAcquireFastMutex(FastMutex)
6597 ExAcquireFastMutex(IN OUT PFAST_MUTEX FastMutex
);
6602 ExReleaseFastMutex(IN OUT PFAST_MUTEX FastMutex
);
6607 ExTryToAcquireFastMutex(IN OUT PFAST_MUTEX FastMutex
);
6610 /** Executive support routines **/
6615 ExAcquireResourceExclusiveLite(
6616 IN PERESOURCE Resource
,
6622 ExAcquireResourceSharedLite(
6623 IN PERESOURCE Resource
,
6629 ExAcquireSharedStarveExclusive(
6630 IN PERESOURCE Resource
,
6636 ExAcquireSharedWaitForExclusive(
6637 IN PERESOURCE Resource
,
6640 static __inline PVOID
6641 ExAllocateFromNPagedLookasideList(
6642 IN PNPAGED_LOOKASIDE_LIST Lookaside
)
6646 Lookaside
->L
.TotalAllocates
++;
6647 Entry
= InterlockedPopEntrySList(&Lookaside
->L
.ListHead
);
6648 if (Entry
== NULL
) {
6649 Lookaside
->L
.AllocateMisses
++;
6650 Entry
= (Lookaside
->L
.Allocate
)(Lookaside
->L
.Type
, Lookaside
->L
.Size
, Lookaside
->L
.Tag
);
6655 static __inline PVOID
6656 ExAllocateFromPagedLookasideList(
6657 IN PPAGED_LOOKASIDE_LIST Lookaside
)
6661 Lookaside
->L
.TotalAllocates
++;
6662 Entry
= InterlockedPopEntrySList(&Lookaside
->L
.ListHead
);
6663 if (Entry
== NULL
) {
6664 Lookaside
->L
.AllocateMisses
++;
6665 Entry
= (Lookaside
->L
.Allocate
)(Lookaside
->L
.Type
, Lookaside
->L
.Size
, Lookaside
->L
.Tag
);
6673 ExAllocatePoolWithQuotaTag(
6674 IN POOL_TYPE PoolType
,
6675 IN SIZE_T NumberOfBytes
,
6681 ExAllocatePoolWithTag(
6682 IN POOL_TYPE PoolType
,
6683 IN SIZE_T NumberOfBytes
,
6688 #define ExAllocatePoolWithQuota(p,n) ExAllocatePoolWithQuotaTag(p,n,' kdD')
6689 #define ExAllocatePool(p,n) ExAllocatePoolWithTag(p,n,' kdD')
6691 #else /* !POOL_TAGGING */
6697 IN POOL_TYPE PoolType
,
6698 IN SIZE_T NumberOfBytes
);
6703 ExAllocatePoolWithQuota(
6704 IN POOL_TYPE PoolType
,
6705 IN SIZE_T NumberOfBytes
);
6707 #endif /* POOL_TAGGING */
6712 ExAllocatePoolWithTagPriority(
6713 IN POOL_TYPE PoolType
,
6714 IN SIZE_T NumberOfBytes
,
6716 IN EX_POOL_PRIORITY Priority
);
6721 ExConvertExclusiveToSharedLite(
6722 IN PERESOURCE Resource
);
6728 OUT PCALLBACK_OBJECT
*CallbackObject
,
6729 IN POBJECT_ATTRIBUTES ObjectAttributes
,
6731 IN BOOLEAN AllowMultipleCallbacks
);
6736 ExDeleteNPagedLookasideList(
6737 IN PNPAGED_LOOKASIDE_LIST Lookaside
);
6742 ExDeletePagedLookasideList(
6743 IN PPAGED_LOOKASIDE_LIST Lookaside
);
6748 ExDeleteResourceLite(
6749 IN PERESOURCE Resource
);
6757 #define PROTECTED_POOL 0x80000000
6760 #define ExFreePool(P) ExFreePoolWithTag(P, 0)
6770 #define ExQueryDepthSList(ListHead) QueryDepthSList(ListHead)
6772 static __inline VOID
6773 ExFreeToNPagedLookasideList(
6774 IN PNPAGED_LOOKASIDE_LIST Lookaside
,
6777 Lookaside
->L
.TotalFrees
++;
6778 if (ExQueryDepthSList(&Lookaside
->L
.ListHead
) >= Lookaside
->L
.Depth
) {
6779 Lookaside
->L
.FreeMisses
++;
6780 (Lookaside
->L
.Free
)(Entry
);
6782 InterlockedPushEntrySList(&Lookaside
->L
.ListHead
, (PSLIST_ENTRY
)Entry
);
6786 static __inline VOID
6787 ExFreeToPagedLookasideList(
6788 IN PPAGED_LOOKASIDE_LIST Lookaside
,
6791 Lookaside
->L
.TotalFrees
++;
6792 if (ExQueryDepthSList(&Lookaside
->L
.ListHead
) >= Lookaside
->L
.Depth
) {
6793 Lookaside
->L
.FreeMisses
++;
6794 (Lookaside
->L
.Free
)(Entry
);
6796 InterlockedPushEntrySList(&Lookaside
->L
.ListHead
, (PSLIST_ENTRY
)Entry
);
6802 * ExGetCurrentResourceThread(
6805 #define ExGetCurrentResourceThread() ((ERESOURCE_THREAD) PsGetCurrentThread())
6810 ExGetExclusiveWaiterCount(
6811 IN PERESOURCE Resource
);
6822 ExGetSharedWaiterCount(
6823 IN PERESOURCE Resource
);
6836 ExInitializeNPagedLookasideList(
6837 IN PNPAGED_LOOKASIDE_LIST Lookaside
,
6838 IN PALLOCATE_FUNCTION Allocate OPTIONAL
,
6839 IN PFREE_FUNCTION Free OPTIONAL
,
6848 ExInitializePagedLookasideList(
6849 IN PPAGED_LOOKASIDE_LIST Lookaside
,
6850 IN PALLOCATE_FUNCTION Allocate OPTIONAL
,
6851 IN PFREE_FUNCTION Free OPTIONAL
,
6860 ExInitializeResourceLite(
6861 IN PERESOURCE Resource
);
6865 * InitializeSListHead(
6866 * IN PSLIST_HEADER SListHead)
6868 #define InitializeSListHead(_SListHead) \
6869 (_SListHead)->Alignment = 0
6871 #define ExInitializeSListHead InitializeSListHead
6876 ExInterlockedAddLargeInteger(
6877 IN PLARGE_INTEGER Addend
,
6878 IN LARGE_INTEGER Increment
,
6879 IN PKSPIN_LOCK Lock
);
6884 ExInterlockedAddLargeStatistic(
6885 IN PLARGE_INTEGER Addend
,
6886 IN ULONG Increment
);
6891 ExInterlockedAddUlong(
6899 ExInterlockedCompareExchange64(
6900 IN OUT PLONGLONG Destination
,
6901 IN PLONGLONG Exchange
,
6902 IN PLONGLONG Comparand
,
6903 IN PKSPIN_LOCK Lock
);
6908 ExfInterlockedCompareExchange64(
6909 IN OUT LONGLONG
volatile *Destination
,
6910 IN PLONGLONG Exchange
,
6911 IN PLONGLONG Comperand
);
6916 ExInterlockedFlushSList(
6917 IN PSLIST_HEADER ListHead
);
6922 ExInterlockedInsertHeadList(
6923 IN PLIST_ENTRY ListHead
,
6924 IN PLIST_ENTRY ListEntry
,
6925 IN PKSPIN_LOCK Lock
);
6930 ExInterlockedInsertTailList(
6931 IN PLIST_ENTRY ListHead
,
6932 IN PLIST_ENTRY ListEntry
,
6933 IN PKSPIN_LOCK Lock
);
6938 ExInterlockedPopEntryList(
6939 IN PSINGLE_LIST_ENTRY ListHead
,
6940 IN PKSPIN_LOCK Lock
);
6943 * PSINGLE_LIST_ENTRY
6944 * ExInterlockedPopEntrySList(
6945 * IN PSLIST_HEADER ListHead,
6946 * IN PKSPIN_LOCK Lock)
6948 #define ExInterlockedPopEntrySList(_ListHead, \
6950 InterlockedPopEntrySList(_ListHead)
6955 ExInterlockedPushEntryList(
6956 IN PSINGLE_LIST_ENTRY ListHead
,
6957 IN PSINGLE_LIST_ENTRY ListEntry
,
6958 IN PKSPIN_LOCK Lock
);
6961 * PSINGLE_LIST_ENTRY FASTCALL
6962 * ExInterlockedPushEntrySList(
6963 * IN PSLIST_HEADER ListHead,
6964 * IN PSINGLE_LIST_ENTRY ListEntry,
6965 * IN PKSPIN_LOCK Lock)
6967 #define ExInterlockedPushEntrySList(_ListHead, \
6970 InterlockedPushEntrySList(_ListHead, _ListEntry)
6975 ExInterlockedRemoveHeadList(
6976 IN PLIST_ENTRY ListHead
,
6977 IN PKSPIN_LOCK Lock
);
6982 ExIsProcessorFeaturePresent(
6983 IN ULONG ProcessorFeature
);
6988 ExIsResourceAcquiredExclusiveLite(
6989 IN PERESOURCE Resource
);
6994 ExIsResourceAcquiredLite(
6995 IN PERESOURCE Resource
);
7000 ExIsResourceAcquiredSharedLite(
7001 IN PERESOURCE Resource
);
7006 ExLocalTimeToSystemTime(
7007 IN PLARGE_INTEGER LocalTime
,
7008 OUT PLARGE_INTEGER SystemTime
);
7014 IN PCALLBACK_OBJECT CallbackObject
,
7016 IN PVOID Argument2
);
7021 ExRaiseAccessViolation(
7027 ExRaiseDatatypeMisalignment(
7034 IN NTSTATUS Status
);
7040 IN PCALLBACK_OBJECT CallbackObject
,
7041 IN PCALLBACK_FUNCTION CallbackFunction
,
7042 IN PVOID CallbackContext
);
7047 ExReinitializeResourceLite(
7048 IN PERESOURCE Resource
);
7053 ExReleaseResourceForThreadLite(
7054 IN PERESOURCE Resource
,
7055 IN ERESOURCE_THREAD ResourceThreadId
);
7060 ExReleaseResourceLite(
7061 IN PERESOURCE Resource
);
7066 ExSetResourceOwnerPointer(
7067 IN PERESOURCE Resource
,
7068 IN PVOID OwnerPointer
);
7073 ExSetTimerResolution(
7074 IN ULONG DesiredTime
,
7075 IN BOOLEAN SetResolution
);
7080 ExSystemTimeToLocalTime(
7081 IN PLARGE_INTEGER SystemTime
,
7082 OUT PLARGE_INTEGER LocalTime
);
7087 ExUnregisterCallback(
7088 IN PVOID CbRegistration
);
7100 IN SUITE_TYPE SuiteType
);
7104 #define PAGED_CODE() { \
7105 if (KeGetCurrentIrql() > APC_LEVEL) { \
7106 KdPrint( ("NTDDK: Pageable code called at IRQL > APC_LEVEL (%d)\n", KeGetCurrentIrql() )); \
7113 #define PAGED_CODE()
7121 IN CONST VOID
*Address
,
7123 IN ULONG Alignment
);
7131 IN ULONG Alignment
);
7135 /** Configuration manager routines **/
7141 IN PEX_CALLBACK_FUNCTION Function
,
7143 IN OUT PLARGE_INTEGER Cookie
);
7148 CmUnRegisterCallback(
7149 IN LARGE_INTEGER Cookie
);
7153 /** Filesystem runtime library routines **/
7158 FsRtlIsTotalDeviceFailure(
7159 IN NTSTATUS Status
);
7163 /** Hardware abstraction layer routines **/
7169 IN ULONG Frequency
);
7175 IN PDEVICE_OBJECT DeviceObject
,
7176 IN ULONG SectorSize
,
7177 IN ULONG MBRTypeIdentifier
,
7183 PADAPTER_OBJECT AdapterObject
7189 IoAllocateAdapterChannel(
7190 IN PADAPTER_OBJECT AdapterObject
,
7191 IN PDEVICE_OBJECT DeviceObject
,
7192 IN ULONG NumberOfMapRegisters
,
7193 IN PDRIVER_CONTROL ExecutionRoutine
,
7200 READ_PORT_BUFFER_UCHAR(
7208 READ_PORT_BUFFER_ULONG(
7216 READ_PORT_BUFFER_USHORT(
7242 READ_REGISTER_BUFFER_UCHAR(
7250 READ_REGISTER_BUFFER_ULONG(
7258 READ_REGISTER_BUFFER_USHORT(
7259 IN PUSHORT Register
,
7266 READ_REGISTER_UCHAR(
7267 IN PUCHAR Register
);
7272 READ_REGISTER_ULONG(
7273 IN PULONG Register
);
7278 READ_REGISTER_USHORT(
7279 IN PUSHORT Register
);
7284 WRITE_PORT_BUFFER_UCHAR(
7292 WRITE_PORT_BUFFER_ULONG(
7300 WRITE_PORT_BUFFER_USHORT(
7329 WRITE_REGISTER_BUFFER_UCHAR(
7337 WRITE_REGISTER_BUFFER_ULONG(
7345 WRITE_REGISTER_BUFFER_USHORT(
7346 IN PUSHORT Register
,
7353 WRITE_REGISTER_UCHAR(
7360 WRITE_REGISTER_ULONG(
7367 WRITE_REGISTER_USHORT(
7368 IN PUSHORT Register
,
7371 /** I/O manager routines **/
7376 IoAcquireCancelSpinLock(
7382 IoAcquireRemoveLockEx(
7383 IN PIO_REMOVE_LOCK RemoveLock
,
7384 IN OPTIONAL PVOID Tag OPTIONAL
,
7387 IN ULONG RemlockSize
);
7391 * IoAcquireRemoveLock(
7392 * IN PIO_REMOVE_LOCK RemoveLock,
7393 * IN OPTIONAL PVOID Tag)
7395 #define IoAcquireRemoveLock(_RemoveLock, \
7397 IoAcquireRemoveLockEx(_RemoveLock, _Tag, __FILE__, __LINE__, sizeof(IO_REMOVE_LOCK))
7401 * IoAdjustPagingPathCount(
7403 * IN BOOLEAN Increment)
7405 #define IoAdjustPagingPathCount(_Count, \
7410 InterlockedIncrement(_Count); \
7414 InterlockedDecrement(_Count); \
7421 IoAllocateController(
7422 IN PCONTROLLER_OBJECT ControllerObject
,
7423 IN PDEVICE_OBJECT DeviceObject
,
7424 IN PDRIVER_CONTROL ExecutionRoutine
,
7430 IoAllocateDriverObjectExtension(
7431 IN PDRIVER_OBJECT DriverObject
,
7432 IN PVOID ClientIdentificationAddress
,
7433 IN ULONG DriverObjectExtensionSize
,
7434 OUT PVOID
*DriverObjectExtension
);
7439 IoAllocateErrorLogEntry(
7441 IN UCHAR EntrySize
);
7448 IN BOOLEAN ChargeQuota
);
7454 IN PVOID VirtualAddress
,
7456 IN BOOLEAN SecondaryBuffer
,
7457 IN BOOLEAN ChargeQuota
,
7458 IN OUT PIRP Irp OPTIONAL
);
7464 IN PDEVICE_OBJECT DeviceObject
);
7467 * VOID IoAssignArcName(
7468 * IN PUNICODE_STRING ArcName,
7469 * IN PUNICODE_STRING DeviceName);
7471 #define IoAssignArcName(_ArcName, _DeviceName) ( \
7472 IoCreateSymbolicLink((_ArcName), (_DeviceName)))
7478 IN PDEVICE_OBJECT SourceDevice
,
7479 IN PUNICODE_STRING TargetDevice
,
7480 OUT PDEVICE_OBJECT
*AttachedDevice
);
7485 IoAttachDeviceToDeviceStack(
7486 IN PDEVICE_OBJECT SourceDevice
,
7487 IN PDEVICE_OBJECT TargetDevice
);
7492 IoBuildAsynchronousFsdRequest(
7493 IN ULONG MajorFunction
,
7494 IN PDEVICE_OBJECT DeviceObject
,
7495 IN OUT PVOID Buffer OPTIONAL
,
7496 IN ULONG Length OPTIONAL
,
7497 IN PLARGE_INTEGER StartingOffset OPTIONAL
,
7498 IN PIO_STATUS_BLOCK IoStatusBlock OPTIONAL
);
7503 IoBuildDeviceIoControlRequest(
7504 IN ULONG IoControlCode
,
7505 IN PDEVICE_OBJECT DeviceObject
,
7506 IN PVOID InputBuffer OPTIONAL
,
7507 IN ULONG InputBufferLength
,
7508 OUT PVOID OutputBuffer OPTIONAL
,
7509 IN ULONG OutputBufferLength
,
7510 IN BOOLEAN InternalDeviceIoControl
,
7512 OUT PIO_STATUS_BLOCK IoStatusBlock
);
7519 IN OUT PMDL TargetMdl
,
7520 IN PVOID VirtualAddress
,
7526 IoBuildSynchronousFsdRequest(
7527 IN ULONG MajorFunction
,
7528 IN PDEVICE_OBJECT DeviceObject
,
7529 IN OUT PVOID Buffer OPTIONAL
,
7530 IN ULONG Length OPTIONAL
,
7531 IN PLARGE_INTEGER StartingOffset OPTIONAL
,
7533 OUT PIO_STATUS_BLOCK IoStatusBlock
);
7539 IN PDEVICE_OBJECT DeviceObject
,
7545 * IN PDEVICE_OBJECT DeviceObject,
7548 #define IoCallDriver IofCallDriver
7554 IN PDEVICE_OBJECT DeviceObject
,
7555 IN PFILE_OBJECT FileObject
);
7567 IN ACCESS_MASK DesiredAccess
,
7568 IN ULONG DesiredShareAccess
,
7569 IN OUT PFILE_OBJECT FileObject
,
7570 IN OUT PSHARE_ACCESS ShareAccess
,
7578 IN CCHAR PriorityBoost
);
7582 * IoCompleteRequest(
7584 * IN CCHAR PriorityBoost)
7586 #define IoCompleteRequest IofCompleteRequest
7592 OUT PKINTERRUPT
*InterruptObject
,
7593 IN PKSERVICE_ROUTINE ServiceRoutine
,
7594 IN PVOID ServiceContext
,
7595 IN PKSPIN_LOCK SpinLock OPTIONAL
,
7598 IN KIRQL SynchronizeIrql
,
7599 IN KINTERRUPT_MODE InterruptMode
,
7600 IN BOOLEAN ShareVector
,
7601 IN KAFFINITY ProcessorEnableMask
,
7602 IN BOOLEAN FloatingSave
);
7605 * PIO_STACK_LOCATION
7606 * IoGetCurrentIrpStackLocation(
7609 #define IoGetCurrentIrpStackLocation(_Irp) \
7610 ((_Irp)->Tail.Overlay.CurrentStackLocation)
7613 * PIO_STACK_LOCATION
7614 * IoGetNextIrpStackLocation(
7617 #define IoGetNextIrpStackLocation(_Irp) \
7618 ((_Irp)->Tail.Overlay.CurrentStackLocation - 1)
7622 * IoCopyCurrentIrpStackLocationToNext(
7625 #define IoCopyCurrentIrpStackLocationToNext(_Irp) \
7627 PIO_STACK_LOCATION _IrpSp; \
7628 PIO_STACK_LOCATION _NextIrpSp; \
7629 _IrpSp = IoGetCurrentIrpStackLocation(_Irp); \
7630 _NextIrpSp = IoGetNextIrpStackLocation(_Irp); \
7631 RtlCopyMemory(_NextIrpSp, _IrpSp, \
7632 FIELD_OFFSET(IO_STACK_LOCATION, CompletionRoutine)); \
7633 _NextIrpSp->Control = 0; \
7646 IN PDRIVER_OBJECT DriverObject
,
7647 IN ULONG DeviceExtensionSize
,
7648 IN PUNICODE_STRING DeviceName OPTIONAL
,
7649 IN DEVICE_TYPE DeviceType
,
7650 IN ULONG DeviceCharacteristics
,
7651 IN BOOLEAN Exclusive
,
7652 OUT PDEVICE_OBJECT
*DeviceObject
);
7658 IN PDEVICE_OBJECT DeviceObject
,
7659 IN PCREATE_DISK Disk
);
7665 OUT PHANDLE FileHandle
,
7666 IN ACCESS_MASK DesiredAccess
,
7667 IN POBJECT_ATTRIBUTES ObjectAttributes
,
7668 OUT PIO_STATUS_BLOCK IoStatusBlock
,
7669 IN PLARGE_INTEGER AllocationSize OPTIONAL
,
7670 IN ULONG FileAttributes
,
7671 IN ULONG ShareAccess
,
7672 IN ULONG Disposition
,
7673 IN ULONG CreateOptions
,
7674 IN PVOID EaBuffer OPTIONAL
,
7676 IN CREATE_FILE_TYPE CreateFileType
,
7677 IN PVOID ExtraCreateParameters OPTIONAL
,
7683 IoCreateNotificationEvent(
7684 IN PUNICODE_STRING EventName
,
7685 OUT PHANDLE EventHandle
);
7690 IoCreateSymbolicLink(
7691 IN PUNICODE_STRING SymbolicLinkName
,
7692 IN PUNICODE_STRING DeviceName
);
7697 IoCreateSynchronizationEvent(
7698 IN PUNICODE_STRING EventName
,
7699 OUT PHANDLE EventHandle
);
7704 IoCreateUnprotectedSymbolicLink(
7705 IN PUNICODE_STRING SymbolicLinkName
,
7706 IN PUNICODE_STRING DeviceName
);
7713 IN PIO_CSQ_INSERT_IRP CsqInsertIrp
,
7714 IN PIO_CSQ_REMOVE_IRP CsqRemoveIrp
,
7715 IN PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp
,
7716 IN PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock
,
7717 IN PIO_CSQ_RELEASE_LOCK CsqReleaseLock
,
7718 IN PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp
);
7726 IN PIO_CSQ_IRP_CONTEXT Context
);
7733 IN PIO_CSQ_IRP_CONTEXT Context
);
7740 IN PVOID PeekContext
);
7746 IN PCONTROLLER_OBJECT ControllerObject
);
7752 IN PDEVICE_OBJECT DeviceObject
);
7757 IoDeleteSymbolicLink(
7758 IN PUNICODE_STRING SymbolicLinkName
);
7762 * IoDeassignArcName(
7763 * IN PUNICODE_STRING ArcName)
7765 #define IoDeassignArcName IoDeleteSymbolicLink
7771 IN OUT PDEVICE_OBJECT TargetDevice
);
7776 IoDisconnectInterrupt(
7777 IN PKINTERRUPT InterruptObject
);
7782 IoForwardIrpSynchronously(
7783 IN PDEVICE_OBJECT DeviceObject
,
7786 #define IoForwardAndCatchIrp IoForwardIrpSynchronously
7792 IN PCONTROLLER_OBJECT ControllerObject
);
7797 IoFreeErrorLogEntry(
7816 IN PIO_WORKITEM pIOWorkItem
);
7821 IoGetAttachedDevice(
7822 IN PDEVICE_OBJECT DeviceObject
);
7827 IoGetAttachedDeviceReference(
7828 IN PDEVICE_OBJECT DeviceObject
);
7833 IoGetBootDiskInformation(
7834 IN OUT PBOOTDISK_INFORMATION BootDiskInformation
,
7838 PCONFIGURATION_INFORMATION
7840 IoGetConfigurationInformation(
7846 IoGetCurrentProcess(
7852 IoGetDeviceInterfaceAlias(
7853 IN PUNICODE_STRING SymbolicLinkName
,
7854 IN CONST GUID
*AliasInterfaceClassGuid
,
7855 OUT PUNICODE_STRING AliasSymbolicLinkName
);
7857 #define DEVICE_INTERFACE_INCLUDE_NONACTIVE 0x00000001
7862 IoGetDeviceInterfaces(
7863 IN CONST GUID
*InterfaceClassGuid
,
7864 IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL
,
7866 OUT PWSTR
*SymbolicLinkList
);
7871 IoGetDeviceObjectPointer(
7872 IN PUNICODE_STRING ObjectName
,
7873 IN ACCESS_MASK DesiredAccess
,
7874 OUT PFILE_OBJECT
*FileObject
,
7875 OUT PDEVICE_OBJECT
*DeviceObject
);
7880 IoGetDeviceProperty(
7881 IN PDEVICE_OBJECT DeviceObject
,
7882 IN DEVICE_REGISTRY_PROPERTY DeviceProperty
,
7883 IN ULONG BufferLength
,
7884 OUT PVOID PropertyBuffer
,
7885 OUT PULONG ResultLength
);
7890 IoGetDeviceToVerify(
7891 IN PETHREAD Thread
);
7897 IN PDEVICE_OBJECT PhysicalDeviceObject
,
7898 IN PDEVICE_DESCRIPTION DeviceDescription
,
7899 IN OUT PULONG NumberOfMapRegisters
);
7904 IoGetDriverObjectExtension(
7905 IN PDRIVER_OBJECT DriverObject
,
7906 IN PVOID ClientIdentificationAddress
);
7911 IoGetFileObjectGenericMapping(
7916 * IoGetFunctionCodeFromCtlCode(
7917 * IN ULONG ControlCode)
7919 #define IoGetFunctionCodeFromCtlCode(_ControlCode) \
7920 (((_ControlCode) >> 2) & 0x00000FFF)
7931 IoGetRelatedDeviceObject(
7932 IN PFILE_OBJECT FileObject
);
7937 IoGetRemainingStackSize(
7944 OUT PULONG_PTR LowLimit
,
7945 OUT PULONG_PTR HighLimit
);
7952 IN PKDEFERRED_ROUTINE DeferredRoutine
,
7953 IN PVOID DeferredContext
);
7957 * IoInitializeDpcRequest(
7958 * IN PDEVICE_OBJECT DeviceObject,
7959 * IN PIO_DPC_ROUTINE DpcRoutine)
7961 #define IoInitializeDpcRequest(_DeviceObject, \
7963 KeInitializeDpc(&(_DeviceObject)->Dpc, \
7964 (PKDEFERRED_ROUTINE) (_DpcRoutine), \
7972 IN USHORT PacketSize
,
7973 IN CCHAR StackSize
);
7978 IoInitializeRemoveLockEx(
7979 IN PIO_REMOVE_LOCK Lock
,
7980 IN ULONG AllocateTag
,
7981 IN ULONG MaxLockedMinutes
,
7982 IN ULONG HighWatermark
,
7983 IN ULONG RemlockSize
);
7986 * IoInitializeRemoveLock(
7987 * IN PIO_REMOVE_LOCK Lock,
7988 * IN ULONG AllocateTag,
7989 * IN ULONG MaxLockedMinutes,
7990 * IN ULONG HighWatermark)
7992 #define IoInitializeRemoveLock( \
7993 Lock, AllocateTag, MaxLockedMinutes, HighWatermark) \
7994 IoInitializeRemoveLockEx(Lock, AllocateTag, MaxLockedMinutes, \
7995 HighWatermark, sizeof(IO_REMOVE_LOCK))
8001 IN PDEVICE_OBJECT DeviceObject
,
8002 IN PIO_TIMER_ROUTINE TimerRoutine
,
8008 IoInvalidateDeviceRelations(
8009 IN PDEVICE_OBJECT DeviceObject
,
8010 IN DEVICE_RELATION_TYPE Type
);
8015 IoInvalidateDeviceState(
8016 IN PDEVICE_OBJECT PhysicalDeviceObject
);
8022 IN PIRP Irp OPTIONAL
);
8026 * IoIsErrorUserInduced(
8027 * IN NTSTATUS Status);
8029 #define IoIsErrorUserInduced(Status) \
8030 ((BOOLEAN)(((Status) == STATUS_DEVICE_NOT_READY) || \
8031 ((Status) == STATUS_IO_TIMEOUT) || \
8032 ((Status) == STATUS_MEDIA_WRITE_PROTECTED) || \
8033 ((Status) == STATUS_NO_MEDIA_IN_DEVICE) || \
8034 ((Status) == STATUS_VERIFY_REQUIRED) || \
8035 ((Status) == STATUS_UNRECOGNIZED_MEDIA) || \
8036 ((Status) == STATUS_WRONG_VOLUME)))
8041 IoIsWdmVersionAvailable(
8042 IN UCHAR MajorVersion
,
8043 IN UCHAR MinorVersion
);
8048 IoMakeAssociatedIrp(
8050 IN CCHAR StackSize
);
8057 #define IoMarkIrpPending(_Irp) \
8058 (IoGetCurrentIrpStackLocation(_Irp)->Control |= SL_PENDING_RETURNED)
8063 IoOpenDeviceInterfaceRegistryKey(
8064 IN PUNICODE_STRING SymbolicLinkName
,
8065 IN ACCESS_MASK DesiredAccess
,
8066 OUT PHANDLE DeviceInterfaceKey
);
8068 #define PLUGPLAY_REGKEY_DEVICE 1
8069 #define PLUGPLAY_REGKEY_DRIVER 2
8070 #define PLUGPLAY_REGKEY_CURRENT_HWPROFILE 4
8075 IoOpenDeviceRegistryKey(
8076 IN PDEVICE_OBJECT DeviceObject
,
8077 IN ULONG DevInstKeyType
,
8078 IN ACCESS_MASK DesiredAccess
,
8079 OUT PHANDLE DevInstRegKey
);
8084 IoQueryDeviceDescription(
8085 IN PINTERFACE_TYPE BusType OPTIONAL
,
8086 IN PULONG BusNumber OPTIONAL
,
8087 IN PCONFIGURATION_TYPE ControllerType OPTIONAL
,
8088 IN PULONG ControllerNumber OPTIONAL
,
8089 IN PCONFIGURATION_TYPE PeripheralType OPTIONAL
,
8090 IN PULONG PeripheralNumber OPTIONAL
,
8091 IN PIO_QUERY_DEVICE_ROUTINE CalloutRoutine
,
8098 IN PIO_WORKITEM pIOWorkItem
,
8099 IN PIO_WORKITEM_ROUTINE Routine
,
8100 IN WORK_QUEUE_TYPE QueueType
,
8108 IN PVPB Vpb OPTIONAL
,
8109 IN PDEVICE_OBJECT RealDeviceObject
);
8114 IoRaiseInformationalHardError(
8115 IN NTSTATUS ErrorStatus
,
8116 IN PUNICODE_STRING String OPTIONAL
,
8117 IN PKTHREAD Thread OPTIONAL
);
8122 IoReadDiskSignature(
8123 IN PDEVICE_OBJECT DeviceObject
,
8124 IN ULONG BytesPerSector
,
8125 OUT PDISK_SIGNATURE Signature
);
8130 IoReadPartitionTableEx(
8131 IN PDEVICE_OBJECT DeviceObject
,
8132 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
**PartitionBuffer
);
8137 IoRegisterBootDriverReinitialization(
8138 IN PDRIVER_OBJECT DriverObject
,
8139 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
8145 IoRegisterBootDriverReinitialization(
8146 IN PDRIVER_OBJECT DriverObject
,
8147 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
8153 IoRegisterDeviceInterface(
8154 IN PDEVICE_OBJECT PhysicalDeviceObject
,
8155 IN CONST GUID
*InterfaceClassGuid
,
8156 IN PUNICODE_STRING ReferenceString OPTIONAL
,
8157 OUT PUNICODE_STRING SymbolicLinkName
);
8162 IoRegisterDriverReinitialization(
8163 IN PDRIVER_OBJECT DriverObject
,
8164 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
8170 IoRegisterPlugPlayNotification(
8171 IN IO_NOTIFICATION_EVENT_CATEGORY EventCategory
,
8172 IN ULONG EventCategoryFlags
,
8173 IN PVOID EventCategoryData OPTIONAL
,
8174 IN PDRIVER_OBJECT DriverObject
,
8175 IN PDRIVER_NOTIFICATION_CALLBACK_ROUTINE CallbackRoutine
,
8177 OUT PVOID
*NotificationEntry
);
8182 IoRegisterShutdownNotification(
8183 IN PDEVICE_OBJECT DeviceObject
);
8188 IoReleaseCancelSpinLock(
8194 IoReleaseRemoveLockAndWaitEx(
8195 IN PIO_REMOVE_LOCK RemoveLock
,
8197 IN ULONG RemlockSize
);
8202 IoReleaseRemoveLockEx(
8203 IN PIO_REMOVE_LOCK RemoveLock
,
8205 IN ULONG RemlockSize
);
8209 * IoReleaseRemoveLock(
8210 * IN PIO_REMOVE_LOCK RemoveLock,
8213 #define IoReleaseRemoveLock(_RemoveLock, \
8215 IoReleaseRemoveLockEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK))
8219 * IoReleaseRemoveLockAndWait(
8220 * IN PIO_REMOVE_LOCK RemoveLock,
8223 #define IoReleaseRemoveLockAndWait(_RemoveLock, \
8225 IoReleaseRemoveLockAndWaitEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK))
8230 IoRemoveShareAccess(
8231 IN PFILE_OBJECT FileObject
,
8232 IN OUT PSHARE_ACCESS ShareAccess
);
8237 IoReportDetectedDevice(
8238 IN PDRIVER_OBJECT DriverObject
,
8239 IN INTERFACE_TYPE LegacyBusType
,
8241 IN ULONG SlotNumber
,
8242 IN PCM_RESOURCE_LIST ResourceList
,
8243 IN PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements OPTIONAL
,
8244 IN BOOLEAN ResourceAssigned
,
8245 IN OUT PDEVICE_OBJECT
*DeviceObject
);
8250 IoReportResourceForDetection(
8251 IN PDRIVER_OBJECT DriverObject
,
8252 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
8253 IN ULONG DriverListSize OPTIONAL
,
8254 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
8255 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
8256 IN ULONG DeviceListSize OPTIONAL
,
8257 OUT PBOOLEAN ConflictDetected
);
8262 IoReportResourceUsage(
8263 IN PUNICODE_STRING DriverClassName OPTIONAL
,
8264 IN PDRIVER_OBJECT DriverObject
,
8265 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
8266 IN ULONG DriverListSize OPTIONAL
,
8267 IN PDEVICE_OBJECT DeviceObject
,
8268 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
8269 IN ULONG DeviceListSize OPTIONAL
,
8270 IN BOOLEAN OverrideConflict
,
8271 OUT PBOOLEAN ConflictDetected
);
8276 IoReportTargetDeviceChange(
8277 IN PDEVICE_OBJECT PhysicalDeviceObject
,
8278 IN PVOID NotificationStructure
);
8283 IoReportTargetDeviceChangeAsynchronous(
8284 IN PDEVICE_OBJECT PhysicalDeviceObject
,
8285 IN PVOID NotificationStructure
,
8286 IN PDEVICE_CHANGE_COMPLETE_CALLBACK Callback OPTIONAL
,
8287 IN PVOID Context OPTIONAL
);
8292 IoRequestDeviceEject(
8293 IN PDEVICE_OBJECT PhysicalDeviceObject
);
8298 * IN PDEVICE_OBJECT DeviceObject,
8300 * IN PVOID Context);
8302 #define IoRequestDpc(DeviceObject, Irp, Context)( \
8303 KeInsertQueueDpc(&(DeviceObject)->Dpc, (Irp), (Context)))
8310 IN NTSTATUS Status
);
8314 * IoSetCancelRoutine(
8316 * IN PDRIVER_CANCEL CancelRoutine)
8318 #define IoSetCancelRoutine(_Irp, \
8320 ((PDRIVER_CANCEL) InterlockedExchangePointer( \
8321 (PVOID *) &(_Irp)->CancelRoutine, (PVOID) (_CancelRoutine)))
8325 * IoSetCompletionRoutine(
8327 * IN PIO_COMPLETION_ROUTINE CompletionRoutine,
8329 * IN BOOLEAN InvokeOnSuccess,
8330 * IN BOOLEAN InvokeOnError,
8331 * IN BOOLEAN InvokeOnCancel)
8333 #define IoSetCompletionRoutine(_Irp, \
8334 _CompletionRoutine, \
8340 PIO_STACK_LOCATION _IrpSp; \
8341 ASSERT(_InvokeOnSuccess || _InvokeOnError || _InvokeOnCancel ? \
8342 _CompletionRoutine != NULL : TRUE); \
8343 _IrpSp = IoGetNextIrpStackLocation(_Irp); \
8344 _IrpSp->CompletionRoutine = (PIO_COMPLETION_ROUTINE)(_CompletionRoutine); \
8345 _IrpSp->Context = (_Context); \
8346 _IrpSp->Control = 0; \
8347 if (_InvokeOnSuccess) _IrpSp->Control = SL_INVOKE_ON_SUCCESS; \
8348 if (_InvokeOnError) _IrpSp->Control |= SL_INVOKE_ON_ERROR; \
8349 if (_InvokeOnCancel) _IrpSp->Control |= SL_INVOKE_ON_CANCEL; \
8355 IoSetCompletionRoutineEx(
8356 IN PDEVICE_OBJECT DeviceObject
,
8358 IN PIO_COMPLETION_ROUTINE CompletionRoutine
,
8360 IN BOOLEAN InvokeOnSuccess
,
8361 IN BOOLEAN InvokeOnError
,
8362 IN BOOLEAN InvokeOnCancel
);
8367 IoSetDeviceInterfaceState(
8368 IN PUNICODE_STRING SymbolicLinkName
,
8374 IoSetHardErrorOrVerifyDevice(
8376 IN PDEVICE_OBJECT DeviceObject
);
8380 * IoSetNextIrpStackLocation(
8383 #define IoSetNextIrpStackLocation(_Irp) \
8385 (_Irp)->CurrentLocation--; \
8386 (_Irp)->Tail.Overlay.CurrentStackLocation--; \
8392 IoSetPartitionInformationEx(
8393 IN PDEVICE_OBJECT DeviceObject
,
8394 IN ULONG PartitionNumber
,
8395 IN
struct _SET_PARTITION_INFORMATION_EX
*PartitionInfo
);
8401 IN ACCESS_MASK DesiredAccess
,
8402 IN ULONG DesiredShareAccess
,
8403 IN OUT PFILE_OBJECT FileObject
,
8404 OUT PSHARE_ACCESS ShareAccess
);
8409 IoSetStartIoAttributes(
8410 IN PDEVICE_OBJECT DeviceObject
,
8411 IN BOOLEAN DeferredStartIo
,
8412 IN BOOLEAN NonCancelable
);
8417 IoSetSystemPartition(
8418 IN PUNICODE_STRING VolumeNameString
);
8423 IoSetThreadHardErrorMode(
8424 IN BOOLEAN EnableHardErrors
);
8429 * IN CCHAR StackSize)
8431 #define IoSizeOfIrp(_StackSize) \
8432 ((USHORT) (sizeof(IRP) + ((_StackSize) * (sizeof(IO_STACK_LOCATION)))))
8436 * IoSkipCurrentIrpStackLocation(
8439 #define IoSkipCurrentIrpStackLocation(_Irp) \
8441 (_Irp)->CurrentLocation++; \
8442 (_Irp)->Tail.Overlay.CurrentStackLocation++; \
8449 IN PDEVICE_OBJECT DeviceObject
,
8450 IN BOOLEAN Cancelable
);
8455 IoStartNextPacketByKey(
8456 IN PDEVICE_OBJECT DeviceObject
,
8457 IN BOOLEAN Cancelable
,
8464 IN PDEVICE_OBJECT DeviceObject
,
8466 IN PULONG Key OPTIONAL
,
8467 IN PDRIVER_CANCEL CancelFunction OPTIONAL
);
8473 IN PDEVICE_OBJECT DeviceObject
);
8479 IN PDEVICE_OBJECT DeviceObject
);
8484 IoUnregisterPlugPlayNotification(
8485 IN PVOID NotificationEntry
);
8490 IoUnregisterShutdownNotification(
8491 IN PDEVICE_OBJECT DeviceObject
);
8496 IoUpdateShareAccess(
8497 IN PFILE_OBJECT FileObject
,
8498 IN OUT PSHARE_ACCESS ShareAccess
);
8503 IoVerifyPartitionTable(
8504 IN PDEVICE_OBJECT DeviceObject
,
8505 IN BOOLEAN FixErrors
);
8510 IoVolumeDeviceToDosName(
8511 IN PVOID VolumeDeviceObject
,
8512 OUT PUNICODE_STRING DosName
);
8517 IoWMIAllocateInstanceIds(
8519 IN ULONG InstanceCount
,
8520 OUT ULONG
*FirstInstanceId
);
8525 IoWMIDeviceObjectToProviderId(
8526 IN PDEVICE_OBJECT DeviceObject
);
8531 IoWMIDeviceObjectToInstanceName(
8532 IN PVOID DataBlockObject
,
8533 IN PDEVICE_OBJECT DeviceObject
,
8534 OUT PUNICODE_STRING InstanceName
);
8540 IN PVOID DataBlockObject
,
8541 IN PUNICODE_STRING InstanceName
,
8543 IN ULONG InBufferSize
,
8544 IN OUT PULONG OutBufferSize
,
8545 IN OUT PUCHAR InOutBuffer
);
8550 IoWMIHandleToInstanceName(
8551 IN PVOID DataBlockObject
,
8552 IN HANDLE FileHandle
,
8553 OUT PUNICODE_STRING InstanceName
);
8559 IN GUID
*DataBlockGuid
,
8560 IN ULONG DesiredAccess
,
8561 OUT PVOID
*DataBlockObject
);
8567 IN PVOID DataBlockObject
,
8568 IN OUT ULONG
*InOutBufferSize
,
8569 OUT PVOID OutBuffer
);
8574 IoWMIQueryAllDataMultiple(
8575 IN PVOID
*DataBlockObjectList
,
8576 IN ULONG ObjectCount
,
8577 IN OUT ULONG
*InOutBufferSize
,
8578 OUT PVOID OutBuffer
);
8583 IoWMIQuerySingleInstance(
8584 IN PVOID DataBlockObject
,
8585 IN PUNICODE_STRING InstanceName
,
8586 IN OUT ULONG
*InOutBufferSize
,
8587 OUT PVOID OutBuffer
);
8592 IoWMIQuerySingleInstanceMultiple(
8593 IN PVOID
*DataBlockObjectList
,
8594 IN PUNICODE_STRING InstanceNames
,
8595 IN ULONG ObjectCount
,
8596 IN OUT ULONG
*InOutBufferSize
,
8597 OUT PVOID OutBuffer
);
8602 IoWMIRegistrationControl(
8603 IN PDEVICE_OBJECT DeviceObject
,
8609 IoWMISetNotificationCallback(
8611 IN WMI_NOTIFICATION_CALLBACK Callback
,
8617 IoWMISetSingleInstance(
8618 IN PVOID DataBlockObject
,
8619 IN PUNICODE_STRING InstanceName
,
8621 IN ULONG ValueBufferSize
,
8622 IN PVOID ValueBuffer
);
8628 IN PVOID DataBlockObject
,
8629 IN PUNICODE_STRING InstanceName
,
8630 IN ULONG DataItemId
,
8632 IN ULONG ValueBufferSize
,
8633 IN PVOID ValueBuffer
);
8638 IoWMISuggestInstanceName(
8639 IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL
,
8640 IN PUNICODE_STRING SymbolicLinkName OPTIONAL
,
8641 IN BOOLEAN CombineNames
,
8642 OUT PUNICODE_STRING SuggestedInstanceName
);
8648 IN PVOID WnodeEventItem
);
8653 IoWriteErrorLogEntry(
8659 IoWritePartitionTableEx(
8660 IN PDEVICE_OBJECT DeviceObject
,
8661 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
*PartitionBuffer
);
8665 /** Kernel routines **/
8670 KeAcquireInStackQueuedSpinLock(
8671 IN PKSPIN_LOCK SpinLock
,
8672 IN PKLOCK_QUEUE_HANDLE LockHandle
);
8677 KeAcquireInStackQueuedSpinLockAtDpcLevel(
8678 IN PKSPIN_LOCK SpinLock
,
8679 IN PKLOCK_QUEUE_HANDLE LockHandle
);
8684 KeAcquireInterruptSpinLock(
8685 IN PKINTERRUPT Interrupt
);
8697 IN ULONG BugCheckCode
);
8703 IN ULONG BugCheckCode
,
8704 IN ULONG_PTR BugCheckParameter1
,
8705 IN ULONG_PTR BugCheckParameter2
,
8706 IN ULONG_PTR BugCheckParameter3
,
8707 IN ULONG_PTR BugCheckParameter4
);
8724 KeDelayExecutionThread(
8725 IN KPROCESSOR_MODE WaitMode
,
8726 IN BOOLEAN Alertable
,
8727 IN PLARGE_INTEGER Interval
);
8732 KeDeregisterBugCheckCallback(
8733 IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord
);
8738 KeEnterCriticalRegion(
8745 * IN BOOLEAN ReadOperation,
8746 * IN BOOLEAN DmaOperation)
8748 #define KeFlushIoBuffers(_Mdl, _ReadOperation, _DmaOperation)
8753 KeFlushWriteBuffer(VOID
);
8764 KeGetRecommendedSharedDataAlignment(
8770 KeInitializeDeviceQueue(
8771 IN PKDEVICE_QUEUE DeviceQueue
);
8783 KeInitializeSemaphore(
8784 IN PRKSEMAPHORE Semaphore
,
8791 KeInitializeSpinLock(
8792 IN PKSPIN_LOCK SpinLock
);
8803 KeInitializeTimerEx(
8805 IN TIMER_TYPE Type
);
8810 KeInsertByKeyDeviceQueue(
8811 IN PKDEVICE_QUEUE DeviceQueue
,
8812 IN PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
,
8818 KeInsertDeviceQueue(
8819 IN PKDEVICE_QUEUE DeviceQueue
,
8820 IN PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
);
8827 IN PVOID SystemArgument1
,
8828 IN PVOID SystemArgument2
);
8833 KeLeaveCriticalRegion(
8843 volatile LONG Barrier
;
8844 #if defined(__GNUC__)
8845 __asm__
__volatile__ ("xchg %%eax, %0" : : "m" (Barrier
) : "%eax");
8846 #elif defined(_MSC_VER)
8847 __asm xchg
[Barrier
], eax
8858 IN KPRIORITY Increment
,
8864 KeQueryInterruptTime(
8870 KeQueryPerformanceCounter(
8871 OUT PLARGE_INTEGER PerformanceFrequency OPTIONAL
);
8876 KeQueryPriorityThread(
8877 IN PRKTHREAD Thread
);
8883 OUT PLARGE_INTEGER CurrentTime
);
8889 OUT PLARGE_INTEGER TickCount
);
8894 KeQueryTimeIncrement(
8913 KeReadStateSemaphore(
8914 IN PRKSEMAPHORE Semaphore
);
8925 KeRegisterBugCheckCallback(
8926 IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord
,
8927 IN PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine
,
8930 IN PUCHAR Component
);
8935 KeReleaseInStackQueuedSpinLock(
8936 IN PKLOCK_QUEUE_HANDLE LockHandle
);
8941 KeReleaseInStackQueuedSpinLockFromDpcLevel(
8942 IN PKLOCK_QUEUE_HANDLE LockHandle
);
8947 KeReleaseInterruptSpinLock(
8948 IN PKINTERRUPT Interrupt
,
8962 IN PRKSEMAPHORE Semaphore
,
8963 IN KPRIORITY Increment
,
8968 PKDEVICE_QUEUE_ENTRY
8970 KeRemoveByKeyDeviceQueue(
8971 IN PKDEVICE_QUEUE DeviceQueue
,
8975 PKDEVICE_QUEUE_ENTRY
8977 KeRemoveDeviceQueue(
8978 IN PKDEVICE_QUEUE DeviceQueue
);
8983 KeRemoveEntryDeviceQueue(
8984 IN PKDEVICE_QUEUE DeviceQueue
,
8985 IN PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
);
9002 KeRestoreFloatingPointState(
9003 IN PKFLOATING_SAVE FloatSave
);
9008 KeRevertToUserAffinityThread(VOID
);
9013 KeSaveFloatingPointState(
9014 OUT PKFLOATING_SAVE FloatSave
);
9019 KeSetBasePriorityThread(
9020 IN PRKTHREAD Thread
,
9028 IN KPRIORITY Increment
,
9036 IN KDPC_IMPORTANCE Importance
);
9041 KeSetPriorityThread(
9043 IN KPRIORITY Priority
);
9048 KeSetSystemAffinityThread(
9049 IN KAFFINITY Affinity
);
9054 KeSetTargetProcessorDpc(
9063 IN LARGE_INTEGER DueTime
,
9064 IN PKDPC Dpc OPTIONAL
);
9071 IN LARGE_INTEGER DueTime
,
9072 IN LONG Period OPTIONAL
,
9073 IN PKDPC Dpc OPTIONAL
);
9078 KeSetTimeUpdateNotifyRoutine(
9079 IN PTIME_UPDATE_NOTIFY_ROUTINE NotifyRoutine
);
9084 KeStallExecutionProcessor(
9085 IN ULONG MicroSeconds
);
9090 KeSynchronizeExecution(
9091 IN PKINTERRUPT Interrupt
,
9092 IN PKSYNCHRONIZE_ROUTINE SynchronizeRoutine
,
9093 IN PVOID SynchronizeContext
);
9098 KeWaitForMultipleObjects(
9101 IN WAIT_TYPE WaitType
,
9102 IN KWAIT_REASON WaitReason
,
9103 IN KPROCESSOR_MODE WaitMode
,
9104 IN BOOLEAN Alertable
,
9105 IN PLARGE_INTEGER Timeout OPTIONAL
,
9106 IN PKWAIT_BLOCK WaitBlockArray OPTIONAL
);
9111 KeWaitForMutexObject(
9113 IN KWAIT_REASON WaitReason
,
9114 IN KPROCESSOR_MODE WaitMode
,
9115 IN BOOLEAN Alertable
,
9116 IN PLARGE_INTEGER Timeout OPTIONAL
);
9121 KeWaitForSingleObject(
9123 IN KWAIT_REASON WaitReason
,
9124 IN KPROCESSOR_MODE WaitMode
,
9125 IN BOOLEAN Alertable
,
9126 IN PLARGE_INTEGER Timeout OPTIONAL
);
9130 (NTAPI
*PKIPI_BROADCAST_WORKER
)(
9131 IN ULONG_PTR Argument
9138 IN PKIPI_BROADCAST_WORKER BroadcastFunction
,
9139 IN ULONG_PTR Context
9159 KeRaiseIrqlToDpcLevel(
9165 KeRaiseIrqlToSynchLevel(
9168 #define KeLowerIrql(a) KfLowerIrql(a)
9169 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
9188 KeRaiseIrqlToDpcLevel(
9193 /** Memory manager routines **/
9200 IN ULONG NumberOfBytes
);
9205 MmAllocateContiguousMemory(
9206 IN ULONG NumberOfBytes
,
9207 IN PHYSICAL_ADDRESS HighestAcceptableAddress
);
9212 MmAllocateContiguousMemorySpecifyCache(
9213 IN SIZE_T NumberOfBytes
,
9214 IN PHYSICAL_ADDRESS LowestAcceptableAddress
,
9215 IN PHYSICAL_ADDRESS HighestAcceptableAddress
,
9216 IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL
,
9217 IN MEMORY_CACHING_TYPE CacheType
);
9222 MmAllocateMappingAddress(
9223 IN SIZE_T NumberOfBytes
,
9229 MmAllocateNonCachedMemory(
9230 IN ULONG NumberOfBytes
);
9235 MmAllocatePagesForMdl(
9236 IN PHYSICAL_ADDRESS LowAddress
,
9237 IN PHYSICAL_ADDRESS HighAddress
,
9238 IN PHYSICAL_ADDRESS SkipBytes
,
9239 IN SIZE_T TotalBytes
);
9244 MmBuildMdlForNonPagedPool(
9245 IN OUT PMDL MemoryDescriptorList
);
9251 OUT PVOID
*SectionObject
,
9252 IN ACCESS_MASK DesiredAccess
,
9253 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
9254 IN PLARGE_INTEGER MaximumSize
,
9255 IN ULONG SectionPageProtection
,
9256 IN ULONG AllocationAttributes
,
9257 IN HANDLE FileHandle OPTIONAL
,
9258 IN PFILE_OBJECT File OPTIONAL
);
9260 typedef enum _MMFLUSH_TYPE
{
9268 MmFlushImageSection(
9269 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
9270 IN MMFLUSH_TYPE FlushType
);
9275 MmFreeContiguousMemory(
9276 IN PVOID BaseAddress
);
9281 MmFreeContiguousMemorySpecifyCache(
9282 IN PVOID BaseAddress
,
9283 IN SIZE_T NumberOfBytes
,
9284 IN MEMORY_CACHING_TYPE CacheType
);
9289 MmFreeMappingAddress(
9290 IN PVOID BaseAddress
,
9296 MmFreeNonCachedMemory(
9297 IN PVOID BaseAddress
,
9298 IN SIZE_T NumberOfBytes
);
9304 IN PMDL MemoryDescriptorList
);
9308 * MmGetMdlByteCount(
9311 #define MmGetMdlByteCount(_Mdl) \
9316 * MmGetMdlByteOffset(
9319 #define MmGetMdlByteOffset(_Mdl) \
9320 ((_Mdl)->ByteOffset)
9327 #define MmGetMdlPfnArray(_Mdl) \
9328 ((PPFN_NUMBER) ((_Mdl) + 1))
9332 * MmGetMdlVirtualAddress(
9335 #define MmGetMdlVirtualAddress(_Mdl) \
9336 ((PVOID) ((PCHAR) ((_Mdl)->StartVa) + (_Mdl)->ByteOffset))
9341 MmGetPhysicalAddress(
9342 IN PVOID BaseAddress
);
9345 PPHYSICAL_MEMORY_RANGE
9347 MmGetPhysicalMemoryRanges(
9353 MmGetVirtualForPhysical(
9354 IN PHYSICAL_ADDRESS PhysicalAddress
);
9359 MmMapLockedPagesSpecifyCache(
9360 IN PMDL MemoryDescriptorList
,
9361 IN KPROCESSOR_MODE AccessMode
,
9362 IN MEMORY_CACHING_TYPE CacheType
,
9363 IN PVOID BaseAddress
,
9364 IN ULONG BugCheckOnFailure
,
9365 IN MM_PAGE_PRIORITY Priority
);
9370 MmMapLockedPagesWithReservedMapping(
9371 IN PVOID MappingAddress
,
9373 IN PMDL MemoryDescriptorList
,
9374 IN MEMORY_CACHING_TYPE CacheType
);
9379 MmMapUserAddressesToPage(
9380 IN PVOID BaseAddress
,
9381 IN SIZE_T NumberOfBytes
,
9382 IN PVOID PageAddress
);
9388 IN PHYSICAL_ADDRESS PhysicalAddress
,
9389 IN SIZE_T NumberOfBytes
,
9390 IN MEMORY_CACHING_TYPE CacheType
);
9395 MmMapViewInSessionSpace(
9397 OUT PVOID
*MappedBase
,
9398 IN OUT PSIZE_T ViewSize
);
9403 MmMapViewInSystemSpace(
9405 OUT PVOID
*MappedBase
,
9406 IN PSIZE_T ViewSize
);
9411 MmMarkPhysicalMemoryAsBad(
9412 IN PPHYSICAL_ADDRESS StartAddress
,
9413 IN OUT PLARGE_INTEGER NumberOfBytes
);
9418 MmMarkPhysicalMemoryAsGood(
9419 IN PPHYSICAL_ADDRESS StartAddress
,
9420 IN OUT PLARGE_INTEGER NumberOfBytes
);
9424 * MmGetSystemAddressForMdlSafe(
9426 * IN MM_PAGE_PRIORITY Priority)
9428 #define MmGetSystemAddressForMdlSafe(_Mdl, _Priority) \
9429 ((_Mdl)->MdlFlags & (MDL_MAPPED_TO_SYSTEM_VA \
9430 | MDL_SOURCE_IS_NONPAGED_POOL)) ? \
9431 (_Mdl)->MappedSystemVa : \
9432 (PVOID) MmMapLockedPagesSpecifyCache((_Mdl), \
9433 KernelMode, MmCached, NULL, FALSE, _Priority)
9438 MmGetSystemRoutineAddress(
9439 IN PUNICODE_STRING SystemRoutineName
);
9443 * ADDRESS_AND_SIZE_TO_SPAN_PAGES(
9447 #define ADDRESS_AND_SIZE_TO_SPAN_PAGES(_Va, \
9449 ((ULONG) ((((ULONG_PTR) (_Va) & (PAGE_SIZE - 1)) \
9450 + (_Size) + (PAGE_SIZE - 1)) >> PAGE_SHIFT))
9455 * IN PMDL MemoryDescriptorList,
9459 #define MmInitializeMdl(_MemoryDescriptorList, \
9463 (_MemoryDescriptorList)->Next = (PMDL) NULL; \
9464 (_MemoryDescriptorList)->Size = (CSHORT) (sizeof(MDL) + \
9465 (sizeof(PFN_NUMBER) * ADDRESS_AND_SIZE_TO_SPAN_PAGES(_BaseVa, _Length))); \
9466 (_MemoryDescriptorList)->MdlFlags = 0; \
9467 (_MemoryDescriptorList)->StartVa = (PVOID) PAGE_ALIGN(_BaseVa); \
9468 (_MemoryDescriptorList)->ByteOffset = BYTE_OFFSET(_BaseVa); \
9469 (_MemoryDescriptorList)->ByteCount = (ULONG) _Length; \
9476 IN PVOID VirtualAddress
);
9481 MmIsDriverVerifying(
9482 IN PDRIVER_OBJECT DriverObject
);
9487 MmIsThisAnNtAsSystem(
9493 MmIsVerifierEnabled(
9494 OUT PULONG VerifierFlags
);
9499 MmLockPagableDataSection(
9500 IN PVOID AddressWithinSection
);
9505 MmLockPagableImageSection(
9506 IN PVOID AddressWithinSection
);
9510 * MmLockPagableCodeSection(
9511 * IN PVOID AddressWithinSection)
9513 #define MmLockPagableCodeSection MmLockPagableDataSection
9518 MmLockPagableSectionByHandle(
9519 IN PVOID ImageSectionHandle
);
9525 IN PHYSICAL_ADDRESS PhysicalAddress
,
9526 IN ULONG NumberOfBytes
,
9527 IN MEMORY_CACHING_TYPE CacheEnable
);
9533 IN PMDL MemoryDescriptorList
,
9534 IN KPROCESSOR_MODE AccessMode
);
9540 IN PVOID AddressWithinSection
);
9545 MmProbeAndLockProcessPages(
9546 IN OUT PMDL MemoryDescriptorList
,
9547 IN PEPROCESS Process
,
9548 IN KPROCESSOR_MODE AccessMode
,
9549 IN LOCK_OPERATION Operation
);
9554 MmProtectMdlSystemAddress(
9555 IN PMDL MemoryDescriptorList
,
9556 IN ULONG NewProtect
);
9562 IN PVOID BaseAddress
,
9563 IN PMDL MemoryDescriptorList
);
9568 MmUnmapViewInSessionSpace(
9569 IN PVOID MappedBase
);
9574 MmUnmapViewInSystemSpace(
9575 IN PVOID MappedBase
);
9580 MmUnsecureVirtualMemory(
9581 IN HANDLE SecureHandle
);
9585 * MmPrepareMdlForReuse(
9588 #define MmPrepareMdlForReuse(_Mdl) \
9590 if (((_Mdl)->MdlFlags & MDL_PARTIAL_HAS_BEEN_MAPPED) != 0) { \
9591 ASSERT(((_Mdl)->MdlFlags & MDL_PARTIAL) != 0); \
9592 MmUnmapLockedPages((_Mdl)->MappedSystemVa, (_Mdl)); \
9593 } else if (((_Mdl)->MdlFlags & MDL_PARTIAL) == 0) { \
9594 ASSERT(((_Mdl)->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA) == 0); \
9601 MmProbeAndLockPages(
9602 IN OUT PMDL MemoryDescriptorList
,
9603 IN KPROCESSOR_MODE AccessMode
,
9604 IN LOCK_OPERATION Operation
);
9615 MmRemovePhysicalMemory(
9616 IN PPHYSICAL_ADDRESS StartAddress
,
9617 IN OUT PLARGE_INTEGER NumberOfBytes
);
9622 MmResetDriverPaging(
9623 IN PVOID AddressWithinSection
);
9628 MmSecureVirtualMemory(
9631 IN ULONG ProbeMode
);
9643 MmUnlockPagableImageSection(
9644 IN PVOID ImageSectionHandle
);
9650 IN PMDL MemoryDescriptorList
);
9656 IN PVOID BaseAddress
,
9657 IN SIZE_T NumberOfBytes
);
9662 MmUnmapReservedMapping(
9663 IN PVOID BaseAddress
,
9665 IN PMDL MemoryDescriptorList
);
9670 MmUnmapVideoDisplay(
9671 IN PVOID BaseAddress
,
9672 IN SIZE_T NumberOfBytes
);
9676 /** Object manager routines **/
9682 IN PACCESS_STATE AccessState
,
9683 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
9685 IN POBJECT_TYPE Type
);
9690 ObDereferenceSecurityDescriptor(
9691 PSECURITY_DESCRIPTOR SecurityDescriptor
,
9697 ObfDereferenceObject(
9702 * ObDereferenceObject(
9705 #define ObDereferenceObject ObfDereferenceObject
9710 ObGetObjectSecurity(
9712 OUT PSECURITY_DESCRIPTOR
*SecurityDescriptor
,
9713 OUT PBOOLEAN MemoryAllocated
);
9720 IN PACCESS_STATE PassedAccessState OPTIONAL
,
9721 IN ACCESS_MASK DesiredAccess
,
9722 IN ULONG AdditionalReferences
,
9723 OUT PVOID
* ReferencedObject OPTIONAL
,
9724 OUT PHANDLE Handle
);
9735 ObLogSecurityDescriptor(
9736 IN PSECURITY_DESCRIPTOR InputSecurityDescriptor
,
9737 OUT PSECURITY_DESCRIPTOR
*OutputSecurityDescriptor
,
9741 * ObReferenceObject(
9744 #define ObReferenceObject ObfReferenceObject
9749 ObMakeTemporaryObject(
9756 IN POBJECT_ATTRIBUTES ObjectAttributes
,
9757 IN POBJECT_TYPE ObjectType
,
9758 IN KPROCESSOR_MODE AccessMode
,
9759 IN PACCESS_STATE PassedAccessState
,
9760 IN ACCESS_MASK DesiredAccess
,
9761 IN OUT PVOID ParseContext OPTIONAL
,
9762 OUT PHANDLE Handle
);
9767 ObOpenObjectByPointer(
9769 IN ULONG HandleAttributes
,
9770 IN PACCESS_STATE PassedAccessState OPTIONAL
,
9771 IN ACCESS_MASK DesiredAccess OPTIONAL
,
9772 IN POBJECT_TYPE ObjectType OPTIONAL
,
9773 IN KPROCESSOR_MODE AccessMode
,
9774 OUT PHANDLE Handle
);
9779 ObQueryObjectAuditingByHandle(
9781 OUT PBOOLEAN GenerateOnClose
);
9786 ObReferenceObjectByHandle(
9788 IN ACCESS_MASK DesiredAccess
,
9789 IN POBJECT_TYPE ObjectType OPTIONAL
,
9790 IN KPROCESSOR_MODE AccessMode
,
9792 OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL
);
9797 ObReferenceObjectByName(
9798 IN PUNICODE_STRING ObjectPath
,
9799 IN ULONG Attributes
,
9800 IN PACCESS_STATE PassedAccessState OPTIONAL
,
9801 IN ACCESS_MASK DesiredAccess OPTIONAL
,
9802 IN POBJECT_TYPE ObjectType
,
9803 IN KPROCESSOR_MODE AccessMode
,
9804 IN OUT PVOID ParseContext OPTIONAL
,
9810 ObReferenceObjectByPointer(
9812 IN ACCESS_MASK DesiredAccess
,
9813 IN POBJECT_TYPE ObjectType
,
9814 IN KPROCESSOR_MODE AccessMode
);
9819 ObReferenceSecurityDescriptor(
9820 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
9826 ObReleaseObjectSecurity(
9827 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
9828 IN BOOLEAN MemoryAllocated
);
9832 /** Process manager routines **/
9837 PsCreateSystemProcess(
9838 IN PHANDLE ProcessHandle
,
9839 IN ACCESS_MASK DesiredAccess
,
9840 IN POBJECT_ATTRIBUTES ObjectAttributes
);
9845 PsCreateSystemThread(
9846 OUT PHANDLE ThreadHandle
,
9847 IN ULONG DesiredAccess
,
9848 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
9849 IN HANDLE ProcessHandle OPTIONAL
,
9850 OUT PCLIENT_ID ClientId OPTIONAL
,
9851 IN PKSTART_ROUTINE StartRoutine
,
9852 IN PVOID StartContext
);
9856 * PsGetCurrentProcess(VOID)
9858 #define PsGetCurrentProcess IoGetCurrentProcess
9863 PsGetCurrentProcessId(
9868 * PsGetCurrentThread(VOID)
9870 #define PsGetCurrentThread() \
9871 ((PETHREAD) KeGetCurrentThread())
9876 PsGetCurrentThreadId(
9883 PULONG MajorVersion OPTIONAL
,
9884 PULONG MinorVersion OPTIONAL
,
9885 PULONG BuildNumber OPTIONAL
,
9886 PUNICODE_STRING CSDVersion OPTIONAL
);
9891 PsRemoveCreateThreadNotifyRoutine(
9892 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
9897 PsRemoveLoadImageNotifyRoutine(
9898 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
9903 PsSetCreateProcessNotifyRoutine(
9904 IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine
,
9910 PsSetCreateThreadNotifyRoutine(
9911 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
9916 PsSetLoadImageNotifyRoutine(
9917 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
9922 PsTerminateSystemThread(
9923 IN NTSTATUS ExitStatus
);
9925 extern NTSYSAPI PEPROCESS PsInitialSystemProcess
;
9928 /** Security reference monitor routines **/
9934 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
9935 IN PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext
,
9936 IN BOOLEAN SubjectContextLocked
,
9937 IN ACCESS_MASK DesiredAccess
,
9938 IN ACCESS_MASK PreviouslyGrantedAccess
,
9939 OUT PPRIVILEGE_SET
*Privileges OPTIONAL
,
9940 IN PGENERIC_MAPPING GenericMapping
,
9941 IN KPROCESSOR_MODE AccessMode
,
9942 OUT PACCESS_MASK GrantedAccess
,
9943 OUT PNTSTATUS AccessStatus
);
9949 IN PSECURITY_DESCRIPTOR ParentDescriptor OPTIONAL
,
9950 IN PSECURITY_DESCRIPTOR ExplicitDescriptor OPTIONAL
,
9951 OUT PSECURITY_DESCRIPTOR
*NewDescriptor
,
9952 IN BOOLEAN IsDirectoryObject
,
9953 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
,
9954 IN PGENERIC_MAPPING GenericMapping
,
9955 IN POOL_TYPE PoolType
);
9961 IN PSECURITY_DESCRIPTOR ParentDescriptor OPTIONAL
,
9962 IN PSECURITY_DESCRIPTOR ExplicitDescriptor OPTIONAL
,
9963 OUT PSECURITY_DESCRIPTOR
*NewDescriptor
,
9964 IN GUID
*ObjectType OPTIONAL
,
9965 IN BOOLEAN IsDirectoryObject
,
9966 IN ULONG AutoInheritFlags
,
9967 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
,
9968 IN PGENERIC_MAPPING GenericMapping
,
9969 IN POOL_TYPE PoolType
);
9975 IN OUT PSECURITY_DESCRIPTOR
*SecurityDescriptor
);
9980 SeSinglePrivilegeCheck(
9981 LUID PrivilegeValue
,
9982 KPROCESSOR_MODE PreviousMode
);
9987 SeValidSecurityDescriptor(
9989 IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
9993 /** NtXxx routines **/
9999 OUT PHANDLE ProcessHandle
,
10000 IN ACCESS_MASK DesiredAccess
,
10001 IN POBJECT_ATTRIBUTES ObjectAttributes
,
10002 IN PCLIENT_ID ClientId OPTIONAL
);
10007 NtQueryInformationProcess(
10008 IN HANDLE ProcessHandle
,
10009 IN PROCESSINFOCLASS ProcessInformationClass
,
10010 OUT PVOID ProcessInformation
,
10011 IN ULONG ProcessInformationLength
,
10012 OUT PULONG ReturnLength OPTIONAL
);
10016 /** NtXxx and ZwXxx routines **/
10022 IN HANDLE TimerHandle
,
10023 OUT PBOOLEAN CurrentState OPTIONAL
);
10040 ZwCreateDirectoryObject(
10041 OUT PHANDLE DirectoryHandle
,
10042 IN ACCESS_MASK DesiredAccess
,
10043 IN POBJECT_ATTRIBUTES ObjectAttributes
);
10049 OUT PHANDLE EventHandle
,
10050 IN ACCESS_MASK DesiredAccess
,
10051 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
10052 IN EVENT_TYPE EventType
,
10053 IN BOOLEAN InitialState
);
10059 OUT PHANDLE EventHandle
,
10060 IN ACCESS_MASK DesiredAccess
,
10061 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
10062 IN EVENT_TYPE EventType
,
10063 IN BOOLEAN InitialState
);
10069 OUT PHANDLE FileHandle
,
10070 IN ACCESS_MASK DesiredAccess
,
10071 IN POBJECT_ATTRIBUTES ObjectAttributes
,
10072 OUT PIO_STATUS_BLOCK IoStatusBlock
,
10073 IN PLARGE_INTEGER AllocationSize OPTIONAL
,
10074 IN ULONG FileAttributes
,
10075 IN ULONG ShareAccess
,
10076 IN ULONG CreateDisposition
,
10077 IN ULONG CreateOptions
,
10078 IN PVOID EaBuffer OPTIONAL
,
10079 IN ULONG EaLength
);
10085 OUT PHANDLE KeyHandle
,
10086 IN ACCESS_MASK DesiredAccess
,
10087 IN POBJECT_ATTRIBUTES ObjectAttributes
,
10088 IN ULONG TitleIndex
,
10089 IN PUNICODE_STRING Class OPTIONAL
,
10090 IN ULONG CreateOptions
,
10091 OUT PULONG Disposition OPTIONAL
);
10097 OUT PHANDLE TimerHandle
,
10098 IN ACCESS_MASK DesiredAccess
,
10099 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
10100 IN TIMER_TYPE TimerType
);
10106 IN HANDLE KeyHandle
);
10112 IN HANDLE KeyHandle
,
10113 IN PUNICODE_STRING ValueName
);
10118 NtDeviceIoControlFile(
10119 IN HANDLE DeviceHandle
,
10120 IN HANDLE Event OPTIONAL
,
10121 IN PIO_APC_ROUTINE UserApcRoutine OPTIONAL
,
10122 IN PVOID UserApcContext OPTIONAL
,
10123 OUT PIO_STATUS_BLOCK IoStatusBlock
,
10124 IN ULONG IoControlCode
,
10125 IN PVOID InputBuffer
,
10126 IN ULONG InputBufferSize
,
10127 OUT PVOID OutputBuffer
,
10128 IN ULONG OutputBufferSize
);
10133 ZwDeviceIoControlFile(
10134 IN HANDLE DeviceHandle
,
10135 IN HANDLE Event OPTIONAL
,
10136 IN PIO_APC_ROUTINE UserApcRoutine OPTIONAL
,
10137 IN PVOID UserApcContext OPTIONAL
,
10138 OUT PIO_STATUS_BLOCK IoStatusBlock
,
10139 IN ULONG IoControlCode
,
10140 IN PVOID InputBuffer
,
10141 IN ULONG InputBufferSize
,
10142 OUT PVOID OutputBuffer
,
10143 IN ULONG OutputBufferSize
);
10149 IN HANDLE KeyHandle
,
10151 IN KEY_INFORMATION_CLASS KeyInformationClass
,
10152 OUT PVOID KeyInformation
,
10154 OUT PULONG ResultLength
);
10159 ZwEnumerateValueKey(
10160 IN HANDLE KeyHandle
,
10162 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
,
10163 OUT PVOID KeyValueInformation
,
10165 OUT PULONG ResultLength
);
10171 IN HANDLE KeyHandle
);
10176 ZwMakeTemporaryObject(
10182 NtMapViewOfSection(
10183 IN HANDLE SectionHandle
,
10184 IN HANDLE ProcessHandle
,
10185 IN OUT PVOID
*BaseAddress
,
10187 IN ULONG CommitSize
,
10188 IN OUT PLARGE_INTEGER SectionOffset OPTIONAL
,
10189 IN OUT PSIZE_T ViewSize
,
10190 IN SECTION_INHERIT InheritDisposition
,
10191 IN ULONG AllocationType
,
10197 ZwMapViewOfSection(
10198 IN HANDLE SectionHandle
,
10199 IN HANDLE ProcessHandle
,
10200 IN OUT PVOID
*BaseAddress
,
10202 IN ULONG CommitSize
,
10203 IN OUT PLARGE_INTEGER SectionOffset OPTIONAL
,
10204 IN OUT PSIZE_T ViewSize
,
10205 IN SECTION_INHERIT InheritDisposition
,
10206 IN ULONG AllocationType
,
10213 OUT PHANDLE FileHandle
,
10214 IN ACCESS_MASK DesiredAccess
,
10215 IN POBJECT_ATTRIBUTES ObjectAttributes
,
10216 OUT PIO_STATUS_BLOCK IoStatusBlock
,
10217 IN ULONG ShareAccess
,
10218 IN ULONG OpenOptions
);
10224 OUT PHANDLE FileHandle
,
10225 IN ACCESS_MASK DesiredAccess
,
10226 IN POBJECT_ATTRIBUTES ObjectAttributes
,
10227 OUT PIO_STATUS_BLOCK IoStatusBlock
,
10228 IN ULONG ShareAccess
,
10229 IN ULONG OpenOptions
);
10235 OUT PHANDLE KeyHandle
,
10236 IN ACCESS_MASK DesiredAccess
,
10237 IN POBJECT_ATTRIBUTES ObjectAttributes
);
10243 OUT PHANDLE SectionHandle
,
10244 IN ACCESS_MASK DesiredAccess
,
10245 IN POBJECT_ATTRIBUTES ObjectAttributes
);
10250 ZwOpenSymbolicLinkObject(
10251 OUT PHANDLE LinkHandle
,
10252 IN ACCESS_MASK DesiredAccess
,
10253 IN POBJECT_ATTRIBUTES ObjectAttributes
);
10259 OUT PHANDLE TimerHandle
,
10260 IN ACCESS_MASK DesiredAccess
,
10261 IN POBJECT_ATTRIBUTES ObjectAttributes
);
10266 ZwQueryInformationFile(
10267 IN HANDLE FileHandle
,
10268 OUT PIO_STATUS_BLOCK IoStatusBlock
,
10269 OUT PVOID FileInformation
,
10271 IN FILE_INFORMATION_CLASS FileInformationClass
);
10277 IN HANDLE KeyHandle
,
10278 IN KEY_INFORMATION_CLASS KeyInformationClass
,
10279 OUT PVOID KeyInformation
,
10281 OUT PULONG ResultLength
);
10286 ZwQuerySymbolicLinkObject(
10287 IN HANDLE LinkHandle
,
10288 IN OUT PUNICODE_STRING LinkTarget
,
10289 OUT PULONG ReturnedLength OPTIONAL
);
10295 IN HANDLE KeyHandle
,
10296 IN PUNICODE_STRING ValueName
,
10297 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
,
10298 OUT PVOID KeyValueInformation
,
10300 OUT PULONG ResultLength
);
10306 IN HANDLE FileHandle
,
10307 IN HANDLE Event OPTIONAL
,
10308 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
10309 IN PVOID ApcContext OPTIONAL
,
10310 OUT PIO_STATUS_BLOCK IoStatusBlock
,
10313 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
10314 IN PULONG Key OPTIONAL
);
10320 IN HANDLE FileHandle
,
10321 IN HANDLE Event OPTIONAL
,
10322 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
10323 IN PVOID ApcContext OPTIONAL
,
10324 OUT PIO_STATUS_BLOCK IoStatusBlock
,
10327 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
10328 IN PULONG Key OPTIONAL
);
10334 IN HANDLE EventHandle
,
10335 OUT PLONG PreviousState OPTIONAL
);
10341 IN HANDLE EventHandle
,
10342 OUT PLONG PreviousState OPTIONAL
);
10347 ZwSetInformationFile(
10348 IN HANDLE FileHandle
,
10349 OUT PIO_STATUS_BLOCK IoStatusBlock
,
10350 IN PVOID FileInformation
,
10352 IN FILE_INFORMATION_CLASS FileInformationClass
);
10357 ZwSetInformationThread(
10358 IN HANDLE ThreadHandle
,
10359 IN THREADINFOCLASS ThreadInformationClass
,
10360 IN PVOID ThreadInformation
,
10361 IN ULONG ThreadInformationLength
);
10367 IN HANDLE TimerHandle
,
10368 IN PLARGE_INTEGER DueTime
,
10369 IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL
,
10370 IN PVOID TimerContext OPTIONAL
,
10371 IN BOOLEAN WakeTimer
,
10372 IN LONG Period OPTIONAL
,
10373 OUT PBOOLEAN PreviousState OPTIONAL
);
10379 IN HANDLE KeyHandle
,
10380 IN PUNICODE_STRING ValueName
,
10381 IN ULONG TitleIndex OPTIONAL
,
10384 IN ULONG DataSize
);
10386 /* [Nt|Zw]MapViewOfSection.InheritDisposition constants */
10387 #define AT_EXTENDABLE_FILE 0x00002000
10388 #define AT_RESERVED 0x20000000
10389 #define AT_ROUND_TO_PAGE 0x40000000
10394 NtUnmapViewOfSection(
10395 IN HANDLE ProcessHandle
,
10396 IN PVOID BaseAddress
);
10401 ZwUnmapViewOfSection(
10402 IN HANDLE ProcessHandle
,
10403 IN PVOID BaseAddress
);
10408 NtWaitForSingleObject(
10409 IN HANDLE ObjectHandle
,
10410 IN BOOLEAN Alertable
,
10411 IN PLARGE_INTEGER TimeOut OPTIONAL
);
10416 ZwWaitForSingleObject(
10417 IN HANDLE ObjectHandle
,
10418 IN BOOLEAN Alertable
,
10419 IN PLARGE_INTEGER TimeOut OPTIONAL
);
10425 IN HANDLE FileHandle
,
10426 IN HANDLE Event OPTIONAL
,
10427 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
10428 IN PVOID ApcContext OPTIONAL
,
10429 OUT PIO_STATUS_BLOCK IoStatusBlock
,
10432 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
10433 IN PULONG Key OPTIONAL
);
10439 IN HANDLE FileHandle
,
10440 IN HANDLE Event OPTIONAL
,
10441 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
10442 IN PVOID ApcContext OPTIONAL
,
10443 OUT PIO_STATUS_BLOCK IoStatusBlock
,
10446 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
10447 IN PULONG Key OPTIONAL
);
10451 /** Power management support routines **/
10457 IN PDEVICE_OBJECT DeviceObject
,
10463 PoRegisterDeviceForIdleDetection(
10464 IN PDEVICE_OBJECT DeviceObject
,
10465 IN ULONG ConservationIdleTime
,
10466 IN ULONG PerformanceIdleTime
,
10467 IN DEVICE_POWER_STATE State
);
10472 PoRegisterSystemState(
10473 IN PVOID StateHandle
,
10474 IN EXECUTION_STATE Flags
);
10480 IN PDEVICE_OBJECT DeviceObject
,
10481 IN UCHAR MinorFunction
,
10482 IN POWER_STATE PowerState
,
10483 IN PREQUEST_POWER_COMPLETE CompletionFunction
,
10485 OUT PIRP
*Irp OPTIONAL
);
10490 PoRequestShutdownEvent(
10497 PULONG IdlePointer
);
10503 IN PDEVICE_OBJECT DeviceObject
,
10504 IN POWER_STATE_TYPE Type
,
10505 IN POWER_STATE State
);
10511 IN EXECUTION_STATE Flags
);
10516 PoStartNextPowerIrp(
10522 PoUnregisterSystemState(
10523 IN PVOID StateHandle
);
10527 /** WMI library support routines **/
10531 WmiCompleteRequest(
10532 IN PDEVICE_OBJECT DeviceObject
,
10534 IN NTSTATUS Status
,
10535 IN ULONG BufferUsed
,
10536 IN CCHAR PriorityBoost
);
10541 IN PDEVICE_OBJECT DeviceObject
,
10543 IN ULONG InstanceIndex
,
10544 IN ULONG EventDataSize
,
10545 IN PVOID EventData
);
10550 WmiQueryTraceInformation(
10551 IN TRACE_INFORMATION_CLASS TraceInformationClass
,
10552 OUT PVOID TraceInformation
,
10553 IN ULONG TraceInformationLength
,
10554 OUT PULONG RequiredLength OPTIONAL
,
10555 IN PVOID Buffer OPTIONAL
);
10560 IN PWMILIB_CONTEXT WmiLibInfo
,
10561 IN PDEVICE_OBJECT DeviceObject
,
10563 OUT PSYSCTL_IRP_DISPOSITION IrpDisposition
);
10569 IN TRACEHANDLE LoggerHandle
,
10570 IN ULONG MessageFlags
,
10571 IN LPGUID MessageGuid
,
10572 IN USHORT MessageNumber
,
10576 /* FIXME: Get va_list from where? */
10581 IN TRACEHANDLE LoggerHandle
,
10582 IN ULONG MessageFlags
,
10583 IN LPGUID MessageGuid
,
10584 IN USHORT MessageNumber
,
10585 IN
va_list MessageArgList
);
10589 /** Kernel debugger routines **/
10611 DbgBreakPointWithStatus(
10623 IN ULONG ComponentId
,
10631 DbgPrintReturnControlC(
10638 DbgQueryDebugFilterState(
10639 IN ULONG ComponentId
,
10645 DbgSetDebugFilterState(
10646 IN ULONG ComponentId
,
10652 #define KdPrint(_x_) DbgPrint _x_
10653 #define KdPrintEx(_x_) DbgPrintEx _x_
10654 #define KdBreakPoint() DbgBreakPoint()
10655 #define KdBreakPointWithStatus(s) DbgBreakPointWithStatus(s)
10659 #define KdPrint(_x_)
10660 #define KdPrintEx(_x_)
10661 #define KdBreakPoint()
10662 #define KdBreakPointWithStatus(s)
10666 #if defined(_NTDDK_) || defined(_NTHAL_) || defined(_WDMDDK_) || defined(_NTOSP_)
10668 extern NTKERNELAPI PBOOLEAN KdDebuggerNotPresent
;
10669 extern NTKERNELAPI PBOOLEAN KdDebuggerEnabled
;
10670 #define KD_DEBUGGER_ENABLED *KdDebuggerEnabled
10671 #define KD_DEBUGGER_NOT_PRESENT *KdDebuggerNotPresent
10675 extern BOOLEAN KdDebuggerNotPresent
;
10676 extern BOOLEAN KdDebuggerEnabled
;
10677 #define KD_DEBUGGER_ENABLED KdDebuggerEnabled
10678 #define KD_DEBUGGER_NOT_PRESENT KdDebuggerNotPresent
10686 #endif /* __WINDDK_H */