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.
39 #define NTHALAPI DECLSPEC_IMPORT
44 /* Pseudo modifiers for parameters */
52 #define RESTRICTED_POINTER
55 #define POINTER_ALIGNMENT DECLSPEC_ALIGN(8)
57 #define POINTER_ALIGNMENT
60 #define DECLSPEC_ADDRSAFE
62 #ifdef NONAMELESSUNION
63 # define _DDK_DUMMYUNION_MEMBER(name) DUMMYUNIONNAME.name
64 # define _DDK_DUMMYUNION_N_MEMBER(n, name) DUMMYUNIONNAME##n.name
66 # define _DDK_DUMMYUNION_MEMBER(name) name
67 # define _DDK_DUMMYUNION_N_MEMBER(n, name) name
70 #if !defined(_NTSYSTEM_)
71 #define NTSYSAPI DECLSPEC_IMPORT
72 #define NTSYSCALLAPI DECLSPEC_IMPORT
75 #if defined(_NTDLLBUILD_)
78 #define NTSYSCALLAPI DECLSPEC_ADDRSAFE
85 #define ALIGN_DOWN(s, t) \
86 ((ULONG)(s) & ~(sizeof(t) - 1))
88 #define ALIGN_UP(s, t) \
89 (ALIGN_DOWN(((ULONG)(s) + sizeof(t) - 1), t))
91 #define ALIGN_DOWN_POINTER(p, t) \
92 ((PVOID)((ULONG_PTR)(p) & ~((ULONG_PTR)sizeof(t) - 1)))
94 #define ALIGN_UP_POINTER(p, t) \
95 (ALIGN_DOWN_POINTER(((ULONG_PTR)(p) + sizeof(t) - 1), t))
101 #ifndef __IID_ALIGNED__
102 #define __IID_ALIGNED__
104 inline int IsEqualGUIDAligned(REFGUID guid1
, REFGUID guid2
)
106 return ((*(PLONGLONG
)(&guid1
) == *(PLONGLONG
)(&guid2
)) && (*((PLONGLONG
)(&guid1
) + 1) == *((PLONGLONG
)(&guid2
) + 1)));
109 #define IsEqualGUIDAligned(guid1, guid2) \
110 ((*(PLONGLONG)(guid1) == *(PLONGLONG)(guid2)) && (*((PLONGLONG)(guid1) + 1) == *((PLONGLONG)(guid2) + 1)))
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
;
134 struct _LOADER_PARAMETER_BLOCK
;
139 /* FIXME: Unknown definitions */
140 struct _SET_PARTITION_INFORMATION_EX
;
141 typedef ULONG WAIT_TYPE
;
144 typedef HANDLE TRACEHANDLE
;
145 typedef PVOID PWMILIB_CONTEXT
;
146 typedef ULONG LOGICAL
;
150 ** WmiLib specific structure
154 IrpProcessed
, // Irp was processed and possibly completed
155 IrpNotCompleted
, // Irp was process and NOT completed
156 IrpNotWmi
, // Irp is not a WMI irp
157 IrpForward
// Irp is wmi irp, but targeted at another device object
158 } SYSCTL_IRP_DISPOSITION
, *PSYSCTL_IRP_DISPOSITION
;
161 ** Routines specific to this DDK
163 #define NtCurrentThread() ( (HANDLE)(LONG_PTR) -2 )
169 typedef UCHAR KIRQL
, *PKIRQL
;
180 struct _COMPRESSED_DATA_INFO
;
183 #define NtCurrentProcess() ( (HANDLE)(LONG_PTR) -1 )
184 #define ZwCurrentProcess() NtCurrentProcess()
185 #define NtCurrentThread() ( (HANDLE)(LONG_PTR) -2 )
186 #define ZwCurrentThread() NtCurrentThread()
189 #define KIP0PCRADDRESS 0xffdff000
192 #define KERNEL_STACK_SIZE 12288
193 #define KERNEL_LARGE_STACK_SIZE 61440
194 #define KERNEL_LARGE_STACK_COMMIT 12288
196 #define EXCEPTION_READ_FAULT 0
197 #define EXCEPTION_WRITE_FAULT 1
198 #define EXCEPTION_EXECUTE_FAULT 8
200 #define DPFLTR_ERROR_LEVEL 0
201 #define DPFLTR_WARNING_LEVEL 1
202 #define DPFLTR_TRACE_LEVEL 2
203 #define DPFLTR_INFO_LEVEL 3
204 #define DPFLTR_MASK 0x80000000
206 typedef enum _DPFLTR_TYPE
208 DPFLTR_SYSTEM_ID
= 0,
213 DPFLTR_CRASHDUMP_ID
= 5,
214 DPFLTR_CDAUDIO_ID
= 6,
216 DPFLTR_CLASSPNP_ID
= 8,
218 DPFLTR_REDBOOK_ID
= 10,
219 DPFLTR_STORPROP_ID
= 11,
220 DPFLTR_SCSIPORT_ID
= 12,
221 DPFLTR_SCSIMINIPORT_ID
= 13,
222 DPFLTR_CONFIG_ID
= 14,
223 DPFLTR_I8042PRT_ID
= 15,
224 DPFLTR_SERMOUSE_ID
= 16,
225 DPFLTR_LSERMOUS_ID
= 17,
226 DPFLTR_KBDHID_ID
= 18,
227 DPFLTR_MOUHID_ID
= 19,
228 DPFLTR_KBDCLASS_ID
= 20,
229 DPFLTR_MOUCLASS_ID
= 21,
230 DPFLTR_TWOTRACK_ID
= 22,
231 DPFLTR_WMILIB_ID
= 23,
234 DPFLTR_HALIA64_ID
= 26,
235 DPFLTR_VIDEO_ID
= 27,
236 DPFLTR_SVCHOST_ID
= 28,
237 DPFLTR_VIDEOPRT_ID
= 29,
238 DPFLTR_TCPIP_ID
= 30,
239 DPFLTR_DMSYNTH_ID
= 31,
240 DPFLTR_NTOSPNP_ID
= 32,
241 DPFLTR_FASTFAT_ID
= 33,
242 DPFLTR_SAMSS_ID
= 34,
243 DPFLTR_PNPMGR_ID
= 35,
244 DPFLTR_NETAPI_ID
= 36,
245 DPFLTR_SCSERVER_ID
= 37,
246 DPFLTR_SCCLIENT_ID
= 38,
247 DPFLTR_SERIAL_ID
= 39,
248 DPFLTR_SERENUM_ID
= 40,
250 DPFLTR_BOOTOK_ID
= 42,
251 DPFLTR_BOOTVRFY_ID
= 43,
252 DPFLTR_RPCPROXY_ID
= 44,
253 DPFLTR_AUTOCHK_ID
= 45,
254 DPFLTR_DCOMSS_ID
= 46,
255 DPFLTR_UNIMODEM_ID
= 47,
257 DPFLTR_FLTMGR_ID
= 49,
258 DPFLTR_WMICORE_ID
= 50,
259 DPFLTR_BURNENG_ID
= 51,
260 DPFLTR_IMAPI_ID
= 52,
262 DPFLTR_FUSION_ID
= 54,
263 DPFLTR_IDLETASK_ID
= 55,
264 DPFLTR_SOFTPCI_ID
= 56,
266 DPFLTR_MCHGR_ID
= 58,
268 DPFLTR_PCIIDE_ID
= 60,
269 DPFLTR_FLOPPY_ID
= 61,
271 DPFLTR_TERMSRV_ID
= 63,
272 DPFLTR_W32TIME_ID
= 64,
273 DPFLTR_PREFETCHER_ID
= 65,
274 DPFLTR_RSFILTER_ID
= 66,
275 DPFLTR_FCPORT_ID
= 67,
278 DPFLTR_DMCONFIG_ID
= 70,
279 DPFLTR_DMADMIN_ID
= 71,
280 DPFLTR_WSOCKTRANSPORT_ID
= 72,
282 DPFLTR_PNPMEM_ID
= 74,
283 DPFLTR_PROCESSOR_ID
= 75,
284 DPFLTR_DMSERVER_ID
= 76,
286 DPFLTR_INFINIBAND_ID
= 78,
287 DPFLTR_IHVDRIVER_ID
= 79,
288 DPFLTR_IHVVIDEO_ID
= 80,
289 DPFLTR_IHVAUDIO_ID
= 81,
290 DPFLTR_IHVNETWORK_ID
= 82,
291 DPFLTR_IHVSTREAMING_ID
= 83,
292 DPFLTR_IHVBUS_ID
= 84,
294 DPFLTR_RTLTHREADPOOL_ID
= 86,
296 DPFLTR_TCPIP6_ID
= 88,
297 DPFLTR_ISAPNP_ID
= 89,
299 DPFLTR_STORPORT_ID
= 91,
300 DPFLTR_STORMINIPORT_ID
= 92,
301 DPFLTR_PRINTSPOOLER_ID
= 93,
303 DPFLTR_VDSBAS_ID
= 95,
304 DPFLTR_VDSDYNDR_ID
= 96,
305 DPFLTR_VDSUTIL_ID
= 97,
306 DPFLTR_DFRGIFC_ID
= 98,
307 DPFLTR_DEFAULT_ID
= 99,
309 DPFLTR_DFSC_ID
= 101,
310 DPFLTR_WOW64_ID
= 102,
314 #define MAXIMUM_PROCESSORS 32
316 #define MAXIMUM_WAIT_OBJECTS 64
318 #define EX_RUNDOWN_ACTIVE 0x1
319 #define EX_RUNDOWN_COUNT_SHIFT 0x1
320 #define EX_RUNDOWN_COUNT_INC (1 << EX_RUNDOWN_COUNT_SHIFT)
322 #define METHOD_BUFFERED 0
323 #define METHOD_IN_DIRECT 1
324 #define METHOD_OUT_DIRECT 2
325 #define METHOD_NEITHER 3
327 #define LOW_PRIORITY 0
328 #define LOW_REALTIME_PRIORITY 16
329 #define HIGH_PRIORITY 31
330 #define MAXIMUM_PRIORITY 32
332 #define MAXIMUM_SUSPEND_COUNT MAXCHAR
334 #define MAXIMUM_FILENAME_LENGTH 256
336 #define FILE_SUPERSEDED 0x00000000
337 #define FILE_OPENED 0x00000001
338 #define FILE_CREATED 0x00000002
339 #define FILE_OVERWRITTEN 0x00000003
340 #define FILE_EXISTS 0x00000004
341 #define FILE_DOES_NOT_EXIST 0x00000005
343 #define FILE_USE_FILE_POINTER_POSITION 0xfffffffe
344 #define FILE_WRITE_TO_END_OF_FILE 0xffffffff
346 /* also in winnt.h */
347 #define FILE_LIST_DIRECTORY 0x00000001
348 #define FILE_READ_DATA 0x00000001
349 #define FILE_ADD_FILE 0x00000002
350 #define FILE_WRITE_DATA 0x00000002
351 #define FILE_ADD_SUBDIRECTORY 0x00000004
352 #define FILE_APPEND_DATA 0x00000004
353 #define FILE_CREATE_PIPE_INSTANCE 0x00000004
354 #define FILE_READ_EA 0x00000008
355 #define FILE_WRITE_EA 0x00000010
356 #define FILE_EXECUTE 0x00000020
357 #define FILE_TRAVERSE 0x00000020
358 #define FILE_DELETE_CHILD 0x00000040
359 #define FILE_READ_ATTRIBUTES 0x00000080
360 #define FILE_WRITE_ATTRIBUTES 0x00000100
362 #define FILE_SHARE_READ 0x00000001
363 #define FILE_SHARE_WRITE 0x00000002
364 #define FILE_SHARE_DELETE 0x00000004
365 #define FILE_SHARE_VALID_FLAGS 0x00000007
367 #define FILE_ATTRIBUTE_READONLY 0x00000001
368 #define FILE_ATTRIBUTE_HIDDEN 0x00000002
369 #define FILE_ATTRIBUTE_SYSTEM 0x00000004
370 #define FILE_ATTRIBUTE_DIRECTORY 0x00000010
371 #define FILE_ATTRIBUTE_ARCHIVE 0x00000020
372 #define FILE_ATTRIBUTE_DEVICE 0x00000040
373 #define FILE_ATTRIBUTE_NORMAL 0x00000080
374 #define FILE_ATTRIBUTE_TEMPORARY 0x00000100
375 #define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200
376 #define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400
377 #define FILE_ATTRIBUTE_COMPRESSED 0x00000800
378 #define FILE_ATTRIBUTE_OFFLINE 0x00001000
379 #define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000
380 #define FILE_ATTRIBUTE_ENCRYPTED 0x00004000
382 #define FILE_ATTRIBUTE_VALID_FLAGS 0x00007fb7
383 #define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x000031a7
385 #define FILE_COPY_STRUCTURED_STORAGE 0x00000041
386 #define FILE_STRUCTURED_STORAGE 0x00000441
388 #define FILE_VALID_OPTION_FLAGS 0x00ffffff
389 #define FILE_VALID_PIPE_OPTION_FLAGS 0x00000032
390 #define FILE_VALID_MAILSLOT_OPTION_FLAGS 0x00000032
391 #define FILE_VALID_SET_FLAGS 0x00000036
393 #define FILE_SUPERSEDE 0x00000000
394 #define FILE_OPEN 0x00000001
395 #define FILE_CREATE 0x00000002
396 #define FILE_OPEN_IF 0x00000003
397 #define FILE_OVERWRITE 0x00000004
398 #define FILE_OVERWRITE_IF 0x00000005
399 #define FILE_MAXIMUM_DISPOSITION 0x00000005
401 #define FILE_DIRECTORY_FILE 0x00000001
402 #define FILE_WRITE_THROUGH 0x00000002
403 #define FILE_SEQUENTIAL_ONLY 0x00000004
404 #define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008
405 #define FILE_SYNCHRONOUS_IO_ALERT 0x00000010
406 #define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020
407 #define FILE_NON_DIRECTORY_FILE 0x00000040
408 #define FILE_CREATE_TREE_CONNECTION 0x00000080
409 #define FILE_COMPLETE_IF_OPLOCKED 0x00000100
410 #define FILE_NO_EA_KNOWLEDGE 0x00000200
411 #define FILE_OPEN_FOR_RECOVERY 0x00000400
412 #define FILE_RANDOM_ACCESS 0x00000800
413 #define FILE_DELETE_ON_CLOSE 0x00001000
414 #define FILE_OPEN_BY_FILE_ID 0x00002000
415 #define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000
416 #define FILE_NO_COMPRESSION 0x00008000
417 #define FILE_RESERVE_OPFILTER 0x00100000
418 #define FILE_OPEN_REPARSE_POINT 0x00200000
419 #define FILE_OPEN_NO_RECALL 0x00400000
420 #define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000
422 #define FILE_ANY_ACCESS 0x00000000
423 #define FILE_SPECIAL_ACCESS FILE_ANY_ACCESS
424 #define FILE_READ_ACCESS 0x00000001
425 #define FILE_WRITE_ACCESS 0x00000002
427 #define FILE_ALL_ACCESS \
428 (STANDARD_RIGHTS_REQUIRED | \
432 #define FILE_GENERIC_EXECUTE \
433 (STANDARD_RIGHTS_EXECUTE | \
434 FILE_READ_ATTRIBUTES | \
438 #define FILE_GENERIC_READ \
439 (STANDARD_RIGHTS_READ | \
441 FILE_READ_ATTRIBUTES | \
445 #define FILE_GENERIC_WRITE \
446 (STANDARD_RIGHTS_WRITE | \
448 FILE_WRITE_ATTRIBUTES | \
454 #define OBJ_NAME_PATH_SEPARATOR ((WCHAR)L'\\')
456 #define OBJECT_TYPE_CREATE (0x0001)
457 #define OBJECT_TYPE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
459 #define DIRECTORY_QUERY (0x0001)
460 #define DIRECTORY_TRAVERSE (0x0002)
461 #define DIRECTORY_CREATE_OBJECT (0x0004)
462 #define DIRECTORY_CREATE_SUBDIRECTORY (0x0008)
463 #define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF)
465 #define EVENT_QUERY_STATE (0x0001)
466 #define EVENT_MODIFY_STATE (0x0002)
467 #define EVENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3)
469 #define SEMAPHORE_QUERY_STATE (0x0001)
470 #define SEMAPHORE_MODIFY_STATE (0x0002)
471 #define SEMAPHORE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3)
473 #define THREAD_ALERT (0x0004)
475 #define FM_LOCK_BIT (0x1)
476 #define FM_LOCK_BIT_V (0x0)
477 #define FM_LOCK_WAITER_WOKEN (0x2)
478 #define FM_LOCK_WAITER_INC (0x4)
480 /* Exported object types */
481 extern POBJECT_TYPE NTSYSAPI ExDesktopObjectType
;
482 extern POBJECT_TYPE NTSYSAPI ExEventObjectType
;
483 extern POBJECT_TYPE NTSYSAPI ExSemaphoreObjectType
;
484 extern POBJECT_TYPE NTSYSAPI ExWindowStationObjectType
;
485 extern ULONG NTSYSAPI IoDeviceHandlerObjectSize
;
486 extern POBJECT_TYPE NTSYSAPI IoDeviceHandlerObjectType
;
487 extern POBJECT_TYPE NTSYSAPI IoDeviceObjectType
;
488 extern POBJECT_TYPE NTSYSAPI IoDriverObjectType
;
489 extern POBJECT_TYPE NTSYSAPI IoFileObjectType
;
490 extern POBJECT_TYPE NTSYSAPI PsThreadType
;
491 extern POBJECT_TYPE NTSYSAPI LpcPortObjectType
;
492 extern POBJECT_TYPE NTSYSAPI SeTokenObjectType
;
493 extern POBJECT_TYPE NTSYSAPI PsProcessType
;
495 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
496 extern volatile CCHAR NTSYSAPI KeNumberProcessors
;
498 #if (NTDDI_VERSION >= NTDDI_WINXP)
499 extern CCHAR NTSYSAPI KeNumberProcessors
;
501 //extern PCCHAR KeNumberProcessors;
502 extern NTSYSAPI CCHAR KeNumberProcessors
; //FIXME: Note to Alex: I won't fix this atm, since I prefer to discuss this with you first.
506 #define PROCESSOR_FEATURE_MAX 64
507 #define MAX_WOW64_SHARED_ENTRIES 16
509 typedef enum _ALTERNATIVE_ARCHITECTURE_TYPE
514 } ALTERNATIVE_ARCHITECTURE_TYPE
;
516 typedef struct _KSYSTEM_TIME
521 } KSYSTEM_TIME
, *PKSYSTEM_TIME
;
523 extern volatile KSYSTEM_TIME KeTickCount
;
525 #define NX_SUPPORT_POLICY_ALWAYSOFF 0
526 #define NX_SUPPORT_POLICY_ALWAYSON 1
527 #define NX_SUPPORT_POLICY_OPTIN 2
528 #define NX_SUPPORT_POLICY_OPTOUT 3
530 typedef struct _KUSER_SHARED_DATA
532 ULONG TickCountLowDeprecated
;
533 ULONG TickCountMultiplier
;
534 volatile KSYSTEM_TIME InterruptTime
;
535 volatile KSYSTEM_TIME SystemTime
;
536 volatile KSYSTEM_TIME TimeZoneBias
;
537 USHORT ImageNumberLow
;
538 USHORT ImageNumberHigh
;
539 WCHAR NtSystemRoot
[260];
540 ULONG MaxStackTraceDepth
;
541 ULONG CryptoExponent
;
543 ULONG LargePageMinimum
;
545 NT_PRODUCT_TYPE NtProductType
;
546 BOOLEAN ProductTypeIsValid
;
547 ULONG NtMajorVersion
;
548 ULONG NtMinorVersion
;
549 BOOLEAN ProcessorFeatures
[PROCESSOR_FEATURE_MAX
];
552 volatile ULONG TimeSlip
;
553 ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture
;
554 LARGE_INTEGER SystemExpirationDate
;
556 BOOLEAN KdDebuggerEnabled
;
557 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
558 UCHAR NXSupportPolicy
;
560 volatile ULONG ActiveConsoleId
;
561 volatile ULONG DismountCount
;
562 ULONG ComPlusPackage
;
563 ULONG LastSystemRITEventTickCount
;
564 ULONG NumberOfPhysicalPages
;
565 BOOLEAN SafeBootMode
;
568 ULONGLONG TestRetInstruction
;
570 ULONG SystemCallReturn
;
571 ULONGLONG SystemCallPad
[3];
573 volatile KSYSTEM_TIME TickCount
;
574 volatile ULONG64 TickCountQuad
;
577 #if (NTDDI_VERSION >= NTDDI_WS03)
578 LONGLONG ConsoleSessionForegroundProcessId
;
579 ULONG Wow64SharedInformation
[MAX_WOW64_SHARED_ENTRIES
];
581 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
582 USHORT UserModeGlobalLogger
[8];
583 ULONG HeapTracingPid
[2];
584 ULONG CritSecTracingPid
[2];
587 ULONG SharedDataFlags
;
590 ULONG DbgErrorPortPresent
:1;
591 ULONG DbgElevationEnabled
:1;
592 ULONG DbgVirtEnabled
:1;
593 ULONG DbgInstallerDetectEnabled
:1;
597 ULONG ImageFileExecutionOptions
;
598 KAFFINITY ActiveProcessorAffinity
;
600 } KUSER_SHARED_DATA
, *PKUSER_SHARED_DATA
;
603 ** IRP function codes
606 #define IRP_MJ_CREATE 0x00
607 #define IRP_MJ_CREATE_NAMED_PIPE 0x01
608 #define IRP_MJ_CLOSE 0x02
609 #define IRP_MJ_READ 0x03
610 #define IRP_MJ_WRITE 0x04
611 #define IRP_MJ_QUERY_INFORMATION 0x05
612 #define IRP_MJ_SET_INFORMATION 0x06
613 #define IRP_MJ_QUERY_EA 0x07
614 #define IRP_MJ_SET_EA 0x08
615 #define IRP_MJ_FLUSH_BUFFERS 0x09
616 #define IRP_MJ_QUERY_VOLUME_INFORMATION 0x0a
617 #define IRP_MJ_SET_VOLUME_INFORMATION 0x0b
618 #define IRP_MJ_DIRECTORY_CONTROL 0x0c
619 #define IRP_MJ_FILE_SYSTEM_CONTROL 0x0d
620 #define IRP_MJ_DEVICE_CONTROL 0x0e
621 #define IRP_MJ_INTERNAL_DEVICE_CONTROL 0x0f
622 #define IRP_MJ_SCSI 0x0f
623 #define IRP_MJ_SHUTDOWN 0x10
624 #define IRP_MJ_LOCK_CONTROL 0x11
625 #define IRP_MJ_CLEANUP 0x12
626 #define IRP_MJ_CREATE_MAILSLOT 0x13
627 #define IRP_MJ_QUERY_SECURITY 0x14
628 #define IRP_MJ_SET_SECURITY 0x15
629 #define IRP_MJ_POWER 0x16
630 #define IRP_MJ_SYSTEM_CONTROL 0x17
631 #define IRP_MJ_DEVICE_CHANGE 0x18
632 #define IRP_MJ_QUERY_QUOTA 0x19
633 #define IRP_MJ_SET_QUOTA 0x1a
634 #define IRP_MJ_PNP 0x1b
635 #define IRP_MJ_PNP_POWER 0x1b
636 #define IRP_MJ_MAXIMUM_FUNCTION 0x1b
638 #define IRP_MN_QUERY_DIRECTORY 0x01
639 #define IRP_MN_NOTIFY_CHANGE_DIRECTORY 0x02
641 #define IRP_MN_USER_FS_REQUEST 0x00
642 #define IRP_MN_MOUNT_VOLUME 0x01
643 #define IRP_MN_VERIFY_VOLUME 0x02
644 #define IRP_MN_LOAD_FILE_SYSTEM 0x03
645 #define IRP_MN_TRACK_LINK 0x04
646 #define IRP_MN_KERNEL_CALL 0x04
648 #define IRP_MN_LOCK 0x01
649 #define IRP_MN_UNLOCK_SINGLE 0x02
650 #define IRP_MN_UNLOCK_ALL 0x03
651 #define IRP_MN_UNLOCK_ALL_BY_KEY 0x04
653 #define IRP_MN_NORMAL 0x00
654 #define IRP_MN_DPC 0x01
655 #define IRP_MN_MDL 0x02
656 #define IRP_MN_COMPLETE 0x04
657 #define IRP_MN_COMPRESSED 0x08
659 #define IRP_MN_MDL_DPC (IRP_MN_MDL | IRP_MN_DPC)
660 #define IRP_MN_COMPLETE_MDL (IRP_MN_COMPLETE | IRP_MN_MDL)
661 #define IRP_MN_COMPLETE_MDL_DPC (IRP_MN_COMPLETE_MDL | IRP_MN_DPC)
663 #define IRP_MN_SCSI_CLASS 0x01
665 #define IRP_MN_START_DEVICE 0x00
666 #define IRP_MN_QUERY_REMOVE_DEVICE 0x01
667 #define IRP_MN_REMOVE_DEVICE 0x02
668 #define IRP_MN_CANCEL_REMOVE_DEVICE 0x03
669 #define IRP_MN_STOP_DEVICE 0x04
670 #define IRP_MN_QUERY_STOP_DEVICE 0x05
671 #define IRP_MN_CANCEL_STOP_DEVICE 0x06
673 #define IRP_MN_QUERY_DEVICE_RELATIONS 0x07
674 #define IRP_MN_QUERY_INTERFACE 0x08
675 #define IRP_MN_QUERY_CAPABILITIES 0x09
676 #define IRP_MN_QUERY_RESOURCES 0x0A
677 #define IRP_MN_QUERY_RESOURCE_REQUIREMENTS 0x0B
678 #define IRP_MN_QUERY_DEVICE_TEXT 0x0C
679 #define IRP_MN_FILTER_RESOURCE_REQUIREMENTS 0x0D
681 #define IRP_MN_READ_CONFIG 0x0F
682 #define IRP_MN_WRITE_CONFIG 0x10
683 #define IRP_MN_EJECT 0x11
684 #define IRP_MN_SET_LOCK 0x12
685 #define IRP_MN_QUERY_ID 0x13
686 #define IRP_MN_QUERY_PNP_DEVICE_STATE 0x14
687 #define IRP_MN_QUERY_BUS_INFORMATION 0x15
688 #define IRP_MN_DEVICE_USAGE_NOTIFICATION 0x16
689 #define IRP_MN_SURPRISE_REMOVAL 0x17
690 #define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18
692 #define IRP_MN_WAIT_WAKE 0x00
693 #define IRP_MN_POWER_SEQUENCE 0x01
694 #define IRP_MN_SET_POWER 0x02
695 #define IRP_MN_QUERY_POWER 0x03
697 #define IRP_MN_QUERY_ALL_DATA 0x00
698 #define IRP_MN_QUERY_SINGLE_INSTANCE 0x01
699 #define IRP_MN_CHANGE_SINGLE_INSTANCE 0x02
700 #define IRP_MN_CHANGE_SINGLE_ITEM 0x03
701 #define IRP_MN_ENABLE_EVENTS 0x04
702 #define IRP_MN_DISABLE_EVENTS 0x05
703 #define IRP_MN_ENABLE_COLLECTION 0x06
704 #define IRP_MN_DISABLE_COLLECTION 0x07
705 #define IRP_MN_REGINFO 0x08
706 #define IRP_MN_EXECUTE_METHOD 0x09
708 #define IRP_MN_REGINFO_EX 0x0b
710 typedef enum _IO_PAGING_PRIORITY
712 IoPagingPriorityInvalid
,
713 IoPagingPriorityNormal
,
714 IoPagingPriorityHigh
,
715 IoPagingPriorityReserved1
,
716 IoPagingPriorityReserved2
717 } IO_PAGING_PRIORITY
;
719 typedef enum _IO_ALLOCATION_ACTION
{
722 DeallocateObjectKeepRegisters
723 } IO_ALLOCATION_ACTION
, *PIO_ALLOCATION_ACTION
;
725 typedef IO_ALLOCATION_ACTION
726 (DDKAPI
*PDRIVER_CONTROL
)(
727 IN
struct _DEVICE_OBJECT
*DeviceObject
,
729 IN PVOID MapRegisterBase
,
733 typedef EXCEPTION_DISPOSITION
734 (DDKAPI
*PEXCEPTION_ROUTINE
)(
735 IN
struct _EXCEPTION_RECORD
*ExceptionRecord
,
736 IN PVOID EstablisherFrame
,
737 IN OUT
struct _CONTEXT
*ContextRecord
,
738 IN OUT PVOID DispatcherContext
);
741 (DDKAPI
*PDRIVER_LIST_CONTROL
)(
742 IN
struct _DEVICE_OBJECT
*DeviceObject
,
744 IN
struct _SCATTER_GATHER_LIST
*ScatterGather
,
748 (DDKAPI DRIVER_ADD_DEVICE
)(
749 IN
struct _DRIVER_OBJECT
*DriverObject
,
750 IN
struct _DEVICE_OBJECT
*PhysicalDeviceObject
);
751 typedef DRIVER_ADD_DEVICE
*PDRIVER_ADD_DEVICE
;
754 (DDKAPI IO_COMPLETION_ROUTINE
)(
755 IN
struct _DEVICE_OBJECT
*DeviceObject
,
758 typedef IO_COMPLETION_ROUTINE
*PIO_COMPLETION_ROUTINE
;
761 (DDKAPI DRIVER_CANCEL
)(
762 IN
struct _DEVICE_OBJECT
*DeviceObject
,
763 IN
struct _IRP
*Irp
);
764 typedef DRIVER_CANCEL
*PDRIVER_CANCEL
;
767 (DDKAPI
*PKDEFERRED_ROUTINE
)(
768 IN
struct _KDPC
*Dpc
,
769 IN PVOID DeferredContext
,
770 IN PVOID SystemArgument1
,
771 IN PVOID SystemArgument2
);
774 (DDKAPI DRIVER_DISPATCH
)(
775 IN
struct _DEVICE_OBJECT
*DeviceObject
,
776 IN
struct _IRP
*Irp
);
777 typedef DRIVER_DISPATCH
*PDRIVER_DISPATCH
;
780 (DDKAPI
*PIO_DPC_ROUTINE
)(
781 IN
struct _KDPC
*Dpc
,
782 IN
struct _DEVICE_OBJECT
*DeviceObject
,
787 (DDKAPI
*PMM_DLL_INITIALIZE
)(
788 IN PUNICODE_STRING RegistryPath
);
791 (DDKAPI
*PMM_DLL_UNLOAD
)(
795 (DDKAPI
*PDRIVER_ENTRY
)(
796 IN
struct _DRIVER_OBJECT
*DriverObject
,
797 IN PUNICODE_STRING RegistryPath
);
800 (DDKAPI DRIVER_INITIALIZE
)(
801 IN
struct _DRIVER_OBJECT
*DriverObject
,
802 IN PUNICODE_STRING RegistryPath
);
803 typedef DRIVER_INITIALIZE
*PDRIVER_INITIALIZE
;
806 (DDKAPI KSERVICE_ROUTINE
)(
807 IN
struct _KINTERRUPT
*Interrupt
,
808 IN PVOID ServiceContext
);
809 typedef KSERVICE_ROUTINE
*PKSERVICE_ROUTINE
;
812 (DDKAPI
*PIO_TIMER_ROUTINE
)(
813 IN
struct _DEVICE_OBJECT
*DeviceObject
,
817 (DDKAPI
*PDRIVER_REINITIALIZE
)(
818 IN
struct _DRIVER_OBJECT
*DriverObject
,
823 (DDKAPI DRIVER_STARTIO
)(
824 IN
struct _DEVICE_OBJECT
*DeviceObject
,
825 IN
struct _IRP
*Irp
);
826 typedef DRIVER_STARTIO
*PDRIVER_STARTIO
;
829 (DDKAPI
*PKSYNCHRONIZE_ROUTINE
)(
830 IN PVOID SynchronizeContext
);
833 (DDKAPI DRIVER_UNLOAD
)(
834 IN
struct _DRIVER_OBJECT
*DriverObject
);
835 typedef DRIVER_UNLOAD
*PDRIVER_UNLOAD
;
840 ** Plug and Play structures
844 (DDKAPI
*PINTERFACE_REFERENCE
)(
848 (DDKAPI
*PINTERFACE_DEREFERENCE
)(
852 (DDKAPI
*PTRANSLATE_BUS_ADDRESS
)(
854 IN PHYSICAL_ADDRESS BusAddress
,
856 IN OUT PULONG AddressSpace
,
857 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
859 typedef struct _DMA_ADAPTER
*
860 (DDKAPI
*PGET_DMA_ADAPTER
)(
862 IN
struct _DEVICE_DESCRIPTION
*DeviceDescriptor
,
863 OUT PULONG NumberOfMapRegisters
);
866 (DDKAPI
*PGET_SET_DEVICE_DATA
)(
873 /* PCI_DEVICE_PRESENCE_PARAMETERS.Flags */
874 #define PCI_USE_SUBSYSTEM_IDS 0x00000001
875 #define PCI_USE_REVISION 0x00000002
876 #define PCI_USE_VENDEV_IDS 0x00000004
877 #define PCI_USE_CLASS_SUBCLASS 0x00000008
878 #define PCI_USE_PROGIF 0x00000010
879 #define PCI_USE_LOCAL_BUS 0x00000020
880 #define PCI_USE_LOCAL_DEVICE 0x00000040
882 typedef struct _PCI_DEVICE_PRESENCE_PARAMETERS
{
893 } PCI_DEVICE_PRESENCE_PARAMETERS
, *PPCI_DEVICE_PRESENCE_PARAMETERS
;
896 (DDKAPI
*PPCI_IS_DEVICE_PRESENT
)(
900 IN USHORT SubVendorID
,
901 IN USHORT SubSystemID
,
905 (DDKAPI
*PPCI_IS_DEVICE_PRESENT_EX
)(
907 IN PPCI_DEVICE_PRESENCE_PARAMETERS Parameters
);
909 typedef union _POWER_STATE
{
910 SYSTEM_POWER_STATE SystemState
;
911 DEVICE_POWER_STATE DeviceState
;
912 } POWER_STATE
, *PPOWER_STATE
;
914 typedef enum _POWER_STATE_TYPE
{
917 } POWER_STATE_TYPE
, *PPOWER_STATE_TYPE
;
919 typedef struct _BUS_INTERFACE_STANDARD
{
923 PINTERFACE_REFERENCE InterfaceReference
;
924 PINTERFACE_DEREFERENCE InterfaceDereference
;
925 PTRANSLATE_BUS_ADDRESS TranslateBusAddress
;
926 PGET_DMA_ADAPTER GetDmaAdapter
;
927 PGET_SET_DEVICE_DATA SetBusData
;
928 PGET_SET_DEVICE_DATA GetBusData
;
929 } BUS_INTERFACE_STANDARD
, *PBUS_INTERFACE_STANDARD
;
931 typedef struct _PCI_DEVICE_PRESENT_INTERFACE
{
935 PINTERFACE_REFERENCE InterfaceReference
;
936 PINTERFACE_DEREFERENCE InterfaceDereference
;
937 PPCI_IS_DEVICE_PRESENT IsDevicePresent
;
938 PPCI_IS_DEVICE_PRESENT_EX IsDevicePresentEx
;
939 } PCI_DEVICE_PRESENT_INTERFACE
, *PPCI_DEVICE_PRESENT_INTERFACE
;
941 typedef struct _DEVICE_CAPABILITIES
{
946 ULONG LockSupported
: 1;
947 ULONG EjectSupported
: 1;
949 ULONG DockDevice
: 1;
951 ULONG SilentInstall
: 1;
952 ULONG RawDeviceOK
: 1;
953 ULONG SurpriseRemovalOK
: 1;
954 ULONG WakeFromD0
: 1;
955 ULONG WakeFromD1
: 1;
956 ULONG WakeFromD2
: 1;
957 ULONG WakeFromD3
: 1;
958 ULONG HardwareDisabled
: 1;
959 ULONG NonDynamic
: 1;
960 ULONG WarmEjectSupported
: 1;
961 ULONG NoDisplayInUI
: 1;
965 DEVICE_POWER_STATE DeviceState
[PowerSystemMaximum
];
966 SYSTEM_POWER_STATE SystemWake
;
967 DEVICE_POWER_STATE DeviceWake
;
971 } DEVICE_CAPABILITIES
, *PDEVICE_CAPABILITIES
;
973 typedef struct _DEVICE_INTERFACE_CHANGE_NOTIFICATION
{
977 GUID InterfaceClassGuid
;
978 PUNICODE_STRING SymbolicLinkName
;
979 } DEVICE_INTERFACE_CHANGE_NOTIFICATION
, *PDEVICE_INTERFACE_CHANGE_NOTIFICATION
;
981 typedef struct _HWPROFILE_CHANGE_NOTIFICATION
{
985 } HWPROFILE_CHANGE_NOTIFICATION
, *PHWPROFILE_CHANGE_NOTIFICATION
;
989 typedef struct _INTERFACE
{
993 PINTERFACE_REFERENCE InterfaceReference
;
994 PINTERFACE_DEREFERENCE InterfaceDereference
;
995 } INTERFACE
, *PINTERFACE
;
997 typedef struct _PLUGPLAY_NOTIFICATION_HEADER
{
1001 } PLUGPLAY_NOTIFICATION_HEADER
, *PPLUGPLAY_NOTIFICATION_HEADER
;
1003 typedef ULONG PNP_DEVICE_STATE
, *PPNP_DEVICE_STATE
;
1005 /* PNP_DEVICE_STATE */
1007 #define PNP_DEVICE_DISABLED 0x00000001
1008 #define PNP_DEVICE_DONT_DISPLAY_IN_UI 0x00000002
1009 #define PNP_DEVICE_FAILED 0x00000004
1010 #define PNP_DEVICE_REMOVED 0x00000008
1011 #define PNP_DEVICE_RESOURCE_REQUIREMENTS_CHANGED 0x00000010
1012 #define PNP_DEVICE_NOT_DISABLEABLE 0x00000020
1014 typedef struct _TARGET_DEVICE_CUSTOM_NOTIFICATION
{
1018 struct _FILE_OBJECT
*FileObject
;
1019 LONG NameBufferOffset
;
1020 UCHAR CustomDataBuffer
[1];
1021 } TARGET_DEVICE_CUSTOM_NOTIFICATION
, *PTARGET_DEVICE_CUSTOM_NOTIFICATION
;
1023 typedef struct _TARGET_DEVICE_REMOVAL_NOTIFICATION
{
1027 struct _FILE_OBJECT
*FileObject
;
1028 } TARGET_DEVICE_REMOVAL_NOTIFICATION
, *PTARGET_DEVICE_REMOVAL_NOTIFICATION
;
1030 typedef enum _BUS_QUERY_ID_TYPE
{
1032 BusQueryHardwareIDs
,
1033 BusQueryCompatibleIDs
,
1035 BusQueryDeviceSerialNumber
1036 } BUS_QUERY_ID_TYPE
, *PBUS_QUERY_ID_TYPE
;
1038 typedef enum _DEVICE_TEXT_TYPE
{
1039 DeviceTextDescription
,
1040 DeviceTextLocationInformation
1041 } DEVICE_TEXT_TYPE
, *PDEVICE_TEXT_TYPE
;
1043 typedef enum _DEVICE_USAGE_NOTIFICATION_TYPE
{
1044 DeviceUsageTypeUndefined
,
1045 DeviceUsageTypePaging
,
1046 DeviceUsageTypeHibernation
,
1047 DeviceUsageTypeDumpFile
1048 } DEVICE_USAGE_NOTIFICATION_TYPE
;
1050 typedef struct _POWER_SEQUENCE
{
1054 } POWER_SEQUENCE
, *PPOWER_SEQUENCE
;
1057 DevicePropertyDeviceDescription
,
1058 DevicePropertyHardwareID
,
1059 DevicePropertyCompatibleIDs
,
1060 DevicePropertyBootConfiguration
,
1061 DevicePropertyBootConfigurationTranslated
,
1062 DevicePropertyClassName
,
1063 DevicePropertyClassGuid
,
1064 DevicePropertyDriverKeyName
,
1065 DevicePropertyManufacturer
,
1066 DevicePropertyFriendlyName
,
1067 DevicePropertyLocationInformation
,
1068 DevicePropertyPhysicalDeviceObjectName
,
1069 DevicePropertyBusTypeGuid
,
1070 DevicePropertyLegacyBusType
,
1071 DevicePropertyBusNumber
,
1072 DevicePropertyEnumeratorName
,
1073 DevicePropertyAddress
,
1074 DevicePropertyUINumber
,
1075 DevicePropertyInstallState
,
1076 DevicePropertyRemovalPolicy
1077 } DEVICE_REGISTRY_PROPERTY
;
1079 typedef enum _IO_NOTIFICATION_EVENT_CATEGORY
{
1080 EventCategoryReserved
,
1081 EventCategoryHardwareProfileChange
,
1082 EventCategoryDeviceInterfaceChange
,
1083 EventCategoryTargetDeviceChange
1084 } IO_NOTIFICATION_EVENT_CATEGORY
;
1086 #define PNPNOTIFY_DEVICE_INTERFACE_INCLUDE_EXISTING_INTERFACES 0x00000001
1089 (DDKAPI
*PDRIVER_NOTIFICATION_CALLBACK_ROUTINE
)(
1090 IN PVOID NotificationStructure
,
1094 (DDKAPI
*PDEVICE_CHANGE_COMPLETE_CALLBACK
)(
1099 ** System structures
1102 #define SYMBOLIC_LINK_QUERY 0x0001
1103 #define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
1105 /* also in winnt,h */
1106 #define DUPLICATE_CLOSE_SOURCE 0x00000001
1107 #define DUPLICATE_SAME_ACCESS 0x00000002
1108 #define DUPLICATE_SAME_ATTRIBUTES 0x00000004
1111 typedef struct _OBJECT_NAME_INFORMATION
{
1112 UNICODE_STRING Name
;
1113 } OBJECT_NAME_INFORMATION
, *POBJECT_NAME_INFORMATION
;
1115 typedef struct _IO_STATUS_BLOCK
{
1116 _ANONYMOUS_UNION
union {
1120 ULONG_PTR Information
;
1121 } IO_STATUS_BLOCK
, *PIO_STATUS_BLOCK
;
1124 (DDKAPI
*PIO_APC_ROUTINE
)(
1125 IN PVOID ApcContext
,
1126 IN PIO_STATUS_BLOCK IoStatusBlock
,
1130 (DDKAPI
*PKNORMAL_ROUTINE
)(
1131 IN PVOID NormalContext
,
1132 IN PVOID SystemArgument1
,
1133 IN PVOID SystemArgument2
);
1136 (DDKAPI
*PKKERNEL_ROUTINE
)(
1137 IN
struct _KAPC
*Apc
,
1138 IN OUT PKNORMAL_ROUTINE
*NormalRoutine
,
1139 IN OUT PVOID
*NormalContext
,
1140 IN OUT PVOID
*SystemArgument1
,
1141 IN OUT PVOID
*SystemArgument2
);
1144 (DDKAPI
*PKRUNDOWN_ROUTINE
)(
1145 IN
struct _KAPC
*Apc
);
1148 (DDKAPI
*PKTRANSFER_ROUTINE
)(
1151 typedef struct _KAPC
1158 struct _KTHREAD
*Thread
;
1159 LIST_ENTRY ApcListEntry
;
1160 PKKERNEL_ROUTINE KernelRoutine
;
1161 PKRUNDOWN_ROUTINE RundownRoutine
;
1162 PKNORMAL_ROUTINE NormalRoutine
;
1163 PVOID NormalContext
;
1164 PVOID SystemArgument1
;
1165 PVOID SystemArgument2
;
1166 CCHAR ApcStateIndex
;
1167 KPROCESSOR_MODE ApcMode
;
1169 } KAPC
, *PKAPC
, *RESTRICTED_POINTER PRKAPC
;
1171 typedef struct _KDEVICE_QUEUE
{
1174 LIST_ENTRY DeviceListHead
;
1177 } KDEVICE_QUEUE
, *PKDEVICE_QUEUE
, *RESTRICTED_POINTER PRKDEVICE_QUEUE
;
1179 typedef struct _KDEVICE_QUEUE_ENTRY
{
1180 LIST_ENTRY DeviceListEntry
;
1183 } KDEVICE_QUEUE_ENTRY
, *PKDEVICE_QUEUE_ENTRY
,
1184 *RESTRICTED_POINTER PRKDEVICE_QUEUE_ENTRY
;
1186 #define LOCK_QUEUE_WAIT 1
1187 #define LOCK_QUEUE_OWNER 2
1188 #define LOCK_QUEUE_TIMER_LOCK_SHIFT 4
1189 #define LOCK_QUEUE_TIMER_TABLE_LOCKS (1 << (8 - LOCK_QUEUE_TIMER_LOCK_SHIFT))
1191 typedef enum _KSPIN_LOCK_QUEUE_NUMBER
1193 LockQueueDispatcherLock
,
1194 LockQueueExpansionLock
,
1196 LockQueueSystemSpaceLock
,
1198 LockQueueMasterLock
,
1199 LockQueueNonPagedPoolLock
,
1200 LockQueueIoCancelLock
,
1201 LockQueueWorkQueueLock
,
1203 LockQueueIoDatabaseLock
,
1204 LockQueueIoCompletionLock
,
1205 LockQueueNtfsStructLock
,
1206 LockQueueAfdWorkQueueLock
,
1208 LockQueueMmNonPagedPoolLock
,
1209 LockQueueUnusedSpare16
,
1210 LockQueueTimerTableLock
,
1211 LockQueueMaximumLock
= LockQueueTimerTableLock
+ LOCK_QUEUE_TIMER_TABLE_LOCKS
1212 } KSPIN_LOCK_QUEUE_NUMBER
, *PKSPIN_LOCK_QUEUE_NUMBER
;
1214 typedef struct _KSPIN_LOCK_QUEUE
{
1215 struct _KSPIN_LOCK_QUEUE
*volatile Next
;
1216 PKSPIN_LOCK
volatile Lock
;
1217 } KSPIN_LOCK_QUEUE
, *PKSPIN_LOCK_QUEUE
;
1219 typedef struct _KLOCK_QUEUE_HANDLE
{
1220 KSPIN_LOCK_QUEUE LockQueue
;
1222 } KLOCK_QUEUE_HANDLE
, *PKLOCK_QUEUE_HANDLE
;
1224 #define DPC_NORMAL 0
1225 #define DPC_THREADED 1
1227 #define ASSERT_APC(Object) \
1228 ASSERT((Object)->Type == ApcObject)
1230 #define ASSERT_DPC(Object) \
1231 ASSERT(((Object)->Type == 0) || \
1232 ((Object)->Type == DpcObject) || \
1233 ((Object)->Type == ThreadedDpcObject))
1235 #define ASSERT_DEVICE_QUEUE(Object) \
1236 ASSERT((Object)->Type == DeviceQueueObject)
1238 typedef struct _KDPC
1243 LIST_ENTRY DpcListEntry
;
1244 PKDEFERRED_ROUTINE DeferredRoutine
;
1245 PVOID DeferredContext
;
1246 PVOID SystemArgument1
;
1247 PVOID SystemArgument2
;
1248 volatile PVOID DpcData
;
1249 } KDPC
, *PKDPC
, *RESTRICTED_POINTER PRKDPC
;
1251 typedef PVOID PKIPI_CONTEXT
;
1255 (NTAPI
*PKIPI_WORKER
)(
1256 IN PKIPI_CONTEXT PacketContext
,
1257 IN PVOID Parameter1
,
1258 IN PVOID Parameter2
,
1262 typedef struct _WAIT_CONTEXT_BLOCK
{
1263 KDEVICE_QUEUE_ENTRY WaitQueueEntry
;
1264 PDRIVER_CONTROL DeviceRoutine
;
1265 PVOID DeviceContext
;
1266 ULONG NumberOfMapRegisters
;
1269 PKDPC BufferChainingDpc
;
1270 } WAIT_CONTEXT_BLOCK
, *PWAIT_CONTEXT_BLOCK
;
1272 #define ASSERT_GATE(object) \
1273 ASSERT((((object)->Header.Type & KOBJECT_TYPE_MASK) == GateObject) || \
1274 (((object)->Header.Type & KOBJECT_TYPE_MASK) == EventSynchronizationObject))
1276 typedef struct _KGATE
1278 DISPATCHER_HEADER Header
;
1279 } KGATE
, *PKGATE
, *RESTRICTED_POINTER PRKGATE
;
1281 #define GM_LOCK_BIT 0x1
1282 #define GM_LOCK_BIT_V 0x0
1283 #define GM_LOCK_WAITER_WOKEN 0x2
1284 #define GM_LOCK_WAITER_INC 0x4
1286 typedef struct _KGUARDED_MUTEX
1288 volatile LONG Count
;
1296 SHORT KernelApcDisable
;
1297 SHORT SpecialApcDisable
;
1299 ULONG CombinedApcDisable
;
1301 } KGUARDED_MUTEX
, *PKGUARDED_MUTEX
;
1303 #define TIMER_TABLE_SIZE 512
1304 #define TIMER_TABLE_SHIFT 9
1306 typedef struct _KTIMER
{
1307 DISPATCHER_HEADER Header
;
1308 ULARGE_INTEGER DueTime
;
1309 LIST_ENTRY TimerListEntry
;
1312 } KTIMER
, *PKTIMER
, *RESTRICTED_POINTER PRKTIMER
;
1314 #define ASSERT_TIMER(E) \
1315 ASSERT(((E)->Header.Type == TimerNotificationObject) || \
1316 ((E)->Header.Type == TimerSynchronizationObject))
1318 #define ASSERT_MUTANT(E) \
1319 ASSERT((E)->Header.Type == MutantObject)
1321 #define ASSERT_SEMAPHORE(E) \
1322 ASSERT((E)->Header.Type == SemaphoreObject)
1324 #define ASSERT_EVENT(E) \
1325 ASSERT(((E)->Header.Type == NotificationEvent) || \
1326 ((E)->Header.Type == SynchronizationEvent))
1328 typedef struct _KMUTANT
{
1329 DISPATCHER_HEADER Header
;
1330 LIST_ENTRY MutantListEntry
;
1331 struct _KTHREAD
*RESTRICTED_POINTER OwnerThread
;
1334 } KMUTANT
, *PKMUTANT
, *RESTRICTED_POINTER PRKMUTANT
, KMUTEX
, *PKMUTEX
, *RESTRICTED_POINTER PRKMUTEX
;
1336 typedef enum _TIMER_TYPE
{
1338 SynchronizationTimer
1341 #define EVENT_INCREMENT 1
1342 #define IO_NO_INCREMENT 0
1343 #define IO_CD_ROM_INCREMENT 1
1344 #define IO_DISK_INCREMENT 1
1345 #define IO_KEYBOARD_INCREMENT 6
1346 #define IO_MAILSLOT_INCREMENT 2
1347 #define IO_MOUSE_INCREMENT 6
1348 #define IO_NAMED_PIPE_INCREMENT 2
1349 #define IO_NETWORK_INCREMENT 2
1350 #define IO_PARALLEL_INCREMENT 1
1351 #define IO_SERIAL_INCREMENT 2
1352 #define IO_SOUND_INCREMENT 8
1353 #define IO_VIDEO_INCREMENT 1
1354 #define SEMAPHORE_INCREMENT 1
1356 #define MM_MAXIMUM_DISK_IO_SIZE (0x10000)
1358 typedef struct _IRP
{
1361 struct _MDL
*MdlAddress
;
1364 struct _IRP
*MasterIrp
;
1365 volatile LONG IrpCount
;
1368 LIST_ENTRY ThreadListEntry
;
1369 IO_STATUS_BLOCK IoStatus
;
1370 KPROCESSOR_MODE RequestorMode
;
1371 BOOLEAN PendingReturned
;
1373 CHAR CurrentLocation
;
1376 CCHAR ApcEnvironment
;
1377 UCHAR AllocationFlags
;
1378 PIO_STATUS_BLOCK UserIosb
;
1382 PIO_APC_ROUTINE UserApcRoutine
;
1383 PVOID UserApcContext
;
1384 } AsynchronousParameters
;
1385 LARGE_INTEGER AllocationSize
;
1387 volatile PDRIVER_CANCEL CancelRoutine
;
1391 _ANONYMOUS_UNION
union {
1392 KDEVICE_QUEUE_ENTRY DeviceQueueEntry
;
1393 _ANONYMOUS_STRUCT
struct {
1394 PVOID DriverContext
[4];
1398 PCHAR AuxiliaryBuffer
;
1399 _ANONYMOUS_STRUCT
struct {
1400 LIST_ENTRY ListEntry
;
1401 _ANONYMOUS_UNION
union {
1402 struct _IO_STACK_LOCATION
*CurrentStackLocation
;
1406 struct _FILE_OBJECT
*OriginalFileObject
;
1409 PVOID CompletionKey
;
1412 typedef struct _IRP
*PIRP
;
1416 #define SL_FORCE_ACCESS_CHECK 0x01
1417 #define SL_OPEN_PAGING_FILE 0x02
1418 #define SL_OPEN_TARGET_DIRECTORY 0x04
1419 #define SL_CASE_SENSITIVE 0x80
1421 #define SL_KEY_SPECIFIED 0x01
1422 #define SL_OVERRIDE_VERIFY_VOLUME 0x02
1423 #define SL_WRITE_THROUGH 0x04
1424 #define SL_FT_SEQUENTIAL_WRITE 0x08
1426 #define SL_FAIL_IMMEDIATELY 0x01
1427 #define SL_EXCLUSIVE_LOCK 0x02
1429 #define SL_RESTART_SCAN 0x01
1430 #define SL_RETURN_SINGLE_ENTRY 0x02
1431 #define SL_INDEX_SPECIFIED 0x04
1433 #define SL_WATCH_TREE 0x01
1435 #define SL_ALLOW_RAW_MOUNT 0x01
1437 #define CTL_CODE(DeviceType, Function, Method, Access)( \
1438 ((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method))
1440 #define DEVICE_TYPE_FROM_CTL_CODE(ctl) (((ULONG) (ctl & 0xffff0000)) >> 16)
1445 IRP_PAGING_IO
= 0x2,
1446 IRP_MOUNT_COMPLETION
= 0x2,
1447 IRP_SYNCHRONOUS_API
= 0x4,
1448 IRP_ASSOCIATED_IRP
= 0x8,
1449 IRP_BUFFERED_IO
= 0x10,
1450 IRP_DEALLOCATE_BUFFER
= 0x20,
1451 IRP_INPUT_OPERATION
= 0x40,
1452 IRP_SYNCHRONOUS_PAGING_IO
= 0x40,
1453 IRP_CREATE_OPERATION
= 0x80,
1454 IRP_READ_OPERATION
= 0x100,
1455 IRP_WRITE_OPERATION
= 0x200,
1456 IRP_CLOSE_OPERATION
= 0x400,
1457 IRP_DEFER_IO_COMPLETION
= 0x800,
1458 IRP_OB_QUERY_NAME
= 0x1000,
1459 IRP_HOLD_DEVICE_QUEUE
= 0x2000,
1460 IRP_RETRY_IO_COMPLETION
= 0x4000
1463 #define IRP_QUOTA_CHARGED 0x01
1464 #define IRP_ALLOCATED_MUST_SUCCEED 0x02
1465 #define IRP_ALLOCATED_FIXED_SIZE 0x04
1466 #define IRP_LOOKASIDE_ALLOCATION 0x08
1468 typedef struct _BOOTDISK_INFORMATION
{
1469 LONGLONG BootPartitionOffset
;
1470 LONGLONG SystemPartitionOffset
;
1471 ULONG BootDeviceSignature
;
1472 ULONG SystemDeviceSignature
;
1473 } BOOTDISK_INFORMATION
, *PBOOTDISK_INFORMATION
;
1475 typedef struct _BOOTDISK_INFORMATION_EX
{
1476 LONGLONG BootPartitionOffset
;
1477 LONGLONG SystemPartitionOffset
;
1478 ULONG BootDeviceSignature
;
1479 ULONG SystemDeviceSignature
;
1480 GUID BootDeviceGuid
;
1481 GUID SystemDeviceGuid
;
1482 BOOLEAN BootDeviceIsGpt
;
1483 BOOLEAN SystemDeviceIsGpt
;
1484 } BOOTDISK_INFORMATION_EX
, *PBOOTDISK_INFORMATION_EX
;
1486 typedef struct _EISA_MEMORY_TYPE
{
1487 UCHAR ReadWrite
: 1;
1489 UCHAR Reserved0
: 1;
1492 UCHAR Reserved1
: 1;
1493 UCHAR MoreEntries
: 1;
1494 } EISA_MEMORY_TYPE
, *PEISA_MEMORY_TYPE
;
1496 #include <pshpack1.h>
1497 typedef struct _EISA_MEMORY_CONFIGURATION
{
1498 EISA_MEMORY_TYPE ConfigurationByte
;
1500 USHORT AddressLowWord
;
1501 UCHAR AddressHighByte
;
1503 } EISA_MEMORY_CONFIGURATION
, *PEISA_MEMORY_CONFIGURATION
;
1504 #include <poppack.h>
1506 typedef struct _EISA_IRQ_DESCRIPTOR
{
1507 UCHAR Interrupt
: 4;
1509 UCHAR LevelTriggered
: 1;
1511 UCHAR MoreEntries
: 1;
1512 } EISA_IRQ_DESCRIPTOR
, *PEISA_IRQ_DESCRIPTOR
;
1514 typedef struct _EISA_IRQ_CONFIGURATION
{
1515 EISA_IRQ_DESCRIPTOR ConfigurationByte
;
1517 } EISA_IRQ_CONFIGURATION
, *PEISA_IRQ_CONFIGURATION
;
1519 typedef struct _DMA_CONFIGURATION_BYTE0
{
1523 UCHAR MoreEntries
: 1;
1524 } DMA_CONFIGURATION_BYTE0
;
1526 typedef struct _DMA_CONFIGURATION_BYTE1
{
1527 UCHAR Reserved0
: 2;
1528 UCHAR TransferSize
: 2;
1530 UCHAR Reserved1
: 2;
1531 } DMA_CONFIGURATION_BYTE1
;
1533 typedef struct _EISA_DMA_CONFIGURATION
{
1534 DMA_CONFIGURATION_BYTE0 ConfigurationByte0
;
1535 DMA_CONFIGURATION_BYTE1 ConfigurationByte1
;
1536 } EISA_DMA_CONFIGURATION
, *PEISA_DMA_CONFIGURATION
;
1538 #include <pshpack1.h>
1539 typedef struct _EISA_PORT_DESCRIPTOR
{
1540 UCHAR NumberPorts
: 5;
1543 UCHAR MoreEntries
: 1;
1544 } EISA_PORT_DESCRIPTOR
, *PEISA_PORT_DESCRIPTOR
;
1546 typedef struct _EISA_PORT_CONFIGURATION
{
1547 EISA_PORT_DESCRIPTOR Configuration
;
1549 } EISA_PORT_CONFIGURATION
, *PEISA_PORT_CONFIGURATION
;
1550 #include <poppack.h>
1552 typedef struct _CM_EISA_FUNCTION_INFORMATION
{
1556 UCHAR MinorRevision
;
1557 UCHAR MajorRevision
;
1558 UCHAR Selections
[26];
1559 UCHAR FunctionFlags
;
1560 UCHAR TypeString
[80];
1561 EISA_MEMORY_CONFIGURATION EisaMemory
[9];
1562 EISA_IRQ_CONFIGURATION EisaIrq
[7];
1563 EISA_DMA_CONFIGURATION EisaDma
[4];
1564 EISA_PORT_CONFIGURATION EisaPort
[20];
1565 UCHAR InitializationData
[60];
1566 } CM_EISA_FUNCTION_INFORMATION
, *PCM_EISA_FUNCTION_INFORMATION
;
1568 /* CM_EISA_FUNCTION_INFORMATION.FunctionFlags */
1570 #define EISA_FUNCTION_ENABLED 0x80
1571 #define EISA_FREE_FORM_DATA 0x40
1572 #define EISA_HAS_PORT_INIT_ENTRY 0x20
1573 #define EISA_HAS_PORT_RANGE 0x10
1574 #define EISA_HAS_DMA_ENTRY 0x08
1575 #define EISA_HAS_IRQ_ENTRY 0x04
1576 #define EISA_HAS_MEMORY_ENTRY 0x02
1577 #define EISA_HAS_TYPE_ENTRY 0x01
1578 #define EISA_HAS_INFORMATION \
1579 (EISA_HAS_PORT_RANGE + EISA_HAS_DMA_ENTRY + EISA_HAS_IRQ_ENTRY \
1580 + EISA_HAS_MEMORY_ENTRY + EISA_HAS_TYPE_ENTRY)
1582 typedef struct _CM_EISA_SLOT_INFORMATION
{
1585 UCHAR MajorRevision
;
1586 UCHAR MinorRevision
;
1588 UCHAR NumberFunctions
;
1589 UCHAR FunctionInformation
;
1591 } CM_EISA_SLOT_INFORMATION
, *PCM_EISA_SLOT_INFORMATION
;
1593 /* CM_EISA_SLOT_INFORMATION.ReturnCode */
1595 #define EISA_INVALID_SLOT 0x80
1596 #define EISA_INVALID_FUNCTION 0x81
1597 #define EISA_INVALID_CONFIGURATION 0x82
1598 #define EISA_EMPTY_SLOT 0x83
1599 #define EISA_INVALID_BIOS_CALL 0x86
1601 typedef struct _CM_FLOPPY_DEVICE_DATA
{
1607 UCHAR StepRateHeadUnloadTime
;
1610 UCHAR SectorLengthCode
;
1611 UCHAR SectorPerTrack
;
1612 UCHAR ReadWriteGapLength
;
1613 UCHAR DataTransferLength
;
1614 UCHAR FormatGapLength
;
1615 UCHAR FormatFillCharacter
;
1616 UCHAR HeadSettleTime
;
1617 UCHAR MotorSettleTime
;
1618 UCHAR MaximumTrackValue
;
1619 UCHAR DataTransferRate
;
1620 } CM_FLOPPY_DEVICE_DATA
, *PCM_FLOPPY_DEVICE_DATA
;
1622 typedef struct _PNP_BUS_INFORMATION
{
1624 INTERFACE_TYPE LegacyBusType
;
1626 } PNP_BUS_INFORMATION
, *PPNP_BUS_INFORMATION
;
1628 #include <pshpack1.h>
1629 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Type */
1631 #define CmResourceTypeNull 0
1632 #define CmResourceTypePort 1
1633 #define CmResourceTypeInterrupt 2
1634 #define CmResourceTypeMemory 3
1635 #define CmResourceTypeDma 4
1636 #define CmResourceTypeDeviceSpecific 5
1637 #define CmResourceTypeBusNumber 6
1638 #define CmResourceTypeMaximum 7
1639 #define CmResourceTypeNonArbitrated 128
1640 #define CmResourceTypeConfigData 128
1641 #define CmResourceTypeDevicePrivate 129
1642 #define CmResourceTypePcCardConfig 130
1643 #define CmResourceTypeMfCardConfig 131
1645 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.ShareDisposition */
1647 typedef enum _CM_SHARE_DISPOSITION
{
1648 CmResourceShareUndetermined
,
1649 CmResourceShareDeviceExclusive
,
1650 CmResourceShareDriverExclusive
,
1651 CmResourceShareShared
1652 } CM_SHARE_DISPOSITION
;
1654 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypePort */
1656 #define CM_RESOURCE_PORT_MEMORY 0x0000
1657 #define CM_RESOURCE_PORT_IO 0x0001
1658 #define CM_RESOURCE_PORT_10_BIT_DECODE 0x0004
1659 #define CM_RESOURCE_PORT_12_BIT_DECODE 0x0008
1660 #define CM_RESOURCE_PORT_16_BIT_DECODE 0x0010
1661 #define CM_RESOURCE_PORT_POSITIVE_DECODE 0x0020
1662 #define CM_RESOURCE_PORT_PASSIVE_DECODE 0x0040
1663 #define CM_RESOURCE_PORT_WINDOW_DECODE 0x0080
1665 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeInterrupt */
1667 #define CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE 0x0000
1668 #define CM_RESOURCE_INTERRUPT_LATCHED 0x0001
1670 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeMemory */
1672 #define CM_RESOURCE_MEMORY_READ_WRITE 0x0000
1673 #define CM_RESOURCE_MEMORY_READ_ONLY 0x0001
1674 #define CM_RESOURCE_MEMORY_WRITE_ONLY 0x0002
1675 #define CM_RESOURCE_MEMORY_PREFETCHABLE 0x0004
1676 #define CM_RESOURCE_MEMORY_COMBINEDWRITE 0x0008
1677 #define CM_RESOURCE_MEMORY_24 0x0010
1678 #define CM_RESOURCE_MEMORY_CACHEABLE 0x0020
1680 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeDma */
1682 #define CM_RESOURCE_DMA_8 0x0000
1683 #define CM_RESOURCE_DMA_16 0x0001
1684 #define CM_RESOURCE_DMA_32 0x0002
1685 #define CM_RESOURCE_DMA_8_AND_16 0x0004
1686 #define CM_RESOURCE_DMA_BUS_MASTER 0x0008
1687 #define CM_RESOURCE_DMA_TYPE_A 0x0010
1688 #define CM_RESOURCE_DMA_TYPE_B 0x0020
1689 #define CM_RESOURCE_DMA_TYPE_F 0x0040
1691 typedef struct _CM_PARTIAL_RESOURCE_LIST
{
1695 CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors
[1];
1696 } CM_PARTIAL_RESOURCE_LIST
, *PCM_PARTIAL_RESOURCE_LIST
;
1698 typedef struct _CM_FULL_RESOURCE_DESCRIPTOR
{
1699 INTERFACE_TYPE InterfaceType
;
1701 CM_PARTIAL_RESOURCE_LIST PartialResourceList
;
1702 } CM_FULL_RESOURCE_DESCRIPTOR
, *PCM_FULL_RESOURCE_DESCRIPTOR
;
1704 typedef struct _CM_RESOURCE_LIST
{
1706 CM_FULL_RESOURCE_DESCRIPTOR List
[1];
1707 } CM_RESOURCE_LIST
, *PCM_RESOURCE_LIST
;
1709 typedef struct _CM_INT13_DRIVE_PARAMETER
{
1712 USHORT SectorsPerTrack
;
1714 USHORT NumberDrives
;
1715 } CM_INT13_DRIVE_PARAMETER
, *PCM_INT13_DRIVE_PARAMETER
;
1717 typedef struct _CM_PNP_BIOS_DEVICE_NODE
1722 UCHAR DeviceType
[3];
1723 USHORT DeviceAttributes
;
1724 } CM_PNP_BIOS_DEVICE_NODE
,*PCM_PNP_BIOS_DEVICE_NODE
;
1726 typedef struct _CM_PNP_BIOS_INSTALLATION_CHECK
1731 USHORT ControlField
;
1733 ULONG EventFlagAddress
;
1734 USHORT RealModeEntryOffset
;
1735 USHORT RealModeEntrySegment
;
1736 USHORT ProtectedModeEntryOffset
;
1737 ULONG ProtectedModeCodeBaseAddress
;
1739 USHORT RealModeDataBaseAddress
;
1740 ULONG ProtectedModeDataBaseAddress
;
1741 } CM_PNP_BIOS_INSTALLATION_CHECK
, *PCM_PNP_BIOS_INSTALLATION_CHECK
;
1743 #include <poppack.h>
1746 typedef struct _CM_DISK_GEOMETRY_DEVICE_DATA
1748 ULONG BytesPerSector
;
1749 ULONG NumberOfCylinders
;
1750 ULONG SectorsPerTrack
;
1751 ULONG NumberOfHeads
;
1752 } CM_DISK_GEOMETRY_DEVICE_DATA
, *PCM_DISK_GEOMETRY_DEVICE_DATA
;
1754 typedef struct _CM_KEYBOARD_DEVICE_DATA
{
1759 USHORT KeyboardFlags
;
1760 } CM_KEYBOARD_DEVICE_DATA
, *PCM_KEYBOARD_DEVICE_DATA
;
1762 #define KEYBOARD_INSERT_ON 0x08
1763 #define KEYBOARD_CAPS_LOCK_ON 0x04
1764 #define KEYBOARD_NUM_LOCK_ON 0x02
1765 #define KEYBOARD_SCROLL_LOCK_ON 0x01
1766 #define KEYBOARD_ALT_KEY_DOWN 0x80
1767 #define KEYBOARD_CTRL_KEY_DOWN 0x40
1768 #define KEYBOARD_LEFT_SHIFT_DOWN 0x20
1769 #define KEYBOARD_RIGHT_SHIFT_DOWN 0x10
1771 typedef struct _CM_MCA_POS_DATA
{
1777 } CM_MCA_POS_DATA
, *PCM_MCA_POS_DATA
;
1779 typedef struct CM_Power_Data_s
{
1781 DEVICE_POWER_STATE PD_MostRecentPowerState
;
1782 ULONG PD_Capabilities
;
1786 DEVICE_POWER_STATE PD_PowerStateMapping
[PowerSystemMaximum
];
1787 } CM_POWER_DATA
, *PCM_POWER_DATA
;
1789 #define PDCAP_D0_SUPPORTED 0x00000001
1790 #define PDCAP_D1_SUPPORTED 0x00000002
1791 #define PDCAP_D2_SUPPORTED 0x00000004
1792 #define PDCAP_D3_SUPPORTED 0x00000008
1793 #define PDCAP_WAKE_FROM_D0_SUPPORTED 0x00000010
1794 #define PDCAP_WAKE_FROM_D1_SUPPORTED 0x00000020
1795 #define PDCAP_WAKE_FROM_D2_SUPPORTED 0x00000040
1796 #define PDCAP_WAKE_FROM_D3_SUPPORTED 0x00000080
1797 #define PDCAP_WARM_EJECT_SUPPORTED 0x00000100
1799 typedef struct _CM_SCSI_DEVICE_DATA
{
1802 UCHAR HostIdentifier
;
1803 } CM_SCSI_DEVICE_DATA
, *PCM_SCSI_DEVICE_DATA
;
1805 typedef struct _CM_SERIAL_DEVICE_DATA
{
1809 } CM_SERIAL_DEVICE_DATA
, *PCM_SERIAL_DEVICE_DATA
;
1811 typedef struct _IO_COUNTERS
{
1812 ULONGLONG ReadOperationCount
;
1813 ULONGLONG WriteOperationCount
;
1814 ULONGLONG OtherOperationCount
;
1815 ULONGLONG ReadTransferCount
;
1816 ULONGLONG WriteTransferCount
;
1817 ULONGLONG OtherTransferCount
;
1818 } IO_COUNTERS
, *PIO_COUNTERS
;
1820 typedef struct _VM_COUNTERS
1822 SIZE_T PeakVirtualSize
;
1824 ULONG PageFaultCount
;
1825 SIZE_T PeakWorkingSetSize
;
1826 SIZE_T WorkingSetSize
;
1827 SIZE_T QuotaPeakPagedPoolUsage
;
1828 SIZE_T QuotaPagedPoolUsage
;
1829 SIZE_T QuotaPeakNonPagedPoolUsage
;
1830 SIZE_T QuotaNonPagedPoolUsage
;
1831 SIZE_T PagefileUsage
;
1832 SIZE_T PeakPagefileUsage
;
1833 } VM_COUNTERS
, *PVM_COUNTERS
;
1835 typedef struct _VM_COUNTERS_EX
1837 SIZE_T PeakVirtualSize
;
1839 ULONG PageFaultCount
;
1840 SIZE_T PeakWorkingSetSize
;
1841 SIZE_T WorkingSetSize
;
1842 SIZE_T QuotaPeakPagedPoolUsage
;
1843 SIZE_T QuotaPagedPoolUsage
;
1844 SIZE_T QuotaPeakNonPagedPoolUsage
;
1845 SIZE_T QuotaNonPagedPoolUsage
;
1846 SIZE_T PagefileUsage
;
1847 SIZE_T PeakPagefileUsage
;
1848 SIZE_T PrivateUsage
;
1849 } VM_COUNTERS_EX
, *PVM_COUNTERS_EX
;
1851 typedef struct _POOLED_USAGE_AND_LIMITS
1853 SIZE_T PeakPagedPoolUsage
;
1854 SIZE_T PagedPoolUsage
;
1855 SIZE_T PagedPoolLimit
;
1856 SIZE_T PeakNonPagedPoolUsage
;
1857 SIZE_T NonPagedPoolUsage
;
1858 SIZE_T NonPagedPoolLimit
;
1859 SIZE_T PeakPagefileUsage
;
1860 SIZE_T PagefileUsage
;
1861 SIZE_T PagefileLimit
;
1862 } POOLED_USAGE_AND_LIMITS
, *PPOOLED_USAGE_AND_LIMITS
;
1864 typedef enum _KINTERRUPT_POLARITY
1866 InterruptPolarityUnknown
,
1867 InterruptActiveHigh
,
1869 } KINTERRUPT_POLARITY
, *PKINTERRUPT_POLARITY
;
1871 typedef struct _IO_ERROR_LOG_PACKET
{
1872 UCHAR MajorFunctionCode
;
1874 USHORT DumpDataSize
;
1875 USHORT NumberOfStrings
;
1876 USHORT StringOffset
;
1877 USHORT EventCategory
;
1879 ULONG UniqueErrorValue
;
1880 NTSTATUS FinalStatus
;
1881 ULONG SequenceNumber
;
1882 ULONG IoControlCode
;
1883 LARGE_INTEGER DeviceOffset
;
1885 } IO_ERROR_LOG_PACKET
, *PIO_ERROR_LOG_PACKET
;
1887 typedef struct _IO_ERROR_LOG_MESSAGE
{
1890 USHORT DriverNameLength
;
1891 LARGE_INTEGER TimeStamp
;
1892 ULONG DriverNameOffset
;
1893 IO_ERROR_LOG_PACKET EntryData
;
1894 } IO_ERROR_LOG_MESSAGE
, *PIO_ERROR_LOG_MESSAGE
;
1896 #define ERROR_LOG_LIMIT_SIZE 240
1897 #define IO_ERROR_LOG_MESSAGE_HEADER_LENGTH (sizeof(IO_ERROR_LOG_MESSAGE) - \
1898 sizeof(IO_ERROR_LOG_PACKET) + \
1899 (sizeof(WCHAR) * 40))
1900 #define ERROR_LOG_MESSAGE_LIMIT_SIZE \
1901 (ERROR_LOG_LIMIT_SIZE + IO_ERROR_LOG_MESSAGE_HEADER_LENGTH)
1902 #define IO_ERROR_LOG_MESSAGE_LENGTH \
1903 ((PORT_MAXIMUM_MESSAGE_LENGTH > ERROR_LOG_MESSAGE_LIMIT_SIZE) ? \
1904 ERROR_LOG_MESSAGE_LIMIT_SIZE : \
1905 PORT_MAXIMUM_MESSAGE_LENGTH)
1906 #define ERROR_LOG_MAXIMUM_SIZE (IO_ERROR_LOG_MESSAGE_LENGTH - \
1907 IO_ERROR_LOG_MESSAGE_HEADER_LENGTH)
1909 typedef struct _CONTROLLER_OBJECT
{
1912 PVOID ControllerExtension
;
1913 KDEVICE_QUEUE DeviceWaitQueue
;
1915 LARGE_INTEGER Spare2
;
1916 } CONTROLLER_OBJECT
, *PCONTROLLER_OBJECT
;
1918 typedef enum _DMA_WIDTH
{
1923 } DMA_WIDTH
, *PDMA_WIDTH
;
1925 typedef enum _DMA_SPEED
{
1932 } DMA_SPEED
, *PDMA_SPEED
;
1934 /* DEVICE_DESCRIPTION.Version */
1936 #define DEVICE_DESCRIPTION_VERSION 0x0000
1937 #define DEVICE_DESCRIPTION_VERSION1 0x0001
1938 #define DEVICE_DESCRIPTION_VERSION2 0x0002
1940 typedef struct _DEVICE_DESCRIPTION
{
1943 BOOLEAN ScatterGather
;
1945 BOOLEAN AutoInitialize
;
1946 BOOLEAN Dma32BitAddresses
;
1947 BOOLEAN IgnoreCount
;
1949 BOOLEAN Dma64BitAddresses
;
1952 INTERFACE_TYPE InterfaceType
;
1955 ULONG MaximumLength
;
1957 } DEVICE_DESCRIPTION
, *PDEVICE_DESCRIPTION
;
1960 #define VPB_MOUNTED 0x0001
1961 #define VPB_LOCKED 0x0002
1962 #define VPB_PERSISTENT 0x0004
1963 #define VPB_REMOVE_PENDING 0x0008
1964 #define VPB_RAW_MOUNT 0x0010
1966 #define MAXIMUM_VOLUME_LABEL_LENGTH (32 * sizeof(WCHAR))
1968 typedef struct _VPB
{
1972 USHORT VolumeLabelLength
;
1973 struct _DEVICE_OBJECT
*DeviceObject
;
1974 struct _DEVICE_OBJECT
*RealDevice
;
1976 ULONG ReferenceCount
;
1977 WCHAR VolumeLabel
[MAXIMUM_VOLUME_LABEL_LENGTH
/ sizeof(WCHAR
)];
1980 /* DEVICE_OBJECT.Flags */
1982 #define DO_VERIFY_VOLUME 0x00000002
1983 #define DO_BUFFERED_IO 0x00000004
1984 #define DO_EXCLUSIVE 0x00000008
1985 #define DO_DIRECT_IO 0x00000010
1986 #define DO_MAP_IO_BUFFER 0x00000020
1987 #define DO_DEVICE_HAS_NAME 0x00000040
1988 #define DO_DEVICE_INITIALIZING 0x00000080
1989 #define DO_SYSTEM_BOOT_PARTITION 0x00000100
1990 #define DO_LONG_TERM_REQUESTS 0x00000200
1991 #define DO_NEVER_LAST_DEVICE 0x00000400
1992 #define DO_SHUTDOWN_REGISTERED 0x00000800
1993 #define DO_BUS_ENUMERATED_DEVICE 0x00001000
1994 #define DO_POWER_PAGABLE 0x00002000
1995 #define DO_POWER_INRUSH 0x00004000
1996 #define DO_LOW_PRIORITY_FILESYSTEM 0x00010000
1997 #define DO_XIP 0x00020000
1999 /* DEVICE_OBJECT.Characteristics */
2001 #define FILE_REMOVABLE_MEDIA 0x00000001
2002 #define FILE_READ_ONLY_DEVICE 0x00000002
2003 #define FILE_FLOPPY_DISKETTE 0x00000004
2004 #define FILE_WRITE_ONCE_MEDIA 0x00000008
2005 #define FILE_REMOTE_DEVICE 0x00000010
2006 #define FILE_DEVICE_IS_MOUNTED 0x00000020
2007 #define FILE_VIRTUAL_VOLUME 0x00000040
2008 #define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080
2009 #define FILE_DEVICE_SECURE_OPEN 0x00000100
2011 /* DEVICE_OBJECT.AlignmentRequirement */
2013 #define FILE_BYTE_ALIGNMENT 0x00000000
2014 #define FILE_WORD_ALIGNMENT 0x00000001
2015 #define FILE_LONG_ALIGNMENT 0x00000003
2016 #define FILE_QUAD_ALIGNMENT 0x00000007
2017 #define FILE_OCTA_ALIGNMENT 0x0000000f
2018 #define FILE_32_BYTE_ALIGNMENT 0x0000001f
2019 #define FILE_64_BYTE_ALIGNMENT 0x0000003f
2020 #define FILE_128_BYTE_ALIGNMENT 0x0000007f
2021 #define FILE_256_BYTE_ALIGNMENT 0x000000ff
2022 #define FILE_512_BYTE_ALIGNMENT 0x000001ff
2024 /* DEVICE_OBJECT.DeviceType */
2026 #define DEVICE_TYPE ULONG
2028 #define FILE_DEVICE_BEEP 0x00000001
2029 #define FILE_DEVICE_CD_ROM 0x00000002
2030 #define FILE_DEVICE_CD_ROM_FILE_SYSTEM 0x00000003
2031 #define FILE_DEVICE_CONTROLLER 0x00000004
2032 #define FILE_DEVICE_DATALINK 0x00000005
2033 #define FILE_DEVICE_DFS 0x00000006
2034 #define FILE_DEVICE_DISK 0x00000007
2035 #define FILE_DEVICE_DISK_FILE_SYSTEM 0x00000008
2036 #define FILE_DEVICE_FILE_SYSTEM 0x00000009
2037 #define FILE_DEVICE_INPORT_PORT 0x0000000a
2038 #define FILE_DEVICE_KEYBOARD 0x0000000b
2039 #define FILE_DEVICE_MAILSLOT 0x0000000c
2040 #define FILE_DEVICE_MIDI_IN 0x0000000d
2041 #define FILE_DEVICE_MIDI_OUT 0x0000000e
2042 #define FILE_DEVICE_MOUSE 0x0000000f
2043 #define FILE_DEVICE_MULTI_UNC_PROVIDER 0x00000010
2044 #define FILE_DEVICE_NAMED_PIPE 0x00000011
2045 #define FILE_DEVICE_NETWORK 0x00000012
2046 #define FILE_DEVICE_NETWORK_BROWSER 0x00000013
2047 #define FILE_DEVICE_NETWORK_FILE_SYSTEM 0x00000014
2048 #define FILE_DEVICE_NULL 0x00000015
2049 #define FILE_DEVICE_PARALLEL_PORT 0x00000016
2050 #define FILE_DEVICE_PHYSICAL_NETCARD 0x00000017
2051 #define FILE_DEVICE_PRINTER 0x00000018
2052 #define FILE_DEVICE_SCANNER 0x00000019
2053 #define FILE_DEVICE_SERIAL_MOUSE_PORT 0x0000001a
2054 #define FILE_DEVICE_SERIAL_PORT 0x0000001b
2055 #define FILE_DEVICE_SCREEN 0x0000001c
2056 #define FILE_DEVICE_SOUND 0x0000001d
2057 #define FILE_DEVICE_STREAMS 0x0000001e
2058 #define FILE_DEVICE_TAPE 0x0000001f
2059 #define FILE_DEVICE_TAPE_FILE_SYSTEM 0x00000020
2060 #define FILE_DEVICE_TRANSPORT 0x00000021
2061 #define FILE_DEVICE_UNKNOWN 0x00000022
2062 #define FILE_DEVICE_VIDEO 0x00000023
2063 #define FILE_DEVICE_VIRTUAL_DISK 0x00000024
2064 #define FILE_DEVICE_WAVE_IN 0x00000025
2065 #define FILE_DEVICE_WAVE_OUT 0x00000026
2066 #define FILE_DEVICE_8042_PORT 0x00000027
2067 #define FILE_DEVICE_NETWORK_REDIRECTOR 0x00000028
2068 #define FILE_DEVICE_BATTERY 0x00000029
2069 #define FILE_DEVICE_BUS_EXTENDER 0x0000002a
2070 #define FILE_DEVICE_MODEM 0x0000002b
2071 #define FILE_DEVICE_VDM 0x0000002c
2072 #define FILE_DEVICE_MASS_STORAGE 0x0000002d
2073 #define FILE_DEVICE_SMB 0x0000002e
2074 #define FILE_DEVICE_KS 0x0000002f
2075 #define FILE_DEVICE_CHANGER 0x00000030
2076 #define FILE_DEVICE_SMARTCARD 0x00000031
2077 #define FILE_DEVICE_ACPI 0x00000032
2078 #define FILE_DEVICE_DVD 0x00000033
2079 #define FILE_DEVICE_FULLSCREEN_VIDEO 0x00000034
2080 #define FILE_DEVICE_DFS_FILE_SYSTEM 0x00000035
2081 #define FILE_DEVICE_DFS_VOLUME 0x00000036
2082 #define FILE_DEVICE_SERENUM 0x00000037
2083 #define FILE_DEVICE_TERMSRV 0x00000038
2084 #define FILE_DEVICE_KSEC 0x00000039
2085 #define FILE_DEVICE_FIPS 0x0000003a
2087 typedef struct _DEVICE_OBJECT
{
2090 LONG ReferenceCount
;
2091 struct _DRIVER_OBJECT
*DriverObject
;
2092 struct _DEVICE_OBJECT
*NextDevice
;
2093 struct _DEVICE_OBJECT
*AttachedDevice
;
2094 struct _IRP
*CurrentIrp
;
2097 ULONG Characteristics
;
2099 PVOID DeviceExtension
;
2100 DEVICE_TYPE DeviceType
;
2103 LIST_ENTRY ListEntry
;
2104 WAIT_CONTEXT_BLOCK Wcb
;
2106 ULONG AlignmentRequirement
;
2107 KDEVICE_QUEUE DeviceQueue
;
2109 ULONG ActiveThreadCount
;
2110 PSECURITY_DESCRIPTOR SecurityDescriptor
;
2114 struct _DEVOBJ_EXTENSION
*DeviceObjectExtension
;
2116 } DEVICE_OBJECT
, *PDEVICE_OBJECT
;
2118 typedef enum _DEVICE_RELATION_TYPE
{
2123 TargetDeviceRelation
,
2125 } DEVICE_RELATION_TYPE
, *PDEVICE_RELATION_TYPE
;
2127 typedef struct _DEVICE_RELATIONS
{
2129 PDEVICE_OBJECT Objects
[1];
2130 } DEVICE_RELATIONS
, *PDEVICE_RELATIONS
;
2132 typedef struct _SCATTER_GATHER_ELEMENT
{
2133 PHYSICAL_ADDRESS Address
;
2136 } SCATTER_GATHER_ELEMENT
, *PSCATTER_GATHER_ELEMENT
;
2138 typedef struct _SCATTER_GATHER_LIST
{
2139 ULONG NumberOfElements
;
2141 SCATTER_GATHER_ELEMENT Elements
[1];
2142 } SCATTER_GATHER_LIST
, *PSCATTER_GATHER_LIST
;
2144 #define MDL_MAPPED_TO_SYSTEM_VA 0x0001
2145 #define MDL_PAGES_LOCKED 0x0002
2146 #define MDL_SOURCE_IS_NONPAGED_POOL 0x0004
2147 #define MDL_ALLOCATED_FIXED_SIZE 0x0008
2148 #define MDL_PARTIAL 0x0010
2149 #define MDL_PARTIAL_HAS_BEEN_MAPPED 0x0020
2150 #define MDL_IO_PAGE_READ 0x0040
2151 #define MDL_WRITE_OPERATION 0x0080
2152 #define MDL_PARENT_MAPPED_SYSTEM_VA 0x0100
2153 #define MDL_FREE_EXTRA_PTES 0x0200
2154 #define MDL_DESCRIBES_AWE 0x0400
2155 #define MDL_IO_SPACE 0x0800
2156 #define MDL_NETWORK_HEADER 0x1000
2157 #define MDL_MAPPING_CAN_FAIL 0x2000
2158 #define MDL_ALLOCATED_MUST_SUCCEED 0x4000
2159 #define MDL_INTERNAL 0x8000
2162 #define MDL_MAPPING_FLAGS ( \
2163 MDL_MAPPED_TO_SYSTEM_VA | \
2164 MDL_PAGES_LOCKED | \
2165 MDL_SOURCE_IS_NONPAGED_POOL | \
2166 MDL_PARTIAL_HAS_BEEN_MAPPED | \
2167 MDL_PARENT_MAPPED_SYSTEM_VA | \
2171 typedef struct _DRIVER_EXTENSION
{
2172 struct _DRIVER_OBJECT
*DriverObject
;
2173 PDRIVER_ADD_DEVICE AddDevice
;
2175 UNICODE_STRING ServiceKeyName
;
2176 } DRIVER_EXTENSION
, *PDRIVER_EXTENSION
;
2178 #define DRVO_UNLOAD_INVOKED 0x00000001
2179 #define DRVO_LEGACY_DRIVER 0x00000002
2180 #define DRVO_BUILTIN_DRIVER 0x00000004
2181 #define DRVO_REINIT_REGISTERED 0x00000008
2182 #define DRVO_INITIALIZED 0x00000010
2183 #define DRVO_BOOTREINIT_REGISTERED 0x00000020
2184 #define DRVO_LEGACY_RESOURCES 0x00000040
2186 typedef struct _DRIVER_OBJECT
{
2189 PDEVICE_OBJECT DeviceObject
;
2193 PVOID DriverSection
;
2194 PDRIVER_EXTENSION DriverExtension
;
2195 UNICODE_STRING DriverName
;
2196 PUNICODE_STRING HardwareDatabase
;
2197 struct _FAST_IO_DISPATCH
*FastIoDispatch
;
2198 PDRIVER_INITIALIZE DriverInit
;
2199 PDRIVER_STARTIO DriverStartIo
;
2200 PDRIVER_UNLOAD DriverUnload
;
2201 PDRIVER_DISPATCH MajorFunction
[IRP_MJ_MAXIMUM_FUNCTION
+ 1];
2203 typedef struct _DRIVER_OBJECT
*PDRIVER_OBJECT
;
2205 typedef struct _DMA_ADAPTER
{
2208 struct _DMA_OPERATIONS
* DmaOperations
;
2209 } DMA_ADAPTER
, *PDMA_ADAPTER
;
2212 (DDKAPI
*PPUT_DMA_ADAPTER
)(
2213 IN PDMA_ADAPTER DmaAdapter
);
2216 (DDKAPI
*PALLOCATE_COMMON_BUFFER
)(
2217 IN PDMA_ADAPTER DmaAdapter
,
2219 OUT PPHYSICAL_ADDRESS LogicalAddress
,
2220 IN BOOLEAN CacheEnabled
);
2223 (DDKAPI
*PFREE_COMMON_BUFFER
)(
2224 IN PDMA_ADAPTER DmaAdapter
,
2226 IN PHYSICAL_ADDRESS LogicalAddress
,
2227 IN PVOID VirtualAddress
,
2228 IN BOOLEAN CacheEnabled
);
2231 (DDKAPI
*PALLOCATE_ADAPTER_CHANNEL
)(
2232 IN PDMA_ADAPTER DmaAdapter
,
2233 IN PDEVICE_OBJECT DeviceObject
,
2234 IN ULONG NumberOfMapRegisters
,
2235 IN PDRIVER_CONTROL ExecutionRoutine
,
2239 (DDKAPI
*PFLUSH_ADAPTER_BUFFERS
)(
2240 IN PDMA_ADAPTER DmaAdapter
,
2242 IN PVOID MapRegisterBase
,
2245 IN BOOLEAN WriteToDevice
);
2248 (DDKAPI
*PFREE_ADAPTER_CHANNEL
)(
2249 IN PDMA_ADAPTER DmaAdapter
);
2252 (DDKAPI
*PFREE_MAP_REGISTERS
)(
2253 IN PDMA_ADAPTER DmaAdapter
,
2254 PVOID MapRegisterBase
,
2255 ULONG NumberOfMapRegisters
);
2257 typedef PHYSICAL_ADDRESS
2258 (DDKAPI
*PMAP_TRANSFER
)(
2259 IN PDMA_ADAPTER DmaAdapter
,
2261 IN PVOID MapRegisterBase
,
2263 IN OUT PULONG Length
,
2264 IN BOOLEAN WriteToDevice
);
2267 (DDKAPI
*PGET_DMA_ALIGNMENT
)(
2268 IN PDMA_ADAPTER DmaAdapter
);
2271 (DDKAPI
*PREAD_DMA_COUNTER
)(
2272 IN PDMA_ADAPTER DmaAdapter
);
2275 (DDKAPI
*PGET_SCATTER_GATHER_LIST
)(
2276 IN PDMA_ADAPTER DmaAdapter
,
2277 IN PDEVICE_OBJECT DeviceObject
,
2281 IN PDRIVER_LIST_CONTROL ExecutionRoutine
,
2283 IN BOOLEAN WriteToDevice
);
2286 (DDKAPI
*PPUT_SCATTER_GATHER_LIST
)(
2287 IN PDMA_ADAPTER DmaAdapter
,
2288 IN PSCATTER_GATHER_LIST ScatterGather
,
2289 IN BOOLEAN WriteToDevice
);
2292 (DDKAPI
*PCALCULATE_SCATTER_GATHER_LIST_SIZE
)(
2293 IN PDMA_ADAPTER DmaAdapter
,
2294 IN PMDL Mdl OPTIONAL
,
2297 OUT PULONG ScatterGatherListSize
,
2298 OUT PULONG pNumberOfMapRegisters OPTIONAL
);
2301 (DDKAPI
*PBUILD_SCATTER_GATHER_LIST
)(
2302 IN PDMA_ADAPTER DmaAdapter
,
2303 IN PDEVICE_OBJECT DeviceObject
,
2307 IN PDRIVER_LIST_CONTROL ExecutionRoutine
,
2309 IN BOOLEAN WriteToDevice
,
2310 IN PVOID ScatterGatherBuffer
,
2311 IN ULONG ScatterGatherLength
);
2314 (DDKAPI
*PBUILD_MDL_FROM_SCATTER_GATHER_LIST
)(
2315 IN PDMA_ADAPTER DmaAdapter
,
2316 IN PSCATTER_GATHER_LIST ScatterGather
,
2317 IN PMDL OriginalMdl
,
2318 OUT PMDL
*TargetMdl
);
2320 typedef struct _DMA_OPERATIONS
{
2322 PPUT_DMA_ADAPTER PutDmaAdapter
;
2323 PALLOCATE_COMMON_BUFFER AllocateCommonBuffer
;
2324 PFREE_COMMON_BUFFER FreeCommonBuffer
;
2325 PALLOCATE_ADAPTER_CHANNEL AllocateAdapterChannel
;
2326 PFLUSH_ADAPTER_BUFFERS FlushAdapterBuffers
;
2327 PFREE_ADAPTER_CHANNEL FreeAdapterChannel
;
2328 PFREE_MAP_REGISTERS FreeMapRegisters
;
2329 PMAP_TRANSFER MapTransfer
;
2330 PGET_DMA_ALIGNMENT GetDmaAlignment
;
2331 PREAD_DMA_COUNTER ReadDmaCounter
;
2332 PGET_SCATTER_GATHER_LIST GetScatterGatherList
;
2333 PPUT_SCATTER_GATHER_LIST PutScatterGatherList
;
2334 PCALCULATE_SCATTER_GATHER_LIST_SIZE CalculateScatterGatherList
;
2335 PBUILD_SCATTER_GATHER_LIST BuildScatterGatherList
;
2336 PBUILD_MDL_FROM_SCATTER_GATHER_LIST BuildMdlFromScatterGatherList
;
2337 } DMA_OPERATIONS
, *PDMA_OPERATIONS
;
2339 typedef enum _ARBITER_REQUEST_SOURCE
{
2340 ArbiterRequestUndefined
= -1,
2341 ArbiterRequestLegacyReported
,
2342 ArbiterRequestHalReported
,
2343 ArbiterRequestLegacyAssigned
,
2344 ArbiterRequestPnpDetected
,
2345 ArbiterRequestPnpEnumerated
2346 } ARBITER_REQUEST_SOURCE
;
2348 typedef enum _ARBITER_RESULT
{
2349 ArbiterResultUndefined
= -1,
2350 ArbiterResultSuccess
,
2351 ArbiterResultExternalConflict
,
2352 ArbiterResultNullRequest
2355 typedef enum _ARBITER_ACTION
{
2356 ArbiterActionTestAllocation
,
2357 ArbiterActionRetestAllocation
,
2358 ArbiterActionCommitAllocation
,
2359 ArbiterActionRollbackAllocation
,
2360 ArbiterActionQueryAllocatedResources
,
2361 ArbiterActionWriteReservedResources
,
2362 ArbiterActionQueryConflict
,
2363 ArbiterActionQueryArbitrate
,
2364 ArbiterActionAddReserved
,
2365 ArbiterActionBootAllocation
2366 } ARBITER_ACTION
, *PARBITER_ACTION
;
2368 typedef struct _ARBITER_CONFLICT_INFO
{
2369 PDEVICE_OBJECT OwningObject
;
2372 } ARBITER_CONFLICT_INFO
, *PARBITER_CONFLICT_INFO
;
2374 typedef struct _ARBITER_PARAMETERS
{
2377 IN OUT PLIST_ENTRY ArbitrationList
;
2378 IN ULONG AllocateFromCount
;
2379 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
2383 IN OUT PLIST_ENTRY ArbitrationList
;
2384 IN ULONG AllocateFromCount
;
2385 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
2389 IN OUT PLIST_ENTRY ArbitrationList
;
2393 OUT PCM_PARTIAL_RESOURCE_LIST
*AllocatedResources
;
2394 } QueryAllocatedResources
;
2397 IN PDEVICE_OBJECT PhysicalDeviceObject
;
2398 IN PIO_RESOURCE_DESCRIPTOR ConflictingResource
;
2399 OUT PULONG ConflictCount
;
2400 OUT PARBITER_CONFLICT_INFO
*Conflicts
;
2404 IN PLIST_ENTRY ArbitrationList
;
2408 IN PDEVICE_OBJECT ReserveDevice
;
2411 } ARBITER_PARAMETERS
, *PARBITER_PARAMETERS
;
2413 #define ARBITER_FLAG_BOOT_CONFIG 0x00000001
2415 typedef struct _ARBITER_LIST_ENTRY
{
2416 LIST_ENTRY ListEntry
;
2417 ULONG AlternativeCount
;
2418 PIO_RESOURCE_DESCRIPTOR Alternatives
;
2419 PDEVICE_OBJECT PhysicalDeviceObject
;
2420 ARBITER_REQUEST_SOURCE RequestSource
;
2423 INTERFACE_TYPE InterfaceType
;
2426 PCM_PARTIAL_RESOURCE_DESCRIPTOR Assignment
;
2427 PIO_RESOURCE_DESCRIPTOR SelectedAlternative
;
2428 ARBITER_RESULT Result
;
2429 } ARBITER_LIST_ENTRY
, *PARBITER_LIST_ENTRY
;
2432 (DDKAPI
*PARBITER_HANDLER
)(
2434 IN ARBITER_ACTION Action
,
2435 IN OUT PARBITER_PARAMETERS Parameters
);
2437 #define ARBITER_PARTIAL 0x00000001
2439 typedef struct _ARBITER_INTERFACE
{
2443 PINTERFACE_REFERENCE InterfaceReference
;
2444 PINTERFACE_DEREFERENCE InterfaceDereference
;
2445 PARBITER_HANDLER ArbiterHandler
;
2447 } ARBITER_INTERFACE
, *PARBITER_INTERFACE
;
2449 typedef enum _HAL_QUERY_INFORMATION_CLASS
{
2450 HalInstalledBusInformation
,
2451 HalProfileSourceInformation
,
2452 HalInformationClassUnused1
,
2453 HalPowerInformation
,
2454 HalProcessorSpeedInformation
,
2455 HalCallbackInformation
,
2456 HalMapRegisterInformation
,
2457 HalMcaLogInformation
,
2458 HalFrameBufferCachingInformation
,
2459 HalDisplayBiosInformation
,
2460 HalProcessorFeatureInformation
,
2461 HalNumaTopologyInterface
,
2462 HalErrorInformation
,
2463 HalCmcLogInformation
,
2464 HalCpeLogInformation
,
2465 HalQueryMcaInterface
,
2466 HalQueryAMLIIllegalIOPortAddresses
,
2467 HalQueryMaxHotPlugMemoryAddress
,
2468 HalPartitionIpiInterface
,
2469 HalPlatformInformation
,
2470 HalQueryProfileSourceList
2471 } HAL_QUERY_INFORMATION_CLASS
, *PHAL_QUERY_INFORMATION_CLASS
;
2473 typedef enum _HAL_SET_INFORMATION_CLASS
{
2474 HalProfileSourceInterval
,
2475 HalProfileSourceInterruptHandler
,
2476 HalMcaRegisterDriver
,
2477 HalKernelErrorHandler
,
2478 HalCmcRegisterDriver
,
2479 HalCpeRegisterDriver
,
2483 HalGenerateCmcInterrupt
2484 } HAL_SET_INFORMATION_CLASS
, *PHAL_SET_INFORMATION_CLASS
;
2486 typedef struct _MAP_REGISTER_ENTRY
2489 BOOLEAN WriteToDevice
;
2490 } MAP_REGISTER_ENTRY
, *PMAP_REGISTER_ENTRY
;
2497 PUCHAR TranslatedAddress
;
2499 } DEBUG_DEVICE_ADDRESS
, *PDEBUG_DEVICE_ADDRESS
;
2503 PHYSICAL_ADDRESS Start
;
2504 PHYSICAL_ADDRESS MaxEnd
;
2505 PVOID VirtualAddress
;
2509 } DEBUG_MEMORY_REQUIREMENTS
, *PDEBUG_MEMORY_REQUIREMENTS
;
2520 BOOLEAN Initialized
;
2521 DEBUG_DEVICE_ADDRESS BaseAddress
[6];
2522 DEBUG_MEMORY_REQUIREMENTS Memory
;
2523 } DEBUG_DEVICE_DESCRIPTOR
, *PDEBUG_DEVICE_DESCRIPTOR
;
2525 typedef enum _KD_OPTION
{
2526 KD_OPTION_SET_BLOCK_ENABLE
,
2529 /* Function Type Defintions for Dispatch Functions */
2530 struct _DEVICE_CONTROL_CONTEXT
;
2533 (DDKAPI
*PDEVICE_CONTROL_COMPLETION
)(
2534 IN
struct _DEVICE_CONTROL_CONTEXT
*ControlContext
);
2536 typedef struct _DEVICE_CONTROL_CONTEXT
{
2538 PDEVICE_HANDLER_OBJECT DeviceHandler
;
2539 PDEVICE_OBJECT DeviceObject
;
2542 PULONG BufferLength
;
2544 } DEVICE_CONTROL_CONTEXT
, *PDEVICE_CONTROL_CONTEXT
;
2546 typedef struct _PM_DISPATCH_TABLE
{
2550 } PM_DISPATCH_TABLE
, *PPM_DISPATCH_TABLE
;
2552 typedef enum _RESOURCE_TRANSLATION_DIRECTION
{
2553 TranslateChildToParent
,
2554 TranslateParentToChild
2555 } RESOURCE_TRANSLATION_DIRECTION
;
2558 (DDKAPI
*PTRANSLATE_RESOURCE_HANDLER
)(
2560 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Source
,
2561 IN RESOURCE_TRANSLATION_DIRECTION Direction
,
2562 IN ULONG AlternativesCount
,
2563 IN IO_RESOURCE_DESCRIPTOR Alternatives
[],
2564 IN PDEVICE_OBJECT PhysicalDeviceObject
,
2565 OUT PCM_PARTIAL_RESOURCE_DESCRIPTOR Target
);
2568 (DDKAPI
*PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER
)(
2570 IN PIO_RESOURCE_DESCRIPTOR Source
,
2571 IN PDEVICE_OBJECT PhysicalDeviceObject
,
2572 OUT PULONG TargetCount
,
2573 OUT PIO_RESOURCE_DESCRIPTOR
*Target
);
2575 typedef struct _TRANSLATOR_INTERFACE
{
2579 PINTERFACE_REFERENCE InterfaceReference
;
2580 PINTERFACE_DEREFERENCE InterfaceDereference
;
2581 PTRANSLATE_RESOURCE_HANDLER TranslateResources
;
2582 PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER TranslateResourceRequirements
;
2583 } TRANSLATOR_INTERFACE
, *PTRANSLATOR_INTERFACE
;
2586 (DDKAPI
*pHalDeviceControl
)(
2587 IN PDEVICE_HANDLER_OBJECT DeviceHandler
,
2588 IN PDEVICE_OBJECT DeviceObject
,
2589 IN ULONG ControlCode
,
2590 IN OUT PVOID Buffer OPTIONAL
,
2591 IN OUT PULONG BufferLength OPTIONAL
,
2593 IN PDEVICE_CONTROL_COMPLETION CompletionRoutine
);
2596 (FASTCALL
*pHalExamineMBR
)(
2597 IN PDEVICE_OBJECT DeviceObject
,
2598 IN ULONG SectorSize
,
2599 IN ULONG MBRTypeIdentifier
,
2603 (FASTCALL
*pHalIoAssignDriveLetters
)(
2604 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
2605 IN PSTRING NtDeviceName
,
2606 OUT PUCHAR NtSystemPath
,
2607 OUT PSTRING NtSystemPathString
);
2610 (FASTCALL
*pHalIoReadPartitionTable
)(
2611 IN PDEVICE_OBJECT DeviceObject
,
2612 IN ULONG SectorSize
,
2613 IN BOOLEAN ReturnRecognizedPartitions
,
2614 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
2617 (FASTCALL
*pHalIoSetPartitionInformation
)(
2618 IN PDEVICE_OBJECT DeviceObject
,
2619 IN ULONG SectorSize
,
2620 IN ULONG PartitionNumber
,
2621 IN ULONG PartitionType
);
2624 (FASTCALL
*pHalIoWritePartitionTable
)(
2625 IN PDEVICE_OBJECT DeviceObject
,
2626 IN ULONG SectorSize
,
2627 IN ULONG SectorsPerTrack
,
2628 IN ULONG NumberOfHeads
,
2629 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
2631 typedef PBUS_HANDLER
2632 (FASTCALL
*pHalHandlerForBus
)(
2633 IN INTERFACE_TYPE InterfaceType
,
2634 IN ULONG BusNumber
);
2637 (FASTCALL
*pHalReferenceBusHandler
)(
2638 IN PBUS_HANDLER BusHandler
);
2641 (DDKAPI
*pHalQuerySystemInformation
)(
2642 IN HAL_QUERY_INFORMATION_CLASS InformationClass
,
2643 IN ULONG BufferSize
,
2644 IN OUT PVOID Buffer
,
2645 OUT PULONG ReturnedLength
);
2648 (DDKAPI
*pHalSetSystemInformation
)(
2649 IN HAL_SET_INFORMATION_CLASS InformationClass
,
2650 IN ULONG BufferSize
,
2654 (DDKAPI
*pHalQueryBusSlots
)(
2655 IN PBUS_HANDLER BusHandler
,
2656 IN ULONG BufferSize
,
2657 OUT PULONG SlotNumbers
,
2658 OUT PULONG ReturnedLength
);
2661 (DDKAPI
*pHalInitPnpDriver
)(
2665 (DDKAPI
*pHalInitPowerManagement
)(
2666 IN PPM_DISPATCH_TABLE PmDriverDispatchTable
,
2667 OUT PPM_DISPATCH_TABLE
*PmHalDispatchTable
);
2669 typedef struct _DMA_ADAPTER
*
2670 (DDKAPI
*pHalGetDmaAdapter
)(
2672 IN
struct _DEVICE_DESCRIPTION
*DeviceDescriptor
,
2673 OUT PULONG NumberOfMapRegisters
);
2676 (DDKAPI
*pHalGetInterruptTranslator
)(
2677 IN INTERFACE_TYPE ParentInterfaceType
,
2678 IN ULONG ParentBusNumber
,
2679 IN INTERFACE_TYPE BridgeInterfaceType
,
2682 OUT PTRANSLATOR_INTERFACE Translator
,
2683 OUT PULONG BridgeBusNumber
);
2686 (DDKAPI
*pHalStartMirroring
)(
2690 (DDKAPI
*pHalEndMirroring
)(
2691 IN ULONG PassNumber
);
2694 (DDKAPI
*pHalMirrorPhysicalMemory
)(
2695 IN PHYSICAL_ADDRESS PhysicalAddress
,
2696 IN LARGE_INTEGER NumberOfBytes
);
2699 (DDKAPI
*pHalMirrorVerify
)(
2700 IN PHYSICAL_ADDRESS PhysicalAddress
,
2701 IN LARGE_INTEGER NumberOfBytes
);
2704 (DDKAPI
*pHalEndOfBoot
)(
2709 (DDKAPI
*pHalTranslateBusAddress
)(
2710 IN INTERFACE_TYPE InterfaceType
,
2712 IN PHYSICAL_ADDRESS BusAddress
,
2713 IN OUT PULONG AddressSpace
,
2714 OUT PPHYSICAL_ADDRESS TranslatedAddress
2719 (DDKAPI
*pHalAssignSlotResources
)(
2720 IN PUNICODE_STRING RegistryPath
,
2721 IN PUNICODE_STRING DriverClassName OPTIONAL
,
2722 IN PDRIVER_OBJECT DriverObject
,
2723 IN PDEVICE_OBJECT DeviceObject
,
2724 IN INTERFACE_TYPE BusType
,
2726 IN ULONG SlotNumber
,
2727 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
2732 (DDKAPI
*pHalHaltSystem
)(
2738 (DDKAPI
*pHalResetDisplay
)(
2744 (DDKAPI
*pHalVectorToIDTEntry
)(
2750 (DDKAPI
*pHalFindBusAddressTranslation
)(
2751 IN PHYSICAL_ADDRESS BusAddress
,
2752 IN OUT PULONG AddressSpace
,
2753 OUT PPHYSICAL_ADDRESS TranslatedAddress
,
2754 IN OUT PULONG_PTR Context
,
2760 (DDKAPI
*pKdSetupPciDeviceForDebugging
)(
2761 IN PVOID LoaderBlock OPTIONAL
,
2762 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
2767 (DDKAPI
*pKdReleasePciDeviceForDebugging
)(
2768 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
2773 (DDKAPI
*pKdGetAcpiTablePhase0
)(
2774 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
2780 (DDKAPI
*pKdCheckPowerButton
)(
2786 (DDKAPI
*pHalGetInterruptVector
)(
2787 IN INTERFACE_TYPE InterfaceType
,
2789 IN ULONG BusInterruptLevel
,
2790 IN ULONG BusInterruptVector
,
2792 OUT PKAFFINITY Affinity
2797 (DDKAPI
*pHalGetVectorInput
)(
2799 IN KAFFINITY Affinity
,
2801 OUT PKINTERRUPT_POLARITY Polarity
2806 (DDKAPI
*pKdMapPhysicalMemory64
)(
2807 IN PHYSICAL_ADDRESS PhysicalAddress
,
2808 IN ULONG NumberPages
2813 (DDKAPI
*pKdUnmapVirtualAddress
)(
2814 IN PVOID VirtualAddress
,
2815 IN ULONG NumberPages
2820 (DDKAPI
*pKdGetPciDataByOffset
)(
2822 IN ULONG SlotNumber
,
2830 (DDKAPI
*pKdSetPciDataByOffset
)(
2832 IN ULONG SlotNumber
,
2839 (DDKAPI
*PHAL_RESET_DISPLAY_PARAMETERS
)(
2840 ULONG Columns
, ULONG Rows
);
2844 pHalQuerySystemInformation HalQuerySystemInformation
;
2845 pHalSetSystemInformation HalSetSystemInformation
;
2846 pHalQueryBusSlots HalQueryBusSlots
;
2848 pHalExamineMBR HalExamineMBR
;
2849 pHalIoAssignDriveLetters HalIoAssignDriveLetters
;
2850 pHalIoReadPartitionTable HalIoReadPartitionTable
;
2851 pHalIoSetPartitionInformation HalIoSetPartitionInformation
;
2852 pHalIoWritePartitionTable HalIoWritePartitionTable
;
2853 pHalHandlerForBus HalReferenceHandlerForBus
;
2854 pHalReferenceBusHandler HalReferenceBusHandler
;
2855 pHalReferenceBusHandler HalDereferenceBusHandler
;
2856 pHalInitPnpDriver HalInitPnpDriver
;
2857 pHalInitPowerManagement HalInitPowerManagement
;
2858 pHalGetDmaAdapter HalGetDmaAdapter
;
2859 pHalGetInterruptTranslator HalGetInterruptTranslator
;
2860 pHalStartMirroring HalStartMirroring
;
2861 pHalEndMirroring HalEndMirroring
;
2862 pHalMirrorPhysicalMemory HalMirrorPhysicalMemory
;
2863 pHalEndOfBoot HalEndOfBoot
;
2864 pHalMirrorVerify HalMirrorVerify
;
2865 } HAL_DISPATCH
, *PHAL_DISPATCH
;
2867 #if defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTHAL_)
2868 extern DECLSPEC_IMPORT PHAL_DISPATCH HalDispatchTable
;
2869 #define HALDISPATCH ((PHAL_DISPATCH)&HalDispatchTable)
2871 extern DECLSPEC_EXPORT HAL_DISPATCH HalDispatchTable
;
2872 #define HALDISPATCH (&HalDispatchTable)
2875 #define HAL_DISPATCH_VERSION 3
2876 #define HalDispatchTableVersion HALDISPATCH->Version
2877 #define HalQuerySystemInformation HALDISPATCH->HalQuerySystemInformation
2878 #define HalSetSystemInformation HALDISPATCH->HalSetSystemInformation
2879 #define HalQueryBusSlots HALDISPATCH->HalQueryBusSlots
2880 #define HalReferenceHandlerForBus HALDISPATCH->HalReferenceHandlerForBus
2881 #define HalReferenceBusHandler HALDISPATCH->HalReferenceBusHandler
2882 #define HalDereferenceBusHandler HALDISPATCH->HalDereferenceBusHandler
2883 #define HalInitPnpDriver HALDISPATCH->HalInitPnpDriver
2884 #define HalInitPowerManagement HALDISPATCH->HalInitPowerManagement
2885 #define HalGetDmaAdapter HALDISPATCH->HalGetDmaAdapter
2886 #define HalGetInterruptTranslator HALDISPATCH->HalGetInterruptTranslator
2887 #define HalStartMirroring HALDISPATCH->HalStartMirroring
2888 #define HalEndMirroring HALDISPATCH->HalEndMirroring
2889 #define HalMirrorPhysicalMemory HALDISPATCH->HalMirrorPhysicalMemory
2890 #define HalEndOfBoot HALDISPATCH->HalEndOfBoot
2891 #define HalMirrorVerify HALDISPATCH->HalMirrorVerify
2894 #define HalDeviceControl HALDISPATCH->HalDeviceControl
2895 #define HalIoAssignDriveLetters HALDISPATCH->HalIoAssignDriveLetters
2896 #define HalIoReadPartitionTable HALDISPATCH->HalIoReadPartitionTable
2897 #define HalIoSetPartitionInformation HALDISPATCH->HalIoSetPartitionInformation
2898 #define HalIoWritePartitionTable HALDISPATCH->HalIoWritePartitionTable
2901 typedef enum _FILE_INFORMATION_CLASS
{
2902 FileDirectoryInformation
= 1,
2903 FileFullDirectoryInformation
,
2904 FileBothDirectoryInformation
,
2905 FileBasicInformation
,
2906 FileStandardInformation
,
2907 FileInternalInformation
,
2909 FileAccessInformation
,
2910 FileNameInformation
,
2911 FileRenameInformation
,
2912 FileLinkInformation
,
2913 FileNamesInformation
,
2914 FileDispositionInformation
,
2915 FilePositionInformation
,
2916 FileFullEaInformation
,
2917 FileModeInformation
,
2918 FileAlignmentInformation
,
2920 FileAllocationInformation
,
2921 FileEndOfFileInformation
,
2922 FileAlternateNameInformation
,
2923 FileStreamInformation
,
2924 FilePipeInformation
,
2925 FilePipeLocalInformation
,
2926 FilePipeRemoteInformation
,
2927 FileMailslotQueryInformation
,
2928 FileMailslotSetInformation
,
2929 FileCompressionInformation
,
2930 FileObjectIdInformation
,
2931 FileCompletionInformation
,
2932 FileMoveClusterInformation
,
2933 FileQuotaInformation
,
2934 FileReparsePointInformation
,
2935 FileNetworkOpenInformation
,
2936 FileAttributeTagInformation
,
2937 FileTrackingInformation
,
2938 FileIdBothDirectoryInformation
,
2939 FileIdFullDirectoryInformation
,
2940 FileValidDataLengthInformation
,
2941 FileShortNameInformation
,
2942 FileMaximumInformation
2943 } FILE_INFORMATION_CLASS
, *PFILE_INFORMATION_CLASS
;
2945 typedef struct _FILE_POSITION_INFORMATION
{
2946 LARGE_INTEGER CurrentByteOffset
;
2947 } FILE_POSITION_INFORMATION
, *PFILE_POSITION_INFORMATION
;
2949 typedef struct _FILE_ALIGNMENT_INFORMATION
{
2950 ULONG AlignmentRequirement
;
2951 } FILE_ALIGNMENT_INFORMATION
, *PFILE_ALIGNMENT_INFORMATION
;
2953 typedef struct _FILE_NAME_INFORMATION
{
2954 ULONG FileNameLength
;
2956 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
2958 #include <pshpack8.h>
2959 typedef struct _FILE_BASIC_INFORMATION
{
2960 LARGE_INTEGER CreationTime
;
2961 LARGE_INTEGER LastAccessTime
;
2962 LARGE_INTEGER LastWriteTime
;
2963 LARGE_INTEGER ChangeTime
;
2964 ULONG FileAttributes
;
2965 } FILE_BASIC_INFORMATION
, *PFILE_BASIC_INFORMATION
;
2966 #include <poppack.h>
2968 typedef struct _FILE_STANDARD_INFORMATION
{
2969 LARGE_INTEGER AllocationSize
;
2970 LARGE_INTEGER EndOfFile
;
2971 ULONG NumberOfLinks
;
2972 BOOLEAN DeletePending
;
2974 } FILE_STANDARD_INFORMATION
, *PFILE_STANDARD_INFORMATION
;
2976 typedef struct _FILE_NETWORK_OPEN_INFORMATION
{
2977 LARGE_INTEGER CreationTime
;
2978 LARGE_INTEGER LastAccessTime
;
2979 LARGE_INTEGER LastWriteTime
;
2980 LARGE_INTEGER ChangeTime
;
2981 LARGE_INTEGER AllocationSize
;
2982 LARGE_INTEGER EndOfFile
;
2983 ULONG FileAttributes
;
2984 } FILE_NETWORK_OPEN_INFORMATION
, *PFILE_NETWORK_OPEN_INFORMATION
;
2986 typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION
{
2987 ULONG FileAttributes
;
2989 } FILE_ATTRIBUTE_TAG_INFORMATION
, *PFILE_ATTRIBUTE_TAG_INFORMATION
;
2991 typedef struct _FILE_DISPOSITION_INFORMATION
{
2993 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
2995 typedef struct _FILE_END_OF_FILE_INFORMATION
{
2996 LARGE_INTEGER EndOfFile
;
2997 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
2999 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
{
3000 LARGE_INTEGER ValidDataLength
;
3001 } FILE_VALID_DATA_LENGTH_INFORMATION
, *PFILE_VALID_DATA_LENGTH_INFORMATION
;
3003 typedef union _FILE_SEGMENT_ELEMENT
{
3005 ULONGLONG Alignment
;
3006 }FILE_SEGMENT_ELEMENT
, *PFILE_SEGMENT_ELEMENT
;
3008 typedef enum _FSINFOCLASS
{
3009 FileFsVolumeInformation
= 1,
3010 FileFsLabelInformation
,
3011 FileFsSizeInformation
,
3012 FileFsDeviceInformation
,
3013 FileFsAttributeInformation
,
3014 FileFsControlInformation
,
3015 FileFsFullSizeInformation
,
3016 FileFsObjectIdInformation
,
3017 FileFsDriverPathInformation
,
3018 FileFsMaximumInformation
3019 } FS_INFORMATION_CLASS
, *PFS_INFORMATION_CLASS
;
3021 typedef struct _FILE_FS_DEVICE_INFORMATION
{
3022 DEVICE_TYPE DeviceType
;
3023 ULONG Characteristics
;
3024 } FILE_FS_DEVICE_INFORMATION
, *PFILE_FS_DEVICE_INFORMATION
;
3026 typedef struct _FILE_FULL_EA_INFORMATION
{
3027 ULONG NextEntryOffset
;
3030 USHORT EaValueLength
;
3032 } FILE_FULL_EA_INFORMATION
, *PFILE_FULL_EA_INFORMATION
;
3034 /* ERESOURCE.Flag */
3036 #define ResourceNeverExclusive 0x0010
3037 #define ResourceReleaseByOtherThread 0x0020
3038 #define ResourceOwnedExclusive 0x0080
3040 #define RESOURCE_HASH_TABLE_SIZE 64
3042 typedef struct _DEVOBJ_EXTENSION
3046 PDEVICE_OBJECT DeviceObject
;
3047 } DEVOBJ_EXTENSION
, *PDEVOBJ_EXTENSION
;
3050 (DDKAPI
*PFAST_IO_CHECK_IF_POSSIBLE
)(
3051 IN
struct _FILE_OBJECT
*FileObject
,
3052 IN PLARGE_INTEGER FileOffset
,
3056 IN BOOLEAN CheckForReadOperation
,
3057 OUT PIO_STATUS_BLOCK IoStatus
,
3058 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3061 (DDKAPI
*PFAST_IO_READ
)(
3062 IN
struct _FILE_OBJECT
*FileObject
,
3063 IN PLARGE_INTEGER FileOffset
,
3068 OUT PIO_STATUS_BLOCK IoStatus
,
3069 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3072 (DDKAPI
*PFAST_IO_WRITE
)(
3073 IN
struct _FILE_OBJECT
*FileObject
,
3074 IN PLARGE_INTEGER FileOffset
,
3079 OUT PIO_STATUS_BLOCK IoStatus
,
3080 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3083 (DDKAPI
*PFAST_IO_QUERY_BASIC_INFO
)(
3084 IN
struct _FILE_OBJECT
*FileObject
,
3086 OUT PFILE_BASIC_INFORMATION Buffer
,
3087 OUT PIO_STATUS_BLOCK IoStatus
,
3088 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3091 (DDKAPI
*PFAST_IO_QUERY_STANDARD_INFO
)(
3092 IN
struct _FILE_OBJECT
*FileObject
,
3094 OUT PFILE_STANDARD_INFORMATION Buffer
,
3095 OUT PIO_STATUS_BLOCK IoStatus
,
3096 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3099 (DDKAPI
*PFAST_IO_LOCK
)(
3100 IN
struct _FILE_OBJECT
*FileObject
,
3101 IN PLARGE_INTEGER FileOffset
,
3102 IN PLARGE_INTEGER Length
,
3103 PEPROCESS ProcessId
,
3105 BOOLEAN FailImmediately
,
3106 BOOLEAN ExclusiveLock
,
3107 OUT PIO_STATUS_BLOCK IoStatus
,
3108 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3111 (DDKAPI
*PFAST_IO_UNLOCK_SINGLE
)(
3112 IN
struct _FILE_OBJECT
*FileObject
,
3113 IN PLARGE_INTEGER FileOffset
,
3114 IN PLARGE_INTEGER Length
,
3115 PEPROCESS ProcessId
,
3117 OUT PIO_STATUS_BLOCK IoStatus
,
3118 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3121 (DDKAPI
*PFAST_IO_UNLOCK_ALL
)(
3122 IN
struct _FILE_OBJECT
*FileObject
,
3123 PEPROCESS ProcessId
,
3124 OUT PIO_STATUS_BLOCK IoStatus
,
3125 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3128 (DDKAPI
*PFAST_IO_UNLOCK_ALL_BY_KEY
)(
3129 IN
struct _FILE_OBJECT
*FileObject
,
3132 OUT PIO_STATUS_BLOCK IoStatus
,
3133 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3136 (DDKAPI
*PFAST_IO_DEVICE_CONTROL
)(
3137 IN
struct _FILE_OBJECT
*FileObject
,
3139 IN PVOID InputBuffer OPTIONAL
,
3140 IN ULONG InputBufferLength
,
3141 OUT PVOID OutputBuffer OPTIONAL
,
3142 IN ULONG OutputBufferLength
,
3143 IN ULONG IoControlCode
,
3144 OUT PIO_STATUS_BLOCK IoStatus
,
3145 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3148 (DDKAPI
*PFAST_IO_ACQUIRE_FILE
)(
3149 IN
struct _FILE_OBJECT
*FileObject
);
3152 (DDKAPI
*PFAST_IO_RELEASE_FILE
)(
3153 IN
struct _FILE_OBJECT
*FileObject
);
3156 (DDKAPI
*PFAST_IO_DETACH_DEVICE
)(
3157 IN
struct _DEVICE_OBJECT
*SourceDevice
,
3158 IN
struct _DEVICE_OBJECT
*TargetDevice
);
3161 (DDKAPI
*PFAST_IO_QUERY_NETWORK_OPEN_INFO
)(
3162 IN
struct _FILE_OBJECT
*FileObject
,
3164 OUT
struct _FILE_NETWORK_OPEN_INFORMATION
*Buffer
,
3165 OUT
struct _IO_STATUS_BLOCK
*IoStatus
,
3166 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3169 (DDKAPI
*PFAST_IO_ACQUIRE_FOR_MOD_WRITE
)(
3170 IN
struct _FILE_OBJECT
*FileObject
,
3171 IN PLARGE_INTEGER EndingOffset
,
3172 OUT
struct _ERESOURCE
**ResourceToRelease
,
3173 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3176 (DDKAPI
*PFAST_IO_MDL_READ
)(
3177 IN
struct _FILE_OBJECT
*FileObject
,
3178 IN PLARGE_INTEGER FileOffset
,
3182 OUT PIO_STATUS_BLOCK IoStatus
,
3183 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3186 (DDKAPI
*PFAST_IO_MDL_READ_COMPLETE
)(
3187 IN
struct _FILE_OBJECT
*FileObject
,
3189 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3192 (DDKAPI
*PFAST_IO_PREPARE_MDL_WRITE
)(
3193 IN
struct _FILE_OBJECT
*FileObject
,
3194 IN PLARGE_INTEGER FileOffset
,
3198 OUT PIO_STATUS_BLOCK IoStatus
,
3199 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3202 (DDKAPI
*PFAST_IO_MDL_WRITE_COMPLETE
)(
3203 IN
struct _FILE_OBJECT
*FileObject
,
3204 IN PLARGE_INTEGER FileOffset
,
3206 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3209 (DDKAPI
*PFAST_IO_READ_COMPRESSED
)(
3210 IN
struct _FILE_OBJECT
*FileObject
,
3211 IN PLARGE_INTEGER FileOffset
,
3216 OUT PIO_STATUS_BLOCK IoStatus
,
3217 OUT
struct _COMPRESSED_DATA_INFO
*CompressedDataInfo
,
3218 IN ULONG CompressedDataInfoLength
,
3219 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3222 (DDKAPI
*PFAST_IO_WRITE_COMPRESSED
)(
3223 IN
struct _FILE_OBJECT
*FileObject
,
3224 IN PLARGE_INTEGER FileOffset
,
3229 OUT PIO_STATUS_BLOCK IoStatus
,
3230 IN
struct _COMPRESSED_DATA_INFO
*CompressedDataInfo
,
3231 IN ULONG CompressedDataInfoLength
,
3232 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3235 (DDKAPI
*PFAST_IO_MDL_READ_COMPLETE_COMPRESSED
)(
3236 IN
struct _FILE_OBJECT
*FileObject
,
3238 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3241 (DDKAPI
*PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED
)(
3242 IN
struct _FILE_OBJECT
*FileObject
,
3243 IN PLARGE_INTEGER FileOffset
,
3245 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3248 (DDKAPI
*PFAST_IO_QUERY_OPEN
)(
3249 IN
struct _IRP
*Irp
,
3250 OUT PFILE_NETWORK_OPEN_INFORMATION NetworkInformation
,
3251 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3254 (DDKAPI
*PFAST_IO_RELEASE_FOR_MOD_WRITE
)(
3255 IN
struct _FILE_OBJECT
*FileObject
,
3256 IN
struct _ERESOURCE
*ResourceToRelease
,
3257 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3260 (DDKAPI
*PFAST_IO_ACQUIRE_FOR_CCFLUSH
)(
3261 IN
struct _FILE_OBJECT
*FileObject
,
3262 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3265 (DDKAPI
*PFAST_IO_RELEASE_FOR_CCFLUSH
) (
3266 IN
struct _FILE_OBJECT
*FileObject
,
3267 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3269 typedef struct _FAST_IO_DISPATCH
{
3270 ULONG SizeOfFastIoDispatch
;
3271 PFAST_IO_CHECK_IF_POSSIBLE FastIoCheckIfPossible
;
3272 PFAST_IO_READ FastIoRead
;
3273 PFAST_IO_WRITE FastIoWrite
;
3274 PFAST_IO_QUERY_BASIC_INFO FastIoQueryBasicInfo
;
3275 PFAST_IO_QUERY_STANDARD_INFO FastIoQueryStandardInfo
;
3276 PFAST_IO_LOCK FastIoLock
;
3277 PFAST_IO_UNLOCK_SINGLE FastIoUnlockSingle
;
3278 PFAST_IO_UNLOCK_ALL FastIoUnlockAll
;
3279 PFAST_IO_UNLOCK_ALL_BY_KEY FastIoUnlockAllByKey
;
3280 PFAST_IO_DEVICE_CONTROL FastIoDeviceControl
;
3281 PFAST_IO_ACQUIRE_FILE AcquireFileForNtCreateSection
;
3282 PFAST_IO_RELEASE_FILE ReleaseFileForNtCreateSection
;
3283 PFAST_IO_DETACH_DEVICE FastIoDetachDevice
;
3284 PFAST_IO_QUERY_NETWORK_OPEN_INFO FastIoQueryNetworkOpenInfo
;
3285 PFAST_IO_ACQUIRE_FOR_MOD_WRITE AcquireForModWrite
;
3286 PFAST_IO_MDL_READ MdlRead
;
3287 PFAST_IO_MDL_READ_COMPLETE MdlReadComplete
;
3288 PFAST_IO_PREPARE_MDL_WRITE PrepareMdlWrite
;
3289 PFAST_IO_MDL_WRITE_COMPLETE MdlWriteComplete
;
3290 PFAST_IO_READ_COMPRESSED FastIoReadCompressed
;
3291 PFAST_IO_WRITE_COMPRESSED FastIoWriteCompressed
;
3292 PFAST_IO_MDL_READ_COMPLETE_COMPRESSED MdlReadCompleteCompressed
;
3293 PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED MdlWriteCompleteCompressed
;
3294 PFAST_IO_QUERY_OPEN FastIoQueryOpen
;
3295 PFAST_IO_RELEASE_FOR_MOD_WRITE ReleaseForModWrite
;
3296 PFAST_IO_ACQUIRE_FOR_CCFLUSH AcquireForCcFlush
;
3297 PFAST_IO_RELEASE_FOR_CCFLUSH ReleaseForCcFlush
;
3298 } FAST_IO_DISPATCH
, *PFAST_IO_DISPATCH
;
3300 typedef struct _SECTION_OBJECT_POINTERS
{
3301 PVOID DataSectionObject
;
3302 PVOID SharedCacheMap
;
3303 PVOID ImageSectionObject
;
3304 } SECTION_OBJECT_POINTERS
, *PSECTION_OBJECT_POINTERS
;
3306 typedef struct _IO_COMPLETION_CONTEXT
{
3309 } IO_COMPLETION_CONTEXT
, *PIO_COMPLETION_CONTEXT
;
3311 /* FILE_OBJECT.Flags */
3313 #define FO_FILE_OPEN 0x00000001
3314 #define FO_SYNCHRONOUS_IO 0x00000002
3315 #define FO_ALERTABLE_IO 0x00000004
3316 #define FO_NO_INTERMEDIATE_BUFFERING 0x00000008
3317 #define FO_WRITE_THROUGH 0x00000010
3318 #define FO_SEQUENTIAL_ONLY 0x00000020
3319 #define FO_CACHE_SUPPORTED 0x00000040
3320 #define FO_NAMED_PIPE 0x00000080
3321 #define FO_STREAM_FILE 0x00000100
3322 #define FO_MAILSLOT 0x00000200
3323 #define FO_GENERATE_AUDIT_ON_CLOSE 0x00000400
3324 #define FO_DIRECT_DEVICE_OPEN 0x00000800
3325 #define FO_FILE_MODIFIED 0x00001000
3326 #define FO_FILE_SIZE_CHANGED 0x00002000
3327 #define FO_CLEANUP_COMPLETE 0x00004000
3328 #define FO_TEMPORARY_FILE 0x00008000
3329 #define FO_DELETE_ON_CLOSE 0x00010000
3330 #define FO_OPENED_CASE_SENSITIVE 0x00020000
3331 #define FO_HANDLE_CREATED 0x00040000
3332 #define FO_FILE_FAST_IO_READ 0x00080000
3333 #define FO_RANDOM_ACCESS 0x00100000
3334 #define FO_FILE_OPEN_CANCELLED 0x00200000
3335 #define FO_VOLUME_OPEN 0x00400000
3336 #define FO_REMOTE_ORIGIN 0x01000000
3338 typedef struct _FILE_OBJECT
3342 PDEVICE_OBJECT DeviceObject
;
3346 PSECTION_OBJECT_POINTERS SectionObjectPointer
;
3347 PVOID PrivateCacheMap
;
3348 NTSTATUS FinalStatus
;
3349 struct _FILE_OBJECT
*RelatedFileObject
;
3350 BOOLEAN LockOperation
;
3351 BOOLEAN DeletePending
;
3353 BOOLEAN WriteAccess
;
3354 BOOLEAN DeleteAccess
;
3356 BOOLEAN SharedWrite
;
3357 BOOLEAN SharedDelete
;
3359 UNICODE_STRING FileName
;
3360 LARGE_INTEGER CurrentByteOffset
;
3361 volatile ULONG Waiters
;
3362 volatile ULONG Busy
;
3366 volatile PIO_COMPLETION_CONTEXT CompletionContext
;
3367 KSPIN_LOCK IrpListLock
;
3369 volatile PVOID FileObjectExtension
;
3371 typedef struct _FILE_OBJECT
*PFILE_OBJECT
;
3373 typedef enum _SECURITY_OPERATION_CODE
{
3374 SetSecurityDescriptor
,
3375 QuerySecurityDescriptor
,
3376 DeleteSecurityDescriptor
,
3377 AssignSecurityDescriptor
3378 } SECURITY_OPERATION_CODE
, *PSECURITY_OPERATION_CODE
;
3380 #define INITIAL_PRIVILEGE_COUNT 3
3382 typedef struct _INITIAL_PRIVILEGE_SET
{
3383 ULONG PrivilegeCount
;
3385 LUID_AND_ATTRIBUTES Privilege
[INITIAL_PRIVILEGE_COUNT
];
3386 } INITIAL_PRIVILEGE_SET
, * PINITIAL_PRIVILEGE_SET
;
3388 #define SE_MIN_WELL_KNOWN_PRIVILEGE 2
3389 #define SE_CREATE_TOKEN_PRIVILEGE 2
3390 #define SE_ASSIGNPRIMARYTOKEN_PRIVILEGE 3
3391 #define SE_LOCK_MEMORY_PRIVILEGE 4
3392 #define SE_INCREASE_QUOTA_PRIVILEGE 5
3393 #define SE_UNSOLICITED_INPUT_PRIVILEGE 6
3394 #define SE_MACHINE_ACCOUNT_PRIVILEGE 6
3395 #define SE_TCB_PRIVILEGE 7
3396 #define SE_SECURITY_PRIVILEGE 8
3397 #define SE_TAKE_OWNERSHIP_PRIVILEGE 9
3398 #define SE_LOAD_DRIVER_PRIVILEGE 10
3399 #define SE_SYSTEM_PROFILE_PRIVILEGE 11
3400 #define SE_SYSTEMTIME_PRIVILEGE 12
3401 #define SE_PROF_SINGLE_PROCESS_PRIVILEGE 13
3402 #define SE_INC_BASE_PRIORITY_PRIVILEGE 14
3403 #define SE_CREATE_PAGEFILE_PRIVILEGE 15
3404 #define SE_CREATE_PERMANENT_PRIVILEGE 16
3405 #define SE_BACKUP_PRIVILEGE 17
3406 #define SE_RESTORE_PRIVILEGE 18
3407 #define SE_SHUTDOWN_PRIVILEGE 19
3408 #define SE_DEBUG_PRIVILEGE 20
3409 #define SE_AUDIT_PRIVILEGE 21
3410 #define SE_SYSTEM_ENVIRONMENT_PRIVILEGE 22
3411 #define SE_CHANGE_NOTIFY_PRIVILEGE 23
3412 #define SE_REMOTE_SHUTDOWN_PRIVILEGE 24
3413 #define SE_UNDOCK_PRIVILEGE 25
3414 #define SE_SYNC_AGENT_PRIVILEGE 26
3415 #define SE_ENABLE_DELEGATION_PRIVILEGE 27
3416 #define SE_MANAGE_VOLUME_PRIVILEGE 28
3417 #define SE_IMPERSONATE_PRIVILEGE 29
3418 #define SE_CREATE_GLOBAL_PRIVILEGE 30
3419 #define SE_MAX_WELL_KNOWN_PRIVILEGE SE_CREATE_GLOBAL_PRIVILEGE
3421 typedef struct _SECURITY_SUBJECT_CONTEXT
{
3422 PACCESS_TOKEN ClientToken
;
3423 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
;
3424 PACCESS_TOKEN PrimaryToken
;
3425 PVOID ProcessAuditId
;
3426 } SECURITY_SUBJECT_CONTEXT
, *PSECURITY_SUBJECT_CONTEXT
;
3428 #include <pshpack4.h>
3429 typedef struct _ACCESS_STATE
{
3431 BOOLEAN SecurityEvaluated
;
3432 BOOLEAN GenerateAudit
;
3433 BOOLEAN GenerateOnClose
;
3434 BOOLEAN PrivilegesAllocated
;
3436 ACCESS_MASK RemainingDesiredAccess
;
3437 ACCESS_MASK PreviouslyGrantedAccess
;
3438 ACCESS_MASK OriginalDesiredAccess
;
3439 SECURITY_SUBJECT_CONTEXT SubjectSecurityContext
;
3440 PSECURITY_DESCRIPTOR SecurityDescriptor
;
3443 INITIAL_PRIVILEGE_SET InitialPrivilegeSet
;
3444 PRIVILEGE_SET PrivilegeSet
;
3447 BOOLEAN AuditPrivileges
;
3448 UNICODE_STRING ObjectName
;
3449 UNICODE_STRING ObjectTypeName
;
3450 } ACCESS_STATE
, *PACCESS_STATE
;
3451 #include <poppack.h>
3453 typedef struct _IO_SECURITY_CONTEXT
{
3454 PSECURITY_QUALITY_OF_SERVICE SecurityQos
;
3455 PACCESS_STATE AccessState
;
3456 ACCESS_MASK DesiredAccess
;
3457 ULONG FullCreateOptions
;
3458 } IO_SECURITY_CONTEXT
, *PIO_SECURITY_CONTEXT
;
3460 #define IO_TYPE_ADAPTER 1
3461 #define IO_TYPE_CONTROLLER 2
3462 #define IO_TYPE_DEVICE 3
3463 #define IO_TYPE_DRIVER 4
3464 #define IO_TYPE_FILE 5
3465 #define IO_TYPE_IRP 6
3466 #define IO_TYPE_MASTER_ADAPTER 7
3467 #define IO_TYPE_OPEN_PACKET 8
3468 #define IO_TYPE_TIMER 9
3469 #define IO_TYPE_VPB 10
3470 #define IO_TYPE_ERROR_LOG 11
3471 #define IO_TYPE_ERROR_MESSAGE 12
3472 #define IO_TYPE_DEVICE_OBJECT_EXTENSION 13
3474 #define IO_TYPE_CSQ_IRP_CONTEXT 1
3475 #define IO_TYPE_CSQ 2
3479 typedef struct _IO_CSQ_IRP_CONTEXT
{
3482 struct _IO_CSQ
*Csq
;
3483 } IO_CSQ_IRP_CONTEXT
, *PIO_CSQ_IRP_CONTEXT
;
3486 (DDKAPI
*PIO_CSQ_INSERT_IRP
)(
3487 IN
struct _IO_CSQ
*Csq
,
3491 (DDKAPI
*PIO_CSQ_REMOVE_IRP
)(
3492 IN
struct _IO_CSQ
*Csq
,
3496 (DDKAPI
*PIO_CSQ_PEEK_NEXT_IRP
)(
3497 IN
struct _IO_CSQ
*Csq
,
3499 IN PVOID PeekContext
);
3502 (DDKAPI
*PIO_CSQ_ACQUIRE_LOCK
)(
3503 IN
struct _IO_CSQ
*Csq
,
3507 (DDKAPI
*PIO_CSQ_RELEASE_LOCK
)(
3508 IN
struct _IO_CSQ
*Csq
,
3512 (DDKAPI
*PIO_CSQ_COMPLETE_CANCELED_IRP
)(
3513 IN
struct _IO_CSQ
*Csq
,
3516 typedef struct _IO_CSQ
{
3518 PIO_CSQ_INSERT_IRP CsqInsertIrp
;
3519 PIO_CSQ_REMOVE_IRP CsqRemoveIrp
;
3520 PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp
;
3521 PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock
;
3522 PIO_CSQ_RELEASE_LOCK CsqReleaseLock
;
3523 PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp
;
3524 PVOID ReservePointer
;
3527 #if !defined(_ALPHA_)
3528 #include <pshpack4.h>
3530 typedef struct _IO_STACK_LOCATION
{
3531 UCHAR MajorFunction
;
3532 UCHAR MinorFunction
;
3537 PIO_SECURITY_CONTEXT SecurityContext
;
3539 USHORT POINTER_ALIGNMENT FileAttributes
;
3541 ULONG POINTER_ALIGNMENT EaLength
;
3545 ULONG POINTER_ALIGNMENT Key
;
3546 LARGE_INTEGER ByteOffset
;
3550 ULONG POINTER_ALIGNMENT Key
;
3551 LARGE_INTEGER ByteOffset
;
3555 PUNICODE_STRING FileName
;
3556 FILE_INFORMATION_CLASS FileInformationClass
;
3561 ULONG CompletionFilter
;
3565 FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass
;
3569 FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass
;
3570 PFILE_OBJECT FileObject
;
3571 _ANONYMOUS_UNION
union {
3572 _ANONYMOUS_STRUCT
struct {
3573 BOOLEAN ReplaceIfExists
;
3574 BOOLEAN AdvanceOnly
;
3577 HANDLE DeleteHandle
;
3591 FS_INFORMATION_CLASS POINTER_ALIGNMENT FsInformationClass
;
3595 FS_INFORMATION_CLASS FsInformationClass
;
3598 ULONG OutputBufferLength
;
3599 ULONG InputBufferLength
;
3600 ULONG FsControlCode
;
3601 PVOID Type3InputBuffer
;
3602 } FileSystemControl
;
3604 PLARGE_INTEGER Length
;
3606 LARGE_INTEGER ByteOffset
;
3609 ULONG OutputBufferLength
;
3610 ULONG POINTER_ALIGNMENT InputBufferLength
;
3611 ULONG POINTER_ALIGNMENT IoControlCode
;
3612 PVOID Type3InputBuffer
;
3615 SECURITY_INFORMATION SecurityInformation
;
3616 ULONG POINTER_ALIGNMENT Length
;
3619 SECURITY_INFORMATION SecurityInformation
;
3620 PSECURITY_DESCRIPTOR SecurityDescriptor
;
3624 PDEVICE_OBJECT DeviceObject
;
3628 PDEVICE_OBJECT DeviceObject
;
3631 struct _SCSI_REQUEST_BLOCK
*Srb
;
3636 struct _FILE_GET_QUOTA_INFORMATION
*SidList
;
3637 ULONG SidListLength
;
3643 DEVICE_RELATION_TYPE Type
;
3644 } QueryDeviceRelations
;
3646 CONST GUID
*InterfaceType
;
3649 PINTERFACE Interface
;
3650 PVOID InterfaceSpecificData
;
3653 PDEVICE_CAPABILITIES Capabilities
;
3654 } DeviceCapabilities
;
3656 PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList
;
3657 } FilterResourceRequirements
;
3662 ULONG POINTER_ALIGNMENT Length
;
3668 BUS_QUERY_ID_TYPE IdType
;
3671 DEVICE_TEXT_TYPE DeviceTextType
;
3672 LCID POINTER_ALIGNMENT LocaleId
;
3676 BOOLEAN Reserved
[3];
3677 DEVICE_USAGE_NOTIFICATION_TYPE POINTER_ALIGNMENT Type
;
3678 } UsageNotification
;
3680 SYSTEM_POWER_STATE PowerState
;
3683 PPOWER_SEQUENCE PowerSequence
;
3686 ULONG SystemContext
;
3687 POWER_STATE_TYPE POINTER_ALIGNMENT Type
;
3688 POWER_STATE POINTER_ALIGNMENT State
;
3689 POWER_ACTION POINTER_ALIGNMENT ShutdownType
;
3692 PCM_RESOURCE_LIST AllocatedResources
;
3693 PCM_RESOURCE_LIST AllocatedResourcesTranslated
;
3696 ULONG_PTR ProviderId
;
3708 PDEVICE_OBJECT DeviceObject
;
3709 PFILE_OBJECT FileObject
;
3710 PIO_COMPLETION_ROUTINE CompletionRoutine
;
3712 } IO_STACK_LOCATION
, *PIO_STACK_LOCATION
;
3713 #if !defined(_ALPHA_)
3714 #include <poppack.h>
3717 /* IO_STACK_LOCATION.Control */
3719 #define SL_PENDING_RETURNED 0x01
3720 #define SL_ERROR_RETURNED 0x02
3721 #define SL_INVOKE_ON_CANCEL 0x20
3722 #define SL_INVOKE_ON_SUCCESS 0x40
3723 #define SL_INVOKE_ON_ERROR 0x80
3725 /* IO_STACK_LOCATION.Parameters.ReadWriteControl.WhichSpace */
3727 #define PCI_WHICHSPACE_CONFIG 0x0
3728 #define PCI_WHICHSPACE_ROM 0x52696350 /* 'PciR' */
3730 typedef enum _KEY_INFORMATION_CLASS
{
3731 KeyBasicInformation
,
3735 KeyCachedInformation
,
3737 } KEY_INFORMATION_CLASS
;
3739 typedef struct _KEY_BASIC_INFORMATION
{
3740 LARGE_INTEGER LastWriteTime
;
3744 } KEY_BASIC_INFORMATION
, *PKEY_BASIC_INFORMATION
;
3746 typedef struct _KEY_FULL_INFORMATION
{
3747 LARGE_INTEGER LastWriteTime
;
3755 ULONG MaxValueNameLen
;
3756 ULONG MaxValueDataLen
;
3758 } KEY_FULL_INFORMATION
, *PKEY_FULL_INFORMATION
;
3760 typedef struct _KEY_NODE_INFORMATION
{
3761 LARGE_INTEGER LastWriteTime
;
3767 } KEY_NODE_INFORMATION
, *PKEY_NODE_INFORMATION
;
3769 typedef struct _KEY_VALUE_BASIC_INFORMATION
{
3774 } KEY_VALUE_BASIC_INFORMATION
, *PKEY_VALUE_BASIC_INFORMATION
;
3776 typedef struct _KEY_VALUE_FULL_INFORMATION
{
3783 } KEY_VALUE_FULL_INFORMATION
, *PKEY_VALUE_FULL_INFORMATION
;
3785 typedef struct _KEY_VALUE_PARTIAL_INFORMATION
{
3790 } KEY_VALUE_PARTIAL_INFORMATION
, *PKEY_VALUE_PARTIAL_INFORMATION
;
3792 typedef struct _KEY_VALUE_PARTIAL_INFORMATION_ALIGN64
{
3796 } KEY_VALUE_PARTIAL_INFORMATION_ALIGN64
, *PKEY_VALUE_PARTIAL_INFORMATION_ALIGN64
;
3798 typedef struct _KEY_VALUE_ENTRY
{
3799 PUNICODE_STRING ValueName
;
3803 } KEY_VALUE_ENTRY
, *PKEY_VALUE_ENTRY
;
3805 typedef enum _KEY_VALUE_INFORMATION_CLASS
{
3806 KeyValueBasicInformation
,
3807 KeyValueFullInformation
,
3808 KeyValuePartialInformation
,
3809 KeyValueFullInformationAlign64
,
3810 KeyValuePartialInformationAlign64
3811 } KEY_VALUE_INFORMATION_CLASS
;
3813 typedef struct _KEY_WRITE_TIME_INFORMATION
{
3814 LARGE_INTEGER LastWriteTime
;
3815 } KEY_WRITE_TIME_INFORMATION
, *PKEY_WRITE_TIME_INFORMATION
;
3817 typedef struct _KEY_USER_FLAGS_INFORMATION
{
3819 } KEY_USER_FLAGS_INFORMATION
, *PKEY_USER_FLAGS_INFORMATION
;
3821 typedef enum _KEY_SET_INFORMATION_CLASS
{
3822 KeyWriteTimeInformation
,
3823 KeyUserFlagsInformation
,
3825 } KEY_SET_INFORMATION_CLASS
;
3827 /* KEY_VALUE_Xxx.Type */
3831 #define REG_EXPAND_SZ 2
3832 #define REG_BINARY 3
3834 #define REG_DWORD_LITTLE_ENDIAN 4
3835 #define REG_DWORD_BIG_ENDIAN 5
3837 #define REG_MULTI_SZ 7
3838 #define REG_RESOURCE_LIST 8
3839 #define REG_FULL_RESOURCE_DESCRIPTOR 9
3840 #define REG_RESOURCE_REQUIREMENTS_LIST 10
3841 #define REG_QWORD 11
3842 #define REG_QWORD_LITTLE_ENDIAN 11
3844 #define PCI_TYPE0_ADDRESSES 6
3845 #define PCI_TYPE1_ADDRESSES 2
3846 #define PCI_TYPE2_ADDRESSES 5
3848 typedef struct _PCI_COMMON_CONFIG
{
3857 UCHAR CacheLineSize
;
3862 struct _PCI_HEADER_TYPE_0
{
3863 ULONG BaseAddresses
[PCI_TYPE0_ADDRESSES
];
3867 ULONG ROMBaseAddress
;
3868 UCHAR CapabilitiesPtr
;
3871 UCHAR InterruptLine
;
3874 UCHAR MaximumLatency
;
3876 struct _PCI_HEADER_TYPE_1
{
3877 ULONG BaseAddresses
[PCI_TYPE1_ADDRESSES
];
3880 UCHAR SubordinateBus
;
3881 UCHAR SecondaryLatency
;
3884 USHORT SecondaryStatus
;
3887 USHORT PrefetchBase
;
3888 USHORT PrefetchLimit
;
3889 ULONG PrefetchBaseUpper32
;
3890 ULONG PrefetchLimitUpper32
;
3891 USHORT IOBaseUpper16
;
3892 USHORT IOLimitUpper16
;
3893 UCHAR CapabilitiesPtr
;
3895 ULONG ROMBaseAddress
;
3896 UCHAR InterruptLine
;
3898 USHORT BridgeControl
;
3900 struct _PCI_HEADER_TYPE_2
{
3901 ULONG SocketRegistersBaseAddress
;
3902 UCHAR CapabilitiesPtr
;
3904 USHORT SecondaryStatus
;
3907 UCHAR SubordinateBus
;
3908 UCHAR SecondaryLatency
;
3912 } Range
[PCI_TYPE2_ADDRESSES
- 1];
3913 UCHAR InterruptLine
;
3915 USHORT BridgeControl
;
3918 UCHAR DeviceSpecific
[192];
3919 } PCI_COMMON_CONFIG
, *PPCI_COMMON_CONFIG
;
3921 /* PCI_COMMON_CONFIG.Command */
3923 #define PCI_ENABLE_IO_SPACE 0x0001
3924 #define PCI_ENABLE_MEMORY_SPACE 0x0002
3925 #define PCI_ENABLE_BUS_MASTER 0x0004
3926 #define PCI_ENABLE_SPECIAL_CYCLES 0x0008
3927 #define PCI_ENABLE_WRITE_AND_INVALIDATE 0x0010
3928 #define PCI_ENABLE_VGA_COMPATIBLE_PALETTE 0x0020
3929 #define PCI_ENABLE_PARITY 0x0040
3930 #define PCI_ENABLE_WAIT_CYCLE 0x0080
3931 #define PCI_ENABLE_SERR 0x0100
3932 #define PCI_ENABLE_FAST_BACK_TO_BACK 0x0200
3934 /* PCI_COMMON_CONFIG.Status */
3936 #define PCI_STATUS_CAPABILITIES_LIST 0x0010
3937 #define PCI_STATUS_66MHZ_CAPABLE 0x0020
3938 #define PCI_STATUS_UDF_SUPPORTED 0x0040
3939 #define PCI_STATUS_FAST_BACK_TO_BACK 0x0080
3940 #define PCI_STATUS_DATA_PARITY_DETECTED 0x0100
3941 #define PCI_STATUS_DEVSEL 0x0600
3942 #define PCI_STATUS_SIGNALED_TARGET_ABORT 0x0800
3943 #define PCI_STATUS_RECEIVED_TARGET_ABORT 0x1000
3944 #define PCI_STATUS_RECEIVED_MASTER_ABORT 0x2000
3945 #define PCI_STATUS_SIGNALED_SYSTEM_ERROR 0x4000
3946 #define PCI_STATUS_DETECTED_PARITY_ERROR 0x8000
3948 /* PCI_COMMON_CONFIG.HeaderType */
3950 #define PCI_MULTIFUNCTION 0x80
3951 #define PCI_DEVICE_TYPE 0x00
3952 #define PCI_BRIDGE_TYPE 0x01
3953 #define PCI_CARDBUS_BRIDGE_TYPE 0x02
3955 #define PCI_CONFIGURATION_TYPE(PciData) \
3956 (((PPCI_COMMON_CONFIG) (PciData))->HeaderType & ~PCI_MULTIFUNCTION)
3958 #define PCI_MULTIFUNCTION_DEVICE(PciData) \
3959 ((((PPCI_COMMON_CONFIG) (PciData))->HeaderType & PCI_MULTIFUNCTION) != 0)
3961 /* PCI device classes */
3963 #define PCI_CLASS_PRE_20 0x00
3964 #define PCI_CLASS_MASS_STORAGE_CTLR 0x01
3965 #define PCI_CLASS_NETWORK_CTLR 0x02
3966 #define PCI_CLASS_DISPLAY_CTLR 0x03
3967 #define PCI_CLASS_MULTIMEDIA_DEV 0x04
3968 #define PCI_CLASS_MEMORY_CTLR 0x05
3969 #define PCI_CLASS_BRIDGE_DEV 0x06
3970 #define PCI_CLASS_SIMPLE_COMMS_CTLR 0x07
3971 #define PCI_CLASS_BASE_SYSTEM_DEV 0x08
3972 #define PCI_CLASS_INPUT_DEV 0x09
3973 #define PCI_CLASS_DOCKING_STATION 0x0a
3974 #define PCI_CLASS_PROCESSOR 0x0b
3975 #define PCI_CLASS_SERIAL_BUS_CTLR 0x0c
3977 /* PCI device subclasses for class 0 */
3979 #define PCI_SUBCLASS_PRE_20_NON_VGA 0x00
3980 #define PCI_SUBCLASS_PRE_20_VGA 0x01
3982 /* PCI device subclasses for class 1 (mass storage controllers)*/
3984 #define PCI_SUBCLASS_MSC_SCSI_BUS_CTLR 0x00
3985 #define PCI_SUBCLASS_MSC_IDE_CTLR 0x01
3986 #define PCI_SUBCLASS_MSC_FLOPPY_CTLR 0x02
3987 #define PCI_SUBCLASS_MSC_IPI_CTLR 0x03
3988 #define PCI_SUBCLASS_MSC_RAID_CTLR 0x04
3989 #define PCI_SUBCLASS_MSC_OTHER 0x80
3991 /* PCI device subclasses for class 2 (network controllers)*/
3993 #define PCI_SUBCLASS_NET_ETHERNET_CTLR 0x00
3994 #define PCI_SUBCLASS_NET_TOKEN_RING_CTLR 0x01
3995 #define PCI_SUBCLASS_NET_FDDI_CTLR 0x02
3996 #define PCI_SUBCLASS_NET_ATM_CTLR 0x03
3997 #define PCI_SUBCLASS_NET_OTHER 0x80
3999 /* PCI device subclasses for class 3 (display controllers)*/
4001 #define PCI_SUBCLASS_VID_VGA_CTLR 0x00
4002 #define PCI_SUBCLASS_VID_XGA_CTLR 0x01
4003 #define PCI_SUBCLASS_VID_3D_CTLR 0x02
4004 #define PCI_SUBCLASS_VID_OTHER 0x80
4006 /* PCI device subclasses for class 4 (multimedia device)*/
4008 #define PCI_SUBCLASS_MM_VIDEO_DEV 0x00
4009 #define PCI_SUBCLASS_MM_AUDIO_DEV 0x01
4010 #define PCI_SUBCLASS_MM_TELEPHONY_DEV 0x02
4011 #define PCI_SUBCLASS_MM_OTHER 0x80
4013 /* PCI device subclasses for class 5 (memory controller)*/
4015 #define PCI_SUBCLASS_MEM_RAM 0x00
4016 #define PCI_SUBCLASS_MEM_FLASH 0x01
4017 #define PCI_SUBCLASS_MEM_OTHER 0x80
4019 /* PCI device subclasses for class 6 (bridge device)*/
4021 #define PCI_SUBCLASS_BR_HOST 0x00
4022 #define PCI_SUBCLASS_BR_ISA 0x01
4023 #define PCI_SUBCLASS_BR_EISA 0x02
4024 #define PCI_SUBCLASS_BR_MCA 0x03
4025 #define PCI_SUBCLASS_BR_PCI_TO_PCI 0x04
4026 #define PCI_SUBCLASS_BR_PCMCIA 0x05
4027 #define PCI_SUBCLASS_BR_NUBUS 0x06
4028 #define PCI_SUBCLASS_BR_CARDBUS 0x07
4029 #define PCI_SUBCLASS_BR_OTHER 0x80
4031 /* PCI device subclasses for class C (serial bus controller)*/
4033 #define PCI_SUBCLASS_SB_IEEE1394 0x00
4034 #define PCI_SUBCLASS_SB_ACCESS 0x01
4035 #define PCI_SUBCLASS_SB_SSA 0x02
4036 #define PCI_SUBCLASS_SB_USB 0x03
4037 #define PCI_SUBCLASS_SB_FIBRE_CHANNEL 0x04
4038 #define PCI_SUBCLASS_SB_SMBUS 0x05
4040 #define PCI_MAX_DEVICES 32
4041 #define PCI_MAX_FUNCTION 8
4042 #define PCI_MAX_BRIDGE_NUMBER 0xFF
4043 #define PCI_INVALID_VENDORID 0xFFFF
4044 #define PCI_COMMON_HDR_LENGTH (FIELD_OFFSET(PCI_COMMON_CONFIG, DeviceSpecific))
4046 #define PCI_ADDRESS_IO_SPACE 0x01
4047 #define PCI_ADDRESS_MEMORY_TYPE_MASK 0x06
4048 #define PCI_ADDRESS_MEMORY_PREFETCHABLE 0x08
4049 #define PCI_ADDRESS_IO_ADDRESS_MASK 0xfffffffc
4050 #define PCI_ADDRESS_MEMORY_ADDRESS_MASK 0xfffffff0
4051 #define PCI_ADDRESS_ROM_ADDRESS_MASK 0xfffff800
4053 #define PCI_TYPE_32BIT 0
4054 #define PCI_TYPE_20BIT 2
4055 #define PCI_TYPE_64BIT 4
4057 typedef struct _PCI_SLOT_NUMBER
{
4060 ULONG DeviceNumber
: 5;
4061 ULONG FunctionNumber
: 3;
4062 ULONG Reserved
: 24;
4066 } PCI_SLOT_NUMBER
, *PPCI_SLOT_NUMBER
;
4068 #define POOL_COLD_ALLOCATION 256
4069 #define POOL_QUOTA_FAIL_INSTEAD_OF_RAISE 8
4070 #define POOL_RAISE_IF_ALLOCATION_FAILURE 16
4072 typedef struct _OSVERSIONINFOA
{
4073 ULONG dwOSVersionInfoSize
;
4074 ULONG dwMajorVersion
;
4075 ULONG dwMinorVersion
;
4076 ULONG dwBuildNumber
;
4078 CHAR szCSDVersion
[128];
4079 } OSVERSIONINFOA
, *POSVERSIONINFOA
, *LPOSVERSIONINFOA
;
4081 typedef struct _OSVERSIONINFOW
{
4082 ULONG dwOSVersionInfoSize
;
4083 ULONG dwMajorVersion
;
4084 ULONG dwMinorVersion
;
4085 ULONG dwBuildNumber
;
4087 WCHAR szCSDVersion
[128];
4088 } OSVERSIONINFOW
, *POSVERSIONINFOW
, *LPOSVERSIONINFOW
, RTL_OSVERSIONINFOW
, *PRTL_OSVERSIONINFOW
;
4091 typedef OSVERSIONINFOW OSVERSIONINFO
;
4092 typedef POSVERSIONINFOW POSVERSIONINFO
;
4093 typedef LPOSVERSIONINFOW LPOSVERSIONINFO
;
4095 typedef OSVERSIONINFOA OSVERSIONINFO
;
4096 typedef POSVERSIONINFOA POSVERSIONINFO
;
4097 typedef LPOSVERSIONINFOA LPOSVERSIONINFO
;
4100 typedef struct _OSVERSIONINFOEXA
{
4101 ULONG dwOSVersionInfoSize
;
4102 ULONG dwMajorVersion
;
4103 ULONG dwMinorVersion
;
4104 ULONG dwBuildNumber
;
4106 CHAR szCSDVersion
[128];
4107 USHORT wServicePackMajor
;
4108 USHORT wServicePackMinor
;
4112 } OSVERSIONINFOEXA
, *POSVERSIONINFOEXA
, *LPOSVERSIONINFOEXA
;
4114 typedef struct _OSVERSIONINFOEXW
{
4115 ULONG dwOSVersionInfoSize
;
4116 ULONG dwMajorVersion
;
4117 ULONG dwMinorVersion
;
4118 ULONG dwBuildNumber
;
4120 WCHAR szCSDVersion
[128];
4121 USHORT wServicePackMajor
;
4122 USHORT wServicePackMinor
;
4126 } OSVERSIONINFOEXW
, *POSVERSIONINFOEXW
, *LPOSVERSIONINFOEXW
, RTL_OSVERSIONINFOEXW
, *PRTL_OSVERSIONINFOEXW
;
4129 typedef OSVERSIONINFOEXW OSVERSIONINFOEX
;
4130 typedef POSVERSIONINFOEXW POSVERSIONINFOEX
;
4131 typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX
;
4133 typedef OSVERSIONINFOEXA OSVERSIONINFOEX
;
4134 typedef POSVERSIONINFOEXA POSVERSIONINFOEX
;
4135 typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX
;
4141 VerSetConditionMask(
4142 IN ULONGLONG ConditionMask
,
4144 IN UCHAR Condition
);
4146 #define VER_SET_CONDITION(ConditionMask, TypeBitMask, ComparisonType) \
4147 ((ConditionMask) = VerSetConditionMask((ConditionMask), \
4148 (TypeBitMask), (ComparisonType)))
4150 /* RtlVerifyVersionInfo() TypeMask */
4152 #define VER_MINORVERSION 0x0000001
4153 #define VER_MAJORVERSION 0x0000002
4154 #define VER_BUILDNUMBER 0x0000004
4155 #define VER_PLATFORMID 0x0000008
4156 #define VER_SERVICEPACKMINOR 0x0000010
4157 #define VER_SERVICEPACKMAJOR 0x0000020
4158 #define VER_SUITENAME 0x0000040
4159 #define VER_PRODUCT_TYPE 0x0000080
4161 /* RtlVerifyVersionInfo() ComparisonType */
4164 #define VER_GREATER 2
4165 #define VER_GREATER_EQUAL 3
4167 #define VER_LESS_EQUAL 5
4171 #define VER_CONDITION_MASK 7
4172 #define VER_NUM_BITS_PER_CONDITION_MASK 3
4177 (NTAPI
*PRTL_CONFLICT_RANGE_CALLBACK
) (
4179 struct _RTL_RANGE
*Range
4182 typedef enum _EVENT_TYPE
{
4184 SynchronizationEvent
4187 typedef enum _KWAIT_REASON
{
4225 typedef struct _KWAIT_BLOCK
{
4226 LIST_ENTRY WaitListEntry
;
4227 struct _KTHREAD
* RESTRICTED_POINTER Thread
;
4229 struct _KWAIT_BLOCK
* RESTRICTED_POINTER NextWaitBlock
;
4233 } KWAIT_BLOCK
, *PKWAIT_BLOCK
, *RESTRICTED_POINTER PRKWAIT_BLOCK
;
4235 typedef struct _IO_REMOVE_LOCK_TRACKING_BLOCK
* PIO_REMOVE_LOCK_TRACKING_BLOCK
;
4237 typedef struct _IO_REMOVE_LOCK_COMMON_BLOCK
{
4239 BOOLEAN Reserved
[3];
4240 volatile LONG IoCount
;
4242 } IO_REMOVE_LOCK_COMMON_BLOCK
;
4244 typedef struct _IO_REMOVE_LOCK_DBG_BLOCK
{
4247 LONGLONG MaxLockedTicks
;
4249 LIST_ENTRY LockList
;
4251 volatile LONG LowMemoryCount
;
4254 PIO_REMOVE_LOCK_TRACKING_BLOCK Blocks
;
4255 } IO_REMOVE_LOCK_DBG_BLOCK
;
4257 typedef struct _IO_REMOVE_LOCK
{
4258 IO_REMOVE_LOCK_COMMON_BLOCK Common
;
4260 IO_REMOVE_LOCK_DBG_BLOCK Dbg
;
4262 } IO_REMOVE_LOCK
, *PIO_REMOVE_LOCK
;
4264 typedef struct _IO_WORKITEM
*PIO_WORKITEM
;
4267 (DDKAPI IO_WORKITEM_ROUTINE
)(
4268 IN PDEVICE_OBJECT DeviceObject
,
4270 typedef IO_WORKITEM_ROUTINE
*PIO_WORKITEM_ROUTINE
;
4272 typedef struct _SHARE_ACCESS
{
4280 } SHARE_ACCESS
, *PSHARE_ACCESS
;
4282 typedef enum _KINTERRUPT_MODE
{
4287 #define THREAD_WAIT_OBJECTS 3
4290 (DDKAPI
*PKINTERRUPT_ROUTINE
)(
4293 typedef enum _KPROFILE_SOURCE
{
4295 ProfileAlignmentFixup
,
4298 ProfileLoadInstructions
,
4299 ProfilePipelineFrozen
,
4300 ProfileBranchInstructions
,
4301 ProfileTotalNonissues
,
4302 ProfileDcacheMisses
,
4303 ProfileIcacheMisses
,
4305 ProfileBranchMispredictions
,
4306 ProfileStoreInstructions
,
4307 ProfileFpInstructions
,
4308 ProfileIntegerInstructions
,
4312 ProfileSpecialInstructions
,
4314 ProfileIcacheIssues
,
4315 ProfileDcacheAccesses
,
4316 ProfileMemoryBarrierCycles
,
4317 ProfileLoadLinkedIssues
,
4321 typedef enum _CREATE_FILE_TYPE
{
4323 CreateFileTypeNamedPipe
,
4324 CreateFileTypeMailslot
4327 typedef struct _CONFIGURATION_INFORMATION
{
4332 ULONG ScsiPortCount
;
4334 ULONG ParallelCount
;
4335 BOOLEAN AtDiskPrimaryAddressClaimed
;
4336 BOOLEAN AtDiskSecondaryAddressClaimed
;
4338 ULONG MediumChangerCount
;
4339 } CONFIGURATION_INFORMATION
, *PCONFIGURATION_INFORMATION
;
4341 typedef enum _CONFIGURATION_TYPE
{
4344 FloatingPointProcessor
,
4354 MultiFunctionAdapter
,
4368 FloppyDiskPeripheral
,
4381 RealModeIrqRoutingTable
,
4382 RealModePCIEnumeration
,
4384 } CONFIGURATION_TYPE
, *PCONFIGURATION_TYPE
;
4386 #define IO_FORCE_ACCESS_CHECK 0x001
4387 #define IO_NO_PARAMETER_CHECKING 0x100
4389 #define IO_REPARSE 0x0
4390 #define IO_REMOUNT 0x1
4393 (DDKAPI
*PIO_QUERY_DEVICE_ROUTINE
)(
4395 IN PUNICODE_STRING PathName
,
4396 IN INTERFACE_TYPE BusType
,
4398 IN PKEY_VALUE_FULL_INFORMATION
*BusInformation
,
4399 IN CONFIGURATION_TYPE ControllerType
,
4400 IN ULONG ControllerNumber
,
4401 IN PKEY_VALUE_FULL_INFORMATION
*ControllerInformation
,
4402 IN CONFIGURATION_TYPE PeripheralType
,
4403 IN ULONG PeripheralNumber
,
4404 IN PKEY_VALUE_FULL_INFORMATION
*PeripheralInformation
);
4406 typedef enum _IO_QUERY_DEVICE_DATA_FORMAT
{
4407 IoQueryDeviceIdentifier
= 0,
4408 IoQueryDeviceConfigurationData
,
4409 IoQueryDeviceComponentInformation
,
4410 IoQueryDeviceMaxData
4411 } IO_QUERY_DEVICE_DATA_FORMAT
, *PIO_QUERY_DEVICE_DATA_FORMAT
;
4413 typedef enum _KBUGCHECK_CALLBACK_REASON
{
4415 KbCallbackReserved1
,
4416 KbCallbackSecondaryDumpData
,
4418 } KBUGCHECK_CALLBACK_REASON
;
4420 struct _KBUGCHECK_REASON_CALLBACK_RECORD
;
4423 (DDKAPI
*PKBUGCHECK_REASON_CALLBACK_ROUTINE
)(
4424 IN KBUGCHECK_CALLBACK_REASON Reason
,
4425 IN
struct _KBUGCHECK_REASON_CALLBACK_RECORD
*Record
,
4426 IN OUT PVOID ReasonSpecificData
,
4427 IN ULONG ReasonSpecificDataLength
);
4429 typedef struct _KBUGCHECK_REASON_CALLBACK_RECORD
{
4431 PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine
;
4434 KBUGCHECK_CALLBACK_REASON Reason
;
4436 } KBUGCHECK_REASON_CALLBACK_RECORD
, *PKBUGCHECK_REASON_CALLBACK_RECORD
;
4438 typedef enum _KBUGCHECK_BUFFER_DUMP_STATE
{
4444 } KBUGCHECK_BUFFER_DUMP_STATE
;
4447 (DDKAPI
*PKBUGCHECK_CALLBACK_ROUTINE
)(
4451 typedef struct _KBUGCHECK_CALLBACK_RECORD
{
4453 PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine
;
4459 } KBUGCHECK_CALLBACK_RECORD
, *PKBUGCHECK_CALLBACK_RECORD
;
4462 (DDKAPI
*PNMI_CALLBACK
)(
4464 IN BOOLEAN Handled
);
4468 * KeInitializeCallbackRecord(
4469 * IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord)
4471 #define KeInitializeCallbackRecord(CallbackRecord) \
4472 CallbackRecord->State = BufferEmpty;
4474 typedef enum _KDPC_IMPORTANCE
{
4480 typedef enum _MEMORY_CACHING_TYPE_ORIG
{
4481 MmFrameBufferCached
= 2
4482 } MEMORY_CACHING_TYPE_ORIG
;
4484 typedef enum _MEMORY_CACHING_TYPE
{
4485 MmNonCached
= FALSE
,
4487 MmWriteCombined
= MmFrameBufferCached
,
4488 MmHardwareCoherentCached
,
4489 MmNonCachedUnordered
,
4492 } MEMORY_CACHING_TYPE
;
4494 typedef enum _MM_PAGE_PRIORITY
{
4496 NormalPagePriority
= 16,
4497 HighPagePriority
= 32
4500 typedef enum _LOCK_OPERATION
{
4506 #define FLUSH_MULTIPLE_MAXIMUM 32
4508 typedef enum _MM_SYSTEM_SIZE
{
4514 typedef struct _OBJECT_HANDLE_INFORMATION
{
4515 ULONG HandleAttributes
;
4516 ACCESS_MASK GrantedAccess
;
4517 } OBJECT_HANDLE_INFORMATION
, *POBJECT_HANDLE_INFORMATION
;
4519 typedef struct _CLIENT_ID
{
4520 HANDLE UniqueProcess
;
4521 HANDLE UniqueThread
;
4522 } CLIENT_ID
, *PCLIENT_ID
;
4525 (DDKAPI
*PKSTART_ROUTINE
)(
4526 IN PVOID StartContext
);
4529 (DDKAPI
*PCREATE_PROCESS_NOTIFY_ROUTINE
)(
4531 IN HANDLE ProcessId
,
4535 (DDKAPI
*PCREATE_THREAD_NOTIFY_ROUTINE
)(
4536 IN HANDLE ProcessId
,
4540 typedef struct _IMAGE_INFO
{
4541 _ANONYMOUS_UNION
union {
4543 _ANONYMOUS_STRUCT
struct {
4544 ULONG ImageAddressingMode
: 8;
4545 ULONG SystemModeImage
: 1;
4546 ULONG ImageMappedToAllPids
: 1;
4547 ULONG Reserved
: 22;
4551 ULONG ImageSelector
;
4553 ULONG ImageSectionNumber
;
4554 } IMAGE_INFO
, *PIMAGE_INFO
;
4556 #define IMAGE_ADDRESSING_MODE_32BIT 3
4559 (DDKAPI
*PLOAD_IMAGE_NOTIFY_ROUTINE
)(
4560 IN PUNICODE_STRING FullImageName
,
4561 IN HANDLE ProcessId
,
4562 IN PIMAGE_INFO ImageInfo
);
4564 #pragma pack(push,4)
4565 typedef enum _BUS_DATA_TYPE
{
4566 ConfigurationSpaceUndefined
= -1,
4574 PCMCIAConfiguration
,
4577 PNPISAConfiguration
,
4578 SgiInternalConfiguration
,
4580 } BUS_DATA_TYPE
, *PBUS_DATA_TYPE
;
4583 typedef struct _NT_TIB
{
4584 struct _EXCEPTION_REGISTRATION_RECORD
*ExceptionList
;
4588 _ANONYMOUS_UNION
union {
4592 PVOID ArbitraryUserPointer
;
4593 struct _NT_TIB
*Self
;
4596 typedef enum _PROCESSINFOCLASS
{
4597 ProcessBasicInformation
,
4602 ProcessBasePriority
,
4603 ProcessRaisePriority
,
4605 ProcessExceptionPort
,
4607 ProcessLdtInformation
,
4609 ProcessDefaultHardErrorMode
,
4610 ProcessIoPortHandlers
,
4611 ProcessPooledUsageAndLimits
,
4612 ProcessWorkingSetWatch
,
4613 ProcessUserModeIOPL
,
4614 ProcessEnableAlignmentFaultFixup
,
4615 ProcessPriorityClass
,
4616 ProcessWx86Information
,
4618 ProcessAffinityMask
,
4619 ProcessPriorityBoost
,
4621 ProcessSessionInformation
,
4622 ProcessForegroundInformation
,
4623 ProcessWow64Information
,
4624 ProcessImageFileName
,
4625 ProcessLUIDDeviceMapsEnabled
,
4626 ProcessBreakOnTermination
,
4627 ProcessDebugObjectHandle
,
4629 ProcessHandleTracing
,
4631 ProcessExecuteFlags
,
4632 ProcessTlsInformation
,
4634 ProcessImageInformation
,
4636 ProcessPagePriority
,
4637 ProcessInstrumentationCallback
,
4641 typedef enum _THREADINFOCLASS
{
4642 ThreadBasicInformation
,
4647 ThreadImpersonationToken
,
4648 ThreadDescriptorTableEntry
,
4649 ThreadEnableAlignmentFaultFixup
,
4650 ThreadEventPair_Reusable
,
4651 ThreadQuerySetWin32StartAddress
,
4653 ThreadPerformanceCount
,
4654 ThreadAmILastThread
,
4655 ThreadIdealProcessor
,
4656 ThreadPriorityBoost
,
4657 ThreadSetTlsArrayAddress
,
4659 ThreadHideFromDebugger
,
4660 ThreadBreakOnTermination
,
4661 ThreadSwitchLegacyState
,
4663 ThreadLastSystemCall
,
4667 ThreadActualBasePriority
,
4671 typedef struct _PROCESS_BASIC_INFORMATION
4673 NTSTATUS ExitStatus
;
4674 struct _PEB
*PebBaseAddress
;
4675 ULONG_PTR AffinityMask
;
4676 KPRIORITY BasePriority
;
4677 ULONG_PTR UniqueProcessId
;
4678 ULONG_PTR InheritedFromUniqueProcessId
;
4679 } PROCESS_BASIC_INFORMATION
,*PPROCESS_BASIC_INFORMATION
;
4681 typedef struct _PROCESS_WS_WATCH_INFORMATION
4685 } PROCESS_WS_WATCH_INFORMATION
, *PPROCESS_WS_WATCH_INFORMATION
;
4687 typedef struct _PROCESS_DEVICEMAP_INFORMATION
4693 HANDLE DirectoryHandle
;
4698 UCHAR DriveType
[32];
4701 } PROCESS_DEVICEMAP_INFORMATION
, *PPROCESS_DEVICEMAP_INFORMATION
;
4703 typedef struct _KERNEL_USER_TIMES
4705 LARGE_INTEGER CreateTime
;
4706 LARGE_INTEGER ExitTime
;
4707 LARGE_INTEGER KernelTime
;
4708 LARGE_INTEGER UserTime
;
4709 } KERNEL_USER_TIMES
, *PKERNEL_USER_TIMES
;
4711 typedef struct _PROCESS_ACCESS_TOKEN
4715 } PROCESS_ACCESS_TOKEN
, *PPROCESS_ACCESS_TOKEN
;
4717 typedef struct _PROCESS_SESSION_INFORMATION
4720 } PROCESS_SESSION_INFORMATION
, *PPROCESS_SESSION_INFORMATION
;
4723 (DDKAPI
*PREQUEST_POWER_COMPLETE
)(
4724 IN PDEVICE_OBJECT DeviceObject
,
4725 IN UCHAR MinorFunction
,
4726 IN POWER_STATE PowerState
,
4728 IN PIO_STATUS_BLOCK IoStatus
);
4730 typedef enum _TRACE_INFORMATION_CLASS
{
4733 TraceEnableFlagsClass
,
4734 TraceEnableLevelClass
,
4735 GlobalLoggerHandleClass
,
4736 EventLoggerHandleClass
,
4737 AllLoggerHandlesClass
,
4738 TraceHandleByNameClass
4739 } TRACE_INFORMATION_CLASS
;
4741 typedef enum _REG_NOTIFY_CLASS
4744 RegNtPreDeleteKey
= RegNtDeleteKey
,
4746 RegNtPreSetValueKey
= RegNtSetValueKey
,
4747 RegNtDeleteValueKey
,
4748 RegNtPreDeleteValueKey
= RegNtDeleteValueKey
,
4749 RegNtSetInformationKey
,
4750 RegNtPreSetInformationKey
= RegNtSetInformationKey
,
4752 RegNtPreRenameKey
= RegNtRenameKey
,
4754 RegNtPreEnumerateKey
= RegNtEnumerateKey
,
4755 RegNtEnumerateValueKey
,
4756 RegNtPreEnumerateValueKey
= RegNtEnumerateValueKey
,
4758 RegNtPreQueryKey
= RegNtQueryKey
,
4760 RegNtPreQueryValueKey
= RegNtQueryValueKey
,
4761 RegNtQueryMultipleValueKey
,
4762 RegNtPreQueryMultipleValueKey
= RegNtQueryMultipleValueKey
,
4767 RegNtKeyHandleClose
,
4768 RegNtPreKeyHandleClose
= RegNtKeyHandleClose
,
4770 RegNtPostSetValueKey
,
4771 RegNtPostDeleteValueKey
,
4772 RegNtPostSetInformationKey
,
4774 RegNtPostEnumerateKey
,
4775 RegNtPostEnumerateValueKey
,
4777 RegNtPostQueryValueKey
,
4778 RegNtPostQueryMultipleValueKey
,
4779 RegNtPostKeyHandleClose
,
4780 RegNtPreCreateKeyEx
,
4781 RegNtPostCreateKeyEx
,
4784 } REG_NOTIFY_CLASS
, *PREG_NOTIFY_CLASS
;
4787 (NTAPI
*PEX_CALLBACK_FUNCTION
)(
4788 IN PVOID CallbackContext
,
4793 typedef struct _REG_DELETE_KEY_INFORMATION
4796 } REG_DELETE_KEY_INFORMATION
, *PREG_DELETE_KEY_INFORMATION
;
4798 typedef struct _REG_SET_VALUE_KEY_INFORMATION
4801 PUNICODE_STRING ValueName
;
4806 } REG_SET_VALUE_KEY_INFORMATION
, *PREG_SET_VALUE_KEY_INFORMATION
;
4808 typedef struct _REG_DELETE_VALUE_KEY_INFORMATION
4811 PUNICODE_STRING ValueName
;
4812 } REG_DELETE_VALUE_KEY_INFORMATION
, *PREG_DELETE_VALUE_KEY_INFORMATION
;
4814 typedef struct _REG_SET_INFORMATION_KEY_INFORMATION
4817 KEY_SET_INFORMATION_CLASS KeySetInformationClass
;
4818 PVOID KeySetInformation
;
4819 ULONG KeySetInformationLength
;
4820 } REG_SET_INFORMATION_KEY_INFORMATION
, *PREG_SET_INFORMATION_KEY_INFORMATION
;
4822 typedef struct _REG_ENUMERATE_KEY_INFORMATION
4826 KEY_INFORMATION_CLASS KeyInformationClass
;
4827 PVOID KeyInformation
;
4829 PULONG ResultLength
;
4830 } REG_ENUMERATE_KEY_INFORMATION
, *PREG_ENUMERATE_KEY_INFORMATION
;
4832 typedef struct _REG_ENUMERATE_VALUE_KEY_INFORMATION
4836 KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
;
4837 PVOID KeyValueInformation
;
4839 PULONG ResultLength
;
4840 } REG_ENUMERATE_VALUE_KEY_INFORMATION
, *PREG_ENUMERATE_VALUE_KEY_INFORMATION
;
4842 typedef struct _REG_QUERY_KEY_INFORMATION
4845 KEY_INFORMATION_CLASS KeyInformationClass
;
4846 PVOID KeyInformation
;
4848 PULONG ResultLength
;
4849 } REG_QUERY_KEY_INFORMATION
, *PREG_QUERY_KEY_INFORMATION
;
4851 typedef struct _REG_QUERY_VALUE_KEY_INFORMATION
4854 PUNICODE_STRING ValueName
;
4855 KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
;
4856 PVOID KeyValueInformation
;
4858 PULONG ResultLength
;
4859 } REG_QUERY_VALUE_KEY_INFORMATION
, *PREG_QUERY_VALUE_KEY_INFORMATION
;
4861 typedef struct _REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION
4864 PKEY_VALUE_ENTRY ValueEntries
;
4867 PULONG BufferLength
;
4868 PULONG RequiredBufferLength
;
4869 } REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION
, *PREG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION
;
4871 typedef struct _REG_PRE_CREATE_KEY_INFORMATION
4873 PUNICODE_STRING CompleteName
;
4874 } REG_PRE_CREATE_KEY_INFORMATION
, *PREG_PRE_CREATE_KEY_INFORMATION
;
4876 typedef struct _REG_POST_CREATE_KEY_INFORMATION
4878 PUNICODE_STRING CompleteName
;
4881 } REG_POST_CREATE_KEY_INFORMATION
, *PREG_POST_CREATE_KEY_INFORMATION
;
4883 typedef struct _REG_PRE_OPEN_KEY_INFORMATION
4885 PUNICODE_STRING CompleteName
;
4886 } REG_PRE_OPEN_KEY_INFORMATION
, *PREG_PRE_OPEN_KEY_INFORMATION
;
4888 typedef struct _REG_POST_OPEN_KEY_INFORMATION
4890 PUNICODE_STRING CompleteName
;
4893 } REG_POST_OPEN_KEY_INFORMATION
, *PREG_POST_OPEN_KEY_INFORMATION
;
4895 typedef struct _REG_POST_OPERATION_INFORMATION
4899 } REG_POST_OPERATION_INFORMATION
,*PREG_POST_OPERATION_INFORMATION
;
4901 typedef struct _REG_KEY_HANDLE_CLOSE_INFORMATION
4904 } REG_KEY_HANDLE_CLOSE_INFORMATION
, *PREG_KEY_HANDLE_CLOSE_INFORMATION
;
4907 ** Storage structures
4909 typedef enum _PARTITION_STYLE
{
4910 PARTITION_STYLE_MBR
,
4911 PARTITION_STYLE_GPT
,
4915 typedef struct _CREATE_DISK_MBR
{
4917 } CREATE_DISK_MBR
, *PCREATE_DISK_MBR
;
4919 typedef struct _CREATE_DISK_GPT
{
4921 ULONG MaxPartitionCount
;
4922 } CREATE_DISK_GPT
, *PCREATE_DISK_GPT
;
4924 typedef struct _CREATE_DISK
{
4925 PARTITION_STYLE PartitionStyle
;
4926 _ANONYMOUS_UNION
union {
4927 CREATE_DISK_MBR Mbr
;
4928 CREATE_DISK_GPT Gpt
;
4930 } CREATE_DISK
, *PCREATE_DISK
;
4932 typedef struct _DISK_SIGNATURE
{
4933 ULONG PartitionStyle
;
4934 _ANONYMOUS_UNION
union {
4943 } DISK_SIGNATURE
, *PDISK_SIGNATURE
;
4946 (FASTCALL
*PTIME_UPDATE_NOTIFY_ROUTINE
)(
4948 IN KPROCESSOR_MODE Mode
);
4950 #define DBG_STATUS_CONTROL_C 1
4951 #define DBG_STATUS_SYSRQ 2
4952 #define DBG_STATUS_BUGCHECK_FIRST 3
4953 #define DBG_STATUS_BUGCHECK_SECOND 4
4954 #define DBG_STATUS_FATAL 5
4955 #define DBG_STATUS_DEBUG_CONTROL 6
4956 #define DBG_STATUS_WORKER 7
4958 typedef struct _PHYSICAL_MEMORY_RANGE
{
4959 PHYSICAL_ADDRESS BaseAddress
;
4960 LARGE_INTEGER NumberOfBytes
;
4961 } PHYSICAL_MEMORY_RANGE
, *PPHYSICAL_MEMORY_RANGE
;
4964 (*PDRIVER_VERIFIER_THUNK_ROUTINE
)(
4967 typedef struct _DRIVER_VERIFIER_THUNK_PAIRS
{
4968 PDRIVER_VERIFIER_THUNK_ROUTINE PristineRoutine
;
4969 PDRIVER_VERIFIER_THUNK_ROUTINE NewRoutine
;
4970 } DRIVER_VERIFIER_THUNK_PAIRS
, *PDRIVER_VERIFIER_THUNK_PAIRS
;
4972 #define DRIVER_VERIFIER_SPECIAL_POOLING 0x0001
4973 #define DRIVER_VERIFIER_FORCE_IRQL_CHECKING 0x0002
4974 #define DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES 0x0004
4975 #define DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS 0x0008
4976 #define DRIVER_VERIFIER_IO_CHECKING 0x0010
4978 #define HASH_STRING_ALGORITHM_DEFAULT 0
4979 #define HASH_STRING_ALGORITHM_X65599 1
4980 #define HASH_STRING_ALGORITHM_INVALID 0xffffffff
4983 (DDKAPI
*PTIMER_APC_ROUTINE
)(
4984 IN PVOID TimerContext
,
4985 IN ULONG TimerLowValue
,
4986 IN LONG TimerHighValue
);
4995 (DDKAPI
*WMI_NOTIFICATION_CALLBACK
)(
5001 ** Architecture specific structures
5003 #define PCR_MINOR_VERSION 1
5004 #define PCR_MAJOR_VERSION 1
5008 #define SIZE_OF_80387_REGISTERS 80
5009 #define CONTEXT_i386 0x10000
5010 #define CONTEXT_i486 0x10000
5011 #define CONTEXT_CONTROL (CONTEXT_i386|0x00000001L)
5012 #define CONTEXT_INTEGER (CONTEXT_i386|0x00000002L)
5013 #define CONTEXT_SEGMENTS (CONTEXT_i386|0x00000004L)
5014 #define CONTEXT_FLOATING_POINT (CONTEXT_i386|0x00000008L)
5015 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386|0x00000010L)
5016 #define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386|0x00000020L)
5017 #define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS)
5018 #define MAXIMUM_SUPPORTED_EXTENSION 512
5020 typedef struct _FLOATING_SAVE_AREA
{
5025 ULONG ErrorSelector
;
5028 UCHAR RegisterArea
[SIZE_OF_80387_REGISTERS
];
5030 } FLOATING_SAVE_AREA
, *PFLOATING_SAVE_AREA
;
5032 typedef struct _CONTEXT
{
5040 FLOATING_SAVE_AREA FloatSave
;
5057 UCHAR ExtendedRegisters
[MAXIMUM_SUPPORTED_EXTENSION
];
5061 // Used to contain PFNs and PFN counts
5063 typedef ULONG PFN_COUNT
;
5064 typedef ULONG PFN_NUMBER
, *PPFN_NUMBER
;
5065 typedef LONG SPFN_NUMBER
, *PSPFN_NUMBER
;
5067 #define PASSIVE_LEVEL 0
5070 #define DISPATCH_LEVEL 2
5071 #define PROFILE_LEVEL 27
5072 #define CLOCK1_LEVEL 28
5073 #define CLOCK2_LEVEL 28
5074 #define IPI_LEVEL 29
5075 #define POWER_LEVEL 30
5076 #define HIGH_LEVEL 31
5078 typedef struct _KPCR_TIB
{
5079 PVOID ExceptionList
; /* 00 */
5080 PVOID StackBase
; /* 04 */
5081 PVOID StackLimit
; /* 08 */
5082 PVOID SubSystemTib
; /* 0C */
5083 _ANONYMOUS_UNION
union {
5084 PVOID FiberData
; /* 10 */
5085 ULONG Version
; /* 10 */
5087 PVOID ArbitraryUserPointer
; /* 14 */
5088 struct _KPCR_TIB
*Self
; /* 18 */
5089 } KPCR_TIB
, *PKPCR_TIB
; /* 1C */
5091 typedef struct _KPCR
{
5092 KPCR_TIB Tib
; /* 00 */
5093 struct _KPCR
*Self
; /* 1C */
5094 struct _KPRCB
*Prcb
; /* 20 */
5095 KIRQL Irql
; /* 24 */
5097 ULONG IrrActive
; /* 2C */
5099 PVOID KdVersionBlock
; /* 34 */
5100 PUSHORT IDT
; /* 38 */
5101 PUSHORT GDT
; /* 3C */
5102 struct _KTSS
*TSS
; /* 40 */
5103 USHORT MajorVersion
; /* 44 */
5104 USHORT MinorVersion
; /* 46 */
5105 KAFFINITY SetMember
; /* 48 */
5106 ULONG StallScaleFactor
; /* 4C */
5107 UCHAR SpareUnused
; /* 50 */
5108 UCHAR Number
; /* 51 */
5110 UCHAR SecondLevelCacheAssociativity
;
5112 ULONG KernelReserved
[14]; // For use by the kernel
5113 ULONG SecondLevelCacheSize
;
5114 ULONG HalReserved
[16]; // For use by Hal
5115 } KPCR
, *PKPCR
; /* 54 */
5117 #define KeGetPcr() PCR
5119 typedef struct _KFLOATING_SAVE
{
5123 ULONG ErrorSelector
;
5128 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
5133 KeGetCurrentProcessorNumber(VOID
)
5135 #if defined(__GNUC__)
5137 __asm__
__volatile__ (
5138 "movl %%fs:%c1, %0\n"
5140 : "i" (FIELD_OFFSET(KPCR
, Number
))
5143 #elif defined(_MSC_VER)
5144 #if _MSC_FULL_VER >= 13012035
5145 return (ULONG
)__readfsbyte(FIELD_OFFSET(KPCR
, Number
));
5147 __asm
{ movzx eax
, _PCR KPCR
.Number
}
5150 #error Unknown compiler
5166 #define KI_USER_SHARED_DATA 0xffdf0000
5168 #define PAGE_SIZE 0x1000
5169 #define PAGE_SHIFT 12L
5171 #define SharedUserData ((KUSER_SHARED_DATA * CONST) KI_USER_SHARED_DATA)
5173 extern NTKERNELAPI PVOID MmHighestUserAddress
;
5174 extern NTKERNELAPI PVOID MmSystemRangeStart
;
5175 extern NTKERNELAPI ULONG_PTR MmUserProbeAddress
;
5177 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
5178 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
5179 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
5180 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
5181 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0C00000
5183 #define MM_KSEG0_BASE MM_SYSTEM_RANGE_START
5184 #define MM_SYSTEM_SPACE_END 0xFFFFFFFF
5186 #elif defined(__x86_64__)
5188 #define CONTEXT_AMD64 0x100000
5189 #if !defined(RC_INVOKED)
5190 #define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x1L)
5191 #define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x2L)
5192 #define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x4L)
5193 #define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x8L)
5194 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x10L)
5196 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
5197 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
5199 #define CONTEXT_EXCEPTION_ACTIVE 0x8000000
5200 #define CONTEXT_SERVICE_ACTIVE 0x10000000
5201 #define CONTEXT_EXCEPTION_REQUEST 0x40000000
5202 #define CONTEXT_EXCEPTION_REPORTING 0x80000000
5205 typedef struct DECLSPEC_ALIGN(16) _M128A
{
5210 typedef struct _XMM_SAVE_AREA32
{
5217 USHORT ErrorSelector
;
5220 USHORT DataSelector
;
5224 M128A FloatRegisters
[8];
5225 M128A XmmRegisters
[16];
5226 UCHAR Reserved4
[96];
5227 } XMM_SAVE_AREA32
, *PXMM_SAVE_AREA32
;
5229 typedef struct DECLSPEC_ALIGN(16) _CONTEXT
{
5279 /* Floating point */
5281 XMM_SAVE_AREA32 FltSave
;
5305 M128A VectorRegister
[26];
5306 ULONG64 VectorControl
;
5309 ULONG64 DebugControl
;
5310 ULONG64 LastBranchToRip
;
5311 ULONG64 LastBranchFromRip
;
5312 ULONG64 LastExceptionToRip
;
5313 ULONG64 LastExceptionFromRip
;
5317 // Used to contain PFNs and PFN counts
5319 typedef ULONG PFN_COUNT
;
5320 typedef ULONG64 PFN_NUMBER
, *PPFN_NUMBER
;
5321 typedef LONG64 SPFN_NUMBER
, *PSPFN_NUMBER
;
5323 #define PASSIVE_LEVEL 0
5326 #define DISPATCH_LEVEL 2
5327 #define CLOCK_LEVEL 13
5328 #define IPI_LEVEL 14
5329 #define POWER_LEVEL 14
5330 #define PROFILE_LEVEL 15
5331 #define HIGH_LEVEL 15
5333 #define PAGE_SIZE 0x1000
5334 #define PAGE_SHIFT 12L
5335 #define PTI_SHIFT 12L
5336 #define PDI_SHIFT 21L
5337 #define PPI_SHIFT 30L
5338 #define PXI_SHIFT 39L
5339 #define PTE_PER_PAGE 512
5340 #define PDE_PER_PAGE 512
5341 #define PPE_PER_PAGE 512
5342 #define PXE_PER_PAGE 512
5343 #define PTI_MASK_AMD64 (PTE_PER_PAGE - 1)
5344 #define PDI_MASK_AMD64 (PDE_PER_PAGE - 1)
5345 #define PPI_MASK (PPE_PER_PAGE - 1)
5346 #define PXI_MASK (PXE_PER_PAGE - 1)
5348 #define PXE_BASE 0xFFFFF6FB7DBED000ULL
5349 #define PXE_SELFMAP 0xFFFFF6FB7DBEDF68ULL
5350 #define PPE_BASE 0xFFFFF6FB7DA00000ULL
5351 #define PDE_BASE 0xFFFFF6FB40000000ULL
5352 #define PTE_BASE 0xFFFFF68000000000ULL
5353 #define PXE_TOP 0xFFFFF6FB7DBEDFFFULL
5354 #define PPE_TOP 0xFFFFF6FB7DBFFFFFULL
5355 #define PDE_TOP 0xFFFFF6FB7FFFFFFFULL
5356 #define PTE_TOP 0xFFFFF6FFFFFFFFFFULL
5358 extern NTKERNELAPI PVOID MmHighestUserAddress
;
5359 extern NTKERNELAPI PVOID MmSystemRangeStart
;
5360 extern NTKERNELAPI ULONG_PTR MmUserProbeAddress
;
5362 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
5363 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
5364 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
5365 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
5366 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xFFFF080000000000ULL
5367 #define KI_USER_SHARED_DATA 0xFFFFF78000000000ULL
5369 #define SharedUserData ((PKUSER_SHARED_DATA const)KI_USER_SHARED_DATA)
5370 #define SharedInterruptTime (&SharedUserData->InterruptTime)
5371 #define SharedSystemTime (&SharedUserData->SystemTime)
5372 #define SharedTickCount (&SharedUserData->TickCount)
5374 #define KeQueryInterruptTime() \
5375 (*(volatile ULONG64*)SharedInterruptTime)
5376 #define KeQuerySystemTime(CurrentCount) \
5377 *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedSystemTime
5378 #define KeQueryTickCount(CurrentCount) \
5379 *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedTickCount
5381 typedef struct _KPCR
5388 union _KGDTENTRY64
*GdtBase
;
5389 struct _KTSS64
*TssBase
;
5392 struct _KPRCB
*CurrentPrcb
;
5393 PKSPIN_LOCK_QUEUE LockArray
;
5397 union _KIDTENTRY64
*IdtBase
;
5400 UCHAR SecondLevelCacheAssociativity
;
5401 UCHAR ObsoleteNumber
;
5404 USHORT MajorVersion
;
5405 USHORT MinorVersion
;
5406 ULONG StallScaleFactor
;
5408 ULONG KernelReserved
[15];
5409 ULONG SecondLevelCacheSize
;
5410 ULONG HalReserved
[16];
5412 PVOID KdVersionBlock
;
5414 ULONG PcrAlign1
[24];
5417 typedef struct _KFLOATING_SAVE
{
5419 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
5431 return (PKPCR
)__readgsqword(FIELD_OFFSET(KPCR
, Self
));
5436 KeGetCurrentProcessorNumber(VOID
)
5438 return (ULONG
)__readgsword(0x184);
5441 #elif defined(__PowerPC__)
5444 // Used to contain PFNs and PFN counts
5446 typedef ULONG PFN_COUNT
;
5447 typedef ULONG PFN_NUMBER
, *PPFN_NUMBER
;
5448 typedef LONG SPFN_NUMBER
, *PSPFN_NUMBER
;
5450 #define PASSIVE_LEVEL 0
5453 #define DISPATCH_LEVEL 2
5454 #define PROFILE_LEVEL 27
5455 #define CLOCK1_LEVEL 28
5456 #define CLOCK2_LEVEL 28
5457 #define IPI_LEVEL 29
5458 #define POWER_LEVEL 30
5459 #define HIGH_LEVEL 31
5461 typedef struct _KFLOATING_SAVE
{
5463 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
5465 typedef struct _KPCR_TIB
{
5466 PVOID ExceptionList
; /* 00 */
5467 PVOID StackBase
; /* 04 */
5468 PVOID StackLimit
; /* 08 */
5469 PVOID SubSystemTib
; /* 0C */
5470 _ANONYMOUS_UNION
union {
5471 PVOID FiberData
; /* 10 */
5472 ULONG Version
; /* 10 */
5474 PVOID ArbitraryUserPointer
; /* 14 */
5475 struct _KPCR_TIB
*Self
; /* 18 */
5476 } KPCR_TIB
, *PKPCR_TIB
; /* 1C */
5478 #define PCR_MINOR_VERSION 1
5479 #define PCR_MAJOR_VERSION 1
5481 typedef struct _KPCR
{
5482 KPCR_TIB Tib
; /* 00 */
5483 struct _KPCR
*Self
; /* 1C */
5484 struct _KPRCB
*Prcb
; /* 20 */
5485 KIRQL Irql
; /* 24 */
5487 ULONG IrrActive
; /* 2C */
5489 PVOID KdVersionBlock
; /* 34 */
5490 PUSHORT IDT
; /* 38 */
5491 PUSHORT GDT
; /* 3C */
5492 struct _KTSS
*TSS
; /* 40 */
5493 USHORT MajorVersion
; /* 44 */
5494 USHORT MinorVersion
; /* 46 */
5495 KAFFINITY SetMember
; /* 48 */
5496 ULONG StallScaleFactor
; /* 4C */
5497 UCHAR SpareUnused
; /* 50 */
5498 UCHAR Number
; /* 51 */
5499 } KPCR
, *PKPCR
; /* 54 */
5501 #define KeGetPcr() PCR
5506 KeGetCurrentProcessorNumber(VOID
)
5509 __asm__
__volatile__ (
5512 : "i" (FIELD_OFFSET(KPCR
, Number
))
5517 #elif defined(_MIPS_)
5519 #error MIPS Headers are totally incorrect
5522 // Used to contain PFNs and PFN counts
5524 typedef ULONG PFN_COUNT
;
5525 typedef ULONG PFN_NUMBER
, *PPFN_NUMBER
;
5526 typedef LONG SPFN_NUMBER
, *PSPFN_NUMBER
;
5528 #define PASSIVE_LEVEL 0
5530 #define DISPATCH_LEVEL 2
5531 #define PROFILE_LEVEL 27
5532 #define IPI_LEVEL 29
5533 #define HIGH_LEVEL 31
5535 typedef struct _KPCR
{
5536 struct _KPRCB
*Prcb
; /* 20 */
5537 KIRQL Irql
; /* 24 */
5542 #define KeGetPcr() PCR
5544 typedef struct _KFLOATING_SAVE
{
5545 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
5550 KeGetCurrentProcessorNumber(VOID
)
5555 #elif defined(_M_ARM)
5558 // NT-ARM is not documented, need DDK-ARM
5563 #error Unknown architecture
5566 #define EFLAG_SIGN 0x8000
5567 #define EFLAG_ZERO 0x4000
5568 #define EFLAG_SELECT (EFLAG_SIGN | EFLAG_ZERO)
5570 #define RESULT_NEGATIVE ((EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
5571 #define RESULT_ZERO ((~EFLAG_SIGN & EFLAG_ZERO) & EFLAG_SELECT)
5572 #define RESULT_POSITIVE ((~EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
5574 typedef enum _INTERLOCKED_RESULT
{
5575 ResultNegative
= RESULT_NEGATIVE
,
5576 ResultZero
= RESULT_ZERO
,
5577 ResultPositive
= RESULT_POSITIVE
5578 } INTERLOCKED_RESULT
;
5581 (NTAPI
*PciPin2Line
)(
5582 IN
struct _BUS_HANDLER
*BusHandler
,
5583 IN
struct _BUS_HANDLER
*RootHandler
,
5584 IN PCI_SLOT_NUMBER SlotNumber
,
5585 IN PPCI_COMMON_CONFIG PciData
5589 (NTAPI
*PciLine2Pin
)(
5590 IN
struct _BUS_HANDLER
*BusHandler
,
5591 IN
struct _BUS_HANDLER
*RootHandler
,
5592 IN PCI_SLOT_NUMBER SlotNumber
,
5593 IN PPCI_COMMON_CONFIG PciNewData
,
5594 IN PPCI_COMMON_CONFIG PciOldData
5598 (NTAPI
*PciReadWriteConfig
)(
5599 IN
struct _BUS_HANDLER
*BusHandler
,
5600 IN PCI_SLOT_NUMBER Slot
,
5606 #define PCI_DATA_TAG TAG('P', 'C', 'I', ' ')
5607 #define PCI_DATA_VERSION 1
5609 typedef struct _PCIBUSDATA
5613 PciReadWriteConfig ReadConfig
;
5614 PciReadWriteConfig WriteConfig
;
5615 PciPin2Line Pin2Line
;
5616 PciLine2Pin Line2Pin
;
5617 PCI_SLOT_NUMBER ParentSlot
;
5619 } PCIBUSDATA
, *PPCIBUSDATA
;
5622 /** SPINLOCK FUNCTIONS ********************************************************/
5627 KeTryToAcquireSpinLockAtDpcLevel(
5628 IN OUT PKSPIN_LOCK SpinLock
5635 IN PKSPIN_LOCK SpinLock
5643 KeInitializeSpinLock(
5644 IN PKSPIN_LOCK SpinLock
);
5650 IN PKSPIN_LOCK SpinLock
);
5656 IN PKSPIN_LOCK SpinLock
,
5662 KefAcquireSpinLockAtDpcLevel(
5663 IN PKSPIN_LOCK SpinLock
);
5668 KefReleaseSpinLockFromDpcLevel(
5669 IN PKSPIN_LOCK SpinLock
);
5671 #define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock)
5672 #define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock)
5673 #define KeAcquireSpinLock(a,b) *(b) = KfAcquireSpinLock(a)
5674 #define KeReleaseSpinLock(a,b) KfReleaseSpinLock(a,b)
5676 #else // !defined (_X86_)
5681 KeInitializeSpinLock(
5682 PKSPIN_LOCK SpinLock
)
5690 IN PKSPIN_LOCK SpinLock
,
5695 KeAcquireSpinLockAtDpcLevel(
5696 IN PKSPIN_LOCK SpinLock
);
5700 KeReleaseSpinLockFromDpcLevel(
5701 IN PKSPIN_LOCK SpinLock
);
5705 KeAcquireSpinLockRaiseToDpc(
5706 IN PKSPIN_LOCK SpinLock
);
5708 #define KeAcquireSpinLock(SpinLock, OldIrql) \
5709 *(OldIrql) = KeAcquireSpinLockRaiseToDpc(SpinLock)
5711 #endif // !defined (_X86_)
5713 #define KeGetDcacheFillSize() 1L
5718 ** Utillity functions
5721 #define ARGUMENT_PRESENT(ArgumentPointer) \
5722 ((CHAR*)((ULONG_PTR)(ArgumentPointer)) != (CHAR*)NULL)
5729 #define BYTE_OFFSET(Va) \
5730 ((ULONG) ((ULONG_PTR) (Va) & (PAGE_SIZE - 1)))
5737 #define BYTES_TO_PAGES(Size) \
5738 ((ULONG) ((ULONG_PTR) (Size) >> PAGE_SHIFT) + (((ULONG) (Size) & (PAGE_SIZE - 1)) != 0))
5745 #define PAGE_ALIGN(Va) \
5746 ((PVOID) ((ULONG_PTR)(Va) & ~(PAGE_SIZE - 1)))
5751 * IN ULONG_PTR Size)
5753 #define ROUND_TO_PAGES(Size) \
5754 ((ULONG_PTR) (((ULONG_PTR) Size + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1)))
5758 #define ASSERT(exp) \
5760 RtlAssert( #exp, __FILE__, __LINE__, NULL ), FALSE : TRUE)
5762 #define ASSERTMSG(msg, exp) \
5764 RtlAssert( #exp, __FILE__, __LINE__, msg ), FALSE : TRUE)
5766 #define RTL_SOFT_ASSERT(exp) \
5767 (VOID)((!(_exp)) ? \
5768 DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n", __FILE__, __LINE__, #exp), FALSE : TRUE)
5770 #define RTL_SOFT_ASSERTMSG(msg, exp) \
5772 DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n Message: %s\n", __FILE__, __LINE__, #exp, (msg)), FALSE : TRUE)
5774 #define RTL_VERIFY(exp) ASSERT(exp)
5775 #define RTL_VERIFYMSG(msg, exp) ASSERT(msg, exp)
5777 #define RTL_SOFT_VERIFY(exp) RTL_SOFT_ASSERT(exp)
5778 #define RTL_SOFT_VERIFYMSG(msg, exp) RTL_SOFT_ASSERTMSG(msg, exp)
5782 #define ASSERT(exp) ((VOID) 0)
5783 #define ASSERTMSG(msg, exp) ((VOID) 0)
5785 #define RTL_SOFT_ASSERT(exp) ((VOID) 0)
5786 #define RTL_SOFT_ASSERTMSG(msg, exp) ((VOID) 0)
5788 #define RTL_VERIFY(exp) ((exp) ? TRUE : FALSE)
5789 #define RTL_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE)
5791 #define RTL_SOFT_VERIFY(exp) ((exp) ? TRUE : FALSE)
5792 #define RTL_SOFT_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE)
5796 /* HACK HACK HACK - GCC (or perhaps LD) is messing this up */
5797 #if defined(_NTSYSTEM_) || defined(__GNUC__)
5798 #define NLS_MB_CODE_PAGE_TAG NlsMbCodePageTag
5799 #define NLS_MB_OEM_CODE_PAGE_TAG NlsMbOemCodePageTag
5801 #define NLS_MB_CODE_PAGE_TAG (*NlsMbCodePageTag)
5802 #define NLS_MB_OEM_CODE_PAGE_TAG (*NlsMbOemCodePageTag)
5803 #endif /* _NT_SYSTEM */
5805 extern BOOLEAN NTSYSAPI NLS_MB_CODE_PAGE_TAG
;
5806 extern BOOLEAN NTSYSAPI NLS_MB_OEM_CODE_PAGE_TAG
;
5809 ** Driver support routines
5812 /** Runtime library routines **/
5814 static __inline VOID
5816 IN PLIST_ENTRY ListHead
)
5818 ListHead
->Flink
= ListHead
->Blink
= ListHead
;
5821 static __inline VOID
5823 IN PLIST_ENTRY ListHead
,
5824 IN PLIST_ENTRY Entry
)
5826 PLIST_ENTRY OldFlink
;
5827 OldFlink
= ListHead
->Flink
;
5828 Entry
->Flink
= OldFlink
;
5829 Entry
->Blink
= ListHead
;
5830 OldFlink
->Blink
= Entry
;
5831 ListHead
->Flink
= Entry
;
5834 static __inline VOID
5836 IN PLIST_ENTRY ListHead
,
5837 IN PLIST_ENTRY Entry
)
5839 PLIST_ENTRY OldBlink
;
5840 OldBlink
= ListHead
->Blink
;
5841 Entry
->Flink
= ListHead
;
5842 Entry
->Blink
= OldBlink
;
5843 OldBlink
->Flink
= Entry
;
5844 ListHead
->Blink
= Entry
;
5850 * IN PLIST_ENTRY ListHead)
5852 #define IsListEmpty(_ListHead) \
5853 ((_ListHead)->Flink == (_ListHead))
5856 * PSINGLE_LIST_ENTRY
5858 * IN PSINGLE_LIST_ENTRY ListHead)
5860 #define PopEntryList(ListHead) \
5863 PSINGLE_LIST_ENTRY _FirstEntry; \
5864 _FirstEntry = (ListHead)->Next; \
5865 if (_FirstEntry != NULL) \
5866 (ListHead)->Next = _FirstEntry->Next; \
5872 * IN PSINGLE_LIST_ENTRY ListHead,
5873 * IN PSINGLE_LIST_ENTRY Entry)
5875 #define PushEntryList(_ListHead, _Entry) \
5876 (_Entry)->Next = (_ListHead)->Next; \
5877 (_ListHead)->Next = (_Entry); \
5879 static __inline BOOLEAN
5881 IN PLIST_ENTRY Entry
)
5883 PLIST_ENTRY OldFlink
;
5884 PLIST_ENTRY OldBlink
;
5886 OldFlink
= Entry
->Flink
;
5887 OldBlink
= Entry
->Blink
;
5888 OldFlink
->Blink
= OldBlink
;
5889 OldBlink
->Flink
= OldFlink
;
5890 return (OldFlink
== OldBlink
);
5893 static __inline PLIST_ENTRY
5895 IN PLIST_ENTRY ListHead
)
5900 Entry
= ListHead
->Flink
;
5901 Flink
= Entry
->Flink
;
5902 ListHead
->Flink
= Flink
;
5903 Flink
->Blink
= ListHead
;
5907 static __inline PLIST_ENTRY
5909 IN PLIST_ENTRY ListHead
)
5914 Entry
= ListHead
->Blink
;
5915 Blink
= Entry
->Blink
;
5916 ListHead
->Blink
= Blink
;
5917 Blink
->Flink
= ListHead
;
5926 IN ULONG Base OPTIONAL
,
5927 IN OUT PULONG Value
);
5935 BOOLEAN CaseInSensitive
);
5940 RtlConvertLongToLuid(
5946 RtlConvertUlongToLuid(
5953 IN VOID UNALIGNED
*Destination
,
5954 IN CONST VOID UNALIGNED
*Source
,
5961 IN OUT PSTRING DestinationString
,
5962 IN PSTRING SourceString OPTIONAL
);
5970 IN BOOLEAN CaseInSensitive
);
5972 #if (defined(_M_AMD64) || defined(_M_IA64)) && !defined(_REALLY_GET_CALLERS_CALLER_)
5973 #define RtlGetCallersAddress(CallersAddress, CallersCaller) \
5974 *CallersAddress = (PVOID)_ReturnAddress(); \
5975 *CallersCaller = NULL;
5980 RtlGetCallersAddress(
5981 OUT PVOID
*CallersAddress
,
5982 OUT PVOID
*CallersCaller
);
5989 IN OUT PRTL_OSVERSIONINFOW lpVersionInformation
);
5995 IN OUT PACCESS_MASK AccessMask
,
5996 IN PGENERIC_MAPPING GenericMapping
);
6001 RtlPrefixUnicodeString(
6002 IN PCUNICODE_STRING String1
,
6003 IN PCUNICODE_STRING String2
,
6004 IN BOOLEAN CaseInSensitive
);
6009 RtlUpcaseUnicodeString(
6010 IN OUT PUNICODE_STRING DestinationString OPTIONAL
,
6011 IN PCUNICODE_STRING SourceString
,
6012 IN BOOLEAN AllocateDestinationString
);
6024 IN OUT PSTRING DestinationString
,
6025 IN PSTRING SourceString
);
6030 RtlVerifyVersionInfo(
6031 IN PRTL_OSVERSIONINFOEXW VersionInfo
,
6033 IN ULONGLONG ConditionMask
);
6038 RtlVolumeDeviceToDosName(
6039 IN PVOID VolumeDeviceObject
,
6040 OUT PUNICODE_STRING DosName
);
6053 KeAreAllApcsDisabled(
6057 /* Guarded Mutex routines */
6062 KeAcquireGuardedMutex(
6063 IN OUT PKGUARDED_MUTEX GuardedMutex
6069 KeAcquireGuardedMutexUnsafe(
6070 IN OUT PKGUARDED_MUTEX GuardedMutex
6076 KeEnterGuardedRegion(
6083 KeLeaveGuardedRegion(
6090 KeInitializeGuardedMutex(
6091 OUT PKGUARDED_MUTEX GuardedMutex
6097 KeReleaseGuardedMutexUnsafe(
6098 IN OUT PKGUARDED_MUTEX GuardedMutex
6104 KeReleaseGuardedMutex(
6105 IN OUT PKGUARDED_MUTEX GuardedMutex
6111 KeTryToAcquireGuardedMutex(
6112 IN OUT PKGUARDED_MUTEX GuardedMutex
6116 #define ExInitializeFastMutex(_FastMutex) \
6118 (_FastMutex)->Count = FM_LOCK_BIT; \
6119 (_FastMutex)->Owner = NULL; \
6120 (_FastMutex)->Contention = 0; \
6121 KeInitializeEvent(&(_FastMutex)->Gate, SynchronizationEvent, FALSE); \
6132 /******************************************************************************
6134 ******************************************************************************/
6136 typedef struct _ZONE_SEGMENT_HEADER
{
6137 SINGLE_LIST_ENTRY SegmentList
;
6139 } ZONE_SEGMENT_HEADER
, *PZONE_SEGMENT_HEADER
;
6141 typedef struct _ZONE_HEADER
{
6142 SINGLE_LIST_ENTRY FreeList
;
6143 SINGLE_LIST_ENTRY SegmentList
;
6145 ULONG TotalSegmentSize
;
6146 } ZONE_HEADER
, *PZONE_HEADER
;
6148 #define PROTECTED_POOL 0x80000000
6150 /******************************************************************************
6151 * Executive Functions *
6152 ******************************************************************************/
6158 IN PZONE_HEADER Zone
,
6160 IN ULONG SegmentSize
);
6162 static __inline PVOID
6164 IN PZONE_HEADER Zone
)
6166 if (Zone
->FreeList
.Next
)
6167 Zone
->FreeList
.Next
= Zone
->FreeList
.Next
->Next
;
6168 return (PVOID
) Zone
->FreeList
.Next
;
6171 static __inline PVOID
6173 IN PZONE_HEADER Zone
,
6176 ((PSINGLE_LIST_ENTRY
) Block
)->Next
= Zone
->FreeList
.Next
;
6177 Zone
->FreeList
.Next
= ((PSINGLE_LIST_ENTRY
) Block
);
6178 return ((PSINGLE_LIST_ENTRY
) Block
)->Next
;
6185 IN PZONE_HEADER Zone
,
6187 IN PVOID InitialSegment
,
6188 IN ULONG InitialSegmentSize
);
6192 * ExInterlockedAllocateFromZone(
6193 * IN PZONE_HEADER Zone,
6194 * IN PKSPIN_LOCK Lock)
6196 #define ExInterlockedAllocateFromZone(Zone, Lock) \
6197 ((PVOID) ExInterlockedPopEntryList(&Zone->FreeList, Lock))
6202 ExInterlockedExtendZone(
6203 IN PZONE_HEADER Zone
,
6205 IN ULONG SegmentSize
,
6206 IN PKSPIN_LOCK Lock
);
6209 * ExInterlockedFreeToZone(
6210 * IN PZONE_HEADER Zone,
6212 * IN PKSPIN_LOCK Lock);
6214 #define ExInterlockedFreeToZone(Zone, Block, Lock) \
6215 ExInterlockedPushEntryList(&(Zone)->FreeList, (PSINGLE_LIST_ENTRY)(Block), Lock)
6219 * InitializeSListHead(
6220 * IN PSLIST_HEADER SListHead)
6222 #define InitializeSListHead(_SListHead) \
6223 (_SListHead)->Alignment = 0
6225 #define ExInitializeSListHead InitializeSListHead
6230 * IN PZONE_HEADER Zone)
6232 #define ExIsFullZone(Zone) \
6233 ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL)
6236 * ExIsObjectInFirstZoneSegment(
6237 * IN PZONE_HEADER Zone,
6240 #define ExIsObjectInFirstZoneSegment(Zone,Object) \
6241 ((BOOLEAN)( ((PUCHAR)(Object) >= (PUCHAR)(Zone)->SegmentList.Next) && \
6242 ((PUCHAR)(Object) < (PUCHAR)(Zone)->SegmentList.Next + \
6243 (Zone)->TotalSegmentSize)) )
6249 ExRaiseAccessViolation(
6256 ExRaiseDatatypeMisalignment(
6265 #define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite
6266 #define ExAcquireResourceShared ExAcquireResourceSharedLite
6267 #define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite
6268 #define ExDeleteResource ExDeleteResourceLite
6269 #define ExInitializeResource ExInitializeResourceLite
6270 #define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite
6271 #define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite
6272 #define ExIsResourceAcquired ExIsResourceAcquiredSharedLite
6273 #define ExReleaseResourceForThread ExReleaseResourceForThreadLite
6278 #define PAGED_CODE() { \
6279 if (KeGetCurrentIrql() > APC_LEVEL) { \
6280 KdPrint( ("NTDDK: Pageable code called at IRQL > APC_LEVEL (%d)\n", KeGetCurrentIrql() )); \
6287 #define PAGED_CODE()
6295 IN CONST VOID
*Address
,
6297 IN ULONG Alignment
);
6305 IN ULONG Alignment
);
6309 /** Configuration manager routines **/
6315 IN PEX_CALLBACK_FUNCTION Function
,
6317 IN OUT PLARGE_INTEGER Cookie
);
6322 CmUnRegisterCallback(
6323 IN LARGE_INTEGER Cookie
);
6327 /** Filesystem runtime library routines **/
6332 FsRtlIsTotalDeviceFailure(
6333 IN NTSTATUS Status
);
6337 /** Hardware abstraction layer routines **/
6343 IN ULONG Frequency
);
6349 IN PDEVICE_OBJECT DeviceObject
,
6350 IN ULONG SectorSize
,
6351 IN ULONG MBRTypeIdentifier
,
6357 PADAPTER_OBJECT AdapterObject
6361 /** Io access routines **/
6363 #if !defined(_M_AMD64)
6367 READ_PORT_BUFFER_UCHAR(
6375 READ_PORT_BUFFER_ULONG(
6383 READ_PORT_BUFFER_USHORT(
6409 READ_REGISTER_BUFFER_UCHAR(
6417 READ_REGISTER_BUFFER_ULONG(
6425 READ_REGISTER_BUFFER_USHORT(
6426 IN PUSHORT Register
,
6433 READ_REGISTER_UCHAR(
6434 IN PUCHAR Register
);
6439 READ_REGISTER_ULONG(
6440 IN PULONG Register
);
6445 READ_REGISTER_USHORT(
6446 IN PUSHORT Register
);
6451 WRITE_PORT_BUFFER_UCHAR(
6459 WRITE_PORT_BUFFER_ULONG(
6467 WRITE_PORT_BUFFER_USHORT(
6496 WRITE_REGISTER_BUFFER_UCHAR(
6504 WRITE_REGISTER_BUFFER_ULONG(
6512 WRITE_REGISTER_BUFFER_USHORT(
6513 IN PUSHORT Register
,
6520 WRITE_REGISTER_UCHAR(
6527 WRITE_REGISTER_ULONG(
6534 WRITE_REGISTER_USHORT(
6535 IN PUSHORT Register
,
6542 READ_PORT_BUFFER_UCHAR(
6547 __inbytestring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
6552 READ_PORT_BUFFER_ULONG(
6557 __indwordstring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
6562 READ_PORT_BUFFER_USHORT(
6567 __inwordstring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
6575 return __inbyte((USHORT
)(ULONG_PTR
)Port
);
6583 return __indword((USHORT
)(ULONG_PTR
)Port
);
6591 return __inword((USHORT
)(ULONG_PTR
)Port
);
6596 READ_REGISTER_BUFFER_UCHAR(
6601 __movsb(Register
, Buffer
, Count
);
6606 READ_REGISTER_BUFFER_ULONG(
6611 __movsd(Register
, Buffer
, Count
);
6616 READ_REGISTER_BUFFER_USHORT(
6617 IN PUSHORT Register
,
6621 __movsw(Register
, Buffer
, Count
);
6626 READ_REGISTER_UCHAR(
6634 READ_REGISTER_ULONG(
6642 READ_REGISTER_USHORT(
6643 IN PUSHORT Register
)
6650 WRITE_PORT_BUFFER_UCHAR(
6655 __outbytestring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
6660 WRITE_PORT_BUFFER_ULONG(
6665 __outdwordstring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
6670 WRITE_PORT_BUFFER_USHORT(
6675 __outwordstring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
6684 __outbyte((USHORT
)(ULONG_PTR
)Port
, Value
);
6693 __outdword((USHORT
)(ULONG_PTR
)Port
, Value
);
6702 __outword((USHORT
)(ULONG_PTR
)Port
, Value
);
6707 WRITE_REGISTER_BUFFER_UCHAR(
6713 __movsb(Register
, Buffer
, Count
);
6714 InterlockedOr(&Synch
, 1);
6719 WRITE_REGISTER_BUFFER_ULONG(
6725 __movsd(Register
, Buffer
, Count
);
6726 InterlockedOr(&Synch
, 1);
6731 WRITE_REGISTER_BUFFER_USHORT(
6732 IN PUSHORT Register
,
6737 __movsw(Register
, Buffer
, Count
);
6738 InterlockedOr(&Synch
, 1);
6743 WRITE_REGISTER_UCHAR(
6749 InterlockedOr(&Synch
, 1);
6754 WRITE_REGISTER_ULONG(
6760 InterlockedOr(&Synch
, 1);
6765 WRITE_REGISTER_USHORT(
6766 IN PUSHORT Register
,
6771 InterlockedOr(&Sync
, 1);
6776 /** I/O manager routines **/
6781 IoAcquireCancelSpinLock(
6787 IoAcquireRemoveLockEx(
6788 IN PIO_REMOVE_LOCK RemoveLock
,
6789 IN OPTIONAL PVOID Tag OPTIONAL
,
6792 IN ULONG RemlockSize
);
6796 * IoAcquireRemoveLock(
6797 * IN PIO_REMOVE_LOCK RemoveLock,
6798 * IN OPTIONAL PVOID Tag)
6800 #define IoAcquireRemoveLock(_RemoveLock, \
6802 IoAcquireRemoveLockEx(_RemoveLock, _Tag, __FILE__, __LINE__, sizeof(IO_REMOVE_LOCK))
6806 * IoAdjustPagingPathCount(
6808 * IN BOOLEAN Increment)
6810 #define IoAdjustPagingPathCount(_Count, \
6815 InterlockedIncrement(_Count); \
6819 InterlockedDecrement(_Count); \
6823 #ifndef DMA_MACROS_DEFINED
6827 IoAllocateAdapterChannel(
6828 IN PADAPTER_OBJECT AdapterObject
,
6829 IN PDEVICE_OBJECT DeviceObject
,
6830 IN ULONG NumberOfMapRegisters
,
6831 IN PDRIVER_CONTROL ExecutionRoutine
,
6838 IoAllocateController(
6839 IN PCONTROLLER_OBJECT ControllerObject
,
6840 IN PDEVICE_OBJECT DeviceObject
,
6841 IN PDRIVER_CONTROL ExecutionRoutine
,
6847 IoAllocateDriverObjectExtension(
6848 IN PDRIVER_OBJECT DriverObject
,
6849 IN PVOID ClientIdentificationAddress
,
6850 IN ULONG DriverObjectExtensionSize
,
6851 OUT PVOID
*DriverObjectExtension
);
6856 IoAllocateErrorLogEntry(
6858 IN UCHAR EntrySize
);
6865 IN BOOLEAN ChargeQuota
);
6871 IN PVOID VirtualAddress
,
6873 IN BOOLEAN SecondaryBuffer
,
6874 IN BOOLEAN ChargeQuota
,
6875 IN OUT PIRP Irp OPTIONAL
);
6881 IN PDEVICE_OBJECT DeviceObject
);
6884 * VOID IoAssignArcName(
6885 * IN PUNICODE_STRING ArcName,
6886 * IN PUNICODE_STRING DeviceName);
6888 #define IoAssignArcName(_ArcName, _DeviceName) ( \
6889 IoCreateSymbolicLink((_ArcName), (_DeviceName)))
6895 IN PDEVICE_OBJECT SourceDevice
,
6896 IN PUNICODE_STRING TargetDevice
,
6897 OUT PDEVICE_OBJECT
*AttachedDevice
);
6902 IoAttachDeviceToDeviceStack(
6903 IN PDEVICE_OBJECT SourceDevice
,
6904 IN PDEVICE_OBJECT TargetDevice
);
6909 IoBuildAsynchronousFsdRequest(
6910 IN ULONG MajorFunction
,
6911 IN PDEVICE_OBJECT DeviceObject
,
6912 IN OUT PVOID Buffer OPTIONAL
,
6913 IN ULONG Length OPTIONAL
,
6914 IN PLARGE_INTEGER StartingOffset OPTIONAL
,
6915 IN PIO_STATUS_BLOCK IoStatusBlock OPTIONAL
);
6920 IoBuildDeviceIoControlRequest(
6921 IN ULONG IoControlCode
,
6922 IN PDEVICE_OBJECT DeviceObject
,
6923 IN PVOID InputBuffer OPTIONAL
,
6924 IN ULONG InputBufferLength
,
6925 OUT PVOID OutputBuffer OPTIONAL
,
6926 IN ULONG OutputBufferLength
,
6927 IN BOOLEAN InternalDeviceIoControl
,
6929 OUT PIO_STATUS_BLOCK IoStatusBlock
);
6936 IN OUT PMDL TargetMdl
,
6937 IN PVOID VirtualAddress
,
6943 IoBuildSynchronousFsdRequest(
6944 IN ULONG MajorFunction
,
6945 IN PDEVICE_OBJECT DeviceObject
,
6946 IN OUT PVOID Buffer OPTIONAL
,
6947 IN ULONG Length OPTIONAL
,
6948 IN PLARGE_INTEGER StartingOffset OPTIONAL
,
6950 OUT PIO_STATUS_BLOCK IoStatusBlock
);
6956 IN PDEVICE_OBJECT DeviceObject
,
6962 * IN PDEVICE_OBJECT DeviceObject,
6965 #define IoCallDriver IofCallDriver
6971 IN PDEVICE_OBJECT DeviceObject
,
6972 IN PFILE_OBJECT FileObject
);
6984 IN ACCESS_MASK DesiredAccess
,
6985 IN ULONG DesiredShareAccess
,
6986 IN OUT PFILE_OBJECT FileObject
,
6987 IN OUT PSHARE_ACCESS ShareAccess
,
6995 IN CCHAR PriorityBoost
);
6999 * IoCompleteRequest(
7001 * IN CCHAR PriorityBoost)
7003 #define IoCompleteRequest IofCompleteRequest
7009 OUT PKINTERRUPT
*InterruptObject
,
7010 IN PKSERVICE_ROUTINE ServiceRoutine
,
7011 IN PVOID ServiceContext
,
7012 IN PKSPIN_LOCK SpinLock OPTIONAL
,
7015 IN KIRQL SynchronizeIrql
,
7016 IN KINTERRUPT_MODE InterruptMode
,
7017 IN BOOLEAN ShareVector
,
7018 IN KAFFINITY ProcessorEnableMask
,
7019 IN BOOLEAN FloatingSave
);
7022 * PIO_STACK_LOCATION
7023 * IoGetCurrentIrpStackLocation(
7026 #define IoGetCurrentIrpStackLocation(_Irp) \
7027 ((_Irp)->Tail.Overlay.CurrentStackLocation)
7030 * PIO_STACK_LOCATION
7031 * IoGetNextIrpStackLocation(
7034 #define IoGetNextIrpStackLocation(_Irp) \
7035 ((_Irp)->Tail.Overlay.CurrentStackLocation - 1)
7039 * IoCopyCurrentIrpStackLocationToNext(
7042 #define IoCopyCurrentIrpStackLocationToNext(_Irp) \
7044 PIO_STACK_LOCATION _IrpSp; \
7045 PIO_STACK_LOCATION _NextIrpSp; \
7046 _IrpSp = IoGetCurrentIrpStackLocation(_Irp); \
7047 _NextIrpSp = IoGetNextIrpStackLocation(_Irp); \
7048 RtlCopyMemory(_NextIrpSp, _IrpSp, \
7049 FIELD_OFFSET(IO_STACK_LOCATION, CompletionRoutine)); \
7050 _NextIrpSp->Control = 0; \
7063 IN PDRIVER_OBJECT DriverObject
,
7064 IN ULONG DeviceExtensionSize
,
7065 IN PUNICODE_STRING DeviceName OPTIONAL
,
7066 IN DEVICE_TYPE DeviceType
,
7067 IN ULONG DeviceCharacteristics
,
7068 IN BOOLEAN Exclusive
,
7069 OUT PDEVICE_OBJECT
*DeviceObject
);
7075 IN PDEVICE_OBJECT DeviceObject
,
7076 IN PCREATE_DISK Disk
);
7082 OUT PHANDLE FileHandle
,
7083 IN ACCESS_MASK DesiredAccess
,
7084 IN POBJECT_ATTRIBUTES ObjectAttributes
,
7085 OUT PIO_STATUS_BLOCK IoStatusBlock
,
7086 IN PLARGE_INTEGER AllocationSize OPTIONAL
,
7087 IN ULONG FileAttributes
,
7088 IN ULONG ShareAccess
,
7089 IN ULONG Disposition
,
7090 IN ULONG CreateOptions
,
7091 IN PVOID EaBuffer OPTIONAL
,
7093 IN CREATE_FILE_TYPE CreateFileType
,
7094 IN PVOID ExtraCreateParameters OPTIONAL
,
7100 IoCreateNotificationEvent(
7101 IN PUNICODE_STRING EventName
,
7102 OUT PHANDLE EventHandle
);
7107 IoCreateSymbolicLink(
7108 IN PUNICODE_STRING SymbolicLinkName
,
7109 IN PUNICODE_STRING DeviceName
);
7114 IoCreateSynchronizationEvent(
7115 IN PUNICODE_STRING EventName
,
7116 OUT PHANDLE EventHandle
);
7121 IoCreateUnprotectedSymbolicLink(
7122 IN PUNICODE_STRING SymbolicLinkName
,
7123 IN PUNICODE_STRING DeviceName
);
7130 IN PIO_CSQ_INSERT_IRP CsqInsertIrp
,
7131 IN PIO_CSQ_REMOVE_IRP CsqRemoveIrp
,
7132 IN PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp
,
7133 IN PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock
,
7134 IN PIO_CSQ_RELEASE_LOCK CsqReleaseLock
,
7135 IN PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp
);
7143 IN PIO_CSQ_IRP_CONTEXT Context
);
7150 IN PIO_CSQ_IRP_CONTEXT Context
);
7157 IN PVOID PeekContext
);
7163 IN PCONTROLLER_OBJECT ControllerObject
);
7169 IN PDEVICE_OBJECT DeviceObject
);
7174 IoDeleteSymbolicLink(
7175 IN PUNICODE_STRING SymbolicLinkName
);
7179 * IoDeassignArcName(
7180 * IN PUNICODE_STRING ArcName)
7182 #define IoDeassignArcName IoDeleteSymbolicLink
7188 IN OUT PDEVICE_OBJECT TargetDevice
);
7193 IoDisconnectInterrupt(
7194 IN PKINTERRUPT InterruptObject
);
7199 IoForwardIrpSynchronously(
7200 IN PDEVICE_OBJECT DeviceObject
,
7203 #define IoForwardAndCatchIrp IoForwardIrpSynchronously
7209 IN PCONTROLLER_OBJECT ControllerObject
);
7214 IoFreeErrorLogEntry(
7233 IN PIO_WORKITEM pIOWorkItem
);
7238 IoGetAttachedDevice(
7239 IN PDEVICE_OBJECT DeviceObject
);
7244 IoGetAttachedDeviceReference(
7245 IN PDEVICE_OBJECT DeviceObject
);
7250 IoGetBootDiskInformation(
7251 IN OUT PBOOTDISK_INFORMATION BootDiskInformation
,
7255 PCONFIGURATION_INFORMATION
7257 IoGetConfigurationInformation(
7263 IoGetCurrentProcess(
7269 IoGetDeviceInterfaceAlias(
7270 IN PUNICODE_STRING SymbolicLinkName
,
7271 IN CONST GUID
*AliasInterfaceClassGuid
,
7272 OUT PUNICODE_STRING AliasSymbolicLinkName
);
7274 #define DEVICE_INTERFACE_INCLUDE_NONACTIVE 0x00000001
7279 IoGetDeviceInterfaces(
7280 IN CONST GUID
*InterfaceClassGuid
,
7281 IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL
,
7283 OUT PWSTR
*SymbolicLinkList
);
7288 IoGetDeviceObjectPointer(
7289 IN PUNICODE_STRING ObjectName
,
7290 IN ACCESS_MASK DesiredAccess
,
7291 OUT PFILE_OBJECT
*FileObject
,
7292 OUT PDEVICE_OBJECT
*DeviceObject
);
7297 IoGetDeviceProperty(
7298 IN PDEVICE_OBJECT DeviceObject
,
7299 IN DEVICE_REGISTRY_PROPERTY DeviceProperty
,
7300 IN ULONG BufferLength
,
7301 OUT PVOID PropertyBuffer
,
7302 OUT PULONG ResultLength
);
7307 IoGetDeviceToVerify(
7308 IN PETHREAD Thread
);
7314 IN PDEVICE_OBJECT PhysicalDeviceObject
,
7315 IN PDEVICE_DESCRIPTION DeviceDescription
,
7316 IN OUT PULONG NumberOfMapRegisters
);
7321 IoGetDriverObjectExtension(
7322 IN PDRIVER_OBJECT DriverObject
,
7323 IN PVOID ClientIdentificationAddress
);
7328 IoGetFileObjectGenericMapping(
7333 * IoGetFunctionCodeFromCtlCode(
7334 * IN ULONG ControlCode)
7336 #define IoGetFunctionCodeFromCtlCode(_ControlCode) \
7337 (((_ControlCode) >> 2) & 0x00000FFF)
7348 IoGetRelatedDeviceObject(
7349 IN PFILE_OBJECT FileObject
);
7355 OUT PULONG_PTR LowLimit
,
7356 OUT PULONG_PTR HighLimit
);
7360 IoGetRemainingStackSize(
7364 ULONG_PTR End
, Begin
;
7367 IoGetStackLimits(&Begin
, &End
);
7368 Result
= (ULONG_PTR
)(&End
) - Begin
;
7377 IN PKDEFERRED_ROUTINE DeferredRoutine
,
7378 IN PVOID DeferredContext
);
7382 * IoInitializeDpcRequest(
7383 * IN PDEVICE_OBJECT DeviceObject,
7384 * IN PIO_DPC_ROUTINE DpcRoutine)
7386 #define IoInitializeDpcRequest(_DeviceObject, \
7388 KeInitializeDpc(&(_DeviceObject)->Dpc, \
7389 (PKDEFERRED_ROUTINE) (_DpcRoutine), \
7397 IN USHORT PacketSize
,
7398 IN CCHAR StackSize
);
7403 IoInitializeRemoveLockEx(
7404 IN PIO_REMOVE_LOCK Lock
,
7405 IN ULONG AllocateTag
,
7406 IN ULONG MaxLockedMinutes
,
7407 IN ULONG HighWatermark
,
7408 IN ULONG RemlockSize
);
7411 * IoInitializeRemoveLock(
7412 * IN PIO_REMOVE_LOCK Lock,
7413 * IN ULONG AllocateTag,
7414 * IN ULONG MaxLockedMinutes,
7415 * IN ULONG HighWatermark)
7417 #define IoInitializeRemoveLock( \
7418 Lock, AllocateTag, MaxLockedMinutes, HighWatermark) \
7419 IoInitializeRemoveLockEx(Lock, AllocateTag, MaxLockedMinutes, \
7420 HighWatermark, sizeof(IO_REMOVE_LOCK))
7426 IN PDEVICE_OBJECT DeviceObject
,
7427 IN PIO_TIMER_ROUTINE TimerRoutine
,
7433 IoInvalidateDeviceRelations(
7434 IN PDEVICE_OBJECT DeviceObject
,
7435 IN DEVICE_RELATION_TYPE Type
);
7440 IoInvalidateDeviceState(
7441 IN PDEVICE_OBJECT PhysicalDeviceObject
);
7447 IN PIRP Irp OPTIONAL
);
7451 * IoIsErrorUserInduced(
7452 * IN NTSTATUS Status);
7454 #define IoIsErrorUserInduced(Status) \
7455 ((BOOLEAN)(((Status) == STATUS_DEVICE_NOT_READY) || \
7456 ((Status) == STATUS_IO_TIMEOUT) || \
7457 ((Status) == STATUS_MEDIA_WRITE_PROTECTED) || \
7458 ((Status) == STATUS_NO_MEDIA_IN_DEVICE) || \
7459 ((Status) == STATUS_VERIFY_REQUIRED) || \
7460 ((Status) == STATUS_UNRECOGNIZED_MEDIA) || \
7461 ((Status) == STATUS_WRONG_VOLUME)))
7466 IoIsWdmVersionAvailable(
7467 IN UCHAR MajorVersion
,
7468 IN UCHAR MinorVersion
);
7473 IoMakeAssociatedIrp(
7475 IN CCHAR StackSize
);
7482 #define IoMarkIrpPending(_Irp) \
7483 (IoGetCurrentIrpStackLocation(_Irp)->Control |= SL_PENDING_RETURNED)
7488 IoOpenDeviceInterfaceRegistryKey(
7489 IN PUNICODE_STRING SymbolicLinkName
,
7490 IN ACCESS_MASK DesiredAccess
,
7491 OUT PHANDLE DeviceInterfaceKey
);
7493 #define PLUGPLAY_REGKEY_DEVICE 1
7494 #define PLUGPLAY_REGKEY_DRIVER 2
7495 #define PLUGPLAY_REGKEY_CURRENT_HWPROFILE 4
7500 IoOpenDeviceRegistryKey(
7501 IN PDEVICE_OBJECT DeviceObject
,
7502 IN ULONG DevInstKeyType
,
7503 IN ACCESS_MASK DesiredAccess
,
7504 OUT PHANDLE DevInstRegKey
);
7509 IoQueryDeviceDescription(
7510 IN PINTERFACE_TYPE BusType OPTIONAL
,
7511 IN PULONG BusNumber OPTIONAL
,
7512 IN PCONFIGURATION_TYPE ControllerType OPTIONAL
,
7513 IN PULONG ControllerNumber OPTIONAL
,
7514 IN PCONFIGURATION_TYPE PeripheralType OPTIONAL
,
7515 IN PULONG PeripheralNumber OPTIONAL
,
7516 IN PIO_QUERY_DEVICE_ROUTINE CalloutRoutine
,
7523 IN PIO_WORKITEM pIOWorkItem
,
7524 IN PIO_WORKITEM_ROUTINE Routine
,
7525 IN WORK_QUEUE_TYPE QueueType
,
7533 IN PVPB Vpb OPTIONAL
,
7534 IN PDEVICE_OBJECT RealDeviceObject
);
7539 IoRaiseInformationalHardError(
7540 IN NTSTATUS ErrorStatus
,
7541 IN PUNICODE_STRING String OPTIONAL
,
7542 IN PKTHREAD Thread OPTIONAL
);
7547 IoReadDiskSignature(
7548 IN PDEVICE_OBJECT DeviceObject
,
7549 IN ULONG BytesPerSector
,
7550 OUT PDISK_SIGNATURE Signature
);
7555 IoReadPartitionTable(
7556 IN PDEVICE_OBJECT DeviceObject
,
7557 IN ULONG SectorSize
,
7558 IN BOOLEAN ReturnRecognizedPartitions
,
7559 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
7564 IoReadPartitionTableEx(
7565 IN PDEVICE_OBJECT DeviceObject
,
7566 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
**PartitionBuffer
);
7571 IoRegisterBootDriverReinitialization(
7572 IN PDRIVER_OBJECT DriverObject
,
7573 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
7579 IoRegisterBootDriverReinitialization(
7580 IN PDRIVER_OBJECT DriverObject
,
7581 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
7587 IoRegisterDeviceInterface(
7588 IN PDEVICE_OBJECT PhysicalDeviceObject
,
7589 IN CONST GUID
*InterfaceClassGuid
,
7590 IN PUNICODE_STRING ReferenceString OPTIONAL
,
7591 OUT PUNICODE_STRING SymbolicLinkName
);
7596 IoRegisterDriverReinitialization(
7597 IN PDRIVER_OBJECT DriverObject
,
7598 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
7604 IoRegisterPlugPlayNotification(
7605 IN IO_NOTIFICATION_EVENT_CATEGORY EventCategory
,
7606 IN ULONG EventCategoryFlags
,
7607 IN PVOID EventCategoryData OPTIONAL
,
7608 IN PDRIVER_OBJECT DriverObject
,
7609 IN PDRIVER_NOTIFICATION_CALLBACK_ROUTINE CallbackRoutine
,
7611 OUT PVOID
*NotificationEntry
);
7616 IoRegisterShutdownNotification(
7617 IN PDEVICE_OBJECT DeviceObject
);
7622 IoReleaseCancelSpinLock(
7628 IoReleaseRemoveLockAndWaitEx(
7629 IN PIO_REMOVE_LOCK RemoveLock
,
7631 IN ULONG RemlockSize
);
7636 IoReleaseRemoveLockEx(
7637 IN PIO_REMOVE_LOCK RemoveLock
,
7639 IN ULONG RemlockSize
);
7643 * IoReleaseRemoveLock(
7644 * IN PIO_REMOVE_LOCK RemoveLock,
7647 #define IoReleaseRemoveLock(_RemoveLock, \
7649 IoReleaseRemoveLockEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK))
7653 * IoReleaseRemoveLockAndWait(
7654 * IN PIO_REMOVE_LOCK RemoveLock,
7657 #define IoReleaseRemoveLockAndWait(_RemoveLock, \
7659 IoReleaseRemoveLockAndWaitEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK))
7664 IoRemoveShareAccess(
7665 IN PFILE_OBJECT FileObject
,
7666 IN OUT PSHARE_ACCESS ShareAccess
);
7671 IoReportDetectedDevice(
7672 IN PDRIVER_OBJECT DriverObject
,
7673 IN INTERFACE_TYPE LegacyBusType
,
7675 IN ULONG SlotNumber
,
7676 IN PCM_RESOURCE_LIST ResourceList
,
7677 IN PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements OPTIONAL
,
7678 IN BOOLEAN ResourceAssigned
,
7679 IN OUT PDEVICE_OBJECT
*DeviceObject
);
7684 IoReportResourceForDetection(
7685 IN PDRIVER_OBJECT DriverObject
,
7686 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
7687 IN ULONG DriverListSize OPTIONAL
,
7688 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
7689 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
7690 IN ULONG DeviceListSize OPTIONAL
,
7691 OUT PBOOLEAN ConflictDetected
);
7696 IoReportResourceUsage(
7697 IN PUNICODE_STRING DriverClassName OPTIONAL
,
7698 IN PDRIVER_OBJECT DriverObject
,
7699 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
7700 IN ULONG DriverListSize OPTIONAL
,
7701 IN PDEVICE_OBJECT DeviceObject
,
7702 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
7703 IN ULONG DeviceListSize OPTIONAL
,
7704 IN BOOLEAN OverrideConflict
,
7705 OUT PBOOLEAN ConflictDetected
);
7710 IoReportTargetDeviceChange(
7711 IN PDEVICE_OBJECT PhysicalDeviceObject
,
7712 IN PVOID NotificationStructure
);
7717 IoReportTargetDeviceChangeAsynchronous(
7718 IN PDEVICE_OBJECT PhysicalDeviceObject
,
7719 IN PVOID NotificationStructure
,
7720 IN PDEVICE_CHANGE_COMPLETE_CALLBACK Callback OPTIONAL
,
7721 IN PVOID Context OPTIONAL
);
7726 IoRequestDeviceEject(
7727 IN PDEVICE_OBJECT PhysicalDeviceObject
);
7732 * IN PDEVICE_OBJECT DeviceObject,
7734 * IN PVOID Context);
7736 #define IoRequestDpc(DeviceObject, Irp, Context)( \
7737 KeInsertQueueDpc(&(DeviceObject)->Dpc, (Irp), (Context)))
7744 IN NTSTATUS Status
);
7748 * IoSetCancelRoutine(
7750 * IN PDRIVER_CANCEL CancelRoutine)
7752 #define IoSetCancelRoutine(_Irp, \
7754 ((PDRIVER_CANCEL) InterlockedExchangePointer( \
7755 (PVOID *) &(_Irp)->CancelRoutine, (PVOID) (_CancelRoutine)))
7759 * IoSetCompletionRoutine(
7761 * IN PIO_COMPLETION_ROUTINE CompletionRoutine,
7763 * IN BOOLEAN InvokeOnSuccess,
7764 * IN BOOLEAN InvokeOnError,
7765 * IN BOOLEAN InvokeOnCancel)
7767 #define IoSetCompletionRoutine(_Irp, \
7768 _CompletionRoutine, \
7774 PIO_STACK_LOCATION _IrpSp; \
7775 ASSERT((_InvokeOnSuccess) || (_InvokeOnError) || (_InvokeOnCancel) ? \
7776 (_CompletionRoutine) != NULL : TRUE); \
7777 _IrpSp = IoGetNextIrpStackLocation(_Irp); \
7778 _IrpSp->CompletionRoutine = (PIO_COMPLETION_ROUTINE)(_CompletionRoutine); \
7779 _IrpSp->Context = (_Context); \
7780 _IrpSp->Control = 0; \
7781 if (_InvokeOnSuccess) _IrpSp->Control = SL_INVOKE_ON_SUCCESS; \
7782 if (_InvokeOnError) _IrpSp->Control |= SL_INVOKE_ON_ERROR; \
7783 if (_InvokeOnCancel) _IrpSp->Control |= SL_INVOKE_ON_CANCEL; \
7789 IoSetCompletionRoutineEx(
7790 IN PDEVICE_OBJECT DeviceObject
,
7792 IN PIO_COMPLETION_ROUTINE CompletionRoutine
,
7794 IN BOOLEAN InvokeOnSuccess
,
7795 IN BOOLEAN InvokeOnError
,
7796 IN BOOLEAN InvokeOnCancel
);
7801 IoSetDeviceInterfaceState(
7802 IN PUNICODE_STRING SymbolicLinkName
,
7808 IoSetHardErrorOrVerifyDevice(
7810 IN PDEVICE_OBJECT DeviceObject
);
7814 * IoSetNextIrpStackLocation(
7817 #define IoSetNextIrpStackLocation(_Irp) \
7819 (_Irp)->CurrentLocation--; \
7820 (_Irp)->Tail.Overlay.CurrentStackLocation--; \
7826 IoSetPartitionInformation(
7827 IN PDEVICE_OBJECT DeviceObject
,
7828 IN ULONG SectorSize
,
7829 IN ULONG PartitionNumber
,
7830 IN ULONG PartitionType
);
7835 IoSetPartitionInformationEx(
7836 IN PDEVICE_OBJECT DeviceObject
,
7837 IN ULONG PartitionNumber
,
7838 IN
struct _SET_PARTITION_INFORMATION_EX
*PartitionInfo
);
7844 IN ACCESS_MASK DesiredAccess
,
7845 IN ULONG DesiredShareAccess
,
7846 IN OUT PFILE_OBJECT FileObject
,
7847 OUT PSHARE_ACCESS ShareAccess
);
7852 IoSetStartIoAttributes(
7853 IN PDEVICE_OBJECT DeviceObject
,
7854 IN BOOLEAN DeferredStartIo
,
7855 IN BOOLEAN NonCancelable
);
7860 IoSetSystemPartition(
7861 IN PUNICODE_STRING VolumeNameString
);
7866 IoSetThreadHardErrorMode(
7867 IN BOOLEAN EnableHardErrors
);
7872 * IN CCHAR StackSize)
7874 #define IoSizeOfIrp(_StackSize) \
7875 ((USHORT) (sizeof(IRP) + ((_StackSize) * (sizeof(IO_STACK_LOCATION)))))
7879 * IoSkipCurrentIrpStackLocation(
7882 #define IoSkipCurrentIrpStackLocation(_Irp) \
7884 (_Irp)->CurrentLocation++; \
7885 (_Irp)->Tail.Overlay.CurrentStackLocation++; \
7892 IN PDEVICE_OBJECT DeviceObject
,
7893 IN BOOLEAN Cancelable
);
7898 IoStartNextPacketByKey(
7899 IN PDEVICE_OBJECT DeviceObject
,
7900 IN BOOLEAN Cancelable
,
7907 IN PDEVICE_OBJECT DeviceObject
,
7909 IN PULONG Key OPTIONAL
,
7910 IN PDRIVER_CANCEL CancelFunction OPTIONAL
);
7916 IN PDEVICE_OBJECT DeviceObject
);
7922 IN PDEVICE_OBJECT DeviceObject
);
7927 IoUnregisterPlugPlayNotification(
7928 IN PVOID NotificationEntry
);
7933 IoUnregisterShutdownNotification(
7934 IN PDEVICE_OBJECT DeviceObject
);
7939 IoUpdateShareAccess(
7940 IN PFILE_OBJECT FileObject
,
7941 IN OUT PSHARE_ACCESS ShareAccess
);
7946 IoVerifyPartitionTable(
7947 IN PDEVICE_OBJECT DeviceObject
,
7948 IN BOOLEAN FixErrors
);
7953 IoVolumeDeviceToDosName(
7954 IN PVOID VolumeDeviceObject
,
7955 OUT PUNICODE_STRING DosName
);
7960 IoWMIAllocateInstanceIds(
7962 IN ULONG InstanceCount
,
7963 OUT ULONG
*FirstInstanceId
);
7968 IoWMIDeviceObjectToProviderId(
7969 IN PDEVICE_OBJECT DeviceObject
);
7974 IoWMIDeviceObjectToInstanceName(
7975 IN PVOID DataBlockObject
,
7976 IN PDEVICE_OBJECT DeviceObject
,
7977 OUT PUNICODE_STRING InstanceName
);
7983 IN PVOID DataBlockObject
,
7984 IN PUNICODE_STRING InstanceName
,
7986 IN ULONG InBufferSize
,
7987 IN OUT PULONG OutBufferSize
,
7988 IN OUT PUCHAR InOutBuffer
);
7993 IoWMIHandleToInstanceName(
7994 IN PVOID DataBlockObject
,
7995 IN HANDLE FileHandle
,
7996 OUT PUNICODE_STRING InstanceName
);
8002 IN GUID
*DataBlockGuid
,
8003 IN ULONG DesiredAccess
,
8004 OUT PVOID
*DataBlockObject
);
8010 IN PVOID DataBlockObject
,
8011 IN OUT ULONG
*InOutBufferSize
,
8012 OUT PVOID OutBuffer
);
8017 IoWMIQueryAllDataMultiple(
8018 IN PVOID
*DataBlockObjectList
,
8019 IN ULONG ObjectCount
,
8020 IN OUT ULONG
*InOutBufferSize
,
8021 OUT PVOID OutBuffer
);
8026 IoWMIQuerySingleInstance(
8027 IN PVOID DataBlockObject
,
8028 IN PUNICODE_STRING InstanceName
,
8029 IN OUT ULONG
*InOutBufferSize
,
8030 OUT PVOID OutBuffer
);
8035 IoWMIQuerySingleInstanceMultiple(
8036 IN PVOID
*DataBlockObjectList
,
8037 IN PUNICODE_STRING InstanceNames
,
8038 IN ULONG ObjectCount
,
8039 IN OUT ULONG
*InOutBufferSize
,
8040 OUT PVOID OutBuffer
);
8045 IoWMIRegistrationControl(
8046 IN PDEVICE_OBJECT DeviceObject
,
8052 IoWMISetNotificationCallback(
8054 IN WMI_NOTIFICATION_CALLBACK Callback
,
8060 IoWMISetSingleInstance(
8061 IN PVOID DataBlockObject
,
8062 IN PUNICODE_STRING InstanceName
,
8064 IN ULONG ValueBufferSize
,
8065 IN PVOID ValueBuffer
);
8071 IN PVOID DataBlockObject
,
8072 IN PUNICODE_STRING InstanceName
,
8073 IN ULONG DataItemId
,
8075 IN ULONG ValueBufferSize
,
8076 IN PVOID ValueBuffer
);
8081 IoWMISuggestInstanceName(
8082 IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL
,
8083 IN PUNICODE_STRING SymbolicLinkName OPTIONAL
,
8084 IN BOOLEAN CombineNames
,
8085 OUT PUNICODE_STRING SuggestedInstanceName
);
8091 IN PVOID WnodeEventItem
);
8096 IoWriteErrorLogEntry(
8102 IoWritePartitionTable(
8103 IN PDEVICE_OBJECT DeviceObject
,
8104 IN ULONG SectorSize
,
8105 IN ULONG SectorsPerTrack
,
8106 IN ULONG NumberOfHeads
,
8107 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
8112 IoWritePartitionTableEx(
8113 IN PDEVICE_OBJECT DeviceObject
,
8114 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
*PartitionBuffer
);
8118 /** Kernel routines **/
8120 #if defined (_M_AMD64)
8124 KeAcquireInStackQueuedSpinLock(
8125 IN PKSPIN_LOCK SpinLock
,
8126 IN PKLOCK_QUEUE_HANDLE LockHandle
);
8131 KeReleaseInStackQueuedSpinLock(
8132 IN PKLOCK_QUEUE_HANDLE LockHandle
);
8137 KeAcquireInStackQueuedSpinLock(
8138 IN PKSPIN_LOCK SpinLock
,
8139 IN PKLOCK_QUEUE_HANDLE LockHandle
);
8144 KeReleaseInStackQueuedSpinLock(
8145 IN PKLOCK_QUEUE_HANDLE LockHandle
);
8151 KeAcquireInStackQueuedSpinLockAtDpcLevel(
8152 IN PKSPIN_LOCK SpinLock
,
8153 IN PKLOCK_QUEUE_HANDLE LockHandle
);
8158 KeAcquireInterruptSpinLock(
8159 IN PKINTERRUPT Interrupt
);
8170 __declspec(noreturn
)
8172 IN ULONG BugCheckCode
);
8177 __declspec(noreturn
)
8179 IN ULONG BugCheckCode
,
8180 IN ULONG_PTR BugCheckParameter1
,
8181 IN ULONG_PTR BugCheckParameter2
,
8182 IN ULONG_PTR BugCheckParameter3
,
8183 IN ULONG_PTR BugCheckParameter4
);
8200 KeDelayExecutionThread(
8201 IN KPROCESSOR_MODE WaitMode
,
8202 IN BOOLEAN Alertable
,
8203 IN PLARGE_INTEGER Interval
);
8208 KeDeregisterBugCheckCallback(
8209 IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord
);
8214 KeEnterCriticalRegion(
8221 * IN BOOLEAN ReadOperation,
8222 * IN BOOLEAN DmaOperation)
8224 #define KeFlushIoBuffers(_Mdl, _ReadOperation, _DmaOperation)
8226 #define ExAcquireSpinLock(Lock, OldIrql) KeAcquireSpinLock((Lock), (OldIrql))
8227 #define ExReleaseSpinLock(Lock, OldIrql) KeReleaseSpinLock((Lock), (OldIrql))
8228 #define ExAcquireSpinLockAtDpcLevel(Lock) KeAcquireSpinLockAtDpcLevel(Lock)
8229 #define ExReleaseSpinLockFromDpcLevel(Lock) KeReleaseSpinLockFromDpcLevel(Lock)
8234 KeFlushWriteBuffer(VOID
);
8239 KeGetRecommendedSharedDataAlignment(
8245 KeInitializeDeviceQueue(
8246 IN PKDEVICE_QUEUE DeviceQueue
);
8258 KeInitializeSemaphore(
8259 IN PRKSEMAPHORE Semaphore
,
8272 KeInitializeTimerEx(
8274 IN TIMER_TYPE Type
);
8279 KeInsertByKeyDeviceQueue(
8280 IN PKDEVICE_QUEUE DeviceQueue
,
8281 IN PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
,
8287 KeInsertDeviceQueue(
8288 IN PKDEVICE_QUEUE DeviceQueue
,
8289 IN PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
);
8296 IN PVOID SystemArgument1
,
8297 IN PVOID SystemArgument2
);
8302 KeLeaveCriticalRegion(
8312 volatile LONG Barrier
;
8313 #if defined(__GNUC__)
8314 __asm__
__volatile__ ("xchg %%eax, %0" : : "m" (Barrier
) : "%eax");
8315 #elif defined(_MSC_VER)
8316 __asm xchg
[Barrier
], eax
8327 IN KPRIORITY Increment
,
8333 KeQueryActiveProcessors(
8340 KeQueryPerformanceCounter(
8341 OUT PLARGE_INTEGER PerformanceFrequency OPTIONAL
);
8346 KeQueryPriorityThread(
8347 IN PRKTHREAD Thread
);
8352 KeQueryRuntimeThread(
8354 OUT PULONG UserTime
);
8356 #if !defined(_M_AMD64)
8360 KeQueryInterruptTime(
8367 OUT PLARGE_INTEGER CurrentTime
);
8373 OUT PLARGE_INTEGER TickCount
);
8379 KeQueryTimeIncrement(
8398 KeReadStateSemaphore(
8399 IN PRKSEMAPHORE Semaphore
);
8410 KeRegisterBugCheckCallback(
8411 IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord
,
8412 IN PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine
,
8415 IN PUCHAR Component
);
8420 KeReleaseInStackQueuedSpinLockFromDpcLevel(
8421 IN PKLOCK_QUEUE_HANDLE LockHandle
);
8426 KeReleaseInterruptSpinLock(
8427 IN PKINTERRUPT Interrupt
,
8441 IN PRKSEMAPHORE Semaphore
,
8442 IN KPRIORITY Increment
,
8447 PKDEVICE_QUEUE_ENTRY
8449 KeRemoveByKeyDeviceQueue(
8450 IN PKDEVICE_QUEUE DeviceQueue
,
8454 PKDEVICE_QUEUE_ENTRY
8456 KeRemoveDeviceQueue(
8457 IN PKDEVICE_QUEUE DeviceQueue
);
8462 KeRemoveEntryDeviceQueue(
8463 IN PKDEVICE_QUEUE DeviceQueue
,
8464 IN PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
);
8481 KeRestoreFloatingPointState(
8482 IN PKFLOATING_SAVE FloatSave
);
8487 KeRevertToUserAffinityThread(VOID
);
8492 KeSaveFloatingPointState(
8493 OUT PKFLOATING_SAVE FloatSave
);
8498 KeSetBasePriorityThread(
8499 IN PRKTHREAD Thread
,
8507 IN KPRIORITY Increment
,
8515 IN KDPC_IMPORTANCE Importance
);
8520 KeSetPriorityThread(
8522 IN KPRIORITY Priority
);
8527 KeSetSystemAffinityThread(
8528 IN KAFFINITY Affinity
);
8533 KeSetTargetProcessorDpc(
8542 IN LARGE_INTEGER DueTime
,
8543 IN PKDPC Dpc OPTIONAL
);
8550 IN LARGE_INTEGER DueTime
,
8551 IN LONG Period OPTIONAL
,
8552 IN PKDPC Dpc OPTIONAL
);
8557 KeSetTimeUpdateNotifyRoutine(
8558 IN PTIME_UPDATE_NOTIFY_ROUTINE NotifyRoutine
);
8563 KeStallExecutionProcessor(
8564 IN ULONG MicroSeconds
);
8569 KeSynchronizeExecution(
8570 IN PKINTERRUPT Interrupt
,
8571 IN PKSYNCHRONIZE_ROUTINE SynchronizeRoutine
,
8572 IN PVOID SynchronizeContext
);
8577 KeWaitForMultipleObjects(
8580 IN WAIT_TYPE WaitType
,
8581 IN KWAIT_REASON WaitReason
,
8582 IN KPROCESSOR_MODE WaitMode
,
8583 IN BOOLEAN Alertable
,
8584 IN PLARGE_INTEGER Timeout OPTIONAL
,
8585 IN PKWAIT_BLOCK WaitBlockArray OPTIONAL
);
8590 KeWaitForMutexObject(
8592 IN KWAIT_REASON WaitReason
,
8593 IN KPROCESSOR_MODE WaitMode
,
8594 IN BOOLEAN Alertable
,
8595 IN PLARGE_INTEGER Timeout OPTIONAL
);
8600 KeWaitForSingleObject(
8602 IN KWAIT_REASON WaitReason
,
8603 IN KPROCESSOR_MODE WaitMode
,
8604 IN BOOLEAN Alertable
,
8605 IN PLARGE_INTEGER Timeout OPTIONAL
);
8609 (NTAPI
*PKIPI_BROADCAST_WORKER
)(
8610 IN ULONG_PTR Argument
8617 IN PKIPI_BROADCAST_WORKER BroadcastFunction
,
8618 IN ULONG_PTR Context
8638 KeRaiseIrqlToDpcLevel(
8644 KeRaiseIrqlToSynchLevel(
8647 #define KeLowerIrql(a) KfLowerIrql(a)
8648 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
8650 #elif defined(_M_AMD64)
8654 KeGetCurrentIrql(VOID
)
8656 return (KIRQL
)__readcr8();
8661 KeLowerIrql(IN KIRQL NewIrql
)
8663 ASSERT(KeGetCurrentIrql() >= NewIrql
);
8664 __writecr8(NewIrql
);
8669 KfRaiseIrql(IN KIRQL NewIrql
)
8673 OldIrql
= __readcr8();
8674 ASSERT(OldIrql
<= NewIrql
);
8675 __writecr8(NewIrql
);
8678 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
8682 KeRaiseIrqlToDpcLevel(VOID
)
8684 return KfRaiseIrql(DISPATCH_LEVEL
);
8689 KeRaiseIrqlToSynchLevel(VOID
)
8691 return KfRaiseIrql(12); // SYNCH_LEVEL = IPI_LEVEL - 2
8694 #elif defined(__PowerPC__)
8711 KeRaiseIrqlToDpcLevel(
8717 KeRaiseIrqlToSynchLevel(
8720 #define KeLowerIrql(a) KfLowerIrql(a)
8721 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
8723 #elif defined(_M_MIPS)
8725 #define KeLowerIrql(a) KfLowerIrql(a)
8726 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
8743 KeRaiseIrqlToDpcLevel(
8749 KeRaiseIrqlToSynchLevel(
8752 #elif defined(_M_ARM)
8769 OUT PKIRQL OldIrql
);
8774 KeRaiseIrqlToDpcLevel(
8780 KeRaiseIrqlToSynchLevel(
8785 /** Memory manager routines **/
8792 IN ULONG NumberOfBytes
);
8797 MmAllocateContiguousMemory(
8798 IN ULONG NumberOfBytes
,
8799 IN PHYSICAL_ADDRESS HighestAcceptableAddress
);
8804 MmAllocateContiguousMemorySpecifyCache(
8805 IN SIZE_T NumberOfBytes
,
8806 IN PHYSICAL_ADDRESS LowestAcceptableAddress
,
8807 IN PHYSICAL_ADDRESS HighestAcceptableAddress
,
8808 IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL
,
8809 IN MEMORY_CACHING_TYPE CacheType
);
8814 MmAllocateMappingAddress(
8815 IN SIZE_T NumberOfBytes
,
8821 MmAllocateNonCachedMemory(
8822 IN ULONG NumberOfBytes
);
8827 MmAllocatePagesForMdl(
8828 IN PHYSICAL_ADDRESS LowAddress
,
8829 IN PHYSICAL_ADDRESS HighAddress
,
8830 IN PHYSICAL_ADDRESS SkipBytes
,
8831 IN SIZE_T TotalBytes
);
8836 MmBuildMdlForNonPagedPool(
8837 IN OUT PMDL MemoryDescriptorList
);
8839 typedef enum _MMFLUSH_TYPE
{
8847 MmFlushImageSection(
8848 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
8849 IN MMFLUSH_TYPE FlushType
);
8854 MmFreeContiguousMemory(
8855 IN PVOID BaseAddress
);
8860 MmFreeContiguousMemorySpecifyCache(
8861 IN PVOID BaseAddress
,
8862 IN SIZE_T NumberOfBytes
,
8863 IN MEMORY_CACHING_TYPE CacheType
);
8868 MmFreeMappingAddress(
8869 IN PVOID BaseAddress
,
8875 MmFreeNonCachedMemory(
8876 IN PVOID BaseAddress
,
8877 IN SIZE_T NumberOfBytes
);
8883 IN PMDL MemoryDescriptorList
);
8887 * MmGetMdlByteCount(
8890 #define MmGetMdlByteCount(_Mdl) \
8895 * MmGetMdlByteOffset(
8898 #define MmGetMdlByteOffset(_Mdl) \
8899 ((_Mdl)->ByteOffset)
8906 #define MmGetMdlPfnArray(_Mdl) \
8907 ((PPFN_NUMBER) ((_Mdl) + 1))
8911 * MmGetMdlVirtualAddress(
8914 #define MmGetMdlVirtualAddress(_Mdl) \
8915 ((PVOID) ((PCHAR) ((_Mdl)->StartVa) + (_Mdl)->ByteOffset))
8920 MmGetPhysicalAddress(
8921 IN PVOID BaseAddress
);
8924 PPHYSICAL_MEMORY_RANGE
8926 MmGetPhysicalMemoryRanges(
8932 MmGetVirtualForPhysical(
8933 IN PHYSICAL_ADDRESS PhysicalAddress
);
8938 MmMapLockedPagesSpecifyCache(
8939 IN PMDL MemoryDescriptorList
,
8940 IN KPROCESSOR_MODE AccessMode
,
8941 IN MEMORY_CACHING_TYPE CacheType
,
8942 IN PVOID BaseAddress
,
8943 IN ULONG BugCheckOnFailure
,
8944 IN MM_PAGE_PRIORITY Priority
);
8949 MmMapLockedPagesWithReservedMapping(
8950 IN PVOID MappingAddress
,
8952 IN PMDL MemoryDescriptorList
,
8953 IN MEMORY_CACHING_TYPE CacheType
);
8958 MmMapUserAddressesToPage(
8959 IN PVOID BaseAddress
,
8960 IN SIZE_T NumberOfBytes
,
8961 IN PVOID PageAddress
);
8967 IN PHYSICAL_ADDRESS PhysicalAddress
,
8968 IN SIZE_T NumberOfBytes
,
8969 IN MEMORY_CACHING_TYPE CacheType
);
8974 MmMapViewInSessionSpace(
8976 OUT PVOID
*MappedBase
,
8977 IN OUT PSIZE_T ViewSize
);
8982 MmMapViewInSystemSpace(
8984 OUT PVOID
*MappedBase
,
8985 IN PSIZE_T ViewSize
);
8990 MmMarkPhysicalMemoryAsBad(
8991 IN PPHYSICAL_ADDRESS StartAddress
,
8992 IN OUT PLARGE_INTEGER NumberOfBytes
);
8997 MmMarkPhysicalMemoryAsGood(
8998 IN PPHYSICAL_ADDRESS StartAddress
,
8999 IN OUT PLARGE_INTEGER NumberOfBytes
);
9004 MmGetSystemRoutineAddress(
9005 IN PUNICODE_STRING SystemRoutineName
);
9009 * ADDRESS_AND_SIZE_TO_SPAN_PAGES(
9013 #define ADDRESS_AND_SIZE_TO_SPAN_PAGES(_Va, \
9015 ((ULONG) ((((ULONG_PTR) (_Va) & (PAGE_SIZE - 1)) \
9016 + (_Size) + (PAGE_SIZE - 1)) >> PAGE_SHIFT))
9021 * IN PMDL MemoryDescriptorList,
9025 #define MmInitializeMdl(_MemoryDescriptorList, \
9029 (_MemoryDescriptorList)->Next = (PMDL) NULL; \
9030 (_MemoryDescriptorList)->Size = (CSHORT) (sizeof(MDL) + \
9031 (sizeof(PFN_NUMBER) * ADDRESS_AND_SIZE_TO_SPAN_PAGES(_BaseVa, _Length))); \
9032 (_MemoryDescriptorList)->MdlFlags = 0; \
9033 (_MemoryDescriptorList)->StartVa = (PVOID) PAGE_ALIGN(_BaseVa); \
9034 (_MemoryDescriptorList)->ByteOffset = BYTE_OFFSET(_BaseVa); \
9035 (_MemoryDescriptorList)->ByteCount = (ULONG) _Length; \
9042 IN PVOID VirtualAddress
);
9047 MmIsDriverVerifying(
9048 IN PDRIVER_OBJECT DriverObject
);
9053 MmIsThisAnNtAsSystem(
9059 MmIsVerifierEnabled(
9060 OUT PULONG VerifierFlags
);
9065 MmLockPagableDataSection(
9066 IN PVOID AddressWithinSection
);
9071 MmLockPagableImageSection(
9072 IN PVOID AddressWithinSection
);
9076 * MmLockPagableCodeSection(
9077 * IN PVOID AddressWithinSection)
9079 #define MmLockPagableCodeSection(Address) MmLockPagableDataSection(Address)
9084 MmLockPagableSectionByHandle(
9085 IN PVOID ImageSectionHandle
);
9091 IN PHYSICAL_ADDRESS PhysicalAddress
,
9092 IN ULONG NumberOfBytes
,
9093 IN MEMORY_CACHING_TYPE CacheEnable
);
9099 IN PMDL MemoryDescriptorList
,
9100 IN KPROCESSOR_MODE AccessMode
);
9105 MmLockPageableDataSection (
9106 IN PVOID AddressWithinSection
9112 MmUnlockPageableImageSection(
9113 IN PVOID ImageSectionHandle
9120 IN PVOID AddressWithinSection
);
9125 MmProbeAndLockProcessPages(
9126 IN OUT PMDL MemoryDescriptorList
,
9127 IN PEPROCESS Process
,
9128 IN KPROCESSOR_MODE AccessMode
,
9129 IN LOCK_OPERATION Operation
);
9134 MmProtectMdlSystemAddress(
9135 IN PMDL MemoryDescriptorList
,
9136 IN ULONG NewProtect
);
9142 IN PVOID BaseAddress
,
9143 IN PMDL MemoryDescriptorList
);
9148 MmUnmapViewInSessionSpace(
9149 IN PVOID MappedBase
);
9154 MmUnmapViewInSystemSpace(
9155 IN PVOID MappedBase
);
9160 MmUnsecureVirtualMemory(
9161 IN HANDLE SecureHandle
);
9165 * MmPrepareMdlForReuse(
9168 #define MmPrepareMdlForReuse(_Mdl) \
9170 if (((_Mdl)->MdlFlags & MDL_PARTIAL_HAS_BEEN_MAPPED) != 0) { \
9171 ASSERT(((_Mdl)->MdlFlags & MDL_PARTIAL) != 0); \
9172 MmUnmapLockedPages((_Mdl)->MappedSystemVa, (_Mdl)); \
9173 } else if (((_Mdl)->MdlFlags & MDL_PARTIAL) == 0) { \
9174 ASSERT(((_Mdl)->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA) == 0); \
9178 #define MmGetProcedureAddress(Address) (Address)
9183 MmProbeAndLockPages(
9184 IN OUT PMDL MemoryDescriptorList
,
9185 IN KPROCESSOR_MODE AccessMode
,
9186 IN LOCK_OPERATION Operation
);
9197 MmRemovePhysicalMemory(
9198 IN PPHYSICAL_ADDRESS StartAddress
,
9199 IN OUT PLARGE_INTEGER NumberOfBytes
);
9204 MmResetDriverPaging(
9205 IN PVOID AddressWithinSection
);
9210 MmSecureVirtualMemory(
9213 IN ULONG ProbeMode
);
9225 MmUnlockPagableImageSection(
9226 IN PVOID ImageSectionHandle
);
9232 IN PMDL MemoryDescriptorList
);
9238 IN PVOID BaseAddress
,
9239 IN SIZE_T NumberOfBytes
);
9244 MmUnmapReservedMapping(
9245 IN PVOID BaseAddress
,
9247 IN PMDL MemoryDescriptorList
);
9252 MmUnmapVideoDisplay(
9253 IN PVOID BaseAddress
,
9254 IN SIZE_T NumberOfBytes
);
9258 /** Object manager routines **/
9264 IN PACCESS_STATE AccessState
,
9265 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
9267 IN POBJECT_TYPE Type
);
9272 ObDereferenceSecurityDescriptor(
9273 PSECURITY_DESCRIPTOR SecurityDescriptor
,
9279 ObfDereferenceObject(
9284 * ObDereferenceObject(
9287 #define ObDereferenceObject ObfDereferenceObject
9292 ObGetObjectSecurity(
9294 OUT PSECURITY_DESCRIPTOR
*SecurityDescriptor
,
9295 OUT PBOOLEAN MemoryAllocated
);
9302 IN PACCESS_STATE PassedAccessState OPTIONAL
,
9303 IN ACCESS_MASK DesiredAccess
,
9304 IN ULONG AdditionalReferences
,
9305 OUT PVOID
* ReferencedObject OPTIONAL
,
9306 OUT PHANDLE Handle
);
9317 ObLogSecurityDescriptor(
9318 IN PSECURITY_DESCRIPTOR InputSecurityDescriptor
,
9319 OUT PSECURITY_DESCRIPTOR
*OutputSecurityDescriptor
,
9323 * ObReferenceObject(
9326 #define ObReferenceObject ObfReferenceObject
9331 ObMakeTemporaryObject(
9338 IN POBJECT_ATTRIBUTES ObjectAttributes
,
9339 IN POBJECT_TYPE ObjectType
,
9340 IN KPROCESSOR_MODE AccessMode
,
9341 IN PACCESS_STATE PassedAccessState
,
9342 IN ACCESS_MASK DesiredAccess
,
9343 IN OUT PVOID ParseContext OPTIONAL
,
9344 OUT PHANDLE Handle
);
9349 ObOpenObjectByPointer(
9351 IN ULONG HandleAttributes
,
9352 IN PACCESS_STATE PassedAccessState OPTIONAL
,
9353 IN ACCESS_MASK DesiredAccess OPTIONAL
,
9354 IN POBJECT_TYPE ObjectType OPTIONAL
,
9355 IN KPROCESSOR_MODE AccessMode
,
9356 OUT PHANDLE Handle
);
9361 ObQueryObjectAuditingByHandle(
9363 OUT PBOOLEAN GenerateOnClose
);
9368 ObReferenceObjectByHandle(
9370 IN ACCESS_MASK DesiredAccess
,
9371 IN POBJECT_TYPE ObjectType OPTIONAL
,
9372 IN KPROCESSOR_MODE AccessMode
,
9374 OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL
);
9379 ObReferenceObjectByName(
9380 IN PUNICODE_STRING ObjectPath
,
9381 IN ULONG Attributes
,
9382 IN PACCESS_STATE PassedAccessState OPTIONAL
,
9383 IN ACCESS_MASK DesiredAccess OPTIONAL
,
9384 IN POBJECT_TYPE ObjectType
,
9385 IN KPROCESSOR_MODE AccessMode
,
9386 IN OUT PVOID ParseContext OPTIONAL
,
9392 ObReferenceObjectByPointer(
9394 IN ACCESS_MASK DesiredAccess
,
9395 IN POBJECT_TYPE ObjectType
,
9396 IN KPROCESSOR_MODE AccessMode
);
9401 ObReferenceSecurityDescriptor(
9402 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
9408 ObReleaseObjectSecurity(
9409 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
9410 IN BOOLEAN MemoryAllocated
);
9414 /** Process manager routines **/
9419 PsCreateSystemProcess(
9420 IN PHANDLE ProcessHandle
,
9421 IN ACCESS_MASK DesiredAccess
,
9422 IN POBJECT_ATTRIBUTES ObjectAttributes
);
9427 PsCreateSystemThread(
9428 OUT PHANDLE ThreadHandle
,
9429 IN ULONG DesiredAccess
,
9430 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
9431 IN HANDLE ProcessHandle OPTIONAL
,
9432 OUT PCLIENT_ID ClientId OPTIONAL
,
9433 IN PKSTART_ROUTINE StartRoutine
,
9434 IN PVOID StartContext
);
9438 * PsGetCurrentProcess(VOID)
9440 #define PsGetCurrentProcess IoGetCurrentProcess
9445 PsGetCurrentProcessId(
9450 * PsGetCurrentThread(VOID)
9452 #define PsGetCurrentThread() \
9453 ((PETHREAD) KeGetCurrentThread())
9458 PsGetCurrentThreadId(
9464 PsGetProcessId(PEPROCESS Process
);
9470 PULONG MajorVersion OPTIONAL
,
9471 PULONG MinorVersion OPTIONAL
,
9472 PULONG BuildNumber OPTIONAL
,
9473 PUNICODE_STRING CSDVersion OPTIONAL
);
9478 PsRemoveCreateThreadNotifyRoutine(
9479 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
9484 PsRemoveLoadImageNotifyRoutine(
9485 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
9490 PsSetCreateProcessNotifyRoutine(
9491 IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine
,
9497 PsSetCreateThreadNotifyRoutine(
9498 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
9503 PsSetLoadImageNotifyRoutine(
9504 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
9509 PsTerminateSystemThread(
9510 IN NTSTATUS ExitStatus
);
9512 extern NTSYSAPI PEPROCESS PsInitialSystemProcess
;
9515 /** Security reference monitor routines **/
9521 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
9522 IN PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext
,
9523 IN BOOLEAN SubjectContextLocked
,
9524 IN ACCESS_MASK DesiredAccess
,
9525 IN ACCESS_MASK PreviouslyGrantedAccess
,
9526 OUT PPRIVILEGE_SET
*Privileges OPTIONAL
,
9527 IN PGENERIC_MAPPING GenericMapping
,
9528 IN KPROCESSOR_MODE AccessMode
,
9529 OUT PACCESS_MASK GrantedAccess
,
9530 OUT PNTSTATUS AccessStatus
);
9536 IN PSECURITY_DESCRIPTOR ParentDescriptor OPTIONAL
,
9537 IN PSECURITY_DESCRIPTOR ExplicitDescriptor OPTIONAL
,
9538 OUT PSECURITY_DESCRIPTOR
*NewDescriptor
,
9539 IN BOOLEAN IsDirectoryObject
,
9540 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
,
9541 IN PGENERIC_MAPPING GenericMapping
,
9542 IN POOL_TYPE PoolType
);
9548 IN PSECURITY_DESCRIPTOR ParentDescriptor OPTIONAL
,
9549 IN PSECURITY_DESCRIPTOR ExplicitDescriptor OPTIONAL
,
9550 OUT PSECURITY_DESCRIPTOR
*NewDescriptor
,
9551 IN GUID
*ObjectType OPTIONAL
,
9552 IN BOOLEAN IsDirectoryObject
,
9553 IN ULONG AutoInheritFlags
,
9554 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
,
9555 IN PGENERIC_MAPPING GenericMapping
,
9556 IN POOL_TYPE PoolType
);
9562 IN OUT PSECURITY_DESCRIPTOR
*SecurityDescriptor
);
9567 SeSinglePrivilegeCheck(
9568 LUID PrivilegeValue
,
9569 KPROCESSOR_MODE PreviousMode
);
9574 SeValidSecurityDescriptor(
9576 IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
9580 /** NtXxx routines **/
9586 OUT PHANDLE ProcessHandle
,
9587 IN ACCESS_MASK DesiredAccess
,
9588 IN POBJECT_ATTRIBUTES ObjectAttributes
,
9589 IN PCLIENT_ID ClientId OPTIONAL
);
9594 NtQueryInformationProcess(
9595 IN HANDLE ProcessHandle
,
9596 IN PROCESSINFOCLASS ProcessInformationClass
,
9597 OUT PVOID ProcessInformation
,
9598 IN ULONG ProcessInformationLength
,
9599 OUT PULONG ReturnLength OPTIONAL
);
9603 /** NtXxx and ZwXxx routines **/
9609 IN HANDLE TimerHandle
,
9610 OUT PBOOLEAN CurrentState OPTIONAL
);
9627 ZwCreateDirectoryObject(
9628 OUT PHANDLE DirectoryHandle
,
9629 IN ACCESS_MASK DesiredAccess
,
9630 IN POBJECT_ATTRIBUTES ObjectAttributes
);
9636 OUT PHANDLE EventHandle
,
9637 IN ACCESS_MASK DesiredAccess
,
9638 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
9639 IN EVENT_TYPE EventType
,
9640 IN BOOLEAN InitialState
);
9646 OUT PHANDLE EventHandle
,
9647 IN ACCESS_MASK DesiredAccess
,
9648 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
9649 IN EVENT_TYPE EventType
,
9650 IN BOOLEAN InitialState
);
9656 OUT PHANDLE FileHandle
,
9657 IN ACCESS_MASK DesiredAccess
,
9658 IN POBJECT_ATTRIBUTES ObjectAttributes
,
9659 OUT PIO_STATUS_BLOCK IoStatusBlock
,
9660 IN PLARGE_INTEGER AllocationSize OPTIONAL
,
9661 IN ULONG FileAttributes
,
9662 IN ULONG ShareAccess
,
9663 IN ULONG CreateDisposition
,
9664 IN ULONG CreateOptions
,
9665 IN PVOID EaBuffer OPTIONAL
,
9672 OUT PHANDLE KeyHandle
,
9673 IN ACCESS_MASK DesiredAccess
,
9674 IN POBJECT_ATTRIBUTES ObjectAttributes
,
9675 IN ULONG TitleIndex
,
9676 IN PUNICODE_STRING Class OPTIONAL
,
9677 IN ULONG CreateOptions
,
9678 OUT PULONG Disposition OPTIONAL
);
9684 OUT PHANDLE TimerHandle
,
9685 IN ACCESS_MASK DesiredAccess
,
9686 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
9687 IN TIMER_TYPE TimerType
);
9693 IN HANDLE KeyHandle
);
9699 IN HANDLE KeyHandle
,
9700 IN PUNICODE_STRING ValueName
);
9705 NtDeviceIoControlFile(
9706 IN HANDLE DeviceHandle
,
9707 IN HANDLE Event OPTIONAL
,
9708 IN PIO_APC_ROUTINE UserApcRoutine OPTIONAL
,
9709 IN PVOID UserApcContext OPTIONAL
,
9710 OUT PIO_STATUS_BLOCK IoStatusBlock
,
9711 IN ULONG IoControlCode
,
9712 IN PVOID InputBuffer
,
9713 IN ULONG InputBufferSize
,
9714 OUT PVOID OutputBuffer
,
9715 IN ULONG OutputBufferSize
);
9720 ZwDeviceIoControlFile(
9721 IN HANDLE DeviceHandle
,
9722 IN HANDLE Event OPTIONAL
,
9723 IN PIO_APC_ROUTINE UserApcRoutine OPTIONAL
,
9724 IN PVOID UserApcContext OPTIONAL
,
9725 OUT PIO_STATUS_BLOCK IoStatusBlock
,
9726 IN ULONG IoControlCode
,
9727 IN PVOID InputBuffer
,
9728 IN ULONG InputBufferSize
,
9729 OUT PVOID OutputBuffer
,
9730 IN ULONG OutputBufferSize
);
9736 IN HANDLE KeyHandle
,
9738 IN KEY_INFORMATION_CLASS KeyInformationClass
,
9739 OUT PVOID KeyInformation
,
9741 OUT PULONG ResultLength
);
9746 ZwEnumerateValueKey(
9747 IN HANDLE KeyHandle
,
9749 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
,
9750 OUT PVOID KeyValueInformation
,
9752 OUT PULONG ResultLength
);
9758 IN HANDLE KeyHandle
);
9763 ZwMakeTemporaryObject(
9770 IN HANDLE SectionHandle
,
9771 IN HANDLE ProcessHandle
,
9772 IN OUT PVOID
*BaseAddress
,
9773 IN ULONG_PTR ZeroBits
,
9774 IN SIZE_T CommitSize
,
9775 IN OUT PLARGE_INTEGER SectionOffset OPTIONAL
,
9776 IN OUT PSIZE_T ViewSize
,
9777 IN SECTION_INHERIT InheritDisposition
,
9778 IN ULONG AllocationType
,
9785 IN HANDLE SectionHandle
,
9786 IN HANDLE ProcessHandle
,
9787 IN OUT PVOID
*BaseAddress
,
9788 IN ULONG_PTR ZeroBits
,
9789 IN SIZE_T CommitSize
,
9790 IN OUT PLARGE_INTEGER SectionOffset OPTIONAL
,
9791 IN OUT PSIZE_T ViewSize
,
9792 IN SECTION_INHERIT InheritDisposition
,
9793 IN ULONG AllocationType
,
9800 OUT PHANDLE FileHandle
,
9801 IN ACCESS_MASK DesiredAccess
,
9802 IN POBJECT_ATTRIBUTES ObjectAttributes
,
9803 OUT PIO_STATUS_BLOCK IoStatusBlock
,
9804 IN ULONG ShareAccess
,
9805 IN ULONG OpenOptions
);
9811 OUT PHANDLE FileHandle
,
9812 IN ACCESS_MASK DesiredAccess
,
9813 IN POBJECT_ATTRIBUTES ObjectAttributes
,
9814 OUT PIO_STATUS_BLOCK IoStatusBlock
,
9815 IN ULONG ShareAccess
,
9816 IN ULONG OpenOptions
);
9822 OUT PHANDLE KeyHandle
,
9823 IN ACCESS_MASK DesiredAccess
,
9824 IN POBJECT_ATTRIBUTES ObjectAttributes
);
9830 OUT PHANDLE SectionHandle
,
9831 IN ACCESS_MASK DesiredAccess
,
9832 IN POBJECT_ATTRIBUTES ObjectAttributes
);
9837 ZwOpenSymbolicLinkObject(
9838 OUT PHANDLE LinkHandle
,
9839 IN ACCESS_MASK DesiredAccess
,
9840 IN POBJECT_ATTRIBUTES ObjectAttributes
);
9846 OUT PHANDLE TimerHandle
,
9847 IN ACCESS_MASK DesiredAccess
,
9848 IN POBJECT_ATTRIBUTES ObjectAttributes
);
9853 ZwQueryInformationFile(
9854 IN HANDLE FileHandle
,
9855 OUT PIO_STATUS_BLOCK IoStatusBlock
,
9856 OUT PVOID FileInformation
,
9858 IN FILE_INFORMATION_CLASS FileInformationClass
);
9864 IN HANDLE KeyHandle
,
9865 IN KEY_INFORMATION_CLASS KeyInformationClass
,
9866 OUT PVOID KeyInformation
,
9868 OUT PULONG ResultLength
);
9873 ZwQuerySymbolicLinkObject(
9874 IN HANDLE LinkHandle
,
9875 IN OUT PUNICODE_STRING LinkTarget
,
9876 OUT PULONG ReturnedLength OPTIONAL
);
9882 IN HANDLE KeyHandle
,
9883 IN PUNICODE_STRING ValueName
,
9884 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
,
9885 OUT PVOID KeyValueInformation
,
9887 OUT PULONG ResultLength
);
9893 IN HANDLE FileHandle
,
9894 IN HANDLE Event OPTIONAL
,
9895 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
9896 IN PVOID ApcContext OPTIONAL
,
9897 OUT PIO_STATUS_BLOCK IoStatusBlock
,
9900 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
9901 IN PULONG Key OPTIONAL
);
9907 IN HANDLE FileHandle
,
9908 IN HANDLE Event OPTIONAL
,
9909 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
9910 IN PVOID ApcContext OPTIONAL
,
9911 OUT PIO_STATUS_BLOCK IoStatusBlock
,
9914 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
9915 IN PULONG Key OPTIONAL
);
9921 IN HANDLE EventHandle
,
9922 OUT PLONG PreviousState OPTIONAL
);
9928 IN HANDLE EventHandle
,
9929 OUT PLONG PreviousState OPTIONAL
);
9934 ZwSetInformationFile(
9935 IN HANDLE FileHandle
,
9936 OUT PIO_STATUS_BLOCK IoStatusBlock
,
9937 IN PVOID FileInformation
,
9939 IN FILE_INFORMATION_CLASS FileInformationClass
);
9944 ZwSetInformationThread(
9945 IN HANDLE ThreadHandle
,
9946 IN THREADINFOCLASS ThreadInformationClass
,
9947 IN PVOID ThreadInformation
,
9948 IN ULONG ThreadInformationLength
);
9954 IN HANDLE TimerHandle
,
9955 IN PLARGE_INTEGER DueTime
,
9956 IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL
,
9957 IN PVOID TimerContext OPTIONAL
,
9958 IN BOOLEAN WakeTimer
,
9959 IN LONG Period OPTIONAL
,
9960 OUT PBOOLEAN PreviousState OPTIONAL
);
9966 IN HANDLE KeyHandle
,
9967 IN PUNICODE_STRING ValueName
,
9968 IN ULONG TitleIndex OPTIONAL
,
9973 /* [Nt|Zw]MapViewOfSection.InheritDisposition constants */
9974 #define AT_EXTENDABLE_FILE 0x00002000
9975 #define AT_RESERVED 0x20000000
9976 #define AT_ROUND_TO_PAGE 0x40000000
9981 NtUnmapViewOfSection(
9982 IN HANDLE ProcessHandle
,
9983 IN PVOID BaseAddress
);
9988 ZwUnmapViewOfSection(
9989 IN HANDLE ProcessHandle
,
9990 IN PVOID BaseAddress
);
9995 NtWaitForSingleObject(
9996 IN HANDLE ObjectHandle
,
9997 IN BOOLEAN Alertable
,
9998 IN PLARGE_INTEGER TimeOut OPTIONAL
);
10003 ZwWaitForSingleObject(
10004 IN HANDLE ObjectHandle
,
10005 IN BOOLEAN Alertable
,
10006 IN PLARGE_INTEGER TimeOut OPTIONAL
);
10012 IN HANDLE FileHandle
,
10013 IN HANDLE Event OPTIONAL
,
10014 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
10015 IN PVOID ApcContext OPTIONAL
,
10016 OUT PIO_STATUS_BLOCK IoStatusBlock
,
10019 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
10020 IN PULONG Key OPTIONAL
);
10026 IN HANDLE FileHandle
,
10027 IN HANDLE Event OPTIONAL
,
10028 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
10029 IN PVOID ApcContext OPTIONAL
,
10030 OUT PIO_STATUS_BLOCK IoStatusBlock
,
10033 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
10034 IN PULONG Key OPTIONAL
);
10038 /** Power management support routines **/
10044 IN PDEVICE_OBJECT DeviceObject
,
10050 PoRegisterDeviceForIdleDetection(
10051 IN PDEVICE_OBJECT DeviceObject
,
10052 IN ULONG ConservationIdleTime
,
10053 IN ULONG PerformanceIdleTime
,
10054 IN DEVICE_POWER_STATE State
);
10059 PoRegisterSystemState(
10060 IN PVOID StateHandle
,
10061 IN EXECUTION_STATE Flags
);
10067 IN PDEVICE_OBJECT DeviceObject
,
10068 IN UCHAR MinorFunction
,
10069 IN POWER_STATE PowerState
,
10070 IN PREQUEST_POWER_COMPLETE CompletionFunction
,
10072 OUT PIRP
*Irp OPTIONAL
);
10077 PoRequestShutdownEvent(
10084 PULONG IdlePointer
);
10086 #define PoSetDeviceBusy(IdlePointer) \
10087 ((void)(*(IdlePointer) = 0))
10093 IN PDEVICE_OBJECT DeviceObject
,
10094 IN POWER_STATE_TYPE Type
,
10095 IN POWER_STATE State
);
10101 IN EXECUTION_STATE Flags
);
10106 PoStartNextPowerIrp(
10112 PoUnregisterSystemState(
10113 IN PVOID StateHandle
);
10117 /** WMI library support routines **/
10121 WmiCompleteRequest(
10122 IN PDEVICE_OBJECT DeviceObject
,
10124 IN NTSTATUS Status
,
10125 IN ULONG BufferUsed
,
10126 IN CCHAR PriorityBoost
);
10131 IN PDEVICE_OBJECT DeviceObject
,
10133 IN ULONG InstanceIndex
,
10134 IN ULONG EventDataSize
,
10135 IN PVOID EventData
);
10140 WmiQueryTraceInformation(
10141 IN TRACE_INFORMATION_CLASS TraceInformationClass
,
10142 OUT PVOID TraceInformation
,
10143 IN ULONG TraceInformationLength
,
10144 OUT PULONG RequiredLength OPTIONAL
,
10145 IN PVOID Buffer OPTIONAL
);
10150 IN PWMILIB_CONTEXT WmiLibInfo
,
10151 IN PDEVICE_OBJECT DeviceObject
,
10153 OUT PSYSCTL_IRP_DISPOSITION IrpDisposition
);
10159 IN TRACEHANDLE LoggerHandle
,
10160 IN ULONG MessageFlags
,
10161 IN LPGUID MessageGuid
,
10162 IN USHORT MessageNumber
,
10166 /* FIXME: Get va_list from where? */
10171 IN TRACEHANDLE LoggerHandle
,
10172 IN ULONG MessageFlags
,
10173 IN LPGUID MessageGuid
,
10174 IN USHORT MessageNumber
,
10175 IN
va_list MessageArgList
);
10179 /** Kernel debugger routines **/
10193 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
10198 IN KD_OPTION Option
,
10199 IN ULONG InBufferBytes OPTIONAL
,
10201 IN ULONG OutBufferBytes OPTIONAL
,
10202 OUT PVOID OutBuffer
,
10203 OUT PULONG OutBufferNeeded OPTIONAL
);
10214 DbgBreakPointWithStatus(
10226 IN ULONG ComponentId
,
10234 IN ULONG ComponentId
,
10241 vDbgPrintExWithPrefix(
10243 IN ULONG ComponentId
,
10251 DbgPrintReturnControlC(
10258 DbgQueryDebugFilterState(
10259 IN ULONG ComponentId
,
10265 DbgSetDebugFilterState(
10266 IN ULONG ComponentId
,
10272 #define KdPrint(_x_) DbgPrint _x_
10273 #define KdPrintEx(_x_) DbgPrintEx _x_
10274 #define KdBreakPoint() DbgBreakPoint()
10275 #define KdBreakPointWithStatus(s) DbgBreakPointWithStatus(s)
10279 #define KdPrint(_x_)
10280 #define KdPrintEx(_x_)
10281 #define KdBreakPoint()
10282 #define KdBreakPointWithStatus(s)
10286 #if defined(_NTDDK_) || defined(_NTHAL_) || defined(_WDMDDK_) || defined(_NTOSP_)
10288 extern NTKERNELAPI PBOOLEAN KdDebuggerNotPresent
;
10289 extern NTKERNELAPI PBOOLEAN KdDebuggerEnabled
;
10290 #define KD_DEBUGGER_ENABLED *KdDebuggerEnabled
10291 #define KD_DEBUGGER_NOT_PRESENT *KdDebuggerNotPresent
10295 extern BOOLEAN KdDebuggerNotPresent
;
10296 extern BOOLEAN KdDebuggerEnabled
;
10297 #define KD_DEBUGGER_ENABLED KdDebuggerEnabled
10298 #define KD_DEBUGGER_NOT_PRESENT KdDebuggerNotPresent
10302 /** Stuff from winnt4.h */
10304 #ifndef DMA_MACROS_DEFINED
10306 #if (NTDDI_VERSION >= NTDDI_WIN2K)
10308 //DECLSPEC_DEPRECATED_DDK
10312 IoFlushAdapterBuffers(
10313 IN PADAPTER_OBJECT AdapterObject
,
10315 IN PVOID MapRegisterBase
,
10316 IN PVOID CurrentVa
,
10318 IN BOOLEAN WriteToDevice
);
10320 //DECLSPEC_DEPRECATED_DDK
10324 IoFreeAdapterChannel(
10325 IN PADAPTER_OBJECT AdapterObject
);
10327 //DECLSPEC_DEPRECATED_DDK
10331 IoFreeMapRegisters(
10332 IN PADAPTER_OBJECT AdapterObject
,
10333 IN PVOID MapRegisterBase
,
10334 IN ULONG NumberOfMapRegisters
);
10336 //DECLSPEC_DEPRECATED_DDK
10341 IN PADAPTER_OBJECT AdapterObject
,
10343 IN PVOID MapRegisterBase
,
10344 IN PVOID CurrentVa
,
10345 IN OUT PULONG Length
,
10346 IN BOOLEAN WriteToDevice
);
10349 #endif // (NTDDI_VERSION >= NTDDI_WIN2K)
10350 #endif // !defined(DMA_MACROS_DEFINED)
10356 IN PUNICODE_STRING RegistryPath
,
10357 IN PUNICODE_STRING DriverClassName OPTIONAL
,
10358 IN PDRIVER_OBJECT DriverObject
,
10359 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
10360 IN PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources
,
10361 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
10366 IoAttachDeviceByPointer(
10367 IN PDEVICE_OBJECT SourceDevice
,
10368 IN PDEVICE_OBJECT TargetDevice
);
10373 MmIsNonPagedSystemAddressValid(
10374 IN PVOID VirtualAddress
);
10376 #if defined(_AMD64_) || defined(_IA64_)
10377 //DECLSPEC_DEPRECATED_DDK_WINXP
10381 RtlLargeIntegerDivide(
10382 IN LARGE_INTEGER Dividend
,
10383 IN LARGE_INTEGER Divisor
,
10384 IN OUT PLARGE_INTEGER Remainder
)
10387 ret
.QuadPart
= Dividend
.QuadPart
/ Divisor
.QuadPart
;
10389 Remainder
->QuadPart
= Dividend
.QuadPart
% Divisor
.QuadPart
;
10396 RtlLargeIntegerDivide(
10397 IN LARGE_INTEGER Dividend
,
10398 IN LARGE_INTEGER Divisor
,
10399 IN OUT PLARGE_INTEGER Remainder
);
10405 ExInterlockedDecrementLong(
10407 IN PKSPIN_LOCK Lock
);
10412 ExInterlockedExchangeUlong(
10415 IN PKSPIN_LOCK Lock
);
10420 ExInterlockedIncrementLong(
10422 IN PKSPIN_LOCK Lock
);
10427 HalAcquireDisplayOwnership(
10428 IN PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters
);
10433 HalAllocateAdapterChannel(
10434 IN PADAPTER_OBJECT AdapterObject
,
10435 IN PWAIT_CONTEXT_BLOCK Wcb
,
10436 IN ULONG NumberOfMapRegisters
,
10437 IN PDRIVER_CONTROL ExecutionRoutine
);
10442 HalAllocateCommonBuffer(
10443 IN PADAPTER_OBJECT AdapterObject
,
10445 OUT PPHYSICAL_ADDRESS LogicalAddress
,
10446 IN BOOLEAN CacheEnabled
);
10451 HalAssignSlotResources(
10452 IN PUNICODE_STRING RegistryPath
,
10453 IN PUNICODE_STRING DriverClassName
,
10454 IN PDRIVER_OBJECT DriverObject
,
10455 IN PDEVICE_OBJECT DeviceObject
,
10456 IN INTERFACE_TYPE BusType
,
10457 IN ULONG BusNumber
,
10458 IN ULONG SlotNumber
,
10459 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
10464 HalFreeCommonBuffer(
10465 IN PADAPTER_OBJECT AdapterObject
,
10467 IN PHYSICAL_ADDRESS LogicalAddress
,
10468 IN PVOID VirtualAddress
,
10469 IN BOOLEAN CacheEnabled
);
10475 IN PDEVICE_DESCRIPTION DeviceDescription
,
10476 IN OUT PULONG NumberOfMapRegisters
);
10482 IN BUS_DATA_TYPE BusDataType
,
10483 IN ULONG BusNumber
,
10484 IN ULONG SlotNumber
,
10491 HalGetBusDataByOffset(
10492 IN BUS_DATA_TYPE BusDataType
,
10493 IN ULONG BusNumber
,
10494 IN ULONG SlotNumber
,
10502 HalGetDmaAlignmentRequirement(
10508 HalGetInterruptVector(
10509 IN INTERFACE_TYPE InterfaceType
,
10510 IN ULONG BusNumber
,
10511 IN ULONG BusInterruptLevel
,
10512 IN ULONG BusInterruptVector
,
10514 OUT PKAFFINITY Affinity
);
10520 IN PADAPTER_OBJECT AdapterObject
);
10526 IN BUS_DATA_TYPE BusDataType
,
10527 IN ULONG BusNumber
,
10528 IN ULONG SlotNumber
,
10535 HalSetBusDataByOffset(
10536 IN BUS_DATA_TYPE BusDataType
,
10537 IN ULONG BusNumber
,
10538 IN ULONG SlotNumber
,
10546 HalTranslateBusAddress(
10547 IN INTERFACE_TYPE InterfaceType
,
10548 IN ULONG BusNumber
,
10549 IN PHYSICAL_ADDRESS BusAddress
,
10550 IN OUT PULONG AddressSpace
,
10551 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
10556 RtlLargeIntegerEqualToZero(
10557 IN LARGE_INTEGER Operand
);
10562 RtlLargeIntegerGreaterOrEqualToZero(
10563 IN LARGE_INTEGER Operand
);
10568 RtlLargeIntegerGreaterThan(
10569 IN LARGE_INTEGER Operand1
,
10570 IN LARGE_INTEGER Operand2
);
10575 RtlLargeIntegerGreaterThanOrEqualTo(
10576 IN LARGE_INTEGER Operand1
,
10577 IN LARGE_INTEGER Operand2
);
10582 RtlLargeIntegerGreaterThanZero(
10583 IN LARGE_INTEGER Operand
);
10588 RtlLargeIntegerLessOrEqualToZero(
10589 IN LARGE_INTEGER Operand
);
10594 RtlLargeIntegerLessThan(
10595 IN LARGE_INTEGER Operand1
,
10596 IN LARGE_INTEGER Operand2
);
10601 RtlLargeIntegerLessThanOrEqualTo(
10602 IN LARGE_INTEGER Operand1
,
10603 IN LARGE_INTEGER Operand2
);
10608 RtlLargeIntegerLessThanZero(
10609 IN LARGE_INTEGER Operand
);
10614 RtlLargeIntegerNegate(
10615 IN LARGE_INTEGER Subtrahend
);
10620 RtlLargeIntegerNotEqualTo(
10621 IN LARGE_INTEGER Operand1
,
10622 IN LARGE_INTEGER Operand2
);
10627 RtlLargeIntegerNotEqualToZero(
10628 IN LARGE_INTEGER Operand
);
10633 RtlLargeIntegerShiftLeft(
10634 IN LARGE_INTEGER LargeInteger
,
10635 IN CCHAR ShiftCount
);
10640 RtlLargeIntegerShiftRight(
10641 IN LARGE_INTEGER LargeInteger
,
10642 IN CCHAR ShiftCount
);
10647 RtlLargeIntegerSubtract(
10648 IN LARGE_INTEGER Minuend
,
10649 IN LARGE_INTEGER Subtrahend
);
10654 * COMPUTE_PAGES_SPANNED(
10658 #define COMPUTE_PAGES_SPANNED(Va, \
10660 (ADDRESS_AND_SIZE_TO_SPAN_PAGES(Va, Size))
10664 ** Architecture specific structures
10672 Exfi386InterlockedIncrementLong(
10678 Exfi386InterlockedDecrementLong(
10684 Exfi386InterlockedExchangeUlong(
10688 #define ExInterlockedIncrementLong(Addend,Lock) Exfi386InterlockedIncrementLong(Addend)
10689 #define ExInterlockedDecrementLong(Addend,Lock) Exfi386InterlockedDecrementLong(Addend)
10690 #define ExInterlockedExchangeUlong(Target, Value, Lock) Exfi386InterlockedExchangeUlong(Target, Value)
10698 #endif /* __WINDDK_H */