4 * Windows NT WDM Driver Developer Kit
6 * This file is part of the ReactOS DDK package.
10 * Timo Kreuzer (timo.kreuzer@reactos.org)
12 * THIS SOFTWARE IS NOT COPYRIGHTED
14 * This source code is offered for use in the public domain. You may
15 * use, modify or distribute it freely.
17 * This code is distributed in the hope that it will be useful but
18 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
19 * DISCLAIMED. This includes but is not limited to warranties of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
28 /* Included via ntddk.h? */
31 #define _WDM_INCLUDED_
33 #define NO_INTERLOCKED_INTRINSICS
50 #endif /* _INC_STRING */
56 typedef GUID UOW
, *PUOW
;
61 #if (NTDDI_VERSION >= NTDDI_WINXP)
71 #if !defined(_NTHALDLL_) && !defined(_BLDR_)
72 #define NTHALAPI DECLSPEC_IMPORT
78 #if !defined(_NTOSKRNL_) && !defined(_BLDR_)
79 #define NTKERNELAPI DECLSPEC_IMPORT
84 #if defined(_X86_) && !defined(_NTHAL_)
85 #define _DECL_HAL_KE_IMPORT DECLSPEC_IMPORT
87 #define _DECL_HAL_KE_IMPORT
89 #define _DECL_HAL_KE_IMPORT NTKERNELAPI
93 #define POINTER_ALIGNMENT DECLSPEC_ALIGN(8)
95 #define POINTER_ALIGNMENT
98 /* Helper macro to enable gcc's extension. */
99 #ifndef __GNU_EXTENSION
101 #define __GNU_EXTENSION __extension__
103 #define __GNU_EXTENSION
107 #if defined(_MSC_VER)
109 /* Disable some warnings */
110 #pragma warning(disable:4115) /* Named type definition in parentheses */
111 #pragma warning(disable:4201) /* Nameless unions and structs */
112 #pragma warning(disable:4214) /* Bit fields of other types than int */
113 #pragma warning(disable:4820) /* Padding added, due to alignemnet requirement */
115 /* Indicate if #pragma alloc_text() is supported */
116 #if defined(_M_IX86) || defined(_M_AMD64) || defined(_M_IA64)
117 #define ALLOC_PRAGMA 1
120 /* Indicate if #pragma data_seg() is supported */
121 #if defined(_M_IX86) || defined(_M_AMD64)
122 #define ALLOC_DATA_PRAGMA 1
127 /* Forward declarations */
134 struct _DEVICE_OBJECT
;
135 struct _DRIVER_OBJECT
;
136 struct _IO_STATUS_BLOCK
;
137 struct _DEVICE_DESCRIPTION
;
138 struct _SCATTER_GATHER_LIST
;
139 struct _DRIVE_LAYOUT_INFORMATION
;
140 struct _COMPRESSED_DATA_INFO
;
141 struct _IO_RESOURCE_DESCRIPTOR
;
143 /* Structures not exposed to drivers */
144 typedef struct _OBJECT_TYPE
*POBJECT_TYPE
;
145 typedef struct _HAL_DISPATCH_TABLE
*PHAL_DISPATCH_TABLE
;
146 typedef struct _HAL_PRIVATE_DISPATCH_TABLE
*PHAL_PRIVATE_DISPATCH_TABLE
;
147 typedef struct _CALLBACK_OBJECT
*PCALLBACK_OBJECT
;
148 typedef struct _EPROCESS
*PEPROCESS
;
149 typedef struct _ETHREAD
*PETHREAD
;
150 typedef struct _IO_TIMER
*PIO_TIMER
;
151 typedef struct _KINTERRUPT
*PKINTERRUPT
;
152 typedef struct _KPROCESS
*PKPROCESS
;
153 typedef struct _KTHREAD
*PKTHREAD
, *PRKTHREAD
;
154 typedef struct _CONTEXT
*PCONTEXT
;
156 #if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && ( defined(_NTDDK_) || defined(_NTDRIVER_) || defined(_NTOSP_))
157 typedef struct _DMA_ADAPTER
*PADAPTER_OBJECT
;
158 #elif defined(_WDM_INCLUDED_)
159 typedef struct _DMA_ADAPTER
*PADAPTER_OBJECT
;
161 typedef struct _ADAPTER_OBJECT
*PADAPTER_OBJECT
;
164 #ifndef DEFINE_GUIDEX
166 #define DEFINE_GUIDEX(name) EXTERN_C const CDECL GUID name
168 #define DEFINE_GUIDEX(name) EXTERN_C const GUID name
170 #endif /* DEFINE_GUIDEX */
173 #define STATICGUIDOF(guid) STATIC_##guid
176 /* GUID Comparison */
177 #ifndef __IID_ALIGNED__
178 #define __IID_ALIGNED__
180 inline int IsEqualGUIDAligned(REFGUID guid1
, REFGUID guid2
)
182 return ( (*(PLONGLONG
)(&guid1
) == *(PLONGLONG
)(&guid2
)) &&
183 (*((PLONGLONG
)(&guid1
) + 1) == *((PLONGLONG
)(&guid2
) + 1)) );
186 #define IsEqualGUIDAligned(guid1, guid2) \
187 ( (*(PLONGLONG)(guid1) == *(PLONGLONG)(guid2)) && \
188 (*((PLONGLONG)(guid1) + 1) == *((PLONGLONG)(guid2) + 1)) )
189 #endif /* __cplusplus */
190 #endif /* !__IID_ALIGNED__ */
193 /******************************************************************************
194 * INTERLOCKED Functions *
195 ******************************************************************************/
197 // Intrinsics (note: taken from our winnt.h)
200 #if defined(__GNUC__)
202 static __inline__ BOOLEAN
203 InterlockedBitTestAndSet(
204 IN LONG
volatile *Base
,
209 __asm__
__volatile__("lock "
212 :"=r" (OldBit
),"+m" (*Base
)
217 return (_InterlockedOr(Base
, 1 << Bit
) >> Bit
) & 1;
221 static __inline__ BOOLEAN
222 InterlockedBitTestAndReset(
223 IN LONG
volatile *Base
,
228 __asm__
__volatile__("lock "
231 :"=r" (OldBit
),"+m" (*Base
)
236 return (_InterlockedAnd(Base
, ~(1 << Bit
)) >> Bit
) & 1;
240 #endif /* defined(__GNUC__) */
242 #define BitScanForward _BitScanForward
243 #define BitScanReverse _BitScanReverse
244 #define BitTest _bittest
245 #define BitTestAndComplement _bittestandcomplement
246 #define BitTestAndSet _bittestandset
247 #define BitTestAndReset _bittestandreset
248 #define InterlockedBitTestAndSet _interlockedbittestandset
249 #define InterlockedBitTestAndReset _interlockedbittestandreset
252 #define BitTest64 _bittest64
253 #define BitTestAndComplement64 _bittestandcomplement64
254 #define BitTestAndSet64 _bittestandset64
255 #define BitTestAndReset64 _bittestandreset64
256 #define InterlockedBitTestAndSet64 _interlockedbittestandset64
257 #define InterlockedBitTestAndReset64 _interlockedbittestandreset64
260 #if !defined(__INTERLOCKED_DECLARED)
261 #define __INTERLOCKED_DECLARED
264 #if defined(NO_INTERLOCKED_INTRINSICS)
268 InterlockedIncrement(
269 IN OUT LONG
volatile *Addend
);
274 InterlockedDecrement(
275 IN OUT LONG
volatile *Addend
);
280 InterlockedCompareExchange(
281 IN OUT LONG
volatile *Destination
,
289 IN OUT LONG
volatile *Destination
,
295 InterlockedExchangeAdd(
296 IN OUT LONG
volatile *Addend
,
299 #else /* !defined(NO_INTERLOCKED_INTRINSICS) */
301 #define InterlockedExchange _InterlockedExchange
302 #define InterlockedIncrement _InterlockedIncrement
303 #define InterlockedDecrement _InterlockedDecrement
304 #define InterlockedExchangeAdd _InterlockedExchangeAdd
305 #define InterlockedCompareExchange _InterlockedCompareExchange
306 #define InterlockedOr _InterlockedOr
307 #define InterlockedAnd _InterlockedAnd
308 #define InterlockedXor _InterlockedXor
310 #endif /* !defined(NO_INTERLOCKED_INTRINSICS) */
312 #endif /* defined (_X86_) */
314 #if !defined (_WIN64)
317 * InterlockedExchangePointer(
318 * IN OUT PVOID volatile *Target,
321 #define InterlockedExchangePointer(Target, Value) \
322 ((PVOID) InterlockedExchange((PLONG) Target, (LONG) Value))
326 * InterlockedCompareExchangePointer(
327 * IN OUT PVOID *Destination,
329 * IN PVOID Comparand)
331 #define InterlockedCompareExchangePointer(Destination, Exchange, Comparand) \
332 ((PVOID) InterlockedCompareExchange((PLONG) Destination, (LONG) Exchange, (LONG) Comparand))
334 #define InterlockedExchangeAddSizeT(a, b) InterlockedExchangeAdd((LONG *)a, b)
335 #define InterlockedIncrementSizeT(a) InterlockedIncrement((LONG *)a)
336 #define InterlockedDecrementSizeT(a) InterlockedDecrement((LONG *)a)
338 #endif // !defined (_WIN64)
340 #if defined (_M_AMD64)
342 #define InterlockedExchangeAddSizeT(a, b) InterlockedExchangeAdd64((LONGLONG *)a, (LONGLONG)b)
343 #define InterlockedIncrementSizeT(a) InterlockedIncrement64((LONGLONG *)a)
344 #define InterlockedDecrementSizeT(a) InterlockedDecrement64((LONGLONG *)a)
345 #define InterlockedAnd _InterlockedAnd
346 #define InterlockedOr _InterlockedOr
347 #define InterlockedXor _InterlockedXor
348 #define InterlockedIncrement _InterlockedIncrement
349 #define InterlockedDecrement _InterlockedDecrement
350 #define InterlockedAdd _InterlockedAdd
351 #define InterlockedExchange _InterlockedExchange
352 #define InterlockedExchangeAdd _InterlockedExchangeAdd
353 #define InterlockedCompareExchange _InterlockedCompareExchange
354 #define InterlockedAnd64 _InterlockedAnd64
355 #define InterlockedOr64 _InterlockedOr64
356 #define InterlockedXor64 _InterlockedXor64
357 #define InterlockedIncrement64 _InterlockedIncrement64
358 #define InterlockedDecrement64 _InterlockedDecrement64
359 #define InterlockedAdd64 _InterlockedAdd64
360 #define InterlockedExchange64 _InterlockedExchange64
361 #define InterlockedExchangeAdd64 _InterlockedExchangeAdd64
362 #define InterlockedCompareExchange64 _InterlockedCompareExchange64
363 #define InterlockedCompareExchangePointer _InterlockedCompareExchangePointer
364 #define InterlockedExchangePointer _InterlockedExchangePointer
365 #define InterlockedBitTestAndSet64 _interlockedbittestandset64
366 #define InterlockedBitTestAndReset64 _interlockedbittestandreset64
370 #if defined(_M_AMD64) && !defined(RC_INVOKED) && !defined(MIDL_PASS)
371 //#if !defined(_X86AMD64_) // FIXME: what's _X86AMD64_ used for?
375 IN OUT LONG64
volatile *Addend
,
378 return InterlockedExchangeAdd64(Addend
, Value
) + Value
;
383 #endif /* !__INTERLOCKED_DECLARED */
386 /******************************************************************************
387 * Runtime Library Types *
388 ******************************************************************************/
390 #define RTL_REGISTRY_ABSOLUTE 0
391 #define RTL_REGISTRY_SERVICES 1
392 #define RTL_REGISTRY_CONTROL 2
393 #define RTL_REGISTRY_WINDOWS_NT 3
394 #define RTL_REGISTRY_DEVICEMAP 4
395 #define RTL_REGISTRY_USER 5
396 #define RTL_REGISTRY_MAXIMUM 6
397 #define RTL_REGISTRY_HANDLE 0x40000000
398 #define RTL_REGISTRY_OPTIONAL 0x80000000
400 /* RTL_QUERY_REGISTRY_TABLE.Flags */
401 #define RTL_QUERY_REGISTRY_SUBKEY 0x00000001
402 #define RTL_QUERY_REGISTRY_TOPKEY 0x00000002
403 #define RTL_QUERY_REGISTRY_REQUIRED 0x00000004
404 #define RTL_QUERY_REGISTRY_NOVALUE 0x00000008
405 #define RTL_QUERY_REGISTRY_NOEXPAND 0x00000010
406 #define RTL_QUERY_REGISTRY_DIRECT 0x00000020
407 #define RTL_QUERY_REGISTRY_DELETE 0x00000040
409 #define HASH_STRING_ALGORITHM_DEFAULT 0
410 #define HASH_STRING_ALGORITHM_X65599 1
411 #define HASH_STRING_ALGORITHM_INVALID 0xffffffff
413 typedef struct _RTL_BITMAP
{
416 } RTL_BITMAP
, *PRTL_BITMAP
;
418 typedef struct _RTL_BITMAP_RUN
{
421 } RTL_BITMAP_RUN
, *PRTL_BITMAP_RUN
;
424 (NTAPI
*PRTL_QUERY_REGISTRY_ROUTINE
)(
428 IN ULONG ValueLength
,
430 IN PVOID EntryContext
);
432 typedef struct _RTL_QUERY_REGISTRY_TABLE
{
433 PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine
;
440 } RTL_QUERY_REGISTRY_TABLE
, *PRTL_QUERY_REGISTRY_TABLE
;
442 typedef struct _TIME_FIELDS
{
451 } TIME_FIELDS
, *PTIME_FIELDS
;
454 #ifndef _SLIST_HEADER_
455 #define _SLIST_HEADER_
459 typedef struct DECLSPEC_ALIGN(16) _SLIST_ENTRY
{
460 struct _SLIST_ENTRY
*Next
;
461 } SLIST_ENTRY
, *PSLIST_ENTRY
;
463 typedef struct _SLIST_ENTRY32
{
465 } SLIST_ENTRY32
, *PSLIST_ENTRY32
;
467 typedef union DECLSPEC_ALIGN(16) _SLIST_HEADER
{
474 ULONGLONG Sequence
:9;
475 ULONGLONG NextEntry
:39;
476 ULONGLONG HeaderType
:1;
478 ULONGLONG Reserved
:59;
483 ULONGLONG Sequence
:48;
484 ULONGLONG HeaderType
:1;
486 ULONGLONG Reserved
:2;
487 ULONGLONG NextEntry
:60;
491 ULONGLONG Sequence
:48;
492 ULONGLONG HeaderType
:1;
493 ULONGLONG Reserved
:3;
494 ULONGLONG NextEntry
:60;
496 } SLIST_HEADER
, *PSLIST_HEADER
;
498 typedef union _SLIST_HEADER32
{
505 } SLIST_HEADER32
, *PSLIST_HEADER32
;
509 #define SLIST_ENTRY SINGLE_LIST_ENTRY
510 #define _SLIST_ENTRY _SINGLE_LIST_ENTRY
511 #define PSLIST_ENTRY PSINGLE_LIST_ENTRY
513 typedef SLIST_ENTRY SLIST_ENTRY32
, *PSLIST_ENTRY32
;
515 typedef union _SLIST_HEADER
{
522 } SLIST_HEADER
, *PSLIST_HEADER
;
524 typedef SLIST_HEADER SLIST_HEADER32
, *PSLIST_HEADER32
;
526 #endif /* defined(_WIN64) */
528 #endif /* _SLIST_HEADER_ */
530 /* MS definition is broken! */
531 extern BOOLEAN NTSYSAPI NlsMbCodePageTag
;
532 extern BOOLEAN NTSYSAPI NlsMbOemCodePageTag
;
533 #define NLS_MB_CODE_PAGE_TAG NlsMbCodePageTag
534 #define NLS_MB_OEM_CODE_PAGE_TAG NlsMbOemCodePageTag
536 #define SHORT_LEAST_SIGNIFICANT_BIT 0
537 #define SHORT_MOST_SIGNIFICANT_BIT 1
539 #define LONG_LEAST_SIGNIFICANT_BIT 0
540 #define LONG_3RD_MOST_SIGNIFICANT_BIT 1
541 #define LONG_2ND_MOST_SIGNIFICANT_BIT 2
542 #define LONG_MOST_SIGNIFICANT_BIT 3
544 #define RTLVERLIB_DDI(x) Wdmlib##x
547 (*PFN_RTL_IS_NTDDI_VERSION_AVAILABLE
)(
551 (*PFN_RTL_IS_SERVICE_PACK_VERSION_INSTALLED
)(
554 /******************************************************************************
556 ******************************************************************************/
558 typedef UCHAR KIRQL
, *PKIRQL
;
559 typedef CCHAR KPROCESSOR_MODE
;
560 typedef LONG KPRIORITY
;
568 #define CACHE_FULLY_ASSOCIATIVE 0xFF
569 #define MAXIMUM_SUSPEND_COUNT MAXCHAR
571 #define EVENT_QUERY_STATE (0x0001)
572 #define EVENT_MODIFY_STATE (0x0002)
573 #define EVENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3)
575 #define LTP_PC_SMT 0x1
577 #if (NTDDI_VERSION < NTDDI_WIN7) || defined(_X86_) || !defined(NT_PROCESSOR_GROUPS)
578 #define SINGLE_GROUP_LEGACY_API 1
581 #define SEMAPHORE_QUERY_STATE (0x0001)
582 #define SEMAPHORE_MODIFY_STATE (0x0002)
583 #define SEMAPHORE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3)
585 typedef enum _LOGICAL_PROCESSOR_RELATIONSHIP
{
586 RelationProcessorCore
,
589 RelationProcessorPackage
,
592 } LOGICAL_PROCESSOR_RELATIONSHIP
;
594 typedef enum _PROCESSOR_CACHE_TYPE
{
599 } PROCESSOR_CACHE_TYPE
;
601 typedef struct _CACHE_DESCRIPTOR
{
606 PROCESSOR_CACHE_TYPE Type
;
607 } CACHE_DESCRIPTOR
, *PCACHE_DESCRIPTOR
;
609 typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION
{
610 ULONG_PTR ProcessorMask
;
611 LOGICAL_PROCESSOR_RELATIONSHIP Relationship
;
619 CACHE_DESCRIPTOR Cache
;
620 ULONGLONG Reserved
[2];
622 } SYSTEM_LOGICAL_PROCESSOR_INFORMATION
, *PSYSTEM_LOGICAL_PROCESSOR_INFORMATION
;
624 typedef struct _PROCESSOR_RELATIONSHIP
{
628 GROUP_AFFINITY GroupMask
[ANYSIZE_ARRAY
];
629 } PROCESSOR_RELATIONSHIP
, *PPROCESSOR_RELATIONSHIP
;
631 typedef struct _NUMA_NODE_RELATIONSHIP
{
634 GROUP_AFFINITY GroupMask
;
635 } NUMA_NODE_RELATIONSHIP
, *PNUMA_NODE_RELATIONSHIP
;
637 typedef struct _CACHE_RELATIONSHIP
{
642 PROCESSOR_CACHE_TYPE Type
;
644 GROUP_AFFINITY GroupMask
;
645 } CACHE_RELATIONSHIP
, *PCACHE_RELATIONSHIP
;
647 typedef struct _PROCESSOR_GROUP_INFO
{
648 UCHAR MaximumProcessorCount
;
649 UCHAR ActiveProcessorCount
;
651 KAFFINITY ActiveProcessorMask
;
652 } PROCESSOR_GROUP_INFO
, *PPROCESSOR_GROUP_INFO
;
654 typedef struct _GROUP_RELATIONSHIP
{
655 USHORT MaximumGroupCount
;
656 USHORT ActiveGroupCount
;
658 PROCESSOR_GROUP_INFO GroupInfo
[ANYSIZE_ARRAY
];
659 } GROUP_RELATIONSHIP
, *PGROUP_RELATIONSHIP
;
661 typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX
{
662 LOGICAL_PROCESSOR_RELATIONSHIP Relationship
;
665 PROCESSOR_RELATIONSHIP Processor
;
666 NUMA_NODE_RELATIONSHIP NumaNode
;
667 CACHE_RELATIONSHIP Cache
;
668 GROUP_RELATIONSHIP Group
;
670 } SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX
, *PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX
;;
672 /* Processor features */
673 #define PF_FLOATING_POINT_PRECISION_ERRATA 0
674 #define PF_FLOATING_POINT_EMULATED 1
675 #define PF_COMPARE_EXCHANGE_DOUBLE 2
676 #define PF_MMX_INSTRUCTIONS_AVAILABLE 3
677 #define PF_PPC_MOVEMEM_64BIT_OK 4
678 #define PF_ALPHA_BYTE_INSTRUCTIONS 5
679 #define PF_XMMI_INSTRUCTIONS_AVAILABLE 6
680 #define PF_3DNOW_INSTRUCTIONS_AVAILABLE 7
681 #define PF_RDTSC_INSTRUCTION_AVAILABLE 8
682 #define PF_PAE_ENABLED 9
683 #define PF_XMMI64_INSTRUCTIONS_AVAILABLE 10
684 #define PF_SSE_DAZ_MODE_AVAILABLE 11
685 #define PF_NX_ENABLED 12
686 #define PF_SSE3_INSTRUCTIONS_AVAILABLE 13
687 #define PF_COMPARE_EXCHANGE128 14
688 #define PF_COMPARE64_EXCHANGE128 15
689 #define PF_CHANNELS_ENABLED 16
690 #define PF_XSAVE_ENABLED 17
692 #define MAXIMUM_WAIT_OBJECTS 64
694 #define ASSERT_APC(Object) NT_ASSERT((Object)->Type == ApcObject)
696 #define ASSERT_DPC(Object) \
697 ASSERT(((Object)->Type == 0) || \
698 ((Object)->Type == DpcObject) || \
699 ((Object)->Type == ThreadedDpcObject))
701 #define ASSERT_GATE(object) \
702 NT_ASSERT((((object)->Header.Type & KOBJECT_TYPE_MASK) == GateObject) || \
703 (((object)->Header.Type & KOBJECT_TYPE_MASK) == EventSynchronizationObject))
705 #define ASSERT_DEVICE_QUEUE(Object) \
706 NT_ASSERT((Object)->Type == DeviceQueueObject)
708 #define ASSERT_TIMER(E) \
709 NT_ASSERT(((E)->Header.Type == TimerNotificationObject) || \
710 ((E)->Header.Type == TimerSynchronizationObject))
712 #define ASSERT_MUTANT(E) \
713 NT_ASSERT((E)->Header.Type == MutantObject)
715 #define ASSERT_SEMAPHORE(E) \
716 NT_ASSERT((E)->Header.Type == SemaphoreObject)
718 #define ASSERT_EVENT(E) \
719 NT_ASSERT(((E)->Header.Type == NotificationEvent) || \
720 ((E)->Header.Type == SynchronizationEvent))
723 #define DPC_THREADED 1
725 #define GM_LOCK_BIT 0x1
726 #define GM_LOCK_BIT_V 0x0
727 #define GM_LOCK_WAITER_WOKEN 0x2
728 #define GM_LOCK_WAITER_INC 0x4
730 #define LOCK_QUEUE_WAIT_BIT 0
731 #define LOCK_QUEUE_OWNER_BIT 1
733 #define LOCK_QUEUE_WAIT 1
734 #define LOCK_QUEUE_OWNER 2
735 #define LOCK_QUEUE_TIMER_LOCK_SHIFT 4
736 #define LOCK_QUEUE_TIMER_TABLE_LOCKS (1 << (8 - LOCK_QUEUE_TIMER_LOCK_SHIFT))
738 #define PROCESSOR_FEATURE_MAX 64
740 #define DBG_STATUS_CONTROL_C 1
741 #define DBG_STATUS_SYSRQ 2
742 #define DBG_STATUS_BUGCHECK_FIRST 3
743 #define DBG_STATUS_BUGCHECK_SECOND 4
744 #define DBG_STATUS_FATAL 5
745 #define DBG_STATUS_DEBUG_CONTROL 6
746 #define DBG_STATUS_WORKER 7
749 #define MAXIMUM_PROC_PER_GROUP 64
751 #define MAXIMUM_PROC_PER_GROUP 32
753 #define MAXIMUM_PROCESSORS MAXIMUM_PROC_PER_GROUP
755 /* Exception Records */
756 #define EXCEPTION_NONCONTINUABLE 1
757 #define EXCEPTION_MAXIMUM_PARAMETERS 15
759 #define EXCEPTION_DIVIDED_BY_ZERO 0
760 #define EXCEPTION_DEBUG 1
761 #define EXCEPTION_NMI 2
762 #define EXCEPTION_INT3 3
763 #define EXCEPTION_BOUND_CHECK 5
764 #define EXCEPTION_INVALID_OPCODE 6
765 #define EXCEPTION_NPX_NOT_AVAILABLE 7
766 #define EXCEPTION_DOUBLE_FAULT 8
767 #define EXCEPTION_NPX_OVERRUN 9
768 #define EXCEPTION_INVALID_TSS 0x0A
769 #define EXCEPTION_SEGMENT_NOT_PRESENT 0x0B
770 #define EXCEPTION_STACK_FAULT 0x0C
771 #define EXCEPTION_GP_FAULT 0x0D
772 #define EXCEPTION_RESERVED_TRAP 0x0F
773 #define EXCEPTION_NPX_ERROR 0x010
774 #define EXCEPTION_ALIGNMENT_CHECK 0x011
776 typedef struct _EXCEPTION_RECORD
{
777 NTSTATUS ExceptionCode
;
778 ULONG ExceptionFlags
;
779 struct _EXCEPTION_RECORD
*ExceptionRecord
;
780 PVOID ExceptionAddress
;
781 ULONG NumberParameters
;
782 ULONG_PTR ExceptionInformation
[EXCEPTION_MAXIMUM_PARAMETERS
];
783 } EXCEPTION_RECORD
, *PEXCEPTION_RECORD
;
785 typedef struct _EXCEPTION_RECORD32
{
786 NTSTATUS ExceptionCode
;
787 ULONG ExceptionFlags
;
788 ULONG ExceptionRecord
;
789 ULONG ExceptionAddress
;
790 ULONG NumberParameters
;
791 ULONG ExceptionInformation
[EXCEPTION_MAXIMUM_PARAMETERS
];
792 } EXCEPTION_RECORD32
, *PEXCEPTION_RECORD32
;
794 typedef struct _EXCEPTION_RECORD64
{
795 NTSTATUS ExceptionCode
;
796 ULONG ExceptionFlags
;
797 ULONG64 ExceptionRecord
;
798 ULONG64 ExceptionAddress
;
799 ULONG NumberParameters
;
800 ULONG __unusedAlignment
;
801 ULONG64 ExceptionInformation
[EXCEPTION_MAXIMUM_PARAMETERS
];
802 } EXCEPTION_RECORD64
, *PEXCEPTION_RECORD64
;
804 typedef struct _EXCEPTION_POINTERS
{
805 PEXCEPTION_RECORD ExceptionRecord
;
806 PCONTEXT ContextRecord
;
807 } EXCEPTION_POINTERS
, *PEXCEPTION_POINTERS
;
809 typedef enum _KBUGCHECK_CALLBACK_REASON
{
812 KbCallbackSecondaryDumpData
,
815 } KBUGCHECK_CALLBACK_REASON
;
817 struct _KBUGCHECK_REASON_CALLBACK_RECORD
;
820 (NTAPI KBUGCHECK_REASON_CALLBACK_ROUTINE
)(
821 IN KBUGCHECK_CALLBACK_REASON Reason
,
822 IN
struct _KBUGCHECK_REASON_CALLBACK_RECORD
*Record
,
823 IN OUT PVOID ReasonSpecificData
,
824 IN ULONG ReasonSpecificDataLength
);
825 typedef KBUGCHECK_REASON_CALLBACK_ROUTINE
*PKBUGCHECK_REASON_CALLBACK_ROUTINE
;
827 typedef struct _KBUGCHECK_ADD_PAGES
{
828 IN OUT PVOID Context
;
830 IN ULONG BugCheckCode
;
831 OUT ULONG_PTR Address
;
833 } KBUGCHECK_ADD_PAGES
, *PKBUGCHECK_ADD_PAGES
;
835 typedef struct _KBUGCHECK_SECONDARY_DUMP_DATA
{
837 IN ULONG InBufferLength
;
838 IN ULONG MaximumAllowed
;
841 OUT ULONG OutBufferLength
;
842 } KBUGCHECK_SECONDARY_DUMP_DATA
, *PKBUGCHECK_SECONDARY_DUMP_DATA
;
844 typedef enum _KBUGCHECK_DUMP_IO_TYPE
{
848 KbDumpIoSecondaryData
,
850 } KBUGCHECK_DUMP_IO_TYPE
;
852 typedef struct _KBUGCHECK_DUMP_IO
{
855 IN ULONG BufferLength
;
856 IN KBUGCHECK_DUMP_IO_TYPE Type
;
857 } KBUGCHECK_DUMP_IO
, *PKBUGCHECK_DUMP_IO
;
859 #define KB_ADD_PAGES_FLAG_VIRTUAL_ADDRESS 0x00000001UL
860 #define KB_ADD_PAGES_FLAG_PHYSICAL_ADDRESS 0x00000002UL
861 #define KB_ADD_PAGES_FLAG_ADDITIONAL_RANGES_EXIST 0x80000000UL
863 typedef struct _KBUGCHECK_REASON_CALLBACK_RECORD
{
865 PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine
;
868 KBUGCHECK_CALLBACK_REASON Reason
;
870 } KBUGCHECK_REASON_CALLBACK_RECORD
, *PKBUGCHECK_REASON_CALLBACK_RECORD
;
872 typedef enum _KBUGCHECK_BUFFER_DUMP_STATE
{
878 } KBUGCHECK_BUFFER_DUMP_STATE
;
881 (NTAPI KBUGCHECK_CALLBACK_ROUTINE
)(
884 typedef KBUGCHECK_CALLBACK_ROUTINE
*PKBUGCHECK_CALLBACK_ROUTINE
;
886 typedef struct _KBUGCHECK_CALLBACK_RECORD
{
888 PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine
;
894 } KBUGCHECK_CALLBACK_RECORD
, *PKBUGCHECK_CALLBACK_RECORD
;
897 (NTAPI NMI_CALLBACK
)(
900 typedef NMI_CALLBACK
*PNMI_CALLBACK
;
902 typedef enum _KE_PROCESSOR_CHANGE_NOTIFY_STATE
{
903 KeProcessorAddStartNotify
= 0,
904 KeProcessorAddCompleteNotify
,
905 KeProcessorAddFailureNotify
906 } KE_PROCESSOR_CHANGE_NOTIFY_STATE
;
908 typedef struct _KE_PROCESSOR_CHANGE_NOTIFY_CONTEXT
{
909 KE_PROCESSOR_CHANGE_NOTIFY_STATE State
;
912 #if (NTDDI_VERSION >= NTDDI_WIN7)
913 PROCESSOR_NUMBER ProcNumber
;
915 } KE_PROCESSOR_CHANGE_NOTIFY_CONTEXT
, *PKE_PROCESSOR_CHANGE_NOTIFY_CONTEXT
;
918 (NTAPI PROCESSOR_CALLBACK_FUNCTION
)(
919 IN PVOID CallbackContext
,
920 IN PKE_PROCESSOR_CHANGE_NOTIFY_CONTEXT ChangeContext
,
921 IN OUT PNTSTATUS OperationStatus
);
922 typedef PROCESSOR_CALLBACK_FUNCTION
*PPROCESSOR_CALLBACK_FUNCTION
;
924 #define KE_PROCESSOR_CHANGE_ADD_EXISTING 1
926 #define INVALID_PROCESSOR_INDEX 0xffffffff
928 typedef enum _KINTERRUPT_POLARITY
{
929 InterruptPolarityUnknown
,
932 } KINTERRUPT_POLARITY
, *PKINTERRUPT_POLARITY
;
934 typedef enum _KPROFILE_SOURCE
{
936 ProfileAlignmentFixup
,
939 ProfileLoadInstructions
,
940 ProfilePipelineFrozen
,
941 ProfileBranchInstructions
,
942 ProfileTotalNonissues
,
946 ProfileBranchMispredictions
,
947 ProfileStoreInstructions
,
948 ProfileFpInstructions
,
949 ProfileIntegerInstructions
,
953 ProfileSpecialInstructions
,
956 ProfileDcacheAccesses
,
957 ProfileMemoryBarrierCycles
,
958 ProfileLoadLinkedIssues
,
962 typedef enum _KWAIT_REASON
{
1003 typedef struct _KWAIT_BLOCK
{
1004 LIST_ENTRY WaitListEntry
;
1005 struct _KTHREAD
*Thread
;
1007 struct _KWAIT_BLOCK
*NextWaitBlock
;
1010 volatile UCHAR BlockState
;
1014 } KWAIT_BLOCK
, *PKWAIT_BLOCK
, *PRKWAIT_BLOCK
;
1016 typedef enum _KINTERRUPT_MODE
{
1021 #define THREAD_WAIT_OBJECTS 3
1024 (NTAPI KSTART_ROUTINE
)(
1025 IN PVOID StartContext
);
1026 typedef KSTART_ROUTINE
*PKSTART_ROUTINE
;
1029 (NTAPI
*PKINTERRUPT_ROUTINE
)(
1033 (NTAPI KSERVICE_ROUTINE
)(
1034 IN
struct _KINTERRUPT
*Interrupt
,
1035 IN PVOID ServiceContext
);
1036 typedef KSERVICE_ROUTINE
*PKSERVICE_ROUTINE
;
1039 (NTAPI KMESSAGE_SERVICE_ROUTINE
)(
1040 IN
struct _KINTERRUPT
*Interrupt
,
1041 IN PVOID ServiceContext
,
1042 IN ULONG MessageID
);
1043 typedef KMESSAGE_SERVICE_ROUTINE
*PKMESSAGE_SERVICE_ROUTINE
;
1045 typedef enum _KD_OPTION
{
1046 KD_OPTION_SET_BLOCK_ENABLE
,
1050 (NTAPI
*PKNORMAL_ROUTINE
)(
1051 IN PVOID NormalContext OPTIONAL
,
1052 IN PVOID SystemArgument1 OPTIONAL
,
1053 IN PVOID SystemArgument2 OPTIONAL
);
1056 (NTAPI
*PKRUNDOWN_ROUTINE
)(
1057 IN
struct _KAPC
*Apc
);
1060 (NTAPI
*PKKERNEL_ROUTINE
)(
1061 IN
struct _KAPC
*Apc
,
1062 IN OUT PKNORMAL_ROUTINE
*NormalRoutine OPTIONAL
,
1063 IN OUT PVOID
*NormalContext OPTIONAL
,
1064 IN OUT PVOID
*SystemArgument1 OPTIONAL
,
1065 IN OUT PVOID
*SystemArgument2 OPTIONAL
);
1067 typedef struct _KAPC
{
1073 struct _KTHREAD
*Thread
;
1074 LIST_ENTRY ApcListEntry
;
1075 PKKERNEL_ROUTINE KernelRoutine
;
1076 PKRUNDOWN_ROUTINE RundownRoutine
;
1077 PKNORMAL_ROUTINE NormalRoutine
;
1078 PVOID NormalContext
;
1079 PVOID SystemArgument1
;
1080 PVOID SystemArgument2
;
1081 CCHAR ApcStateIndex
;
1082 KPROCESSOR_MODE ApcMode
;
1084 } KAPC
, *PKAPC
, *RESTRICTED_POINTER PRKAPC
;
1086 #define KAPC_OFFSET_TO_SPARE_BYTE0 FIELD_OFFSET(KAPC, SpareByte0)
1087 #define KAPC_OFFSET_TO_SPARE_BYTE1 FIELD_OFFSET(KAPC, SpareByte1)
1088 #define KAPC_OFFSET_TO_SPARE_LONG FIELD_OFFSET(KAPC, SpareLong0)
1089 #define KAPC_OFFSET_TO_SYSTEMARGUMENT1 FIELD_OFFSET(KAPC, SystemArgument1)
1090 #define KAPC_OFFSET_TO_SYSTEMARGUMENT2 FIELD_OFFSET(KAPC, SystemArgument2)
1091 #define KAPC_OFFSET_TO_APCSTATEINDEX FIELD_OFFSET(KAPC, ApcStateIndex)
1092 #define KAPC_ACTUAL_LENGTH (FIELD_OFFSET(KAPC, Inserted) + sizeof(BOOLEAN))
1094 typedef struct _KDEVICE_QUEUE_ENTRY
{
1095 LIST_ENTRY DeviceListEntry
;
1098 } KDEVICE_QUEUE_ENTRY
, *PKDEVICE_QUEUE_ENTRY
,
1099 *RESTRICTED_POINTER PRKDEVICE_QUEUE_ENTRY
;
1101 typedef PVOID PKIPI_CONTEXT
;
1104 (NTAPI
*PKIPI_WORKER
)(
1105 IN OUT PKIPI_CONTEXT PacketContext
,
1106 IN PVOID Parameter1 OPTIONAL
,
1107 IN PVOID Parameter2 OPTIONAL
,
1108 IN PVOID Parameter3 OPTIONAL
);
1110 typedef struct _KIPI_COUNTS
{
1115 ULONG FlushSingleTb
;
1116 ULONG FlushMultipleTb
;
1117 ULONG FlushEntireTb
;
1122 ULONG SweepIcacheRange
;
1123 ULONG FlushIoBuffers
;
1124 ULONG GratuitousDPC
;
1125 } KIPI_COUNTS
, *PKIPI_COUNTS
;
1128 (NTAPI KIPI_BROADCAST_WORKER
)(
1129 IN ULONG_PTR Argument
);
1130 typedef KIPI_BROADCAST_WORKER
*PKIPI_BROADCAST_WORKER
;
1132 typedef ULONG_PTR KSPIN_LOCK
, *PKSPIN_LOCK
;
1134 typedef struct _KSPIN_LOCK_QUEUE
{
1135 struct _KSPIN_LOCK_QUEUE
*volatile Next
;
1136 PKSPIN_LOCK
volatile Lock
;
1137 } KSPIN_LOCK_QUEUE
, *PKSPIN_LOCK_QUEUE
;
1139 typedef struct _KLOCK_QUEUE_HANDLE
{
1140 KSPIN_LOCK_QUEUE LockQueue
;
1142 } KLOCK_QUEUE_HANDLE
, *PKLOCK_QUEUE_HANDLE
;
1144 #if defined(_AMD64_)
1146 typedef ULONG64 KSPIN_LOCK_QUEUE_NUMBER
;
1148 #define LockQueueDispatcherLock 0
1149 #define LockQueueExpansionLock 1
1150 #define LockQueuePfnLock 2
1151 #define LockQueueSystemSpaceLock 3
1152 #define LockQueueVacbLock 4
1153 #define LockQueueMasterLock 5
1154 #define LockQueueNonPagedPoolLock 6
1155 #define LockQueueIoCancelLock 7
1156 #define LockQueueWorkQueueLock 8
1157 #define LockQueueIoVpbLock 9
1158 #define LockQueueIoDatabaseLock 10
1159 #define LockQueueIoCompletionLock 11
1160 #define LockQueueNtfsStructLock 12
1161 #define LockQueueAfdWorkQueueLock 13
1162 #define LockQueueBcbLock 14
1163 #define LockQueueMmNonPagedPoolLock 15
1164 #define LockQueueUnusedSpare16 16
1165 #define LockQueueTimerTableLock 17
1166 #define LockQueueMaximumLock (LockQueueTimerTableLock + LOCK_QUEUE_TIMER_TABLE_LOCKS)
1170 typedef enum _KSPIN_LOCK_QUEUE_NUMBER
{
1171 LockQueueDispatcherLock
,
1172 LockQueueExpansionLock
,
1174 LockQueueSystemSpaceLock
,
1176 LockQueueMasterLock
,
1177 LockQueueNonPagedPoolLock
,
1178 LockQueueIoCancelLock
,
1179 LockQueueWorkQueueLock
,
1181 LockQueueIoDatabaseLock
,
1182 LockQueueIoCompletionLock
,
1183 LockQueueNtfsStructLock
,
1184 LockQueueAfdWorkQueueLock
,
1186 LockQueueMmNonPagedPoolLock
,
1187 LockQueueUnusedSpare16
,
1188 LockQueueTimerTableLock
,
1189 LockQueueMaximumLock
= LockQueueTimerTableLock
+ LOCK_QUEUE_TIMER_TABLE_LOCKS
1190 } KSPIN_LOCK_QUEUE_NUMBER
, *PKSPIN_LOCK_QUEUE_NUMBER
;
1192 #endif /* defined(_AMD64_) */
1195 (NTAPI
*PKDEFERRED_ROUTINE
)(
1196 IN
struct _KDPC
*Dpc
,
1197 IN PVOID DeferredContext OPTIONAL
,
1198 IN PVOID SystemArgument1 OPTIONAL
,
1199 IN PVOID SystemArgument2 OPTIONAL
);
1201 typedef enum _KDPC_IMPORTANCE
{
1205 MediumHighImportance
1208 typedef struct _KDPC
{
1211 volatile USHORT Number
;
1212 LIST_ENTRY DpcListEntry
;
1213 PKDEFERRED_ROUTINE DeferredRoutine
;
1214 PVOID DeferredContext
;
1215 PVOID SystemArgument1
;
1216 PVOID SystemArgument2
;
1217 volatile PVOID DpcData
;
1218 } KDPC
, *PKDPC
, *RESTRICTED_POINTER PRKDPC
;
1220 typedef struct _KDPC_WATCHDOG_INFORMATION
{
1223 ULONG DpcWatchdogLimit
;
1224 ULONG DpcWatchdogCount
;
1226 } KDPC_WATCHDOG_INFORMATION
, *PKDPC_WATCHDOG_INFORMATION
;
1228 typedef struct _KDEVICE_QUEUE
{
1231 LIST_ENTRY DeviceListHead
;
1233 #if defined(_AMD64_)
1244 } KDEVICE_QUEUE
, *PKDEVICE_QUEUE
, *RESTRICTED_POINTER PRKDEVICE_QUEUE
;
1246 #define TIMER_EXPIRED_INDEX_BITS 6
1247 #define TIMER_PROCESSOR_INDEX_BITS 5
1249 typedef struct _DISPATCHER_HEADER
{
1250 _ANONYMOUS_UNION
union {
1251 _ANONYMOUS_STRUCT
struct {
1253 _ANONYMOUS_UNION
union {
1254 _ANONYMOUS_UNION
union {
1255 UCHAR TimerControlFlags
;
1256 _ANONYMOUS_STRUCT
struct {
1258 UCHAR Coalescable
:1;
1259 UCHAR KeepShifting
:1;
1260 UCHAR EncodedTolerableDelay
:5;
1264 #if (NTDDI_VERSION < NTDDI_WIN7)
1269 _ANONYMOUS_UNION
union {
1270 _ANONYMOUS_UNION
union {
1271 UCHAR ThreadControlFlags
;
1272 _ANONYMOUS_STRUCT
struct {
1273 UCHAR CpuThrottled
:1;
1274 UCHAR CycleProfiling
:1;
1275 UCHAR CounterProfiling
:1;
1282 _ANONYMOUS_UNION
union {
1283 #if (NTDDI_VERSION >= NTDDI_WIN7)
1284 _ANONYMOUS_UNION
union {
1285 UCHAR TimerMiscFlags
;
1286 _ANONYMOUS_STRUCT
struct {
1288 UCHAR Index
:TIMER_EXPIRED_INDEX_BITS
;
1291 UCHAR Processor
:TIMER_PROCESSOR_INDEX_BITS
;
1294 volatile UCHAR Expired
:1;
1298 /* Pre Win7 compatibility fix to latest WDK */
1301 _ANONYMOUS_UNION
union {
1302 BOOLEAN DebugActive
;
1303 _ANONYMOUS_STRUCT
struct {
1304 BOOLEAN ActiveDR7
:1;
1305 BOOLEAN Instrumented
:1;
1306 BOOLEAN Reserved2
:4;
1307 BOOLEAN UmsScheduled
:1;
1308 BOOLEAN UmsPrimary
:1;
1310 } DUMMYUNIONNAME
; /* should probably be DUMMYUNIONNAME2, but this is what WDK says */
1317 LIST_ENTRY WaitListHead
;
1318 } DISPATCHER_HEADER
, *PDISPATCHER_HEADER
;
1320 typedef struct _KEVENT
{
1321 DISPATCHER_HEADER Header
;
1322 } KEVENT
, *PKEVENT
, *RESTRICTED_POINTER PRKEVENT
;
1324 typedef struct _KSEMAPHORE
{
1325 DISPATCHER_HEADER Header
;
1327 } KSEMAPHORE
, *PKSEMAPHORE
, *RESTRICTED_POINTER PRKSEMAPHORE
;
1329 #define KSEMAPHORE_ACTUAL_LENGTH (FIELD_OFFSET(KSEMAPHORE, Limit) + sizeof(LONG))
1331 typedef struct _KGATE
{
1332 DISPATCHER_HEADER Header
;
1333 } KGATE
, *PKGATE
, *RESTRICTED_POINTER PRKGATE
;
1335 typedef struct _KGUARDED_MUTEX
{
1336 volatile LONG Count
;
1340 __GNU_EXTENSION
union {
1341 __GNU_EXTENSION
struct {
1342 SHORT KernelApcDisable
;
1343 SHORT SpecialApcDisable
;
1345 ULONG CombinedApcDisable
;
1347 } KGUARDED_MUTEX
, *PKGUARDED_MUTEX
;
1349 typedef struct _KMUTANT
{
1350 DISPATCHER_HEADER Header
;
1351 LIST_ENTRY MutantListEntry
;
1352 struct _KTHREAD
*RESTRICTED_POINTER OwnerThread
;
1355 } KMUTANT
, *PKMUTANT
, *RESTRICTED_POINTER PRKMUTANT
, KMUTEX
, *PKMUTEX
, *RESTRICTED_POINTER PRKMUTEX
;
1357 #define TIMER_TABLE_SIZE 512
1358 #define TIMER_TABLE_SHIFT 9
1360 typedef struct _KTIMER
{
1361 DISPATCHER_HEADER Header
;
1362 ULARGE_INTEGER DueTime
;
1363 LIST_ENTRY TimerListEntry
;
1369 } KTIMER
, *PKTIMER
, *RESTRICTED_POINTER PRKTIMER
;
1371 typedef enum _LOCK_OPERATION
{
1377 #define KTIMER_ACTUAL_LENGTH (FIELD_OFFSET(KTIMER, Period) + sizeof(LONG))
1380 (NTAPI
*PKSYNCHRONIZE_ROUTINE
)(
1381 IN PVOID SynchronizeContext
);
1383 typedef enum _POOL_TYPE
{
1386 NonPagedPoolMustSucceed
,
1388 NonPagedPoolCacheAligned
,
1389 PagedPoolCacheAligned
,
1390 NonPagedPoolCacheAlignedMustS
,
1392 NonPagedPoolSession
= 32,
1394 NonPagedPoolMustSucceedSession
,
1395 DontUseThisTypeSession
,
1396 NonPagedPoolCacheAlignedSession
,
1397 PagedPoolCacheAlignedSession
,
1398 NonPagedPoolCacheAlignedMustSSession
1401 typedef enum _ALTERNATIVE_ARCHITECTURE_TYPE
{
1405 } ALTERNATIVE_ARCHITECTURE_TYPE
;
1410 #define IsNEC_98 (FALSE)
1414 #define IsNotNEC_98 (TRUE)
1421 #ifndef SetNotNEC_98
1422 #define SetNotNEC_98
1427 typedef struct _KSYSTEM_TIME
{
1431 } KSYSTEM_TIME
, *PKSYSTEM_TIME
;
1433 typedef struct DECLSPEC_ALIGN(16) _M128A
{
1438 typedef struct DECLSPEC_ALIGN(16) _XSAVE_FORMAT
{
1445 USHORT ErrorSelector
;
1448 USHORT DataSelector
;
1452 M128A FloatRegisters
[8];
1454 M128A XmmRegisters
[16];
1455 UCHAR Reserved4
[96];
1457 M128A XmmRegisters
[8];
1458 UCHAR Reserved4
[192];
1459 ULONG StackControl
[7];
1462 } XSAVE_FORMAT
, *PXSAVE_FORMAT
;
1464 typedef struct DECLSPEC_ALIGN(8) _XSAVE_AREA_HEADER
{
1466 ULONG64 Reserved
[7];
1467 } XSAVE_AREA_HEADER
, *PXSAVE_AREA_HEADER
;
1469 typedef struct DECLSPEC_ALIGN(16) _XSAVE_AREA
{
1470 XSAVE_FORMAT LegacyState
;
1471 XSAVE_AREA_HEADER Header
;
1472 } XSAVE_AREA
, *PXSAVE_AREA
;
1474 typedef struct _XSTATE_CONTEXT
{
1486 } XSTATE_CONTEXT
, *PXSTATE_CONTEXT
;
1488 typedef struct _XSTATE_SAVE
{
1489 #if defined(_AMD64_)
1490 struct _XSTATE_SAVE
* Prev
;
1491 struct _KTHREAD
* Thread
;
1493 XSTATE_CONTEXT XStateContext
;
1494 #elif defined(_IA64_)
1496 #elif defined(_X86_)
1501 struct _XSTATE_SAVE
* Prev
;
1502 PXSAVE_AREA Reserved3
;
1503 struct _KTHREAD
* Thread
;
1507 XSTATE_CONTEXT XStateContext
;
1510 } XSTATE_SAVE
, *PXSTATE_SAVE
;
1514 #define MAXIMUM_SUPPORTED_EXTENSION 512
1516 #if !defined(__midl) && !defined(MIDL_PASS)
1517 C_ASSERT(sizeof(XSAVE_FORMAT
) == MAXIMUM_SUPPORTED_EXTENSION
);
1522 #define XSAVE_ALIGN 64
1523 #define MINIMAL_XSTATE_AREA_LENGTH sizeof(XSAVE_AREA)
1525 #if !defined(__midl) && !defined(MIDL_PASS)
1526 C_ASSERT((sizeof(XSAVE_FORMAT
) & (XSAVE_ALIGN
- 1)) == 0);
1527 C_ASSERT((FIELD_OFFSET(XSAVE_AREA
, Header
) & (XSAVE_ALIGN
- 1)) == 0);
1528 C_ASSERT(MINIMAL_XSTATE_AREA_LENGTH
== 512 + 64);
1531 typedef struct _CONTEXT_CHUNK
{
1534 } CONTEXT_CHUNK
, *PCONTEXT_CHUNK
;
1536 typedef struct _CONTEXT_EX
{
1538 CONTEXT_CHUNK Legacy
;
1539 CONTEXT_CHUNK XState
;
1540 } CONTEXT_EX
, *PCONTEXT_EX
;
1542 #define CONTEXT_EX_LENGTH ALIGN_UP_BY(sizeof(CONTEXT_EX), STACK_ALIGN)
1544 #if (NTDDI_VERSION >= NTDDI_VISTA)
1545 extern NTSYSAPI
volatile CCHAR KeNumberProcessors
;
1546 #elif (NTDDI_VERSION >= NTDDI_WINXP)
1547 extern NTSYSAPI CCHAR KeNumberProcessors
;
1549 extern PCCHAR KeNumberProcessors
;
1553 /******************************************************************************
1554 * Memory manager Types *
1555 ******************************************************************************/
1557 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1558 typedef ULONG NODE_REQUIREMENT
;
1559 #define MM_ANY_NODE_OK 0x80000000
1562 #define MM_DONT_ZERO_ALLOCATION 0x00000001
1563 #define MM_ALLOCATE_FROM_LOCAL_NODE_ONLY 0x00000002
1564 #define MM_ALLOCATE_FULLY_REQUIRED 0x00000004
1565 #define MM_ALLOCATE_NO_WAIT 0x00000008
1566 #define MM_ALLOCATE_PREFER_CONTIGUOUS 0x00000010
1567 #define MM_ALLOCATE_REQUIRE_CONTIGUOUS_CHUNKS 0x00000020
1569 #define MDL_MAPPED_TO_SYSTEM_VA 0x0001
1570 #define MDL_PAGES_LOCKED 0x0002
1571 #define MDL_SOURCE_IS_NONPAGED_POOL 0x0004
1572 #define MDL_ALLOCATED_FIXED_SIZE 0x0008
1573 #define MDL_PARTIAL 0x0010
1574 #define MDL_PARTIAL_HAS_BEEN_MAPPED 0x0020
1575 #define MDL_IO_PAGE_READ 0x0040
1576 #define MDL_WRITE_OPERATION 0x0080
1577 #define MDL_PARENT_MAPPED_SYSTEM_VA 0x0100
1578 #define MDL_FREE_EXTRA_PTES 0x0200
1579 #define MDL_DESCRIBES_AWE 0x0400
1580 #define MDL_IO_SPACE 0x0800
1581 #define MDL_NETWORK_HEADER 0x1000
1582 #define MDL_MAPPING_CAN_FAIL 0x2000
1583 #define MDL_ALLOCATED_MUST_SUCCEED 0x4000
1584 #define MDL_INTERNAL 0x8000
1586 #define MDL_MAPPING_FLAGS ( \
1587 MDL_MAPPED_TO_SYSTEM_VA | \
1588 MDL_PAGES_LOCKED | \
1589 MDL_SOURCE_IS_NONPAGED_POOL | \
1590 MDL_PARTIAL_HAS_BEEN_MAPPED | \
1591 MDL_PARENT_MAPPED_SYSTEM_VA | \
1595 #define FLUSH_MULTIPLE_MAXIMUM 32
1597 /* Section access rights */
1598 #define SECTION_QUERY 0x0001
1599 #define SECTION_MAP_WRITE 0x0002
1600 #define SECTION_MAP_READ 0x0004
1601 #define SECTION_MAP_EXECUTE 0x0008
1602 #define SECTION_EXTEND_SIZE 0x0010
1603 #define SECTION_MAP_EXECUTE_EXPLICIT 0x0020
1605 #define SECTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SECTION_QUERY|\
1606 SECTION_MAP_WRITE | \
1607 SECTION_MAP_READ | \
1608 SECTION_MAP_EXECUTE | \
1609 SECTION_EXTEND_SIZE)
1611 #define SESSION_QUERY_ACCESS 0x0001
1612 #define SESSION_MODIFY_ACCESS 0x0002
1614 #define SESSION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | \
1615 SESSION_QUERY_ACCESS | \
1616 SESSION_MODIFY_ACCESS)
1618 #define SEGMENT_ALL_ACCESS SECTION_ALL_ACCESS
1620 #define PAGE_NOACCESS 0x01
1621 #define PAGE_READONLY 0x02
1622 #define PAGE_READWRITE 0x04
1623 #define PAGE_WRITECOPY 0x08
1624 #define PAGE_EXECUTE 0x10
1625 #define PAGE_EXECUTE_READ 0x20
1626 #define PAGE_EXECUTE_READWRITE 0x40
1627 #define PAGE_EXECUTE_WRITECOPY 0x80
1628 #define PAGE_GUARD 0x100
1629 #define PAGE_NOCACHE 0x200
1630 #define PAGE_WRITECOMBINE 0x400
1632 #define MEM_COMMIT 0x1000
1633 #define MEM_RESERVE 0x2000
1634 #define MEM_DECOMMIT 0x4000
1635 #define MEM_RELEASE 0x8000
1636 #define MEM_FREE 0x10000
1637 #define MEM_PRIVATE 0x20000
1638 #define MEM_MAPPED 0x40000
1639 #define MEM_RESET 0x80000
1640 #define MEM_TOP_DOWN 0x100000
1641 #define MEM_LARGE_PAGES 0x20000000
1642 #define MEM_4MB_PAGES 0x80000000
1644 #define SEC_RESERVE 0x4000000
1645 #define SEC_COMMIT 0x8000000
1646 #define SEC_LARGE_PAGES 0x80000000
1648 /* Section map options */
1649 typedef enum _SECTION_INHERIT
{
1654 typedef ULONG PFN_COUNT
;
1655 typedef LONG_PTR SPFN_NUMBER
, *PSPFN_NUMBER
;
1656 typedef ULONG_PTR PFN_NUMBER
, *PPFN_NUMBER
;
1658 typedef struct _MDL
{
1662 struct _EPROCESS
*Process
;
1663 PVOID MappedSystemVa
;
1670 typedef enum _MEMORY_CACHING_TYPE_ORIG
{
1671 MmFrameBufferCached
= 2
1672 } MEMORY_CACHING_TYPE_ORIG
;
1674 typedef enum _MEMORY_CACHING_TYPE
{
1675 MmNonCached
= FALSE
,
1677 MmWriteCombined
= MmFrameBufferCached
,
1678 MmHardwareCoherentCached
,
1679 MmNonCachedUnordered
,
1682 } MEMORY_CACHING_TYPE
;
1684 typedef enum _MM_PAGE_PRIORITY
{
1686 NormalPagePriority
= 16,
1687 HighPagePriority
= 32
1690 typedef enum _MM_SYSTEM_SIZE
{
1696 extern NTKERNELAPI BOOLEAN Mm64BitPhysicalAddress
;
1697 extern PVOID MmBadPointer
;
1700 /******************************************************************************
1702 ******************************************************************************/
1704 #define EX_RUNDOWN_ACTIVE 0x1
1705 #define EX_RUNDOWN_COUNT_SHIFT 0x1
1706 #define EX_RUNDOWN_COUNT_INC (1 << EX_RUNDOWN_COUNT_SHIFT)
1708 typedef struct _FAST_MUTEX
{
1709 volatile LONG Count
;
1714 } FAST_MUTEX
, *PFAST_MUTEX
;
1716 typedef enum _SUITE_TYPE
{
1720 CommunicationServer
,
1722 SmallBusinessRestricted
,
1736 typedef enum _EX_POOL_PRIORITY
{
1738 LowPoolPrioritySpecialPoolOverrun
= 8,
1739 LowPoolPrioritySpecialPoolUnderrun
= 9,
1740 NormalPoolPriority
= 16,
1741 NormalPoolPrioritySpecialPoolOverrun
= 24,
1742 NormalPoolPrioritySpecialPoolUnderrun
= 25,
1743 HighPoolPriority
= 32,
1744 HighPoolPrioritySpecialPoolOverrun
= 40,
1745 HighPoolPrioritySpecialPoolUnderrun
= 41
1748 #if !defined(_WIN64) && (defined(_NTDDK_) || defined(_NTIFS_) || defined(_NDIS_))
1749 #define LOOKASIDE_ALIGN
1751 #define LOOKASIDE_ALIGN /* FIXME: DECLSPEC_CACHEALIGN */
1754 typedef struct _LOOKASIDE_LIST_EX
*PLOOKASIDE_LIST_EX
;
1757 (NTAPI
*PALLOCATE_FUNCTION
)(
1758 IN POOL_TYPE PoolType
,
1759 IN SIZE_T NumberOfBytes
,
1763 (NTAPI
*PALLOCATE_FUNCTION_EX
)(
1764 IN POOL_TYPE PoolType
,
1765 IN SIZE_T NumberOfBytes
,
1767 IN OUT PLOOKASIDE_LIST_EX Lookaside
);
1770 (NTAPI
*PFREE_FUNCTION
)(
1774 (NTAPI
*PFREE_FUNCTION_EX
)(
1776 IN OUT PLOOKASIDE_LIST_EX Lookaside
);
1779 (NTAPI CALLBACK_FUNCTION
)(
1780 IN PVOID CallbackContext OPTIONAL
,
1781 IN PVOID Argument1 OPTIONAL
,
1782 IN PVOID Argument2 OPTIONAL
);
1783 typedef CALLBACK_FUNCTION
*PCALLBACK_FUNCTION
;
1785 #define GENERAL_LOOKASIDE_LAYOUT \
1787 SLIST_HEADER ListHead; \
1788 SINGLE_LIST_ENTRY SingleListHead; \
1791 USHORT MaximumDepth; \
1792 ULONG TotalAllocates; \
1794 ULONG AllocateMisses; \
1795 ULONG AllocateHits; \
1796 } DUMMYUNIONNAME2; \
1802 } DUMMYUNIONNAME3; \
1808 PALLOCATE_FUNCTION_EX AllocateEx; \
1809 PALLOCATE_FUNCTION Allocate; \
1810 } DUMMYUNIONNAME4; \
1813 PFREE_FUNCTION_EX FreeEx; \
1814 PFREE_FUNCTION Free; \
1815 } DUMMYUNIONNAME5; \
1817 LIST_ENTRY ListEntry; \
1818 ULONG LastTotalAllocates; \
1820 ULONG LastAllocateMisses; \
1821 ULONG LastAllocateHits; \
1822 } DUMMYUNIONNAME6; \
1825 typedef struct LOOKASIDE_ALIGN _GENERAL_LOOKASIDE
{
1826 GENERAL_LOOKASIDE_LAYOUT
1827 } GENERAL_LOOKASIDE
, *PGENERAL_LOOKASIDE
;
1829 typedef struct _GENERAL_LOOKASIDE_POOL
{
1830 GENERAL_LOOKASIDE_LAYOUT
1831 } GENERAL_LOOKASIDE_POOL
, *PGENERAL_LOOKASIDE_POOL
;
1833 #define LOOKASIDE_CHECK(f) \
1834 C_ASSERT(FIELD_OFFSET(GENERAL_LOOKASIDE,f) == FIELD_OFFSET(GENERAL_LOOKASIDE_POOL,f))
1836 LOOKASIDE_CHECK(TotalFrees
);
1837 LOOKASIDE_CHECK(Tag
);
1838 LOOKASIDE_CHECK(Future
);
1840 typedef struct _PAGED_LOOKASIDE_LIST
{
1841 GENERAL_LOOKASIDE L
;
1842 #if !defined(_AMD64_) && !defined(_IA64_)
1843 FAST_MUTEX Lock__ObsoleteButDoNotDelete
;
1845 } PAGED_LOOKASIDE_LIST
, *PPAGED_LOOKASIDE_LIST
;
1847 typedef struct LOOKASIDE_ALIGN _NPAGED_LOOKASIDE_LIST
{
1848 GENERAL_LOOKASIDE L
;
1849 #if !defined(_AMD64_) && !defined(_IA64_)
1850 KSPIN_LOCK Lock__ObsoleteButDoNotDelete
;
1852 } NPAGED_LOOKASIDE_LIST
, *PNPAGED_LOOKASIDE_LIST
;
1854 #define LOOKASIDE_MINIMUM_BLOCK_SIZE (RTL_SIZEOF_THROUGH_FIELD (SLIST_ENTRY, Next))
1856 typedef struct _LOOKASIDE_LIST_EX
{
1857 GENERAL_LOOKASIDE_POOL L
;
1858 } LOOKASIDE_LIST_EX
;
1860 #if (NTDDI_VERSION >= NTDDI_VISTA)
1862 #define EX_LOOKASIDE_LIST_EX_FLAGS_RAISE_ON_FAIL 0x00000001UL
1863 #define EX_LOOKASIDE_LIST_EX_FLAGS_FAIL_NO_RAISE 0x00000002UL
1865 #define EX_MAXIMUM_LOOKASIDE_DEPTH_BASE 256
1866 #define EX_MAXIMUM_LOOKASIDE_DEPTH_LIMIT 1024
1868 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
1870 typedef struct _EX_RUNDOWN_REF
{
1871 __GNU_EXTENSION
union {
1872 volatile ULONG_PTR Count
;
1875 } EX_RUNDOWN_REF
, *PEX_RUNDOWN_REF
;
1877 typedef struct _EX_RUNDOWN_REF_CACHE_AWARE
*PEX_RUNDOWN_REF_CACHE_AWARE
;
1879 typedef enum _WORK_QUEUE_TYPE
{
1882 HyperCriticalWorkQueue
,
1887 (NTAPI WORKER_THREAD_ROUTINE
)(
1888 IN PVOID Parameter
);
1889 typedef WORKER_THREAD_ROUTINE
*PWORKER_THREAD_ROUTINE
;
1891 typedef struct _WORK_QUEUE_ITEM
{
1893 PWORKER_THREAD_ROUTINE WorkerRoutine
;
1894 volatile PVOID Parameter
;
1895 } WORK_QUEUE_ITEM
, *PWORK_QUEUE_ITEM
;
1897 typedef ULONG_PTR ERESOURCE_THREAD
, *PERESOURCE_THREAD
;
1899 typedef struct _OWNER_ENTRY
{
1900 ERESOURCE_THREAD OwnerThread
;
1903 ULONG IoPriorityBoosted
:1;
1904 ULONG OwnerReferenced
:1;
1905 ULONG OwnerCount
:30;
1909 } OWNER_ENTRY
, *POWNER_ENTRY
;
1911 typedef struct _ERESOURCE
{
1912 LIST_ENTRY SystemResourcesList
;
1913 POWNER_ENTRY OwnerTable
;
1916 volatile PKSEMAPHORE SharedWaiters
;
1917 volatile PKEVENT ExclusiveWaiters
;
1918 OWNER_ENTRY OwnerEntry
;
1919 ULONG ActiveEntries
;
1920 ULONG ContentionCount
;
1921 ULONG NumberOfSharedWaiters
;
1922 ULONG NumberOfExclusiveWaiters
;
1926 __GNU_EXTENSION
union {
1928 ULONG_PTR CreatorBackTraceIndex
;
1930 KSPIN_LOCK SpinLock
;
1931 } ERESOURCE
, *PERESOURCE
;
1933 /* ERESOURCE.Flag */
1934 #define ResourceNeverExclusive 0x0010
1935 #define ResourceReleaseByOtherThread 0x0020
1936 #define ResourceOwnedExclusive 0x0080
1938 #define RESOURCE_HASH_TABLE_SIZE 64
1940 typedef struct _RESOURCE_HASH_ENTRY
{
1941 LIST_ENTRY ListEntry
;
1943 ULONG ContentionCount
;
1945 } RESOURCE_HASH_ENTRY
, *PRESOURCE_HASH_ENTRY
;
1947 typedef struct _RESOURCE_PERFORMANCE_DATA
{
1948 ULONG ActiveResourceCount
;
1949 ULONG TotalResourceCount
;
1950 ULONG ExclusiveAcquire
;
1951 ULONG SharedFirstLevel
;
1952 ULONG SharedSecondLevel
;
1953 ULONG StarveFirstLevel
;
1954 ULONG StarveSecondLevel
;
1955 ULONG WaitForExclusive
;
1956 ULONG OwnerTableExpands
;
1957 ULONG MaximumTableExpand
;
1958 LIST_ENTRY HashTable
[RESOURCE_HASH_TABLE_SIZE
];
1959 } RESOURCE_PERFORMANCE_DATA
, *PRESOURCE_PERFORMANCE_DATA
;
1961 /* Global debug flag */
1963 extern ULONG NtGlobalFlag
;
1964 #define IF_NTOS_DEBUG(FlagName) if (NtGlobalFlag & (FLG_##FlagName))
1966 #define IF_NTOS_DEBUG(FlagName) if(FALSE)
1969 /******************************************************************************
1970 * Security Manager Types *
1971 ******************************************************************************/
1974 typedef PVOID PSECURITY_DESCRIPTOR
;
1975 typedef ULONG SECURITY_INFORMATION
, *PSECURITY_INFORMATION
;
1976 typedef ULONG ACCESS_MASK
, *PACCESS_MASK
;
1977 typedef PVOID PACCESS_TOKEN
;
1980 #define DELETE 0x00010000L
1981 #define READ_CONTROL 0x00020000L
1982 #define WRITE_DAC 0x00040000L
1983 #define WRITE_OWNER 0x00080000L
1984 #define SYNCHRONIZE 0x00100000L
1985 #define STANDARD_RIGHTS_REQUIRED 0x000F0000L
1986 #define STANDARD_RIGHTS_READ READ_CONTROL
1987 #define STANDARD_RIGHTS_WRITE READ_CONTROL
1988 #define STANDARD_RIGHTS_EXECUTE READ_CONTROL
1989 #define STANDARD_RIGHTS_ALL 0x001F0000L
1990 #define SPECIFIC_RIGHTS_ALL 0x0000FFFFL
1991 #define ACCESS_SYSTEM_SECURITY 0x01000000L
1992 #define MAXIMUM_ALLOWED 0x02000000L
1993 #define GENERIC_READ 0x80000000L
1994 #define GENERIC_WRITE 0x40000000L
1995 #define GENERIC_EXECUTE 0x20000000L
1996 #define GENERIC_ALL 0x10000000L
1998 typedef struct _GENERIC_MAPPING
{
1999 ACCESS_MASK GenericRead
;
2000 ACCESS_MASK GenericWrite
;
2001 ACCESS_MASK GenericExecute
;
2002 ACCESS_MASK GenericAll
;
2003 } GENERIC_MAPPING
, *PGENERIC_MAPPING
;
2005 #define ACL_REVISION 2
2006 #define ACL_REVISION_DS 4
2008 #define ACL_REVISION1 1
2009 #define ACL_REVISION2 2
2010 #define ACL_REVISION3 3
2011 #define ACL_REVISION4 4
2012 #define MIN_ACL_REVISION ACL_REVISION2
2013 #define MAX_ACL_REVISION ACL_REVISION4
2015 typedef struct _ACL
{
2023 /* Current security descriptor revision value */
2024 #define SECURITY_DESCRIPTOR_REVISION (1)
2025 #define SECURITY_DESCRIPTOR_REVISION1 (1)
2027 /* Privilege attributes */
2028 #define SE_PRIVILEGE_ENABLED_BY_DEFAULT (0x00000001L)
2029 #define SE_PRIVILEGE_ENABLED (0x00000002L)
2030 #define SE_PRIVILEGE_REMOVED (0X00000004L)
2031 #define SE_PRIVILEGE_USED_FOR_ACCESS (0x80000000L)
2033 #define SE_PRIVILEGE_VALID_ATTRIBUTES (SE_PRIVILEGE_ENABLED_BY_DEFAULT | \
2034 SE_PRIVILEGE_ENABLED | \
2035 SE_PRIVILEGE_REMOVED | \
2036 SE_PRIVILEGE_USED_FOR_ACCESS)
2038 #include <pshpack4.h>
2039 typedef struct _LUID_AND_ATTRIBUTES
{
2042 } LUID_AND_ATTRIBUTES
, *PLUID_AND_ATTRIBUTES
;
2043 #include <poppack.h>
2045 typedef LUID_AND_ATTRIBUTES LUID_AND_ATTRIBUTES_ARRAY
[ANYSIZE_ARRAY
];
2046 typedef LUID_AND_ATTRIBUTES_ARRAY
*PLUID_AND_ATTRIBUTES_ARRAY
;
2048 /* Privilege sets */
2049 #define PRIVILEGE_SET_ALL_NECESSARY (1)
2051 typedef struct _PRIVILEGE_SET
{
2052 ULONG PrivilegeCount
;
2054 LUID_AND_ATTRIBUTES Privilege
[ANYSIZE_ARRAY
];
2055 } PRIVILEGE_SET
,*PPRIVILEGE_SET
;
2057 typedef enum _SECURITY_IMPERSONATION_LEVEL
{
2059 SecurityIdentification
,
2060 SecurityImpersonation
,
2062 } SECURITY_IMPERSONATION_LEVEL
, * PSECURITY_IMPERSONATION_LEVEL
;
2064 #define SECURITY_MAX_IMPERSONATION_LEVEL SecurityDelegation
2065 #define SECURITY_MIN_IMPERSONATION_LEVEL SecurityAnonymous
2066 #define DEFAULT_IMPERSONATION_LEVEL SecurityImpersonation
2067 #define VALID_IMPERSONATION_LEVEL(Level) (((Level) >= SECURITY_MIN_IMPERSONATION_LEVEL) && ((Level) <= SECURITY_MAX_IMPERSONATION_LEVEL))
2069 #define SECURITY_DYNAMIC_TRACKING (TRUE)
2070 #define SECURITY_STATIC_TRACKING (FALSE)
2072 typedef BOOLEAN SECURITY_CONTEXT_TRACKING_MODE
, *PSECURITY_CONTEXT_TRACKING_MODE
;
2074 typedef struct _SECURITY_QUALITY_OF_SERVICE
{
2076 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
;
2077 SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode
;
2078 BOOLEAN EffectiveOnly
;
2079 } SECURITY_QUALITY_OF_SERVICE
, *PSECURITY_QUALITY_OF_SERVICE
;
2081 typedef struct _SE_IMPERSONATION_STATE
{
2082 PACCESS_TOKEN Token
;
2084 BOOLEAN EffectiveOnly
;
2085 SECURITY_IMPERSONATION_LEVEL Level
;
2086 } SE_IMPERSONATION_STATE
, *PSE_IMPERSONATION_STATE
;
2088 #define OWNER_SECURITY_INFORMATION (0x00000001L)
2089 #define GROUP_SECURITY_INFORMATION (0x00000002L)
2090 #define DACL_SECURITY_INFORMATION (0x00000004L)
2091 #define SACL_SECURITY_INFORMATION (0x00000008L)
2092 #define LABEL_SECURITY_INFORMATION (0x00000010L)
2094 #define PROTECTED_DACL_SECURITY_INFORMATION (0x80000000L)
2095 #define PROTECTED_SACL_SECURITY_INFORMATION (0x40000000L)
2096 #define UNPROTECTED_DACL_SECURITY_INFORMATION (0x20000000L)
2097 #define UNPROTECTED_SACL_SECURITY_INFORMATION (0x10000000L)
2099 typedef enum _SECURITY_OPERATION_CODE
{
2100 SetSecurityDescriptor
,
2101 QuerySecurityDescriptor
,
2102 DeleteSecurityDescriptor
,
2103 AssignSecurityDescriptor
2104 } SECURITY_OPERATION_CODE
, *PSECURITY_OPERATION_CODE
;
2106 #define INITIAL_PRIVILEGE_COUNT 3
2108 typedef struct _INITIAL_PRIVILEGE_SET
{
2109 ULONG PrivilegeCount
;
2111 LUID_AND_ATTRIBUTES Privilege
[INITIAL_PRIVILEGE_COUNT
];
2112 } INITIAL_PRIVILEGE_SET
, * PINITIAL_PRIVILEGE_SET
;
2114 #define SE_MIN_WELL_KNOWN_PRIVILEGE 2
2115 #define SE_CREATE_TOKEN_PRIVILEGE 2
2116 #define SE_ASSIGNPRIMARYTOKEN_PRIVILEGE 3
2117 #define SE_LOCK_MEMORY_PRIVILEGE 4
2118 #define SE_INCREASE_QUOTA_PRIVILEGE 5
2119 #define SE_MACHINE_ACCOUNT_PRIVILEGE 6
2120 #define SE_TCB_PRIVILEGE 7
2121 #define SE_SECURITY_PRIVILEGE 8
2122 #define SE_TAKE_OWNERSHIP_PRIVILEGE 9
2123 #define SE_LOAD_DRIVER_PRIVILEGE 10
2124 #define SE_SYSTEM_PROFILE_PRIVILEGE 11
2125 #define SE_SYSTEMTIME_PRIVILEGE 12
2126 #define SE_PROF_SINGLE_PROCESS_PRIVILEGE 13
2127 #define SE_INC_BASE_PRIORITY_PRIVILEGE 14
2128 #define SE_CREATE_PAGEFILE_PRIVILEGE 15
2129 #define SE_CREATE_PERMANENT_PRIVILEGE 16
2130 #define SE_BACKUP_PRIVILEGE 17
2131 #define SE_RESTORE_PRIVILEGE 18
2132 #define SE_SHUTDOWN_PRIVILEGE 19
2133 #define SE_DEBUG_PRIVILEGE 20
2134 #define SE_AUDIT_PRIVILEGE 21
2135 #define SE_SYSTEM_ENVIRONMENT_PRIVILEGE 22
2136 #define SE_CHANGE_NOTIFY_PRIVILEGE 23
2137 #define SE_REMOTE_SHUTDOWN_PRIVILEGE 24
2138 #define SE_UNDOCK_PRIVILEGE 25
2139 #define SE_SYNC_AGENT_PRIVILEGE 26
2140 #define SE_ENABLE_DELEGATION_PRIVILEGE 27
2141 #define SE_MANAGE_VOLUME_PRIVILEGE 28
2142 #define SE_IMPERSONATE_PRIVILEGE 29
2143 #define SE_CREATE_GLOBAL_PRIVILEGE 30
2144 #define SE_TRUSTED_CREDMAN_ACCESS_PRIVILEGE 31
2145 #define SE_RELABEL_PRIVILEGE 32
2146 #define SE_INC_WORKING_SET_PRIVILEGE 33
2147 #define SE_TIME_ZONE_PRIVILEGE 34
2148 #define SE_CREATE_SYMBOLIC_LINK_PRIVILEGE 35
2149 #define SE_MAX_WELL_KNOWN_PRIVILEGE SE_CREATE_SYMBOLIC_LINK_PRIVILEGE
2151 typedef struct _SECURITY_SUBJECT_CONTEXT
{
2152 PACCESS_TOKEN ClientToken
;
2153 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
;
2154 PACCESS_TOKEN PrimaryToken
;
2155 PVOID ProcessAuditId
;
2156 } SECURITY_SUBJECT_CONTEXT
, *PSECURITY_SUBJECT_CONTEXT
;
2158 typedef struct _ACCESS_STATE
{
2160 BOOLEAN SecurityEvaluated
;
2161 BOOLEAN GenerateAudit
;
2162 BOOLEAN GenerateOnClose
;
2163 BOOLEAN PrivilegesAllocated
;
2165 ACCESS_MASK RemainingDesiredAccess
;
2166 ACCESS_MASK PreviouslyGrantedAccess
;
2167 ACCESS_MASK OriginalDesiredAccess
;
2168 SECURITY_SUBJECT_CONTEXT SubjectSecurityContext
;
2169 PSECURITY_DESCRIPTOR SecurityDescriptor
;
2172 INITIAL_PRIVILEGE_SET InitialPrivilegeSet
;
2173 PRIVILEGE_SET PrivilegeSet
;
2175 BOOLEAN AuditPrivileges
;
2176 UNICODE_STRING ObjectName
;
2177 UNICODE_STRING ObjectTypeName
;
2178 } ACCESS_STATE
, *PACCESS_STATE
;
2181 (NTAPI
*PNTFS_DEREF_EXPORTED_SECURITY_DESCRIPTOR
)(
2183 IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
2187 #ifndef _NTLSA_AUDIT_
2188 #define _NTLSA_AUDIT_
2190 #define SE_MAX_AUDIT_PARAMETERS 32
2191 #define SE_MAX_GENERIC_AUDIT_PARAMETERS 28
2193 #define SE_ADT_OBJECT_ONLY 0x1
2195 #define SE_ADT_PARAMETERS_SELF_RELATIVE 0x00000001
2196 #define SE_ADT_PARAMETERS_SEND_TO_LSA 0x00000002
2197 #define SE_ADT_PARAMETER_EXTENSIBLE_AUDIT 0x00000004
2198 #define SE_ADT_PARAMETER_GENERIC_AUDIT 0x00000008
2199 #define SE_ADT_PARAMETER_WRITE_SYNCHRONOUS 0x00000010
2201 #define LSAP_SE_ADT_PARAMETER_ARRAY_TRUE_SIZE(Parameters) \
2202 ( sizeof(SE_ADT_PARAMETER_ARRAY) - sizeof(SE_ADT_PARAMETER_ARRAY_ENTRY) * \
2203 (SE_MAX_AUDIT_PARAMETERS - Parameters->ParameterCount) )
2205 typedef enum _SE_ADT_PARAMETER_TYPE
{
2206 SeAdtParmTypeNone
= 0,
2207 SeAdtParmTypeString
,
2208 SeAdtParmTypeFileSpec
,
2211 SeAdtParmTypeLogonId
,
2212 SeAdtParmTypeNoLogonId
,
2213 SeAdtParmTypeAccessMask
,
2215 SeAdtParmTypeObjectTypes
,
2216 SeAdtParmTypeHexUlong
,
2221 SeAdtParmTypeHexInt64
,
2222 SeAdtParmTypeStringList
,
2223 SeAdtParmTypeSidList
,
2224 SeAdtParmTypeDuration
,
2225 SeAdtParmTypeUserAccountControl
,
2227 SeAdtParmTypeMessage
,
2228 SeAdtParmTypeDateTime
,
2229 SeAdtParmTypeSockAddr
,
2231 SeAdtParmTypeLogonHours
,
2232 SeAdtParmTypeLogonIdNoSid
,
2233 SeAdtParmTypeUlongNoConv
,
2234 SeAdtParmTypeSockAddrNoPort
,
2235 SeAdtParmTypeAccessReason
2236 } SE_ADT_PARAMETER_TYPE
, *PSE_ADT_PARAMETER_TYPE
;
2238 typedef struct _SE_ADT_OBJECT_TYPE
{
2242 ACCESS_MASK AccessMask
;
2243 } SE_ADT_OBJECT_TYPE
, *PSE_ADT_OBJECT_TYPE
;
2245 typedef struct _SE_ADT_PARAMETER_ARRAY_ENTRY
{
2246 SE_ADT_PARAMETER_TYPE Type
;
2250 } SE_ADT_PARAMETER_ARRAY_ENTRY
, *PSE_ADT_PARAMETER_ARRAY_ENTRY
;
2252 typedef struct _SE_ADT_ACCESS_REASON
{
2253 ACCESS_MASK AccessMask
;
2254 ULONG AccessReasons
[32];
2255 ULONG ObjectTypeIndex
;
2256 ULONG AccessGranted
;
2257 PSECURITY_DESCRIPTOR SecurityDescriptor
;
2258 } SE_ADT_ACCESS_REASON
, *PSE_ADT_ACCESS_REASON
;
2260 typedef struct _SE_ADT_PARAMETER_ARRAY
{
2263 ULONG ParameterCount
;
2265 USHORT FlatSubCategoryId
;
2268 SE_ADT_PARAMETER_ARRAY_ENTRY Parameters
[ SE_MAX_AUDIT_PARAMETERS
];
2269 } SE_ADT_PARAMETER_ARRAY
, *PSE_ADT_PARAMETER_ARRAY
;
2271 #endif /* !_NTLSA_AUDIT_ */
2272 #endif /* !_NTLSA_IFS_ */
2273 /******************************************************************************
2274 * Power Management Support Types *
2275 ******************************************************************************/
2280 #define PO_CB_SYSTEM_POWER_POLICY 0
2281 #define PO_CB_AC_STATUS 1
2282 #define PO_CB_BUTTON_COLLISION 2
2283 #define PO_CB_SYSTEM_STATE_LOCK 3
2284 #define PO_CB_LID_SWITCH_STATE 4
2285 #define PO_CB_PROCESSOR_POWER_POLICY 5
2287 /* Power States/Levels */
2288 typedef enum _SYSTEM_POWER_STATE
{
2289 PowerSystemUnspecified
= 0,
2291 PowerSystemSleeping1
,
2292 PowerSystemSleeping2
,
2293 PowerSystemSleeping3
,
2294 PowerSystemHibernate
,
2295 PowerSystemShutdown
,
2297 } SYSTEM_POWER_STATE
, *PSYSTEM_POWER_STATE
;
2299 #define POWER_SYSTEM_MAXIMUM PowerSystemMaximum
2301 typedef enum _POWER_INFORMATION_LEVEL
{
2302 SystemPowerPolicyAc
,
2303 SystemPowerPolicyDc
,
2304 VerifySystemPolicyAc
,
2305 VerifySystemPolicyDc
,
2306 SystemPowerCapabilities
,
2308 SystemPowerStateHandler
,
2309 ProcessorStateHandler
,
2310 SystemPowerPolicyCurrent
,
2311 AdministratorPowerPolicy
,
2312 SystemReserveHiberFile
,
2313 ProcessorInformation
,
2314 SystemPowerInformation
,
2315 ProcessorStateHandler2
,
2318 SystemExecutionState
,
2319 SystemPowerStateNotifyHandler
,
2320 ProcessorPowerPolicyAc
,
2321 ProcessorPowerPolicyDc
,
2322 VerifyProcessorPowerPolicyAc
,
2323 VerifyProcessorPowerPolicyDc
,
2324 ProcessorPowerPolicyCurrent
,
2325 SystemPowerStateLogging
,
2326 SystemPowerLoggingEntry
,
2327 SetPowerSettingValue
,
2328 NotifyUserPowerSetting
,
2329 PowerInformationLevelUnused0
,
2330 PowerInformationLevelUnused1
,
2332 TraceApplicationPowerMessage
,
2333 TraceApplicationPowerMessageEnd
,
2334 ProcessorPerfStates
,
2335 ProcessorIdleStates
,
2338 SystemHiberFileInformation
,
2339 TraceServicePowerMessage
,
2341 PowerShutdownNotification
,
2342 MonitorCapabilities
,
2344 SessionDisplayState
,
2347 GetPowerRequestList
,
2348 ProcessorInformationEx
,
2349 NotifyUserModeLegacyPowerEvent
,
2351 ProcessorIdleDomains
,
2353 SystemHiberFileSize
,
2354 PowerInformationLevelMaximum
2355 } POWER_INFORMATION_LEVEL
;
2358 PowerActionNone
= 0,
2359 PowerActionReserved
,
2361 PowerActionHibernate
,
2362 PowerActionShutdown
,
2363 PowerActionShutdownReset
,
2364 PowerActionShutdownOff
,
2365 PowerActionWarmEject
2366 } POWER_ACTION
, *PPOWER_ACTION
;
2368 typedef enum _DEVICE_POWER_STATE
{
2369 PowerDeviceUnspecified
= 0,
2375 } DEVICE_POWER_STATE
, *PDEVICE_POWER_STATE
;
2377 typedef enum _MONITOR_DISPLAY_STATE
{
2378 PowerMonitorOff
= 0,
2381 } MONITOR_DISPLAY_STATE
, *PMONITOR_DISPLAY_STATE
;
2383 typedef union _POWER_STATE
{
2384 SYSTEM_POWER_STATE SystemState
;
2385 DEVICE_POWER_STATE DeviceState
;
2386 } POWER_STATE
, *PPOWER_STATE
;
2388 typedef enum _POWER_STATE_TYPE
{
2389 SystemPowerState
= 0,
2391 } POWER_STATE_TYPE
, *PPOWER_STATE_TYPE
;
2393 #if (NTDDI_VERSION >= NTDDI_VISTA)
2394 typedef struct _SYSTEM_POWER_STATE_CONTEXT
{
2398 ULONG TargetSystemState
:4;
2399 ULONG EffectiveSystemState
:4;
2400 ULONG CurrentSystemState
:4;
2401 ULONG IgnoreHibernationPath
:1;
2402 ULONG PseudoTransition
:1;
2405 ULONG ContextAsUlong
;
2407 } SYSTEM_POWER_STATE_CONTEXT
, *PSYSTEM_POWER_STATE_CONTEXT
;
2410 #if (NTDDI_VERSION >= NTDDI_WIN7)
2411 typedef struct _COUNTED_REASON_CONTEXT
{
2416 UNICODE_STRING ResourceFileName
;
2417 USHORT ResourceReasonId
;
2419 PUNICODE_STRING ReasonStrings
;
2421 UNICODE_STRING SimpleString
;
2423 } COUNTED_REASON_CONTEXT
, *PCOUNTED_REASON_CONTEXT
;
2426 #define IOCTL_QUERY_DEVICE_POWER_STATE \
2427 CTL_CODE(FILE_DEVICE_BATTERY, 0x0, METHOD_BUFFERED, FILE_READ_ACCESS)
2429 #define IOCTL_SET_DEVICE_WAKE \
2430 CTL_CODE(FILE_DEVICE_BATTERY, 0x1, METHOD_BUFFERED, FILE_WRITE_ACCESS)
2432 #define IOCTL_CANCEL_DEVICE_WAKE \
2433 CTL_CODE(FILE_DEVICE_BATTERY, 0x2, METHOD_BUFFERED, FILE_WRITE_ACCESS)
2435 #define ES_SYSTEM_REQUIRED 0x00000001
2436 #define ES_DISPLAY_REQUIRED 0x00000002
2437 #define ES_USER_PRESENT 0x00000004
2438 #define ES_CONTINUOUS 0x80000000
2440 typedef ULONG EXECUTION_STATE
, *PEXECUTION_STATE
;
2447 #if (_WIN32_WINNT >= _WIN32_WINNT_WIN7)
2448 #define DIAGNOSTIC_REASON_VERSION 0
2449 #define DIAGNOSTIC_REASON_SIMPLE_STRING 0x00000001
2450 #define DIAGNOSTIC_REASON_DETAILED_STRING 0x00000002
2451 #define DIAGNOSTIC_REASON_NOT_SPECIFIED 0x80000000
2452 #define DIAGNOSTIC_REASON_INVALID_FLAGS (~0x80000003)
2455 #define POWER_REQUEST_CONTEXT_VERSION 0
2456 #define POWER_REQUEST_CONTEXT_SIMPLE_STRING 0x00000001
2457 #define POWER_REQUEST_CONTEXT_DETAILED_STRING 0x00000002
2459 #define PowerRequestMaximum 3
2461 typedef enum _POWER_REQUEST_TYPE
{
2462 PowerRequestDisplayRequired
,
2463 PowerRequestSystemRequired
,
2464 PowerRequestAwayModeRequired
2465 } POWER_REQUEST_TYPE
, *PPOWER_REQUEST_TYPE
;
2467 #if (NTDDI_VERSION >= NTDDI_WINXP)
2469 #define PDCAP_D0_SUPPORTED 0x00000001
2470 #define PDCAP_D1_SUPPORTED 0x00000002
2471 #define PDCAP_D2_SUPPORTED 0x00000004
2472 #define PDCAP_D3_SUPPORTED 0x00000008
2473 #define PDCAP_WAKE_FROM_D0_SUPPORTED 0x00000010
2474 #define PDCAP_WAKE_FROM_D1_SUPPORTED 0x00000020
2475 #define PDCAP_WAKE_FROM_D2_SUPPORTED 0x00000040
2476 #define PDCAP_WAKE_FROM_D3_SUPPORTED 0x00000080
2477 #define PDCAP_WARM_EJECT_SUPPORTED 0x00000100
2479 typedef struct CM_Power_Data_s
{
2481 DEVICE_POWER_STATE PD_MostRecentPowerState
;
2482 ULONG PD_Capabilities
;
2486 DEVICE_POWER_STATE PD_PowerStateMapping
[PowerSystemMaximum
];
2487 SYSTEM_POWER_STATE PD_DeepestSystemWake
;
2488 } CM_POWER_DATA
, *PCM_POWER_DATA
;
2490 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
2492 typedef enum _SYSTEM_POWER_CONDITION
{
2497 } SYSTEM_POWER_CONDITION
;
2499 typedef struct _SET_POWER_SETTING_VALUE
{
2502 SYSTEM_POWER_CONDITION PowerCondition
;
2504 UCHAR Data
[ANYSIZE_ARRAY
];
2505 } SET_POWER_SETTING_VALUE
, *PSET_POWER_SETTING_VALUE
;
2507 #define POWER_SETTING_VALUE_VERSION (0x1)
2509 typedef struct _NOTIFY_USER_POWER_SETTING
{
2511 } NOTIFY_USER_POWER_SETTING
, *PNOTIFY_USER_POWER_SETTING
;
2513 typedef struct _APPLICATIONLAUNCH_SETTING_VALUE
{
2514 LARGE_INTEGER ActivationTime
;
2516 ULONG ButtonInstanceID
;
2517 } APPLICATIONLAUNCH_SETTING_VALUE
, *PAPPLICATIONLAUNCH_SETTING_VALUE
;
2519 typedef enum _POWER_PLATFORM_ROLE
{
2520 PlatformRoleUnspecified
= 0,
2521 PlatformRoleDesktop
,
2523 PlatformRoleWorkstation
,
2524 PlatformRoleEnterpriseServer
,
2525 PlatformRoleSOHOServer
,
2526 PlatformRoleAppliancePC
,
2527 PlatformRolePerformanceServer
,
2529 } POWER_PLATFORM_ROLE
;
2531 #if (NTDDI_VERSION >= NTDDI_WINXP) || !defined(_BATCLASS_)
2535 } BATTERY_REPORTING_SCALE
, *PBATTERY_REPORTING_SCALE
;
2536 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) || !defined(_BATCLASS_) */
2538 #endif /* !_PO_DDK_ */
2540 #define CORE_PARKING_POLICY_CHANGE_IDEAL 0
2541 #define CORE_PARKING_POLICY_CHANGE_SINGLE 1
2542 #define CORE_PARKING_POLICY_CHANGE_ROCKET 2
2543 #define CORE_PARKING_POLICY_CHANGE_MAX CORE_PARKING_POLICY_CHANGE_ROCKET
2545 DEFINE_GUID(GUID_MAX_POWER_SAVINGS
, 0xA1841308, 0x3541, 0x4FAB, 0xBC, 0x81, 0xF7, 0x15, 0x56, 0xF2, 0x0B, 0x4A );
2546 DEFINE_GUID(GUID_MIN_POWER_SAVINGS
, 0x8C5E7FDA, 0xE8BF, 0x4A96, 0x9A, 0x85, 0xA6, 0xE2, 0x3A, 0x8C, 0x63, 0x5C );
2547 DEFINE_GUID(GUID_TYPICAL_POWER_SAVINGS
, 0x381B4222, 0xF694, 0x41F0, 0x96, 0x85, 0xFF, 0x5B, 0xB2, 0x60, 0xDF, 0x2E );
2548 DEFINE_GUID(NO_SUBGROUP_GUID
, 0xFEA3413E, 0x7E05, 0x4911, 0x9A, 0x71, 0x70, 0x03, 0x31, 0xF1, 0xC2, 0x94 );
2549 DEFINE_GUID(ALL_POWERSCHEMES_GUID
, 0x68A1E95E, 0x13EA, 0x41E1, 0x80, 0x11, 0x0C, 0x49, 0x6C, 0xA4, 0x90, 0xB0 );
2550 DEFINE_GUID(GUID_POWERSCHEME_PERSONALITY
, 0x245D8541, 0x3943, 0x4422, 0xB0, 0x25, 0x13, 0xA7, 0x84, 0xF6, 0x79, 0xB7 );
2551 DEFINE_GUID(GUID_ACTIVE_POWERSCHEME
, 0x31F9F286, 0x5084, 0x42FE, 0xB7, 0x20, 0x2B, 0x02, 0x64, 0x99, 0x37, 0x63 );
2552 DEFINE_GUID(GUID_VIDEO_SUBGROUP
, 0x7516B95F, 0xF776, 0x4464, 0x8C, 0x53, 0x06, 0x16, 0x7F, 0x40, 0xCC, 0x99 );
2553 DEFINE_GUID(GUID_VIDEO_POWERDOWN_TIMEOUT
, 0x3C0BC021, 0xC8A8, 0x4E07, 0xA9, 0x73, 0x6B, 0x14, 0xCB, 0xCB, 0x2B, 0x7E );
2554 DEFINE_GUID(GUID_VIDEO_ANNOYANCE_TIMEOUT
, 0x82DBCF2D, 0xCD67, 0x40C5, 0xBF, 0xDC, 0x9F, 0x1A, 0x5C, 0xCD, 0x46, 0x63 );
2555 DEFINE_GUID(GUID_VIDEO_ADAPTIVE_PERCENT_INCREASE
, 0xEED904DF, 0xB142, 0x4183, 0xB1, 0x0B, 0x5A, 0x11, 0x97, 0xA3, 0x78, 0x64 );
2556 DEFINE_GUID(GUID_VIDEO_DIM_TIMEOUT
, 0x17aaa29b, 0x8b43, 0x4b94, 0xaa, 0xfe, 0x35, 0xf6, 0x4d, 0xaa, 0xf1, 0xee);
2557 DEFINE_GUID(GUID_VIDEO_ADAPTIVE_POWERDOWN
, 0x90959D22, 0xD6A1, 0x49B9, 0xAF, 0x93, 0xBC, 0xE8, 0x85, 0xAD, 0x33, 0x5B );
2558 DEFINE_GUID(GUID_MONITOR_POWER_ON
, 0x02731015, 0x4510, 0x4526, 0x99, 0xE6, 0xE5, 0xA1, 0x7E, 0xBD, 0x1A, 0xEA );
2559 DEFINE_GUID(GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS
, 0xaded5e82L
, 0xb909, 0x4619, 0x99, 0x49, 0xf5, 0xd7, 0x1d, 0xac, 0x0b, 0xcb);
2560 DEFINE_GUID(GUID_DEVICE_POWER_POLICY_VIDEO_DIM_BRIGHTNESS
, 0xf1fbfde2, 0xa960, 0x4165, 0x9f, 0x88, 0x50, 0x66, 0x79, 0x11, 0xce, 0x96);
2561 DEFINE_GUID(GUID_VIDEO_CURRENT_MONITOR_BRIGHTNESS
, 0x8ffee2c6, 0x2d01, 0x46be, 0xad, 0xb9, 0x39, 0x8a, 0xdd, 0xc5, 0xb4, 0xff);
2562 DEFINE_GUID(GUID_VIDEO_ADAPTIVE_DISPLAY_BRIGHTNESS
, 0xFBD9AA66, 0x9553, 0x4097, 0xBA, 0x44, 0xED, 0x6E, 0x9D, 0x65, 0xEA, 0xB8);
2563 DEFINE_GUID(GUID_SESSION_DISPLAY_STATE
, 0x73A5E93A, 0x5BB1, 0x4F93, 0x89, 0x5B, 0xDB, 0xD0, 0xDA, 0x85, 0x59, 0x67 );
2564 DEFINE_GUID(GUID_CONSOLE_DISPLAY_STATE
, 0x6fe69556, 0x704a, 0x47a0, 0x8f, 0x24, 0xc2, 0x8d, 0x93, 0x6f, 0xda, 0x47);
2565 DEFINE_GUID(GUID_ALLOW_DISPLAY_REQUIRED
, 0xA9CEB8DA, 0xCD46, 0x44FB, 0xA9, 0x8B, 0x02, 0xAF, 0x69, 0xDE, 0x46, 0x23 );
2566 DEFINE_GUID(GUID_DISK_SUBGROUP
, 0x0012EE47, 0x9041, 0x4B5D, 0x9B, 0x77, 0x53, 0x5F, 0xBA, 0x8B, 0x14, 0x42 );
2567 DEFINE_GUID(GUID_DISK_POWERDOWN_TIMEOUT
, 0x6738E2C4, 0xE8A5, 0x4A42, 0xB1, 0x6A, 0xE0, 0x40, 0xE7, 0x69, 0x75, 0x6E );
2568 DEFINE_GUID(GUID_DISK_BURST_IGNORE_THRESHOLD
, 0x80e3c60e, 0xbb94, 0x4ad8, 0xbb, 0xe0, 0x0d, 0x31, 0x95, 0xef, 0xc6, 0x63 );
2569 DEFINE_GUID(GUID_DISK_ADAPTIVE_POWERDOWN
, 0x396A32E1, 0x499A, 0x40B2, 0x91, 0x24, 0xA9, 0x6A, 0xFE, 0x70, 0x76, 0x67 );
2570 DEFINE_GUID(GUID_SLEEP_SUBGROUP
, 0x238C9FA8, 0x0AAD, 0x41ED, 0x83, 0xF4, 0x97, 0xBE, 0x24, 0x2C, 0x8F, 0x20 );
2571 DEFINE_GUID(GUID_SLEEP_IDLE_THRESHOLD
, 0x81cd32e0, 0x7833, 0x44f3, 0x87, 0x37, 0x70, 0x81, 0xf3, 0x8d, 0x1f, 0x70 );
2572 DEFINE_GUID(GUID_STANDBY_TIMEOUT
, 0x29F6C1DB, 0x86DA, 0x48C5, 0x9F, 0xDB, 0xF2, 0xB6, 0x7B, 0x1F, 0x44, 0xDA );
2573 DEFINE_GUID(GUID_UNATTEND_SLEEP_TIMEOUT
, 0x7bc4a2f9, 0xd8fc, 0x4469, 0xb0, 0x7b, 0x33, 0xeb, 0x78, 0x5a, 0xac, 0xa0 );
2574 DEFINE_GUID(GUID_HIBERNATE_TIMEOUT
, 0x9D7815A6, 0x7EE4, 0x497E, 0x88, 0x88, 0x51, 0x5A, 0x05, 0xF0, 0x23, 0x64 );
2575 DEFINE_GUID(GUID_HIBERNATE_FASTS4_POLICY
, 0x94AC6D29, 0x73CE, 0x41A6, 0x80, 0x9F, 0x63, 0x63, 0xBA, 0x21, 0xB4, 0x7E );
2576 DEFINE_GUID(GUID_CRITICAL_POWER_TRANSITION
, 0xB7A27025, 0xE569, 0x46c2, 0xA5, 0x04, 0x2B, 0x96, 0xCA, 0xD2, 0x25, 0xA1);
2577 DEFINE_GUID(GUID_SYSTEM_AWAYMODE
, 0x98A7F580, 0x01F7, 0x48AA, 0x9C, 0x0F, 0x44, 0x35, 0x2C, 0x29, 0xE5, 0xC0 );
2578 DEFINE_GUID(GUID_ALLOW_AWAYMODE
, 0x25dfa149, 0x5dd1, 0x4736, 0xb5, 0xab, 0xe8, 0xa3, 0x7b, 0x5b, 0x81, 0x87 );
2579 DEFINE_GUID(GUID_ALLOW_STANDBY_STATES
, 0xabfc2519, 0x3608, 0x4c2a, 0x94, 0xea, 0x17, 0x1b, 0x0e, 0xd5, 0x46, 0xab );
2580 DEFINE_GUID(GUID_ALLOW_RTC_WAKE
, 0xBD3B718A, 0x0680, 0x4D9D, 0x8A, 0xB2, 0xE1, 0xD2, 0xB4, 0xAC, 0x80, 0x6D );
2581 DEFINE_GUID(GUID_ALLOW_SYSTEM_REQUIRED
, 0xA4B195F5, 0x8225, 0x47D8, 0x80, 0x12, 0x9D, 0x41, 0x36, 0x97, 0x86, 0xE2 );
2582 DEFINE_GUID(GUID_SYSTEM_BUTTON_SUBGROUP
, 0x4F971E89, 0xEEBD, 0x4455, 0xA8, 0xDE, 0x9E, 0x59, 0x04, 0x0E, 0x73, 0x47 );
2583 DEFINE_GUID(GUID_POWERBUTTON_ACTION
, 0x7648EFA3, 0xDD9C, 0x4E3E, 0xB5, 0x66, 0x50, 0xF9, 0x29, 0x38, 0x62, 0x80 );
2584 DEFINE_GUID(GUID_POWERBUTTON_ACTION_FLAGS
, 0x857E7FAC, 0x034B, 0x4704, 0xAB, 0xB1, 0xBC, 0xA5, 0x4A, 0xA3, 0x14, 0x78 );
2585 DEFINE_GUID(GUID_SLEEPBUTTON_ACTION
, 0x96996BC0, 0xAD50, 0x47EC, 0x92, 0x3B, 0x6F, 0x41, 0x87, 0x4D, 0xD9, 0xEB );
2586 DEFINE_GUID(GUID_SLEEPBUTTON_ACTION_FLAGS
, 0x2A160AB1, 0xB69D, 0x4743, 0xB7, 0x18, 0xBF, 0x14, 0x41, 0xD5, 0xE4, 0x93 );
2587 DEFINE_GUID(GUID_USERINTERFACEBUTTON_ACTION
, 0xA7066653, 0x8D6C, 0x40A8, 0x91, 0x0E, 0xA1, 0xF5, 0x4B, 0x84, 0xC7, 0xE5 );
2588 DEFINE_GUID(GUID_LIDCLOSE_ACTION
, 0x5CA83367, 0x6E45, 0x459F, 0xA2, 0x7B, 0x47, 0x6B, 0x1D, 0x01, 0xC9, 0x36 );
2589 DEFINE_GUID(GUID_LIDCLOSE_ACTION_FLAGS
, 0x97E969AC, 0x0D6C, 0x4D08, 0x92, 0x7C, 0xD7, 0xBD, 0x7A, 0xD7, 0x85, 0x7B );
2590 DEFINE_GUID(GUID_LIDOPEN_POWERSTATE
, 0x99FF10E7, 0x23B1, 0x4C07, 0xA9, 0xD1, 0x5C, 0x32, 0x06, 0xD7, 0x41, 0xB4 );
2591 DEFINE_GUID(GUID_BATTERY_SUBGROUP
, 0xE73A048D, 0xBF27, 0x4F12, 0x97, 0x31, 0x8B, 0x20, 0x76, 0xE8, 0x89, 0x1F );
2592 DEFINE_GUID(GUID_BATTERY_DISCHARGE_ACTION_0
, 0x637EA02F, 0xBBCB, 0x4015, 0x8E, 0x2C, 0xA1, 0xC7, 0xB9, 0xC0, 0xB5, 0x46 );
2593 DEFINE_GUID(GUID_BATTERY_DISCHARGE_LEVEL_0
, 0x9A66D8D7, 0x4FF7, 0x4EF9, 0xB5, 0xA2, 0x5A, 0x32, 0x6C, 0xA2, 0xA4, 0x69 );
2594 DEFINE_GUID(GUID_BATTERY_DISCHARGE_FLAGS_0
, 0x5dbb7c9f, 0x38e9, 0x40d2, 0x97, 0x49, 0x4f, 0x8a, 0x0e, 0x9f, 0x64, 0x0f );
2595 DEFINE_GUID(GUID_BATTERY_DISCHARGE_ACTION_1
, 0xD8742DCB, 0x3E6A, 0x4B3C, 0xB3, 0xFE, 0x37, 0x46, 0x23, 0xCD, 0xCF, 0x06 );
2596 DEFINE_GUID(GUID_BATTERY_DISCHARGE_LEVEL_1
, 0x8183BA9A, 0xE910, 0x48DA, 0x87, 0x69, 0x14, 0xAE, 0x6D, 0xC1, 0x17, 0x0A );
2597 DEFINE_GUID(GUID_BATTERY_DISCHARGE_FLAGS_1
, 0xbcded951, 0x187b, 0x4d05, 0xbc, 0xcc, 0xf7, 0xe5, 0x19, 0x60, 0xc2, 0x58 );
2598 DEFINE_GUID(GUID_BATTERY_DISCHARGE_ACTION_2
, 0x421CBA38, 0x1A8E, 0x4881, 0xAC, 0x89, 0xE3, 0x3A, 0x8B, 0x04, 0xEC, 0xE4 );
2599 DEFINE_GUID(GUID_BATTERY_DISCHARGE_LEVEL_2
, 0x07A07CA2, 0xADAF, 0x40D7, 0xB0, 0x77, 0x53, 0x3A, 0xAD, 0xED, 0x1B, 0xFA );
2600 DEFINE_GUID(GUID_BATTERY_DISCHARGE_FLAGS_2
, 0x7fd2f0c4, 0xfeb7, 0x4da3, 0x81, 0x17, 0xe3, 0xfb, 0xed, 0xc4, 0x65, 0x82 );
2601 DEFINE_GUID(GUID_BATTERY_DISCHARGE_ACTION_3
, 0x80472613, 0x9780, 0x455E, 0xB3, 0x08, 0x72, 0xD3, 0x00, 0x3C, 0xF2, 0xF8 );
2602 DEFINE_GUID(GUID_BATTERY_DISCHARGE_LEVEL_3
, 0x58AFD5A6, 0xC2DD, 0x47D2, 0x9F, 0xBF, 0xEF, 0x70, 0xCC, 0x5C, 0x59, 0x65 );
2603 DEFINE_GUID(GUID_BATTERY_DISCHARGE_FLAGS_3
, 0x73613ccf, 0xdbfa, 0x4279, 0x83, 0x56, 0x49, 0x35, 0xf6, 0xbf, 0x62, 0xf3 );
2604 DEFINE_GUID(GUID_PROCESSOR_SETTINGS_SUBGROUP
, 0x54533251, 0x82BE, 0x4824, 0x96, 0xC1, 0x47, 0xB6, 0x0B, 0x74, 0x0D, 0x00 );
2605 DEFINE_GUID(GUID_PROCESSOR_THROTTLE_POLICY
, 0x57027304, 0x4AF6, 0x4104, 0x92, 0x60, 0xE3, 0xD9, 0x52, 0x48, 0xFC, 0x36 );
2606 DEFINE_GUID(GUID_PROCESSOR_THROTTLE_MAXIMUM
, 0xBC5038F7, 0x23E0, 0x4960, 0x96, 0xDA, 0x33, 0xAB, 0xAF, 0x59, 0x35, 0xEC );
2607 DEFINE_GUID(GUID_PROCESSOR_THROTTLE_MINIMUM
, 0x893DEE8E, 0x2BEF, 0x41E0, 0x89, 0xC6, 0xB5, 0x5D, 0x09, 0x29, 0x96, 0x4C );
2608 DEFINE_GUID(GUID_PROCESSOR_ALLOW_THROTTLING
, 0x3b04d4fd, 0x1cc7, 0x4f23, 0xab, 0x1c, 0xd1, 0x33, 0x78, 0x19, 0xc4, 0xbb );
2609 DEFINE_GUID(GUID_PROCESSOR_IDLESTATE_POLICY
, 0x68f262a7, 0xf621, 0x4069, 0xb9, 0xa5, 0x48, 0x74, 0x16, 0x9b, 0xe2, 0x3c);
2610 DEFINE_GUID(GUID_PROCESSOR_PERFSTATE_POLICY
, 0xBBDC3814, 0x18E9, 0x4463, 0x8A, 0x55, 0xD1, 0x97, 0x32, 0x7C, 0x45, 0xC0);
2611 DEFINE_GUID(GUID_PROCESSOR_PERF_INCREASE_THRESHOLD
, 0x06cadf0e, 0x64ed, 0x448a, 0x89, 0x27, 0xce, 0x7b, 0xf9, 0x0e, 0xb3, 0x5d );
2612 DEFINE_GUID(GUID_PROCESSOR_PERF_DECREASE_THRESHOLD
, 0x12a0ab44, 0xfe28, 0x4fa9, 0xb3, 0xbd, 0x4b, 0x64, 0xf4, 0x49, 0x60, 0xa6 );
2613 DEFINE_GUID(GUID_PROCESSOR_PERF_INCREASE_POLICY
, 0x465e1f50, 0xb610, 0x473a, 0xab, 0x58, 0x0, 0xd1, 0x7, 0x7d, 0xc4, 0x18);
2614 DEFINE_GUID(GUID_PROCESSOR_PERF_DECREASE_POLICY
, 0x40fbefc7, 0x2e9d, 0x4d25, 0xa1, 0x85, 0xc, 0xfd, 0x85, 0x74, 0xba, 0xc6);
2615 DEFINE_GUID(GUID_PROCESSOR_PERF_INCREASE_TIME
, 0x984cf492, 0x3bed, 0x4488, 0xa8, 0xf9, 0x42, 0x86, 0xc9, 0x7b, 0xf5, 0xaa);
2616 DEFINE_GUID(GUID_PROCESSOR_PERF_DECREASE_TIME
, 0xd8edeb9b, 0x95cf, 0x4f95, 0xa7, 0x3c, 0xb0, 0x61, 0x97, 0x36, 0x93, 0xc8);
2617 DEFINE_GUID(GUID_PROCESSOR_PERF_TIME_CHECK
, 0x4d2b0152, 0x7d5c, 0x498b, 0x88, 0xe2, 0x34, 0x34, 0x53, 0x92, 0xa2, 0xc5);
2618 DEFINE_GUID(GUID_PROCESSOR_PERF_BOOST_POLICY
, 0x45bcc044, 0xd885, 0x43e2, 0x86, 0x5, 0xee, 0xe, 0xc6, 0xe9, 0x6b, 0x59);
2619 DEFINE_GUID(GUID_PROCESSOR_IDLE_ALLOW_SCALING
, 0x6c2993b0, 0x8f48, 0x481f, 0xbc, 0xc6, 0x0, 0xdd, 0x27, 0x42, 0xaa, 0x6);
2620 DEFINE_GUID(GUID_PROCESSOR_IDLE_DISABLE
, 0x5d76a2ca, 0xe8c0, 0x402f, 0xa1, 0x33, 0x21, 0x58, 0x49, 0x2d, 0x58, 0xad);
2621 DEFINE_GUID(GUID_PROCESSOR_IDLE_TIME_CHECK
, 0xc4581c31, 0x89ab, 0x4597, 0x8e, 0x2b, 0x9c, 0x9c, 0xab, 0x44, 0xe, 0x6b);
2622 DEFINE_GUID(GUID_PROCESSOR_IDLE_DEMOTE_THRESHOLD
, 0x4b92d758, 0x5a24, 0x4851, 0xa4, 0x70, 0x81, 0x5d, 0x78, 0xae, 0xe1, 0x19);
2623 DEFINE_GUID(GUID_PROCESSOR_IDLE_PROMOTE_THRESHOLD
, 0x7b224883, 0xb3cc, 0x4d79, 0x81, 0x9f, 0x83, 0x74, 0x15, 0x2c, 0xbe, 0x7c);
2624 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_INCREASE_THRESHOLD
, 0xdf142941, 0x20f3, 0x4edf, 0x9a, 0x4a, 0x9c, 0x83, 0xd3, 0xd7, 0x17, 0xd1 );
2625 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_DECREASE_THRESHOLD
, 0x68dd2f27, 0xa4ce, 0x4e11, 0x84, 0x87, 0x37, 0x94, 0xe4, 0x13, 0x5d, 0xfa);
2626 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_INCREASE_POLICY
, 0xc7be0679, 0x2817, 0x4d69, 0x9d, 0x02, 0x51, 0x9a, 0x53, 0x7e, 0xd0, 0xc6);
2627 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_DECREASE_POLICY
, 0x71021b41, 0xc749, 0x4d21, 0xbe, 0x74, 0xa0, 0x0f, 0x33, 0x5d, 0x58, 0x2b);
2628 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_MAX_CORES
, 0xea062031, 0x0e34, 0x4ff1, 0x9b, 0x6d, 0xeb, 0x10, 0x59, 0x33, 0x40, 0x28);
2629 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_MIN_CORES
, 0x0cc5b647, 0xc1df, 0x4637, 0x89, 0x1a, 0xde, 0xc3, 0x5c, 0x31, 0x85, 0x83);
2630 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_INCREASE_TIME
, 0x2ddd5a84, 0x5a71, 0x437e, 0x91, 0x2a, 0xdb, 0x0b, 0x8c, 0x78, 0x87, 0x32);
2631 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_DECREASE_TIME
, 0xdfd10d17, 0xd5eb, 0x45dd, 0x87, 0x7a, 0x9a, 0x34, 0xdd, 0xd1, 0x5c, 0x82);
2632 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_AFFINITY_HISTORY_DECREASE_FACTOR
, 0x8f7b45e3, 0xc393, 0x480a, 0x87, 0x8c, 0xf6, 0x7a, 0xc3, 0xd0, 0x70, 0x82);
2633 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_AFFINITY_HISTORY_THRESHOLD
, 0x5b33697b, 0xe89d, 0x4d38, 0xaa, 0x46, 0x9e, 0x7d, 0xfb, 0x7c, 0xd2, 0xf9);
2634 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_AFFINITY_WEIGHTING
, 0xe70867f1, 0xfa2f, 0x4f4e, 0xae, 0xa1, 0x4d, 0x8a, 0x0b, 0xa2, 0x3b, 0x20);
2635 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_HISTORY_DECREASE_FACTOR
, 0x1299023c, 0xbc28, 0x4f0a, 0x81, 0xec, 0xd3, 0x29, 0x5a, 0x8d, 0x81, 0x5d);
2636 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_HISTORY_THRESHOLD
, 0x9ac18e92, 0xaa3c, 0x4e27, 0xb3, 0x07, 0x01, 0xae, 0x37, 0x30, 0x71, 0x29);
2637 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_WEIGHTING
, 0x8809c2d8, 0xb155, 0x42d4, 0xbc, 0xda, 0x0d, 0x34, 0x56, 0x51, 0xb1, 0xdb);
2638 DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_THRESHOLD
, 0x943c8cb6, 0x6f93, 0x4227, 0xad, 0x87, 0xe9, 0xa3, 0xfe, 0xec, 0x08, 0xd1);
2639 DEFINE_GUID(GUID_PROCESSOR_PARKING_CORE_OVERRIDE
, 0xa55612aa, 0xf624, 0x42c6, 0xa4, 0x43, 0x73, 0x97, 0xd0, 0x64, 0xc0, 0x4f);
2640 DEFINE_GUID(GUID_PROCESSOR_PARKING_PERF_STATE
, 0x447235c7, 0x6a8d, 0x4cc0, 0x8e, 0x24, 0x9e, 0xaf, 0x70, 0xb9, 0x6e, 0x2b);
2641 DEFINE_GUID(GUID_PROCESSOR_PERF_HISTORY
, 0x7d24baa7, 0x0b84, 0x480f, 0x84, 0x0c, 0x1b, 0x07, 0x43, 0xc0, 0x0f, 0x5f);
2642 DEFINE_GUID(GUID_SYSTEM_COOLING_POLICY
, 0x94D3A615, 0xA899, 0x4AC5, 0xAE, 0x2B, 0xE4, 0xD8, 0xF6, 0x34, 0x36, 0x7F);
2643 DEFINE_GUID(GUID_LOCK_CONSOLE_ON_WAKE
, 0x0E796BDB, 0x100D, 0x47D6, 0xA2, 0xD5, 0xF7, 0xD2, 0xDA, 0xA5, 0x1F, 0x51 );
2644 DEFINE_GUID(GUID_DEVICE_IDLE_POLICY
, 0x4faab71a, 0x92e5, 0x4726, 0xb5, 0x31, 0x22, 0x45, 0x59, 0x67, 0x2d, 0x19 );
2645 DEFINE_GUID(GUID_ACDC_POWER_SOURCE
, 0x5D3E9A59, 0xE9D5, 0x4B00, 0xA6, 0xBD, 0xFF, 0x34, 0xFF, 0x51, 0x65, 0x48 );
2646 DEFINE_GUID(GUID_LIDSWITCH_STATE_CHANGE
, 0xBA3E0F4D, 0xB817, 0x4094, 0xA2, 0xD1, 0xD5, 0x63, 0x79, 0xE6, 0xA0, 0xF3 );
2647 DEFINE_GUID(GUID_BATTERY_PERCENTAGE_REMAINING
, 0xA7AD8041, 0xB45A, 0x4CAE, 0x87, 0xA3, 0xEE, 0xCB, 0xB4, 0x68, 0xA9, 0xE1 );
2648 DEFINE_GUID(GUID_IDLE_BACKGROUND_TASK
, 0x515C31D8, 0xF734, 0x163D, 0xA0, 0xFD, 0x11, 0xA0, 0x8C, 0x91, 0xE8, 0xF1 );
2649 DEFINE_GUID(GUID_BACKGROUND_TASK_NOTIFICATION
, 0xCF23F240, 0x2A54, 0x48D8, 0xB1, 0x14, 0xDE, 0x15, 0x18, 0xFF, 0x05, 0x2E );
2650 DEFINE_GUID(GUID_APPLAUNCH_BUTTON
, 0x1A689231, 0x7399, 0x4E9A, 0x8F, 0x99, 0xB7, 0x1F, 0x99, 0x9D, 0xB3, 0xFA );
2651 DEFINE_GUID(GUID_PCIEXPRESS_SETTINGS_SUBGROUP
, 0x501a4d13, 0x42af,0x4429, 0x9f, 0xd1, 0xa8, 0x21, 0x8c, 0x26, 0x8e, 0x20 );
2652 DEFINE_GUID(GUID_PCIEXPRESS_ASPM_POLICY
, 0xee12f906, 0xd277, 0x404b, 0xb6, 0xda, 0xe5, 0xfa, 0x1a, 0x57, 0x6d, 0xf5 );
2653 DEFINE_GUID(GUID_ENABLE_SWITCH_FORCED_SHUTDOWN
, 0x833a6b62, 0xdfa4, 0x46d1, 0x82, 0xf8, 0xe0, 0x9e, 0x34, 0xd0, 0x29, 0xd6 );
2655 #define PERFSTATE_POLICY_CHANGE_IDEAL 0
2656 #define PERFSTATE_POLICY_CHANGE_SINGLE 1
2657 #define PERFSTATE_POLICY_CHANGE_ROCKET 2
2658 #define PERFSTATE_POLICY_CHANGE_MAX PERFSTATE_POLICY_CHANGE_ROCKET
2660 #define PROCESSOR_PERF_BOOST_POLICY_DISABLED 0
2661 #define PROCESSOR_PERF_BOOST_POLICY_MAX 100
2663 #define POWER_DEVICE_IDLE_POLICY_PERFORMANCE 0
2664 #define POWER_DEVICE_IDLE_POLICY_CONSERVATIVE 1
2667 (NTAPI REQUEST_POWER_COMPLETE
)(
2668 IN
struct _DEVICE_OBJECT
*DeviceObject
,
2669 IN UCHAR MinorFunction
,
2670 IN POWER_STATE PowerState
,
2672 IN
struct _IO_STATUS_BLOCK
*IoStatus
);
2673 typedef REQUEST_POWER_COMPLETE
*PREQUEST_POWER_COMPLETE
;
2677 (NTAPI POWER_SETTING_CALLBACK
)(
2678 IN LPCGUID SettingGuid
,
2680 IN ULONG ValueLength
,
2681 IN OUT PVOID Context OPTIONAL
);
2682 typedef POWER_SETTING_CALLBACK
*PPOWER_SETTING_CALLBACK
;
2684 /******************************************************************************
2685 * Configuration Manager Types *
2686 ******************************************************************************/
2688 /* Resource list definitions */
2689 typedef int CM_RESOURCE_TYPE
;
2691 #define CmResourceTypeNull 0
2692 #define CmResourceTypePort 1
2693 #define CmResourceTypeInterrupt 2
2694 #define CmResourceTypeMemory 3
2695 #define CmResourceTypeDma 4
2696 #define CmResourceTypeDeviceSpecific 5
2697 #define CmResourceTypeBusNumber 6
2698 #define CmResourceTypeNonArbitrated 128
2699 #define CmResourceTypeConfigData 128
2700 #define CmResourceTypeDevicePrivate 129
2701 #define CmResourceTypePcCardConfig 130
2702 #define CmResourceTypeMfCardConfig 131
2704 /* KEY_VALUE_Xxx.Type */
2707 #define REG_EXPAND_SZ 2
2708 #define REG_BINARY 3
2710 #define REG_DWORD_LITTLE_ENDIAN 4
2711 #define REG_DWORD_BIG_ENDIAN 5
2713 #define REG_MULTI_SZ 7
2714 #define REG_RESOURCE_LIST 8
2715 #define REG_FULL_RESOURCE_DESCRIPTOR 9
2716 #define REG_RESOURCE_REQUIREMENTS_LIST 10
2717 #define REG_QWORD 11
2718 #define REG_QWORD_LITTLE_ENDIAN 11
2720 /* Registry Access Rights */
2721 #define KEY_QUERY_VALUE (0x0001)
2722 #define KEY_SET_VALUE (0x0002)
2723 #define KEY_CREATE_SUB_KEY (0x0004)
2724 #define KEY_ENUMERATE_SUB_KEYS (0x0008)
2725 #define KEY_NOTIFY (0x0010)
2726 #define KEY_CREATE_LINK (0x0020)
2727 #define KEY_WOW64_32KEY (0x0200)
2728 #define KEY_WOW64_64KEY (0x0100)
2729 #define KEY_WOW64_RES (0x0300)
2731 #define KEY_READ ((STANDARD_RIGHTS_READ |\
2733 KEY_ENUMERATE_SUB_KEYS |\
2738 #define KEY_WRITE ((STANDARD_RIGHTS_WRITE |\
2740 KEY_CREATE_SUB_KEY) \
2744 #define KEY_EXECUTE ((KEY_READ) \
2748 #define KEY_ALL_ACCESS ((STANDARD_RIGHTS_ALL |\
2751 KEY_CREATE_SUB_KEY |\
2752 KEY_ENUMERATE_SUB_KEYS |\
2758 /* Registry Open/Create Options */
2759 #define REG_OPTION_RESERVED (0x00000000L)
2760 #define REG_OPTION_NON_VOLATILE (0x00000000L)
2761 #define REG_OPTION_VOLATILE (0x00000001L)
2762 #define REG_OPTION_CREATE_LINK (0x00000002L)
2763 #define REG_OPTION_BACKUP_RESTORE (0x00000004L)
2764 #define REG_OPTION_OPEN_LINK (0x00000008L)
2766 #define REG_LEGAL_OPTION \
2767 (REG_OPTION_RESERVED |\
2768 REG_OPTION_NON_VOLATILE |\
2769 REG_OPTION_VOLATILE |\
2770 REG_OPTION_CREATE_LINK |\
2771 REG_OPTION_BACKUP_RESTORE |\
2772 REG_OPTION_OPEN_LINK)
2774 #define REG_OPEN_LEGAL_OPTION \
2775 (REG_OPTION_RESERVED |\
2776 REG_OPTION_BACKUP_RESTORE |\
2777 REG_OPTION_OPEN_LINK)
2779 #define REG_STANDARD_FORMAT 1
2780 #define REG_LATEST_FORMAT 2
2781 #define REG_NO_COMPRESSION 4
2783 /* Key creation/open disposition */
2784 #define REG_CREATED_NEW_KEY (0x00000001L)
2785 #define REG_OPENED_EXISTING_KEY (0x00000002L)
2787 /* Key restore & hive load flags */
2788 #define REG_WHOLE_HIVE_VOLATILE (0x00000001L)
2789 #define REG_REFRESH_HIVE (0x00000002L)
2790 #define REG_NO_LAZY_FLUSH (0x00000004L)
2791 #define REG_FORCE_RESTORE (0x00000008L)
2792 #define REG_APP_HIVE (0x00000010L)
2793 #define REG_PROCESS_PRIVATE (0x00000020L)
2794 #define REG_START_JOURNAL (0x00000040L)
2795 #define REG_HIVE_EXACT_FILE_GROWTH (0x00000080L)
2796 #define REG_HIVE_NO_RM (0x00000100L)
2797 #define REG_HIVE_SINGLE_LOG (0x00000200L)
2798 #define REG_BOOT_HIVE (0x00000400L)
2801 #define REG_FORCE_UNLOAD 1
2803 /* Notify Filter Values */
2804 #define REG_NOTIFY_CHANGE_NAME (0x00000001L)
2805 #define REG_NOTIFY_CHANGE_ATTRIBUTES (0x00000002L)
2806 #define REG_NOTIFY_CHANGE_LAST_SET (0x00000004L)
2807 #define REG_NOTIFY_CHANGE_SECURITY (0x00000008L)
2809 #define REG_LEGAL_CHANGE_FILTER \
2810 (REG_NOTIFY_CHANGE_NAME |\
2811 REG_NOTIFY_CHANGE_ATTRIBUTES |\
2812 REG_NOTIFY_CHANGE_LAST_SET |\
2813 REG_NOTIFY_CHANGE_SECURITY)
2815 #include <pshpack4.h>
2816 typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR
{
2818 UCHAR ShareDisposition
;
2822 PHYSICAL_ADDRESS Start
;
2826 PHYSICAL_ADDRESS Start
;
2830 #if defined(NT_PROCESSOR_GROUPS)
2839 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
2841 __GNU_EXTENSION
union {
2843 #if defined(NT_PROCESSOR_GROUPS)
2848 USHORT MessageCount
;
2853 #if defined(NT_PROCESSOR_GROUPS)
2866 PHYSICAL_ADDRESS Start
;
2886 } DeviceSpecificData
;
2887 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
2889 PHYSICAL_ADDRESS Start
;
2893 PHYSICAL_ADDRESS Start
;
2897 PHYSICAL_ADDRESS Start
;
2902 } CM_PARTIAL_RESOURCE_DESCRIPTOR
, *PCM_PARTIAL_RESOURCE_DESCRIPTOR
;
2903 #include <poppack.h>
2905 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Type */
2906 #define CmResourceTypeNull 0
2907 #define CmResourceTypePort 1
2908 #define CmResourceTypeInterrupt 2
2909 #define CmResourceTypeMemory 3
2910 #define CmResourceTypeDma 4
2911 #define CmResourceTypeDeviceSpecific 5
2912 #define CmResourceTypeBusNumber 6
2913 #define CmResourceTypeMemoryLarge 7
2914 #define CmResourceTypeNonArbitrated 128
2915 #define CmResourceTypeConfigData 128
2916 #define CmResourceTypeDevicePrivate 129
2917 #define CmResourceTypePcCardConfig 130
2918 #define CmResourceTypeMfCardConfig 131
2920 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.ShareDisposition */
2921 typedef enum _CM_SHARE_DISPOSITION
{
2922 CmResourceShareUndetermined
= 0,
2923 CmResourceShareDeviceExclusive
,
2924 CmResourceShareDriverExclusive
,
2925 CmResourceShareShared
2926 } CM_SHARE_DISPOSITION
;
2928 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypePort */
2929 #define CM_RESOURCE_PORT_MEMORY 0x0000
2930 #define CM_RESOURCE_PORT_IO 0x0001
2931 #define CM_RESOURCE_PORT_10_BIT_DECODE 0x0004
2932 #define CM_RESOURCE_PORT_12_BIT_DECODE 0x0008
2933 #define CM_RESOURCE_PORT_16_BIT_DECODE 0x0010
2934 #define CM_RESOURCE_PORT_POSITIVE_DECODE 0x0020
2935 #define CM_RESOURCE_PORT_PASSIVE_DECODE 0x0040
2936 #define CM_RESOURCE_PORT_WINDOW_DECODE 0x0080
2937 #define CM_RESOURCE_PORT_BAR 0x0100
2939 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeInterrupt */
2940 #define CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE 0x0000
2941 #define CM_RESOURCE_INTERRUPT_LATCHED 0x0001
2942 #define CM_RESOURCE_INTERRUPT_MESSAGE 0x0002
2943 #define CM_RESOURCE_INTERRUPT_POLICY_INCLUDED 0x0004
2945 #define CM_RESOURCE_INTERRUPT_LEVEL_LATCHED_BITS 0x0001
2947 #define CM_RESOURCE_INTERRUPT_MESSAGE_TOKEN ((ULONG)-2)
2949 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeMemory */
2950 #define CM_RESOURCE_MEMORY_READ_WRITE 0x0000
2951 #define CM_RESOURCE_MEMORY_READ_ONLY 0x0001
2952 #define CM_RESOURCE_MEMORY_WRITE_ONLY 0x0002
2953 #define CM_RESOURCE_MEMORY_WRITEABILITY_MASK 0x0003
2954 #define CM_RESOURCE_MEMORY_PREFETCHABLE 0x0004
2955 #define CM_RESOURCE_MEMORY_COMBINEDWRITE 0x0008
2956 #define CM_RESOURCE_MEMORY_24 0x0010
2957 #define CM_RESOURCE_MEMORY_CACHEABLE 0x0020
2958 #define CM_RESOURCE_MEMORY_WINDOW_DECODE 0x0040
2959 #define CM_RESOURCE_MEMORY_BAR 0x0080
2960 #define CM_RESOURCE_MEMORY_COMPAT_FOR_INACCESSIBLE_RANGE 0x0100
2962 #define CM_RESOURCE_MEMORY_LARGE 0x0E00
2963 #define CM_RESOURCE_MEMORY_LARGE_40 0x0200
2964 #define CM_RESOURCE_MEMORY_LARGE_48 0x0400
2965 #define CM_RESOURCE_MEMORY_LARGE_64 0x0800
2967 #define CM_RESOURCE_MEMORY_LARGE_40_MAXLEN 0x000000FFFFFFFF00
2968 #define CM_RESOURCE_MEMORY_LARGE_48_MAXLEN 0x0000FFFFFFFF0000
2969 #define CM_RESOURCE_MEMORY_LARGE_64_MAXLEN 0xFFFFFFFF00000000
2971 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeDma */
2972 #define CM_RESOURCE_DMA_8 0x0000
2973 #define CM_RESOURCE_DMA_16 0x0001
2974 #define CM_RESOURCE_DMA_32 0x0002
2975 #define CM_RESOURCE_DMA_8_AND_16 0x0004
2976 #define CM_RESOURCE_DMA_BUS_MASTER 0x0008
2977 #define CM_RESOURCE_DMA_TYPE_A 0x0010
2978 #define CM_RESOURCE_DMA_TYPE_B 0x0020
2979 #define CM_RESOURCE_DMA_TYPE_F 0x0040
2981 typedef struct _DEVICE_FLAGS
{
2989 } DEVICE_FLAGS
, *PDEVICE_FLAGS
;
2991 typedef enum _INTERFACE_TYPE
{
2992 InterfaceTypeUndefined
= -1,
3010 MaximumInterfaceType
3011 } INTERFACE_TYPE
, *PINTERFACE_TYPE
;
3013 typedef struct _CM_COMPONENT_INFORMATION
{
3017 KAFFINITY AffinityMask
;
3018 } CM_COMPONENT_INFORMATION
, *PCM_COMPONENT_INFORMATION
;
3020 typedef struct _CM_ROM_BLOCK
{
3023 } CM_ROM_BLOCK
, *PCM_ROM_BLOCK
;
3025 typedef struct _CM_PARTIAL_RESOURCE_LIST
{
3029 CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors
[1];
3030 } CM_PARTIAL_RESOURCE_LIST
, *PCM_PARTIAL_RESOURCE_LIST
;
3032 typedef struct _CM_FULL_RESOURCE_DESCRIPTOR
{
3033 INTERFACE_TYPE InterfaceType
;
3035 CM_PARTIAL_RESOURCE_LIST PartialResourceList
;
3036 } CM_FULL_RESOURCE_DESCRIPTOR
, *PCM_FULL_RESOURCE_DESCRIPTOR
;
3038 typedef struct _CM_RESOURCE_LIST
{
3040 CM_FULL_RESOURCE_DESCRIPTOR List
[1];
3041 } CM_RESOURCE_LIST
, *PCM_RESOURCE_LIST
;
3043 typedef struct _PNP_BUS_INFORMATION
{
3045 INTERFACE_TYPE LegacyBusType
;
3047 } PNP_BUS_INFORMATION
, *PPNP_BUS_INFORMATION
;
3049 #include <pshpack1.h>
3051 typedef struct _CM_INT13_DRIVE_PARAMETER
{
3054 USHORT SectorsPerTrack
;
3056 USHORT NumberDrives
;
3057 } CM_INT13_DRIVE_PARAMETER
, *PCM_INT13_DRIVE_PARAMETER
;
3059 typedef struct _CM_MCA_POS_DATA
{
3065 } CM_MCA_POS_DATA
, *PCM_MCA_POS_DATA
;
3067 typedef struct _CM_PNP_BIOS_DEVICE_NODE
{
3071 UCHAR DeviceType
[3];
3072 USHORT DeviceAttributes
;
3073 } CM_PNP_BIOS_DEVICE_NODE
,*PCM_PNP_BIOS_DEVICE_NODE
;
3075 typedef struct _CM_PNP_BIOS_INSTALLATION_CHECK
{
3079 USHORT ControlField
;
3081 ULONG EventFlagAddress
;
3082 USHORT RealModeEntryOffset
;
3083 USHORT RealModeEntrySegment
;
3084 USHORT ProtectedModeEntryOffset
;
3085 ULONG ProtectedModeCodeBaseAddress
;
3087 USHORT RealModeDataBaseAddress
;
3088 ULONG ProtectedModeDataBaseAddress
;
3089 } CM_PNP_BIOS_INSTALLATION_CHECK
, *PCM_PNP_BIOS_INSTALLATION_CHECK
;
3091 #include <poppack.h>
3093 typedef struct _CM_DISK_GEOMETRY_DEVICE_DATA
{
3094 ULONG BytesPerSector
;
3095 ULONG NumberOfCylinders
;
3096 ULONG SectorsPerTrack
;
3097 ULONG NumberOfHeads
;
3098 } CM_DISK_GEOMETRY_DEVICE_DATA
, *PCM_DISK_GEOMETRY_DEVICE_DATA
;
3100 typedef struct _CM_KEYBOARD_DEVICE_DATA
{
3105 USHORT KeyboardFlags
;
3106 } CM_KEYBOARD_DEVICE_DATA
, *PCM_KEYBOARD_DEVICE_DATA
;
3108 typedef struct _CM_SCSI_DEVICE_DATA
{
3111 UCHAR HostIdentifier
;
3112 } CM_SCSI_DEVICE_DATA
, *PCM_SCSI_DEVICE_DATA
;
3114 typedef struct _CM_VIDEO_DEVICE_DATA
{
3118 } CM_VIDEO_DEVICE_DATA
, *PCM_VIDEO_DEVICE_DATA
;
3120 typedef struct _CM_SONIC_DEVICE_DATA
{
3123 USHORT DataConfigurationRegister
;
3124 UCHAR EthernetAddress
[8];
3125 } CM_SONIC_DEVICE_DATA
, *PCM_SONIC_DEVICE_DATA
;
3127 typedef struct _CM_SERIAL_DEVICE_DATA
{
3131 } CM_SERIAL_DEVICE_DATA
, *PCM_SERIAL_DEVICE_DATA
;
3133 typedef struct _CM_MONITOR_DEVICE_DATA
{
3136 USHORT HorizontalScreenSize
;
3137 USHORT VerticalScreenSize
;
3138 USHORT HorizontalResolution
;
3139 USHORT VerticalResolution
;
3140 USHORT HorizontalDisplayTimeLow
;
3141 USHORT HorizontalDisplayTime
;
3142 USHORT HorizontalDisplayTimeHigh
;
3143 USHORT HorizontalBackPorchLow
;
3144 USHORT HorizontalBackPorch
;
3145 USHORT HorizontalBackPorchHigh
;
3146 USHORT HorizontalFrontPorchLow
;
3147 USHORT HorizontalFrontPorch
;
3148 USHORT HorizontalFrontPorchHigh
;
3149 USHORT HorizontalSyncLow
;
3150 USHORT HorizontalSync
;
3151 USHORT HorizontalSyncHigh
;
3152 USHORT VerticalBackPorchLow
;
3153 USHORT VerticalBackPorch
;
3154 USHORT VerticalBackPorchHigh
;
3155 USHORT VerticalFrontPorchLow
;
3156 USHORT VerticalFrontPorch
;
3157 USHORT VerticalFrontPorchHigh
;
3158 USHORT VerticalSyncLow
;
3159 USHORT VerticalSync
;
3160 USHORT VerticalSyncHigh
;
3161 } CM_MONITOR_DEVICE_DATA
, *PCM_MONITOR_DEVICE_DATA
;
3163 typedef struct _CM_FLOPPY_DEVICE_DATA
{
3169 UCHAR StepRateHeadUnloadTime
;
3172 UCHAR SectorLengthCode
;
3173 UCHAR SectorPerTrack
;
3174 UCHAR ReadWriteGapLength
;
3175 UCHAR DataTransferLength
;
3176 UCHAR FormatGapLength
;
3177 UCHAR FormatFillCharacter
;
3178 UCHAR HeadSettleTime
;
3179 UCHAR MotorSettleTime
;
3180 UCHAR MaximumTrackValue
;
3181 UCHAR DataTransferRate
;
3182 } CM_FLOPPY_DEVICE_DATA
, *PCM_FLOPPY_DEVICE_DATA
;
3184 typedef enum _KEY_INFORMATION_CLASS
{
3185 KeyBasicInformation
,
3189 KeyCachedInformation
,
3190 KeyFlagsInformation
,
3191 KeyVirtualizationInformation
,
3192 KeyHandleTagsInformation
,
3194 } KEY_INFORMATION_CLASS
;
3196 typedef struct _KEY_BASIC_INFORMATION
{
3197 LARGE_INTEGER LastWriteTime
;
3201 } KEY_BASIC_INFORMATION
, *PKEY_BASIC_INFORMATION
;
3203 typedef struct _KEY_CONTROL_FLAGS_INFORMATION
{
3205 } KEY_CONTROL_FLAGS_INFORMATION
, *PKEY_CONTROL_FLAGS_INFORMATION
;
3207 typedef struct _KEY_FULL_INFORMATION
{
3208 LARGE_INTEGER LastWriteTime
;
3216 ULONG MaxValueNameLen
;
3217 ULONG MaxValueDataLen
;
3219 } KEY_FULL_INFORMATION
, *PKEY_FULL_INFORMATION
;
3221 typedef struct _KEY_HANDLE_TAGS_INFORMATION
{
3223 } KEY_HANDLE_TAGS_INFORMATION
, *PKEY_HANDLE_TAGS_INFORMATION
;
3225 typedef struct _KEY_NODE_INFORMATION
{
3226 LARGE_INTEGER LastWriteTime
;
3232 } KEY_NODE_INFORMATION
, *PKEY_NODE_INFORMATION
;
3234 typedef enum _KEY_SET_INFORMATION_CLASS
{
3235 KeyWriteTimeInformation
,
3236 KeyWow64FlagsInformation
,
3237 KeyControlFlagsInformation
,
3238 KeySetVirtualizationInformation
,
3239 KeySetDebugInformation
,
3240 KeySetHandleTagsInformation
,
3242 } KEY_SET_INFORMATION_CLASS
;
3244 typedef struct _KEY_SET_VIRTUALIZATION_INFORMATION
{
3245 ULONG VirtualTarget
:1;
3246 ULONG VirtualStore
:1;
3247 ULONG VirtualSource
:1;
3249 } KEY_SET_VIRTUALIZATION_INFORMATION
, *PKEY_SET_VIRTUALIZATION_INFORMATION
;
3251 typedef struct _KEY_VALUE_BASIC_INFORMATION
{
3256 } KEY_VALUE_BASIC_INFORMATION
, *PKEY_VALUE_BASIC_INFORMATION
;
3258 typedef struct _KEY_VALUE_FULL_INFORMATION
{
3265 } KEY_VALUE_FULL_INFORMATION
, *PKEY_VALUE_FULL_INFORMATION
;
3267 typedef struct _KEY_VALUE_PARTIAL_INFORMATION
{
3272 } KEY_VALUE_PARTIAL_INFORMATION
, *PKEY_VALUE_PARTIAL_INFORMATION
;
3274 typedef struct _KEY_VALUE_PARTIAL_INFORMATION_ALIGN64
{
3278 } KEY_VALUE_PARTIAL_INFORMATION_ALIGN64
, *PKEY_VALUE_PARTIAL_INFORMATION_ALIGN64
;
3280 typedef struct _KEY_VALUE_ENTRY
{
3281 PUNICODE_STRING ValueName
;
3285 } KEY_VALUE_ENTRY
, *PKEY_VALUE_ENTRY
;
3287 typedef enum _KEY_VALUE_INFORMATION_CLASS
{
3288 KeyValueBasicInformation
,
3289 KeyValueFullInformation
,
3290 KeyValuePartialInformation
,
3291 KeyValueFullInformationAlign64
,
3292 KeyValuePartialInformationAlign64
3293 } KEY_VALUE_INFORMATION_CLASS
;
3295 typedef struct _KEY_WOW64_FLAGS_INFORMATION
{
3297 } KEY_WOW64_FLAGS_INFORMATION
, *PKEY_WOW64_FLAGS_INFORMATION
;
3299 typedef struct _KEY_WRITE_TIME_INFORMATION
{
3300 LARGE_INTEGER LastWriteTime
;
3301 } KEY_WRITE_TIME_INFORMATION
, *PKEY_WRITE_TIME_INFORMATION
;
3303 typedef enum _REG_NOTIFY_CLASS
{
3305 RegNtPreDeleteKey
= RegNtDeleteKey
,
3307 RegNtPreSetValueKey
= RegNtSetValueKey
,
3308 RegNtDeleteValueKey
,
3309 RegNtPreDeleteValueKey
= RegNtDeleteValueKey
,
3310 RegNtSetInformationKey
,
3311 RegNtPreSetInformationKey
= RegNtSetInformationKey
,
3313 RegNtPreRenameKey
= RegNtRenameKey
,
3315 RegNtPreEnumerateKey
= RegNtEnumerateKey
,
3316 RegNtEnumerateValueKey
,
3317 RegNtPreEnumerateValueKey
= RegNtEnumerateValueKey
,
3319 RegNtPreQueryKey
= RegNtQueryKey
,
3321 RegNtPreQueryValueKey
= RegNtQueryValueKey
,
3322 RegNtQueryMultipleValueKey
,
3323 RegNtPreQueryMultipleValueKey
= RegNtQueryMultipleValueKey
,
3328 RegNtKeyHandleClose
,
3329 RegNtPreKeyHandleClose
= RegNtKeyHandleClose
,
3331 RegNtPostSetValueKey
,
3332 RegNtPostDeleteValueKey
,
3333 RegNtPostSetInformationKey
,
3335 RegNtPostEnumerateKey
,
3336 RegNtPostEnumerateValueKey
,
3338 RegNtPostQueryValueKey
,
3339 RegNtPostQueryMultipleValueKey
,
3340 RegNtPostKeyHandleClose
,
3341 RegNtPreCreateKeyEx
,
3342 RegNtPostCreateKeyEx
,
3351 RegNtPreQueryKeySecurity
,
3352 RegNtPostQueryKeySecurity
,
3353 RegNtPreSetKeySecurity
,
3354 RegNtPostSetKeySecurity
,
3355 RegNtCallbackObjectContextCleanup
,
3357 RegNtPostRestoreKey
,
3361 RegNtPostReplaceKey
,
3363 } REG_NOTIFY_CLASS
, *PREG_NOTIFY_CLASS
;
3366 (NTAPI EX_CALLBACK_FUNCTION
)(
3367 IN PVOID CallbackContext
,
3369 IN PVOID Argument2
);
3370 typedef EX_CALLBACK_FUNCTION
*PEX_CALLBACK_FUNCTION
;
3372 typedef struct _REG_DELETE_KEY_INFORMATION
{
3375 PVOID ObjectContext
;
3377 } REG_DELETE_KEY_INFORMATION
, *PREG_DELETE_KEY_INFORMATION
3378 #if (NTDDI_VERSION >= NTDDI_VISTA)
3379 , REG_FLUSH_KEY_INFORMATION
, *PREG_FLUSH_KEY_INFORMATION
3383 typedef struct _REG_SET_VALUE_KEY_INFORMATION
{
3385 PUNICODE_STRING ValueName
;
3391 PVOID ObjectContext
;
3393 } REG_SET_VALUE_KEY_INFORMATION
, *PREG_SET_VALUE_KEY_INFORMATION
;
3395 typedef struct _REG_DELETE_VALUE_KEY_INFORMATION
{
3397 PUNICODE_STRING ValueName
;
3399 PVOID ObjectContext
;
3401 } REG_DELETE_VALUE_KEY_INFORMATION
, *PREG_DELETE_VALUE_KEY_INFORMATION
;
3403 typedef struct _REG_SET_INFORMATION_KEY_INFORMATION
{
3405 KEY_SET_INFORMATION_CLASS KeySetInformationClass
;
3406 PVOID KeySetInformation
;
3407 ULONG KeySetInformationLength
;
3409 PVOID ObjectContext
;
3411 } REG_SET_INFORMATION_KEY_INFORMATION
, *PREG_SET_INFORMATION_KEY_INFORMATION
;
3413 typedef struct _REG_ENUMERATE_KEY_INFORMATION
{
3416 KEY_INFORMATION_CLASS KeyInformationClass
;
3417 PVOID KeyInformation
;
3419 PULONG ResultLength
;
3421 PVOID ObjectContext
;
3423 } REG_ENUMERATE_KEY_INFORMATION
, *PREG_ENUMERATE_KEY_INFORMATION
;
3425 typedef struct _REG_ENUMERATE_VALUE_KEY_INFORMATION
{
3428 KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
;
3429 PVOID KeyValueInformation
;
3431 PULONG ResultLength
;
3433 PVOID ObjectContext
;
3435 } REG_ENUMERATE_VALUE_KEY_INFORMATION
, *PREG_ENUMERATE_VALUE_KEY_INFORMATION
;
3437 typedef struct _REG_QUERY_KEY_INFORMATION
{
3439 KEY_INFORMATION_CLASS KeyInformationClass
;
3440 PVOID KeyInformation
;
3442 PULONG ResultLength
;
3444 PVOID ObjectContext
;
3446 } REG_QUERY_KEY_INFORMATION
, *PREG_QUERY_KEY_INFORMATION
;
3448 typedef struct _REG_QUERY_VALUE_KEY_INFORMATION
{
3450 PUNICODE_STRING ValueName
;
3451 KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
;
3452 PVOID KeyValueInformation
;
3454 PULONG ResultLength
;
3456 PVOID ObjectContext
;
3458 } REG_QUERY_VALUE_KEY_INFORMATION
, *PREG_QUERY_VALUE_KEY_INFORMATION
;
3460 typedef struct _REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION
{
3462 PKEY_VALUE_ENTRY ValueEntries
;
3465 PULONG BufferLength
;
3466 PULONG RequiredBufferLength
;
3468 PVOID ObjectContext
;
3470 } REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION
, *PREG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION
;
3472 typedef struct _REG_RENAME_KEY_INFORMATION
{
3474 PUNICODE_STRING NewName
;
3476 PVOID ObjectContext
;
3478 } REG_RENAME_KEY_INFORMATION
, *PREG_RENAME_KEY_INFORMATION
;
3480 typedef struct _REG_CREATE_KEY_INFORMATION
{
3481 PUNICODE_STRING CompleteName
;
3484 ULONG CreateOptions
;
3485 PUNICODE_STRING Class
;
3486 PVOID SecurityDescriptor
;
3487 PVOID SecurityQualityOfService
;
3488 ACCESS_MASK DesiredAccess
;
3489 ACCESS_MASK GrantedAccess
;
3491 PVOID
*ResultObject
;
3493 PVOID RootObjectContext
;
3496 } REG_CREATE_KEY_INFORMATION
, REG_OPEN_KEY_INFORMATION
,*PREG_CREATE_KEY_INFORMATION
, *PREG_OPEN_KEY_INFORMATION
;
3498 typedef struct _REG_CREATE_KEY_INFORMATION_V1
{
3499 PUNICODE_STRING CompleteName
;
3503 PUNICODE_STRING Class
;
3504 PVOID SecurityDescriptor
;
3505 PVOID SecurityQualityOfService
;
3506 ACCESS_MASK DesiredAccess
;
3507 ACCESS_MASK GrantedAccess
;
3509 PVOID
*ResultObject
;
3511 PVOID RootObjectContext
;
3514 PUNICODE_STRING RemainingName
;
3517 KPROCESSOR_MODE CheckAccessMode
;
3518 } REG_CREATE_KEY_INFORMATION_V1
, REG_OPEN_KEY_INFORMATION_V1
,*PREG_CREATE_KEY_INFORMATION_V1
, *PREG_OPEN_KEY_INFORMATION_V1
;
3520 typedef struct _REG_PRE_CREATE_KEY_INFORMATION
{
3521 PUNICODE_STRING CompleteName
;
3522 } REG_PRE_CREATE_KEY_INFORMATION
, REG_PRE_OPEN_KEY_INFORMATION
,*PREG_PRE_CREATE_KEY_INFORMATION
, *PREG_PRE_OPEN_KEY_INFORMATION
;;
3524 typedef struct _REG_POST_CREATE_KEY_INFORMATION
{
3525 PUNICODE_STRING CompleteName
;
3528 } REG_POST_CREATE_KEY_INFORMATION
,REG_POST_OPEN_KEY_INFORMATION
, *PREG_POST_CREATE_KEY_INFORMATION
, *PREG_POST_OPEN_KEY_INFORMATION
;
3530 typedef struct _REG_POST_OPERATION_INFORMATION
{
3533 PVOID PreInformation
;
3534 NTSTATUS ReturnStatus
;
3536 PVOID ObjectContext
;
3538 } REG_POST_OPERATION_INFORMATION
,*PREG_POST_OPERATION_INFORMATION
;
3540 typedef struct _REG_KEY_HANDLE_CLOSE_INFORMATION
{
3543 PVOID ObjectContext
;
3545 } REG_KEY_HANDLE_CLOSE_INFORMATION
, *PREG_KEY_HANDLE_CLOSE_INFORMATION
;
3547 #if (NTDDI_VERSION >= NTDDI_VISTA)
3549 typedef struct _REG_LOAD_KEY_INFORMATION
{
3551 PUNICODE_STRING KeyName
;
3552 PUNICODE_STRING SourceFile
;
3554 PVOID TrustClassObject
;
3556 ACCESS_MASK DesiredAccess
;
3559 PVOID ObjectContext
;
3561 } REG_LOAD_KEY_INFORMATION
, *PREG_LOAD_KEY_INFORMATION
;
3563 typedef struct _REG_UNLOAD_KEY_INFORMATION
{
3567 PVOID ObjectContext
;
3569 } REG_UNLOAD_KEY_INFORMATION
, *PREG_UNLOAD_KEY_INFORMATION
;
3571 typedef struct _REG_CALLBACK_CONTEXT_CLEANUP_INFORMATION
{
3573 PVOID ObjectContext
;
3575 } REG_CALLBACK_CONTEXT_CLEANUP_INFORMATION
, *PREG_CALLBACK_CONTEXT_CLEANUP_INFORMATION
;
3577 typedef struct _REG_QUERY_KEY_SECURITY_INFORMATION
{
3579 PSECURITY_INFORMATION SecurityInformation
;
3580 PSECURITY_DESCRIPTOR SecurityDescriptor
;
3583 PVOID ObjectContext
;
3585 } REG_QUERY_KEY_SECURITY_INFORMATION
, *PREG_QUERY_KEY_SECURITY_INFORMATION
;
3587 typedef struct _REG_SET_KEY_SECURITY_INFORMATION
{
3589 PSECURITY_INFORMATION SecurityInformation
;
3590 PSECURITY_DESCRIPTOR SecurityDescriptor
;
3592 PVOID ObjectContext
;
3594 } REG_SET_KEY_SECURITY_INFORMATION
, *PREG_SET_KEY_SECURITY_INFORMATION
;
3596 typedef struct _REG_RESTORE_KEY_INFORMATION
{
3601 PVOID ObjectContext
;
3603 } REG_RESTORE_KEY_INFORMATION
, *PREG_RESTORE_KEY_INFORMATION
;
3605 typedef struct _REG_SAVE_KEY_INFORMATION
{
3610 PVOID ObjectContext
;
3612 } REG_SAVE_KEY_INFORMATION
, *PREG_SAVE_KEY_INFORMATION
;
3614 typedef struct _REG_REPLACE_KEY_INFORMATION
{
3616 PUNICODE_STRING OldFileName
;
3617 PUNICODE_STRING NewFileName
;
3619 PVOID ObjectContext
;
3621 } REG_REPLACE_KEY_INFORMATION
, *PREG_REPLACE_KEY_INFORMATION
;
3623 #endif /* NTDDI_VERSION >= NTDDI_VISTA */
3625 #define SERVICE_KERNEL_DRIVER 0x00000001
3626 #define SERVICE_FILE_SYSTEM_DRIVER 0x00000002
3627 #define SERVICE_ADAPTER 0x00000004
3628 #define SERVICE_RECOGNIZER_DRIVER 0x00000008
3630 #define SERVICE_DRIVER (SERVICE_KERNEL_DRIVER | \
3631 SERVICE_FILE_SYSTEM_DRIVER | \
3632 SERVICE_RECOGNIZER_DRIVER)
3634 #define SERVICE_WIN32_OWN_PROCESS 0x00000010
3635 #define SERVICE_WIN32_SHARE_PROCESS 0x00000020
3636 #define SERVICE_WIN32 (SERVICE_WIN32_OWN_PROCESS | \
3637 SERVICE_WIN32_SHARE_PROCESS)
3639 #define SERVICE_INTERACTIVE_PROCESS 0x00000100
3641 #define SERVICE_TYPE_ALL (SERVICE_WIN32 | \
3644 SERVICE_INTERACTIVE_PROCESS)
3646 /* Service Start Types */
3647 #define SERVICE_BOOT_START 0x00000000
3648 #define SERVICE_SYSTEM_START 0x00000001
3649 #define SERVICE_AUTO_START 0x00000002
3650 #define SERVICE_DEMAND_START 0x00000003
3651 #define SERVICE_DISABLED 0x00000004
3653 #define SERVICE_ERROR_IGNORE 0x00000000
3654 #define SERVICE_ERROR_NORMAL 0x00000001
3655 #define SERVICE_ERROR_SEVERE 0x00000002
3656 #define SERVICE_ERROR_CRITICAL 0x00000003
3658 typedef enum _CM_SERVICE_NODE_TYPE
{
3659 DriverType
= SERVICE_KERNEL_DRIVER
,
3660 FileSystemType
= SERVICE_FILE_SYSTEM_DRIVER
,
3661 Win32ServiceOwnProcess
= SERVICE_WIN32_OWN_PROCESS
,
3662 Win32ServiceShareProcess
= SERVICE_WIN32_SHARE_PROCESS
,
3663 AdapterType
= SERVICE_ADAPTER
,
3664 RecognizerType
= SERVICE_RECOGNIZER_DRIVER
3665 } SERVICE_NODE_TYPE
;
3667 typedef enum _CM_SERVICE_LOAD_TYPE
{
3668 BootLoad
= SERVICE_BOOT_START
,
3669 SystemLoad
= SERVICE_SYSTEM_START
,
3670 AutoLoad
= SERVICE_AUTO_START
,
3671 DemandLoad
= SERVICE_DEMAND_START
,
3672 DisableLoad
= SERVICE_DISABLED
3673 } SERVICE_LOAD_TYPE
;
3675 typedef enum _CM_ERROR_CONTROL_TYPE
{
3676 IgnoreError
= SERVICE_ERROR_IGNORE
,
3677 NormalError
= SERVICE_ERROR_NORMAL
,
3678 SevereError
= SERVICE_ERROR_SEVERE
,
3679 CriticalError
= SERVICE_ERROR_CRITICAL
3680 } SERVICE_ERROR_TYPE
;
3682 #define CM_SERVICE_NETWORK_BOOT_LOAD 0x00000001
3683 #define CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD 0x00000002
3684 #define CM_SERVICE_USB_DISK_BOOT_LOAD 0x00000004
3686 #define CM_SERVICE_VALID_PROMOTION_MASK (CM_SERVICE_NETWORK_BOOT_LOAD | \
3687 CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD | \
3688 CM_SERVICE_USB_DISK_BOOT_LOAD)
3690 /******************************************************************************
3691 * I/O Manager Types *
3692 ******************************************************************************/
3694 #define WDM_MAJORVERSION 0x06
3695 #define WDM_MINORVERSION 0x00
3699 #ifndef USE_DMA_MACROS
3700 #define USE_DMA_MACROS
3703 #ifndef NO_LEGACY_DRIVERS
3704 #define NO_LEGACY_DRIVERS
3707 #endif /* defined(_WIN64) */
3709 #define STATUS_CONTINUE_COMPLETION STATUS_SUCCESS
3711 #define CONNECT_FULLY_SPECIFIED 0x1
3712 #define CONNECT_LINE_BASED 0x2
3713 #define CONNECT_MESSAGE_BASED 0x3
3714 #define CONNECT_FULLY_SPECIFIED_GROUP 0x4
3715 #define CONNECT_CURRENT_VERSION 0x4
3717 #define POOL_COLD_ALLOCATION 256
3718 #define POOL_QUOTA_FAIL_INSTEAD_OF_RAISE 8
3719 #define POOL_RAISE_IF_ALLOCATION_FAILURE 16
3721 #define IO_TYPE_ADAPTER 1
3722 #define IO_TYPE_CONTROLLER 2
3723 #define IO_TYPE_DEVICE 3
3724 #define IO_TYPE_DRIVER 4
3725 #define IO_TYPE_FILE 5
3726 #define IO_TYPE_IRP 6
3727 #define IO_TYPE_MASTER_ADAPTER 7
3728 #define IO_TYPE_OPEN_PACKET 8
3729 #define IO_TYPE_TIMER 9
3730 #define IO_TYPE_VPB 10
3731 #define IO_TYPE_ERROR_LOG 11
3732 #define IO_TYPE_ERROR_MESSAGE 12
3733 #define IO_TYPE_DEVICE_OBJECT_EXTENSION 13
3735 #define IO_TYPE_CSQ_IRP_CONTEXT 1
3736 #define IO_TYPE_CSQ 2
3737 #define IO_TYPE_CSQ_EX 3
3739 /* IO_RESOURCE_DESCRIPTOR.Option */
3740 #define IO_RESOURCE_PREFERRED 0x01
3741 #define IO_RESOURCE_DEFAULT 0x02
3742 #define IO_RESOURCE_ALTERNATIVE 0x08
3744 #define FILE_DEVICE_BEEP 0x00000001
3745 #define FILE_DEVICE_CD_ROM 0x00000002
3746 #define FILE_DEVICE_CD_ROM_FILE_SYSTEM 0x00000003
3747 #define FILE_DEVICE_CONTROLLER 0x00000004
3748 #define FILE_DEVICE_DATALINK 0x00000005
3749 #define FILE_DEVICE_DFS 0x00000006
3750 #define FILE_DEVICE_DISK 0x00000007
3751 #define FILE_DEVICE_DISK_FILE_SYSTEM 0x00000008
3752 #define FILE_DEVICE_FILE_SYSTEM 0x00000009
3753 #define FILE_DEVICE_INPORT_PORT 0x0000000a
3754 #define FILE_DEVICE_KEYBOARD 0x0000000b
3755 #define FILE_DEVICE_MAILSLOT 0x0000000c
3756 #define FILE_DEVICE_MIDI_IN 0x0000000d
3757 #define FILE_DEVICE_MIDI_OUT 0x0000000e
3758 #define FILE_DEVICE_MOUSE 0x0000000f
3759 #define FILE_DEVICE_MULTI_UNC_PROVIDER 0x00000010
3760 #define FILE_DEVICE_NAMED_PIPE 0x00000011
3761 #define FILE_DEVICE_NETWORK 0x00000012
3762 #define FILE_DEVICE_NETWORK_BROWSER 0x00000013
3763 #define FILE_DEVICE_NETWORK_FILE_SYSTEM 0x00000014
3764 #define FILE_DEVICE_NULL 0x00000015
3765 #define FILE_DEVICE_PARALLEL_PORT 0x00000016
3766 #define FILE_DEVICE_PHYSICAL_NETCARD 0x00000017
3767 #define FILE_DEVICE_PRINTER 0x00000018
3768 #define FILE_DEVICE_SCANNER 0x00000019
3769 #define FILE_DEVICE_SERIAL_MOUSE_PORT 0x0000001a
3770 #define FILE_DEVICE_SERIAL_PORT 0x0000001b
3771 #define FILE_DEVICE_SCREEN 0x0000001c
3772 #define FILE_DEVICE_SOUND 0x0000001d
3773 #define FILE_DEVICE_STREAMS 0x0000001e
3774 #define FILE_DEVICE_TAPE 0x0000001f
3775 #define FILE_DEVICE_TAPE_FILE_SYSTEM 0x00000020
3776 #define FILE_DEVICE_TRANSPORT 0x00000021
3777 #define FILE_DEVICE_UNKNOWN 0x00000022
3778 #define FILE_DEVICE_VIDEO 0x00000023
3779 #define FILE_DEVICE_VIRTUAL_DISK 0x00000024
3780 #define FILE_DEVICE_WAVE_IN 0x00000025
3781 #define FILE_DEVICE_WAVE_OUT 0x00000026
3782 #define FILE_DEVICE_8042_PORT 0x00000027
3783 #define FILE_DEVICE_NETWORK_REDIRECTOR 0x00000028
3784 #define FILE_DEVICE_BATTERY 0x00000029
3785 #define FILE_DEVICE_BUS_EXTENDER 0x0000002a
3786 #define FILE_DEVICE_MODEM 0x0000002b
3787 #define FILE_DEVICE_VDM 0x0000002c
3788 #define FILE_DEVICE_MASS_STORAGE 0x0000002d
3789 #define FILE_DEVICE_SMB 0x0000002e
3790 #define FILE_DEVICE_KS 0x0000002f
3791 #define FILE_DEVICE_CHANGER 0x00000030
3792 #define FILE_DEVICE_SMARTCARD 0x00000031
3793 #define FILE_DEVICE_ACPI 0x00000032
3794 #define FILE_DEVICE_DVD 0x00000033
3795 #define FILE_DEVICE_FULLSCREEN_VIDEO 0x00000034
3796 #define FILE_DEVICE_DFS_FILE_SYSTEM 0x00000035
3797 #define FILE_DEVICE_DFS_VOLUME 0x00000036
3798 #define FILE_DEVICE_SERENUM 0x00000037
3799 #define FILE_DEVICE_TERMSRV 0x00000038
3800 #define FILE_DEVICE_KSEC 0x00000039
3801 #define FILE_DEVICE_FIPS 0x0000003A
3802 #define FILE_DEVICE_INFINIBAND 0x0000003B
3803 #define FILE_DEVICE_VMBUS 0x0000003E
3804 #define FILE_DEVICE_CRYPT_PROVIDER 0x0000003F
3805 #define FILE_DEVICE_WPD 0x00000040
3806 #define FILE_DEVICE_BLUETOOTH 0x00000041
3807 #define FILE_DEVICE_MT_COMPOSITE 0x00000042
3808 #define FILE_DEVICE_MT_TRANSPORT 0x00000043
3809 #define FILE_DEVICE_BIOMETRIC 0x00000044
3810 #define FILE_DEVICE_PMI 0x00000045
3812 #if defined(NT_PROCESSOR_GROUPS)
3814 typedef USHORT IRQ_DEVICE_POLICY
, *PIRQ_DEVICE_POLICY
;
3816 typedef enum _IRQ_DEVICE_POLICY_USHORT
{
3817 IrqPolicyMachineDefault
= 0,
3818 IrqPolicyAllCloseProcessors
= 1,
3819 IrqPolicyOneCloseProcessor
= 2,
3820 IrqPolicyAllProcessorsInMachine
= 3,
3821 IrqPolicyAllProcessorsInGroup
= 3,
3822 IrqPolicySpecifiedProcessors
= 4,
3823 IrqPolicySpreadMessagesAcrossAllProcessors
= 5};
3825 #else /* defined(NT_PROCESSOR_GROUPS) */
3827 typedef enum _IRQ_DEVICE_POLICY
{
3828 IrqPolicyMachineDefault
= 0,
3829 IrqPolicyAllCloseProcessors
,
3830 IrqPolicyOneCloseProcessor
,
3831 IrqPolicyAllProcessorsInMachine
,
3832 IrqPolicySpecifiedProcessors
,
3833 IrqPolicySpreadMessagesAcrossAllProcessors
3834 } IRQ_DEVICE_POLICY
, *PIRQ_DEVICE_POLICY
;
3838 typedef enum _IRQ_PRIORITY
{
3839 IrqPriorityUndefined
= 0,
3843 } IRQ_PRIORITY
, *PIRQ_PRIORITY
;
3845 typedef enum _IRQ_GROUP_POLICY
{
3846 GroupAffinityAllGroupZero
= 0,
3847 GroupAffinityDontCare
3848 } IRQ_GROUP_POLICY
, *PIRQ_GROUP_POLICY
;
3850 #define MAXIMUM_VOLUME_LABEL_LENGTH (32 * sizeof(WCHAR))
3852 typedef struct _OBJECT_HANDLE_INFORMATION
{
3853 ULONG HandleAttributes
;
3854 ACCESS_MASK GrantedAccess
;
3855 } OBJECT_HANDLE_INFORMATION
, *POBJECT_HANDLE_INFORMATION
;
3857 typedef struct _CLIENT_ID
{
3858 HANDLE UniqueProcess
;
3859 HANDLE UniqueThread
;
3860 } CLIENT_ID
, *PCLIENT_ID
;
3862 typedef struct _VPB
{
3866 USHORT VolumeLabelLength
;
3867 struct _DEVICE_OBJECT
*DeviceObject
;
3868 struct _DEVICE_OBJECT
*RealDevice
;
3870 ULONG ReferenceCount
;
3871 WCHAR VolumeLabel
[MAXIMUM_VOLUME_LABEL_LENGTH
/ sizeof(WCHAR
)];
3874 typedef enum _IO_ALLOCATION_ACTION
{
3877 DeallocateObjectKeepRegisters
3878 } IO_ALLOCATION_ACTION
, *PIO_ALLOCATION_ACTION
;
3880 typedef IO_ALLOCATION_ACTION
3881 (NTAPI DRIVER_CONTROL
)(
3882 IN
struct _DEVICE_OBJECT
*DeviceObject
,
3883 IN
struct _IRP
*Irp
,
3884 IN PVOID MapRegisterBase
,
3886 typedef DRIVER_CONTROL
*PDRIVER_CONTROL
;
3888 typedef struct _WAIT_CONTEXT_BLOCK
{
3889 KDEVICE_QUEUE_ENTRY WaitQueueEntry
;
3890 PDRIVER_CONTROL DeviceRoutine
;
3891 PVOID DeviceContext
;
3892 ULONG NumberOfMapRegisters
;
3895 PKDPC BufferChainingDpc
;
3896 } WAIT_CONTEXT_BLOCK
, *PWAIT_CONTEXT_BLOCK
;
3898 /* DEVICE_OBJECT.Flags */
3899 #define DO_VERIFY_VOLUME 0x00000002
3900 #define DO_BUFFERED_IO 0x00000004
3901 #define DO_EXCLUSIVE 0x00000008
3902 #define DO_DIRECT_IO 0x00000010
3903 #define DO_MAP_IO_BUFFER 0x00000020
3904 #define DO_DEVICE_INITIALIZING 0x00000080
3905 #define DO_SHUTDOWN_REGISTERED 0x00000800
3906 #define DO_BUS_ENUMERATED_DEVICE 0x00001000
3907 #define DO_POWER_PAGABLE 0x00002000
3908 #define DO_POWER_INRUSH 0x00004000
3910 /* DEVICE_OBJECT.Characteristics */
3911 #define FILE_REMOVABLE_MEDIA 0x00000001
3912 #define FILE_READ_ONLY_DEVICE 0x00000002
3913 #define FILE_FLOPPY_DISKETTE 0x00000004
3914 #define FILE_WRITE_ONCE_MEDIA 0x00000008
3915 #define FILE_REMOTE_DEVICE 0x00000010
3916 #define FILE_DEVICE_IS_MOUNTED 0x00000020
3917 #define FILE_VIRTUAL_VOLUME 0x00000040
3918 #define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080
3919 #define FILE_DEVICE_SECURE_OPEN 0x00000100
3920 #define FILE_CHARACTERISTIC_PNP_DEVICE 0x00000800
3921 #define FILE_CHARACTERISTIC_TS_DEVICE 0x00001000
3922 #define FILE_CHARACTERISTIC_WEBDAV_DEVICE 0x00002000
3924 /* DEVICE_OBJECT.AlignmentRequirement */
3925 #define FILE_BYTE_ALIGNMENT 0x00000000
3926 #define FILE_WORD_ALIGNMENT 0x00000001
3927 #define FILE_LONG_ALIGNMENT 0x00000003
3928 #define FILE_QUAD_ALIGNMENT 0x00000007
3929 #define FILE_OCTA_ALIGNMENT 0x0000000f
3930 #define FILE_32_BYTE_ALIGNMENT 0x0000001f
3931 #define FILE_64_BYTE_ALIGNMENT 0x0000003f
3932 #define FILE_128_BYTE_ALIGNMENT 0x0000007f
3933 #define FILE_256_BYTE_ALIGNMENT 0x000000ff
3934 #define FILE_512_BYTE_ALIGNMENT 0x000001ff
3936 /* DEVICE_OBJECT.DeviceType */
3937 #define DEVICE_TYPE ULONG
3939 typedef struct _DEVICE_OBJECT
{
3942 LONG ReferenceCount
;
3943 struct _DRIVER_OBJECT
*DriverObject
;
3944 struct _DEVICE_OBJECT
*NextDevice
;
3945 struct _DEVICE_OBJECT
*AttachedDevice
;
3946 struct _IRP
*CurrentIrp
;
3949 ULONG Characteristics
;
3951 PVOID DeviceExtension
;
3952 DEVICE_TYPE DeviceType
;
3955 LIST_ENTRY ListEntry
;
3956 WAIT_CONTEXT_BLOCK Wcb
;
3958 ULONG AlignmentRequirement
;
3959 KDEVICE_QUEUE DeviceQueue
;
3961 ULONG ActiveThreadCount
;
3962 PSECURITY_DESCRIPTOR SecurityDescriptor
;
3966 struct _DEVOBJ_EXTENSION
*DeviceObjectExtension
;
3968 } DEVICE_OBJECT
, *PDEVICE_OBJECT
;
3970 typedef enum _IO_SESSION_STATE
{
3971 IoSessionStateCreated
= 1,
3972 IoSessionStateInitialized
,
3973 IoSessionStateConnected
,
3974 IoSessionStateDisconnected
,
3975 IoSessionStateDisconnectedLoggedOn
,
3976 IoSessionStateLoggedOn
,
3977 IoSessionStateLoggedOff
,
3978 IoSessionStateTerminated
,
3980 } IO_SESSION_STATE
, *PIO_SESSION_STATE
;
3982 typedef enum _IO_COMPLETION_ROUTINE_RESULT
{
3983 ContinueCompletion
= STATUS_CONTINUE_COMPLETION
,
3984 StopCompletion
= STATUS_MORE_PROCESSING_REQUIRED
3985 } IO_COMPLETION_ROUTINE_RESULT
, *PIO_COMPLETION_ROUTINE_RESULT
;
3987 typedef struct _IO_INTERRUPT_MESSAGE_INFO_ENTRY
{
3988 PHYSICAL_ADDRESS MessageAddress
;
3989 KAFFINITY TargetProcessorSet
;
3990 PKINTERRUPT InterruptObject
;
3994 KINTERRUPT_MODE Mode
;
3995 KINTERRUPT_POLARITY Polarity
;
3996 } IO_INTERRUPT_MESSAGE_INFO_ENTRY
, *PIO_INTERRUPT_MESSAGE_INFO_ENTRY
;
3998 typedef struct _IO_INTERRUPT_MESSAGE_INFO
{
4001 IO_INTERRUPT_MESSAGE_INFO_ENTRY MessageInfo
[1];
4002 } IO_INTERRUPT_MESSAGE_INFO
, *PIO_INTERRUPT_MESSAGE_INFO
;
4004 typedef struct _IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS
{
4005 IN PDEVICE_OBJECT PhysicalDeviceObject
;
4006 OUT PKINTERRUPT
*InterruptObject
;
4007 IN PKSERVICE_ROUTINE ServiceRoutine
;
4008 IN PVOID ServiceContext
;
4009 IN PKSPIN_LOCK SpinLock OPTIONAL
;
4010 IN KIRQL SynchronizeIrql
;
4011 IN BOOLEAN FloatingSave
;
4012 IN BOOLEAN ShareVector
;
4015 IN KINTERRUPT_MODE InterruptMode
;
4016 IN KAFFINITY ProcessorEnableMask
;
4018 } IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS
, *PIO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS
;
4020 typedef struct _IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS
{
4021 IN PDEVICE_OBJECT PhysicalDeviceObject
;
4022 OUT PKINTERRUPT
*InterruptObject
;
4023 IN PKSERVICE_ROUTINE ServiceRoutine
;
4024 IN PVOID ServiceContext
;
4025 IN PKSPIN_LOCK SpinLock OPTIONAL
;
4026 IN KIRQL SynchronizeIrql OPTIONAL
;
4027 IN BOOLEAN FloatingSave
;
4028 } IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS
, *PIO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS
;
4030 typedef struct _IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS
{
4031 IN PDEVICE_OBJECT PhysicalDeviceObject
;
4034 OUT PIO_INTERRUPT_MESSAGE_INFO
*InterruptMessageTable
;
4035 OUT PKINTERRUPT
*InterruptObject
;
4036 } ConnectionContext
;
4037 IN PKMESSAGE_SERVICE_ROUTINE MessageServiceRoutine
;
4038 IN PVOID ServiceContext
;
4039 IN PKSPIN_LOCK SpinLock OPTIONAL
;
4040 IN KIRQL SynchronizeIrql OPTIONAL
;
4041 IN BOOLEAN FloatingSave
;
4042 IN PKSERVICE_ROUTINE FallBackServiceRoutine OPTIONAL
;
4043 } IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS
, *PIO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS
;
4045 typedef struct _IO_CONNECT_INTERRUPT_PARAMETERS
{
4046 IN OUT ULONG Version
;
4048 IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS FullySpecified
;
4049 IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS LineBased
;
4050 IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS MessageBased
;
4052 } IO_CONNECT_INTERRUPT_PARAMETERS
, *PIO_CONNECT_INTERRUPT_PARAMETERS
;
4054 typedef struct _IO_DISCONNECT_INTERRUPT_PARAMETERS
{
4058 IN PKINTERRUPT InterruptObject
;
4059 IN PIO_INTERRUPT_MESSAGE_INFO InterruptMessageTable
;
4060 } ConnectionContext
;
4061 } IO_DISCONNECT_INTERRUPT_PARAMETERS
, *PIO_DISCONNECT_INTERRUPT_PARAMETERS
;
4063 typedef enum _IO_ACCESS_TYPE
{
4069 typedef enum _IO_ACCESS_MODE
{
4074 typedef enum _IO_CONTAINER_NOTIFICATION_CLASS
{
4075 IoSessionStateNotification
,
4076 IoMaxContainerNotificationClass
4077 } IO_CONTAINER_NOTIFICATION_CLASS
;
4079 typedef struct _IO_SESSION_STATE_NOTIFICATION
{
4085 } IO_SESSION_STATE_NOTIFICATION
, *PIO_SESSION_STATE_NOTIFICATION
;
4087 typedef enum _IO_CONTAINER_INFORMATION_CLASS
{
4088 IoSessionStateInformation
,
4089 IoMaxContainerInformationClass
4090 } IO_CONTAINER_INFORMATION_CLASS
;
4092 typedef struct _IO_SESSION_STATE_INFORMATION
{
4094 IO_SESSION_STATE SessionState
;
4095 BOOLEAN LocalSession
;
4096 } IO_SESSION_STATE_INFORMATION
, *PIO_SESSION_STATE_INFORMATION
;
4098 #if (NTDDI_VERSION >= NTDDI_WIN7)
4101 (NTAPI
*PIO_CONTAINER_NOTIFICATION_FUNCTION
)(
4105 (NTAPI IO_SESSION_NOTIFICATION_FUNCTION
)(
4106 IN PVOID SessionObject
,
4110 IN PVOID NotificationPayload
,
4111 IN ULONG PayloadLength
);
4113 typedef IO_SESSION_NOTIFICATION_FUNCTION
*PIO_SESSION_NOTIFICATION_FUNCTION
;
4117 typedef struct _IO_REMOVE_LOCK_TRACKING_BLOCK
* PIO_REMOVE_LOCK_TRACKING_BLOCK
;
4119 typedef struct _IO_REMOVE_LOCK_COMMON_BLOCK
{
4121 BOOLEAN Reserved
[3];
4122 volatile LONG IoCount
;
4124 } IO_REMOVE_LOCK_COMMON_BLOCK
;
4126 typedef struct _IO_REMOVE_LOCK_DBG_BLOCK
{
4129 LONGLONG MaxLockedTicks
;
4131 LIST_ENTRY LockList
;
4133 volatile LONG LowMemoryCount
;
4136 PIO_REMOVE_LOCK_TRACKING_BLOCK Blocks
;
4137 } IO_REMOVE_LOCK_DBG_BLOCK
;
4139 typedef struct _IO_REMOVE_LOCK
{
4140 IO_REMOVE_LOCK_COMMON_BLOCK Common
;
4142 IO_REMOVE_LOCK_DBG_BLOCK Dbg
;
4144 } IO_REMOVE_LOCK
, *PIO_REMOVE_LOCK
;
4146 typedef struct _IO_WORKITEM
*PIO_WORKITEM
;
4149 (NTAPI IO_WORKITEM_ROUTINE
)(
4150 IN PDEVICE_OBJECT DeviceObject
,
4152 typedef IO_WORKITEM_ROUTINE
*PIO_WORKITEM_ROUTINE
;
4155 (NTAPI IO_WORKITEM_ROUTINE_EX
)(
4157 IN PVOID Context OPTIONAL
,
4158 IN PIO_WORKITEM IoWorkItem
);
4159 typedef IO_WORKITEM_ROUTINE_EX
*PIO_WORKITEM_ROUTINE_EX
;
4161 typedef struct _SHARE_ACCESS
{
4169 } SHARE_ACCESS
, *PSHARE_ACCESS
;
4171 /* While MS WDK uses inheritance in C++, we cannot do this with gcc, as
4172 inheritance, even from a struct renders the type non-POD. So we use
4174 #define PCI_COMMON_HEADER_LAYOUT \
4183 UCHAR CacheLineSize; \
4184 UCHAR LatencyTimer; \
4188 struct _PCI_HEADER_TYPE_0 { \
4189 ULONG BaseAddresses[PCI_TYPE0_ADDRESSES]; \
4191 USHORT SubVendorID; \
4192 USHORT SubSystemID; \
4193 ULONG ROMBaseAddress; \
4194 UCHAR CapabilitiesPtr; \
4195 UCHAR Reserved1[3]; \
4197 UCHAR InterruptLine; \
4198 UCHAR InterruptPin; \
4199 UCHAR MinimumGrant; \
4200 UCHAR MaximumLatency; \
4202 struct _PCI_HEADER_TYPE_1 { \
4203 ULONG BaseAddresses[PCI_TYPE1_ADDRESSES]; \
4205 UCHAR SecondaryBus; \
4206 UCHAR SubordinateBus; \
4207 UCHAR SecondaryLatency; \
4210 USHORT SecondaryStatus; \
4211 USHORT MemoryBase; \
4212 USHORT MemoryLimit; \
4213 USHORT PrefetchBase; \
4214 USHORT PrefetchLimit; \
4215 ULONG PrefetchBaseUpper32; \
4216 ULONG PrefetchLimitUpper32; \
4217 USHORT IOBaseUpper16; \
4218 USHORT IOLimitUpper16; \
4219 UCHAR CapabilitiesPtr; \
4220 UCHAR Reserved1[3]; \
4221 ULONG ROMBaseAddress; \
4222 UCHAR InterruptLine; \
4223 UCHAR InterruptPin; \
4224 USHORT BridgeControl; \
4226 struct _PCI_HEADER_TYPE_2 { \
4227 ULONG SocketRegistersBaseAddress; \
4228 UCHAR CapabilitiesPtr; \
4230 USHORT SecondaryStatus; \
4232 UCHAR SecondaryBus; \
4233 UCHAR SubordinateBus; \
4234 UCHAR SecondaryLatency; \
4238 } Range[PCI_TYPE2_ADDRESSES-1]; \
4239 UCHAR InterruptLine; \
4240 UCHAR InterruptPin; \
4241 USHORT BridgeControl; \
4245 typedef enum _CREATE_FILE_TYPE
{
4247 CreateFileTypeNamedPipe
,
4248 CreateFileTypeMailslot
4251 #define IO_FORCE_ACCESS_CHECK 0x001
4252 #define IO_NO_PARAMETER_CHECKING 0x100
4254 #define IO_REPARSE 0x0
4255 #define IO_REMOUNT 0x1
4257 typedef struct _IO_STATUS_BLOCK
{
4258 _ANONYMOUS_UNION
union {
4262 ULONG_PTR Information
;
4263 } IO_STATUS_BLOCK
, *PIO_STATUS_BLOCK
;
4266 typedef struct _IO_STATUS_BLOCK32
{
4269 } IO_STATUS_BLOCK32
, *PIO_STATUS_BLOCK32
;
4273 (NTAPI
*PIO_APC_ROUTINE
)(
4274 IN PVOID ApcContext
,
4275 IN PIO_STATUS_BLOCK IoStatusBlock
,
4278 #define PIO_APC_ROUTINE_DEFINED
4280 typedef enum _IO_SESSION_EVENT
{
4281 IoSessionEventIgnore
= 0,
4282 IoSessionEventCreated
,
4283 IoSessionEventTerminated
,
4284 IoSessionEventConnected
,
4285 IoSessionEventDisconnected
,
4286 IoSessionEventLogon
,
4287 IoSessionEventLogoff
,
4289 } IO_SESSION_EVENT
, *PIO_SESSION_EVENT
;
4291 #define IO_SESSION_STATE_ALL_EVENTS 0xffffffff
4292 #define IO_SESSION_STATE_CREATION_EVENT 0x00000001
4293 #define IO_SESSION_STATE_TERMINATION_EVENT 0x00000002
4294 #define IO_SESSION_STATE_CONNECT_EVENT 0x00000004
4295 #define IO_SESSION_STATE_DISCONNECT_EVENT 0x00000008
4296 #define IO_SESSION_STATE_LOGON_EVENT 0x00000010
4297 #define IO_SESSION_STATE_LOGOFF_EVENT 0x00000020
4299 #define IO_SESSION_STATE_VALID_EVENT_MASK 0x0000003f
4301 #define IO_SESSION_MAX_PAYLOAD_SIZE 256L
4303 typedef struct _IO_SESSION_CONNECT_INFO
{
4305 BOOLEAN LocalSession
;
4306 } IO_SESSION_CONNECT_INFO
, *PIO_SESSION_CONNECT_INFO
;
4308 #define EVENT_INCREMENT 1
4309 #define IO_NO_INCREMENT 0
4310 #define IO_CD_ROM_INCREMENT 1
4311 #define IO_DISK_INCREMENT 1
4312 #define IO_KEYBOARD_INCREMENT 6
4313 #define IO_MAILSLOT_INCREMENT 2
4314 #define IO_MOUSE_INCREMENT 6
4315 #define IO_NAMED_PIPE_INCREMENT 2
4316 #define IO_NETWORK_INCREMENT 2
4317 #define IO_PARALLEL_INCREMENT 1
4318 #define IO_SERIAL_INCREMENT 2
4319 #define IO_SOUND_INCREMENT 8
4320 #define IO_VIDEO_INCREMENT 1
4321 #define SEMAPHORE_INCREMENT 1
4323 #define MM_MAXIMUM_DISK_IO_SIZE (0x10000)
4325 typedef struct _BOOTDISK_INFORMATION
{
4326 LONGLONG BootPartitionOffset
;
4327 LONGLONG SystemPartitionOffset
;
4328 ULONG BootDeviceSignature
;
4329 ULONG SystemDeviceSignature
;
4330 } BOOTDISK_INFORMATION
, *PBOOTDISK_INFORMATION
;
4332 typedef struct _BOOTDISK_INFORMATION_EX
{
4333 LONGLONG BootPartitionOffset
;
4334 LONGLONG SystemPartitionOffset
;
4335 ULONG BootDeviceSignature
;
4336 ULONG SystemDeviceSignature
;
4337 GUID BootDeviceGuid
;
4338 GUID SystemDeviceGuid
;
4339 BOOLEAN BootDeviceIsGpt
;
4340 BOOLEAN SystemDeviceIsGpt
;
4341 } BOOTDISK_INFORMATION_EX
, *PBOOTDISK_INFORMATION_EX
;
4343 #if (NTDDI_VERSION >= NTDDI_WIN7)
4345 typedef struct _LOADER_PARTITION_INFORMATION_EX
{
4346 ULONG PartitionStyle
;
4347 ULONG PartitionNumber
;
4353 } LOADER_PARTITION_INFORMATION_EX
, *PLOADER_PARTITION_INFORMATION_EX
;
4355 typedef struct _BOOTDISK_INFORMATION_LITE
{
4356 ULONG NumberEntries
;
4357 LOADER_PARTITION_INFORMATION_EX Entries
[1];
4358 } BOOTDISK_INFORMATION_LITE
, *PBOOTDISK_INFORMATION_LITE
;
4362 #if (NTDDI_VERSION >= NTDDI_VISTA)
4363 typedef struct _BOOTDISK_INFORMATION_LITE
{
4364 ULONG BootDeviceSignature
;
4365 ULONG SystemDeviceSignature
;
4366 GUID BootDeviceGuid
;
4367 GUID SystemDeviceGuid
;
4368 BOOLEAN BootDeviceIsGpt
;
4369 BOOLEAN SystemDeviceIsGpt
;
4370 } BOOTDISK_INFORMATION_LITE
, *PBOOTDISK_INFORMATION_LITE
;
4371 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
4373 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
4375 #include <pshpack1.h>
4377 typedef struct _EISA_MEMORY_TYPE
{
4384 UCHAR MoreEntries
:1;
4385 } EISA_MEMORY_TYPE
, *PEISA_MEMORY_TYPE
;
4387 typedef struct _EISA_MEMORY_CONFIGURATION
{
4388 EISA_MEMORY_TYPE ConfigurationByte
;
4390 USHORT AddressLowWord
;
4391 UCHAR AddressHighByte
;
4393 } EISA_MEMORY_CONFIGURATION
, *PEISA_MEMORY_CONFIGURATION
;
4395 typedef struct _EISA_IRQ_DESCRIPTOR
{
4398 UCHAR LevelTriggered
:1;
4400 UCHAR MoreEntries
:1;
4401 } EISA_IRQ_DESCRIPTOR
, *PEISA_IRQ_DESCRIPTOR
;
4403 typedef struct _EISA_IRQ_CONFIGURATION
{
4404 EISA_IRQ_DESCRIPTOR ConfigurationByte
;
4406 } EISA_IRQ_CONFIGURATION
, *PEISA_IRQ_CONFIGURATION
;
4408 typedef struct _DMA_CONFIGURATION_BYTE0
{
4412 UCHAR MoreEntries
:1;
4413 } DMA_CONFIGURATION_BYTE0
;
4415 typedef struct _DMA_CONFIGURATION_BYTE1
{
4417 UCHAR TransferSize
:2;
4420 } DMA_CONFIGURATION_BYTE1
;
4422 typedef struct _EISA_DMA_CONFIGURATION
{
4423 DMA_CONFIGURATION_BYTE0 ConfigurationByte0
;
4424 DMA_CONFIGURATION_BYTE1 ConfigurationByte1
;
4425 } EISA_DMA_CONFIGURATION
, *PEISA_DMA_CONFIGURATION
;
4427 typedef struct _EISA_PORT_DESCRIPTOR
{
4428 UCHAR NumberPorts
:5;
4431 UCHAR MoreEntries
:1;
4432 } EISA_PORT_DESCRIPTOR
, *PEISA_PORT_DESCRIPTOR
;
4434 typedef struct _EISA_PORT_CONFIGURATION
{
4435 EISA_PORT_DESCRIPTOR Configuration
;
4437 } EISA_PORT_CONFIGURATION
, *PEISA_PORT_CONFIGURATION
;
4439 typedef struct _CM_EISA_SLOT_INFORMATION
{
4442 UCHAR MajorRevision
;
4443 UCHAR MinorRevision
;
4445 UCHAR NumberFunctions
;
4446 UCHAR FunctionInformation
;
4448 } CM_EISA_SLOT_INFORMATION
, *PCM_EISA_SLOT_INFORMATION
;
4450 typedef struct _CM_EISA_FUNCTION_INFORMATION
{
4454 UCHAR MinorRevision
;
4455 UCHAR MajorRevision
;
4456 UCHAR Selections
[26];
4457 UCHAR FunctionFlags
;
4458 UCHAR TypeString
[80];
4459 EISA_MEMORY_CONFIGURATION EisaMemory
[9];
4460 EISA_IRQ_CONFIGURATION EisaIrq
[7];
4461 EISA_DMA_CONFIGURATION EisaDma
[4];
4462 EISA_PORT_CONFIGURATION EisaPort
[20];
4463 UCHAR InitializationData
[60];
4464 } CM_EISA_FUNCTION_INFORMATION
, *PCM_EISA_FUNCTION_INFORMATION
;
4466 #include <poppack.h>
4468 /* CM_EISA_FUNCTION_INFORMATION.FunctionFlags */
4470 #define EISA_FUNCTION_ENABLED 0x80
4471 #define EISA_FREE_FORM_DATA 0x40
4472 #define EISA_HAS_PORT_INIT_ENTRY 0x20
4473 #define EISA_HAS_PORT_RANGE 0x10
4474 #define EISA_HAS_DMA_ENTRY 0x08
4475 #define EISA_HAS_IRQ_ENTRY 0x04
4476 #define EISA_HAS_MEMORY_ENTRY 0x02
4477 #define EISA_HAS_TYPE_ENTRY 0x01
4478 #define EISA_HAS_INFORMATION \
4479 (EISA_HAS_PORT_RANGE + EISA_HAS_DMA_ENTRY + EISA_HAS_IRQ_ENTRY \
4480 + EISA_HAS_MEMORY_ENTRY + EISA_HAS_TYPE_ENTRY)
4482 #define EISA_MORE_ENTRIES 0x80
4483 #define EISA_SYSTEM_MEMORY 0x00
4484 #define EISA_MEMORY_TYPE_RAM 0x01
4486 /* CM_EISA_SLOT_INFORMATION.ReturnCode */
4488 #define EISA_INVALID_SLOT 0x80
4489 #define EISA_INVALID_FUNCTION 0x81
4490 #define EISA_INVALID_CONFIGURATION 0x82
4491 #define EISA_EMPTY_SLOT 0x83
4492 #define EISA_INVALID_BIOS_CALL 0x86
4495 ** Plug and Play structures
4499 (NTAPI
*PINTERFACE_REFERENCE
)(
4503 (NTAPI
*PINTERFACE_DEREFERENCE
)(
4507 (NTAPI TRANSLATE_BUS_ADDRESS
)(
4509 IN PHYSICAL_ADDRESS BusAddress
,
4511 IN OUT PULONG AddressSpace
,
4512 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
4513 typedef TRANSLATE_BUS_ADDRESS
*PTRANSLATE_BUS_ADDRESS
;
4515 typedef struct _DMA_ADAPTER
*
4516 (NTAPI GET_DMA_ADAPTER
)(
4518 IN
struct _DEVICE_DESCRIPTION
*DeviceDescriptor
,
4519 OUT PULONG NumberOfMapRegisters
);
4520 typedef GET_DMA_ADAPTER
*PGET_DMA_ADAPTER
;
4523 (NTAPI GET_SET_DEVICE_DATA
)(
4529 typedef GET_SET_DEVICE_DATA
*PGET_SET_DEVICE_DATA
;
4531 typedef enum _DEVICE_INSTALL_STATE
{
4532 InstallStateInstalled
,
4533 InstallStateNeedsReinstall
,
4534 InstallStateFailedInstall
,
4535 InstallStateFinishInstall
4536 } DEVICE_INSTALL_STATE
, *PDEVICE_INSTALL_STATE
;
4538 typedef struct _LEGACY_BUS_INFORMATION
{
4540 INTERFACE_TYPE LegacyBusType
;
4542 } LEGACY_BUS_INFORMATION
, *PLEGACY_BUS_INFORMATION
;
4544 typedef enum _DEVICE_REMOVAL_POLICY
{
4545 RemovalPolicyExpectNoRemoval
= 1,
4546 RemovalPolicyExpectOrderlyRemoval
= 2,
4547 RemovalPolicyExpectSurpriseRemoval
= 3
4548 } DEVICE_REMOVAL_POLICY
, *PDEVICE_REMOVAL_POLICY
;
4551 (NTAPI
*PREENUMERATE_SELF
)(
4554 typedef struct _REENUMERATE_SELF_INTERFACE_STANDARD
{
4558 PINTERFACE_REFERENCE InterfaceReference
;
4559 PINTERFACE_DEREFERENCE InterfaceDereference
;
4560 PREENUMERATE_SELF SurpriseRemoveAndReenumerateSelf
;
4561 } REENUMERATE_SELF_INTERFACE_STANDARD
, *PREENUMERATE_SELF_INTERFACE_STANDARD
;
4564 (NTAPI
*PIO_DEVICE_EJECT_CALLBACK
)(
4566 IN OUT PVOID Context OPTIONAL
);
4568 #define PCI_DEVICE_PRESENT_INTERFACE_VERSION 1
4570 /* PCI_DEVICE_PRESENCE_PARAMETERS.Flags */
4571 #define PCI_USE_SUBSYSTEM_IDS 0x00000001
4572 #define PCI_USE_REVISION 0x00000002
4573 #define PCI_USE_VENDEV_IDS 0x00000004
4574 #define PCI_USE_CLASS_SUBCLASS 0x00000008
4575 #define PCI_USE_PROGIF 0x00000010
4576 #define PCI_USE_LOCAL_BUS 0x00000020
4577 #define PCI_USE_LOCAL_DEVICE 0x00000040
4579 typedef struct _PCI_DEVICE_PRESENCE_PARAMETERS
{
4590 } PCI_DEVICE_PRESENCE_PARAMETERS
, *PPCI_DEVICE_PRESENCE_PARAMETERS
;
4593 (NTAPI PCI_IS_DEVICE_PRESENT
)(
4596 IN UCHAR RevisionID
,
4597 IN USHORT SubVendorID
,
4598 IN USHORT SubSystemID
,
4600 typedef PCI_IS_DEVICE_PRESENT
*PPCI_IS_DEVICE_PRESENT
;
4603 (NTAPI PCI_IS_DEVICE_PRESENT_EX
)(
4605 IN PPCI_DEVICE_PRESENCE_PARAMETERS Parameters
);
4606 typedef PCI_IS_DEVICE_PRESENT_EX
*PPCI_IS_DEVICE_PRESENT_EX
;
4608 typedef struct _BUS_INTERFACE_STANDARD
{
4612 PINTERFACE_REFERENCE InterfaceReference
;
4613 PINTERFACE_DEREFERENCE InterfaceDereference
;
4614 PTRANSLATE_BUS_ADDRESS TranslateBusAddress
;
4615 PGET_DMA_ADAPTER GetDmaAdapter
;
4616 PGET_SET_DEVICE_DATA SetBusData
;
4617 PGET_SET_DEVICE_DATA GetBusData
;
4618 } BUS_INTERFACE_STANDARD
, *PBUS_INTERFACE_STANDARD
;
4620 typedef struct _PCI_DEVICE_PRESENT_INTERFACE
{
4624 PINTERFACE_REFERENCE InterfaceReference
;
4625 PINTERFACE_DEREFERENCE InterfaceDereference
;
4626 PPCI_IS_DEVICE_PRESENT IsDevicePresent
;
4627 PPCI_IS_DEVICE_PRESENT_EX IsDevicePresentEx
;
4628 } PCI_DEVICE_PRESENT_INTERFACE
, *PPCI_DEVICE_PRESENT_INTERFACE
;
4630 typedef struct _DEVICE_CAPABILITIES
{
4635 ULONG LockSupported
:1;
4636 ULONG EjectSupported
:1;
4640 ULONG SilentInstall
:1;
4641 ULONG RawDeviceOK
:1;
4642 ULONG SurpriseRemovalOK
:1;
4647 ULONG HardwareDisabled
:1;
4649 ULONG WarmEjectSupported
:1;
4650 ULONG NoDisplayInUI
:1;
4654 DEVICE_POWER_STATE DeviceState
[PowerSystemMaximum
];
4655 SYSTEM_POWER_STATE SystemWake
;
4656 DEVICE_POWER_STATE DeviceWake
;
4660 } DEVICE_CAPABILITIES
, *PDEVICE_CAPABILITIES
;
4662 typedef struct _DEVICE_INTERFACE_CHANGE_NOTIFICATION
{
4666 GUID InterfaceClassGuid
;
4667 PUNICODE_STRING SymbolicLinkName
;
4668 } DEVICE_INTERFACE_CHANGE_NOTIFICATION
, *PDEVICE_INTERFACE_CHANGE_NOTIFICATION
;
4670 typedef struct _HWPROFILE_CHANGE_NOTIFICATION
{
4674 } HWPROFILE_CHANGE_NOTIFICATION
, *PHWPROFILE_CHANGE_NOTIFICATION
;
4678 typedef struct _INTERFACE
{
4682 PINTERFACE_REFERENCE InterfaceReference
;
4683 PINTERFACE_DEREFERENCE InterfaceDereference
;
4684 } INTERFACE
, *PINTERFACE
;
4686 typedef struct _PLUGPLAY_NOTIFICATION_HEADER
{
4690 } PLUGPLAY_NOTIFICATION_HEADER
, *PPLUGPLAY_NOTIFICATION_HEADER
;
4692 typedef ULONG PNP_DEVICE_STATE
, *PPNP_DEVICE_STATE
;
4694 /* PNP_DEVICE_STATE */
4696 #define PNP_DEVICE_DISABLED 0x00000001
4697 #define PNP_DEVICE_DONT_DISPLAY_IN_UI 0x00000002
4698 #define PNP_DEVICE_FAILED 0x00000004
4699 #define PNP_DEVICE_REMOVED 0x00000008
4700 #define PNP_DEVICE_RESOURCE_REQUIREMENTS_CHANGED 0x00000010
4701 #define PNP_DEVICE_NOT_DISABLEABLE 0x00000020
4703 typedef struct _TARGET_DEVICE_CUSTOM_NOTIFICATION
{
4707 struct _FILE_OBJECT
*FileObject
;
4708 LONG NameBufferOffset
;
4709 UCHAR CustomDataBuffer
[1];
4710 } TARGET_DEVICE_CUSTOM_NOTIFICATION
, *PTARGET_DEVICE_CUSTOM_NOTIFICATION
;
4712 typedef struct _TARGET_DEVICE_REMOVAL_NOTIFICATION
{
4716 struct _FILE_OBJECT
*FileObject
;
4717 } TARGET_DEVICE_REMOVAL_NOTIFICATION
, *PTARGET_DEVICE_REMOVAL_NOTIFICATION
;
4719 #if (NTDDI_VERSION >= NTDDI_VISTA)
4720 #include <devpropdef.h>
4721 #define PLUGPLAY_PROPERTY_PERSISTENT 0x00000001
4724 #define PNP_REPLACE_NO_MAP MAXLONGLONG
4727 (NTAPI
*PREPLACE_MAP_MEMORY
)(
4728 IN PHYSICAL_ADDRESS TargetPhysicalAddress
,
4729 IN PHYSICAL_ADDRESS SparePhysicalAddress
,
4730 IN OUT PLARGE_INTEGER NumberOfBytes
,
4731 OUT PVOID
*TargetAddress
,
4732 OUT PVOID
*SpareAddress
);
4734 typedef struct _PNP_REPLACE_MEMORY_LIST
{
4735 ULONG AllocatedCount
;
4737 ULONGLONG TotalLength
;
4739 PHYSICAL_ADDRESS Address
;
4741 } Ranges
[ANYSIZE_ARRAY
];
4742 } PNP_REPLACE_MEMORY_LIST
, *PPNP_REPLACE_MEMORY_LIST
;
4744 typedef struct _PNP_REPLACE_PROCESSOR_LIST
{
4745 PKAFFINITY Affinity
;
4747 ULONG AllocatedCount
;
4749 ULONG ApicIds
[ANYSIZE_ARRAY
];
4750 } PNP_REPLACE_PROCESSOR_LIST
, *PPNP_REPLACE_PROCESSOR_LIST
;
4752 typedef struct _PNP_REPLACE_PROCESSOR_LIST_V1
{
4753 KAFFINITY AffinityMask
;
4754 ULONG AllocatedCount
;
4756 ULONG ApicIds
[ANYSIZE_ARRAY
];
4757 } PNP_REPLACE_PROCESSOR_LIST_V1
, *PPNP_REPLACE_PROCESSOR_LIST_V1
;
4759 #define PNP_REPLACE_PARAMETERS_VERSION 2
4761 typedef struct _PNP_REPLACE_PARAMETERS
{
4766 PPNP_REPLACE_PROCESSOR_LIST TargetProcessors
;
4767 PPNP_REPLACE_PROCESSOR_LIST SpareProcessors
;
4768 PPNP_REPLACE_MEMORY_LIST TargetMemory
;
4769 PPNP_REPLACE_MEMORY_LIST SpareMemory
;
4770 PREPLACE_MAP_MEMORY MapMemory
;
4771 } PNP_REPLACE_PARAMETERS
, *PPNP_REPLACE_PARAMETERS
;
4774 (NTAPI
*PREPLACE_UNLOAD
)(
4778 (NTAPI
*PREPLACE_BEGIN
)(
4779 IN PPNP_REPLACE_PARAMETERS Parameters
,
4780 OUT PVOID
*Context
);
4783 (NTAPI
*PREPLACE_END
)(
4787 (NTAPI
*PREPLACE_MIRROR_PHYSICAL_MEMORY
)(
4789 IN PHYSICAL_ADDRESS PhysicalAddress
,
4790 IN LARGE_INTEGER ByteCount
);
4793 (NTAPI
*PREPLACE_SET_PROCESSOR_ID
)(
4799 (NTAPI
*PREPLACE_SWAP
)(
4803 (NTAPI
*PREPLACE_INITIATE_HARDWARE_MIRROR
)(
4807 (NTAPI
*PREPLACE_MIRROR_PLATFORM_MEMORY
)(
4811 (NTAPI
*PREPLACE_GET_MEMORY_DESTINATION
)(
4813 IN PHYSICAL_ADDRESS SourceAddress
,
4814 OUT PPHYSICAL_ADDRESS DestinationAddress
);
4817 (NTAPI
*PREPLACE_ENABLE_DISABLE_HARDWARE_QUIESCE
)(
4821 #define PNP_REPLACE_DRIVER_INTERFACE_VERSION 1
4822 #define PNP_REPLACE_DRIVER_INTERFACE_MINIMUM_SIZE \
4823 FIELD_OFFSET(PNP_REPLACE_DRIVER_INTERFACE, InitiateHardwareMirror)
4825 #define PNP_REPLACE_MEMORY_SUPPORTED 0x0001
4826 #define PNP_REPLACE_PROCESSOR_SUPPORTED 0x0002
4827 #define PNP_REPLACE_HARDWARE_MEMORY_MIRRORING 0x0004
4828 #define PNP_REPLACE_HARDWARE_PAGE_COPY 0x0008
4829 #define PNP_REPLACE_HARDWARE_QUIESCE 0x0010
4831 typedef struct _PNP_REPLACE_DRIVER_INTERFACE
{
4835 PREPLACE_UNLOAD Unload
;
4836 PREPLACE_BEGIN BeginReplace
;
4837 PREPLACE_END EndReplace
;
4838 PREPLACE_MIRROR_PHYSICAL_MEMORY MirrorPhysicalMemory
;
4839 PREPLACE_SET_PROCESSOR_ID SetProcessorId
;
4841 PREPLACE_INITIATE_HARDWARE_MIRROR InitiateHardwareMirror
;
4842 PREPLACE_MIRROR_PLATFORM_MEMORY MirrorPlatformMemory
;
4843 PREPLACE_GET_MEMORY_DESTINATION GetMemoryDestination
;
4844 PREPLACE_ENABLE_DISABLE_HARDWARE_QUIESCE EnableDisableHardwareQuiesce
;
4845 } PNP_REPLACE_DRIVER_INTERFACE
, *PPNP_REPLACE_DRIVER_INTERFACE
;
4848 (NTAPI
*PREPLACE_DRIVER_INIT
)(
4849 IN OUT PPNP_REPLACE_DRIVER_INTERFACE Interface
,
4852 typedef enum _DEVICE_USAGE_NOTIFICATION_TYPE
{
4853 DeviceUsageTypeUndefined
,
4854 DeviceUsageTypePaging
,
4855 DeviceUsageTypeHibernation
,
4856 DeviceUsageTypeDumpFile
4857 } DEVICE_USAGE_NOTIFICATION_TYPE
;
4859 typedef struct _POWER_SEQUENCE
{
4863 } POWER_SEQUENCE
, *PPOWER_SEQUENCE
;
4866 DevicePropertyDeviceDescription
= 0x0,
4867 DevicePropertyHardwareID
= 0x1,
4868 DevicePropertyCompatibleIDs
= 0x2,
4869 DevicePropertyBootConfiguration
= 0x3,
4870 DevicePropertyBootConfigurationTranslated
= 0x4,
4871 DevicePropertyClassName
= 0x5,
4872 DevicePropertyClassGuid
= 0x6,
4873 DevicePropertyDriverKeyName
= 0x7,
4874 DevicePropertyManufacturer
= 0x8,
4875 DevicePropertyFriendlyName
= 0x9,
4876 DevicePropertyLocationInformation
= 0xa,
4877 DevicePropertyPhysicalDeviceObjectName
= 0xb,
4878 DevicePropertyBusTypeGuid
= 0xc,
4879 DevicePropertyLegacyBusType
= 0xd,
4880 DevicePropertyBusNumber
= 0xe,
4881 DevicePropertyEnumeratorName
= 0xf,
4882 DevicePropertyAddress
= 0x10,
4883 DevicePropertyUINumber
= 0x11,
4884 DevicePropertyInstallState
= 0x12,
4885 DevicePropertyRemovalPolicy
= 0x13,
4886 DevicePropertyResourceRequirements
= 0x14,
4887 DevicePropertyAllocatedResources
= 0x15,
4888 DevicePropertyContainerID
= 0x16
4889 } DEVICE_REGISTRY_PROPERTY
;
4891 typedef enum _IO_NOTIFICATION_EVENT_CATEGORY
{
4892 EventCategoryReserved
,
4893 EventCategoryHardwareProfileChange
,
4894 EventCategoryDeviceInterfaceChange
,
4895 EventCategoryTargetDeviceChange
4896 } IO_NOTIFICATION_EVENT_CATEGORY
;
4898 typedef enum _IO_PRIORITY_HINT
{
4899 IoPriorityVeryLow
= 0,
4907 #define PNPNOTIFY_DEVICE_INTERFACE_INCLUDE_EXISTING_INTERFACES 0x00000001
4910 (NTAPI DRIVER_NOTIFICATION_CALLBACK_ROUTINE
)(
4911 IN PVOID NotificationStructure
,
4913 typedef DRIVER_NOTIFICATION_CALLBACK_ROUTINE
*PDRIVER_NOTIFICATION_CALLBACK_ROUTINE
;
4916 (NTAPI DEVICE_CHANGE_COMPLETE_CALLBACK
)(
4918 typedef DEVICE_CHANGE_COMPLETE_CALLBACK
*PDEVICE_CHANGE_COMPLETE_CALLBACK
;
4920 typedef enum _FILE_INFORMATION_CLASS
{
4921 FileDirectoryInformation
= 1,
4922 FileFullDirectoryInformation
,
4923 FileBothDirectoryInformation
,
4924 FileBasicInformation
,
4925 FileStandardInformation
,
4926 FileInternalInformation
,
4928 FileAccessInformation
,
4929 FileNameInformation
,
4930 FileRenameInformation
,
4931 FileLinkInformation
,
4932 FileNamesInformation
,
4933 FileDispositionInformation
,
4934 FilePositionInformation
,
4935 FileFullEaInformation
,
4936 FileModeInformation
,
4937 FileAlignmentInformation
,
4939 FileAllocationInformation
,
4940 FileEndOfFileInformation
,
4941 FileAlternateNameInformation
,
4942 FileStreamInformation
,
4943 FilePipeInformation
,
4944 FilePipeLocalInformation
,
4945 FilePipeRemoteInformation
,
4946 FileMailslotQueryInformation
,
4947 FileMailslotSetInformation
,
4948 FileCompressionInformation
,
4949 FileObjectIdInformation
,
4950 FileCompletionInformation
,
4951 FileMoveClusterInformation
,
4952 FileQuotaInformation
,
4953 FileReparsePointInformation
,
4954 FileNetworkOpenInformation
,
4955 FileAttributeTagInformation
,
4956 FileTrackingInformation
,
4957 FileIdBothDirectoryInformation
,
4958 FileIdFullDirectoryInformation
,
4959 FileValidDataLengthInformation
,
4960 FileShortNameInformation
,
4961 FileIoCompletionNotificationInformation
,
4962 FileIoStatusBlockRangeInformation
,
4963 FileIoPriorityHintInformation
,
4964 FileSfioReserveInformation
,
4965 FileSfioVolumeInformation
,
4966 FileHardLinkInformation
,
4967 FileProcessIdsUsingFileInformation
,
4968 FileNormalizedNameInformation
,
4969 FileNetworkPhysicalNameInformation
,
4970 FileIdGlobalTxDirectoryInformation
,
4971 FileIsRemoteDeviceInformation
,
4972 FileAttributeCacheInformation
,
4973 FileNumaNodeInformation
,
4974 FileStandardLinkInformation
,
4975 FileRemoteProtocolInformation
,
4976 FileMaximumInformation
4977 } FILE_INFORMATION_CLASS
, *PFILE_INFORMATION_CLASS
;
4979 typedef struct _FILE_POSITION_INFORMATION
{
4980 LARGE_INTEGER CurrentByteOffset
;
4981 } FILE_POSITION_INFORMATION
, *PFILE_POSITION_INFORMATION
;
4983 typedef struct _FILE_BASIC_INFORMATION
{
4984 LARGE_INTEGER CreationTime
;
4985 LARGE_INTEGER LastAccessTime
;
4986 LARGE_INTEGER LastWriteTime
;
4987 LARGE_INTEGER ChangeTime
;
4988 ULONG FileAttributes
;
4989 } FILE_BASIC_INFORMATION
, *PFILE_BASIC_INFORMATION
;
4991 typedef struct _FILE_IO_PRIORITY_HINT_INFORMATION
{
4992 IO_PRIORITY_HINT PriorityHint
;
4993 } FILE_IO_PRIORITY_HINT_INFORMATION
, *PFILE_IO_PRIORITY_HINT_INFORMATION
;
4995 typedef struct _FILE_IO_COMPLETION_NOTIFICATION_INFORMATION
{
4997 } FILE_IO_COMPLETION_NOTIFICATION_INFORMATION
, *PFILE_IO_COMPLETION_NOTIFICATION_INFORMATION
;
4999 typedef struct _FILE_IOSTATUSBLOCK_RANGE_INFORMATION
{
5000 PUCHAR IoStatusBlockRange
;
5002 } FILE_IOSTATUSBLOCK_RANGE_INFORMATION
, *PFILE_IOSTATUSBLOCK_RANGE_INFORMATION
;
5004 typedef struct _FILE_IS_REMOTE_DEVICE_INFORMATION
{
5006 } FILE_IS_REMOTE_DEVICE_INFORMATION
, *PFILE_IS_REMOTE_DEVICE_INFORMATION
;
5008 typedef struct _FILE_NUMA_NODE_INFORMATION
{
5010 } FILE_NUMA_NODE_INFORMATION
, *PFILE_NUMA_NODE_INFORMATION
;
5012 typedef struct _FILE_PROCESS_IDS_USING_FILE_INFORMATION
{
5013 ULONG NumberOfProcessIdsInList
;
5014 ULONG_PTR ProcessIdList
[1];
5015 } FILE_PROCESS_IDS_USING_FILE_INFORMATION
, *PFILE_PROCESS_IDS_USING_FILE_INFORMATION
;
5017 typedef struct _FILE_STANDARD_INFORMATION
{
5018 LARGE_INTEGER AllocationSize
;
5019 LARGE_INTEGER EndOfFile
;
5020 ULONG NumberOfLinks
;
5021 BOOLEAN DeletePending
;
5023 } FILE_STANDARD_INFORMATION
, *PFILE_STANDARD_INFORMATION
;
5025 typedef struct _FILE_NETWORK_OPEN_INFORMATION
{
5026 LARGE_INTEGER CreationTime
;
5027 LARGE_INTEGER LastAccessTime
;
5028 LARGE_INTEGER LastWriteTime
;
5029 LARGE_INTEGER ChangeTime
;
5030 LARGE_INTEGER AllocationSize
;
5031 LARGE_INTEGER EndOfFile
;
5032 ULONG FileAttributes
;
5033 } FILE_NETWORK_OPEN_INFORMATION
, *PFILE_NETWORK_OPEN_INFORMATION
;
5035 typedef enum _FSINFOCLASS
{
5036 FileFsVolumeInformation
= 1,
5037 FileFsLabelInformation
,
5038 FileFsSizeInformation
,
5039 FileFsDeviceInformation
,
5040 FileFsAttributeInformation
,
5041 FileFsControlInformation
,
5042 FileFsFullSizeInformation
,
5043 FileFsObjectIdInformation
,
5044 FileFsDriverPathInformation
,
5045 FileFsVolumeFlagsInformation
,
5046 FileFsMaximumInformation
5047 } FS_INFORMATION_CLASS
, *PFS_INFORMATION_CLASS
;
5049 typedef struct _FILE_FS_DEVICE_INFORMATION
{
5050 DEVICE_TYPE DeviceType
;
5051 ULONG Characteristics
;
5052 } FILE_FS_DEVICE_INFORMATION
, *PFILE_FS_DEVICE_INFORMATION
;
5054 typedef struct _FILE_FULL_EA_INFORMATION
{
5055 ULONG NextEntryOffset
;
5058 USHORT EaValueLength
;
5060 } FILE_FULL_EA_INFORMATION
, *PFILE_FULL_EA_INFORMATION
;
5062 typedef struct _FILE_SFIO_RESERVE_INFORMATION
{
5063 ULONG RequestsPerPeriod
;
5065 BOOLEAN RetryFailures
;
5066 BOOLEAN Discardable
;
5068 ULONG NumOutstandingRequests
;
5069 } FILE_SFIO_RESERVE_INFORMATION
, *PFILE_SFIO_RESERVE_INFORMATION
;
5071 typedef struct _FILE_SFIO_VOLUME_INFORMATION
{
5072 ULONG MaximumRequestsPerPeriod
;
5073 ULONG MinimumPeriod
;
5074 ULONG MinimumTransferSize
;
5075 } FILE_SFIO_VOLUME_INFORMATION
, *PFILE_SFIO_VOLUME_INFORMATION
;
5077 #define FILE_SKIP_COMPLETION_PORT_ON_SUCCESS 0x1
5078 #define FILE_SKIP_SET_EVENT_ON_HANDLE 0x2
5079 #define FILE_SKIP_SET_USER_EVENT_ON_FAST_IO 0x4
5081 #define FM_LOCK_BIT (0x1)
5082 #define FM_LOCK_BIT_V (0x0)
5083 #define FM_LOCK_WAITER_WOKEN (0x2)
5084 #define FM_LOCK_WAITER_INC (0x4)
5087 (NTAPI FAST_IO_CHECK_IF_POSSIBLE
)(
5088 IN
struct _FILE_OBJECT
*FileObject
,
5089 IN PLARGE_INTEGER FileOffset
,
5093 IN BOOLEAN CheckForReadOperation
,
5094 OUT PIO_STATUS_BLOCK IoStatus
,
5095 IN
struct _DEVICE_OBJECT
*DeviceObject
);
5096 typedef FAST_IO_CHECK_IF_POSSIBLE
*PFAST_IO_CHECK_IF_POSSIBLE
;
5099 (NTAPI FAST_IO_READ
)(
5100 IN
struct _FILE_OBJECT
*FileObject
,
5101 IN PLARGE_INTEGER FileOffset
,
5106 OUT PIO_STATUS_BLOCK IoStatus
,
5107 IN
struct _DEVICE_OBJECT
*DeviceObject
);
5108 typedef FAST_IO_READ
*PFAST_IO_READ
;
5111 (NTAPI FAST_IO_WRITE
)(
5112 IN
struct _FILE_OBJECT
*FileObject
,
5113 IN PLARGE_INTEGER FileOffset
,
5118 OUT PIO_STATUS_BLOCK IoStatus
,
5119 IN
struct _DEVICE_OBJECT
*DeviceObject
);
5120 typedef FAST_IO_WRITE
*PFAST_IO_WRITE
;
5123 (NTAPI FAST_IO_QUERY_BASIC_INFO
)(
5124 IN
struct _FILE_OBJECT
*FileObject
,
5126 OUT PFILE_BASIC_INFORMATION Buffer
,
5127 OUT PIO_STATUS_BLOCK IoStatus
,
5128 IN
struct _DEVICE_OBJECT
*DeviceObject
);
5129 typedef FAST_IO_QUERY_BASIC_INFO
*PFAST_IO_QUERY_BASIC_INFO
;
5132 (NTAPI FAST_IO_QUERY_STANDARD_INFO
)(
5133 IN
struct _FILE_OBJECT
*FileObject
,
5135 OUT PFILE_STANDARD_INFORMATION Buffer
,
5136 OUT PIO_STATUS_BLOCK IoStatus
,
5137 IN
struct _DEVICE_OBJECT
*DeviceObject
);
5138 typedef FAST_IO_QUERY_STANDARD_INFO
*PFAST_IO_QUERY_STANDARD_INFO
;
5141 (NTAPI FAST_IO_LOCK
)(
5142 IN
struct _FILE_OBJECT
*FileObject
,
5143 IN PLARGE_INTEGER FileOffset
,
5144 IN PLARGE_INTEGER Length
,
5145 PEPROCESS ProcessId
,
5147 BOOLEAN FailImmediately
,
5148 BOOLEAN ExclusiveLock
,
5149 OUT PIO_STATUS_BLOCK IoStatus
,
5150 IN
struct _DEVICE_OBJECT
*DeviceObject
);
5151 typedef FAST_IO_LOCK
*PFAST_IO_LOCK
;
5154 (NTAPI FAST_IO_UNLOCK_SINGLE
)(
5155 IN
struct _FILE_OBJECT
*FileObject
,
5156 IN PLARGE_INTEGER FileOffset
,
5157 IN PLARGE_INTEGER Length
,
5158 PEPROCESS ProcessId
,
5160 OUT PIO_STATUS_BLOCK IoStatus
,
5161 IN
struct _DEVICE_OBJECT
*DeviceObject
);
5162 typedef FAST_IO_UNLOCK_SINGLE
*PFAST_IO_UNLOCK_SINGLE
;
5165 (NTAPI FAST_IO_UNLOCK_ALL
)(
5166 IN
struct _FILE_OBJECT
*FileObject
,
5167 PEPROCESS ProcessId
,
5168 OUT PIO_STATUS_BLOCK IoStatus
,
5169 IN
struct _DEVICE_OBJECT
*DeviceObject
);
5170 typedef FAST_IO_UNLOCK_ALL
*PFAST_IO_UNLOCK_ALL
;
5173 (NTAPI FAST_IO_UNLOCK_ALL_BY_KEY
)(
5174 IN
struct _FILE_OBJECT
*FileObject
,
5177 OUT PIO_STATUS_BLOCK IoStatus
,
5178 IN
struct _DEVICE_OBJECT
*DeviceObject
);
5179 typedef FAST_IO_UNLOCK_ALL_BY_KEY
*PFAST_IO_UNLOCK_ALL_BY_KEY
;
5182 (NTAPI FAST_IO_DEVICE_CONTROL
)(
5183 IN
struct _FILE_OBJECT
*FileObject
,
5185 IN PVOID InputBuffer OPTIONAL
,
5186 IN ULONG InputBufferLength
,
5187 OUT PVOID OutputBuffer OPTIONAL
,
5188 IN ULONG OutputBufferLength
,
5189 IN ULONG IoControlCode
,
5190 OUT PIO_STATUS_BLOCK IoStatus
,
5191 IN
struct _DEVICE_OBJECT
*DeviceObject
);
5192 typedef FAST_IO_DEVICE_CONTROL
*PFAST_IO_DEVICE_CONTROL
;
5195 (NTAPI FAST_IO_ACQUIRE_FILE
)(
5196 IN
struct _FILE_OBJECT
*FileObject
);
5197 typedef FAST_IO_ACQUIRE_FILE
*PFAST_IO_ACQUIRE_FILE
;
5200 (NTAPI FAST_IO_RELEASE_FILE
)(
5201 IN
struct _FILE_OBJECT
*FileObject
);
5202 typedef FAST_IO_RELEASE_FILE
*PFAST_IO_RELEASE_FILE
;
5205 (NTAPI FAST_IO_DETACH_DEVICE
)(
5206 IN
struct _DEVICE_OBJECT
*SourceDevice
,
5207 IN
struct _DEVICE_OBJECT
*TargetDevice
);
5208 typedef FAST_IO_DETACH_DEVICE
*PFAST_IO_DETACH_DEVICE
;
5211 (NTAPI FAST_IO_QUERY_NETWORK_OPEN_INFO
)(
5212 IN
struct _FILE_OBJECT
*FileObject
,
5214 OUT
struct _FILE_NETWORK_OPEN_INFORMATION
*Buffer
,
5215 OUT
struct _IO_STATUS_BLOCK
*IoStatus
,
5216 IN
struct _DEVICE_OBJECT
*DeviceObject
);
5217 typedef FAST_IO_QUERY_NETWORK_OPEN_INFO
*PFAST_IO_QUERY_NETWORK_OPEN_INFO
;
5220 (NTAPI FAST_IO_ACQUIRE_FOR_MOD_WRITE
)(
5221 IN
struct _FILE_OBJECT
*FileObject
,
5222 IN PLARGE_INTEGER EndingOffset
,
5223 OUT
struct _ERESOURCE
**ResourceToRelease
,
5224 IN
struct _DEVICE_OBJECT
*DeviceObject
);
5225 typedef FAST_IO_ACQUIRE_FOR_MOD_WRITE
*PFAST_IO_ACQUIRE_FOR_MOD_WRITE
;
5228 (NTAPI FAST_IO_MDL_READ
)(
5229 IN
struct _FILE_OBJECT
*FileObject
,
5230 IN PLARGE_INTEGER FileOffset
,
5234 OUT PIO_STATUS_BLOCK IoStatus
,
5235 IN
struct _DEVICE_OBJECT
*DeviceObject
);
5236 typedef FAST_IO_MDL_READ
*PFAST_IO_MDL_READ
;
5239 (NTAPI FAST_IO_MDL_READ_COMPLETE
)(
5240 IN
struct _FILE_OBJECT
*FileObject
,
5242 IN
struct _DEVICE_OBJECT
*DeviceObject
);
5243 typedef FAST_IO_MDL_READ_COMPLETE
*PFAST_IO_MDL_READ_COMPLETE
;
5246 (NTAPI FAST_IO_PREPARE_MDL_WRITE
)(
5247 IN
struct _FILE_OBJECT
*FileObject
,
5248 IN PLARGE_INTEGER FileOffset
,
5252 OUT PIO_STATUS_BLOCK IoStatus
,
5253 IN
struct _DEVICE_OBJECT
*DeviceObject
);
5254 typedef FAST_IO_PREPARE_MDL_WRITE
*PFAST_IO_PREPARE_MDL_WRITE
;
5257 (NTAPI FAST_IO_MDL_WRITE_COMPLETE
)(
5258 IN
struct _FILE_OBJECT
*FileObject
,
5259 IN PLARGE_INTEGER FileOffset
,
5261 IN
struct _DEVICE_OBJECT
*DeviceObject
);
5262 typedef FAST_IO_MDL_WRITE_COMPLETE
*PFAST_IO_MDL_WRITE_COMPLETE
;
5265 (NTAPI FAST_IO_READ_COMPRESSED
)(
5266 IN
struct _FILE_OBJECT
*FileObject
,
5267 IN PLARGE_INTEGER FileOffset
,
5272 OUT PIO_STATUS_BLOCK IoStatus
,
5273 OUT
struct _COMPRESSED_DATA_INFO
*CompressedDataInfo
,
5274 IN ULONG CompressedDataInfoLength
,
5275 IN
struct _DEVICE_OBJECT
*DeviceObject
);
5276 typedef FAST_IO_READ_COMPRESSED
*PFAST_IO_READ_COMPRESSED
;
5279 (NTAPI FAST_IO_WRITE_COMPRESSED
)(
5280 IN
struct _FILE_OBJECT
*FileObject
,
5281 IN PLARGE_INTEGER FileOffset
,
5286 OUT PIO_STATUS_BLOCK IoStatus
,
5287 IN
struct _COMPRESSED_DATA_INFO
*CompressedDataInfo
,
5288 IN ULONG CompressedDataInfoLength
,
5289 IN
struct _DEVICE_OBJECT
*DeviceObject
);
5290 typedef FAST_IO_WRITE_COMPRESSED
*PFAST_IO_WRITE_COMPRESSED
;
5293 (NTAPI FAST_IO_MDL_READ_COMPLETE_COMPRESSED
)(
5294 IN
struct _FILE_OBJECT
*FileObject
,
5296 IN
struct _DEVICE_OBJECT
*DeviceObject
);
5297 typedef FAST_IO_MDL_READ_COMPLETE_COMPRESSED
*PFAST_IO_MDL_READ_COMPLETE_COMPRESSED
;
5300 (NTAPI FAST_IO_MDL_WRITE_COMPLETE_COMPRESSED
)(
5301 IN
struct _FILE_OBJECT
*FileObject
,
5302 IN PLARGE_INTEGER FileOffset
,
5304 IN
struct _DEVICE_OBJECT
*DeviceObject
);
5305 typedef FAST_IO_MDL_WRITE_COMPLETE_COMPRESSED
*PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED
;
5308 (NTAPI FAST_IO_QUERY_OPEN
)(
5309 IN
struct _IRP
*Irp
,
5310 OUT PFILE_NETWORK_OPEN_INFORMATION NetworkInformation
,
5311 IN
struct _DEVICE_OBJECT
*DeviceObject
);
5312 typedef FAST_IO_QUERY_OPEN
*PFAST_IO_QUERY_OPEN
;
5315 (NTAPI FAST_IO_RELEASE_FOR_MOD_WRITE
)(
5316 IN
struct _FILE_OBJECT
*FileObject
,
5317 IN
struct _ERESOURCE
*ResourceToRelease
,
5318 IN
struct _DEVICE_OBJECT
*DeviceObject
);
5319 typedef FAST_IO_RELEASE_FOR_MOD_WRITE
*PFAST_IO_RELEASE_FOR_MOD_WRITE
;
5322 (NTAPI FAST_IO_ACQUIRE_FOR_CCFLUSH
)(
5323 IN
struct _FILE_OBJECT
*FileObject
,
5324 IN
struct _DEVICE_OBJECT
*DeviceObject
);
5325 typedef FAST_IO_ACQUIRE_FOR_CCFLUSH
*PFAST_IO_ACQUIRE_FOR_CCFLUSH
;
5328 (NTAPI FAST_IO_RELEASE_FOR_CCFLUSH
)(
5329 IN
struct _FILE_OBJECT
*FileObject
,
5330 IN
struct _DEVICE_OBJECT
*DeviceObject
);
5331 typedef FAST_IO_RELEASE_FOR_CCFLUSH
*PFAST_IO_RELEASE_FOR_CCFLUSH
;
5333 typedef struct _FAST_IO_DISPATCH
{
5334 ULONG SizeOfFastIoDispatch
;
5335 PFAST_IO_CHECK_IF_POSSIBLE FastIoCheckIfPossible
;
5336 PFAST_IO_READ FastIoRead
;
5337 PFAST_IO_WRITE FastIoWrite
;
5338 PFAST_IO_QUERY_BASIC_INFO FastIoQueryBasicInfo
;
5339 PFAST_IO_QUERY_STANDARD_INFO FastIoQueryStandardInfo
;
5340 PFAST_IO_LOCK FastIoLock
;
5341 PFAST_IO_UNLOCK_SINGLE FastIoUnlockSingle
;
5342 PFAST_IO_UNLOCK_ALL FastIoUnlockAll
;
5343 PFAST_IO_UNLOCK_ALL_BY_KEY FastIoUnlockAllByKey
;
5344 PFAST_IO_DEVICE_CONTROL FastIoDeviceControl
;
5345 PFAST_IO_ACQUIRE_FILE AcquireFileForNtCreateSection
;
5346 PFAST_IO_RELEASE_FILE ReleaseFileForNtCreateSection
;
5347 PFAST_IO_DETACH_DEVICE FastIoDetachDevice
;
5348 PFAST_IO_QUERY_NETWORK_OPEN_INFO FastIoQueryNetworkOpenInfo
;
5349 PFAST_IO_ACQUIRE_FOR_MOD_WRITE AcquireForModWrite
;
5350 PFAST_IO_MDL_READ MdlRead
;
5351 PFAST_IO_MDL_READ_COMPLETE MdlReadComplete
;
5352 PFAST_IO_PREPARE_MDL_WRITE PrepareMdlWrite
;
5353 PFAST_IO_MDL_WRITE_COMPLETE MdlWriteComplete
;
5354 PFAST_IO_READ_COMPRESSED FastIoReadCompressed
;
5355 PFAST_IO_WRITE_COMPRESSED FastIoWriteCompressed
;
5356 PFAST_IO_MDL_READ_COMPLETE_COMPRESSED MdlReadCompleteCompressed
;
5357 PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED MdlWriteCompleteCompressed
;
5358 PFAST_IO_QUERY_OPEN FastIoQueryOpen
;
5359 PFAST_IO_RELEASE_FOR_MOD_WRITE ReleaseForModWrite
;
5360 PFAST_IO_ACQUIRE_FOR_CCFLUSH AcquireForCcFlush
;
5361 PFAST_IO_RELEASE_FOR_CCFLUSH ReleaseForCcFlush
;
5362 } FAST_IO_DISPATCH
, *PFAST_IO_DISPATCH
;
5364 typedef struct _SECTION_OBJECT_POINTERS
{
5365 PVOID DataSectionObject
;
5366 PVOID SharedCacheMap
;
5367 PVOID ImageSectionObject
;
5368 } SECTION_OBJECT_POINTERS
, *PSECTION_OBJECT_POINTERS
;
5370 typedef struct _IO_COMPLETION_CONTEXT
{
5373 } IO_COMPLETION_CONTEXT
, *PIO_COMPLETION_CONTEXT
;
5375 /* FILE_OBJECT.Flags */
5376 #define FO_FILE_OPEN 0x00000001
5377 #define FO_SYNCHRONOUS_IO 0x00000002
5378 #define FO_ALERTABLE_IO 0x00000004
5379 #define FO_NO_INTERMEDIATE_BUFFERING 0x00000008
5380 #define FO_WRITE_THROUGH 0x00000010
5381 #define FO_SEQUENTIAL_ONLY 0x00000020
5382 #define FO_CACHE_SUPPORTED 0x00000040
5383 #define FO_NAMED_PIPE 0x00000080
5384 #define FO_STREAM_FILE 0x00000100
5385 #define FO_MAILSLOT 0x00000200
5386 #define FO_GENERATE_AUDIT_ON_CLOSE 0x00000400
5387 #define FO_QUEUE_IRP_TO_THREAD 0x00000400
5388 #define FO_DIRECT_DEVICE_OPEN 0x00000800
5389 #define FO_FILE_MODIFIED 0x00001000
5390 #define FO_FILE_SIZE_CHANGED 0x00002000
5391 #define FO_CLEANUP_COMPLETE 0x00004000
5392 #define FO_TEMPORARY_FILE 0x00008000
5393 #define FO_DELETE_ON_CLOSE 0x00010000
5394 #define FO_OPENED_CASE_SENSITIVE 0x00020000
5395 #define FO_HANDLE_CREATED 0x00040000
5396 #define FO_FILE_FAST_IO_READ 0x00080000
5397 #define FO_RANDOM_ACCESS 0x00100000
5398 #define FO_FILE_OPEN_CANCELLED 0x00200000
5399 #define FO_VOLUME_OPEN 0x00400000
5400 #define FO_REMOTE_ORIGIN 0x01000000
5401 #define FO_DISALLOW_EXCLUSIVE 0x02000000
5402 #define FO_SKIP_COMPLETION_PORT 0x02000000
5403 #define FO_SKIP_SET_EVENT 0x04000000
5404 #define FO_SKIP_SET_FAST_IO 0x08000000
5405 #define FO_FLAGS_VALID_ONLY_DURING_CREATE FO_DISALLOW_EXCLUSIVE
5408 #define VPB_MOUNTED 0x0001
5409 #define VPB_LOCKED 0x0002
5410 #define VPB_PERSISTENT 0x0004
5411 #define VPB_REMOVE_PENDING 0x0008
5412 #define VPB_RAW_MOUNT 0x0010
5413 #define VPB_DIRECT_WRITES_ALLOWED 0x0020
5417 #define SL_FORCE_ACCESS_CHECK 0x01
5418 #define SL_OPEN_PAGING_FILE 0x02
5419 #define SL_OPEN_TARGET_DIRECTORY 0x04
5420 #define SL_STOP_ON_SYMLINK 0x08
5421 #define SL_CASE_SENSITIVE 0x80
5423 #define SL_KEY_SPECIFIED 0x01
5424 #define SL_OVERRIDE_VERIFY_VOLUME 0x02
5425 #define SL_WRITE_THROUGH 0x04
5426 #define SL_FT_SEQUENTIAL_WRITE 0x08
5427 #define SL_FORCE_DIRECT_WRITE 0x10
5428 #define SL_REALTIME_STREAM 0x20
5430 #define SL_READ_ACCESS_GRANTED 0x01
5431 #define SL_WRITE_ACCESS_GRANTED 0x04
5433 #define SL_FAIL_IMMEDIATELY 0x01
5434 #define SL_EXCLUSIVE_LOCK 0x02
5436 #define SL_RESTART_SCAN 0x01
5437 #define SL_RETURN_SINGLE_ENTRY 0x02
5438 #define SL_INDEX_SPECIFIED 0x04
5440 #define SL_WATCH_TREE 0x01
5442 #define SL_ALLOW_RAW_MOUNT 0x01
5444 #define CTL_CODE(DeviceType, Function, Method, Access) \
5445 (((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method))
5447 #define DEVICE_TYPE_FROM_CTL_CODE(ctl) (((ULONG) (ctl & 0xffff0000)) >> 16)
5449 #define METHOD_FROM_CTL_CODE(ctrlCode) ((ULONG)(ctrlCode & 3))
5451 #define IRP_NOCACHE 0x00000001
5452 #define IRP_PAGING_IO 0x00000002
5453 #define IRP_MOUNT_COMPLETION 0x00000002
5454 #define IRP_SYNCHRONOUS_API 0x00000004
5455 #define IRP_ASSOCIATED_IRP 0x00000008
5456 #define IRP_BUFFERED_IO 0x00000010
5457 #define IRP_DEALLOCATE_BUFFER 0x00000020
5458 #define IRP_INPUT_OPERATION 0x00000040
5459 #define IRP_SYNCHRONOUS_PAGING_IO 0x00000040
5460 #define IRP_CREATE_OPERATION 0x00000080
5461 #define IRP_READ_OPERATION 0x00000100
5462 #define IRP_WRITE_OPERATION 0x00000200
5463 #define IRP_CLOSE_OPERATION 0x00000400
5464 #define IRP_DEFER_IO_COMPLETION 0x00000800
5465 #define IRP_OB_QUERY_NAME 0x00001000
5466 #define IRP_HOLD_DEVICE_QUEUE 0x00002000
5468 #define IRP_QUOTA_CHARGED 0x01
5469 #define IRP_ALLOCATED_MUST_SUCCEED 0x02
5470 #define IRP_ALLOCATED_FIXED_SIZE 0x04
5471 #define IRP_LOOKASIDE_ALLOCATION 0x08
5474 ** IRP function codes
5477 #define IRP_MJ_CREATE 0x00
5478 #define IRP_MJ_CREATE_NAMED_PIPE 0x01
5479 #define IRP_MJ_CLOSE 0x02
5480 #define IRP_MJ_READ 0x03
5481 #define IRP_MJ_WRITE 0x04
5482 #define IRP_MJ_QUERY_INFORMATION 0x05
5483 #define IRP_MJ_SET_INFORMATION 0x06
5484 #define IRP_MJ_QUERY_EA 0x07
5485 #define IRP_MJ_SET_EA 0x08
5486 #define IRP_MJ_FLUSH_BUFFERS 0x09
5487 #define IRP_MJ_QUERY_VOLUME_INFORMATION 0x0a
5488 #define IRP_MJ_SET_VOLUME_INFORMATION 0x0b
5489 #define IRP_MJ_DIRECTORY_CONTROL 0x0c
5490 #define IRP_MJ_FILE_SYSTEM_CONTROL 0x0d
5491 #define IRP_MJ_DEVICE_CONTROL 0x0e
5492 #define IRP_MJ_INTERNAL_DEVICE_CONTROL 0x0f
5493 #define IRP_MJ_SCSI 0x0f
5494 #define IRP_MJ_SHUTDOWN 0x10
5495 #define IRP_MJ_LOCK_CONTROL 0x11
5496 #define IRP_MJ_CLEANUP 0x12
5497 #define IRP_MJ_CREATE_MAILSLOT 0x13
5498 #define IRP_MJ_QUERY_SECURITY 0x14
5499 #define IRP_MJ_SET_SECURITY 0x15
5500 #define IRP_MJ_POWER 0x16
5501 #define IRP_MJ_SYSTEM_CONTROL 0x17
5502 #define IRP_MJ_DEVICE_CHANGE 0x18
5503 #define IRP_MJ_QUERY_QUOTA 0x19
5504 #define IRP_MJ_SET_QUOTA 0x1a
5505 #define IRP_MJ_PNP 0x1b
5506 #define IRP_MJ_PNP_POWER 0x1b
5507 #define IRP_MJ_MAXIMUM_FUNCTION 0x1b
5509 #define IRP_MN_SCSI_CLASS 0x01
5511 #define IRP_MN_START_DEVICE 0x00
5512 #define IRP_MN_QUERY_REMOVE_DEVICE 0x01
5513 #define IRP_MN_REMOVE_DEVICE 0x02
5514 #define IRP_MN_CANCEL_REMOVE_DEVICE 0x03
5515 #define IRP_MN_STOP_DEVICE 0x04
5516 #define IRP_MN_QUERY_STOP_DEVICE 0x05
5517 #define IRP_MN_CANCEL_STOP_DEVICE 0x06
5519 #define IRP_MN_QUERY_DEVICE_RELATIONS 0x07
5520 #define IRP_MN_QUERY_INTERFACE 0x08
5521 #define IRP_MN_QUERY_CAPABILITIES 0x09
5522 #define IRP_MN_QUERY_RESOURCES 0x0A
5523 #define IRP_MN_QUERY_RESOURCE_REQUIREMENTS 0x0B
5524 #define IRP_MN_QUERY_DEVICE_TEXT 0x0C
5525 #define IRP_MN_FILTER_RESOURCE_REQUIREMENTS 0x0D
5527 #define IRP_MN_READ_CONFIG 0x0F
5528 #define IRP_MN_WRITE_CONFIG 0x10
5529 #define IRP_MN_EJECT 0x11
5530 #define IRP_MN_SET_LOCK 0x12
5531 #define IRP_MN_QUERY_ID 0x13
5532 #define IRP_MN_QUERY_PNP_DEVICE_STATE 0x14
5533 #define IRP_MN_QUERY_BUS_INFORMATION 0x15
5534 #define IRP_MN_DEVICE_USAGE_NOTIFICATION 0x16
5535 #define IRP_MN_SURPRISE_REMOVAL 0x17
5536 #if (NTDDI_VERSION >= NTDDI_WIN7)
5537 #define IRP_MN_DEVICE_ENUMERATED 0x19
5540 #define IRP_MN_WAIT_WAKE 0x00
5541 #define IRP_MN_POWER_SEQUENCE 0x01
5542 #define IRP_MN_SET_POWER 0x02
5543 #define IRP_MN_QUERY_POWER 0x03
5545 #define IRP_MN_QUERY_ALL_DATA 0x00
5546 #define IRP_MN_QUERY_SINGLE_INSTANCE 0x01
5547 #define IRP_MN_CHANGE_SINGLE_INSTANCE 0x02
5548 #define IRP_MN_CHANGE_SINGLE_ITEM 0x03
5549 #define IRP_MN_ENABLE_EVENTS 0x04
5550 #define IRP_MN_DISABLE_EVENTS 0x05
5551 #define IRP_MN_ENABLE_COLLECTION 0x06
5552 #define IRP_MN_DISABLE_COLLECTION 0x07
5553 #define IRP_MN_REGINFO 0x08
5554 #define IRP_MN_EXECUTE_METHOD 0x09
5556 #define IRP_MN_REGINFO_EX 0x0b
5558 typedef struct _FILE_OBJECT
{
5561 PDEVICE_OBJECT DeviceObject
;
5565 PSECTION_OBJECT_POINTERS SectionObjectPointer
;
5566 PVOID PrivateCacheMap
;
5567 NTSTATUS FinalStatus
;
5568 struct _FILE_OBJECT
*RelatedFileObject
;
5569 BOOLEAN LockOperation
;
5570 BOOLEAN DeletePending
;
5572 BOOLEAN WriteAccess
;
5573 BOOLEAN DeleteAccess
;
5575 BOOLEAN SharedWrite
;
5576 BOOLEAN SharedDelete
;
5578 UNICODE_STRING FileName
;
5579 LARGE_INTEGER CurrentByteOffset
;
5580 volatile ULONG Waiters
;
5581 volatile ULONG Busy
;
5585 volatile PIO_COMPLETION_CONTEXT CompletionContext
;
5586 KSPIN_LOCK IrpListLock
;
5588 volatile PVOID FileObjectExtension
;
5589 } FILE_OBJECT
, *PFILE_OBJECT
;
5591 typedef struct _IO_ERROR_LOG_PACKET
{
5592 UCHAR MajorFunctionCode
;
5594 USHORT DumpDataSize
;
5595 USHORT NumberOfStrings
;
5596 USHORT StringOffset
;
5597 USHORT EventCategory
;
5599 ULONG UniqueErrorValue
;
5600 NTSTATUS FinalStatus
;
5601 ULONG SequenceNumber
;
5602 ULONG IoControlCode
;
5603 LARGE_INTEGER DeviceOffset
;
5605 } IO_ERROR_LOG_PACKET
, *PIO_ERROR_LOG_PACKET
;
5607 typedef struct _IO_ERROR_LOG_MESSAGE
{
5610 USHORT DriverNameLength
;
5611 LARGE_INTEGER TimeStamp
;
5612 ULONG DriverNameOffset
;
5613 IO_ERROR_LOG_PACKET EntryData
;
5614 } IO_ERROR_LOG_MESSAGE
, *PIO_ERROR_LOG_MESSAGE
;
5616 #define ERROR_LOG_LIMIT_SIZE 240
5617 #define IO_ERROR_LOG_MESSAGE_HEADER_LENGTH (sizeof(IO_ERROR_LOG_MESSAGE) - \
5618 sizeof(IO_ERROR_LOG_PACKET) + \
5619 (sizeof(WCHAR) * 40))
5620 #define ERROR_LOG_MESSAGE_LIMIT_SIZE \
5621 (ERROR_LOG_LIMIT_SIZE + IO_ERROR_LOG_MESSAGE_HEADER_LENGTH)
5622 #define IO_ERROR_LOG_MESSAGE_LENGTH \
5623 ((PORT_MAXIMUM_MESSAGE_LENGTH > ERROR_LOG_MESSAGE_LIMIT_SIZE) ? \
5624 ERROR_LOG_MESSAGE_LIMIT_SIZE : \
5625 PORT_MAXIMUM_MESSAGE_LENGTH)
5626 #define ERROR_LOG_MAXIMUM_SIZE (IO_ERROR_LOG_MESSAGE_LENGTH - \
5627 IO_ERROR_LOG_MESSAGE_HEADER_LENGTH)
5630 #define PORT_MAXIMUM_MESSAGE_LENGTH 512
5632 #define PORT_MAXIMUM_MESSAGE_LENGTH 256
5635 typedef enum _DMA_WIDTH
{
5640 } DMA_WIDTH
, *PDMA_WIDTH
;
5642 typedef enum _DMA_SPEED
{
5649 } DMA_SPEED
, *PDMA_SPEED
;
5651 /* DEVICE_DESCRIPTION.Version */
5653 #define DEVICE_DESCRIPTION_VERSION 0x0000
5654 #define DEVICE_DESCRIPTION_VERSION1 0x0001
5655 #define DEVICE_DESCRIPTION_VERSION2 0x0002
5657 typedef struct _DEVICE_DESCRIPTION
{
5660 BOOLEAN ScatterGather
;
5662 BOOLEAN AutoInitialize
;
5663 BOOLEAN Dma32BitAddresses
;
5664 BOOLEAN IgnoreCount
;
5666 BOOLEAN Dma64BitAddresses
;
5669 INTERFACE_TYPE InterfaceType
;
5672 ULONG MaximumLength
;
5674 } DEVICE_DESCRIPTION
, *PDEVICE_DESCRIPTION
;
5676 typedef enum _DEVICE_RELATION_TYPE
{
5681 TargetDeviceRelation
,
5684 } DEVICE_RELATION_TYPE
, *PDEVICE_RELATION_TYPE
;
5686 typedef struct _DEVICE_RELATIONS
{
5688 PDEVICE_OBJECT Objects
[1];
5689 } DEVICE_RELATIONS
, *PDEVICE_RELATIONS
;
5691 typedef struct _DEVOBJ_EXTENSION
{
5694 PDEVICE_OBJECT DeviceObject
;
5695 } DEVOBJ_EXTENSION
, *PDEVOBJ_EXTENSION
;
5697 typedef struct _SCATTER_GATHER_ELEMENT
{
5698 PHYSICAL_ADDRESS Address
;
5701 } SCATTER_GATHER_ELEMENT
, *PSCATTER_GATHER_ELEMENT
;
5703 #if defined(_MSC_EXTENSIONS)
5705 #if _MSC_VER >= 1200
5706 #pragma warning(push)
5708 #pragma warning(disable:4200)
5709 typedef struct _SCATTER_GATHER_LIST
{
5710 ULONG NumberOfElements
;
5712 SCATTER_GATHER_ELEMENT Elements
[1];
5713 } SCATTER_GATHER_LIST
, *PSCATTER_GATHER_LIST
;
5715 #if _MSC_VER >= 1200
5716 #pragma warning(pop)
5718 #pragma warning(default:4200)
5723 struct _SCATTER_GATHER_LIST
;
5724 typedef struct _SCATTER_GATHER_LIST SCATTER_GATHER_LIST
, *PSCATTER_GATHER_LIST
;
5729 (NTAPI DRIVER_ADD_DEVICE
)(
5730 IN
struct _DRIVER_OBJECT
*DriverObject
,
5731 IN
struct _DEVICE_OBJECT
*PhysicalDeviceObject
);
5732 typedef DRIVER_ADD_DEVICE
*PDRIVER_ADD_DEVICE
;
5734 typedef struct _DRIVER_EXTENSION
{
5735 struct _DRIVER_OBJECT
*DriverObject
;
5736 PDRIVER_ADD_DEVICE AddDevice
;
5738 UNICODE_STRING ServiceKeyName
;
5739 } DRIVER_EXTENSION
, *PDRIVER_EXTENSION
;
5741 #define DRVO_UNLOAD_INVOKED 0x00000001
5742 #define DRVO_LEGACY_DRIVER 0x00000002
5743 #define DRVO_BUILTIN_DRIVER 0x00000004
5746 (NTAPI DRIVER_INITIALIZE
)(
5747 IN
struct _DRIVER_OBJECT
*DriverObject
,
5748 IN PUNICODE_STRING RegistryPath
);
5749 typedef DRIVER_INITIALIZE
*PDRIVER_INITIALIZE
;
5752 (NTAPI DRIVER_STARTIO
)(
5753 IN
struct _DEVICE_OBJECT
*DeviceObject
,
5754 IN
struct _IRP
*Irp
);
5755 typedef DRIVER_STARTIO
*PDRIVER_STARTIO
;
5758 (NTAPI DRIVER_UNLOAD
)(
5759 IN
struct _DRIVER_OBJECT
*DriverObject
);
5760 typedef DRIVER_UNLOAD
*PDRIVER_UNLOAD
;
5763 (NTAPI DRIVER_DISPATCH
)(
5764 IN
struct _DEVICE_OBJECT
*DeviceObject
,
5765 IN
struct _IRP
*Irp
);
5766 typedef DRIVER_DISPATCH
*PDRIVER_DISPATCH
;
5768 typedef struct _DRIVER_OBJECT
{
5771 PDEVICE_OBJECT DeviceObject
;
5775 PVOID DriverSection
;
5776 PDRIVER_EXTENSION DriverExtension
;
5777 UNICODE_STRING DriverName
;
5778 PUNICODE_STRING HardwareDatabase
;
5779 struct _FAST_IO_DISPATCH
*FastIoDispatch
;
5780 PDRIVER_INITIALIZE DriverInit
;
5781 PDRIVER_STARTIO DriverStartIo
;
5782 PDRIVER_UNLOAD DriverUnload
;
5783 PDRIVER_DISPATCH MajorFunction
[IRP_MJ_MAXIMUM_FUNCTION
+ 1];
5784 } DRIVER_OBJECT
, *PDRIVER_OBJECT
;
5786 typedef struct _DMA_ADAPTER
{
5789 struct _DMA_OPERATIONS
* DmaOperations
;
5790 } DMA_ADAPTER
, *PDMA_ADAPTER
;
5793 (NTAPI
*PPUT_DMA_ADAPTER
)(
5794 IN PDMA_ADAPTER DmaAdapter
);
5797 (NTAPI
*PALLOCATE_COMMON_BUFFER
)(
5798 IN PDMA_ADAPTER DmaAdapter
,
5800 OUT PPHYSICAL_ADDRESS LogicalAddress
,
5801 IN BOOLEAN CacheEnabled
);
5804 (NTAPI
*PFREE_COMMON_BUFFER
)(
5805 IN PDMA_ADAPTER DmaAdapter
,
5807 IN PHYSICAL_ADDRESS LogicalAddress
,
5808 IN PVOID VirtualAddress
,
5809 IN BOOLEAN CacheEnabled
);
5812 (NTAPI
*PALLOCATE_ADAPTER_CHANNEL
)(
5813 IN PDMA_ADAPTER DmaAdapter
,
5814 IN PDEVICE_OBJECT DeviceObject
,
5815 IN ULONG NumberOfMapRegisters
,
5816 IN PDRIVER_CONTROL ExecutionRoutine
,
5820 (NTAPI
*PFLUSH_ADAPTER_BUFFERS
)(
5821 IN PDMA_ADAPTER DmaAdapter
,
5823 IN PVOID MapRegisterBase
,
5826 IN BOOLEAN WriteToDevice
);
5829 (NTAPI
*PFREE_ADAPTER_CHANNEL
)(
5830 IN PDMA_ADAPTER DmaAdapter
);
5833 (NTAPI
*PFREE_MAP_REGISTERS
)(
5834 IN PDMA_ADAPTER DmaAdapter
,
5835 PVOID MapRegisterBase
,
5836 ULONG NumberOfMapRegisters
);
5838 typedef PHYSICAL_ADDRESS
5839 (NTAPI
*PMAP_TRANSFER
)(
5840 IN PDMA_ADAPTER DmaAdapter
,
5842 IN PVOID MapRegisterBase
,
5844 IN OUT PULONG Length
,
5845 IN BOOLEAN WriteToDevice
);
5848 (NTAPI
*PGET_DMA_ALIGNMENT
)(
5849 IN PDMA_ADAPTER DmaAdapter
);
5852 (NTAPI
*PREAD_DMA_COUNTER
)(
5853 IN PDMA_ADAPTER DmaAdapter
);
5856 (NTAPI DRIVER_LIST_CONTROL
)(
5857 IN
struct _DEVICE_OBJECT
*DeviceObject
,
5858 IN
struct _IRP
*Irp
,
5859 IN
struct _SCATTER_GATHER_LIST
*ScatterGather
,
5861 typedef DRIVER_LIST_CONTROL
*PDRIVER_LIST_CONTROL
;
5864 (NTAPI
*PGET_SCATTER_GATHER_LIST
)(
5865 IN PDMA_ADAPTER DmaAdapter
,
5866 IN PDEVICE_OBJECT DeviceObject
,
5870 IN PDRIVER_LIST_CONTROL ExecutionRoutine
,
5872 IN BOOLEAN WriteToDevice
);
5875 (NTAPI
*PPUT_SCATTER_GATHER_LIST
)(
5876 IN PDMA_ADAPTER DmaAdapter
,
5877 IN PSCATTER_GATHER_LIST ScatterGather
,
5878 IN BOOLEAN WriteToDevice
);
5881 (NTAPI
*PCALCULATE_SCATTER_GATHER_LIST_SIZE
)(
5882 IN PDMA_ADAPTER DmaAdapter
,
5883 IN PMDL Mdl OPTIONAL
,
5886 OUT PULONG ScatterGatherListSize
,
5887 OUT PULONG pNumberOfMapRegisters OPTIONAL
);
5890 (NTAPI
*PBUILD_SCATTER_GATHER_LIST
)(
5891 IN PDMA_ADAPTER DmaAdapter
,
5892 IN PDEVICE_OBJECT DeviceObject
,
5896 IN PDRIVER_LIST_CONTROL ExecutionRoutine
,
5898 IN BOOLEAN WriteToDevice
,
5899 IN PVOID ScatterGatherBuffer
,
5900 IN ULONG ScatterGatherLength
);
5903 (NTAPI
*PBUILD_MDL_FROM_SCATTER_GATHER_LIST
)(
5904 IN PDMA_ADAPTER DmaAdapter
,
5905 IN PSCATTER_GATHER_LIST ScatterGather
,
5906 IN PMDL OriginalMdl
,
5907 OUT PMDL
*TargetMdl
);
5909 typedef struct _DMA_OPERATIONS
{
5911 PPUT_DMA_ADAPTER PutDmaAdapter
;
5912 PALLOCATE_COMMON_BUFFER AllocateCommonBuffer
;
5913 PFREE_COMMON_BUFFER FreeCommonBuffer
;
5914 PALLOCATE_ADAPTER_CHANNEL AllocateAdapterChannel
;
5915 PFLUSH_ADAPTER_BUFFERS FlushAdapterBuffers
;
5916 PFREE_ADAPTER_CHANNEL FreeAdapterChannel
;
5917 PFREE_MAP_REGISTERS FreeMapRegisters
;
5918 PMAP_TRANSFER MapTransfer
;
5919 PGET_DMA_ALIGNMENT GetDmaAlignment
;
5920 PREAD_DMA_COUNTER ReadDmaCounter
;
5921 PGET_SCATTER_GATHER_LIST GetScatterGatherList
;
5922 PPUT_SCATTER_GATHER_LIST PutScatterGatherList
;
5923 PCALCULATE_SCATTER_GATHER_LIST_SIZE CalculateScatterGatherList
;
5924 PBUILD_SCATTER_GATHER_LIST BuildScatterGatherList
;
5925 PBUILD_MDL_FROM_SCATTER_GATHER_LIST BuildMdlFromScatterGatherList
;
5926 } DMA_OPERATIONS
, *PDMA_OPERATIONS
;
5928 typedef struct _IO_RESOURCE_DESCRIPTOR
{
5931 UCHAR ShareDisposition
;
5939 PHYSICAL_ADDRESS MinimumAddress
;
5940 PHYSICAL_ADDRESS MaximumAddress
;
5945 PHYSICAL_ADDRESS MinimumAddress
;
5946 PHYSICAL_ADDRESS MaximumAddress
;
5949 ULONG MinimumVector
;
5950 ULONG MaximumVector
;
5953 ULONG MinimumChannel
;
5954 ULONG MaximumChannel
;
5959 PHYSICAL_ADDRESS MinimumAddress
;
5960 PHYSICAL_ADDRESS MaximumAddress
;
5977 } IO_RESOURCE_DESCRIPTOR
, *PIO_RESOURCE_DESCRIPTOR
;
5979 typedef struct _IO_RESOURCE_LIST
{
5983 IO_RESOURCE_DESCRIPTOR Descriptors
[1];
5984 } IO_RESOURCE_LIST
, *PIO_RESOURCE_LIST
;
5986 typedef struct _IO_RESOURCE_REQUIREMENTS_LIST
{
5988 INTERFACE_TYPE InterfaceType
;
5992 ULONG AlternativeLists
;
5993 IO_RESOURCE_LIST List
[1];
5994 } IO_RESOURCE_REQUIREMENTS_LIST
, *PIO_RESOURCE_REQUIREMENTS_LIST
;
5997 (NTAPI DRIVER_CANCEL
)(
5998 IN
struct _DEVICE_OBJECT
*DeviceObject
,
5999 IN
struct _IRP
*Irp
);
6000 typedef DRIVER_CANCEL
*PDRIVER_CANCEL
;
6002 typedef struct _IRP
{
6005 struct _MDL
*MdlAddress
;
6008 struct _IRP
*MasterIrp
;
6009 volatile LONG IrpCount
;
6012 LIST_ENTRY ThreadListEntry
;
6013 IO_STATUS_BLOCK IoStatus
;
6014 KPROCESSOR_MODE RequestorMode
;
6015 BOOLEAN PendingReturned
;
6017 CHAR CurrentLocation
;
6020 CCHAR ApcEnvironment
;
6021 UCHAR AllocationFlags
;
6022 PIO_STATUS_BLOCK UserIosb
;
6026 _ANONYMOUS_UNION
union {
6027 PIO_APC_ROUTINE UserApcRoutine
;
6028 PVOID IssuingProcess
;
6030 PVOID UserApcContext
;
6031 } AsynchronousParameters
;
6032 LARGE_INTEGER AllocationSize
;
6034 volatile PDRIVER_CANCEL CancelRoutine
;
6038 _ANONYMOUS_UNION
union {
6039 KDEVICE_QUEUE_ENTRY DeviceQueueEntry
;
6040 _ANONYMOUS_STRUCT
struct {
6041 PVOID DriverContext
[4];
6045 PCHAR AuxiliaryBuffer
;
6046 _ANONYMOUS_STRUCT
struct {
6047 LIST_ENTRY ListEntry
;
6048 _ANONYMOUS_UNION
union {
6049 struct _IO_STACK_LOCATION
*CurrentStackLocation
;
6053 struct _FILE_OBJECT
*OriginalFileObject
;
6056 PVOID CompletionKey
;
6060 typedef enum _IO_PAGING_PRIORITY
{
6061 IoPagingPriorityInvalid
,
6062 IoPagingPriorityNormal
,
6063 IoPagingPriorityHigh
,
6064 IoPagingPriorityReserved1
,
6065 IoPagingPriorityReserved2
6066 } IO_PAGING_PRIORITY
;
6069 (NTAPI IO_COMPLETION_ROUTINE
)(
6070 IN
struct _DEVICE_OBJECT
*DeviceObject
,
6071 IN
struct _IRP
*Irp
,
6073 typedef IO_COMPLETION_ROUTINE
*PIO_COMPLETION_ROUTINE
;
6076 (NTAPI IO_DPC_ROUTINE
)(
6077 IN
struct _KDPC
*Dpc
,
6078 IN
struct _DEVICE_OBJECT
*DeviceObject
,
6079 IN
struct _IRP
*Irp
,
6081 typedef IO_DPC_ROUTINE
*PIO_DPC_ROUTINE
;
6084 (NTAPI
*PMM_DLL_INITIALIZE
)(
6085 IN PUNICODE_STRING RegistryPath
);
6088 (NTAPI
*PMM_DLL_UNLOAD
)(
6092 (NTAPI IO_TIMER_ROUTINE
)(
6093 IN
struct _DEVICE_OBJECT
*DeviceObject
,
6095 typedef IO_TIMER_ROUTINE
*PIO_TIMER_ROUTINE
;
6097 typedef struct _IO_SECURITY_CONTEXT
{
6098 PSECURITY_QUALITY_OF_SERVICE SecurityQos
;
6099 PACCESS_STATE AccessState
;
6100 ACCESS_MASK DesiredAccess
;
6101 ULONG FullCreateOptions
;
6102 } IO_SECURITY_CONTEXT
, *PIO_SECURITY_CONTEXT
;
6106 typedef struct _IO_CSQ_IRP_CONTEXT
{
6109 struct _IO_CSQ
*Csq
;
6110 } IO_CSQ_IRP_CONTEXT
, *PIO_CSQ_IRP_CONTEXT
;
6113 (NTAPI
*PIO_CSQ_INSERT_IRP
)(
6114 IN
struct _IO_CSQ
*Csq
,
6118 (NTAPI IO_CSQ_INSERT_IRP_EX
)(
6119 IN
struct _IO_CSQ
*Csq
,
6121 IN PVOID InsertContext
);
6122 typedef IO_CSQ_INSERT_IRP_EX
*PIO_CSQ_INSERT_IRP_EX
;
6125 (NTAPI
*PIO_CSQ_REMOVE_IRP
)(
6126 IN
struct _IO_CSQ
*Csq
,
6130 (NTAPI
*PIO_CSQ_PEEK_NEXT_IRP
)(
6131 IN
struct _IO_CSQ
*Csq
,
6133 IN PVOID PeekContext
);
6136 (NTAPI
*PIO_CSQ_ACQUIRE_LOCK
)(
6137 IN
struct _IO_CSQ
*Csq
,
6141 (NTAPI
*PIO_CSQ_RELEASE_LOCK
)(
6142 IN
struct _IO_CSQ
*Csq
,
6146 (NTAPI
*PIO_CSQ_COMPLETE_CANCELED_IRP
)(
6147 IN
struct _IO_CSQ
*Csq
,
6150 typedef struct _IO_CSQ
{
6152 PIO_CSQ_INSERT_IRP CsqInsertIrp
;
6153 PIO_CSQ_REMOVE_IRP CsqRemoveIrp
;
6154 PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp
;
6155 PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock
;
6156 PIO_CSQ_RELEASE_LOCK CsqReleaseLock
;
6157 PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp
;
6158 PVOID ReservePointer
;
6161 typedef enum _BUS_QUERY_ID_TYPE
{
6163 BusQueryHardwareIDs
,
6164 BusQueryCompatibleIDs
,
6166 BusQueryDeviceSerialNumber
6167 } BUS_QUERY_ID_TYPE
, *PBUS_QUERY_ID_TYPE
;
6169 typedef enum _DEVICE_TEXT_TYPE
{
6170 DeviceTextDescription
,
6171 DeviceTextLocationInformation
6172 } DEVICE_TEXT_TYPE
, *PDEVICE_TEXT_TYPE
;
6175 (NTAPI
*PGPE_SERVICE_ROUTINE
)(
6180 (NTAPI
*PGPE_CONNECT_VECTOR
)(
6185 PGPE_SERVICE_ROUTINE
,
6190 (NTAPI
*PGPE_DISCONNECT_VECTOR
)(
6194 (NTAPI
*PGPE_ENABLE_EVENT
)(
6199 (NTAPI
*PGPE_DISABLE_EVENT
)(
6204 (NTAPI
*PGPE_CLEAR_STATUS
)(
6209 (NTAPI
*PDEVICE_NOTIFY_CALLBACK
)(
6214 (NTAPI
*PREGISTER_FOR_DEVICE_NOTIFICATIONS
)(
6216 PDEVICE_NOTIFY_CALLBACK
,
6220 (NTAPI
*PUNREGISTER_FOR_DEVICE_NOTIFICATIONS
)(
6222 PDEVICE_NOTIFY_CALLBACK
);
6224 typedef struct _ACPI_INTERFACE_STANDARD
{
6228 PINTERFACE_REFERENCE InterfaceReference
;
6229 PINTERFACE_DEREFERENCE InterfaceDereference
;
6230 PGPE_CONNECT_VECTOR GpeConnectVector
;
6231 PGPE_DISCONNECT_VECTOR GpeDisconnectVector
;
6232 PGPE_ENABLE_EVENT GpeEnableEvent
;
6233 PGPE_DISABLE_EVENT GpeDisableEvent
;
6234 PGPE_CLEAR_STATUS GpeClearStatus
;
6235 PREGISTER_FOR_DEVICE_NOTIFICATIONS RegisterForDeviceNotifications
;
6236 PUNREGISTER_FOR_DEVICE_NOTIFICATIONS UnregisterForDeviceNotifications
;
6237 } ACPI_INTERFACE_STANDARD
, *PACPI_INTERFACE_STANDARD
;
6240 (NTAPI
*PGPE_SERVICE_ROUTINE2
)(
6241 PVOID ObjectContext
,
6242 PVOID ServiceContext
);
6245 (NTAPI
*PGPE_CONNECT_VECTOR2
)(
6248 KINTERRUPT_MODE Mode
,
6250 PGPE_SERVICE_ROUTINE ServiceRoutine
,
6251 PVOID ServiceContext
,
6252 PVOID
*ObjectContext
);
6255 (NTAPI
*PGPE_DISCONNECT_VECTOR2
)(
6257 PVOID ObjectContext
);
6260 (NTAPI
*PGPE_ENABLE_EVENT2
)(
6262 PVOID ObjectContext
);
6265 (NTAPI
*PGPE_DISABLE_EVENT2
)(
6267 PVOID ObjectContext
);
6270 (NTAPI
*PGPE_CLEAR_STATUS2
)(
6272 PVOID ObjectContext
);
6275 (NTAPI
*PDEVICE_NOTIFY_CALLBACK2
)(
6276 PVOID NotificationContext
,
6280 (NTAPI
*PREGISTER_FOR_DEVICE_NOTIFICATIONS2
)(
6282 PDEVICE_NOTIFY_CALLBACK2 NotificationHandler
,
6283 PVOID NotificationContext
);
6286 (NTAPI
*PUNREGISTER_FOR_DEVICE_NOTIFICATIONS2
)(
6289 typedef struct _ACPI_INTERFACE_STANDARD2
{
6293 PINTERFACE_REFERENCE InterfaceReference
;
6294 PINTERFACE_DEREFERENCE InterfaceDereference
;
6295 PGPE_CONNECT_VECTOR2 GpeConnectVector
;
6296 PGPE_DISCONNECT_VECTOR2 GpeDisconnectVector
;
6297 PGPE_ENABLE_EVENT2 GpeEnableEvent
;
6298 PGPE_DISABLE_EVENT2 GpeDisableEvent
;
6299 PGPE_CLEAR_STATUS2 GpeClearStatus
;
6300 PREGISTER_FOR_DEVICE_NOTIFICATIONS2 RegisterForDeviceNotifications
;
6301 PUNREGISTER_FOR_DEVICE_NOTIFICATIONS2 UnregisterForDeviceNotifications
;
6302 } ACPI_INTERFACE_STANDARD2
, *PACPI_INTERFACE_STANDARD2
;
6304 #if !defined(_AMD64_) && !defined(_IA64_)
6305 #include <pshpack4.h>
6307 typedef struct _IO_STACK_LOCATION
{
6308 UCHAR MajorFunction
;
6309 UCHAR MinorFunction
;
6314 PIO_SECURITY_CONTEXT SecurityContext
;
6316 USHORT POINTER_ALIGNMENT FileAttributes
;
6318 ULONG POINTER_ALIGNMENT EaLength
;
6322 ULONG POINTER_ALIGNMENT Key
;
6323 LARGE_INTEGER ByteOffset
;
6327 ULONG POINTER_ALIGNMENT Key
;
6328 LARGE_INTEGER ByteOffset
;
6332 PUNICODE_STRING FileName
;
6333 FILE_INFORMATION_CLASS FileInformationClass
;
6338 ULONG CompletionFilter
;
6342 FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass
;
6346 FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass
;
6347 PFILE_OBJECT FileObject
;
6348 _ANONYMOUS_UNION
union {
6349 _ANONYMOUS_STRUCT
struct {
6350 BOOLEAN ReplaceIfExists
;
6351 BOOLEAN AdvanceOnly
;
6354 HANDLE DeleteHandle
;
6368 FS_INFORMATION_CLASS POINTER_ALIGNMENT FsInformationClass
;
6372 FS_INFORMATION_CLASS FsInformationClass
;
6375 ULONG OutputBufferLength
;
6376 ULONG InputBufferLength
;
6377 ULONG FsControlCode
;
6378 PVOID Type3InputBuffer
;
6379 } FileSystemControl
;
6381 PLARGE_INTEGER Length
;
6383 LARGE_INTEGER ByteOffset
;
6386 ULONG OutputBufferLength
;
6387 ULONG POINTER_ALIGNMENT InputBufferLength
;
6388 ULONG POINTER_ALIGNMENT IoControlCode
;
6389 PVOID Type3InputBuffer
;
6392 SECURITY_INFORMATION SecurityInformation
;
6393 ULONG POINTER_ALIGNMENT Length
;
6396 SECURITY_INFORMATION SecurityInformation
;
6397 PSECURITY_DESCRIPTOR SecurityDescriptor
;
6401 PDEVICE_OBJECT DeviceObject
;
6405 PDEVICE_OBJECT DeviceObject
;
6408 struct _SCSI_REQUEST_BLOCK
*Srb
;
6413 struct _FILE_GET_QUOTA_INFORMATION
*SidList
;
6414 ULONG SidListLength
;
6420 DEVICE_RELATION_TYPE Type
;
6421 } QueryDeviceRelations
;
6423 CONST GUID
*InterfaceType
;
6426 PINTERFACE Interface
;
6427 PVOID InterfaceSpecificData
;
6430 PDEVICE_CAPABILITIES Capabilities
;
6431 } DeviceCapabilities
;
6433 PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList
;
6434 } FilterResourceRequirements
;
6439 ULONG POINTER_ALIGNMENT Length
;
6445 BUS_QUERY_ID_TYPE IdType
;
6448 DEVICE_TEXT_TYPE DeviceTextType
;
6449 LCID POINTER_ALIGNMENT LocaleId
;
6453 BOOLEAN Reserved
[3];
6454 DEVICE_USAGE_NOTIFICATION_TYPE POINTER_ALIGNMENT Type
;
6455 } UsageNotification
;
6457 SYSTEM_POWER_STATE PowerState
;
6460 PPOWER_SEQUENCE PowerSequence
;
6463 ULONG SystemContext
;
6464 POWER_STATE_TYPE POINTER_ALIGNMENT Type
;
6465 POWER_STATE POINTER_ALIGNMENT State
;
6466 POWER_ACTION POINTER_ALIGNMENT ShutdownType
;
6469 PCM_RESOURCE_LIST AllocatedResources
;
6470 PCM_RESOURCE_LIST AllocatedResourcesTranslated
;
6473 ULONG_PTR ProviderId
;
6485 PDEVICE_OBJECT DeviceObject
;
6486 PFILE_OBJECT FileObject
;
6487 PIO_COMPLETION_ROUTINE CompletionRoutine
;
6489 } IO_STACK_LOCATION
, *PIO_STACK_LOCATION
;
6490 #if !defined(_AMD64_) && !defined(_IA64_)
6491 #include <poppack.h>
6494 /* IO_STACK_LOCATION.Control */
6496 #define SL_PENDING_RETURNED 0x01
6497 #define SL_ERROR_RETURNED 0x02
6498 #define SL_INVOKE_ON_CANCEL 0x20
6499 #define SL_INVOKE_ON_SUCCESS 0x40
6500 #define SL_INVOKE_ON_ERROR 0x80
6502 #define METHOD_BUFFERED 0
6503 #define METHOD_IN_DIRECT 1
6504 #define METHOD_OUT_DIRECT 2
6505 #define METHOD_NEITHER 3
6507 #define METHOD_DIRECT_TO_HARDWARE METHOD_IN_DIRECT
6508 #define METHOD_DIRECT_FROM_HARDWARE METHOD_OUT_DIRECT
6510 #define FILE_SUPERSEDED 0x00000000
6511 #define FILE_OPENED 0x00000001
6512 #define FILE_CREATED 0x00000002
6513 #define FILE_OVERWRITTEN 0x00000003
6514 #define FILE_EXISTS 0x00000004
6515 #define FILE_DOES_NOT_EXIST 0x00000005
6517 #define FILE_USE_FILE_POINTER_POSITION 0xfffffffe
6518 #define FILE_WRITE_TO_END_OF_FILE 0xffffffff
6520 /* also in winnt.h */
6521 #define FILE_LIST_DIRECTORY 0x00000001
6522 #define FILE_READ_DATA 0x00000001
6523 #define FILE_ADD_FILE 0x00000002
6524 #define FILE_WRITE_DATA 0x00000002
6525 #define FILE_ADD_SUBDIRECTORY 0x00000004
6526 #define FILE_APPEND_DATA 0x00000004
6527 #define FILE_CREATE_PIPE_INSTANCE 0x00000004
6528 #define FILE_READ_EA 0x00000008
6529 #define FILE_WRITE_EA 0x00000010
6530 #define FILE_EXECUTE 0x00000020
6531 #define FILE_TRAVERSE 0x00000020
6532 #define FILE_DELETE_CHILD 0x00000040
6533 #define FILE_READ_ATTRIBUTES 0x00000080
6534 #define FILE_WRITE_ATTRIBUTES 0x00000100
6536 #define FILE_SHARE_READ 0x00000001
6537 #define FILE_SHARE_WRITE 0x00000002
6538 #define FILE_SHARE_DELETE 0x00000004
6539 #define FILE_SHARE_VALID_FLAGS 0x00000007
6541 #define FILE_ATTRIBUTE_READONLY 0x00000001
6542 #define FILE_ATTRIBUTE_HIDDEN 0x00000002
6543 #define FILE_ATTRIBUTE_SYSTEM 0x00000004
6544 #define FILE_ATTRIBUTE_DIRECTORY 0x00000010
6545 #define FILE_ATTRIBUTE_ARCHIVE 0x00000020
6546 #define FILE_ATTRIBUTE_DEVICE 0x00000040
6547 #define FILE_ATTRIBUTE_NORMAL 0x00000080
6548 #define FILE_ATTRIBUTE_TEMPORARY 0x00000100
6549 #define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200
6550 #define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400
6551 #define FILE_ATTRIBUTE_COMPRESSED 0x00000800
6552 #define FILE_ATTRIBUTE_OFFLINE 0x00001000
6553 #define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000
6554 #define FILE_ATTRIBUTE_ENCRYPTED 0x00004000
6555 #define FILE_ATTRIBUTE_VIRTUAL 0x00010000
6557 #define FILE_ATTRIBUTE_VALID_FLAGS 0x00007fb7
6558 #define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x000031a7
6560 #define FILE_VALID_OPTION_FLAGS 0x00ffffff
6561 #define FILE_VALID_PIPE_OPTION_FLAGS 0x00000032
6562 #define FILE_VALID_MAILSLOT_OPTION_FLAGS 0x00000032
6563 #define FILE_VALID_SET_FLAGS 0x00000036
6565 #define FILE_SUPERSEDE 0x00000000
6566 #define FILE_OPEN 0x00000001
6567 #define FILE_CREATE 0x00000002
6568 #define FILE_OPEN_IF 0x00000003
6569 #define FILE_OVERWRITE 0x00000004
6570 #define FILE_OVERWRITE_IF 0x00000005
6571 #define FILE_MAXIMUM_DISPOSITION 0x00000005
6573 #define FILE_DIRECTORY_FILE 0x00000001
6574 #define FILE_WRITE_THROUGH 0x00000002
6575 #define FILE_SEQUENTIAL_ONLY 0x00000004
6576 #define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008
6577 #define FILE_SYNCHRONOUS_IO_ALERT 0x00000010
6578 #define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020
6579 #define FILE_NON_DIRECTORY_FILE 0x00000040
6580 #define FILE_CREATE_TREE_CONNECTION 0x00000080
6581 #define FILE_COMPLETE_IF_OPLOCKED 0x00000100
6582 #define FILE_NO_EA_KNOWLEDGE 0x00000200
6583 #define FILE_OPEN_REMOTE_INSTANCE 0x00000400
6584 #define FILE_RANDOM_ACCESS 0x00000800
6585 #define FILE_DELETE_ON_CLOSE 0x00001000
6586 #define FILE_OPEN_BY_FILE_ID 0x00002000
6587 #define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000
6588 #define FILE_NO_COMPRESSION 0x00008000
6589 #if (NTDDI_VERSION >= NTDDI_WIN7)
6590 #define FILE_OPEN_REQUIRING_OPLOCK 0x00010000
6591 #define FILE_DISALLOW_EXCLUSIVE 0x00020000
6592 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
6593 #define FILE_RESERVE_OPFILTER 0x00100000
6594 #define FILE_OPEN_REPARSE_POINT 0x00200000
6595 #define FILE_OPEN_NO_RECALL 0x00400000
6596 #define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000
6598 #define FILE_ANY_ACCESS 0x00000000
6599 #define FILE_SPECIAL_ACCESS FILE_ANY_ACCESS
6600 #define FILE_READ_ACCESS 0x00000001
6601 #define FILE_WRITE_ACCESS 0x00000002
6603 #define FILE_ALL_ACCESS \
6604 (STANDARD_RIGHTS_REQUIRED | \
6608 #define FILE_GENERIC_EXECUTE \
6609 (STANDARD_RIGHTS_EXECUTE | \
6610 FILE_READ_ATTRIBUTES | \
6614 #define FILE_GENERIC_READ \
6615 (STANDARD_RIGHTS_READ | \
6617 FILE_READ_ATTRIBUTES | \
6621 #define FILE_GENERIC_WRITE \
6622 (STANDARD_RIGHTS_WRITE | \
6624 FILE_WRITE_ATTRIBUTES | \
6626 FILE_APPEND_DATA | \
6631 #define WMIREG_ACTION_REGISTER 1
6632 #define WMIREG_ACTION_DEREGISTER 2
6633 #define WMIREG_ACTION_REREGISTER 3
6634 #define WMIREG_ACTION_UPDATE_GUIDS 4
6635 #define WMIREG_ACTION_BLOCK_IRPS 5
6637 #define WMIREGISTER 0
6641 (NTAPI FWMI_NOTIFICATION_CALLBACK
)(
6644 typedef FWMI_NOTIFICATION_CALLBACK
*WMI_NOTIFICATION_CALLBACK
;
6649 typedef struct _PCI_SLOT_NUMBER
{
6652 ULONG DeviceNumber
:5;
6653 ULONG FunctionNumber
:3;
6658 } PCI_SLOT_NUMBER
, *PPCI_SLOT_NUMBER
;
6660 #define PCI_TYPE0_ADDRESSES 6
6661 #define PCI_TYPE1_ADDRESSES 2
6662 #define PCI_TYPE2_ADDRESSES 5
6664 typedef struct _PCI_COMMON_HEADER
{
6665 PCI_COMMON_HEADER_LAYOUT
6666 } PCI_COMMON_HEADER
, *PPCI_COMMON_HEADER
;
6669 typedef struct _PCI_COMMON_CONFIG
{
6670 PCI_COMMON_HEADER_LAYOUT
6671 UCHAR DeviceSpecific
[192];
6672 } PCI_COMMON_CONFIG
, *PPCI_COMMON_CONFIG
;
6674 typedef struct _PCI_COMMON_CONFIG
{
6675 PCI_COMMON_HEADER DUMMYSTRUCTNAME
;
6676 UCHAR DeviceSpecific
[192];
6677 } PCI_COMMON_CONFIG
, *PPCI_COMMON_CONFIG
;
6680 #define PCI_COMMON_HDR_LENGTH (FIELD_OFFSET(PCI_COMMON_CONFIG, DeviceSpecific))
6682 #define PCI_EXTENDED_CONFIG_LENGTH 0x1000
6684 #define PCI_MAX_DEVICES 32
6685 #define PCI_MAX_FUNCTION 8
6686 #define PCI_MAX_BRIDGE_NUMBER 0xFF
6687 #define PCI_INVALID_VENDORID 0xFFFF
6689 /* PCI_COMMON_CONFIG.HeaderType */
6690 #define PCI_MULTIFUNCTION 0x80
6691 #define PCI_DEVICE_TYPE 0x00
6692 #define PCI_BRIDGE_TYPE 0x01
6693 #define PCI_CARDBUS_BRIDGE_TYPE 0x02
6695 #define PCI_CONFIGURATION_TYPE(PciData) \
6696 (((PPCI_COMMON_CONFIG) (PciData))->HeaderType & ~PCI_MULTIFUNCTION)
6698 #define PCI_MULTIFUNCTION_DEVICE(PciData) \
6699 ((((PPCI_COMMON_CONFIG) (PciData))->HeaderType & PCI_MULTIFUNCTION) != 0)
6701 /* PCI_COMMON_CONFIG.Command */
6702 #define PCI_ENABLE_IO_SPACE 0x0001
6703 #define PCI_ENABLE_MEMORY_SPACE 0x0002
6704 #define PCI_ENABLE_BUS_MASTER 0x0004
6705 #define PCI_ENABLE_SPECIAL_CYCLES 0x0008
6706 #define PCI_ENABLE_WRITE_AND_INVALIDATE 0x0010
6707 #define PCI_ENABLE_VGA_COMPATIBLE_PALETTE 0x0020
6708 #define PCI_ENABLE_PARITY 0x0040
6709 #define PCI_ENABLE_WAIT_CYCLE 0x0080
6710 #define PCI_ENABLE_SERR 0x0100
6711 #define PCI_ENABLE_FAST_BACK_TO_BACK 0x0200
6712 #define PCI_DISABLE_LEVEL_INTERRUPT 0x0400
6714 /* PCI_COMMON_CONFIG.Status */
6715 #define PCI_STATUS_INTERRUPT_PENDING 0x0008
6716 #define PCI_STATUS_CAPABILITIES_LIST 0x0010
6717 #define PCI_STATUS_66MHZ_CAPABLE 0x0020
6718 #define PCI_STATUS_UDF_SUPPORTED 0x0040
6719 #define PCI_STATUS_FAST_BACK_TO_BACK 0x0080
6720 #define PCI_STATUS_DATA_PARITY_DETECTED 0x0100
6721 #define PCI_STATUS_DEVSEL 0x0600
6722 #define PCI_STATUS_SIGNALED_TARGET_ABORT 0x0800
6723 #define PCI_STATUS_RECEIVED_TARGET_ABORT 0x1000
6724 #define PCI_STATUS_RECEIVED_MASTER_ABORT 0x2000
6725 #define PCI_STATUS_SIGNALED_SYSTEM_ERROR 0x4000
6726 #define PCI_STATUS_DETECTED_PARITY_ERROR 0x8000
6728 /* IO_STACK_LOCATION.Parameters.ReadWriteControl.WhichSpace */
6730 #define PCI_WHICHSPACE_CONFIG 0x0
6731 #define PCI_WHICHSPACE_ROM 0x52696350 /* 'PciR' */
6733 #define PCI_CAPABILITY_ID_POWER_MANAGEMENT 0x01
6734 #define PCI_CAPABILITY_ID_AGP 0x02
6735 #define PCI_CAPABILITY_ID_VPD 0x03
6736 #define PCI_CAPABILITY_ID_SLOT_ID 0x04
6737 #define PCI_CAPABILITY_ID_MSI 0x05
6738 #define PCI_CAPABILITY_ID_CPCI_HOTSWAP 0x06
6739 #define PCI_CAPABILITY_ID_PCIX 0x07
6740 #define PCI_CAPABILITY_ID_HYPERTRANSPORT 0x08
6741 #define PCI_CAPABILITY_ID_VENDOR_SPECIFIC 0x09
6742 #define PCI_CAPABILITY_ID_DEBUG_PORT 0x0A
6743 #define PCI_CAPABILITY_ID_CPCI_RES_CTRL 0x0B
6744 #define PCI_CAPABILITY_ID_SHPC 0x0C
6745 #define PCI_CAPABILITY_ID_P2P_SSID 0x0D
6746 #define PCI_CAPABILITY_ID_AGP_TARGET 0x0E
6747 #define PCI_CAPABILITY_ID_SECURE 0x0F
6748 #define PCI_CAPABILITY_ID_PCI_EXPRESS 0x10
6749 #define PCI_CAPABILITY_ID_MSIX 0x11
6751 typedef struct _PCI_CAPABILITIES_HEADER
{
6754 } PCI_CAPABILITIES_HEADER
, *PPCI_CAPABILITIES_HEADER
;
6756 typedef struct _PCI_PMC
{
6760 UCHAR DeviceSpecificInitialization
:1;
6762 struct _PM_SUPPORT
{
6772 } PCI_PMC
, *PPCI_PMC
;
6774 typedef struct _PCI_PMCSR
{
6775 USHORT PowerState
:2;
6778 USHORT DataSelect
:4;
6781 } PCI_PMCSR
, *PPCI_PMCSR
;
6783 typedef struct _PCI_PMCSR_BSE
{
6785 UCHAR D3HotSupportsStopClock
:1;
6786 UCHAR BusPowerClockControlEnabled
:1;
6787 } PCI_PMCSR_BSE
, *PPCI_PMCSR_BSE
;
6789 typedef struct _PCI_PM_CAPABILITY
{
6790 PCI_CAPABILITIES_HEADER Header
;
6792 PCI_PMC Capabilities
;
6796 PCI_PMCSR ControlStatus
;
6800 PCI_PMCSR_BSE BridgeSupport
;
6804 } PCI_PM_CAPABILITY
, *PPCI_PM_CAPABILITY
;
6807 PCI_CAPABILITIES_HEADER Header
;
6810 USHORT DataParityErrorRecoveryEnable
:1;
6811 USHORT EnableRelaxedOrdering
:1;
6812 USHORT MaxMemoryReadByteCount
:2;
6813 USHORT MaxOutstandingSplitTransactions
:3;
6820 ULONG FunctionNumber
:3;
6821 ULONG DeviceNumber
:5;
6823 ULONG Device64Bit
:1;
6824 ULONG Capable133MHz
:1;
6825 ULONG SplitCompletionDiscarded
:1;
6826 ULONG UnexpectedSplitCompletion
:1;
6827 ULONG DeviceComplexity
:1;
6828 ULONG DesignedMaxMemoryReadByteCount
:2;
6829 ULONG DesignedMaxOutstandingSplitTransactions
:3;
6830 ULONG DesignedMaxCumulativeReadSize
:3;
6831 ULONG ReceivedSplitCompletionErrorMessage
:1;
6832 ULONG CapablePCIX266
:1;
6833 ULONG CapablePCIX533
:1;
6837 } PCI_X_CAPABILITY
, *PPCI_X_CAPABILITY
;
6839 #define PCI_EXPRESS_ADVANCED_ERROR_REPORTING_CAP_ID 0x0001
6840 #define PCI_EXPRESS_VIRTUAL_CHANNEL_CAP_ID 0x0002
6841 #define PCI_EXPRESS_DEVICE_SERIAL_NUMBER_CAP_ID 0x0003
6842 #define PCI_EXPRESS_POWER_BUDGETING_CAP_ID 0x0004
6843 #define PCI_EXPRESS_RC_LINK_DECLARATION_CAP_ID 0x0005
6844 #define PCI_EXPRESS_RC_INTERNAL_LINK_CONTROL_CAP_ID 0x0006
6845 #define PCI_EXPRESS_RC_EVENT_COLLECTOR_ENDPOINT_ASSOCIATION_CAP_ID 0x0007
6846 #define PCI_EXPRESS_MFVC_CAP_ID 0x0008
6847 #define PCI_EXPRESS_VC_AND_MFVC_CAP_ID 0x0009
6848 #define PCI_EXPRESS_RCRB_HEADER_CAP_ID 0x000A
6849 #define PCI_EXPRESS_SINGLE_ROOT_IO_VIRTUALIZATION_CAP_ID 0x0010
6851 typedef struct _PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER
{
6852 USHORT CapabilityID
;
6855 } PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER
, *PPCI_EXPRESS_ENHANCED_CAPABILITY_HEADER
;
6857 typedef struct _PCI_EXPRESS_SERIAL_NUMBER_CAPABILITY
{
6858 PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header
;
6859 ULONG LowSerialNumber
;
6860 ULONG HighSerialNumber
;
6861 } PCI_EXPRESS_SERIAL_NUMBER_CAPABILITY
, *PPCI_EXPRESS_SERIAL_NUMBER_CAPABILITY
;
6863 typedef union _PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS
{
6867 ULONG DataLinkProtocolError
:1;
6868 ULONG SurpriseDownError
:1;
6870 ULONG PoisonedTLP
:1;
6871 ULONG FlowControlProtocolError
:1;
6872 ULONG CompletionTimeout
:1;
6873 ULONG CompleterAbort
:1;
6874 ULONG UnexpectedCompletion
:1;
6875 ULONG ReceiverOverflow
:1;
6876 ULONG MalformedTLP
:1;
6878 ULONG UnsupportedRequestError
:1;
6882 } PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS
, *PPCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS
;
6884 typedef union _PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK
{
6888 ULONG DataLinkProtocolError
:1;
6889 ULONG SurpriseDownError
:1;
6891 ULONG PoisonedTLP
:1;
6892 ULONG FlowControlProtocolError
:1;
6893 ULONG CompletionTimeout
:1;
6894 ULONG CompleterAbort
:1;
6895 ULONG UnexpectedCompletion
:1;
6896 ULONG ReceiverOverflow
:1;
6897 ULONG MalformedTLP
:1;
6899 ULONG UnsupportedRequestError
:1;
6903 } PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK
, *PPCI_EXPRESS_UNCORRECTABLE_ERROR_MASK
;
6905 typedef union _PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY
{
6909 ULONG DataLinkProtocolError
:1;
6910 ULONG SurpriseDownError
:1;
6912 ULONG PoisonedTLP
:1;
6913 ULONG FlowControlProtocolError
:1;
6914 ULONG CompletionTimeout
:1;
6915 ULONG CompleterAbort
:1;
6916 ULONG UnexpectedCompletion
:1;
6917 ULONG ReceiverOverflow
:1;
6918 ULONG MalformedTLP
:1;
6920 ULONG UnsupportedRequestError
:1;
6924 } PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY
, *PPCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY
;
6926 typedef union _PCI_EXPRESS_CORRECTABLE_ERROR_STATUS
{
6928 ULONG ReceiverError
:1;
6932 ULONG ReplayNumRollover
:1;
6934 ULONG ReplayTimerTimeout
:1;
6935 ULONG AdvisoryNonFatalError
:1;
6939 } PCI_EXPRESS_CORRECTABLE_ERROR_STATUS
, *PPCI_CORRECTABLE_ERROR_STATUS
;
6941 typedef union _PCI_EXPRESS_CORRECTABLE_ERROR_MASK
{
6943 ULONG ReceiverError
:1;
6947 ULONG ReplayNumRollover
:1;
6949 ULONG ReplayTimerTimeout
:1;
6950 ULONG AdvisoryNonFatalError
:1;
6954 } PCI_EXPRESS_CORRECTABLE_ERROR_MASK
, *PPCI_CORRECTABLE_ERROR_MASK
;
6956 typedef union _PCI_EXPRESS_AER_CAPABILITIES
{
6958 ULONG FirstErrorPointer
:5;
6959 ULONG ECRCGenerationCapable
:1;
6960 ULONG ECRCGenerationEnable
:1;
6961 ULONG ECRCCheckCapable
:1;
6962 ULONG ECRCCheckEnable
:1;
6966 } PCI_EXPRESS_AER_CAPABILITIES
, *PPCI_EXPRESS_AER_CAPABILITIES
;
6968 typedef union _PCI_EXPRESS_ROOT_ERROR_COMMAND
{
6970 ULONG CorrectableErrorReportingEnable
:1;
6971 ULONG NonFatalErrorReportingEnable
:1;
6972 ULONG FatalErrorReportingEnable
:1;
6976 } PCI_EXPRESS_ROOT_ERROR_COMMAND
, *PPCI_EXPRESS_ROOT_ERROR_COMMAND
;
6978 typedef union _PCI_EXPRESS_ROOT_ERROR_STATUS
{
6980 ULONG CorrectableErrorReceived
:1;
6981 ULONG MultipleCorrectableErrorsReceived
:1;
6982 ULONG UncorrectableErrorReceived
:1;
6983 ULONG MultipleUncorrectableErrorsReceived
:1;
6984 ULONG FirstUncorrectableFatal
:1;
6985 ULONG NonFatalErrorMessagesReceived
:1;
6986 ULONG FatalErrorMessagesReceived
:1;
6988 ULONG AdvancedErrorInterruptMessageNumber
:5;
6991 } PCI_EXPRESS_ROOT_ERROR_STATUS
, *PPCI_EXPRESS_ROOT_ERROR_STATUS
;
6993 typedef union _PCI_EXPRESS_ERROR_SOURCE_ID
{
6995 USHORT CorrectableSourceIdFun
:3;
6996 USHORT CorrectableSourceIdDev
:5;
6997 USHORT CorrectableSourceIdBus
:8;
6998 USHORT UncorrectableSourceIdFun
:3;
6999 USHORT UncorrectableSourceIdDev
:5;
7000 USHORT UncorrectableSourceIdBus
:8;
7003 } PCI_EXPRESS_ERROR_SOURCE_ID
, *PPCI_EXPRESS_ERROR_SOURCE_ID
;
7005 typedef union _PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS
{
7007 ULONG TargetAbortOnSplitCompletion
:1;
7008 ULONG MasterAbortOnSplitCompletion
:1;
7009 ULONG ReceivedTargetAbort
:1;
7010 ULONG ReceivedMasterAbort
:1;
7012 ULONG UnexpectedSplitCompletionError
:1;
7013 ULONG UncorrectableSplitCompletion
:1;
7014 ULONG UncorrectableDataError
:1;
7015 ULONG UncorrectableAttributeError
:1;
7016 ULONG UncorrectableAddressError
:1;
7017 ULONG DelayedTransactionDiscardTimerExpired
:1;
7018 ULONG PERRAsserted
:1;
7019 ULONG SERRAsserted
:1;
7020 ULONG InternalBridgeError
:1;
7024 } PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS
, *PPCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS
;
7026 typedef union _PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK
{
7028 ULONG TargetAbortOnSplitCompletion
:1;
7029 ULONG MasterAbortOnSplitCompletion
:1;
7030 ULONG ReceivedTargetAbort
:1;
7031 ULONG ReceivedMasterAbort
:1;
7033 ULONG UnexpectedSplitCompletionError
:1;
7034 ULONG UncorrectableSplitCompletion
:1;
7035 ULONG UncorrectableDataError
:1;
7036 ULONG UncorrectableAttributeError
:1;
7037 ULONG UncorrectableAddressError
:1;
7038 ULONG DelayedTransactionDiscardTimerExpired
:1;
7039 ULONG PERRAsserted
:1;
7040 ULONG SERRAsserted
:1;
7041 ULONG InternalBridgeError
:1;
7045 } PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK
, *PPCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK
;
7047 typedef union _PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY
{
7049 ULONG TargetAbortOnSplitCompletion
:1;
7050 ULONG MasterAbortOnSplitCompletion
:1;
7051 ULONG ReceivedTargetAbort
:1;
7052 ULONG ReceivedMasterAbort
:1;
7054 ULONG UnexpectedSplitCompletionError
:1;
7055 ULONG UncorrectableSplitCompletion
:1;
7056 ULONG UncorrectableDataError
:1;
7057 ULONG UncorrectableAttributeError
:1;
7058 ULONG UncorrectableAddressError
:1;
7059 ULONG DelayedTransactionDiscardTimerExpired
:1;
7060 ULONG PERRAsserted
:1;
7061 ULONG SERRAsserted
:1;
7062 ULONG InternalBridgeError
:1;
7066 } PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY
, *PPCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY
;
7068 typedef union _PCI_EXPRESS_SEC_AER_CAPABILITIES
{
7070 ULONG SecondaryUncorrectableFirstErrorPtr
:5;
7074 } PCI_EXPRESS_SEC_AER_CAPABILITIES
, *PPCI_EXPRESS_SEC_AER_CAPABILITIES
;
7076 #define ROOT_CMD_ENABLE_CORRECTABLE_ERROR_REPORTING 0x00000001
7077 #define ROOT_CMD_ENABLE_NONFATAL_ERROR_REPORTING 0x00000002
7078 #define ROOT_CMD_ENABLE_FATAL_ERROR_REPORTING 0x00000004
7080 #define ROOT_CMD_ERROR_REPORTING_ENABLE_MASK \
7081 (ROOT_CMD_ENABLE_FATAL_ERROR_REPORTING | \
7082 ROOT_CMD_ENABLE_NONFATAL_ERROR_REPORTING | \
7083 ROOT_CMD_ENABLE_CORRECTABLE_ERROR_REPORTING)
7085 typedef struct _PCI_EXPRESS_AER_CAPABILITY
{
7086 PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header
;
7087 PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS UncorrectableErrorStatus
;
7088 PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK UncorrectableErrorMask
;
7089 PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY UncorrectableErrorSeverity
;
7090 PCI_EXPRESS_CORRECTABLE_ERROR_STATUS CorrectableErrorStatus
;
7091 PCI_EXPRESS_CORRECTABLE_ERROR_MASK CorrectableErrorMask
;
7092 PCI_EXPRESS_AER_CAPABILITIES CapabilitiesAndControl
;
7094 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS SecUncorrectableErrorStatus
;
7095 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK SecUncorrectableErrorMask
;
7096 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY SecUncorrectableErrorSeverity
;
7097 PCI_EXPRESS_SEC_AER_CAPABILITIES SecCapabilitiesAndControl
;
7098 ULONG SecHeaderLog
[4];
7099 } PCI_EXPRESS_AER_CAPABILITY
, *PPCI_EXPRESS_AER_CAPABILITY
;
7101 typedef struct _PCI_EXPRESS_ROOTPORT_AER_CAPABILITY
{
7102 PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header
;
7103 PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS UncorrectableErrorStatus
;
7104 PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK UncorrectableErrorMask
;
7105 PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY UncorrectableErrorSeverity
;
7106 PCI_EXPRESS_CORRECTABLE_ERROR_STATUS CorrectableErrorStatus
;
7107 PCI_EXPRESS_CORRECTABLE_ERROR_MASK CorrectableErrorMask
;
7108 PCI_EXPRESS_AER_CAPABILITIES CapabilitiesAndControl
;
7110 PCI_EXPRESS_ROOT_ERROR_COMMAND RootErrorCommand
;
7111 PCI_EXPRESS_ROOT_ERROR_STATUS RootErrorStatus
;
7112 PCI_EXPRESS_ERROR_SOURCE_ID ErrorSourceId
;
7113 } PCI_EXPRESS_ROOTPORT_AER_CAPABILITY
, *PPCI_EXPRESS_ROOTPORT_AER_CAPABILITY
;
7115 typedef struct _PCI_EXPRESS_BRIDGE_AER_CAPABILITY
{
7116 PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header
;
7117 PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS UncorrectableErrorStatus
;
7118 PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK UncorrectableErrorMask
;
7119 PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY UncorrectableErrorSeverity
;
7120 PCI_EXPRESS_CORRECTABLE_ERROR_STATUS CorrectableErrorStatus
;
7121 PCI_EXPRESS_CORRECTABLE_ERROR_MASK CorrectableErrorMask
;
7122 PCI_EXPRESS_AER_CAPABILITIES CapabilitiesAndControl
;
7124 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS SecUncorrectableErrorStatus
;
7125 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK SecUncorrectableErrorMask
;
7126 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY SecUncorrectableErrorSeverity
;
7127 PCI_EXPRESS_SEC_AER_CAPABILITIES SecCapabilitiesAndControl
;
7128 ULONG SecHeaderLog
[4];
7129 } PCI_EXPRESS_BRIDGE_AER_CAPABILITY
, *PPCI_EXPRESS_BRIDGE_AER_CAPABILITY
;
7131 typedef union _PCI_EXPRESS_SRIOV_CAPS
{
7133 ULONG VFMigrationCapable
:1;
7135 ULONG VFMigrationInterruptNumber
:11;
7138 } PCI_EXPRESS_SRIOV_CAPS
, *PPCI_EXPRESS_SRIOV_CAPS
;
7140 typedef union _PCI_EXPRESS_SRIOV_CONTROL
{
7143 USHORT VFMigrationEnable
:1;
7144 USHORT VFMigrationInterruptEnable
:1;
7145 USHORT VFMemorySpaceEnable
:1;
7146 USHORT ARICapableHierarchy
:1;
7147 USHORT Reserved1
:11;
7150 } PCI_EXPRESS_SRIOV_CONTROL
, *PPCI_EXPRESS_SRIOV_CONTROL
;
7152 typedef union _PCI_EXPRESS_SRIOV_STATUS
{
7154 USHORT VFMigrationStatus
:1;
7155 USHORT Reserved1
:15;
7158 } PCI_EXPRESS_SRIOV_STATUS
, *PPCI_EXPRESS_SRIOV_STATUS
;
7160 typedef union _PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY
{
7162 ULONG VFMigrationStateBIR
:3;
7163 ULONG VFMigrationStateOffset
:29;
7166 } PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY
, *PPCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY
;
7168 typedef struct _PCI_EXPRESS_SRIOV_CAPABILITY
{
7169 PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header
;
7170 PCI_EXPRESS_SRIOV_CAPS SRIOVCapabilities
;
7171 PCI_EXPRESS_SRIOV_CONTROL SRIOVControl
;
7172 PCI_EXPRESS_SRIOV_STATUS SRIOVStatus
;
7176 UCHAR FunctionDependencyLink
;
7178 USHORT FirstVFOffset
;
7182 ULONG SupportedPageSizes
;
7183 ULONG SystemPageSize
;
7184 ULONG BaseAddresses
[PCI_TYPE0_ADDRESSES
];
7185 PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY VFMigrationStateArrayOffset
;
7186 } PCI_EXPRESS_SRIOV_CAPABILITY
, *PPCI_EXPRESS_SRIOV_CAPABILITY
;
7188 /* PCI device classes */
7189 #define PCI_CLASS_PRE_20 0x00
7190 #define PCI_CLASS_MASS_STORAGE_CTLR 0x01
7191 #define PCI_CLASS_NETWORK_CTLR 0x02
7192 #define PCI_CLASS_DISPLAY_CTLR 0x03
7193 #define PCI_CLASS_MULTIMEDIA_DEV 0x04
7194 #define PCI_CLASS_MEMORY_CTLR 0x05
7195 #define PCI_CLASS_BRIDGE_DEV 0x06
7196 #define PCI_CLASS_SIMPLE_COMMS_CTLR 0x07
7197 #define PCI_CLASS_BASE_SYSTEM_DEV 0x08
7198 #define PCI_CLASS_INPUT_DEV 0x09
7199 #define PCI_CLASS_DOCKING_STATION 0x0a
7200 #define PCI_CLASS_PROCESSOR 0x0b
7201 #define PCI_CLASS_SERIAL_BUS_CTLR 0x0c
7202 #define PCI_CLASS_WIRELESS_CTLR 0x0d
7203 #define PCI_CLASS_INTELLIGENT_IO_CTLR 0x0e
7204 #define PCI_CLASS_SATELLITE_COMMS_CTLR 0x0f
7205 #define PCI_CLASS_ENCRYPTION_DECRYPTION 0x10
7206 #define PCI_CLASS_DATA_ACQ_SIGNAL_PROC 0x11
7207 #define PCI_CLASS_NOT_DEFINED 0xff
7209 /* PCI device subclasses for class 0 */
7210 #define PCI_SUBCLASS_PRE_20_NON_VGA 0x00
7211 #define PCI_SUBCLASS_PRE_20_VGA 0x01
7213 /* PCI device subclasses for class 1 (mass storage controllers)*/
7214 #define PCI_SUBCLASS_MSC_SCSI_BUS_CTLR 0x00
7215 #define PCI_SUBCLASS_MSC_IDE_CTLR 0x01
7216 #define PCI_SUBCLASS_MSC_FLOPPY_CTLR 0x02
7217 #define PCI_SUBCLASS_MSC_IPI_CTLR 0x03
7218 #define PCI_SUBCLASS_MSC_RAID_CTLR 0x04
7219 #define PCI_SUBCLASS_MSC_OTHER 0x80
7221 /* PCI device subclasses for class 2 (network controllers)*/
7222 #define PCI_SUBCLASS_NET_ETHERNET_CTLR 0x00
7223 #define PCI_SUBCLASS_NET_TOKEN_RING_CTLR 0x01
7224 #define PCI_SUBCLASS_NET_FDDI_CTLR 0x02
7225 #define PCI_SUBCLASS_NET_ATM_CTLR 0x03
7226 #define PCI_SUBCLASS_NET_ISDN_CTLR 0x04
7227 #define PCI_SUBCLASS_NET_OTHER 0x80
7229 /* PCI device subclasses for class 3 (display controllers)*/
7230 #define PCI_SUBCLASS_VID_VGA_CTLR 0x00
7231 #define PCI_SUBCLASS_VID_XGA_CTLR 0x01
7232 #define PCI_SUBCLASS_VID_3D_CTLR 0x02
7233 #define PCI_SUBCLASS_VID_OTHER 0x80
7235 /* PCI device subclasses for class 4 (multimedia device)*/
7236 #define PCI_SUBCLASS_MM_VIDEO_DEV 0x00
7237 #define PCI_SUBCLASS_MM_AUDIO_DEV 0x01
7238 #define PCI_SUBCLASS_MM_TELEPHONY_DEV 0x02
7239 #define PCI_SUBCLASS_MM_OTHER 0x80
7241 /* PCI device subclasses for class 5 (memory controller)*/
7242 #define PCI_SUBCLASS_MEM_RAM 0x00
7243 #define PCI_SUBCLASS_MEM_FLASH 0x01
7244 #define PCI_SUBCLASS_MEM_OTHER 0x80
7246 /* PCI device subclasses for class 6 (bridge device)*/
7247 #define PCI_SUBCLASS_BR_HOST 0x00
7248 #define PCI_SUBCLASS_BR_ISA 0x01
7249 #define PCI_SUBCLASS_BR_EISA 0x02
7250 #define PCI_SUBCLASS_BR_MCA 0x03
7251 #define PCI_SUBCLASS_BR_PCI_TO_PCI 0x04
7252 #define PCI_SUBCLASS_BR_PCMCIA 0x05
7253 #define PCI_SUBCLASS_BR_NUBUS 0x06
7254 #define PCI_SUBCLASS_BR_CARDBUS 0x07
7255 #define PCI_SUBCLASS_BR_RACEWAY 0x08
7256 #define PCI_SUBCLASS_BR_OTHER 0x80
7258 #define PCI_SUBCLASS_COM_SERIAL 0x00
7259 #define PCI_SUBCLASS_COM_PARALLEL 0x01
7260 #define PCI_SUBCLASS_COM_MULTIPORT 0x02
7261 #define PCI_SUBCLASS_COM_MODEM 0x03
7262 #define PCI_SUBCLASS_COM_OTHER 0x80
7264 #define PCI_SUBCLASS_SYS_INTERRUPT_CTLR 0x00
7265 #define PCI_SUBCLASS_SYS_DMA_CTLR 0x01
7266 #define PCI_SUBCLASS_SYS_SYSTEM_TIMER 0x02
7267 #define PCI_SUBCLASS_SYS_REAL_TIME_CLOCK 0x03
7268 #define PCI_SUBCLASS_SYS_GEN_HOTPLUG_CTLR 0x04
7269 #define PCI_SUBCLASS_SYS_SDIO_CTRL 0x05
7270 #define PCI_SUBCLASS_SYS_OTHER 0x80
7272 #define PCI_SUBCLASS_INP_KEYBOARD 0x00
7273 #define PCI_SUBCLASS_INP_DIGITIZER 0x01
7274 #define PCI_SUBCLASS_INP_MOUSE 0x02
7275 #define PCI_SUBCLASS_INP_SCANNER 0x03
7276 #define PCI_SUBCLASS_INP_GAMEPORT 0x04
7277 #define PCI_SUBCLASS_INP_OTHER 0x80
7279 #define PCI_SUBCLASS_DOC_GENERIC 0x00
7280 #define PCI_SUBCLASS_DOC_OTHER 0x80
7282 #define PCI_SUBCLASS_PROC_386 0x00
7283 #define PCI_SUBCLASS_PROC_486 0x01
7284 #define PCI_SUBCLASS_PROC_PENTIUM 0x02
7285 #define PCI_SUBCLASS_PROC_ALPHA 0x10
7286 #define PCI_SUBCLASS_PROC_POWERPC 0x20
7287 #define PCI_SUBCLASS_PROC_COPROCESSOR 0x40
7289 /* PCI device subclasses for class C (serial bus controller)*/
7290 #define PCI_SUBCLASS_SB_IEEE1394 0x00
7291 #define PCI_SUBCLASS_SB_ACCESS 0x01
7292 #define PCI_SUBCLASS_SB_SSA 0x02
7293 #define PCI_SUBCLASS_SB_USB 0x03
7294 #define PCI_SUBCLASS_SB_FIBRE_CHANNEL 0x04
7295 #define PCI_SUBCLASS_SB_SMBUS 0x05
7297 #define PCI_SUBCLASS_WIRELESS_IRDA 0x00
7298 #define PCI_SUBCLASS_WIRELESS_CON_IR 0x01
7299 #define PCI_SUBCLASS_WIRELESS_RF 0x10
7300 #define PCI_SUBCLASS_WIRELESS_OTHER 0x80
7302 #define PCI_SUBCLASS_INTIO_I2O 0x00
7304 #define PCI_SUBCLASS_SAT_TV 0x01
7305 #define PCI_SUBCLASS_SAT_AUDIO 0x02
7306 #define PCI_SUBCLASS_SAT_VOICE 0x03
7307 #define PCI_SUBCLASS_SAT_DATA 0x04
7309 #define PCI_SUBCLASS_CRYPTO_NET_COMP 0x00
7310 #define PCI_SUBCLASS_CRYPTO_ENTERTAINMENT 0x10
7311 #define PCI_SUBCLASS_CRYPTO_OTHER 0x80
7313 #define PCI_SUBCLASS_DASP_DPIO 0x00
7314 #define PCI_SUBCLASS_DASP_OTHER 0x80
7316 #define PCI_ADDRESS_IO_SPACE 0x00000001
7317 #define PCI_ADDRESS_MEMORY_TYPE_MASK 0x00000006
7318 #define PCI_ADDRESS_MEMORY_PREFETCHABLE 0x00000008
7319 #define PCI_ADDRESS_IO_ADDRESS_MASK 0xfffffffc
7320 #define PCI_ADDRESS_MEMORY_ADDRESS_MASK 0xfffffff0
7321 #define PCI_ADDRESS_ROM_ADDRESS_MASK 0xfffff800
7323 #define PCI_TYPE_32BIT 0
7324 #define PCI_TYPE_20BIT 2
7325 #define PCI_TYPE_64BIT 4
7327 #define PCI_ROMADDRESS_ENABLED 0x00000001
7329 #endif /* _PCI_X_ */
7331 #define PCI_EXPRESS_LINK_QUIESCENT_INTERFACE_VERSION 1
7334 (NTAPI PCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE
)(
7335 IN OUT PVOID Context
);
7336 typedef PCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE
*PPCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE
;
7339 (NTAPI PCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE
)(
7340 IN OUT PVOID Context
);
7341 typedef PCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE
*PPCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE
;
7343 typedef struct _PCI_EXPRESS_LINK_QUIESCENT_INTERFACE
{
7347 PINTERFACE_REFERENCE InterfaceReference
;
7348 PINTERFACE_DEREFERENCE InterfaceDereference
;
7349 PPCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE PciExpressEnterLinkQuiescentMode
;
7350 PPCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE PciExpressExitLinkQuiescentMode
;
7351 } PCI_EXPRESS_LINK_QUIESCENT_INTERFACE
, *PPCI_EXPRESS_LINK_QUIESCENT_INTERFACE
;
7353 #define PCI_EXPRESS_ROOT_PORT_INTERFACE_VERSION 1
7356 (NTAPI
*PPCI_EXPRESS_ROOT_PORT_READ_CONFIG_SPACE
)(
7363 (NTAPI
*PPCI_EXPRESS_ROOT_PORT_WRITE_CONFIG_SPACE
)(
7369 typedef struct _PCI_EXPRESS_ROOT_PORT_INTERFACE
{
7373 PINTERFACE_REFERENCE InterfaceReference
;
7374 PINTERFACE_DEREFERENCE InterfaceDereference
;
7375 PPCI_EXPRESS_ROOT_PORT_READ_CONFIG_SPACE ReadConfigSpace
;
7376 PPCI_EXPRESS_ROOT_PORT_WRITE_CONFIG_SPACE WriteConfigSpace
;
7377 } PCI_EXPRESS_ROOT_PORT_INTERFACE
, *PPCI_EXPRESS_ROOT_PORT_INTERFACE
;
7379 #define PCI_MSIX_TABLE_CONFIG_INTERFACE_VERSION 1
7382 (NTAPI PCI_MSIX_SET_ENTRY
)(
7384 IN ULONG TableEntry
,
7385 IN ULONG MessageNumber
);
7386 typedef PCI_MSIX_SET_ENTRY
*PPCI_MSIX_SET_ENTRY
;
7389 (NTAPI PCI_MSIX_MASKUNMASK_ENTRY
)(
7391 IN ULONG TableEntry
);
7392 typedef PCI_MSIX_MASKUNMASK_ENTRY
*PPCI_MSIX_MASKUNMASK_ENTRY
;
7395 (NTAPI PCI_MSIX_GET_ENTRY
)(
7397 IN ULONG TableEntry
,
7398 OUT PULONG MessageNumber
,
7399 OUT PBOOLEAN Masked
);
7400 typedef PCI_MSIX_GET_ENTRY
*PPCI_MSIX_GET_ENTRY
;
7403 (NTAPI PCI_MSIX_GET_TABLE_SIZE
)(
7405 OUT PULONG TableSize
);
7406 typedef PCI_MSIX_GET_TABLE_SIZE
*PPCI_MSIX_GET_TABLE_SIZE
;
7408 typedef struct _PCI_MSIX_TABLE_CONFIG_INTERFACE
{
7412 PINTERFACE_REFERENCE InterfaceReference
;
7413 PINTERFACE_DEREFERENCE InterfaceDereference
;
7414 PPCI_MSIX_SET_ENTRY SetTableEntry
;
7415 PPCI_MSIX_MASKUNMASK_ENTRY MaskTableEntry
;
7416 PPCI_MSIX_MASKUNMASK_ENTRY UnmaskTableEntry
;
7417 PPCI_MSIX_GET_ENTRY GetTableEntry
;
7418 PPCI_MSIX_GET_TABLE_SIZE GetTableSize
;
7419 } PCI_MSIX_TABLE_CONFIG_INTERFACE
, *PPCI_MSIX_TABLE_CONFIG_INTERFACE
;
7421 #define PCI_MSIX_TABLE_CONFIG_MINIMUM_SIZE \
7422 RTL_SIZEOF_THROUGH_FIELD(PCI_MSIX_TABLE_CONFIG_INTERFACE, UnmaskTableEntry)
7424 /******************************************************************************
7425 * Object Manager Types *
7426 ******************************************************************************/
7428 #define MAXIMUM_FILENAME_LENGTH 256
7429 #define OBJ_NAME_PATH_SEPARATOR ((WCHAR)L'\\')
7431 #define OBJECT_TYPE_CREATE 0x0001
7432 #define OBJECT_TYPE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
7434 #define DIRECTORY_QUERY 0x0001
7435 #define DIRECTORY_TRAVERSE 0x0002
7436 #define DIRECTORY_CREATE_OBJECT 0x0004
7437 #define DIRECTORY_CREATE_SUBDIRECTORY 0x0008
7438 #define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF)
7440 #define SYMBOLIC_LINK_QUERY 0x0001
7441 #define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
7443 #define DUPLICATE_CLOSE_SOURCE 0x00000001
7444 #define DUPLICATE_SAME_ACCESS 0x00000002
7445 #define DUPLICATE_SAME_ATTRIBUTES 0x00000004
7447 #define OB_FLT_REGISTRATION_VERSION_0100 0x0100
7448 #define OB_FLT_REGISTRATION_VERSION OB_FLT_REGISTRATION_VERSION_0100
7450 typedef ULONG OB_OPERATION
;
7452 #define OB_OPERATION_HANDLE_CREATE 0x00000001
7453 #define OB_OPERATION_HANDLE_DUPLICATE 0x00000002
7455 typedef struct _OB_PRE_CREATE_HANDLE_INFORMATION
{
7456 IN OUT ACCESS_MASK DesiredAccess
;
7457 IN ACCESS_MASK OriginalDesiredAccess
;
7458 } OB_PRE_CREATE_HANDLE_INFORMATION
, *POB_PRE_CREATE_HANDLE_INFORMATION
;
7460 typedef struct _OB_PRE_DUPLICATE_HANDLE_INFORMATION
{
7461 IN OUT ACCESS_MASK DesiredAccess
;
7462 IN ACCESS_MASK OriginalDesiredAccess
;
7463 IN PVOID SourceProcess
;
7464 IN PVOID TargetProcess
;
7465 } OB_PRE_DUPLICATE_HANDLE_INFORMATION
, *POB_PRE_DUPLICATE_HANDLE_INFORMATION
;
7467 typedef union _OB_PRE_OPERATION_PARAMETERS
{
7468 IN OUT OB_PRE_CREATE_HANDLE_INFORMATION CreateHandleInformation
;
7469 IN OUT OB_PRE_DUPLICATE_HANDLE_INFORMATION DuplicateHandleInformation
;
7470 } OB_PRE_OPERATION_PARAMETERS
, *POB_PRE_OPERATION_PARAMETERS
;
7472 typedef struct _OB_PRE_OPERATION_INFORMATION
{
7473 IN OB_OPERATION Operation
;
7477 IN ULONG KernelHandle
:1;
7478 IN ULONG Reserved
:31;
7482 IN POBJECT_TYPE ObjectType
;
7483 OUT PVOID CallContext
;
7484 IN POB_PRE_OPERATION_PARAMETERS Parameters
;
7485 } OB_PRE_OPERATION_INFORMATION
, *POB_PRE_OPERATION_INFORMATION
;
7487 typedef struct _OB_POST_CREATE_HANDLE_INFORMATION
{
7488 IN ACCESS_MASK GrantedAccess
;
7489 } OB_POST_CREATE_HANDLE_INFORMATION
, *POB_POST_CREATE_HANDLE_INFORMATION
;
7491 typedef struct _OB_POST_DUPLICATE_HANDLE_INFORMATION
{
7492 IN ACCESS_MASK GrantedAccess
;
7493 } OB_POST_DUPLICATE_HANDLE_INFORMATION
, *POB_POST_DUPLICATE_HANDLE_INFORMATION
;
7495 typedef union _OB_POST_OPERATION_PARAMETERS
{
7496 IN OB_POST_CREATE_HANDLE_INFORMATION CreateHandleInformation
;
7497 IN OB_POST_DUPLICATE_HANDLE_INFORMATION DuplicateHandleInformation
;
7498 } OB_POST_OPERATION_PARAMETERS
, *POB_POST_OPERATION_PARAMETERS
;
7500 typedef struct _OB_POST_OPERATION_INFORMATION
{
7501 IN OB_OPERATION Operation
;
7505 IN ULONG KernelHandle
:1;
7506 IN ULONG Reserved
:31;
7510 IN POBJECT_TYPE ObjectType
;
7511 IN PVOID CallContext
;
7512 IN NTSTATUS ReturnStatus
;
7513 IN POB_POST_OPERATION_PARAMETERS Parameters
;
7514 } OB_POST_OPERATION_INFORMATION
,*POB_POST_OPERATION_INFORMATION
;
7516 typedef enum _OB_PREOP_CALLBACK_STATUS
{
7518 } OB_PREOP_CALLBACK_STATUS
, *POB_PREOP_CALLBACK_STATUS
;
7520 typedef OB_PREOP_CALLBACK_STATUS
7521 (NTAPI
*POB_PRE_OPERATION_CALLBACK
)(
7522 IN PVOID RegistrationContext
,
7523 IN OUT POB_PRE_OPERATION_INFORMATION OperationInformation
);
7526 (NTAPI
*POB_POST_OPERATION_CALLBACK
)(
7527 IN PVOID RegistrationContext
,
7528 IN POB_POST_OPERATION_INFORMATION OperationInformation
);
7530 typedef struct _OB_OPERATION_REGISTRATION
{
7531 IN POBJECT_TYPE
*ObjectType
;
7532 IN OB_OPERATION Operations
;
7533 IN POB_PRE_OPERATION_CALLBACK PreOperation
;
7534 IN POB_POST_OPERATION_CALLBACK PostOperation
;
7535 } OB_OPERATION_REGISTRATION
, *POB_OPERATION_REGISTRATION
;
7537 typedef struct _OB_CALLBACK_REGISTRATION
{
7539 IN USHORT OperationRegistrationCount
;
7540 IN UNICODE_STRING Altitude
;
7541 IN PVOID RegistrationContext
;
7542 IN OB_OPERATION_REGISTRATION
*OperationRegistration
;
7543 } OB_CALLBACK_REGISTRATION
, *POB_CALLBACK_REGISTRATION
;
7545 typedef struct _OBJECT_NAME_INFORMATION
{
7546 UNICODE_STRING Name
;
7547 } OBJECT_NAME_INFORMATION
, *POBJECT_NAME_INFORMATION
;
7549 /* Exported object types */
7550 extern POBJECT_TYPE NTSYSAPI CmKeyObjectType
;
7551 extern POBJECT_TYPE NTSYSAPI ExEventObjectType
;
7552 extern POBJECT_TYPE NTSYSAPI ExSemaphoreObjectType
;
7553 extern POBJECT_TYPE NTSYSAPI IoFileObjectType
;
7554 extern POBJECT_TYPE NTSYSAPI PsThreadType
;
7555 extern POBJECT_TYPE NTSYSAPI SeTokenObjectType
;
7556 extern POBJECT_TYPE NTSYSAPI PsProcessType
;
7559 /******************************************************************************
7560 * Process Manager Types *
7561 ******************************************************************************/
7563 #define QUOTA_LIMITS_HARDWS_MIN_ENABLE 0x00000001
7564 #define QUOTA_LIMITS_HARDWS_MIN_DISABLE 0x00000002
7565 #define QUOTA_LIMITS_HARDWS_MAX_ENABLE 0x00000004
7566 #define QUOTA_LIMITS_HARDWS_MAX_DISABLE 0x00000008
7567 #define QUOTA_LIMITS_USE_DEFAULT_LIMITS 0x00000010
7569 /* Thread Access Rights */
7570 #define THREAD_TERMINATE 0x0001
7571 #define THREAD_SUSPEND_RESUME 0x0002
7572 #define THREAD_ALERT 0x0004
7573 #define THREAD_GET_CONTEXT 0x0008
7574 #define THREAD_SET_CONTEXT 0x0010
7575 #define THREAD_SET_INFORMATION 0x0020
7576 #define THREAD_SET_LIMITED_INFORMATION 0x0400
7577 #define THREAD_QUERY_LIMITED_INFORMATION 0x0800
7579 #define PROCESS_DUP_HANDLE (0x0040)
7581 #if (NTDDI_VERSION >= NTDDI_VISTA)
7582 #define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFFF)
7584 #define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFF)
7587 #if (NTDDI_VERSION >= NTDDI_VISTA)
7588 #define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFFF)
7590 #define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3FF)
7593 #define LOW_PRIORITY 0
7594 #define LOW_REALTIME_PRIORITY 16
7595 #define HIGH_PRIORITY 31
7596 #define MAXIMUM_PRIORITY 32
7599 /******************************************************************************
7600 * WMI Library Support Types *
7601 ******************************************************************************/
7604 #include <evntrace.h>
7608 #ifndef _TRACEHANDLE_DEFINED
7609 #define _TRACEHANDLE_DEFINED
7610 typedef ULONG64 TRACEHANDLE
, *PTRACEHANDLE
;
7613 #ifndef TRACE_INFORMATION_CLASS_DEFINE
7615 typedef struct _ETW_TRACE_SESSION_SETTINGS
{
7618 ULONG MinimumBuffers
;
7619 ULONG MaximumBuffers
;
7622 ULONG FlushThreshold
;
7624 } ETW_TRACE_SESSION_SETTINGS
, *PETW_TRACE_SESSION_SETTINGS
;
7626 typedef enum _TRACE_INFORMATION_CLASS
{
7629 TraceEnableFlagsClass
,
7630 TraceEnableLevelClass
,
7631 GlobalLoggerHandleClass
,
7632 EventLoggerHandleClass
,
7633 AllLoggerHandlesClass
,
7634 TraceHandleByNameClass
,
7635 LoggerEventsLostClass
,
7636 TraceSessionSettingsClass
,
7637 LoggerEventsLoggedClass
,
7638 MaxTraceInformationClass
7639 } TRACE_INFORMATION_CLASS
;
7641 #endif /* TRACE_INFORMATION_CLASS_DEFINE */
7647 #include <evntprov.h>
7650 (NTAPI
*PETWENABLECALLBACK
)(
7651 IN LPCGUID SourceId
,
7652 IN ULONG ControlCode
,
7654 IN ULONGLONG MatchAnyKeyword
,
7655 IN ULONGLONG MatchAllKeyword
,
7656 IN PEVENT_FILTER_DESCRIPTOR FilterData OPTIONAL
,
7657 IN OUT PVOID CallbackContext OPTIONAL
);
7659 #define EVENT_WRITE_FLAG_NO_FAULTING 0x00000001
7662 #if defined(_M_IX86)
7663 /** Kernel definitions for x86 **/
7665 /* Interrupt request levels */
7666 #define PASSIVE_LEVEL 0
7669 #define DISPATCH_LEVEL 2
7670 #define CMCI_LEVEL 5
7671 #define PROFILE_LEVEL 27
7672 #define CLOCK1_LEVEL 28
7673 #define CLOCK2_LEVEL 28
7674 #define IPI_LEVEL 29
7675 #define POWER_LEVEL 30
7676 #define HIGH_LEVEL 31
7677 #define CLOCK_LEVEL CLOCK2_LEVEL
7679 #define KIP0PCRADDRESS 0xffdff000
7680 #define KI_USER_SHARED_DATA 0xffdf0000
7681 #define SharedUserData ((KUSER_SHARED_DATA * CONST)KI_USER_SHARED_DATA)
7683 #define PAGE_SIZE 0x1000
7684 #define PAGE_SHIFT 12L
7685 #define KeGetDcacheFillSize() 1L
7687 #define EFLAG_SIGN 0x8000
7688 #define EFLAG_ZERO 0x4000
7689 #define EFLAG_SELECT (EFLAG_SIGN | EFLAG_ZERO)
7691 #define RESULT_NEGATIVE ((EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
7692 #define RESULT_ZERO ((~EFLAG_SIGN & EFLAG_ZERO) & EFLAG_SELECT)
7693 #define RESULT_POSITIVE ((~EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
7696 typedef struct _KFLOATING_SAVE
{
7700 ULONG ErrorSelector
;
7705 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
7707 extern NTKERNELAPI
volatile KSYSTEM_TIME KeTickCount
;
7709 #define YieldProcessor _mm_pause
7713 KeMemoryBarrier(VOID
)
7715 volatile LONG Barrier
;
7716 #if defined(__GNUC__)
7717 __asm__
__volatile__ ("xchg %%eax, %0" : : "m" (Barrier
) : "%eax");
7718 #elif defined(_MSC_VER)
7719 __asm xchg
[Barrier
], eax
7726 KeGetCurrentIrql(VOID
);
7733 #define KeLowerIrql(a) KfLowerIrql(a)
7740 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
7745 KeRaiseIrqlToDpcLevel(VOID
);
7750 KeRaiseIrqlToSynchLevel(VOID
);
7756 IN OUT PKSPIN_LOCK SpinLock
);
7757 #define KeAcquireSpinLock(a,b) *(b) = KfAcquireSpinLock(a)
7763 IN OUT PKSPIN_LOCK SpinLock
,
7765 #define KeReleaseSpinLock(a,b) KfReleaseSpinLock(a,b)
7770 KefAcquireSpinLockAtDpcLevel(
7771 IN OUT PKSPIN_LOCK SpinLock
);
7772 #define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock)
7777 KefReleaseSpinLockFromDpcLevel(
7778 IN OUT PKSPIN_LOCK SpinLock
);
7779 #define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock)
7784 KeGetCurrentThread(VOID
);
7789 KeSaveFloatingPointState(
7790 OUT PKFLOATING_SAVE FloatSave
);
7795 KeRestoreFloatingPointState(
7796 IN PKFLOATING_SAVE FloatSave
);
7801 * IN BOOLEAN ReadOperation,
7802 * IN BOOLEAN DmaOperation)
7804 #define KeFlushIoBuffers(_Mdl, _ReadOperation, _DmaOperation)
7806 /* x86 and x64 performs a 0x2C interrupt */
7807 #define DbgRaiseAssertionFailure __int2c
7812 OUT PLARGE_INTEGER CurrentCount
)
7815 CurrentCount
->HighPart
= KeTickCount
.High1Time
;
7816 CurrentCount
->LowPart
= KeTickCount
.LowPart
;
7817 if (CurrentCount
->HighPart
== KeTickCount
.High2Time
) break;
7821 #define KeQueryTickCount(CurrentCount) _KeQueryTickCount(CurrentCount)
7827 #elif defined(_M_AMD64)
7828 /** Kernel definitions for AMD64 **/
7830 /* Interrupt request levels */
7831 #define PASSIVE_LEVEL 0
7834 #define DISPATCH_LEVEL 2
7835 #define CMCI_LEVEL 5
7836 #define CLOCK_LEVEL 13
7837 #define IPI_LEVEL 14
7838 #define DRS_LEVEL 14
7839 #define POWER_LEVEL 14
7840 #define PROFILE_LEVEL 15
7841 #define HIGH_LEVEL 15
7843 #define KI_USER_SHARED_DATA 0xFFFFF78000000000ULL
7844 #define SharedUserData ((PKUSER_SHARED_DATA const)KI_USER_SHARED_DATA)
7845 #define SharedInterruptTime (KI_USER_SHARED_DATA + 0x8)
7846 #define SharedSystemTime (KI_USER_SHARED_DATA + 0x14)
7847 #define SharedTickCount (KI_USER_SHARED_DATA + 0x320)
7849 #define PAGE_SIZE 0x1000
7850 #define PAGE_SHIFT 12L
7852 #define EFLAG_SIGN 0x8000
7853 #define EFLAG_ZERO 0x4000
7854 #define EFLAG_SELECT (EFLAG_SIGN | EFLAG_ZERO)
7856 #define RESULT_NEGATIVE ((EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
7857 #define RESULT_ZERO ((~EFLAG_SIGN & EFLAG_ZERO) & EFLAG_SELECT)
7858 #define RESULT_POSITIVE ((~EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
7861 typedef struct _KFLOATING_SAVE
{
7863 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
7865 typedef XSAVE_FORMAT XMM_SAVE_AREA32
, *PXMM_SAVE_AREA32
;
7867 #define KeQueryInterruptTime() \
7868 (*(volatile ULONG64*)SharedInterruptTime)
7870 #define KeQuerySystemTime(CurrentCount) \
7871 *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedSystemTime
7873 #define KeQueryTickCount(CurrentCount) \
7874 *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedTickCount
7876 #define KeGetDcacheFillSize() 1L
7878 #define YieldProcessor _mm_pause
7882 KeGetCurrentIrql(VOID
)
7884 return (KIRQL
)__readcr8();
7889 KeLowerIrql(IN KIRQL NewIrql
)
7891 //ASSERT(KeGetCurrentIrql() >= NewIrql);
7892 __writecr8(NewIrql
);
7897 KfRaiseIrql(IN KIRQL NewIrql
)
7901 OldIrql
= __readcr8();
7902 //ASSERT(OldIrql <= NewIrql);
7903 __writecr8(NewIrql
);
7906 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
7910 KeRaiseIrqlToDpcLevel(VOID
)
7912 return KfRaiseIrql(DISPATCH_LEVEL
);
7917 KeRaiseIrqlToSynchLevel(VOID
)
7919 return KfRaiseIrql(12); // SYNCH_LEVEL = IPI_LEVEL - 2
7924 KeGetCurrentThread(VOID
)
7926 return (struct _KTHREAD
*)__readgsqword(0x188);
7932 * IN BOOLEAN ReadOperation,
7933 * IN BOOLEAN DmaOperation)
7935 #define KeFlushIoBuffers(_Mdl, _ReadOperation, _DmaOperation)
7937 /* x86 and x64 performs a 0x2C interrupt */
7938 #define DbgRaiseAssertionFailure __int2c
7940 #elif defined(_M_IA64)
7941 /** Kernel definitions for IA64 **/
7943 /* Interrupt request levels */
7944 #define PASSIVE_LEVEL 0
7947 #define DISPATCH_LEVEL 2
7949 #define DEVICE_LEVEL_BASE 4
7951 #define IPI_LEVEL 14
7952 #define DRS_LEVEL 14
7953 #define CLOCK_LEVEL 13
7954 #define POWER_LEVEL 15
7955 #define PROFILE_LEVEL 15
7956 #define HIGH_LEVEL 15
7958 #define KI_USER_SHARED_DATA ((ULONG_PTR)(KADDRESS_BASE + 0xFFFE0000))
7959 extern volatile LARGE_INTEGER KeTickCount
;
7961 #define PAUSE_PROCESSOR __yield();
7965 KeFlushWriteBuffer(VOID
)
7974 KeGetCurrentThread(VOID
);
7977 #elif defined(_M_PPC)
7979 /* Interrupt request levels */
7980 #define PASSIVE_LEVEL 0
7983 #define DISPATCH_LEVEL 2
7984 #define PROFILE_LEVEL 27
7985 #define CLOCK1_LEVEL 28
7986 #define CLOCK2_LEVEL 28
7987 #define IPI_LEVEL 29
7988 #define POWER_LEVEL 30
7989 #define HIGH_LEVEL 31
7992 // Used to contain PFNs and PFN counts
7994 typedef ULONG PFN_COUNT
;
7995 typedef ULONG PFN_NUMBER
, *PPFN_NUMBER
;
7996 typedef LONG SPFN_NUMBER
, *PSPFN_NUMBER
;
7999 typedef struct _KFLOATING_SAVE
{
8001 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
8003 typedef struct _KPCR_TIB
{
8004 PVOID ExceptionList
; /* 00 */
8005 PVOID StackBase
; /* 04 */
8006 PVOID StackLimit
; /* 08 */
8007 PVOID SubSystemTib
; /* 0C */
8008 _ANONYMOUS_UNION
union {
8009 PVOID FiberData
; /* 10 */
8010 ULONG Version
; /* 10 */
8012 PVOID ArbitraryUserPointer
; /* 14 */
8013 struct _KPCR_TIB
*Self
; /* 18 */
8014 } KPCR_TIB
, *PKPCR_TIB
; /* 1C */
8016 #define PCR_MINOR_VERSION 1
8017 #define PCR_MAJOR_VERSION 1
8019 typedef struct _KPCR
{
8020 KPCR_TIB Tib
; /* 00 */
8021 struct _KPCR
*Self
; /* 1C */
8022 struct _KPRCB
*Prcb
; /* 20 */
8023 KIRQL Irql
; /* 24 */
8025 ULONG IrrActive
; /* 2C */
8027 PVOID KdVersionBlock
; /* 34 */
8028 PUSHORT IDT
; /* 38 */
8029 PUSHORT GDT
; /* 3C */
8030 struct _KTSS
*TSS
; /* 40 */
8031 USHORT MajorVersion
; /* 44 */
8032 USHORT MinorVersion
; /* 46 */
8033 KAFFINITY SetMember
; /* 48 */
8034 ULONG StallScaleFactor
; /* 4C */
8035 UCHAR SpareUnused
; /* 50 */
8036 UCHAR Number
; /* 51 */
8037 } KPCR
, *PKPCR
; /* 54 */
8039 #define KeGetPcr() PCR
8041 #define YieldProcessor() __asm__ __volatile__("nop");
8046 KeGetCurrentProcessorNumber(VOID
)
8049 __asm__
__volatile__ (
8052 : "i" (FIELD_OFFSET(KPCR
, Number
))
8062 #define KeLowerIrql(a) KfLowerIrql(a)
8069 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
8074 KeRaiseIrqlToDpcLevel(VOID
);
8079 KeRaiseIrqlToSynchLevel(VOID
);
8083 #elif defined(_M_MIPS)
8084 #error MIPS Headers are totally incorrect
8087 // Used to contain PFNs and PFN counts
8089 typedef ULONG PFN_COUNT
;
8090 typedef ULONG PFN_NUMBER
, *PPFN_NUMBER
;
8091 typedef LONG SPFN_NUMBER
, *PSPFN_NUMBER
;
8093 #define PASSIVE_LEVEL 0
8095 #define DISPATCH_LEVEL 2
8096 #define PROFILE_LEVEL 27
8097 #define IPI_LEVEL 29
8098 #define HIGH_LEVEL 31
8100 typedef struct _KPCR
{
8101 struct _KPRCB
*Prcb
; /* 20 */
8102 KIRQL Irql
; /* 24 */
8107 #define KeGetPcr() PCR
8109 typedef struct _KFLOATING_SAVE
{
8110 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
8115 KeGetCurrentProcessorNumber(VOID
)
8120 #define YieldProcessor() __asm__ __volatile__("nop");
8122 #define KeLowerIrql(a) KfLowerIrql(a)
8123 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
8140 KeRaiseIrqlToDpcLevel(VOID
);
8145 KeRaiseIrqlToSynchLevel(VOID
);
8148 #elif defined(_M_ARM)
8151 #error Unknown Architecture
8154 /******************************************************************************
8155 * Runtime Library Functions *
8156 ******************************************************************************/
8159 #if !defined(MIDL_PASS) && !defined(SORTPP_PASS)
8161 #define RTL_STATIC_LIST_HEAD(x) LIST_ENTRY x = { &x, &x }
8166 OUT PLIST_ENTRY ListHead
)
8168 ListHead
->Flink
= ListHead
->Blink
= ListHead
;
8174 IN CONST LIST_ENTRY
* ListHead
)
8176 return (BOOLEAN
)(ListHead
->Flink
== ListHead
);
8182 IN PLIST_ENTRY Entry
)
8184 PLIST_ENTRY OldFlink
;
8185 PLIST_ENTRY OldBlink
;
8187 OldFlink
= Entry
->Flink
;
8188 OldBlink
= Entry
->Blink
;
8189 OldFlink
->Blink
= OldBlink
;
8190 OldBlink
->Flink
= OldFlink
;
8191 return (BOOLEAN
)(OldFlink
== OldBlink
);
8197 IN OUT PLIST_ENTRY ListHead
)
8202 Entry
= ListHead
->Flink
;
8203 Flink
= Entry
->Flink
;
8204 ListHead
->Flink
= Flink
;
8205 Flink
->Blink
= ListHead
;
8212 IN OUT PLIST_ENTRY ListHead
)
8217 Entry
= ListHead
->Blink
;
8218 Blink
= Entry
->Blink
;
8219 ListHead
->Blink
= Blink
;
8220 Blink
->Flink
= ListHead
;
8227 IN OUT PLIST_ENTRY ListHead
,
8228 IN OUT PLIST_ENTRY Entry
)
8230 PLIST_ENTRY OldBlink
;
8231 OldBlink
= ListHead
->Blink
;
8232 Entry
->Flink
= ListHead
;
8233 Entry
->Blink
= OldBlink
;
8234 OldBlink
->Flink
= Entry
;
8235 ListHead
->Blink
= Entry
;
8241 IN OUT PLIST_ENTRY ListHead
,
8242 IN OUT PLIST_ENTRY Entry
)
8244 PLIST_ENTRY OldFlink
;
8245 OldFlink
= ListHead
->Flink
;
8246 Entry
->Flink
= OldFlink
;
8247 Entry
->Blink
= ListHead
;
8248 OldFlink
->Blink
= Entry
;
8249 ListHead
->Flink
= Entry
;
8255 IN OUT PLIST_ENTRY ListHead
,
8256 IN OUT PLIST_ENTRY ListToAppend
)
8258 PLIST_ENTRY ListEnd
= ListHead
->Blink
;
8260 ListHead
->Blink
->Flink
= ListToAppend
;
8261 ListHead
->Blink
= ListToAppend
->Blink
;
8262 ListToAppend
->Blink
->Flink
= ListHead
;
8263 ListToAppend
->Blink
= ListEnd
;
8269 IN OUT PSINGLE_LIST_ENTRY ListHead
)
8271 PSINGLE_LIST_ENTRY FirstEntry
;
8272 FirstEntry
= ListHead
->Next
;
8273 if (FirstEntry
!= NULL
) {
8274 ListHead
->Next
= FirstEntry
->Next
;
8282 IN OUT PSINGLE_LIST_ENTRY ListHead
,
8283 IN OUT PSINGLE_LIST_ENTRY Entry
)
8285 Entry
->Next
= ListHead
->Next
;
8286 ListHead
->Next
= Entry
;
8289 #endif /* !defined(MIDL_PASS) && !defined(SORTPP_PASS) */
8295 IN PVOID FailedAssertion
,
8297 IN ULONG LineNumber
,
8302 * IN VOID UNALIGNED *Destination,
8303 * IN CONST VOID UNALIGNED *Source,
8306 #define RtlCopyMemory(Destination, Source, Length) \
8307 memcpy(Destination, Source, Length)
8309 #define RtlCopyBytes RtlCopyMemory
8311 #if defined(_M_AMD64)
8315 RtlCopyMemoryNonTemporal(
8316 VOID UNALIGNED
*Destination
,
8317 CONST VOID UNALIGNED
*Source
,
8320 #define RtlCopyMemoryNonTemporal RtlCopyMemory
8328 #define RtlEqualLuid(Luid1, Luid2) \
8329 (((Luid1)->LowPart == (Luid2)->LowPart) && ((Luid1)->HighPart == (Luid2)->HighPart))
8333 * IN VOID UNALIGNED *Destination,
8334 * IN CONST VOID UNALIGNED *Source,
8337 #define RtlEqualMemory(Destination, Source, Length) \
8338 (!memcmp(Destination, Source, Length))
8342 * IN VOID UNALIGNED *Destination,
8346 #define RtlFillMemory(Destination, Length, Fill) \
8347 memset(Destination, Fill, Length)
8349 #define RtlFillBytes RtlFillMemory
8354 RtlFreeUnicodeString(
8355 IN OUT PUNICODE_STRING UnicodeString
);
8361 IN PUNICODE_STRING GuidString
,
8367 RtlInitUnicodeString(
8368 IN OUT PUNICODE_STRING DestinationString
,
8369 IN PCWSTR SourceString OPTIONAL
);
8373 * IN VOID UNALIGNED *Destination,
8374 * IN CONST VOID UNALIGNED *Source,
8377 #define RtlMoveMemory(Destination, Source, Length) \
8378 memmove(Destination, Source, Length)
8385 OUT PUNICODE_STRING GuidString
);
8389 * IN VOID UNALIGNED *Destination,
8392 #define RtlZeroMemory(Destination, Length) \
8393 memset(Destination, 0, Length)
8395 #define RtlZeroBytes RtlZeroMemory
8397 #if (NTDDI_VERSION >= NTDDI_WIN2K)
8403 IN PRTL_BITMAP BitMapHeader
,
8404 IN ULONG StartingIndex
,
8411 IN PRTL_BITMAP BitMapHeader
,
8412 IN ULONG StartingIndex
,
8418 RtlAnsiStringToUnicodeString(
8419 IN OUT PUNICODE_STRING DestinationString
,
8420 IN PANSI_STRING SourceString
,
8421 IN BOOLEAN AllocateDestinationString
);
8426 RtlxAnsiStringToUnicodeSize(
8427 IN PCANSI_STRING AnsiString
);
8429 #define RtlAnsiStringToUnicodeSize(String) ( \
8430 NLS_MB_CODE_PAGE_TAG ? \
8431 RtlxAnsiStringToUnicodeSize(String) : \
8432 ((String)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR) \
8438 RtlAppendUnicodeStringToString(
8439 IN OUT PUNICODE_STRING Destination
,
8440 IN PCUNICODE_STRING Source
);
8445 RtlAppendUnicodeToString(
8446 IN OUT PUNICODE_STRING Destination
,
8452 RtlCheckRegistryKey(
8453 IN ULONG RelativeTo
,
8460 IN PRTL_BITMAP BitMapHeader
);
8466 IN PRTL_BITMAP BitMapHeader
,
8467 IN ULONG StartingIndex
,
8468 IN ULONG NumberToClear
);
8474 IN CONST VOID
*Source1
,
8475 IN CONST VOID
*Source2
,
8481 RtlCompareUnicodeString(
8482 IN PCUNICODE_STRING String1
,
8483 IN PCUNICODE_STRING String2
,
8484 IN BOOLEAN CaseInSensitive
);
8489 RtlCompareUnicodeStrings(
8491 IN SIZE_T String1Length
,
8493 IN SIZE_T String2Length
,
8494 IN BOOLEAN CaseInSensitive
);
8499 RtlCopyUnicodeString(
8500 IN OUT PUNICODE_STRING DestinationString
,
8501 IN PCUNICODE_STRING SourceString OPTIONAL
);
8506 RtlCreateRegistryKey(
8507 IN ULONG RelativeTo
,
8513 RtlCreateSecurityDescriptor(
8514 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
8520 RtlDeleteRegistryValue(
8521 IN ULONG RelativeTo
,
8523 IN PCWSTR ValueName
);
8528 RtlEqualUnicodeString(
8529 IN CONST UNICODE_STRING
*String1
,
8530 IN CONST UNICODE_STRING
*String2
,
8531 IN BOOLEAN CaseInSensitive
);
8533 #if !defined(_AMD64_) && !defined(_IA64_)
8537 RtlExtendedIntegerMultiply(
8538 IN LARGE_INTEGER Multiplicand
,
8539 IN LONG Multiplier
);
8544 RtlExtendedLargeIntegerDivide(
8545 IN LARGE_INTEGER Dividend
,
8547 OUT PULONG Remainder OPTIONAL
);
8550 #if defined(_X86_) || defined(_IA64_)
8554 RtlExtendedMagicDivide(
8555 IN LARGE_INTEGER Dividend
,
8556 IN LARGE_INTEGER MagicDivisor
,
8557 IN CCHAR ShiftCount
);
8564 IN PANSI_STRING AnsiString
);
8570 IN PRTL_BITMAP BitMapHeader
,
8571 IN ULONG NumberToFind
,
8572 IN ULONG HintIndex
);
8577 RtlFindClearBitsAndSet(
8578 IN PRTL_BITMAP BitMapHeader
,
8579 IN ULONG NumberToFind
,
8580 IN ULONG HintIndex
);
8585 RtlFindFirstRunClear(
8586 IN PRTL_BITMAP BitMapHeader
,
8587 OUT PULONG StartingIndex
);
8593 IN PRTL_BITMAP BitMapHeader
,
8594 OUT PRTL_BITMAP_RUN RunArray
,
8595 IN ULONG SizeOfRunArray
,
8596 IN BOOLEAN LocateLongestRuns
);
8601 RtlFindLastBackwardRunClear(
8602 IN PRTL_BITMAP BitMapHeader
,
8604 OUT PULONG StartingRunIndex
);
8609 RtlFindLeastSignificantBit(
8615 RtlFindLongestRunClear(
8616 IN PRTL_BITMAP BitMapHeader
,
8617 OUT PULONG StartingIndex
);
8622 RtlFindMostSignificantBit(
8628 RtlFindNextForwardRunClear(
8629 IN PRTL_BITMAP BitMapHeader
,
8631 OUT PULONG StartingRunIndex
);
8637 IN PRTL_BITMAP BitMapHeader
,
8638 IN ULONG NumberToFind
,
8639 IN ULONG HintIndex
);
8644 RtlFindSetBitsAndClear(
8645 IN PRTL_BITMAP BitMapHeader
,
8646 IN ULONG NumberToFind
,
8647 IN ULONG HintIndex
);
8653 IN OUT PANSI_STRING DestinationString
,
8654 IN PCSZ SourceString
);
8659 RtlInitializeBitMap(
8660 IN PRTL_BITMAP BitMapHeader
,
8661 IN PULONG BitMapBuffer
,
8662 IN ULONG SizeOfBitMap
);
8668 IN OUT PSTRING DestinationString
,
8669 IN PCSZ SourceString
);
8674 RtlIntegerToUnicodeString(
8676 IN ULONG Base OPTIONAL
,
8677 IN OUT PUNICODE_STRING String
);
8682 RtlInt64ToUnicodeString(
8684 IN ULONG Base OPTIONAL
,
8685 IN OUT PUNICODE_STRING String
);
8688 #define RtlIntPtrToUnicodeString(Value, Base, String) \
8689 RtlInt64ToUnicodeString(Value, Base, String)
8691 #define RtlIntPtrToUnicodeString(Value, Base, String) \
8692 RtlIntegerToUnicodeString(Value, Base, String)
8699 #define RtlIsZeroLuid(_L1) \
8700 ((BOOLEAN) ((!(_L1)->LowPart) && (!(_L1)->HighPart)))
8705 RtlLengthSecurityDescriptor(
8706 IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
8711 RtlNumberOfClearBits(
8712 IN PRTL_BITMAP BitMapHeader
);
8718 IN PRTL_BITMAP BitMapHeader
);
8723 RtlQueryRegistryValues(
8724 IN ULONG RelativeTo
,
8726 IN OUT PRTL_QUERY_REGISTRY_TABLE QueryTable
,
8727 IN PVOID Context OPTIONAL
,
8728 IN PVOID Environment OPTIONAL
);
8730 #define SHORT_SIZE (sizeof(USHORT))
8731 #define SHORT_MASK (SHORT_SIZE - 1)
8732 #define LONG_SIZE (sizeof(LONG))
8733 #define LONGLONG_SIZE (sizeof(LONGLONG))
8734 #define LONG_MASK (LONG_SIZE - 1)
8735 #define LONGLONG_MASK (LONGLONG_SIZE - 1)
8736 #define LOWBYTE_MASK 0x00FF
8738 #define FIRSTBYTE(VALUE) ((VALUE) & LOWBYTE_MASK)
8739 #define SECONDBYTE(VALUE) (((VALUE) >> 8) & LOWBYTE_MASK)
8740 #define THIRDBYTE(VALUE) (((VALUE) >> 16) & LOWBYTE_MASK)
8741 #define FOURTHBYTE(VALUE) (((VALUE) >> 24) & LOWBYTE_MASK)
8747 IN PRTL_BITMAP BitMapHeader
);
8753 IN PRTL_BITMAP BitMapHeader
,
8754 IN ULONG StartingIndex
,
8755 IN ULONG NumberToSet
);
8760 RtlSetDaclSecurityDescriptor(
8761 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
8762 IN BOOLEAN DaclPresent
,
8763 IN PACL Dacl OPTIONAL
,
8764 IN BOOLEAN DaclDefaulted OPTIONAL
);
8766 #if defined(_AMD64_)
8770 * IN PULONG Address,
8773 #define RtlStoreUlong(Address,Value) \
8774 *(ULONG UNALIGNED *)(Address) = (Value)
8777 * RtlStoreUlonglong(
8778 * IN OUT PULONGLONG Address,
8781 #define RtlStoreUlonglong(Address,Value) \
8782 *(ULONGLONG UNALIGNED *)(Address) = (Value)
8786 * IN PUSHORT Address,
8789 #define RtlStoreUshort(Address,Value) \
8790 *(USHORT UNALIGNED *)(Address) = (Value)
8793 * RtlRetrieveUshort(
8794 * PUSHORT DestinationAddress,
8795 * PUSHORT SourceAddress);
8797 #define RtlRetrieveUshort(DestAddress,SrcAddress) \
8798 *(USHORT UNALIGNED *)(DestAddress) = *(USHORT)(SrcAddress)
8802 * PULONG DestinationAddress,
8803 * PULONG SourceAddress);
8805 #define RtlRetrieveUlong(DestAddress,SrcAddress) \
8806 *(ULONG UNALIGNED *)(DestAddress) = *(PULONG)(SrcAddress)
8810 #define RtlStoreUlong(Address,Value) \
8811 if ((ULONG_PTR)(Address) & LONG_MASK) { \
8812 ((PUCHAR) (Address))[LONG_LEAST_SIGNIFICANT_BIT] = (UCHAR)(FIRSTBYTE(Value)); \
8813 ((PUCHAR) (Address))[LONG_3RD_MOST_SIGNIFICANT_BIT] = (UCHAR)(SECONDBYTE(Value)); \
8814 ((PUCHAR) (Address))[LONG_2ND_MOST_SIGNIFICANT_BIT] = (UCHAR)(THIRDBYTE(Value)); \
8815 ((PUCHAR) (Address))[LONG_MOST_SIGNIFICANT_BIT] = (UCHAR)(FOURTHBYTE(Value)); \
8818 *((PULONG)(Address)) = (ULONG) (Value); \
8821 #define RtlStoreUlonglong(Address,Value) \
8822 if ((ULONG_PTR)(Address) & LONGLONG_MASK) { \
8823 RtlStoreUlong((ULONG_PTR)(Address), \
8824 (ULONGLONG)(Value) & 0xFFFFFFFF); \
8825 RtlStoreUlong((ULONG_PTR)(Address)+sizeof(ULONG), \
8826 (ULONGLONG)(Value) >> 32); \
8828 *((PULONGLONG)(Address)) = (ULONGLONG)(Value); \
8831 #define RtlStoreUshort(Address,Value) \
8832 if ((ULONG_PTR)(Address) & SHORT_MASK) { \
8833 ((PUCHAR) (Address))[SHORT_LEAST_SIGNIFICANT_BIT] = (UCHAR)(FIRSTBYTE(Value)); \
8834 ((PUCHAR) (Address))[SHORT_MOST_SIGNIFICANT_BIT ] = (UCHAR)(SECONDBYTE(Value)); \
8837 *((PUSHORT) (Address)) = (USHORT)Value; \
8840 #define RtlRetrieveUshort(DestAddress,SrcAddress) \
8841 if ((ULONG_PTR)(SrcAddress) & LONG_MASK) \
8843 ((PUCHAR)(DestAddress))[0]=((PUCHAR)(SrcAddress))[0]; \
8844 ((PUCHAR)(DestAddress))[1]=((PUCHAR)(SrcAddress))[1]; \
8848 *((PUSHORT)(DestAddress))=*((PUSHORT)(SrcAddress)); \
8851 #define RtlRetrieveUlong(DestAddress,SrcAddress) \
8852 if ((ULONG_PTR)(SrcAddress) & LONG_MASK) \
8854 ((PUCHAR)(DestAddress))[0]=((PUCHAR)(SrcAddress))[0]; \
8855 ((PUCHAR)(DestAddress))[1]=((PUCHAR)(SrcAddress))[1]; \
8856 ((PUCHAR)(DestAddress))[2]=((PUCHAR)(SrcAddress))[2]; \
8857 ((PUCHAR)(DestAddress))[3]=((PUCHAR)(SrcAddress))[3]; \
8861 *((PULONG)(DestAddress))=*((PULONG)(SrcAddress)); \
8864 #endif /* defined(_AMD64_) */
8869 * IN OUT PULONG_PTR Address,
8870 * IN ULONG_PTR Value);
8872 #define RtlStoreUlongPtr(Address,Value) RtlStoreUlonglong(Address,Value)
8874 #define RtlStoreUlongPtr(Address,Value) RtlStoreUlong(Address,Value)
8880 RtlTimeFieldsToTime(
8881 IN PTIME_FIELDS TimeFields
,
8882 IN PLARGE_INTEGER Time
);
8887 RtlTimeToTimeFields(
8888 IN PLARGE_INTEGER Time
,
8889 IN PTIME_FIELDS TimeFields
);
8900 RtlUlonglongByteSwap(
8901 IN ULONGLONG Source
);
8906 RtlUnicodeStringToAnsiString(
8907 IN OUT PANSI_STRING DestinationString
,
8908 IN PCUNICODE_STRING SourceString
,
8909 IN BOOLEAN AllocateDestinationString
);
8914 RtlxUnicodeStringToAnsiSize(
8915 IN PCUNICODE_STRING UnicodeString
);
8917 #define RtlUnicodeStringToAnsiSize(String) ( \
8918 NLS_MB_CODE_PAGE_TAG ? \
8919 RtlxUnicodeStringToAnsiSize(String) : \
8920 ((String)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \
8926 RtlUnicodeStringToInteger(
8927 IN PCUNICODE_STRING String
,
8928 IN ULONG Base OPTIONAL
,
8934 RtlUpcaseUnicodeChar(
8935 IN WCHAR SourceCharacter
);
8946 RtlValidRelativeSecurityDescriptor(
8947 IN PSECURITY_DESCRIPTOR SecurityDescriptorInput
,
8948 IN ULONG SecurityDescriptorLength
,
8949 IN SECURITY_INFORMATION RequiredInformation
);
8954 RtlValidSecurityDescriptor(
8955 IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
8960 RtlWriteRegistryValue(
8961 IN ULONG RelativeTo
,
8963 IN PCWSTR ValueName
,
8966 IN ULONG ValueLength
);
8969 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
8972 #if (NTDDI_VERSION >= NTDDI_WIN2KSP3)
8976 RtlPrefetchMemoryNonTemporal(
8982 #if (NTDDI_VERSION >= NTDDI_WINXP)
8989 PRTL_BITMAP BitMapHeader
,
8995 RtlDowncaseUnicodeChar(
8996 IN WCHAR SourceCharacter
);
9002 PRTL_BITMAP BitMapHeader
,
9009 IN PRTL_BITMAP BitMapHeader
,
9010 IN ULONG BitNumber
);
9015 RtlHashUnicodeString(
9016 IN CONST UNICODE_STRING
*String
,
9017 IN BOOLEAN CaseInSensitive
,
9018 IN ULONG HashAlgorithm
,
9019 OUT PULONG HashValue
);
9023 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
9026 #if (NTDDI_VERSION >= NTDDI_VISTA)
9031 RtlNumberOfSetBitsUlongPtr(
9032 IN ULONG_PTR Target
);
9037 RtlIoDecodeMemIoResource(
9038 IN
struct _IO_RESOURCE_DESCRIPTOR
*Descriptor
,
9039 OUT PULONGLONG Alignment OPTIONAL
,
9040 OUT PULONGLONG MinimumAddress OPTIONAL
,
9041 OUT PULONGLONG MaximumAddress OPTIONAL
);
9046 RtlIoEncodeMemIoResource(
9047 IN
struct _IO_RESOURCE_DESCRIPTOR
*Descriptor
,
9049 IN ULONGLONG Length
,
9050 IN ULONGLONG Alignment
,
9051 IN ULONGLONG MinimumAddress
,
9052 IN ULONGLONG MaximumAddress
);
9057 RtlCmDecodeMemIoResource(
9058 IN
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR
*Descriptor
,
9059 OUT PULONGLONG Start OPTIONAL
);
9064 RtlFindClosestEncodableLength(
9065 IN ULONGLONG SourceLength
,
9066 OUT PULONGLONG TargetLength
);
9071 RtlCmEncodeMemIoResource(
9072 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Descriptor
,
9074 IN ULONGLONG Length
,
9075 IN ULONGLONG Start
);
9078 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
9080 #if (NTDDI_VERSION >= NTDDI_WIN7)
9086 OUT PCHAR UTF8StringDestination
,
9087 IN ULONG UTF8StringMaxByteCount
,
9088 OUT PULONG UTF8StringActualByteCount
,
9089 IN PCWCH UnicodeStringSource
,
9090 IN ULONG UnicodeStringByteCount
);
9096 OUT PWSTR UnicodeStringDestination
,
9097 IN ULONG UnicodeStringMaxByteCount
,
9098 OUT PULONG UnicodeStringActualByteCount
,
9099 IN PCCH UTF8StringSource
,
9100 IN ULONG UTF8StringByteCount
);
9105 RtlGetEnabledExtendedFeatures(
9106 IN ULONG64 FeatureMask
);
9109 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
9112 #if !defined(MIDL_PASS)
9113 /* inline funftions */
9114 //DECLSPEC_DEPRECATED_DDK_WINXP
9118 RtlConvertLongToLargeInteger(
9119 IN LONG SignedInteger
)
9122 ret
.QuadPart
= SignedInteger
;
9126 //DECLSPEC_DEPRECATED_DDK_WINXP
9130 RtlConvertUlongToLargeInteger(
9131 IN ULONG UnsignedInteger
)
9134 ret
.QuadPart
= UnsignedInteger
;
9138 //DECLSPEC_DEPRECATED_DDK_WINXP
9142 RtlLargeIntegerShiftLeft(
9143 IN LARGE_INTEGER LargeInteger
,
9144 IN CCHAR ShiftCount
)
9146 LARGE_INTEGER Result
;
9148 Result
.QuadPart
= LargeInteger
.QuadPart
<< ShiftCount
;
9152 //DECLSPEC_DEPRECATED_DDK_WINXP
9156 RtlLargeIntegerShiftRight(
9157 IN LARGE_INTEGER LargeInteger
,
9158 IN CCHAR ShiftCount
)
9160 LARGE_INTEGER Result
;
9162 Result
.QuadPart
= (ULONG64
)LargeInteger
.QuadPart
>> ShiftCount
;
9166 //DECLSPEC_DEPRECATED_DDK
9170 RtlEnlargedUnsignedDivide(
9171 IN ULARGE_INTEGER Dividend
,
9173 IN OUT PULONG Remainder
)
9176 *Remainder
= (ULONG
)(Dividend
.QuadPart
% Divisor
);
9177 return (ULONG
)(Dividend
.QuadPart
/ Divisor
);
9180 //DECLSPEC_DEPRECATED_DDK
9184 RtlLargeIntegerNegate(
9185 IN LARGE_INTEGER Subtrahend
)
9187 LARGE_INTEGER Difference
;
9189 Difference
.QuadPart
= -Subtrahend
.QuadPart
;
9193 //DECLSPEC_DEPRECATED_DDK
9197 RtlLargeIntegerSubtract(
9198 IN LARGE_INTEGER Minuend
,
9199 IN LARGE_INTEGER Subtrahend
)
9201 LARGE_INTEGER Difference
;
9203 Difference
.QuadPart
= Minuend
.QuadPart
- Subtrahend
.QuadPart
;
9207 //DECLSPEC_DEPRECATED_DDK
9211 RtlEnlargedUnsignedMultiply(
9212 IN ULONG Multiplicand
,
9213 IN ULONG Multiplier
)
9216 ret
.QuadPart
= (ULONGLONG
)Multiplicand
* (ULONGLONG
)Multiplier
;
9220 //DECLSPEC_DEPRECATED_DDK
9224 RtlEnlargedIntegerMultiply(
9225 IN LONG Multiplicand
,
9229 ret
.QuadPart
= (LONGLONG
)Multiplicand
* (ULONGLONG
)Multiplier
;
9235 RtlInitEmptyAnsiString(
9236 OUT PANSI_STRING AnsiString
,
9238 IN USHORT BufferSize
)
9240 AnsiString
->Length
= 0;
9241 AnsiString
->MaximumLength
= BufferSize
;
9242 AnsiString
->Buffer
= Buffer
;
9247 RtlInitEmptyUnicodeString(
9248 OUT PUNICODE_STRING UnicodeString
,
9250 IN USHORT BufferSize
)
9252 UnicodeString
->Length
= 0;
9253 UnicodeString
->MaximumLength
= BufferSize
;
9254 UnicodeString
->Buffer
= Buffer
;
9257 #if defined(_AMD64_) || defined(_IA64_)
9263 RtlExtendedIntegerMultiply(
9264 IN LARGE_INTEGER Multiplicand
,
9268 ret
.QuadPart
= Multiplicand
.QuadPart
* Multiplier
;
9275 RtlExtendedLargeIntegerDivide(
9276 IN LARGE_INTEGER Dividend
,
9278 OUT PULONG Remainder OPTIONAL
)
9281 ret
.QuadPart
= (ULONG64
)Dividend
.QuadPart
/ Divisor
;
9283 *Remainder
= (ULONG
)(Dividend
.QuadPart
% Divisor
);
9289 #endif /* defined(_AMD64_) || defined(_IA64_) */
9292 #if defined(_AMD64_)
9294 #define MultiplyHigh __mulh
9295 #define UnsignedMultiplyHigh __umulh
9297 //DECLSPEC_DEPRECATED_DDK
9301 RtlExtendedMagicDivide(
9302 IN LARGE_INTEGER Dividend
,
9303 IN LARGE_INTEGER MagicDivisor
,
9304 IN CCHAR ShiftCount
)
9309 Pos
= (Dividend
.QuadPart
>= 0);
9310 ret64
= UnsignedMultiplyHigh(Pos
? Dividend
.QuadPart
: -Dividend
.QuadPart
,
9311 MagicDivisor
.QuadPart
);
9312 ret64
>>= ShiftCount
;
9313 ret
.QuadPart
= Pos
? ret64
: -ret64
;
9318 //DECLSPEC_DEPRECATED_DDK
9323 IN LARGE_INTEGER Addend1
,
9324 IN LARGE_INTEGER Addend2
)
9327 ret
.QuadPart
= Addend1
.QuadPart
+ Addend2
.QuadPart
;
9332 * RtlLargeIntegerAnd(
9333 * IN OUT LARGE_INTEGER Result,
9334 * IN LARGE_INTEGER Source,
9335 * IN LARGE_INTEGER Mask);
9337 #define RtlLargeIntegerAnd(Result, Source, Mask) \
9338 Result.QuadPart = Source.QuadPart & Mask.QuadPart
9340 //DECLSPEC_DEPRECATED_DDK
9344 RtlLargeIntegerArithmeticShift(
9345 IN LARGE_INTEGER LargeInteger
,
9346 IN CCHAR ShiftCount
)
9349 ret
.QuadPart
= LargeInteger
.QuadPart
>> ShiftCount
;
9354 * RtlLargeIntegerEqualTo(
9355 * IN LARGE_INTEGER Operand1,
9356 * IN LARGE_INTEGER Operand2);
9358 #define RtlLargeIntegerEqualTo(X,Y) \
9359 (!(((X).LowPart ^ (Y).LowPart) | ((X).HighPart ^ (Y).HighPart)))
9363 RtlSecureZeroMemory(
9367 volatile char* vptr
= (volatile char*)Pointer
;
9368 #if defined(_M_AMD64)
9369 __stosb((PUCHAR
)vptr
, 0, Size
);
9371 char * endptr
= (char *)vptr
+ Size
;
9372 while (vptr
< endptr
) {
9379 #if defined(_M_AMD64)
9383 IN PRTL_BITMAP BitMapHeader
,
9384 IN ULONG BitPosition
)
9386 return BitTest64((LONG64 CONST
*)BitMapHeader
->Buffer
, (LONG64
)BitPosition
);
9389 #define RtlCheckBit(BMH,BP) (((((PLONG)(BMH)->Buffer)[(BP)/32]) >> ((BP)%32)) & 0x1)
9390 #endif /* defined(_M_AMD64) */
9392 #define RtlLargeIntegerGreaterThan(X,Y) ( \
9393 (((X).HighPart == (Y).HighPart) && ((X).LowPart > (Y).LowPart)) || \
9394 ((X).HighPart > (Y).HighPart) \
9397 #define RtlLargeIntegerGreaterThanOrEqualTo(X,Y) ( \
9398 (((X).HighPart == (Y).HighPart) && ((X).LowPart >= (Y).LowPart)) || \
9399 ((X).HighPart > (Y).HighPart) \
9402 #define RtlLargeIntegerNotEqualTo(X,Y) ( \
9403 (((X).LowPart ^ (Y).LowPart) | ((X).HighPart ^ (Y).HighPart)) \
9406 #define RtlLargeIntegerLessThan(X,Y) ( \
9407 (((X).HighPart == (Y).HighPart) && ((X).LowPart < (Y).LowPart)) || \
9408 ((X).HighPart < (Y).HighPart) \
9411 #define RtlLargeIntegerLessThanOrEqualTo(X,Y) ( \
9412 (((X).HighPart == (Y).HighPart) && ((X).LowPart <= (Y).LowPart)) || \
9413 ((X).HighPart < (Y).HighPart) \
9416 #define RtlLargeIntegerGreaterThanZero(X) ( \
9417 (((X).HighPart == 0) && ((X).LowPart > 0)) || \
9418 ((X).HighPart > 0 ) \
9421 #define RtlLargeIntegerGreaterOrEqualToZero(X) ( (X).HighPart >= 0 )
9423 #define RtlLargeIntegerEqualToZero(X) ( !((X).LowPart | (X).HighPart) )
9425 #define RtlLargeIntegerNotEqualToZero(X) ( ((X).LowPart | (X).HighPart) )
9427 #define RtlLargeIntegerLessThanZero(X) ( ((X).HighPart < 0) )
9429 #define RtlLargeIntegerLessOrEqualToZero(X) ( ((X).HighPart < 0) || !((X).LowPart | (X).HighPart) )
9431 #endif /* !defined(MIDL_PASS) */
9433 /* Byte Swap Functions */
9434 #if (defined(_M_IX86) && (_MSC_FULL_VER > 13009037 || defined(__GNUC__))) || \
9435 ((defined(_M_AMD64) || defined(_M_IA64)) \
9436 && (_MSC_FULL_VER > 13009175 || defined(__GNUC__)))
9438 #define RtlUshortByteSwap(_x) _byteswap_ushort((USHORT)(_x))
9439 #define RtlUlongByteSwap(_x) _byteswap_ulong((_x))
9440 #define RtlUlonglongByteSwap(_x) _byteswap_uint64((_x))
9446 #define ASSERT(exp) \
9448 RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, NULL ), FALSE : TRUE)
9450 #define ASSERTMSG(msg, exp) \
9452 RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, msg ), FALSE : TRUE)
9454 #define RTL_SOFT_ASSERT(exp) \
9456 DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n", __FILE__, __LINE__, #exp), FALSE : TRUE)
9458 #define RTL_SOFT_ASSERTMSG(msg, exp) \
9460 DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n Message: %s\n", __FILE__, __LINE__, #exp, (msg)), FALSE : TRUE)
9462 #define RTL_VERIFY(exp) ASSERT(exp)
9463 #define RTL_VERIFYMSG(msg, exp) ASSERTMSG(msg, exp)
9465 #define RTL_SOFT_VERIFY(exp) RTL_SOFT_ASSERT(exp)
9466 #define RTL_SOFT_VERIFYMSG(msg, exp) RTL_SOFT_ASSERTMSG(msg, exp)
9468 #if defined(_MSC_VER)
9470 #define NT_ASSERT(exp) \
9472 (__annotation(L"Debug", L"AssertFail", L#exp), \
9473 DbgRaiseAssertionFailure(), FALSE) : TRUE)
9475 #define NT_ASSERTMSG(msg, exp) \
9477 (__annotation(L"Debug", L"AssertFail", L##msg), \
9478 DbgRaiseAssertionFailure(), FALSE) : TRUE)
9480 #define NT_ASSERTMSGW(msg, exp) \
9482 (__annotation(L"Debug", L"AssertFail", msg), \
9483 DbgRaiseAssertionFailure(), FALSE) : TRUE)
9485 #define NT_VERIFY NT_ASSERT
9486 #define NT_VERIFYMSG NT_ASSERTMSG
9487 #define NT_VERIFYMSGW NT_ASSERTMSGW
9491 /* GCC doesn't support __annotation (nor PDB) */
9492 #define NT_ASSERT(exp) \
9493 (VOID)((!(exp)) ? (DbgRaiseAssertionFailure(), FALSE) : TRUE)
9495 #define NT_ASSERTMSG NT_ASSERT
9496 #define NT_ASSERTMSGW NT_ASSERT
9502 #define ASSERT(exp) ((VOID) 0)
9503 #define ASSERTMSG(msg, exp) ((VOID) 0)
9505 #define RTL_SOFT_ASSERT(exp) ((VOID) 0)
9506 #define RTL_SOFT_ASSERTMSG(msg, exp) ((VOID) 0)
9508 #define RTL_VERIFY(exp) ((exp) ? TRUE : FALSE)
9509 #define RTL_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE)
9511 #define RTL_SOFT_VERIFY(exp) ((exp) ? TRUE : FALSE)
9512 #define RTL_SOFT_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE)
9514 #define NT_ASSERT(exp) ((VOID)0)
9515 #define NT_ASSERTMSG(msg, exp) ((VOID)0)
9516 #define NT_ASSERTMSGW(msg, exp) ((VOID)0)
9518 #define NT_VERIFY(_exp) ((_exp) ? TRUE : FALSE)
9519 #define NT_VERIFYMSG(_msg, _exp ) ((_exp) ? TRUE : FALSE)
9520 #define NT_VERIFYMSGW(_msg, _exp) ((_exp) ? TRUE : FALSE)
9524 #define InitializeListHead32(ListHead) (\
9525 (ListHead)->Flink = (ListHead)->Blink = PtrToUlong((ListHead)))
9527 #if !defined(_WINBASE_)
9529 #if defined(_WIN64) && (defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTIFS_) || defined(_NTHAL_) || defined(_NTOSP_))
9533 InitializeSListHead(
9534 OUT PSLIST_HEADER SListHead
);
9540 InitializeSListHead(
9541 OUT PSLIST_HEADER SListHead
)
9544 ULONG64 FeatureBits
;
9548 if (((ULONG_PTR
)SListHead
& 0xf) != 0) {
9549 RtlRaiseStatus(STATUS_DATATYPE_MISALIGNMENT
);
9552 RtlZeroMemory(SListHead
, sizeof(SLIST_HEADER
));
9554 FeatureBits
= __getReg(CV_IA64_CPUID4
);
9555 if ((FeatureBits
& KF_16BYTE_INSTR
) != 0) {
9556 SListHead
->Header16
.HeaderType
= 1;
9557 SListHead
->Header16
.Init
= 1;
9566 #define InterlockedPopEntrySList(Head) \
9567 ExpInterlockedPopEntrySList(Head)
9569 #define InterlockedPushEntrySList(Head, Entry) \
9570 ExpInterlockedPushEntrySList(Head, Entry)
9572 #define InterlockedFlushSList(Head) \
9573 ExpInterlockedFlushSList(Head)
9575 #define QueryDepthSList(Head) \
9576 ExQueryDepthSList(Head)
9578 #else /* !defined(_WIN64) */
9583 InterlockedPopEntrySList(
9584 IN PSLIST_HEADER ListHead
);
9589 InterlockedPushEntrySList(
9590 IN PSLIST_HEADER ListHead
,
9591 IN PSLIST_ENTRY ListEntry
);
9593 #define InterlockedFlushSList(ListHead) \
9594 ExInterlockedFlushSList(ListHead)
9596 #define QueryDepthSList(Head) \
9597 ExQueryDepthSList(Head)
9599 #endif /* !defined(_WIN64) */
9601 #endif /* !defined(_WINBASE_) */
9603 #define RTL_CONTEXT_EX_OFFSET(ContextEx, Chunk) ((ContextEx)->Chunk.Offset)
9604 #define RTL_CONTEXT_EX_LENGTH(ContextEx, Chunk) ((ContextEx)->Chunk.Length)
9605 #define RTL_CONTEXT_EX_CHUNK(Base, Layout, Chunk) \
9606 ((PVOID)((PCHAR)(Base) + RTL_CONTEXT_EX_OFFSET(Layout, Chunk)))
9607 #define RTL_CONTEXT_OFFSET(Context, Chunk) \
9608 RTL_CONTEXT_EX_OFFSET((PCONTEXT_EX)(Context + 1), Chunk)
9609 #define RTL_CONTEXT_LENGTH(Context, Chunk) \
9610 RTL_CONTEXT_EX_LENGTH((PCONTEXT_EX)(Context + 1), Chunk)
9611 #define RTL_CONTEXT_CHUNK(Context, Chunk) \
9612 RTL_CONTEXT_EX_CHUNK((PCONTEXT_EX)(Context + 1), \
9613 (PCONTEXT_EX)(Context + 1), \
9617 RTLVERLIB_DDI(RtlIsNtDdiVersionAvailable
)(
9621 RTLVERLIB_DDI(RtlIsServicePackVersionInstalled
)(
9624 #ifndef RtlIsNtDdiVersionAvailable
9625 #define RtlIsNtDdiVersionAvailable WdmlibRtlIsNtDdiVersionAvailable
9628 #ifndef RtlIsServicePackVersionInstalled
9629 #define RtlIsServicePackVersionInstalled WdmlibRtlIsServicePackVersionInstalled
9632 #define RtlInterlockedSetBits(Flags, Flag) \
9633 InterlockedOr((PLONG)(Flags), Flag)
9635 #define RtlInterlockedAndBits(Flags, Flag) \
9636 InterlockedAnd((PLONG)(Flags), Flag)
9638 #define RtlInterlockedClearBits(Flags, Flag) \
9639 RtlInterlockedAndBits(Flags, ~(Flag))
9641 #define RtlInterlockedXorBits(Flags, Flag) \
9642 InterlockedXor(Flags, Flag)
9644 #define RtlInterlockedSetBitsDiscardReturn(Flags, Flag) \
9645 (VOID) RtlInterlockedSetBits(Flags, Flag)
9647 #define RtlInterlockedAndBitsDiscardReturn(Flags, Flag) \
9648 (VOID) RtlInterlockedAndBits(Flags, Flag)
9650 #define RtlInterlockedClearBitsDiscardReturn(Flags, Flag) \
9651 RtlInterlockedAndBitsDiscardReturn(Flags, ~(Flag))
9654 /******************************************************************************
9655 * Kernel Functions *
9656 ******************************************************************************/
9669 IN OUT PRKEVENT Event
);
9671 #if (NTDDI_VERSION >= NTDDI_WIN2K)
9673 #if defined(_NTDDK_) || defined(_NTIFS_)
9678 IN CONST VOID
*Address
, /* CONST is added */
9680 IN ULONG Alignment
);
9681 #endif /* defined(_NTDDK_) || defined(_NTIFS_) */
9689 IN ULONG Alignment
);
9691 #if defined(SINGLE_GROUP_LEGACY_API)
9696 KeRevertToUserAffinityThread(VOID
);
9701 KeSetSystemAffinityThread(
9702 IN KAFFINITY Affinity
);
9707 KeSetTargetProcessorDpc(
9714 KeQueryActiveProcessors(VOID
);
9715 #endif /* defined(SINGLE_GROUP_LEGACY_API) */
9717 #if !defined(_M_AMD64)
9721 KeQueryInterruptTime(VOID
);
9727 OUT PLARGE_INTEGER CurrentTime
);
9728 #endif /* !_M_AMD64 */
9734 KeAcquireSpinLockRaiseToDpc(
9735 IN OUT PKSPIN_LOCK SpinLock
);
9737 #define KeAcquireSpinLock(SpinLock, OldIrql) \
9738 *(OldIrql) = KeAcquireSpinLockRaiseToDpc(SpinLock)
9743 KeAcquireSpinLockAtDpcLevel(
9744 IN OUT PKSPIN_LOCK SpinLock
);
9750 IN OUT PKSPIN_LOCK SpinLock
,
9756 KeReleaseSpinLockFromDpcLevel(
9757 IN OUT PKSPIN_LOCK SpinLock
);
9760 #if defined(_X86_) && (defined(_WDM_INCLUDED_) || defined(WIN9X_COMPAT_SPINLOCK))
9764 KeInitializeSpinLock(
9765 IN PKSPIN_LOCK SpinLock
);
9769 KeInitializeSpinLock(IN PKSPIN_LOCK SpinLock
)
9771 /* Clear the lock */
9781 IN ULONG BugCheckCode
,
9782 IN ULONG_PTR BugCheckParameter1
,
9783 IN ULONG_PTR BugCheckParameter2
,
9784 IN ULONG_PTR BugCheckParameter3
,
9785 IN ULONG_PTR BugCheckParameter4
);
9796 KeDelayExecutionThread(
9797 IN KPROCESSOR_MODE WaitMode
,
9798 IN BOOLEAN Alertable
,
9799 IN PLARGE_INTEGER Interval
);
9804 KeDeregisterBugCheckCallback(
9805 IN OUT PKBUGCHECK_CALLBACK_RECORD CallbackRecord
);
9810 KeEnterCriticalRegion(VOID
);
9815 KeInitializeDeviceQueue(
9816 OUT PKDEVICE_QUEUE DeviceQueue
);
9823 IN PKDEFERRED_ROUTINE DeferredRoutine
,
9824 IN PVOID DeferredContext OPTIONAL
);
9836 KeInitializeSemaphore(
9837 OUT PRKSEMAPHORE Semaphore
,
9850 KeInitializeTimerEx(
9852 IN TIMER_TYPE Type
);
9857 KeInsertByKeyDeviceQueue(
9858 IN OUT PKDEVICE_QUEUE DeviceQueue
,
9859 IN OUT PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
,
9865 KeInsertDeviceQueue(
9866 IN OUT PKDEVICE_QUEUE DeviceQueue
,
9867 IN OUT PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
);
9874 IN PVOID SystemArgument1 OPTIONAL
,
9875 IN PVOID SystemArgument2 OPTIONAL
);
9880 KeLeaveCriticalRegion(VOID
);
9885 KeQueryPerformanceCounter(
9886 OUT PLARGE_INTEGER PerformanceFrequency OPTIONAL
);
9891 KeQueryPriorityThread(
9892 IN PRKTHREAD Thread
);
9897 KeQueryTimeIncrement(VOID
);
9914 KeReadStateSemaphore(
9915 IN PRKSEMAPHORE Semaphore
);
9926 KeRegisterBugCheckCallback(
9927 OUT PKBUGCHECK_CALLBACK_RECORD CallbackRecord
,
9928 IN PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine
,
9931 IN PUCHAR Component
);
9937 IN OUT PRKMUTEX Mutex
,
9944 IN OUT PRKSEMAPHORE Semaphore
,
9945 IN KPRIORITY Increment
,
9950 PKDEVICE_QUEUE_ENTRY
9952 KeRemoveByKeyDeviceQueue(
9953 IN OUT PKDEVICE_QUEUE DeviceQueue
,
9957 PKDEVICE_QUEUE_ENTRY
9959 KeRemoveDeviceQueue(
9960 IN OUT PKDEVICE_QUEUE DeviceQueue
);
9965 KeRemoveEntryDeviceQueue(
9966 IN OUT PKDEVICE_QUEUE DeviceQueue
,
9967 IN OUT PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
);
9979 IN OUT PRKEVENT Event
);
9985 IN OUT PRKEVENT Event
,
9986 IN KPRIORITY Increment
,
9994 IN KDPC_IMPORTANCE Importance
);
9999 KeSetPriorityThread(
10000 IN OUT PKTHREAD Thread
,
10001 IN KPRIORITY Priority
);
10007 IN OUT PKTIMER Timer
,
10008 IN LARGE_INTEGER DueTime
,
10009 IN PKDPC Dpc OPTIONAL
);
10015 IN OUT PKTIMER Timer
,
10016 IN LARGE_INTEGER DueTime
,
10017 IN LONG Period OPTIONAL
,
10018 IN PKDPC Dpc OPTIONAL
);
10023 KeStallExecutionProcessor(
10024 IN ULONG MicroSeconds
);
10029 KeSynchronizeExecution(
10030 IN OUT PKINTERRUPT Interrupt
,
10031 IN PKSYNCHRONIZE_ROUTINE SynchronizeRoutine
,
10032 IN PVOID SynchronizeContext OPTIONAL
);
10037 KeWaitForMultipleObjects(
10040 IN WAIT_TYPE WaitType
,
10041 IN KWAIT_REASON WaitReason
,
10042 IN KPROCESSOR_MODE WaitMode
,
10043 IN BOOLEAN Alertable
,
10044 IN PLARGE_INTEGER Timeout OPTIONAL
,
10045 OUT PKWAIT_BLOCK WaitBlockArray OPTIONAL
);
10047 #define KeWaitForMutexObject KeWaitForSingleObject
10052 KeWaitForSingleObject(
10054 IN KWAIT_REASON WaitReason
,
10055 IN KPROCESSOR_MODE WaitMode
,
10056 IN BOOLEAN Alertable
,
10057 IN PLARGE_INTEGER Timeout OPTIONAL
);
10059 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
10061 #if (NTDDI_VERSION >= NTDDI_WINXP)
10063 _DECL_HAL_KE_IMPORT
10066 KeAcquireInStackQueuedSpinLock(
10067 IN OUT PKSPIN_LOCK SpinLock
,
10068 OUT PKLOCK_QUEUE_HANDLE LockHandle
);
10073 KeAcquireInStackQueuedSpinLockAtDpcLevel(
10074 IN OUT PKSPIN_LOCK SpinLock
,
10075 OUT PKLOCK_QUEUE_HANDLE LockHandle
);
10080 KeAcquireInterruptSpinLock(
10081 IN OUT PKINTERRUPT Interrupt
);
10086 KeAreApcsDisabled(VOID
);
10091 KeGetRecommendedSharedDataAlignment(VOID
);
10096 KeQueryRuntimeThread(
10097 IN PKTHREAD Thread
,
10098 OUT PULONG UserTime
);
10103 KeReleaseInStackQueuedSpinLockFromDpcLevel(
10104 IN PKLOCK_QUEUE_HANDLE LockHandle
);
10109 KeReleaseInterruptSpinLock(
10110 IN OUT PKINTERRUPT Interrupt
,
10114 PKDEVICE_QUEUE_ENTRY
10116 KeRemoveByKeyDeviceQueueIfBusy(
10117 IN OUT PKDEVICE_QUEUE DeviceQueue
,
10120 _DECL_HAL_KE_IMPORT
10123 KeReleaseInStackQueuedSpinLock(
10124 IN PKLOCK_QUEUE_HANDLE LockHandle
);
10126 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
10128 #if (NTDDI_VERSION >= NTDDI_WINXPSP1)
10133 KeDeregisterBugCheckReasonCallback(
10134 IN OUT PKBUGCHECK_REASON_CALLBACK_RECORD CallbackRecord
);
10139 KeRegisterBugCheckReasonCallback(
10140 OUT PKBUGCHECK_REASON_CALLBACK_RECORD CallbackRecord
,
10141 IN PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine
,
10142 IN KBUGCHECK_CALLBACK_REASON Reason
,
10143 IN PUCHAR Component
);
10145 #endif /* (NTDDI_VERSION >= NTDDI_WINXPSP1) */
10147 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
10151 KeFlushQueuedDpcs(VOID
);
10152 #endif /* (NTDDI_VERSION >= NTDDI_WINXPSP2) */
10153 #if (NTDDI_VERSION >= NTDDI_WS03)
10158 KeRegisterNmiCallback(
10159 IN PNMI_CALLBACK CallbackRoutine
,
10160 IN PVOID Context OPTIONAL
);
10165 KeDeregisterNmiCallback(
10171 KeInitializeThreadedDpc(
10173 IN PKDEFERRED_ROUTINE DeferredRoutine
,
10174 IN PVOID DeferredContext OPTIONAL
);
10180 IN PKIPI_BROADCAST_WORKER BroadcastFunction
,
10181 IN ULONG_PTR Context
);
10186 KeAcquireSpinLockForDpc(
10187 IN OUT PKSPIN_LOCK SpinLock
);
10192 KeReleaseSpinLockForDpc(
10193 IN OUT PKSPIN_LOCK SpinLock
,
10200 IN PKSPIN_LOCK SpinLock
);
10202 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
10203 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
10208 KeTryToAcquireSpinLockAtDpcLevel(
10209 IN OUT PKSPIN_LOCK SpinLock
);
10214 KeAreAllApcsDisabled(VOID
);
10219 KeAcquireGuardedMutex(
10220 IN OUT PKGUARDED_MUTEX GuardedMutex
);
10225 KeAcquireGuardedMutexUnsafe(
10226 IN OUT PKGUARDED_MUTEX GuardedMutex
);
10231 KeEnterGuardedRegion(VOID
);
10236 KeLeaveGuardedRegion(VOID
);
10241 KeInitializeGuardedMutex(
10242 OUT PKGUARDED_MUTEX GuardedMutex
);
10247 KeReleaseGuardedMutexUnsafe(
10248 IN OUT PKGUARDED_MUTEX GuardedMutex
);
10253 KeReleaseGuardedMutex(
10254 IN OUT PKGUARDED_MUTEX GuardedMutex
);
10259 KeTryToAcquireGuardedMutex(
10260 IN OUT PKGUARDED_MUTEX GuardedMutex
);
10261 #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
10263 #if (NTDDI_VERSION >= NTDDI_VISTA)
10267 KeAcquireInStackQueuedSpinLockForDpc(
10268 IN OUT PKSPIN_LOCK SpinLock
,
10269 OUT PKLOCK_QUEUE_HANDLE LockHandle
);
10274 KeReleaseInStackQueuedSpinLockForDpc(
10275 IN PKLOCK_QUEUE_HANDLE LockHandle
);
10280 KeQueryDpcWatchdogInformation(
10281 OUT PKDPC_WATCHDOG_INFORMATION WatchdogInformation
);
10282 #if defined(SINGLE_GROUP_LEGACY_API)
10287 KeSetSystemAffinityThreadEx(
10288 IN KAFFINITY Affinity
);
10293 KeRevertToUserAffinityThreadEx(
10294 IN KAFFINITY Affinity
);
10299 KeQueryActiveProcessorCount(
10300 OUT PKAFFINITY ActiveProcessors OPTIONAL
);
10305 KeQueryMaximumProcessorCount(VOID
);
10306 #endif /* SINGLE_GROUP_LEGACY_API */
10308 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
10310 #if (NTDDI_VERSION >= NTDDI_WS08)
10313 KeRegisterProcessorChangeCallback(
10314 IN PPROCESSOR_CALLBACK_FUNCTION CallbackFunction
,
10315 IN PVOID CallbackContext OPTIONAL
,
10319 KeDeregisterProcessorChangeCallback(
10320 IN PVOID CallbackHandle
);
10322 #endif /* (NTDDI_VERSION >= NTDDI_WS08) */
10323 #if (NTDDI_VERSION >= NTDDI_WIN7)
10327 KeQueryTotalCycleTimeProcess(
10328 IN OUT PKPROCESS Process
,
10329 OUT PULONG64 CycleTimeStamp
);
10333 KeQueryTotalCycleTimeThread(
10334 IN OUT PKTHREAD Thread
,
10335 OUT PULONG64 CycleTimeStamp
);
10340 KeSetTargetProcessorDpcEx(
10342 IN PPROCESSOR_NUMBER ProcNumber
);
10347 KeSetSystemGroupAffinityThread(
10348 IN PGROUP_AFFINITY Affinity
,
10349 OUT PGROUP_AFFINITY PreviousAffinity OPTIONAL
);
10354 KeRevertToUserGroupAffinityThread(
10355 IN PGROUP_AFFINITY PreviousAffinity
);
10360 KeSetCoalescableTimer(
10361 IN OUT PKTIMER Timer
,
10362 IN LARGE_INTEGER DueTime
,
10364 IN ULONG TolerableDelay
,
10365 IN PKDPC Dpc OPTIONAL
);
10370 KeQueryUnbiasedInterruptTime(VOID
);
10375 KeQueryActiveProcessorCountEx(
10376 IN USHORT GroupNumber
);
10381 KeQueryMaximumProcessorCountEx(
10382 IN USHORT GroupNumber
);
10387 KeQueryActiveGroupCount(VOID
);
10392 KeQueryMaximumGroupCount(VOID
);
10397 KeQueryGroupAffinity(
10398 IN USHORT GroupNumber
);
10403 KeGetCurrentProcessorNumberEx(
10404 OUT PPROCESSOR_NUMBER ProcNumber OPTIONAL
);
10409 KeQueryNodeActiveAffinity(
10410 IN USHORT NodeNumber
,
10411 OUT PGROUP_AFFINITY Affinity OPTIONAL
,
10412 OUT PUSHORT Count OPTIONAL
);
10417 KeQueryNodeMaximumProcessorCount(
10418 IN USHORT NodeNumber
);
10423 KeQueryHighestNodeNumber(VOID
);
10428 KeGetCurrentNodeNumber(VOID
);
10433 KeQueryLogicalProcessorRelationship(
10434 IN PPROCESSOR_NUMBER ProcessorNumber OPTIONAL
,
10435 IN LOGICAL_PROCESSOR_RELATIONSHIP RelationshipType
,
10436 OUT PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Information OPTIONAL
,
10437 IN OUT PULONG Length
);
10442 KeSaveExtendedProcessorState(
10444 OUT PXSTATE_SAVE XStateSave
);
10449 KeRestoreExtendedProcessorState(
10450 IN PXSTATE_SAVE XStateSave
);
10454 KeGetProcessorNumberFromIndex(
10455 IN ULONG ProcIndex
,
10456 OUT PPROCESSOR_NUMBER ProcNumber
);
10460 KeGetProcessorIndexFromNumber(
10461 IN PPROCESSOR_NUMBER ProcNumber
);
10462 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
10463 #if !defined(_IA64_)
10467 KeFlushWriteBuffer(VOID
);
10471 * KeInitializeCallbackRecord(
10472 * IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord)
10474 #define KeInitializeCallbackRecord(CallbackRecord) \
10475 CallbackRecord->State = BufferEmpty;
10479 #if (NTDDI_VERSION >= NTDDI_VISTA)
10480 #define PAGED_ASSERT( exp ) NT_ASSERT( exp )
10482 #define PAGED_ASSERT( exp ) ASSERT( exp )
10485 #define PAGED_CODE() { \
10486 if (KeGetCurrentIrql() > APC_LEVEL) { \
10487 KdPrint( ("NTDDK: Pageable code called at IRQL > APC_LEVEL (%d)\n", KeGetCurrentIrql() )); \
10488 PAGED_ASSERT(FALSE); \
10494 #define PAGED_CODE()
10498 #define PAGED_CODE_LOCKED() NOP_FUNCTION;
10500 /******************************************************************************
10501 * Memory manager Functions *
10502 ******************************************************************************/
10503 /* Alignment Macros */
10504 #define ALIGN_DOWN_BY(size, align) \
10505 ((ULONG_PTR)(size) & ~((ULONG_PTR)(align) - 1))
10507 #define ALIGN_UP_BY(size, align) \
10508 (ALIGN_DOWN_BY(((ULONG_PTR)(size) + align - 1), align))
10510 #define ALIGN_DOWN_POINTER_BY(ptr, align) \
10511 ((PVOID)ALIGN_DOWN_BY(ptr, align))
10513 #define ALIGN_UP_POINTER_BY(ptr, align) \
10514 ((PVOID)ALIGN_UP_BY(ptr, align))
10516 #define ALIGN_DOWN(size, type) \
10517 ALIGN_DOWN_BY(size, sizeof(type))
10519 #define ALIGN_UP(size, type) \
10520 ALIGN_UP_BY(size, sizeof(type))
10522 #define ALIGN_DOWN_POINTER(ptr, type) \
10523 ALIGN_DOWN_POINTER_BY(ptr, sizeof(type))
10525 #define ALIGN_UP_POINTER(ptr, type) \
10526 ALIGN_UP_POINTER_BY(ptr, sizeof(type))
10528 #ifndef FIELD_OFFSET
10529 #define FIELD_OFFSET(type, field) ((ULONG)&(((type *)0)->field))
10533 #define FIELD_SIZE(type, field) (sizeof(((type *)0)->field))
10536 #define POOL_TAGGING 1
10539 #define IF_DEBUG if (TRUE)
10541 #define IF_DEBUG if (FALSE)
10548 #define BYTE_OFFSET(Va) \
10549 ((ULONG) ((ULONG_PTR) (Va) & (PAGE_SIZE - 1)))
10555 #define BYTES_TO_PAGES(Size) \
10556 (((Size) + PAGE_SIZE - 1) >> PAGE_SHIFT)
10562 #define PAGE_ALIGN(Va) \
10563 ((PVOID) ((ULONG_PTR)(Va) & ~(PAGE_SIZE - 1)))
10567 * IN ULONG_PTR Size)
10569 #define ROUND_TO_PAGES(Size) \
10570 (((ULONG_PTR) (Size) + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1))
10573 * ADDRESS_AND_SIZE_TO_SPAN_PAGES(
10577 #define ADDRESS_AND_SIZE_TO_SPAN_PAGES(_Va, _Size) \
10578 ((ULONG) ((((ULONG_PTR) (_Va) & (PAGE_SIZE - 1)) \
10579 + (_Size) + (PAGE_SIZE - 1)) >> PAGE_SHIFT))
10581 #define COMPUTE_PAGES_SPANNED(Va, Size) \
10582 ADDRESS_AND_SIZE_TO_SPAN_PAGES(Va,Size)
10586 * MmGetMdlByteCount(
10589 #define MmGetMdlByteCount(_Mdl) \
10590 ((_Mdl)->ByteCount)
10594 * MmGetMdlByteOffset(
10597 #define MmGetMdlByteOffset(_Mdl) \
10598 ((_Mdl)->ByteOffset)
10600 #define MmGetMdlBaseVa(Mdl) ((Mdl)->StartVa)
10604 * MmGetMdlPfnArray(
10607 #define MmGetMdlPfnArray(_Mdl) \
10608 ((PPFN_NUMBER) ((_Mdl) + 1))
10612 * MmGetMdlVirtualAddress(
10615 #define MmGetMdlVirtualAddress(_Mdl) \
10616 ((PVOID) ((PCHAR) ((_Mdl)->StartVa) + (_Mdl)->ByteOffset))
10618 #define MmGetProcedureAddress(Address) (Address)
10620 /* PVOID MmGetSystemAddressForMdl(
10623 #define MmGetSystemAddressForMdl(Mdl) \
10624 (((Mdl)->MdlFlags & (MDL_MAPPED_TO_SYSTEM_VA | \
10625 MDL_SOURCE_IS_NONPAGED_POOL)) ? \
10626 ((Mdl)->MappedSystemVa) : \
10627 (MmMapLockedPages((Mdl), KernelMode)))
10630 * MmGetSystemAddressForMdlSafe(
10632 * IN MM_PAGE_PRIORITY Priority)
10634 #define MmGetSystemAddressForMdlSafe(_Mdl, _Priority) \
10635 (((_Mdl)->MdlFlags & (MDL_MAPPED_TO_SYSTEM_VA \
10636 | MDL_SOURCE_IS_NONPAGED_POOL)) ? \
10637 (_Mdl)->MappedSystemVa : \
10638 (PVOID) MmMapLockedPagesSpecifyCache((_Mdl), \
10639 KernelMode, MmCached, NULL, FALSE, (_Priority)))
10644 * IN PMDL MemoryDescriptorList,
10646 * IN SIZE_T Length)
10648 #define MmInitializeMdl(_MemoryDescriptorList, \
10652 (_MemoryDescriptorList)->Next = (PMDL) NULL; \
10653 (_MemoryDescriptorList)->Size = (CSHORT) (sizeof(MDL) + \
10654 (sizeof(PFN_NUMBER) * ADDRESS_AND_SIZE_TO_SPAN_PAGES(_BaseVa, _Length))); \
10655 (_MemoryDescriptorList)->MdlFlags = 0; \
10656 (_MemoryDescriptorList)->StartVa = (PVOID) PAGE_ALIGN(_BaseVa); \
10657 (_MemoryDescriptorList)->ByteOffset = BYTE_OFFSET(_BaseVa); \
10658 (_MemoryDescriptorList)->ByteCount = (ULONG) _Length; \
10663 * MmPrepareMdlForReuse(
10666 #define MmPrepareMdlForReuse(_Mdl) \
10668 if (((_Mdl)->MdlFlags & MDL_PARTIAL_HAS_BEEN_MAPPED) != 0) { \
10669 ASSERT(((_Mdl)->MdlFlags & MDL_PARTIAL) != 0); \
10670 MmUnmapLockedPages((_Mdl)->MappedSystemVa, (_Mdl)); \
10671 } else if (((_Mdl)->MdlFlags & MDL_PARTIAL) == 0) { \
10672 ASSERT(((_Mdl)->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA) == 0); \
10676 #if (NTDDI_VERSION >= NTDDI_WIN2K)
10680 MmAllocateContiguousMemory(
10681 IN SIZE_T NumberOfBytes
,
10682 IN PHYSICAL_ADDRESS HighestAcceptableAddress
);
10687 MmAllocateContiguousMemorySpecifyCache(
10688 IN SIZE_T NumberOfBytes
,
10689 IN PHYSICAL_ADDRESS LowestAcceptableAddress
,
10690 IN PHYSICAL_ADDRESS HighestAcceptableAddress
,
10691 IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL
,
10692 IN MEMORY_CACHING_TYPE CacheType
);
10697 MmAllocatePagesForMdl(
10698 IN PHYSICAL_ADDRESS LowAddress
,
10699 IN PHYSICAL_ADDRESS HighAddress
,
10700 IN PHYSICAL_ADDRESS SkipBytes
,
10701 IN SIZE_T TotalBytes
);
10706 MmBuildMdlForNonPagedPool(
10707 IN OUT PMDLX MemoryDescriptorList
);
10709 //DECLSPEC_DEPRECATED_DDK
10714 IN PMDL MemoryDescriptorList OPTIONAL
,
10721 MmFreeContiguousMemory(
10722 IN PVOID BaseAddress
);
10727 MmFreeContiguousMemorySpecifyCache(
10728 IN PVOID BaseAddress
,
10729 IN SIZE_T NumberOfBytes
,
10730 IN MEMORY_CACHING_TYPE CacheType
);
10735 MmFreePagesFromMdl(
10736 IN PMDLX MemoryDescriptorList
);
10741 MmGetSystemRoutineAddress(
10742 IN PUNICODE_STRING SystemRoutineName
);
10747 MmIsDriverVerifying(
10748 IN
struct _DRIVER_OBJECT
*DriverObject
);
10753 MmLockPagableDataSection(
10754 IN PVOID AddressWithinSection
);
10760 IN PHYSICAL_ADDRESS PhysicalAddress
,
10761 IN SIZE_T NumberOfBytes
,
10762 IN MEMORY_CACHING_TYPE CacheEnable
);
10768 IN PMDL MemoryDescriptorList
,
10769 IN KPROCESSOR_MODE AccessMode
);
10774 MmMapLockedPagesSpecifyCache(
10775 IN PMDLX MemoryDescriptorList
,
10776 IN KPROCESSOR_MODE AccessMode
,
10777 IN MEMORY_CACHING_TYPE CacheType
,
10778 IN PVOID BaseAddress OPTIONAL
,
10779 IN ULONG BugCheckOnFailure
,
10780 IN MM_PAGE_PRIORITY Priority
);
10785 MmPageEntireDriver(
10786 IN PVOID AddressWithinSection
);
10791 MmProbeAndLockPages(
10792 IN OUT PMDL MemoryDescriptorList
,
10793 IN KPROCESSOR_MODE AccessMode
,
10794 IN LOCK_OPERATION Operation
);
10799 MmQuerySystemSize(VOID
);
10804 MmResetDriverPaging(
10805 IN PVOID AddressWithinSection
);
10817 MmUnlockPagableImageSection(
10818 IN PVOID ImageSectionHandle
);
10824 IN OUT PMDL MemoryDescriptorList
);
10830 IN PVOID BaseAddress
,
10831 IN SIZE_T NumberOfBytes
);
10836 MmProbeAndLockProcessPages(
10837 IN OUT PMDL MemoryDescriptorList
,
10838 IN PEPROCESS Process
,
10839 IN KPROCESSOR_MODE AccessMode
,
10840 IN LOCK_OPERATION Operation
);
10845 MmUnmapLockedPages(
10846 IN PVOID BaseAddress
,
10847 IN PMDL MemoryDescriptorList
);
10852 MmAllocateContiguousMemorySpecifyCacheNode(
10853 IN SIZE_T NumberOfBytes
,
10854 IN PHYSICAL_ADDRESS LowestAcceptableAddress
,
10855 IN PHYSICAL_ADDRESS HighestAcceptableAddress
,
10856 IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL
,
10857 IN MEMORY_CACHING_TYPE CacheType
,
10858 IN NODE_REQUIREMENT PreferredNode
);
10860 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
10862 #if (NTDDI_VERSION >= NTDDI_WINXP)
10869 IN ULONG NumberOfBytes
);
10874 MmAllocateMappingAddress(
10875 IN SIZE_T NumberOfBytes
,
10881 MmFreeMappingAddress(
10882 IN PVOID BaseAddress
,
10888 MmIsVerifierEnabled(
10889 OUT PULONG VerifierFlags
);
10894 MmMapLockedPagesWithReservedMapping(
10895 IN PVOID MappingAddress
,
10897 IN PMDL MemoryDescriptorList
,
10898 IN MEMORY_CACHING_TYPE CacheType
);
10903 MmProtectMdlSystemAddress(
10904 IN PMDL MemoryDescriptorList
,
10905 IN ULONG NewProtect
);
10910 MmUnmapReservedMapping(
10911 IN PVOID BaseAddress
,
10913 IN PMDL MemoryDescriptorList
);
10918 MmAddVerifierThunks(
10919 IN PVOID ThunkBuffer
,
10920 IN ULONG ThunkBufferSize
);
10922 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
10923 #if (NTDDI_VERSION >= NTDDI_WS03)
10928 IN PHYSICAL_ADDRESS StartAddress
,
10929 IN SIZE_T NumberOfBytes
);
10931 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
10932 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
10936 MmAllocatePagesForMdlEx(
10937 IN PHYSICAL_ADDRESS LowAddress
,
10938 IN PHYSICAL_ADDRESS HighAddress
,
10939 IN PHYSICAL_ADDRESS SkipBytes
,
10940 IN SIZE_T TotalBytes
,
10941 IN MEMORY_CACHING_TYPE CacheType
,
10945 #if (NTDDI_VERSION >= NTDDI_VISTA)
10949 MmIsDriverVerifyingByAddress(
10950 IN PVOID AddressWithinSection
);
10951 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
10953 /******************************************************************************
10954 * Security Manager Functions *
10955 ******************************************************************************/
10957 #if (NTDDI_VERSION >= NTDDI_WIN2K)
10962 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
10963 IN PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext
,
10964 IN BOOLEAN SubjectContextLocked
,
10965 IN ACCESS_MASK DesiredAccess
,
10966 IN ACCESS_MASK PreviouslyGrantedAccess
,
10967 OUT PPRIVILEGE_SET
*Privileges OPTIONAL
,
10968 IN PGENERIC_MAPPING GenericMapping
,
10969 IN KPROCESSOR_MODE AccessMode
,
10970 OUT PACCESS_MASK GrantedAccess
,
10971 OUT PNTSTATUS AccessStatus
);
10977 IN PSECURITY_DESCRIPTOR ParentDescriptor OPTIONAL
,
10978 IN PSECURITY_DESCRIPTOR ExplicitDescriptor OPTIONAL
,
10979 OUT PSECURITY_DESCRIPTOR
*NewDescriptor
,
10980 IN BOOLEAN IsDirectoryObject
,
10981 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
,
10982 IN PGENERIC_MAPPING GenericMapping
,
10983 IN POOL_TYPE PoolType
);
10988 SeAssignSecurityEx(
10989 IN PSECURITY_DESCRIPTOR ParentDescriptor OPTIONAL
,
10990 IN PSECURITY_DESCRIPTOR ExplicitDescriptor OPTIONAL
,
10991 OUT PSECURITY_DESCRIPTOR
*NewDescriptor
,
10992 IN GUID
*ObjectType OPTIONAL
,
10993 IN BOOLEAN IsDirectoryObject
,
10994 IN ULONG AutoInheritFlags
,
10995 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
,
10996 IN PGENERIC_MAPPING GenericMapping
,
10997 IN POOL_TYPE PoolType
);
11002 SeDeassignSecurity(
11003 IN OUT PSECURITY_DESCRIPTOR
*SecurityDescriptor
);
11008 SeValidSecurityDescriptor(
11010 IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
11015 SeObjectCreateSaclAccessBits(
11016 IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
11021 SeReleaseSubjectContext(
11022 IN OUT PSECURITY_SUBJECT_CONTEXT SubjectContext
);
11027 SeUnlockSubjectContext(
11028 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
);
11033 SeCaptureSubjectContext(
11034 OUT PSECURITY_SUBJECT_CONTEXT SubjectContext
);
11039 SeLockSubjectContext(
11040 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
);
11043 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
11045 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
11049 SeSetAuditParameter(
11050 IN OUT PSE_ADT_PARAMETER_ARRAY AuditParameters
,
11051 IN SE_ADT_PARAMETER_TYPE Type
,
11057 SeReportSecurityEvent(
11059 IN PUNICODE_STRING SourceName
,
11060 IN PSID UserSid OPTIONAL
,
11061 IN PSE_ADT_PARAMETER_ARRAY AuditParameters
);
11063 #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
11065 #if (NTDDI_VERSION >= NTDDI_VISTA)
11069 SeComputeAutoInheritByObjectType(
11070 IN PVOID ObjectType
,
11071 IN PSECURITY_DESCRIPTOR SecurityDescriptor OPTIONAL
,
11072 IN PSECURITY_DESCRIPTOR ParentSecurityDescriptor OPTIONAL
);
11074 #ifdef SE_NTFS_WORLD_CACHE
11078 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
11079 IN PGENERIC_MAPPING GenericMapping
,
11080 OUT PACCESS_MASK GrantedAccess
);
11081 #endif /* SE_NTFS_WORLD_CACHE */
11082 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
11083 /******************************************************************************
11084 * Configuration Manager Functions *
11085 ******************************************************************************/
11087 #if (NTDDI_VERSION >= NTDDI_WINXP)
11091 CmRegisterCallback(
11092 IN PEX_CALLBACK_FUNCTION Function
,
11093 IN PVOID Context OPTIONAL
,
11094 OUT PLARGE_INTEGER Cookie
);
11099 CmUnRegisterCallback(
11100 IN LARGE_INTEGER Cookie
);
11103 #if (NTDDI_VERSION >= NTDDI_VISTA)
11108 CmRegisterCallbackEx(
11109 PEX_CALLBACK_FUNCTION Function
,
11110 PCUNICODE_STRING Altitude
,
11113 PLARGE_INTEGER Cookie
,
11119 CmGetCallbackVersion(
11120 OUT PULONG Major OPTIONAL
,
11121 OUT PULONG Minor OPTIONAL
);
11126 CmSetCallbackObjectContext(
11127 IN OUT PVOID Object
,
11128 IN PLARGE_INTEGER Cookie
,
11129 IN PVOID NewContext
,
11130 OUT PVOID
*OldContext OPTIONAL
);
11135 CmCallbackGetKeyObjectID(
11136 IN PLARGE_INTEGER Cookie
,
11138 OUT PULONG_PTR ObjectID OPTIONAL
,
11139 OUT PCUNICODE_STRING
*ObjectName OPTIONAL
);
11144 CmGetBoundTransaction(
11145 IN PLARGE_INTEGER Cookie
,
11148 #endif // NTDDI_VERSION >= NTDDI_VISTA
11151 /******************************************************************************
11152 * I/O Manager Functions *
11153 ******************************************************************************/
11157 * IoAcquireRemoveLock(
11158 * IN PIO_REMOVE_LOCK RemoveLock,
11159 * IN OPTIONAL PVOID Tag)
11162 #define IoAcquireRemoveLock(RemoveLock, Tag) \
11163 IoAcquireRemoveLockEx(RemoveLock, Tag, __FILE__, __LINE__, sizeof (IO_REMOVE_LOCK))
11165 #define IoAcquireRemoveLock(RemoveLock, Tag) \
11166 IoAcquireRemoveLockEx(RemoveLock, Tag, "", 1, sizeof (IO_REMOVE_LOCK))
11171 * IoAdjustPagingPathCount(
11173 * IN BOOLEAN Increment)
11175 #define IoAdjustPagingPathCount(_Count, \
11180 InterlockedIncrement(_Count); \
11184 InterlockedDecrement(_Count); \
11188 #if !defined(_M_AMD64)
11192 READ_PORT_BUFFER_UCHAR(
11200 READ_PORT_BUFFER_ULONG(
11208 READ_PORT_BUFFER_USHORT(
11234 READ_REGISTER_BUFFER_UCHAR(
11235 IN PUCHAR Register
,
11242 READ_REGISTER_BUFFER_ULONG(
11243 IN PULONG Register
,
11250 READ_REGISTER_BUFFER_USHORT(
11251 IN PUSHORT Register
,
11258 READ_REGISTER_UCHAR(
11259 IN PUCHAR Register
);
11264 READ_REGISTER_ULONG(
11265 IN PULONG Register
);
11270 READ_REGISTER_USHORT(
11271 IN PUSHORT Register
);
11276 WRITE_PORT_BUFFER_UCHAR(
11284 WRITE_PORT_BUFFER_ULONG(
11292 WRITE_PORT_BUFFER_USHORT(
11321 WRITE_REGISTER_BUFFER_UCHAR(
11322 IN PUCHAR Register
,
11329 WRITE_REGISTER_BUFFER_ULONG(
11330 IN PULONG Register
,
11337 WRITE_REGISTER_BUFFER_USHORT(
11338 IN PUSHORT Register
,
11345 WRITE_REGISTER_UCHAR(
11346 IN PUCHAR Register
,
11352 WRITE_REGISTER_ULONG(
11353 IN PULONG Register
,
11359 WRITE_REGISTER_USHORT(
11360 IN PUSHORT Register
,
11367 READ_PORT_BUFFER_UCHAR(
11372 __inbytestring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
11377 READ_PORT_BUFFER_ULONG(
11382 __indwordstring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
11387 READ_PORT_BUFFER_USHORT(
11392 __inwordstring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
11400 return __inbyte((USHORT
)(ULONG_PTR
)Port
);
11408 return __indword((USHORT
)(ULONG_PTR
)Port
);
11416 return __inword((USHORT
)(ULONG_PTR
)Port
);
11421 READ_REGISTER_BUFFER_UCHAR(
11422 IN PUCHAR Register
,
11426 __movsb(Register
, Buffer
, Count
);
11431 READ_REGISTER_BUFFER_ULONG(
11432 IN PULONG Register
,
11436 __movsd(Register
, Buffer
, Count
);
11441 READ_REGISTER_BUFFER_USHORT(
11442 IN PUSHORT Register
,
11446 __movsw(Register
, Buffer
, Count
);
11451 READ_REGISTER_UCHAR(
11452 IN
volatile UCHAR
*Register
)
11459 READ_REGISTER_ULONG(
11460 IN
volatile ULONG
*Register
)
11467 READ_REGISTER_USHORT(
11468 IN
volatile USHORT
*Register
)
11475 WRITE_PORT_BUFFER_UCHAR(
11480 __outbytestring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
11485 WRITE_PORT_BUFFER_ULONG(
11490 __outdwordstring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
11495 WRITE_PORT_BUFFER_USHORT(
11500 __outwordstring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
11509 __outbyte((USHORT
)(ULONG_PTR
)Port
, Value
);
11518 __outdword((USHORT
)(ULONG_PTR
)Port
, Value
);
11527 __outword((USHORT
)(ULONG_PTR
)Port
, Value
);
11532 WRITE_REGISTER_BUFFER_UCHAR(
11533 IN PUCHAR Register
,
11538 __movsb(Register
, Buffer
, Count
);
11539 InterlockedOr(&Synch
, 1);
11544 WRITE_REGISTER_BUFFER_ULONG(
11545 IN PULONG Register
,
11550 __movsd(Register
, Buffer
, Count
);
11551 InterlockedOr(&Synch
, 1);
11556 WRITE_REGISTER_BUFFER_USHORT(
11557 IN PUSHORT Register
,
11562 __movsw(Register
, Buffer
, Count
);
11563 InterlockedOr(&Synch
, 1);
11568 WRITE_REGISTER_UCHAR(
11569 IN
volatile UCHAR
*Register
,
11574 InterlockedOr(&Synch
, 1);
11579 WRITE_REGISTER_ULONG(
11580 IN
volatile ULONG
*Register
,
11585 InterlockedOr(&Synch
, 1);
11590 WRITE_REGISTER_USHORT(
11591 IN
volatile USHORT
*Register
,
11596 InterlockedOr(&Sync
, 1);
11600 #if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && \
11601 (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
11603 #define DMA_MACROS_DEFINED
11607 IoAllocateAdapterChannel(
11608 IN PDMA_ADAPTER DmaAdapter
,
11609 IN PDEVICE_OBJECT DeviceObject
,
11610 IN ULONG NumberOfMapRegisters
,
11611 IN PDRIVER_CONTROL ExecutionRoutine
,
11614 PALLOCATE_ADAPTER_CHANNEL AllocateAdapterChannel
;
11615 AllocateAdapterChannel
=
11616 *(DmaAdapter
)->DmaOperations
->AllocateAdapterChannel
;
11617 ASSERT(AllocateAdapterChannel
);
11618 return AllocateAdapterChannel(DmaAdapter
,
11620 NumberOfMapRegisters
,
11628 IoFlushAdapterBuffers(
11629 IN PDMA_ADAPTER DmaAdapter
,
11631 IN PVOID MapRegisterBase
,
11632 IN PVOID CurrentVa
,
11634 IN BOOLEAN WriteToDevice
)
11636 PFLUSH_ADAPTER_BUFFERS FlushAdapterBuffers
;
11637 FlushAdapterBuffers
= *(DmaAdapter
)->DmaOperations
->FlushAdapterBuffers
;
11638 ASSERT(FlushAdapterBuffers
);
11639 return FlushAdapterBuffers(DmaAdapter
,
11650 IoFreeAdapterChannel(
11651 IN PDMA_ADAPTER DmaAdapter
)
11653 PFREE_ADAPTER_CHANNEL FreeAdapterChannel
;
11654 FreeAdapterChannel
= *(DmaAdapter
)->DmaOperations
->FreeAdapterChannel
;
11655 ASSERT(FreeAdapterChannel
);
11656 FreeAdapterChannel(DmaAdapter
);
11662 IoFreeMapRegisters(
11663 IN PDMA_ADAPTER DmaAdapter
,
11664 IN PVOID MapRegisterBase
,
11665 IN ULONG NumberOfMapRegisters
)
11667 PFREE_MAP_REGISTERS FreeMapRegisters
;
11668 FreeMapRegisters
= *(DmaAdapter
)->DmaOperations
->FreeMapRegisters
;
11669 ASSERT(FreeMapRegisters
);
11670 FreeMapRegisters(DmaAdapter
, MapRegisterBase
, NumberOfMapRegisters
);
11677 IN PDMA_ADAPTER DmaAdapter
,
11679 IN PVOID MapRegisterBase
,
11680 IN PVOID CurrentVa
,
11681 IN OUT PULONG Length
,
11682 IN BOOLEAN WriteToDevice
)
11684 PMAP_TRANSFER MapTransfer
;
11686 MapTransfer
= *(DmaAdapter
)->DmaOperations
->MapTransfer
;
11687 ASSERT(MapTransfer
);
11688 return MapTransfer(DmaAdapter
,
11697 #if (NTDDI_VERSION >= NTDDI_WIN2K)
11702 IoAcquireCancelSpinLock(
11708 IoAcquireRemoveLockEx(
11709 IN PIO_REMOVE_LOCK RemoveLock
,
11710 IN PVOID Tag OPTIONAL
,
11713 IN ULONG RemlockSize
);
11717 IoAllocateDriverObjectExtension(
11718 IN PDRIVER_OBJECT DriverObject
,
11719 IN PVOID ClientIdentificationAddress
,
11720 IN ULONG DriverObjectExtensionSize
,
11721 OUT PVOID
*DriverObjectExtension
);
11726 IoAllocateErrorLogEntry(
11728 IN UCHAR EntrySize
);
11734 IN CCHAR StackSize
,
11735 IN BOOLEAN ChargeQuota
);
11741 IN PVOID VirtualAddress OPTIONAL
,
11743 IN BOOLEAN SecondaryBuffer
,
11744 IN BOOLEAN ChargeQuota
,
11745 IN OUT PIRP Irp OPTIONAL
);
11750 IoAllocateWorkItem(
11751 IN PDEVICE_OBJECT DeviceObject
);
11757 IN PDEVICE_OBJECT SourceDevice
,
11758 IN PUNICODE_STRING TargetDevice
,
11759 OUT PDEVICE_OBJECT
*AttachedDevice
);
11764 IoAttachDeviceToDeviceStack(
11765 IN PDEVICE_OBJECT SourceDevice
,
11766 IN PDEVICE_OBJECT TargetDevice
);
11771 IoBuildAsynchronousFsdRequest(
11772 IN ULONG MajorFunction
,
11773 IN PDEVICE_OBJECT DeviceObject
,
11774 IN OUT PVOID Buffer OPTIONAL
,
11775 IN ULONG Length OPTIONAL
,
11776 IN PLARGE_INTEGER StartingOffset OPTIONAL
,
11777 IN PIO_STATUS_BLOCK IoStatusBlock OPTIONAL
);
11782 IoBuildDeviceIoControlRequest(
11783 IN ULONG IoControlCode
,
11784 IN PDEVICE_OBJECT DeviceObject
,
11785 IN PVOID InputBuffer OPTIONAL
,
11786 IN ULONG InputBufferLength
,
11787 OUT PVOID OutputBuffer OPTIONAL
,
11788 IN ULONG OutputBufferLength
,
11789 IN BOOLEAN InternalDeviceIoControl
,
11791 OUT PIO_STATUS_BLOCK IoStatusBlock
);
11798 IN OUT PMDL TargetMdl
,
11799 IN PVOID VirtualAddress
,
11805 IoBuildSynchronousFsdRequest(
11806 IN ULONG MajorFunction
,
11807 IN PDEVICE_OBJECT DeviceObject
,
11808 IN OUT PVOID Buffer OPTIONAL
,
11809 IN ULONG Length OPTIONAL
,
11810 IN PLARGE_INTEGER StartingOffset OPTIONAL
,
11812 OUT PIO_STATUS_BLOCK IoStatusBlock
);
11818 IN PDEVICE_OBJECT DeviceObject
,
11820 #define IoCallDriver IofCallDriver
11825 IofCompleteRequest(
11827 IN CCHAR PriorityBoost
);
11828 #define IoCompleteRequest IofCompleteRequest
11839 IoCheckShareAccess(
11840 IN ACCESS_MASK DesiredAccess
,
11841 IN ULONG DesiredShareAccess
,
11842 IN OUT PFILE_OBJECT FileObject
,
11843 IN OUT PSHARE_ACCESS ShareAccess
,
11844 IN BOOLEAN Update
);
11849 IofCompleteRequest(
11851 IN CCHAR PriorityBoost
);
11856 IoConnectInterrupt(
11857 OUT PKINTERRUPT
*InterruptObject
,
11858 IN PKSERVICE_ROUTINE ServiceRoutine
,
11859 IN PVOID ServiceContext OPTIONAL
,
11860 IN PKSPIN_LOCK SpinLock OPTIONAL
,
11863 IN KIRQL SynchronizeIrql
,
11864 IN KINTERRUPT_MODE InterruptMode
,
11865 IN BOOLEAN ShareVector
,
11866 IN KAFFINITY ProcessorEnableMask
,
11867 IN BOOLEAN FloatingSave
);
11873 IN PDRIVER_OBJECT DriverObject
,
11874 IN ULONG DeviceExtensionSize
,
11875 IN PUNICODE_STRING DeviceName OPTIONAL
,
11876 IN DEVICE_TYPE DeviceType
,
11877 IN ULONG DeviceCharacteristics
,
11878 IN BOOLEAN Exclusive
,
11879 OUT PDEVICE_OBJECT
*DeviceObject
);
11885 OUT PHANDLE FileHandle
,
11886 IN ACCESS_MASK DesiredAccess
,
11887 IN POBJECT_ATTRIBUTES ObjectAttributes
,
11888 OUT PIO_STATUS_BLOCK IoStatusBlock
,
11889 IN PLARGE_INTEGER AllocationSize OPTIONAL
,
11890 IN ULONG FileAttributes
,
11891 IN ULONG ShareAccess
,
11892 IN ULONG Disposition
,
11893 IN ULONG CreateOptions
,
11894 IN PVOID EaBuffer OPTIONAL
,
11896 IN CREATE_FILE_TYPE CreateFileType
,
11897 IN PVOID InternalParameters OPTIONAL
,
11903 IoCreateNotificationEvent(
11904 IN PUNICODE_STRING EventName
,
11905 OUT PHANDLE EventHandle
);
11910 IoCreateSymbolicLink(
11911 IN PUNICODE_STRING SymbolicLinkName
,
11912 IN PUNICODE_STRING DeviceName
);
11917 IoCreateSynchronizationEvent(
11918 IN PUNICODE_STRING EventName
,
11919 OUT PHANDLE EventHandle
);
11924 IoCreateUnprotectedSymbolicLink(
11925 IN PUNICODE_STRING SymbolicLinkName
,
11926 IN PUNICODE_STRING DeviceName
);
11932 IN PDEVICE_OBJECT DeviceObject
);
11937 IoDeleteSymbolicLink(
11938 IN PUNICODE_STRING SymbolicLinkName
);
11944 IN OUT PDEVICE_OBJECT TargetDevice
);
11949 IoDisconnectInterrupt(
11950 IN PKINTERRUPT InterruptObject
);
11968 IN PIO_WORKITEM IoWorkItem
);
11973 IoGetAttachedDevice(
11974 IN PDEVICE_OBJECT DeviceObject
);
11979 IoGetAttachedDeviceReference(
11980 IN PDEVICE_OBJECT DeviceObject
);
11985 IoGetBootDiskInformation(
11986 IN OUT PBOOTDISK_INFORMATION BootDiskInformation
,
11992 IoGetDeviceInterfaceAlias(
11993 IN PUNICODE_STRING SymbolicLinkName
,
11994 IN CONST GUID
*AliasInterfaceClassGuid
,
11995 OUT PUNICODE_STRING AliasSymbolicLinkName
);
12000 IoGetCurrentProcess(VOID
);
12005 IoGetDeviceInterfaces(
12006 IN CONST GUID
*InterfaceClassGuid
,
12007 IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL
,
12009 OUT PWSTR
*SymbolicLinkList
);
12014 IoGetDeviceObjectPointer(
12015 IN PUNICODE_STRING ObjectName
,
12016 IN ACCESS_MASK DesiredAccess
,
12017 OUT PFILE_OBJECT
*FileObject
,
12018 OUT PDEVICE_OBJECT
*DeviceObject
);
12023 IoGetDeviceProperty(
12024 IN PDEVICE_OBJECT DeviceObject
,
12025 IN DEVICE_REGISTRY_PROPERTY DeviceProperty
,
12026 IN ULONG BufferLength
,
12027 OUT PVOID PropertyBuffer
,
12028 OUT PULONG ResultLength
);
12034 IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL
,
12035 IN PDEVICE_DESCRIPTION DeviceDescription
,
12036 IN OUT PULONG NumberOfMapRegisters
);
12041 IoGetDriverObjectExtension(
12042 IN PDRIVER_OBJECT DriverObject
,
12043 IN PVOID ClientIdentificationAddress
);
12048 IoGetInitialStack(VOID
);
12053 IoGetRelatedDeviceObject(
12054 IN PFILE_OBJECT FileObject
);
12060 IN PIO_WORKITEM IoWorkItem
,
12061 IN PIO_WORKITEM_ROUTINE WorkerRoutine
,
12062 IN WORK_QUEUE_TYPE QueueType
,
12063 IN PVOID Context OPTIONAL
);
12070 IN USHORT PacketSize
,
12071 IN CCHAR StackSize
);
12076 IoInitializeRemoveLockEx(
12077 IN PIO_REMOVE_LOCK Lock
,
12078 IN ULONG AllocateTag
,
12079 IN ULONG MaxLockedMinutes
,
12080 IN ULONG HighWatermark
,
12081 IN ULONG RemlockSize
);
12087 IN PDEVICE_OBJECT DeviceObject
,
12088 IN PIO_TIMER_ROUTINE TimerRoutine
,
12089 IN PVOID Context OPTIONAL
);
12094 IoInvalidateDeviceRelations(
12095 IN PDEVICE_OBJECT DeviceObject
,
12096 IN DEVICE_RELATION_TYPE Type
);
12101 IoInvalidateDeviceState(
12102 IN PDEVICE_OBJECT PhysicalDeviceObject
);
12107 IoIsWdmVersionAvailable(
12108 IN UCHAR MajorVersion
,
12109 IN UCHAR MinorVersion
);
12114 IoOpenDeviceInterfaceRegistryKey(
12115 IN PUNICODE_STRING SymbolicLinkName
,
12116 IN ACCESS_MASK DesiredAccess
,
12117 OUT PHANDLE DeviceInterfaceKey
);
12122 IoOpenDeviceRegistryKey(
12123 IN PDEVICE_OBJECT DeviceObject
,
12124 IN ULONG DevInstKeyType
,
12125 IN ACCESS_MASK DesiredAccess
,
12126 OUT PHANDLE DevInstRegKey
);
12131 IoRegisterDeviceInterface(
12132 IN PDEVICE_OBJECT PhysicalDeviceObject
,
12133 IN CONST GUID
*InterfaceClassGuid
,
12134 IN PUNICODE_STRING ReferenceString OPTIONAL
,
12135 OUT PUNICODE_STRING SymbolicLinkName
);
12140 IoRegisterPlugPlayNotification(
12141 IN IO_NOTIFICATION_EVENT_CATEGORY EventCategory
,
12142 IN ULONG EventCategoryFlags
,
12143 IN PVOID EventCategoryData OPTIONAL
,
12144 IN PDRIVER_OBJECT DriverObject
,
12145 IN PDRIVER_NOTIFICATION_CALLBACK_ROUTINE CallbackRoutine
,
12146 IN OUT PVOID Context OPTIONAL
,
12147 OUT PVOID
*NotificationEntry
);
12152 IoRegisterShutdownNotification(
12153 IN PDEVICE_OBJECT DeviceObject
);
12158 IoReleaseCancelSpinLock(
12164 IoReleaseRemoveLockAndWaitEx(
12165 IN PIO_REMOVE_LOCK RemoveLock
,
12166 IN PVOID Tag OPTIONAL
,
12167 IN ULONG RemlockSize
);
12172 IoReleaseRemoveLockEx(
12173 IN PIO_REMOVE_LOCK RemoveLock
,
12174 IN PVOID Tag OPTIONAL
,
12175 IN ULONG RemlockSize
);
12180 IoRemoveShareAccess(
12181 IN PFILE_OBJECT FileObject
,
12182 IN OUT PSHARE_ACCESS ShareAccess
);
12187 IoReportTargetDeviceChange(
12188 IN PDEVICE_OBJECT PhysicalDeviceObject
,
12189 IN PVOID NotificationStructure
);
12194 IoReportTargetDeviceChangeAsynchronous(
12195 IN PDEVICE_OBJECT PhysicalDeviceObject
,
12196 IN PVOID NotificationStructure
,
12197 IN PDEVICE_CHANGE_COMPLETE_CALLBACK Callback OPTIONAL
,
12198 IN PVOID Context OPTIONAL
);
12203 IoRequestDeviceEject(
12204 IN PDEVICE_OBJECT PhysicalDeviceObject
);
12211 IN NTSTATUS Status
);
12216 IoSetDeviceInterfaceState(
12217 IN PUNICODE_STRING SymbolicLinkName
,
12218 IN BOOLEAN Enable
);
12224 IN ACCESS_MASK DesiredAccess
,
12225 IN ULONG DesiredShareAccess
,
12226 IN OUT PFILE_OBJECT FileObject
,
12227 OUT PSHARE_ACCESS ShareAccess
);
12233 IN PDEVICE_OBJECT DeviceObject
,
12234 IN BOOLEAN Cancelable
);
12239 IoStartNextPacketByKey(
12240 IN PDEVICE_OBJECT DeviceObject
,
12241 IN BOOLEAN Cancelable
,
12248 IN PDEVICE_OBJECT DeviceObject
,
12250 IN PULONG Key OPTIONAL
,
12251 IN PDRIVER_CANCEL CancelFunction OPTIONAL
);
12257 IN PDEVICE_OBJECT DeviceObject
);
12263 IN PDEVICE_OBJECT DeviceObject
);
12268 IoUnregisterPlugPlayNotification(
12269 IN PVOID NotificationEntry
);
12274 IoUnregisterShutdownNotification(
12275 IN PDEVICE_OBJECT DeviceObject
);
12280 IoUpdateShareAccess(
12281 IN PFILE_OBJECT FileObject
,
12282 IN OUT PSHARE_ACCESS ShareAccess
);
12287 IoWMIAllocateInstanceIds(
12289 IN ULONG InstanceCount
,
12290 OUT ULONG
*FirstInstanceId
);
12295 IoWMIQuerySingleInstanceMultiple(
12296 IN PVOID
*DataBlockObjectList
,
12297 IN PUNICODE_STRING InstanceNames
,
12298 IN ULONG ObjectCount
,
12299 IN OUT ULONG
*InOutBufferSize
,
12300 OUT PVOID OutBuffer
);
12305 IoWMIRegistrationControl(
12306 IN PDEVICE_OBJECT DeviceObject
,
12312 IoWMISuggestInstanceName(
12313 IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL
,
12314 IN PUNICODE_STRING SymbolicLinkName OPTIONAL
,
12315 IN BOOLEAN CombineNames
,
12316 OUT PUNICODE_STRING SuggestedInstanceName
);
12322 IN OUT PVOID WnodeEventItem
);
12327 IoWriteErrorLogEntry(
12333 IoGetTopLevelIrp(VOID
);
12338 IoRegisterLastChanceShutdownNotification(
12339 IN PDEVICE_OBJECT DeviceObject
);
12345 IN PIRP Irp OPTIONAL
);
12348 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
12351 #if (NTDDI_VERSION >= NTDDI_WINXP)
12358 IN PIO_CSQ_INSERT_IRP CsqInsertIrp
,
12359 IN PIO_CSQ_REMOVE_IRP CsqRemoveIrp
,
12360 IN PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp
,
12361 IN PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock
,
12362 IN PIO_CSQ_RELEASE_LOCK CsqReleaseLock
,
12363 IN PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp
);
12371 IN PIO_CSQ_IRP_CONTEXT Context OPTIONAL
);
12378 IN PIO_CSQ_IRP_CONTEXT Context
);
12383 IoCsqRemoveNextIrp(
12385 IN PVOID PeekContext OPTIONAL
);
12390 IoForwardIrpSynchronously(
12391 IN PDEVICE_OBJECT DeviceObject
,
12394 #define IoForwardAndCatchIrp IoForwardIrpSynchronously
12399 IoFreeErrorLogEntry(
12405 IoSetCompletionRoutineEx(
12406 IN PDEVICE_OBJECT DeviceObject
,
12408 IN PIO_COMPLETION_ROUTINE CompletionRoutine
,
12410 IN BOOLEAN InvokeOnSuccess
,
12411 IN BOOLEAN InvokeOnError
,
12412 IN BOOLEAN InvokeOnCancel
);
12416 IoSetStartIoAttributes(
12417 IN PDEVICE_OBJECT DeviceObject
,
12418 IN BOOLEAN DeferredStartIo
,
12419 IN BOOLEAN NonCancelable
);
12424 IoWMIDeviceObjectToInstanceName(
12425 IN PVOID DataBlockObject
,
12426 IN PDEVICE_OBJECT DeviceObject
,
12427 OUT PUNICODE_STRING InstanceName
);
12432 IoWMIExecuteMethod(
12433 IN PVOID DataBlockObject
,
12434 IN PUNICODE_STRING InstanceName
,
12436 IN ULONG InBufferSize
,
12437 IN OUT PULONG OutBufferSize
,
12438 IN OUT PUCHAR InOutBuffer
);
12443 IoWMIHandleToInstanceName(
12444 IN PVOID DataBlockObject
,
12445 IN HANDLE FileHandle
,
12446 OUT PUNICODE_STRING InstanceName
);
12452 IN GUID
*DataBlockGuid
,
12453 IN ULONG DesiredAccess
,
12454 OUT PVOID
*DataBlockObject
);
12460 IN PVOID DataBlockObject
,
12461 IN OUT ULONG
*InOutBufferSize
,
12462 OUT PVOID OutBuffer
);
12467 IoWMIQueryAllDataMultiple(
12468 IN PVOID
*DataBlockObjectList
,
12469 IN ULONG ObjectCount
,
12470 IN OUT ULONG
*InOutBufferSize
,
12471 OUT PVOID OutBuffer
);
12476 IoWMIQuerySingleInstance(
12477 IN PVOID DataBlockObject
,
12478 IN PUNICODE_STRING InstanceName
,
12479 IN OUT ULONG
*InOutBufferSize
,
12480 OUT PVOID OutBuffer
);
12485 IoWMISetNotificationCallback(
12486 IN OUT PVOID Object
,
12487 IN WMI_NOTIFICATION_CALLBACK Callback
,
12488 IN PVOID Context OPTIONAL
);
12493 IoWMISetSingleInstance(
12494 IN PVOID DataBlockObject
,
12495 IN PUNICODE_STRING InstanceName
,
12497 IN ULONG ValueBufferSize
,
12498 IN PVOID ValueBuffer
);
12503 IoWMISetSingleItem(
12504 IN PVOID DataBlockObject
,
12505 IN PUNICODE_STRING InstanceName
,
12506 IN ULONG DataItemId
,
12508 IN ULONG ValueBufferSize
,
12509 IN PVOID ValueBuffer
);
12511 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
12513 #if (NTDDI_VERSION >= NTDDI_WINXPSP1)
12517 IoValidateDeviceIoControlAccess(
12519 IN ULONG RequiredAccess
);
12522 #if (NTDDI_VERSION >= NTDDI_WS03)
12528 IN PIO_CSQ_INSERT_IRP_EX CsqInsertIrp
,
12529 IN PIO_CSQ_REMOVE_IRP CsqRemoveIrp
,
12530 IN PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp
,
12531 IN PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock
,
12532 IN PIO_CSQ_RELEASE_LOCK CsqReleaseLock
,
12533 IN PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp
);
12541 IN PIO_CSQ_IRP_CONTEXT Context OPTIONAL
,
12542 IN PVOID InsertContext OPTIONAL
);
12543 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
12546 #if (NTDDI_VERSION >= NTDDI_VISTA)
12550 IoGetBootDiskInformationLite(
12551 OUT PBOOTDISK_INFORMATION_LITE
*BootDiskInformation
);
12556 IoCheckShareAccessEx(
12557 IN ACCESS_MASK DesiredAccess
,
12558 IN ULONG DesiredShareAccess
,
12559 IN OUT PFILE_OBJECT FileObject
,
12560 IN OUT PSHARE_ACCESS ShareAccess
,
12562 IN PBOOLEAN WritePermission
);
12567 IoConnectInterruptEx(
12568 IN OUT PIO_CONNECT_INTERRUPT_PARAMETERS Parameters
);
12573 IoDisconnectInterruptEx(
12574 IN PIO_DISCONNECT_INTERRUPT_PARAMETERS Parameters
);
12578 IoWithinStackLimits(
12579 IN ULONG_PTR RegionStart
,
12580 IN SIZE_T RegionSize
);
12585 IoSetShareAccessEx(
12586 IN ACCESS_MASK DesiredAccess
,
12587 IN ULONG DesiredShareAccess
,
12588 IN OUT PFILE_OBJECT FileObject
,
12589 OUT PSHARE_ACCESS ShareAccess
,
12590 IN PBOOLEAN WritePermission
);
12594 IoSizeofWorkItem(VOID
);
12598 IoInitializeWorkItem(
12600 IN PIO_WORKITEM IoWorkItem
);
12604 IoUninitializeWorkItem(
12605 IN PIO_WORKITEM IoWorkItem
);
12610 IN PIO_WORKITEM IoWorkItem
,
12611 IN PIO_WORKITEM_ROUTINE_EX WorkerRoutine
,
12612 IN WORK_QUEUE_TYPE QueueType
,
12613 IN PVOID Context OPTIONAL
);
12617 IoGetIoPriorityHint(
12622 IoSetIoPriorityHint(
12624 IN IO_PRIORITY_HINT PriorityHint
);
12628 IoAllocateSfioStreamIdentifier(
12629 IN PFILE_OBJECT FileObject
,
12631 IN PVOID Signature
,
12632 OUT PVOID
*StreamIdentifier
);
12636 IoGetSfioStreamIdentifier(
12637 IN PFILE_OBJECT FileObject
,
12638 IN PVOID Signature
);
12642 IoFreeSfioStreamIdentifier(
12643 IN PFILE_OBJECT FileObject
,
12644 IN PVOID Signature
);
12649 IoRequestDeviceEjectEx(
12650 IN PDEVICE_OBJECT PhysicalDeviceObject
,
12651 IN PIO_DEVICE_EJECT_CALLBACK Callback OPTIONAL
,
12652 IN PVOID Context OPTIONAL
,
12653 IN PDRIVER_OBJECT DriverObject OPTIONAL
);
12658 IoSetDevicePropertyData(
12659 IN PDEVICE_OBJECT Pdo
,
12660 IN CONST DEVPROPKEY
*PropertyKey
,
12663 IN DEVPROPTYPE Type
,
12665 IN PVOID Data OPTIONAL
);
12670 IoGetDevicePropertyData(
12671 PDEVICE_OBJECT Pdo
,
12672 CONST DEVPROPKEY
*PropertyKey
,
12677 PULONG RequiredSize
,
12678 PDEVPROPTYPE Type
);
12680 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
12682 #define IoCallDriverStackSafeDefault(a, b) IoCallDriver(a, b)
12684 #if (NTDDI_VERSION >= NTDDI_WS08)
12688 IoReplacePartitionUnit(
12689 IN PDEVICE_OBJECT TargetPdo
,
12690 IN PDEVICE_OBJECT SparePdo
,
12694 #if (NTDDI_VERSION >= NTDDI_WIN7)
12699 IoGetAffinityInterrupt(
12700 IN PKINTERRUPT InterruptObject
,
12701 OUT PGROUP_AFFINITY GroupAffinity
);
12705 IoGetContainerInformation(
12706 IN IO_CONTAINER_INFORMATION_CLASS InformationClass
,
12707 IN PVOID ContainerObject OPTIONAL
,
12708 IN OUT PVOID Buffer OPTIONAL
,
12709 IN ULONG BufferLength
);
12713 IoRegisterContainerNotification(
12714 IN IO_CONTAINER_NOTIFICATION_CLASS NotificationClass
,
12715 IN PIO_CONTAINER_NOTIFICATION_FUNCTION CallbackFunction
,
12716 IN PVOID NotificationInformation OPTIONAL
,
12717 IN ULONG NotificationInformationLength
,
12718 OUT PVOID CallbackRegistration
);
12722 IoUnregisterContainerNotification(
12723 IN PVOID CallbackRegistration
);
12728 IoUnregisterPlugPlayNotificationEx(
12729 IN PVOID NotificationEntry
);
12734 IoGetDeviceNumaNode(
12735 IN PDEVICE_OBJECT Pdo
,
12736 OUT PUSHORT NodeNumber
);
12738 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
12740 #if defined(_WIN64)
12744 IoWMIDeviceObjectToProviderId(
12745 IN PDEVICE_OBJECT DeviceObject
);
12747 #define IoWMIDeviceObjectToProviderId(DeviceObject) ((ULONG)(DeviceObject))
12753 * IN CCHAR StackSize)
12755 #define IoSizeOfIrp(_StackSize) \
12756 ((USHORT) (sizeof(IRP) + ((_StackSize) * (sizeof(IO_STACK_LOCATION)))))
12760 IoSkipCurrentIrpStackLocation(
12763 ASSERT(Irp
->CurrentLocation
<= Irp
->StackCount
);
12764 Irp
->CurrentLocation
++;
12765 Irp
->Tail
.Overlay
.CurrentStackLocation
++;
12770 IoSetNextIrpStackLocation(
12773 ASSERT(Irp
->CurrentLocation
> 0);
12774 Irp
->CurrentLocation
--;
12775 Irp
->Tail
.Overlay
.CurrentStackLocation
--;
12780 IoGetNextIrpStackLocation(
12783 ASSERT(Irp
->CurrentLocation
> 0);
12784 return ((Irp
)->Tail
.Overlay
.CurrentStackLocation
- 1 );
12789 IoSetCompletionRoutine(
12791 IN PIO_COMPLETION_ROUTINE CompletionRoutine OPTIONAL
,
12792 IN PVOID Context OPTIONAL
,
12793 IN BOOLEAN InvokeOnSuccess
,
12794 IN BOOLEAN InvokeOnError
,
12795 IN BOOLEAN InvokeOnCancel
)
12797 PIO_STACK_LOCATION irpSp
;
12798 ASSERT( (InvokeOnSuccess
|| InvokeOnError
|| InvokeOnCancel
) ? (CompletionRoutine
!= NULL
) : TRUE
);
12799 irpSp
= IoGetNextIrpStackLocation(Irp
);
12800 irpSp
->CompletionRoutine
= CompletionRoutine
;
12801 irpSp
->Context
= Context
;
12802 irpSp
->Control
= 0;
12804 if (InvokeOnSuccess
) {
12805 irpSp
->Control
= SL_INVOKE_ON_SUCCESS
;
12808 if (InvokeOnError
) {
12809 irpSp
->Control
|= SL_INVOKE_ON_ERROR
;
12812 if (InvokeOnCancel
) {
12813 irpSp
->Control
|= SL_INVOKE_ON_CANCEL
;
12819 * IoSetCancelRoutine(
12821 * IN PDRIVER_CANCEL CancelRoutine)
12823 #define IoSetCancelRoutine(_Irp, \
12825 ((PDRIVER_CANCEL) (ULONG_PTR) InterlockedExchangePointer( \
12826 (PVOID *) &(_Irp)->CancelRoutine, (PVOID) (ULONG_PTR) (_CancelRoutine)))
12831 * IN PDEVICE_OBJECT DeviceObject,
12833 * IN PVOID Context);
12835 #define IoRequestDpc(DeviceObject, Irp, Context)( \
12836 KeInsertQueueDpc(&(DeviceObject)->Dpc, (Irp), (Context)))
12840 * IoReleaseRemoveLock(
12841 * IN PIO_REMOVE_LOCK RemoveLock,
12844 #define IoReleaseRemoveLock(_RemoveLock, \
12846 IoReleaseRemoveLockEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK))
12850 * IoReleaseRemoveLockAndWait(
12851 * IN PIO_REMOVE_LOCK RemoveLock,
12854 #define IoReleaseRemoveLockAndWait(_RemoveLock, \
12856 IoReleaseRemoveLockAndWaitEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK))
12858 #if defined(_WIN64)
12862 IN PIRP Irp OPTIONAL
);
12865 #define PLUGPLAY_REGKEY_DEVICE 1
12866 #define PLUGPLAY_REGKEY_DRIVER 2
12867 #define PLUGPLAY_REGKEY_CURRENT_HWPROFILE 4
12871 IoGetCurrentIrpStackLocation(
12874 ASSERT(Irp
->CurrentLocation
<= Irp
->StackCount
+ 1);
12875 return Irp
->Tail
.Overlay
.CurrentStackLocation
;
12883 IoGetCurrentIrpStackLocation( (Irp
) )->Control
|= SL_PENDING_RETURNED
;
12888 * IoIsErrorUserInduced(
12889 * IN NTSTATUS Status);
12891 #define IoIsErrorUserInduced(Status) \
12892 ((BOOLEAN)(((Status) == STATUS_DEVICE_NOT_READY) || \
12893 ((Status) == STATUS_IO_TIMEOUT) || \
12894 ((Status) == STATUS_MEDIA_WRITE_PROTECTED) || \
12895 ((Status) == STATUS_NO_MEDIA_IN_DEVICE) || \
12896 ((Status) == STATUS_VERIFY_REQUIRED) || \
12897 ((Status) == STATUS_UNRECOGNIZED_MEDIA) || \
12898 ((Status) == STATUS_WRONG_VOLUME)))
12901 * IoInitializeRemoveLock(
12902 * IN PIO_REMOVE_LOCK Lock,
12903 * IN ULONG AllocateTag,
12904 * IN ULONG MaxLockedMinutes,
12905 * IN ULONG HighWatermark)
12907 #define IoInitializeRemoveLock( \
12908 Lock, AllocateTag, MaxLockedMinutes, HighWatermark) \
12909 IoInitializeRemoveLockEx(Lock, AllocateTag, MaxLockedMinutes, \
12910 HighWatermark, sizeof(IO_REMOVE_LOCK))
12914 IoInitializeDpcRequest(
12915 IN PDEVICE_OBJECT DeviceObject
,
12916 IN PIO_DPC_ROUTINE DpcRoutine
)
12918 KeInitializeDpc( &DeviceObject
->Dpc
,
12919 (PKDEFERRED_ROUTINE
) DpcRoutine
,
12923 #define DEVICE_INTERFACE_INCLUDE_NONACTIVE 0x00000001
12927 * IoGetFunctionCodeFromCtlCode(
12928 * IN ULONG ControlCode)
12930 #define IoGetFunctionCodeFromCtlCode(_ControlCode) \
12931 (((_ControlCode) >> 2) & 0x00000FFF)
12935 IoCopyCurrentIrpStackLocationToNext(
12938 PIO_STACK_LOCATION irpSp
;
12939 PIO_STACK_LOCATION nextIrpSp
;
12940 irpSp
= IoGetCurrentIrpStackLocation(Irp
);
12941 nextIrpSp
= IoGetNextIrpStackLocation(Irp
);
12942 RtlCopyMemory( nextIrpSp
, irpSp
, FIELD_OFFSET(IO_STACK_LOCATION
, CompletionRoutine
));
12943 nextIrpSp
->Control
= 0;
12950 OUT PULONG_PTR LowLimit
,
12951 OUT PULONG_PTR HighLimit
);
12955 IoGetRemainingStackSize(VOID
)
12957 ULONG_PTR End
, Begin
;
12960 IoGetStackLimits(&Begin
, &End
);
12961 Result
= (ULONG_PTR
)(&End
) - Begin
;
12965 #if (NTDDI_VERSION >= NTDDI_WS03)
12968 IoInitializeThreadedDpcRequest(
12969 IN PDEVICE_OBJECT DeviceObject
,
12970 IN PIO_DPC_ROUTINE DpcRoutine
)
12972 KeInitializeThreadedDpc(&DeviceObject
->Dpc
,
12973 (PKDEFERRED_ROUTINE
) DpcRoutine
,
12978 /******************************************************************************
12979 * Power Management Support Functions *
12980 ******************************************************************************/
12982 #define PoSetDeviceBusy(IdlePointer) ((void)(*(IdlePointer) = 0))
12984 #if (NTDDI_VERSION >= NTDDI_WIN2K)
12990 IN
struct _DEVICE_OBJECT
*DeviceObject
,
12991 IN OUT
struct _IRP
*Irp
);
12996 PoRegisterDeviceForIdleDetection(
12997 IN
struct _DEVICE_OBJECT
*DeviceObject
,
12998 IN ULONG ConservationIdleTime
,
12999 IN ULONG PerformanceIdleTime
,
13000 IN DEVICE_POWER_STATE State
);
13005 PoRegisterSystemState(
13006 IN OUT PVOID StateHandle OPTIONAL
,
13007 IN EXECUTION_STATE Flags
);
13013 IN
struct _DEVICE_OBJECT
*DeviceObject
,
13014 IN UCHAR MinorFunction
,
13015 IN POWER_STATE PowerState
,
13016 IN PREQUEST_POWER_COMPLETE CompletionFunction OPTIONAL
,
13017 IN PVOID Context OPTIONAL
,
13018 OUT
struct _IRP
**Irp OPTIONAL
);
13024 IN
struct _DEVICE_OBJECT
*DeviceObject
,
13025 IN POWER_STATE_TYPE Type
,
13026 IN POWER_STATE State
);
13032 IN EXECUTION_STATE Flags
);
13037 PoStartNextPowerIrp(
13038 IN OUT
struct _IRP
*Irp
);
13043 PoUnregisterSystemState(
13044 IN OUT PVOID StateHandle
);
13049 PoRequestShutdownEvent(
13052 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
13054 #if (NTDDI_VERSION >= NTDDI_VISTA)
13060 IN OUT
struct _IRP
*Irp
);
13066 IN
struct _IRP
*Irp
);
13071 PoRegisterPowerSettingCallback(
13072 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
13073 IN LPCGUID SettingGuid
,
13074 IN PPOWER_SETTING_CALLBACK Callback
,
13075 IN PVOID Context OPTIONAL
,
13076 OUT PVOID
*Handle OPTIONAL
);
13081 PoUnregisterPowerSettingCallback(
13082 IN OUT PVOID Handle
);
13084 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
13086 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
13091 IN OUT PULONG IdlePointer
);
13092 #endif /* (NTDDI_VERSION >= NTDDI_VISTASP1) */
13094 #if (NTDDI_VERSION >= NTDDI_WIN7)
13100 IN OUT PULONG IdlePointer
);
13106 IN OUT PULONG IdlePointer
);
13111 PoQueryWatchdogTime(
13112 IN PDEVICE_OBJECT Pdo
,
13113 OUT PULONG SecondsRemaining
);
13118 PoDeletePowerRequest(
13119 IN OUT PVOID PowerRequest
);
13125 IN OUT PVOID PowerRequest
,
13126 IN POWER_REQUEST_TYPE Type
);
13131 PoClearPowerRequest(
13132 IN OUT PVOID PowerRequest
,
13133 IN POWER_REQUEST_TYPE Type
);
13138 PoCreatePowerRequest(
13139 OUT PVOID
*PowerRequest
,
13140 IN PDEVICE_OBJECT DeviceObject
,
13141 IN PCOUNTED_REASON_CONTEXT Context
);
13143 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
13145 /******************************************************************************
13146 * Executive Functions *
13147 ******************************************************************************/
13149 #define ExInterlockedIncrementLong(Addend,Lock) Exfi386InterlockedIncrementLong(Addend)
13150 #define ExInterlockedDecrementLong(Addend,Lock) Exfi386InterlockedDecrementLong(Addend)
13151 #define ExInterlockedExchangeUlong(Target, Value, Lock) Exfi386InterlockedExchangeUlong(Target, Value)
13153 #define ExAcquireSpinLock(Lock, OldIrql) KeAcquireSpinLock((Lock), (OldIrql))
13154 #define ExReleaseSpinLock(Lock, OldIrql) KeReleaseSpinLock((Lock), (OldIrql))
13155 #define ExAcquireSpinLockAtDpcLevel(Lock) KeAcquireSpinLockAtDpcLevel(Lock)
13156 #define ExReleaseSpinLockFromDpcLevel(Lock) KeReleaseSpinLockFromDpcLevel(Lock)
13158 #define ExInitializeSListHead InitializeSListHead
13160 #if defined(_NTHAL_) && defined(_X86_)
13165 ExiAcquireFastMutex(
13166 IN OUT PFAST_MUTEX FastMutex
);
13171 ExiReleaseFastMutex(
13172 IN OUT PFAST_MUTEX FastMutex
);
13177 ExiTryToAcquireFastMutex(
13178 IN OUT PFAST_MUTEX FastMutex
);
13180 #define ExAcquireFastMutex ExiAcquireFastMutex
13181 #define ExReleaseFastMutex ExiReleaseFastMutex
13182 #define ExTryToAcquireFastMutex ExiTryToAcquireFastMutex
13186 #if (NTDDI_VERSION >= NTDDI_WIN2K)
13191 ExAcquireFastMutex(
13192 IN OUT PFAST_MUTEX FastMutex
);
13197 ExReleaseFastMutex(
13198 IN OUT PFAST_MUTEX FastMutex
);
13203 ExTryToAcquireFastMutex(
13204 IN OUT PFAST_MUTEX FastMutex
);
13206 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
13208 #endif /* defined(_NTHAL_) && defined(_X86_) */
13211 #define ExInterlockedAddUlong ExfInterlockedAddUlong
13212 #define ExInterlockedInsertHeadList ExfInterlockedInsertHeadList
13213 #define ExInterlockedInsertTailList ExfInterlockedInsertTailList
13214 #define ExInterlockedRemoveHeadList ExfInterlockedRemoveHeadList
13215 #define ExInterlockedPopEntryList ExfInterlockedPopEntryList
13216 #define ExInterlockedPushEntryList ExfInterlockedPushEntryList
13217 #endif /* defined(_X86_) */
13219 #if defined(_WIN64)
13221 #if defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTIFS_) || \
13222 defined(_NTHAL_) || defined(_NTOSP_)
13225 ExQueryDepthSList(IN PSLIST_HEADER ListHead
);
13229 ExQueryDepthSList(IN PSLIST_HEADER ListHead
)
13231 return (USHORT
)(ListHead
->Alignment
& 0xffff);
13237 ExpInterlockedFlushSList(
13238 PSLIST_HEADER ListHead
);
13242 ExpInterlockedPopEntrySList(
13243 PSLIST_HEADER ListHead
);
13247 ExpInterlockedPushEntrySList(
13248 PSLIST_HEADER ListHead
,
13249 PSLIST_ENTRY ListEntry
);
13251 #define ExInterlockedFlushSList(Head) \
13252 ExpInterlockedFlushSList(Head)
13253 #define ExInterlockedPopEntrySList(Head, Lock) \
13254 ExpInterlockedPopEntrySList(Head)
13255 #define ExInterlockedPushEntrySList(Head, Entry, Lock) \
13256 ExpInterlockedPushEntrySList(Head, Entry)
13258 #else /* !defined(_WIN64) */
13260 #define ExQueryDepthSList(listhead) (listhead)->Depth
13265 ExInterlockedFlushSList(
13266 IN OUT PSLIST_HEADER ListHead
);
13268 #endif /* !defined(_WIN64) */
13270 #if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_)
13275 ExInterlockedPopEntrySList(
13276 IN PSLIST_HEADER ListHead
,
13277 IN PKSPIN_LOCK Lock
);
13282 ExInterlockedPushEntrySList(
13283 IN PSLIST_HEADER ListHead
,
13284 IN PSINGLE_LIST_ENTRY ListEntry
,
13285 IN PKSPIN_LOCK Lock
);
13290 ExAllocateFromPagedLookasideList(
13291 IN OUT PPAGED_LOOKASIDE_LIST Lookaside
);
13296 ExFreeToPagedLookasideList(
13297 IN OUT PPAGED_LOOKASIDE_LIST Lookaside
,
13300 #else /* !_WIN2K_COMPAT_SLIST_USAGE */
13302 #if !defined(_WIN64)
13303 #define ExInterlockedPopEntrySList(_ListHead, _Lock) \
13304 InterlockedPopEntrySList(_ListHead)
13305 #define ExInterlockedPushEntrySList(_ListHead, _ListEntry, _Lock) \
13306 InterlockedPushEntrySList(_ListHead, _ListEntry)
13311 ExAllocateFromPagedLookasideList(
13312 IN OUT PPAGED_LOOKASIDE_LIST Lookaside
)
13316 Lookaside
->L
.TotalAllocates
++;
13317 Entry
= InterlockedPopEntrySList(&Lookaside
->L
.ListHead
);
13318 if (Entry
== NULL
) {
13319 Lookaside
->L
.AllocateMisses
++;
13320 Entry
= (Lookaside
->L
.Allocate
)(Lookaside
->L
.Type
,
13329 ExFreeToPagedLookasideList(
13330 IN OUT PPAGED_LOOKASIDE_LIST Lookaside
,
13333 Lookaside
->L
.TotalFrees
++;
13334 if (ExQueryDepthSList(&Lookaside
->L
.ListHead
) >= Lookaside
->L
.Depth
) {
13335 Lookaside
->L
.FreeMisses
++;
13336 (Lookaside
->L
.Free
)(Entry
);
13338 InterlockedPushEntrySList(&Lookaside
->L
.ListHead
, (PSLIST_ENTRY
)Entry
);
13342 #endif /* _WIN2K_COMPAT_SLIST_USAGE */
13345 /* ERESOURCE_THREAD
13346 * ExGetCurrentResourceThread(
13349 #define ExGetCurrentResourceThread() ((ULONG_PTR)PsGetCurrentThread())
13351 #define ExReleaseResource(R) (ExReleaseResourceLite(R))
13354 * ExInitializeWorkItem(
13355 * IN PWORK_QUEUE_ITEM Item,
13356 * IN PWORKER_THREAD_ROUTINE Routine,
13357 * IN PVOID Context)
13359 #define ExInitializeWorkItem(Item, Routine, Context) \
13361 (Item)->WorkerRoutine = Routine; \
13362 (Item)->Parameter = Context; \
13363 (Item)->List.Flink = NULL; \
13368 ExInitializeFastMutex(
13369 OUT PFAST_MUTEX FastMutex
)
13371 FastMutex
->Count
= FM_LOCK_BIT
;
13372 FastMutex
->Owner
= NULL
;
13373 FastMutex
->Contention
= 0;
13374 KeInitializeEvent(&FastMutex
->Event
, SynchronizationEvent
, FALSE
);
13379 #if (NTDDI_VERSION >= NTDDI_WIN2K)
13383 ExAcquireFastMutexUnsafe(
13384 IN OUT PFAST_MUTEX FastMutex
);
13389 ExReleaseFastMutexUnsafe(
13390 IN OUT PFAST_MUTEX FastMutex
);
13395 ExAcquireResourceExclusiveLite(
13396 IN OUT PERESOURCE Resource
,
13402 ExAcquireResourceSharedLite(
13403 IN OUT PERESOURCE Resource
,
13409 ExAcquireSharedStarveExclusive(
13410 IN OUT PERESOURCE Resource
,
13416 ExAcquireSharedWaitForExclusive(
13417 IN OUT PERESOURCE Resource
,
13424 IN POOL_TYPE PoolType
,
13425 IN SIZE_T NumberOfBytes
);
13430 ExAllocatePoolWithQuota(
13431 IN POOL_TYPE PoolType
,
13432 IN SIZE_T NumberOfBytes
);
13437 ExAllocatePoolWithQuotaTag(
13438 IN POOL_TYPE PoolType
,
13439 IN SIZE_T NumberOfBytes
,
13442 #ifndef POOL_TAGGING
13443 #define ExAllocatePoolWithQuotaTag(a,b,c) ExAllocatePoolWithQuota(a,b)
13449 ExAllocatePoolWithTag(
13450 IN POOL_TYPE PoolType
,
13451 IN SIZE_T NumberOfBytes
,
13454 #ifndef POOL_TAGGING
13455 #define ExAllocatePoolWithTag(a,b,c) ExAllocatePool(a,b)
13461 ExAllocatePoolWithTagPriority(
13462 IN POOL_TYPE PoolType
,
13463 IN SIZE_T NumberOfBytes
,
13465 IN EX_POOL_PRIORITY Priority
);
13470 ExConvertExclusiveToSharedLite(
13471 IN OUT PERESOURCE Resource
);
13477 OUT PCALLBACK_OBJECT
*CallbackObject
,
13478 IN POBJECT_ATTRIBUTES ObjectAttributes
,
13480 IN BOOLEAN AllowMultipleCallbacks
);
13485 ExDeleteNPagedLookasideList(
13486 IN OUT PNPAGED_LOOKASIDE_LIST Lookaside
);
13491 ExDeletePagedLookasideList(
13492 IN PPAGED_LOOKASIDE_LIST Lookaside
);
13497 ExDeleteResourceLite(
13498 IN OUT PERESOURCE Resource
);
13516 ExGetExclusiveWaiterCount(
13517 IN PERESOURCE Resource
);
13522 ExGetPreviousMode(VOID
);
13527 ExGetSharedWaiterCount(
13528 IN PERESOURCE Resource
);
13533 ExInitializeNPagedLookasideList(
13534 IN PNPAGED_LOOKASIDE_LIST Lookaside
,
13535 IN PALLOCATE_FUNCTION Allocate OPTIONAL
,
13536 IN PFREE_FUNCTION Free OPTIONAL
,
13545 ExInitializePagedLookasideList(
13546 IN PPAGED_LOOKASIDE_LIST Lookaside
,
13547 IN PALLOCATE_FUNCTION Allocate OPTIONAL
,
13548 IN PFREE_FUNCTION Free OPTIONAL
,
13557 ExInitializeResourceLite(
13558 OUT PERESOURCE Resource
);
13563 ExInterlockedAddLargeInteger(
13564 IN PLARGE_INTEGER Addend
,
13565 IN LARGE_INTEGER Increment
,
13566 IN PKSPIN_LOCK Lock
);
13568 #if defined(_WIN64)
13569 #define ExInterlockedAddLargeStatistic(Addend, Increment) \
13570 (VOID)InterlockedAdd64(&(Addend)->QuadPart, Increment)
13572 #define ExInterlockedAddLargeStatistic(Addend, Increment) \
13573 _InterlockedAddLargeStatistic((PLONGLONG)&(Addend)->QuadPart, Increment)
13579 ExInterlockedAddUlong(
13581 IN ULONG Increment
,
13582 IN OUT PKSPIN_LOCK Lock
);
13584 #if defined(_AMD64_) || defined(_IA64_)
13586 #define ExInterlockedCompareExchange64(Destination, Exchange, Comperand, Lock) \
13587 InterlockedCompareExchange64(Destination, *(Exchange), *(Comperand))
13589 #elif defined(_X86_)
13594 ExfInterlockedCompareExchange64(
13595 IN OUT LONGLONG
volatile *Destination
,
13596 IN PLONGLONG Exchange
,
13597 IN PLONGLONG Comperand
);
13599 #define ExInterlockedCompareExchange64(Destination, Exchange, Comperand, Lock) \
13600 ExfInterlockedCompareExchange64(Destination, Exchange, Comperand)
13607 ExInterlockedCompareExchange64(
13608 IN OUT LONGLONG
volatile *Destination
,
13609 IN PLONGLONG Exchange
,
13610 IN PLONGLONG Comparand
,
13611 IN PKSPIN_LOCK Lock
);
13613 #endif /* defined(_AMD64_) || defined(_IA64_) */
13618 ExInterlockedInsertHeadList(
13619 IN OUT PLIST_ENTRY ListHead
,
13620 IN OUT PLIST_ENTRY ListEntry
,
13621 IN OUT PKSPIN_LOCK Lock
);
13626 ExInterlockedInsertTailList(
13627 IN OUT PLIST_ENTRY ListHead
,
13628 IN OUT PLIST_ENTRY ListEntry
,
13629 IN OUT PKSPIN_LOCK Lock
);
13634 ExInterlockedPopEntryList(
13635 IN OUT PSINGLE_LIST_ENTRY ListHead
,
13636 IN OUT PKSPIN_LOCK Lock
);
13641 ExInterlockedPushEntryList(
13642 IN OUT PSINGLE_LIST_ENTRY ListHead
,
13643 IN OUT PSINGLE_LIST_ENTRY ListEntry
,
13644 IN OUT PKSPIN_LOCK Lock
);
13649 ExInterlockedRemoveHeadList(
13650 IN OUT PLIST_ENTRY ListHead
,
13651 IN OUT PKSPIN_LOCK Lock
);
13656 ExIsProcessorFeaturePresent(
13657 IN ULONG ProcessorFeature
);
13662 ExIsResourceAcquiredExclusiveLite(
13663 IN PERESOURCE Resource
);
13668 ExIsResourceAcquiredSharedLite(
13669 IN PERESOURCE Resource
);
13671 #define ExIsResourceAcquiredLite ExIsResourceAcquiredSharedLite
13676 ExLocalTimeToSystemTime(
13677 IN PLARGE_INTEGER LocalTime
,
13678 OUT PLARGE_INTEGER SystemTime
);
13684 IN PCALLBACK_OBJECT CallbackObject
,
13685 IN PVOID Argument1 OPTIONAL
,
13686 IN PVOID Argument2 OPTIONAL
);
13692 IN OUT PWORK_QUEUE_ITEM WorkItem
,
13693 IN WORK_QUEUE_TYPE QueueType
);
13700 IN NTSTATUS Status
);
13705 ExRegisterCallback(
13706 IN PCALLBACK_OBJECT CallbackObject
,
13707 IN PCALLBACK_FUNCTION CallbackFunction
,
13708 IN PVOID CallbackContext OPTIONAL
);
13713 ExReinitializeResourceLite(
13714 IN OUT PERESOURCE Resource
);
13719 ExReleaseResourceForThreadLite(
13720 IN OUT PERESOURCE Resource
,
13721 IN ERESOURCE_THREAD ResourceThreadId
);
13726 ExReleaseResourceLite(
13727 IN OUT PERESOURCE Resource
);
13732 ExSetResourceOwnerPointer(
13733 IN OUT PERESOURCE Resource
,
13734 IN PVOID OwnerPointer
);
13739 ExSetTimerResolution(
13740 IN ULONG DesiredTime
,
13741 IN BOOLEAN SetResolution
);
13746 ExSystemTimeToLocalTime(
13747 IN PLARGE_INTEGER SystemTime
,
13748 OUT PLARGE_INTEGER LocalTime
);
13753 ExUnregisterCallback(
13754 IN OUT PVOID CbRegistration
);
13756 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
13758 #if (NTDDI_VERSION >= NTDDI_WINXP)
13763 ExAcquireRundownProtection(
13764 IN OUT PEX_RUNDOWN_REF RunRef
);
13769 ExInitializeRundownProtection(
13770 OUT PEX_RUNDOWN_REF RunRef
);
13775 ExReInitializeRundownProtection(
13776 IN OUT PEX_RUNDOWN_REF RunRef
);
13781 ExReleaseRundownProtection(
13782 IN OUT PEX_RUNDOWN_REF RunRef
);
13787 ExRundownCompleted(
13788 OUT PEX_RUNDOWN_REF RunRef
);
13794 IN SUITE_TYPE SuiteType
);
13799 ExWaitForRundownProtectionRelease(
13800 IN OUT PEX_RUNDOWN_REF RunRef
);
13801 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
13803 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
13808 ExAcquireRundownProtectionEx(
13809 IN OUT PEX_RUNDOWN_REF RunRef
,
13815 ExReleaseRundownProtectionEx(
13816 IN OUT PEX_RUNDOWN_REF RunRef
,
13819 #endif /* (NTDDI_VERSION >= NTDDI_WINXPSP2) */
13821 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
13824 PEX_RUNDOWN_REF_CACHE_AWARE
13826 ExAllocateCacheAwareRundownProtection(
13827 IN POOL_TYPE PoolType
,
13833 ExSizeOfRundownProtectionCacheAware(VOID
);
13838 ExEnterCriticalRegionAndAcquireResourceShared(
13839 IN OUT PERESOURCE Resource
);
13844 ExEnterCriticalRegionAndAcquireResourceExclusive(
13845 IN OUT PERESOURCE Resource
);
13850 ExEnterCriticalRegionAndAcquireSharedWaitForExclusive(
13851 IN OUT PERESOURCE Resource
);
13856 ExReleaseResourceAndLeaveCriticalRegion(
13857 IN OUT PERESOURCE Resource
);
13862 ExInitializeRundownProtectionCacheAware(
13863 OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
,
13864 IN SIZE_T RunRefSize
);
13869 ExFreeCacheAwareRundownProtection(
13870 IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
);
13875 ExAcquireRundownProtectionCacheAware(
13876 IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
);
13881 ExReleaseRundownProtectionCacheAware(
13882 IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
);
13887 ExAcquireRundownProtectionCacheAwareEx(
13888 IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
,
13894 ExReleaseRundownProtectionCacheAwareEx(
13895 IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRef
,
13901 ExWaitForRundownProtectionReleaseCacheAware(
13902 IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRef
);
13907 ExReInitializeRundownProtectionCacheAware(
13908 IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
);
13913 ExRundownCompletedCacheAware(
13914 IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
);
13916 #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
13918 #if (NTDDI_VERSION >= NTDDI_VISTA)
13923 ExInitializeLookasideListEx(
13924 OUT PLOOKASIDE_LIST_EX Lookaside
,
13925 IN PALLOCATE_FUNCTION_EX Allocate OPTIONAL
,
13926 IN PFREE_FUNCTION_EX Free OPTIONAL
,
13927 IN POOL_TYPE PoolType
,
13936 ExDeleteLookasideListEx(
13937 IN OUT PLOOKASIDE_LIST_EX Lookaside
);
13942 ExFlushLookasideListEx(
13943 IN OUT PLOOKASIDE_LIST_EX Lookaside
);
13947 ExAllocateFromLookasideListEx(
13948 IN OUT PLOOKASIDE_LIST_EX Lookaside
)
13952 Lookaside
->L
.TotalAllocates
+= 1;
13953 Entry
= InterlockedPopEntrySList(&Lookaside
->L
.ListHead
);
13954 if (Entry
== NULL
) {
13955 Lookaside
->L
.AllocateMisses
+= 1;
13956 Entry
= (Lookaside
->L
.AllocateEx
)(Lookaside
->L
.Type
,
13966 ExFreeToLookasideListEx(
13967 IN OUT PLOOKASIDE_LIST_EX Lookaside
,
13970 Lookaside
->L
.TotalFrees
+= 1;
13971 if (ExQueryDepthSList(&Lookaside
->L
.ListHead
) >= Lookaside
->L
.Depth
) {
13972 Lookaside
->L
.FreeMisses
+= 1;
13973 (Lookaside
->L
.FreeEx
)(Entry
, Lookaside
);
13975 InterlockedPushEntrySList(&Lookaside
->L
.ListHead
, (PSLIST_ENTRY
)Entry
);
13980 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
13982 #if (NTDDI_VERSION >= NTDDI_WIN7)
13987 ExSetResourceOwnerPointerEx(
13988 IN OUT PERESOURCE Resource
,
13989 IN PVOID OwnerPointer
,
13992 #define FLAG_OWNER_POINTER_IS_THREAD 0x1
13994 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
13996 static __inline PVOID
13997 ExAllocateFromNPagedLookasideList(
13998 IN OUT PNPAGED_LOOKASIDE_LIST Lookaside
)
14002 Lookaside
->L
.TotalAllocates
++;
14003 #if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_)
14004 Entry
= ExInterlockedPopEntrySList(&Lookaside
->L
.ListHead
,
14005 &Lookaside
->Lock__ObsoleteButDoNotDelete
);
14007 Entry
= InterlockedPopEntrySList(&Lookaside
->L
.ListHead
);
14009 if (Entry
== NULL
) {
14010 Lookaside
->L
.AllocateMisses
++;
14011 Entry
= (Lookaside
->L
.Allocate
)(Lookaside
->L
.Type
,
14018 static __inline VOID
14019 ExFreeToNPagedLookasideList(
14020 IN OUT PNPAGED_LOOKASIDE_LIST Lookaside
,
14023 Lookaside
->L
.TotalFrees
++;
14024 if (ExQueryDepthSList(&Lookaside
->L
.ListHead
) >= Lookaside
->L
.Depth
) {
14025 Lookaside
->L
.FreeMisses
++;
14026 (Lookaside
->L
.Free
)(Entry
);
14028 #if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_)
14029 ExInterlockedPushEntrySList(&Lookaside
->L
.ListHead
,
14030 (PSLIST_ENTRY
)Entry
,
14031 &Lookaside
->Lock__ObsoleteButDoNotDelete
);
14033 InterlockedPushEntrySList(&Lookaside
->L
.ListHead
, (PSLIST_ENTRY
)Entry
);
14038 /******************************************************************************
14039 * Object Manager Functions *
14040 ******************************************************************************/
14042 #if (NTDDI_VERSION >= NTDDI_WIN2K)
14046 ObfDereferenceObject(
14048 #define ObDereferenceObject ObfDereferenceObject
14053 ObGetObjectSecurity(
14055 OUT PSECURITY_DESCRIPTOR
*SecurityDescriptor
,
14056 OUT PBOOLEAN MemoryAllocated
);
14061 ObfReferenceObject(
14063 #define ObReferenceObject ObfReferenceObject
14068 ObReferenceObjectByHandle(
14070 IN ACCESS_MASK DesiredAccess
,
14071 IN POBJECT_TYPE ObjectType OPTIONAL
,
14072 IN KPROCESSOR_MODE AccessMode
,
14074 OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL
);
14079 ObReferenceObjectByPointer(
14081 IN ACCESS_MASK DesiredAccess
,
14082 IN POBJECT_TYPE ObjectType OPTIONAL
,
14083 IN KPROCESSOR_MODE AccessMode
);
14088 ObReleaseObjectSecurity(
14089 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
14090 IN BOOLEAN MemoryAllocated
);
14091 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
14093 #if (NTDDI_VERSION >= NTDDI_VISTA)
14097 ObDereferenceObjectDeferDelete(
14101 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
14105 ObRegisterCallbacks(
14106 IN POB_CALLBACK_REGISTRATION CallbackRegistration
,
14107 OUT PVOID
*RegistrationHandle
);
14112 ObUnRegisterCallbacks(
14113 IN PVOID RegistrationHandle
);
14118 ObGetFilterVersion(VOID
);
14120 #endif /* (NTDDI_VERSION >= NTDDI_VISTASP1) */
14122 #if (NTDDI_VERSION >= NTDDI_WIN7)
14126 ObReferenceObjectByHandleWithTag(
14128 IN ACCESS_MASK DesiredAccess
,
14129 IN POBJECT_TYPE ObjectType OPTIONAL
,
14130 IN KPROCESSOR_MODE AccessMode
,
14133 OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL
);
14138 ObfReferenceObjectWithTag(
14145 ObReferenceObjectByPointerWithTag(
14147 IN ACCESS_MASK DesiredAccess
,
14148 IN POBJECT_TYPE ObjectType OPTIONAL
,
14149 IN KPROCESSOR_MODE AccessMode
,
14155 ObfDereferenceObjectWithTag(
14162 ObDereferenceObjectDeferDeleteWithTag(
14166 #define ObDereferenceObject ObfDereferenceObject
14167 #define ObReferenceObject ObfReferenceObject
14168 #define ObDereferenceObjectWithTag ObfDereferenceObjectWithTag
14169 #define ObReferenceObjectWithTag ObfReferenceObjectWithTag
14170 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
14172 /******************************************************************************
14173 * Process Manager Functions *
14174 ******************************************************************************/
14179 PsWrapApcWow64Thread(
14180 IN OUT PVOID
*ApcContext
,
14181 IN OUT PVOID
*ApcRoutine
);
14185 * PsGetCurrentProcess(VOID)
14187 #define PsGetCurrentProcess IoGetCurrentProcess
14189 #if !defined(_PSGETCURRENTTHREAD_)
14190 #define _PSGETCURRENTTHREAD_
14194 PsGetCurrentThread(VOID
)
14196 return (PETHREAD
)KeGetCurrentThread();
14198 #endif /* !_PSGETCURRENTTHREAD_ */
14201 #if (NTDDI_VERSION >= NTDDI_WIN2K)
14206 PsCreateSystemThread(
14207 OUT PHANDLE ThreadHandle
,
14208 IN ULONG DesiredAccess
,
14209 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
14210 IN HANDLE ProcessHandle OPTIONAL
,
14211 OUT PCLIENT_ID ClientId OPTIONAL
,
14212 IN PKSTART_ROUTINE StartRoutine
,
14213 IN PVOID StartContext OPTIONAL
);
14218 PsTerminateSystemThread(
14219 IN NTSTATUS ExitStatus
);
14221 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
14224 /******************************************************************************
14225 * WMI Library Support Functions *
14226 ******************************************************************************/
14229 #if (NTDDI_VERSION >= NTDDI_WINXP)
14234 IN TRACEHANDLE LoggerHandle
,
14235 IN ULONG MessageFlags
,
14236 IN LPGUID MessageGuid
,
14237 IN USHORT MessageNumber
,
14240 #endif /* RUN_WPP */
14242 #if (NTDDI_VERSION >= NTDDI_WINXP)
14247 WmiQueryTraceInformation(
14248 IN TRACE_INFORMATION_CLASS TraceInformationClass
,
14249 OUT PVOID TraceInformation
,
14250 IN ULONG TraceInformationLength
,
14251 OUT PULONG RequiredLength OPTIONAL
,
14252 IN PVOID Buffer OPTIONAL
);
14255 /* FIXME: Get va_list from where? */
14260 IN TRACEHANDLE LoggerHandle
,
14261 IN ULONG MessageFlags
,
14262 IN LPGUID MessageGuid
,
14263 IN USHORT MessageNumber
,
14264 IN
va_list MessageArgList
);
14267 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
14269 #ifndef TRACE_INFORMATION_CLASS_DEFINE
14271 #if (NTDDI_VERSION >= NTDDI_WINXP)
14275 WmiQueryTraceInformation(
14276 IN TRACE_INFORMATION_CLASS TraceInformationClass
,
14277 OUT PVOID TraceInformation
,
14278 IN ULONG TraceInformationLength
,
14279 OUT PULONG RequiredLength OPTIONAL
,
14280 IN PVOID Buffer OPTIONAL
);
14283 #define TRACE_INFORMATION_CLASS_DEFINE
14285 #endif /* TRACE_INFOPRMATION_CLASS_DEFINE */
14287 #if (NTDDI_VERSION >= NTDDI_VISTA)
14293 IN LPCGUID ProviderId
,
14294 IN PETWENABLECALLBACK EnableCallback OPTIONAL
,
14295 IN PVOID CallbackContext OPTIONAL
,
14296 OUT PREGHANDLE RegHandle
);
14302 IN REGHANDLE RegHandle
);
14308 IN REGHANDLE RegHandle
,
14309 IN PCEVENT_DESCRIPTOR EventDescriptor
);
14314 EtwProviderEnabled(
14315 IN REGHANDLE RegHandle
,
14317 IN ULONGLONG Keyword
);
14322 EtwActivityIdControl(
14323 IN ULONG ControlCode
,
14324 IN OUT LPGUID ActivityId
);
14330 IN REGHANDLE RegHandle
,
14331 IN PCEVENT_DESCRIPTOR EventDescriptor
,
14332 IN LPCGUID ActivityId OPTIONAL
,
14333 IN ULONG UserDataCount
,
14334 IN PEVENT_DATA_DESCRIPTOR UserData OPTIONAL
);
14340 IN REGHANDLE RegHandle
,
14341 IN PCEVENT_DESCRIPTOR EventDescriptor
,
14342 IN LPCGUID ActivityId OPTIONAL
,
14343 IN LPCGUID RelatedActivityId OPTIONAL
,
14344 IN ULONG UserDataCount
,
14345 IN PEVENT_DATA_DESCRIPTOR UserData OPTIONAL
);
14351 IN REGHANDLE RegHandle
,
14353 IN ULONGLONG Keyword
,
14354 IN LPCGUID ActivityId OPTIONAL
,
14357 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
14359 #if (NTDDI_VERSION >= NTDDI_WIN7)
14364 IN REGHANDLE RegHandle
,
14365 IN PCEVENT_DESCRIPTOR EventDescriptor
,
14368 IN LPCGUID ActivityId OPTIONAL
,
14369 IN LPCGUID RelatedActivityId OPTIONAL
,
14370 IN ULONG UserDataCount
,
14371 IN PEVENT_DATA_DESCRIPTOR UserData OPTIONAL
);
14376 /******************************************************************************
14377 * Kernel Debugger Functions *
14378 ******************************************************************************/
14388 #if (NTDDI_VERSION >= NTDDI_WIN2K)
14392 DbgPrintReturnControlC(
14397 #if (NTDDI_VERSION >= NTDDI_WINXP)
14403 IN ULONG ComponentId
,
14408 #ifdef _VA_LIST_DEFINED
14414 IN ULONG ComponentId
,
14422 vDbgPrintExWithPrefix(
14424 IN ULONG ComponentId
,
14429 #endif /* _VA_LIST_DEFINED */
14434 DbgQueryDebugFilterState(
14435 IN ULONG ComponentId
,
14441 DbgSetDebugFilterState(
14442 IN ULONG ComponentId
,
14446 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
14448 #if (NTDDI_VERSION >= NTDDI_VISTA)
14451 (*PDEBUG_PRINT_CALLBACK
)(
14453 IN ULONG ComponentId
,
14459 DbgSetDebugPrintCallback(
14460 IN PDEBUG_PRINT_CALLBACK DebugPrintCallback
,
14461 IN BOOLEAN Enable
);
14463 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
14465 #endif /* _DBGNT_ */
14469 #define KdPrint(_x_) DbgPrint _x_
14470 #define KdPrintEx(_x_) DbgPrintEx _x_
14471 #define vKdPrintEx(_x_) vDbgPrintEx _x_
14472 #define vKdPrintExWithPrefix(_x_) vDbgPrintExWithPrefix _x_
14473 #define KdBreakPoint() DbgBreakPoint()
14474 #define KdBreakPointWithStatus(s) DbgBreakPointWithStatus(s)
14478 #define KdPrint(_x_)
14479 #define KdPrintEx(_x_)
14480 #define vKdPrintEx(_x_)
14481 #define vKdPrintExWithPrefix(_x_)
14482 #define KdBreakPoint()
14483 #define KdBreakPointWithStatus(s)
14487 #if defined(__GNUC__)
14489 extern NTKERNELAPI BOOLEAN KdDebuggerNotPresent
;
14490 extern NTKERNELAPI BOOLEAN KdDebuggerEnabled
;
14491 #define KD_DEBUGGER_ENABLED KdDebuggerEnabled
14492 #define KD_DEBUGGER_NOT_PRESENT KdDebuggerNotPresent
14494 #elif defined(_NTDDK_) || defined(_NTIFS_) || defined(_NTHAL_) || defined(_WDMDDK_) || defined(_NTOSP_)
14496 extern NTKERNELAPI PBOOLEAN KdDebuggerNotPresent
;
14497 extern NTKERNELAPI PBOOLEAN KdDebuggerEnabled
;
14498 #define KD_DEBUGGER_ENABLED *KdDebuggerEnabled
14499 #define KD_DEBUGGER_NOT_PRESENT *KdDebuggerNotPresent
14503 extern BOOLEAN KdDebuggerNotPresent
;
14504 extern BOOLEAN KdDebuggerEnabled
;
14505 #define KD_DEBUGGER_ENABLED KdDebuggerEnabled
14506 #define KD_DEBUGGER_NOT_PRESENT KdDebuggerNotPresent
14510 #if (NTDDI_VERSION >= NTDDI_WIN2K)
14515 KdDisableDebugger(VOID
);
14520 KdEnableDebugger(VOID
);
14522 #if (_MSC_FULL_VER >= 150030729) && !defined(IMPORT_NATIVE_DBG_BREAK)
14523 #define DbgBreakPoint __debugbreak
14527 DbgBreakPoint(VOID
);
14533 DbgBreakPointWithStatus(
14536 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
14538 #if (NTDDI_VERSION >= NTDDI_WS03)
14542 KdRefreshDebuggerNotPresent(VOID
);
14545 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
14550 IN KD_OPTION Option
,
14551 IN ULONG InBufferBytes OPTIONAL
,
14553 IN ULONG OutBufferBytes OPTIONAL
,
14554 OUT PVOID OutBuffer
,
14555 OUT PULONG OutBufferNeeded OPTIONAL
);
14557 /* Hardware Abstraction Layer Functions */
14559 #if (NTDDI_VERSION >= NTDDI_WIN2K)
14561 #if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
14566 HalAllocateCommonBuffer(
14567 IN PDMA_ADAPTER DmaAdapter
,
14569 OUT PPHYSICAL_ADDRESS LogicalAddress
,
14570 IN BOOLEAN CacheEnabled
)
14572 PALLOCATE_COMMON_BUFFER allocateCommonBuffer
;
14573 PVOID commonBuffer
;
14575 allocateCommonBuffer
= *(DmaAdapter
)->DmaOperations
->AllocateCommonBuffer
;
14576 ASSERT( allocateCommonBuffer
!= NULL
);
14577 commonBuffer
= allocateCommonBuffer( DmaAdapter
, Length
, LogicalAddress
, CacheEnabled
);
14578 return commonBuffer
;
14584 HalFreeCommonBuffer(
14585 IN PDMA_ADAPTER DmaAdapter
,
14587 IN PHYSICAL_ADDRESS LogicalAddress
,
14588 IN PVOID VirtualAddress
,
14589 IN BOOLEAN CacheEnabled
)
14591 PFREE_COMMON_BUFFER freeCommonBuffer
;
14593 freeCommonBuffer
= *(DmaAdapter
)->DmaOperations
->FreeCommonBuffer
;
14594 ASSERT( freeCommonBuffer
!= NULL
);
14595 freeCommonBuffer( DmaAdapter
, Length
, LogicalAddress
, VirtualAddress
, CacheEnabled
);
14602 IN PDMA_ADAPTER DmaAdapter
)
14604 PREAD_DMA_COUNTER readDmaCounter
;
14607 readDmaCounter
= *(DmaAdapter
)->DmaOperations
->ReadDmaCounter
;
14608 ASSERT( readDmaCounter
!= NULL
);
14609 counter
= readDmaCounter( DmaAdapter
);
14615 HalGetDmaAlignment(
14616 IN PDMA_ADAPTER DmaAdapter
)
14618 PGET_DMA_ALIGNMENT getDmaAlignment
;
14621 getDmaAlignment
= *(DmaAdapter
)->DmaOperations
->GetDmaAlignment
;
14622 ASSERT( getDmaAlignment
!= NULL
);
14623 alignment
= getDmaAlignment( DmaAdapter
);
14627 #endif /* USE_DMA_MACROS ... */
14629 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
14634 #include <ktmtypes.h>
14636 #define TRANSACTIONMANAGER_QUERY_INFORMATION (0x0001)
14637 #define TRANSACTIONMANAGER_SET_INFORMATION (0x0002)
14638 #define TRANSACTIONMANAGER_RECOVER (0x0004)
14639 #define TRANSACTIONMANAGER_RENAME (0x0008)
14640 #define TRANSACTIONMANAGER_CREATE_RM (0x0010)
14641 #define TRANSACTIONMANAGER_BIND_TRANSACTION (0x0020)
14643 #define TRANSACTIONMANAGER_GENERIC_READ (STANDARD_RIGHTS_READ |\
14644 TRANSACTIONMANAGER_QUERY_INFORMATION)
14646 #define TRANSACTIONMANAGER_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\
14647 TRANSACTIONMANAGER_SET_INFORMATION |\
14648 TRANSACTIONMANAGER_RECOVER |\
14649 TRANSACTIONMANAGER_RENAME |\
14650 TRANSACTIONMANAGER_CREATE_RM)
14652 #define TRANSACTIONMANAGER_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE)
14654 #define TRANSACTIONMANAGER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\
14655 TRANSACTIONMANAGER_GENERIC_READ |\
14656 TRANSACTIONMANAGER_GENERIC_WRITE |\
14657 TRANSACTIONMANAGER_GENERIC_EXECUTE |\
14658 TRANSACTIONMANAGER_BIND_TRANSACTION)
14660 #define TRANSACTION_QUERY_INFORMATION (0x0001)
14661 #define TRANSACTION_SET_INFORMATION (0x0002)
14662 #define TRANSACTION_ENLIST (0x0004)
14663 #define TRANSACTION_COMMIT (0x0008)
14664 #define TRANSACTION_ROLLBACK (0x0010)
14665 #define TRANSACTION_PROPAGATE (0x0020)
14666 #define TRANSACTION_RIGHT_RESERVED1 (0x0040)
14668 #define TRANSACTION_GENERIC_READ (STANDARD_RIGHTS_READ |\
14669 TRANSACTION_QUERY_INFORMATION |\
14672 #define TRANSACTION_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\
14673 TRANSACTION_SET_INFORMATION |\
14674 TRANSACTION_COMMIT |\
14675 TRANSACTION_ENLIST |\
14676 TRANSACTION_ROLLBACK |\
14677 TRANSACTION_PROPAGATE |\
14680 #define TRANSACTION_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE |\
14681 TRANSACTION_COMMIT |\
14682 TRANSACTION_ROLLBACK |\
14685 #define TRANSACTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\
14686 TRANSACTION_GENERIC_READ |\
14687 TRANSACTION_GENERIC_WRITE |\
14688 TRANSACTION_GENERIC_EXECUTE)
14690 #define TRANSACTION_RESOURCE_MANAGER_RIGHTS (TRANSACTION_GENERIC_READ |\
14691 STANDARD_RIGHTS_WRITE |\
14692 TRANSACTION_SET_INFORMATION |\
14693 TRANSACTION_ENLIST |\
14694 TRANSACTION_ROLLBACK |\
14695 TRANSACTION_PROPAGATE |\
14698 #define RESOURCEMANAGER_QUERY_INFORMATION (0x0001)
14699 #define RESOURCEMANAGER_SET_INFORMATION (0x0002)
14700 #define RESOURCEMANAGER_RECOVER (0x0004)
14701 #define RESOURCEMANAGER_ENLIST (0x0008)
14702 #define RESOURCEMANAGER_GET_NOTIFICATION (0x0010)
14703 #define RESOURCEMANAGER_REGISTER_PROTOCOL (0x0020)
14704 #define RESOURCEMANAGER_COMPLETE_PROPAGATION (0x0040)
14706 #define RESOURCEMANAGER_GENERIC_READ (STANDARD_RIGHTS_READ |\
14707 RESOURCEMANAGER_QUERY_INFORMATION |\
14710 #define RESOURCEMANAGER_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\
14711 RESOURCEMANAGER_SET_INFORMATION |\
14712 RESOURCEMANAGER_RECOVER |\
14713 RESOURCEMANAGER_ENLIST |\
14714 RESOURCEMANAGER_GET_NOTIFICATION |\
14715 RESOURCEMANAGER_REGISTER_PROTOCOL |\
14716 RESOURCEMANAGER_COMPLETE_PROPAGATION |\
14719 #define RESOURCEMANAGER_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE |\
14720 RESOURCEMANAGER_RECOVER |\
14721 RESOURCEMANAGER_ENLIST |\
14722 RESOURCEMANAGER_GET_NOTIFICATION |\
14723 RESOURCEMANAGER_COMPLETE_PROPAGATION |\
14726 #define RESOURCEMANAGER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\
14727 RESOURCEMANAGER_GENERIC_READ |\
14728 RESOURCEMANAGER_GENERIC_WRITE |\
14729 RESOURCEMANAGER_GENERIC_EXECUTE)
14731 #define ENLISTMENT_QUERY_INFORMATION (0x0001)
14732 #define ENLISTMENT_SET_INFORMATION (0x0002)
14733 #define ENLISTMENT_RECOVER (0x0004)
14734 #define ENLISTMENT_SUBORDINATE_RIGHTS (0x0008)
14735 #define ENLISTMENT_SUPERIOR_RIGHTS (0x0010)
14737 #define ENLISTMENT_GENERIC_READ (STANDARD_RIGHTS_READ |\
14738 ENLISTMENT_QUERY_INFORMATION)
14740 #define ENLISTMENT_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\
14741 ENLISTMENT_SET_INFORMATION |\
14742 ENLISTMENT_RECOVER |\
14743 ENLISTMENT_SUBORDINATE_RIGHTS |\
14744 ENLISTMENT_SUPERIOR_RIGHTS)
14746 #define ENLISTMENT_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE |\
14747 ENLISTMENT_RECOVER |\
14748 ENLISTMENT_SUBORDINATE_RIGHTS |\
14749 ENLISTMENT_SUPERIOR_RIGHTS)
14751 #define ENLISTMENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\
14752 ENLISTMENT_GENERIC_READ |\
14753 ENLISTMENT_GENERIC_WRITE |\
14754 ENLISTMENT_GENERIC_EXECUTE)
14756 typedef enum _TRANSACTION_OUTCOME
{
14757 TransactionOutcomeUndetermined
= 1,
14758 TransactionOutcomeCommitted
,
14759 TransactionOutcomeAborted
,
14760 } TRANSACTION_OUTCOME
;
14763 typedef enum _TRANSACTION_STATE
{
14764 TransactionStateNormal
= 1,
14765 TransactionStateIndoubt
,
14766 TransactionStateCommittedNotify
,
14767 } TRANSACTION_STATE
;
14770 typedef struct _TRANSACTION_BASIC_INFORMATION
{
14771 GUID TransactionId
;
14774 } TRANSACTION_BASIC_INFORMATION
, *PTRANSACTION_BASIC_INFORMATION
;
14776 typedef struct _TRANSACTIONMANAGER_BASIC_INFORMATION
{
14778 LARGE_INTEGER VirtualClock
;
14779 } TRANSACTIONMANAGER_BASIC_INFORMATION
, *PTRANSACTIONMANAGER_BASIC_INFORMATION
;
14781 typedef struct _TRANSACTIONMANAGER_LOG_INFORMATION
{
14783 } TRANSACTIONMANAGER_LOG_INFORMATION
, *PTRANSACTIONMANAGER_LOG_INFORMATION
;
14785 typedef struct _TRANSACTIONMANAGER_LOGPATH_INFORMATION
{
14786 ULONG LogPathLength
;
14788 } TRANSACTIONMANAGER_LOGPATH_INFORMATION
, *PTRANSACTIONMANAGER_LOGPATH_INFORMATION
;
14790 typedef struct _TRANSACTIONMANAGER_RECOVERY_INFORMATION
{
14791 ULONGLONG LastRecoveredLsn
;
14792 } TRANSACTIONMANAGER_RECOVERY_INFORMATION
, *PTRANSACTIONMANAGER_RECOVERY_INFORMATION
;
14794 typedef struct _TRANSACTION_PROPERTIES_INFORMATION
{
14795 ULONG IsolationLevel
;
14796 ULONG IsolationFlags
;
14797 LARGE_INTEGER Timeout
;
14799 ULONG DescriptionLength
;
14800 WCHAR Description
[1];
14801 } TRANSACTION_PROPERTIES_INFORMATION
, *PTRANSACTION_PROPERTIES_INFORMATION
;
14803 typedef struct _TRANSACTION_BIND_INFORMATION
{
14805 } TRANSACTION_BIND_INFORMATION
, *PTRANSACTION_BIND_INFORMATION
;
14807 typedef struct _TRANSACTION_ENLISTMENT_PAIR
{
14809 GUID ResourceManagerId
;
14810 } TRANSACTION_ENLISTMENT_PAIR
, *PTRANSACTION_ENLISTMENT_PAIR
;
14812 typedef struct _TRANSACTION_ENLISTMENTS_INFORMATION
{
14813 ULONG NumberOfEnlistments
;
14814 TRANSACTION_ENLISTMENT_PAIR EnlistmentPair
[1];
14815 } TRANSACTION_ENLISTMENTS_INFORMATION
, *PTRANSACTION_ENLISTMENTS_INFORMATION
;
14817 typedef struct _TRANSACTION_SUPERIOR_ENLISTMENT_INFORMATION
{
14818 TRANSACTION_ENLISTMENT_PAIR SuperiorEnlistmentPair
;
14819 } TRANSACTION_SUPERIOR_ENLISTMENT_INFORMATION
, *PTRANSACTION_SUPERIOR_ENLISTMENT_INFORMATION
;
14821 typedef struct _RESOURCEMANAGER_BASIC_INFORMATION
{
14822 GUID ResourceManagerId
;
14823 ULONG DescriptionLength
;
14824 WCHAR Description
[1];
14825 } RESOURCEMANAGER_BASIC_INFORMATION
, *PRESOURCEMANAGER_BASIC_INFORMATION
;
14827 typedef struct _RESOURCEMANAGER_COMPLETION_INFORMATION
{
14828 HANDLE IoCompletionPortHandle
;
14829 ULONG_PTR CompletionKey
;
14830 } RESOURCEMANAGER_COMPLETION_INFORMATION
, *PRESOURCEMANAGER_COMPLETION_INFORMATION
;
14832 typedef enum _KTMOBJECT_TYPE
{
14833 KTMOBJECT_TRANSACTION
,
14834 KTMOBJECT_TRANSACTION_MANAGER
,
14835 KTMOBJECT_RESOURCE_MANAGER
,
14836 KTMOBJECT_ENLISTMENT
,
14838 } KTMOBJECT_TYPE
, *PKTMOBJECT_TYPE
;
14840 typedef struct _KTMOBJECT_CURSOR
{
14842 ULONG ObjectIdCount
;
14844 } KTMOBJECT_CURSOR
, *PKTMOBJECT_CURSOR
;
14846 typedef enum _TRANSACTION_INFORMATION_CLASS
{
14847 TransactionBasicInformation
,
14848 TransactionPropertiesInformation
,
14849 TransactionEnlistmentInformation
,
14850 TransactionSuperiorEnlistmentInformation
14851 } TRANSACTION_INFORMATION_CLASS
;
14853 typedef enum _TRANSACTIONMANAGER_INFORMATION_CLASS
{
14854 TransactionManagerBasicInformation
,
14855 TransactionManagerLogInformation
,
14856 TransactionManagerLogPathInformation
,
14857 TransactionManagerRecoveryInformation
= 4
14858 } TRANSACTIONMANAGER_INFORMATION_CLASS
;
14860 typedef enum _RESOURCEMANAGER_INFORMATION_CLASS
{
14861 ResourceManagerBasicInformation
,
14862 ResourceManagerCompletionInformation
,
14863 } RESOURCEMANAGER_INFORMATION_CLASS
;
14865 typedef struct _ENLISTMENT_BASIC_INFORMATION
{
14867 GUID TransactionId
;
14868 GUID ResourceManagerId
;
14869 } ENLISTMENT_BASIC_INFORMATION
, *PENLISTMENT_BASIC_INFORMATION
;
14871 typedef struct _ENLISTMENT_CRM_INFORMATION
{
14872 GUID CrmTransactionManagerId
;
14873 GUID CrmResourceManagerId
;
14874 GUID CrmEnlistmentId
;
14875 } ENLISTMENT_CRM_INFORMATION
, *PENLISTMENT_CRM_INFORMATION
;
14877 typedef enum _ENLISTMENT_INFORMATION_CLASS
{
14878 EnlistmentBasicInformation
,
14879 EnlistmentRecoveryInformation
,
14880 EnlistmentCrmInformation
14881 } ENLISTMENT_INFORMATION_CLASS
;
14883 typedef struct _TRANSACTION_LIST_ENTRY
{
14884 #if defined(__cplusplus)
14889 } TRANSACTION_LIST_ENTRY
, *PTRANSACTION_LIST_ENTRY
;
14891 typedef struct _TRANSACTION_LIST_INFORMATION
{
14892 ULONG NumberOfTransactions
;
14893 TRANSACTION_LIST_ENTRY TransactionInformation
[1];
14894 } TRANSACTION_LIST_INFORMATION
, *PTRANSACTION_LIST_INFORMATION
;
14897 (NTAPI
*PFN_NT_CREATE_TRANSACTION
)(
14898 OUT PHANDLE TransactionHandle
,
14899 IN ACCESS_MASK DesiredAccess
,
14900 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
14901 IN LPGUID Uow OPTIONAL
,
14902 IN HANDLE TmHandle OPTIONAL
,
14903 IN ULONG CreateOptions OPTIONAL
,
14904 IN ULONG IsolationLevel OPTIONAL
,
14905 IN ULONG IsolationFlags OPTIONAL
,
14906 IN PLARGE_INTEGER Timeout OPTIONAL
,
14907 IN PUNICODE_STRING Description OPTIONAL
);
14910 (NTAPI
*PFN_NT_OPEN_TRANSACTION
)(
14911 OUT PHANDLE TransactionHandle
,
14912 IN ACCESS_MASK DesiredAccess
,
14913 IN POBJECT_ATTRIBUTES ObjectAttributes
,
14914 IN LPGUID Uow OPTIONAL
,
14915 IN HANDLE TmHandle OPTIONAL
);
14918 (NTAPI
*PFN_NT_QUERY_INFORMATION_TRANSACTION
)(
14919 IN HANDLE TransactionHandle
,
14920 IN TRANSACTION_INFORMATION_CLASS TransactionInformationClass
,
14921 OUT PVOID TransactionInformation
,
14922 IN ULONG TransactionInformationLength
,
14923 OUT PULONG ReturnLength OPTIONAL
);
14926 (NTAPI
*PFN_NT_SET_INFORMATION_TRANSACTION
)(
14927 IN HANDLE TransactionHandle
,
14928 IN TRANSACTION_INFORMATION_CLASS TransactionInformationClass
,
14929 IN PVOID TransactionInformation
,
14930 IN ULONG TransactionInformationLength
);
14933 (NTAPI
*PFN_NT_COMMIT_TRANSACTION
)(
14934 IN HANDLE TransactionHandle
,
14938 (NTAPI
*PFN_NT_ROLLBACK_TRANSACTION
)(
14939 IN HANDLE TransactionHandle
,
14942 #if (NTDDI_VERSION >= NTDDI_VISTA)
14947 NtCreateTransactionManager(
14948 OUT PHANDLE TmHandle
,
14949 IN ACCESS_MASK DesiredAccess
,
14950 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
14951 IN PUNICODE_STRING LogFileName OPTIONAL
,
14952 IN ULONG CreateOptions OPTIONAL
,
14953 IN ULONG CommitStrength OPTIONAL
);
14958 NtOpenTransactionManager(
14959 OUT PHANDLE TmHandle
,
14960 IN ACCESS_MASK DesiredAccess
,
14961 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
14962 IN PUNICODE_STRING LogFileName OPTIONAL
,
14963 IN LPGUID TmIdentity OPTIONAL
,
14964 IN ULONG OpenOptions OPTIONAL
);
14969 NtRenameTransactionManager(
14970 IN PUNICODE_STRING LogFileName
,
14971 IN LPGUID ExistingTransactionManagerGuid
);
14976 NtRollforwardTransactionManager(
14977 IN HANDLE TransactionManagerHandle
,
14978 IN PLARGE_INTEGER TmVirtualClock OPTIONAL
);
14983 NtRecoverTransactionManager(
14984 IN HANDLE TransactionManagerHandle
);
14989 NtQueryInformationTransactionManager(
14990 IN HANDLE TransactionManagerHandle
,
14991 IN TRANSACTIONMANAGER_INFORMATION_CLASS TransactionManagerInformationClass
,
14992 OUT PVOID TransactionManagerInformation
,
14993 IN ULONG TransactionManagerInformationLength
,
14994 OUT PULONG ReturnLength
);
14999 NtSetInformationTransactionManager(
15000 IN HANDLE TmHandle OPTIONAL
,
15001 IN TRANSACTIONMANAGER_INFORMATION_CLASS TransactionManagerInformationClass
,
15002 IN PVOID TransactionManagerInformation
,
15003 IN ULONG TransactionManagerInformationLength
);
15008 NtEnumerateTransactionObject(
15009 IN HANDLE RootObjectHandle OPTIONAL
,
15010 IN KTMOBJECT_TYPE QueryType
,
15011 IN OUT PKTMOBJECT_CURSOR ObjectCursor
,
15012 IN ULONG ObjectCursorLength
,
15013 OUT PULONG ReturnLength
);
15018 NtCreateTransaction(
15019 OUT PHANDLE TransactionHandle
,
15020 IN ACCESS_MASK DesiredAccess
,
15021 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
15022 IN LPGUID Uow OPTIONAL
,
15023 IN HANDLE TmHandle OPTIONAL
,
15024 IN ULONG CreateOptions OPTIONAL
,
15025 IN ULONG IsolationLevel OPTIONAL
,
15026 IN ULONG IsolationFlags OPTIONAL
,
15027 IN PLARGE_INTEGER Timeout OPTIONAL
,
15028 IN PUNICODE_STRING Description OPTIONAL
);
15034 OUT PHANDLE TransactionHandle
,
15035 IN ACCESS_MASK DesiredAccess
,
15036 IN POBJECT_ATTRIBUTES ObjectAttributes
,
15038 IN HANDLE TmHandle OPTIONAL
);
15043 NtQueryInformationTransaction(
15044 IN HANDLE TransactionHandle
,
15045 IN TRANSACTION_INFORMATION_CLASS TransactionInformationClass
,
15046 OUT PVOID TransactionInformation
,
15047 IN ULONG TransactionInformationLength
,
15048 OUT PULONG ReturnLength OPTIONAL
);
15053 NtSetInformationTransaction(
15054 IN HANDLE TransactionHandle
,
15055 IN TRANSACTION_INFORMATION_CLASS TransactionInformationClass
,
15056 IN PVOID TransactionInformation
,
15057 IN ULONG TransactionInformationLength
);
15062 NtCommitTransaction(
15063 IN HANDLE TransactionHandle
,
15069 NtRollbackTransaction(
15070 IN HANDLE TransactionHandle
,
15076 NtCreateEnlistment(
15077 OUT PHANDLE EnlistmentHandle
,
15078 IN ACCESS_MASK DesiredAccess
,
15079 IN HANDLE ResourceManagerHandle
,
15080 IN HANDLE TransactionHandle
,
15081 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
15082 IN ULONG CreateOptions OPTIONAL
,
15083 IN NOTIFICATION_MASK NotificationMask
,
15084 IN PVOID EnlistmentKey OPTIONAL
);
15090 OUT PHANDLE EnlistmentHandle
,
15091 IN ACCESS_MASK DesiredAccess
,
15092 IN HANDLE ResourceManagerHandle
,
15093 IN LPGUID EnlistmentGuid
,
15094 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
);
15099 NtQueryInformationEnlistment(
15100 IN HANDLE EnlistmentHandle
,
15101 IN ENLISTMENT_INFORMATION_CLASS EnlistmentInformationClass
,
15102 OUT PVOID EnlistmentInformation
,
15103 IN ULONG EnlistmentInformationLength
,
15104 OUT PULONG ReturnLength
);
15109 NtSetInformationEnlistment(
15110 IN HANDLE EnlistmentHandle OPTIONAL
,
15111 IN ENLISTMENT_INFORMATION_CLASS EnlistmentInformationClass
,
15112 IN PVOID EnlistmentInformation
,
15113 IN ULONG EnlistmentInformationLength
);
15118 NtRecoverEnlistment(
15119 IN HANDLE EnlistmentHandle
,
15120 IN PVOID EnlistmentKey OPTIONAL
);
15125 NtPrePrepareEnlistment(
15126 IN HANDLE EnlistmentHandle
,
15127 IN PLARGE_INTEGER TmVirtualClock OPTIONAL
);
15132 NtPrepareEnlistment(
15133 IN HANDLE EnlistmentHandle
,
15134 IN PLARGE_INTEGER TmVirtualClock OPTIONAL
);
15139 NtCommitEnlistment(
15140 IN HANDLE EnlistmentHandle
,
15141 IN PLARGE_INTEGER TmVirtualClock OPTIONAL
);
15146 NtRollbackEnlistment(
15147 IN HANDLE EnlistmentHandle
,
15148 IN PLARGE_INTEGER TmVirtualClock OPTIONAL
);
15153 NtPrePrepareComplete(
15154 IN HANDLE EnlistmentHandle
,
15155 IN PLARGE_INTEGER TmVirtualClock OPTIONAL
);
15161 IN HANDLE EnlistmentHandle
,
15162 IN PLARGE_INTEGER TmVirtualClock OPTIONAL
);
15168 IN HANDLE EnlistmentHandle
,
15169 IN PLARGE_INTEGER TmVirtualClock OPTIONAL
);
15174 NtReadOnlyEnlistment(
15175 IN HANDLE EnlistmentHandle
,
15176 IN PLARGE_INTEGER TmVirtualClock OPTIONAL
);
15181 NtRollbackComplete(
15182 IN HANDLE EnlistmentHandle
,
15183 IN PLARGE_INTEGER TmVirtualClock OPTIONAL
);
15188 NtSinglePhaseReject(
15189 IN HANDLE EnlistmentHandle
,
15190 IN PLARGE_INTEGER TmVirtualClock OPTIONAL
);
15195 NtCreateResourceManager(
15196 OUT PHANDLE ResourceManagerHandle
,
15197 IN ACCESS_MASK DesiredAccess
,
15198 IN HANDLE TmHandle
,
15200 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
15201 IN ULONG CreateOptions OPTIONAL
,
15202 IN PUNICODE_STRING Description OPTIONAL
);
15207 NtOpenResourceManager(
15208 OUT PHANDLE ResourceManagerHandle
,
15209 IN ACCESS_MASK DesiredAccess
,
15210 IN HANDLE TmHandle
,
15211 IN LPGUID ResourceManagerGuid OPTIONAL
,
15212 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
);
15217 NtRecoverResourceManager(
15218 IN HANDLE ResourceManagerHandle
);
15223 NtGetNotificationResourceManager(
15224 IN HANDLE ResourceManagerHandle
,
15225 OUT PTRANSACTION_NOTIFICATION TransactionNotification
,
15226 IN ULONG NotificationLength
,
15227 IN PLARGE_INTEGER Timeout OPTIONAL
,
15228 OUT PULONG ReturnLength OPTIONAL
,
15229 IN ULONG Asynchronous
,
15230 IN ULONG_PTR AsynchronousContext OPTIONAL
);
15235 NtQueryInformationResourceManager(
15236 IN HANDLE ResourceManagerHandle
,
15237 IN RESOURCEMANAGER_INFORMATION_CLASS ResourceManagerInformationClass
,
15238 OUT PVOID ResourceManagerInformation
,
15239 IN ULONG ResourceManagerInformationLength
,
15240 OUT PULONG ReturnLength OPTIONAL
);
15245 NtSetInformationResourceManager(
15246 IN HANDLE ResourceManagerHandle
,
15247 IN RESOURCEMANAGER_INFORMATION_CLASS ResourceManagerInformationClass
,
15248 IN PVOID ResourceManagerInformation
,
15249 IN ULONG ResourceManagerInformationLength
);
15254 NtRegisterProtocolAddressInformation(
15255 IN HANDLE ResourceManager
,
15256 IN PCRM_PROTOCOL_ID ProtocolId
,
15257 IN ULONG ProtocolInformationSize
,
15258 IN PVOID ProtocolInformation
,
15259 IN ULONG CreateOptions OPTIONAL
);
15264 NtPropagationComplete(
15265 IN HANDLE ResourceManagerHandle
,
15266 IN ULONG RequestCookie
,
15267 IN ULONG BufferLength
,
15273 NtPropagationFailed(
15274 IN HANDLE ResourceManagerHandle
,
15275 IN ULONG RequestCookie
,
15276 IN NTSTATUS PropStatus
);
15278 #endif /* NTDDI_VERSION >= NTDDI_VISTA */
15280 #endif /* !_NTTMAPI_ */
15281 /******************************************************************************
15282 * ZwXxx Functions *
15283 ******************************************************************************/
15287 #define NtCurrentProcess() ( (HANDLE)(LONG_PTR) -1 )
15288 #define ZwCurrentProcess() NtCurrentProcess()
15289 #define NtCurrentThread() ( (HANDLE)(LONG_PTR) -2 )
15290 #define ZwCurrentThread() NtCurrentThread()
15293 #if (NTDDI_VERSION >= NTDDI_WIN2K)
15304 ZwCreateDirectoryObject(
15305 OUT PHANDLE DirectoryHandle
,
15306 IN ACCESS_MASK DesiredAccess
,
15307 IN POBJECT_ATTRIBUTES ObjectAttributes
);
15313 OUT PHANDLE FileHandle
,
15314 IN ACCESS_MASK DesiredAccess
,
15315 IN POBJECT_ATTRIBUTES ObjectAttributes
,
15316 OUT PIO_STATUS_BLOCK IoStatusBlock
,
15317 IN PLARGE_INTEGER AllocationSize OPTIONAL
,
15318 IN ULONG FileAttributes
,
15319 IN ULONG ShareAccess
,
15320 IN ULONG CreateDisposition
,
15321 IN ULONG CreateOptions
,
15322 IN PVOID EaBuffer OPTIONAL
,
15323 IN ULONG EaLength
);
15329 OUT PHANDLE KeyHandle
,
15330 IN ACCESS_MASK DesiredAccess
,
15331 IN POBJECT_ATTRIBUTES ObjectAttributes
,
15332 IN ULONG TitleIndex
,
15333 IN PUNICODE_STRING Class OPTIONAL
,
15334 IN ULONG CreateOptions
,
15335 OUT PULONG Disposition OPTIONAL
);
15341 OUT PHANDLE SectionHandle
,
15342 IN ACCESS_MASK DesiredAccess
,
15343 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
15344 IN PLARGE_INTEGER MaximumSize OPTIONAL
,
15345 IN ULONG SectionPageProtection
,
15346 IN ULONG AllocationAttributes
,
15347 IN HANDLE FileHandle OPTIONAL
);
15353 IN HANDLE KeyHandle
);
15359 IN HANDLE KeyHandle
,
15360 IN PUNICODE_STRING ValueName
);
15366 IN HANDLE KeyHandle
,
15368 IN KEY_INFORMATION_CLASS KeyInformationClass
,
15369 OUT PVOID KeyInformation OPTIONAL
,
15371 OUT PULONG ResultLength
);
15376 ZwEnumerateValueKey(
15377 IN HANDLE KeyHandle
,
15379 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
,
15380 OUT PVOID KeyValueInformation OPTIONAL
,
15382 OUT PULONG ResultLength
);
15388 IN HANDLE KeyHandle
);
15394 IN PUNICODE_STRING DriverServiceName
);
15399 ZwMakeTemporaryObject(
15405 ZwMapViewOfSection(
15406 IN HANDLE SectionHandle
,
15407 IN HANDLE ProcessHandle
,
15408 IN OUT PVOID
*BaseAddress
,
15409 IN ULONG_PTR ZeroBits
,
15410 IN SIZE_T CommitSize
,
15411 IN OUT PLARGE_INTEGER SectionOffset OPTIONAL
,
15412 IN OUT PSIZE_T ViewSize
,
15413 IN SECTION_INHERIT InheritDisposition
,
15414 IN ULONG AllocationType
,
15421 OUT PHANDLE FileHandle
,
15422 IN ACCESS_MASK DesiredAccess
,
15423 IN POBJECT_ATTRIBUTES ObjectAttributes
,
15424 OUT PIO_STATUS_BLOCK IoStatusBlock
,
15425 IN ULONG ShareAccess
,
15426 IN ULONG OpenOptions
);
15432 OUT PHANDLE KeyHandle
,
15433 IN ACCESS_MASK DesiredAccess
,
15434 IN POBJECT_ATTRIBUTES ObjectAttributes
);
15440 OUT PHANDLE SectionHandle
,
15441 IN ACCESS_MASK DesiredAccess
,
15442 IN POBJECT_ATTRIBUTES ObjectAttributes
);
15447 ZwOpenSymbolicLinkObject(
15448 OUT PHANDLE LinkHandle
,
15449 IN ACCESS_MASK DesiredAccess
,
15450 IN POBJECT_ATTRIBUTES ObjectAttributes
);
15455 ZwQueryInformationFile(
15456 IN HANDLE FileHandle
,
15457 OUT PIO_STATUS_BLOCK IoStatusBlock
,
15458 OUT PVOID FileInformation
,
15460 IN FILE_INFORMATION_CLASS FileInformationClass
);
15466 IN HANDLE KeyHandle
,
15467 IN KEY_INFORMATION_CLASS KeyInformationClass
,
15468 OUT PVOID KeyInformation OPTIONAL
,
15470 OUT PULONG ResultLength
);
15475 ZwQuerySymbolicLinkObject(
15476 IN HANDLE LinkHandle
,
15477 IN OUT PUNICODE_STRING LinkTarget
,
15478 OUT PULONG ReturnedLength OPTIONAL
);
15484 IN HANDLE KeyHandle
,
15485 IN PUNICODE_STRING ValueName
,
15486 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
,
15487 OUT PVOID KeyValueInformation OPTIONAL
,
15489 OUT PULONG ResultLength
);
15495 IN HANDLE FileHandle
,
15496 IN HANDLE Event OPTIONAL
,
15497 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
15498 IN PVOID ApcContext OPTIONAL
,
15499 OUT PIO_STATUS_BLOCK IoStatusBlock
,
15502 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
15503 IN PULONG Key OPTIONAL
);
15508 ZwSetInformationFile(
15509 IN HANDLE FileHandle
,
15510 OUT PIO_STATUS_BLOCK IoStatusBlock
,
15511 IN PVOID FileInformation
,
15513 IN FILE_INFORMATION_CLASS FileInformationClass
);
15519 IN HANDLE KeyHandle
,
15520 IN PUNICODE_STRING ValueName
,
15521 IN ULONG TitleIndex OPTIONAL
,
15523 IN PVOID Data OPTIONAL
,
15524 IN ULONG DataSize
);
15530 IN PUNICODE_STRING DriverServiceName
);
15535 ZwUnmapViewOfSection(
15536 IN HANDLE ProcessHandle
,
15537 IN PVOID BaseAddress OPTIONAL
);
15543 IN HANDLE FileHandle
,
15544 IN HANDLE Event OPTIONAL
,
15545 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
15546 IN PVOID ApcContext OPTIONAL
,
15547 OUT PIO_STATUS_BLOCK IoStatusBlock
,
15550 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
15551 IN PULONG Key OPTIONAL
);
15556 ZwQueryFullAttributesFile(
15557 IN POBJECT_ATTRIBUTES ObjectAttributes
,
15558 OUT PFILE_NETWORK_OPEN_INFORMATION FileInformation
);
15560 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
15563 #if (NTDDI_VERSION >= NTDDI_WS03)
15568 OUT PHANDLE EventHandle
,
15569 IN ACCESS_MASK DesiredAccess
,
15570 IN POBJECT_ATTRIBUTES ObjectAttributes
);
15573 #if (NTDDI_VERSION >= NTDDI_VISTA)
15577 ZwCreateKeyTransacted(
15578 OUT PHANDLE KeyHandle
,
15579 IN ACCESS_MASK DesiredAccess
,
15580 IN POBJECT_ATTRIBUTES ObjectAttributes
,
15581 IN ULONG TitleIndex
,
15582 IN PUNICODE_STRING Class OPTIONAL
,
15583 IN ULONG CreateOptions
,
15584 IN HANDLE TransactionHandle
,
15585 OUT PULONG Disposition OPTIONAL
);
15590 ZwOpenKeyTransacted(
15591 OUT PHANDLE KeyHandle
,
15592 IN ACCESS_MASK DesiredAccess
,
15593 IN POBJECT_ATTRIBUTES ObjectAttributes
,
15594 IN HANDLE TransactionHandle
);
15599 ZwCreateTransactionManager(
15600 OUT PHANDLE TmHandle
,
15601 IN ACCESS_MASK DesiredAccess
,
15602 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
15603 IN PUNICODE_STRING LogFileName OPTIONAL
,
15604 IN ULONG CreateOptions OPTIONAL
,
15605 IN ULONG CommitStrength OPTIONAL
);
15610 ZwOpenTransactionManager(
15611 OUT PHANDLE TmHandle
,
15612 IN ACCESS_MASK DesiredAccess
,
15613 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
15614 IN PUNICODE_STRING LogFileName OPTIONAL
,
15615 IN LPGUID TmIdentity OPTIONAL
,
15616 IN ULONG OpenOptions OPTIONAL
);
15621 ZwRollforwardTransactionManager(
15622 IN HANDLE TransactionManagerHandle
,
15623 IN PLARGE_INTEGER TmVirtualClock OPTIONAL
);
15628 ZwRecoverTransactionManager(
15629 IN HANDLE TransactionManagerHandle
);
15634 ZwQueryInformationTransactionManager(
15635 IN HANDLE TransactionManagerHandle
,
15636 IN TRANSACTIONMANAGER_INFORMATION_CLASS TransactionManagerInformationClass
,
15637 OUT PVOID TransactionManagerInformation
,
15638 IN ULONG TransactionManagerInformationLength
,
15639 OUT PULONG ReturnLength OPTIONAL
);
15644 ZwSetInformationTransactionManager(
15645 IN HANDLE TmHandle
,
15646 IN TRANSACTIONMANAGER_INFORMATION_CLASS TransactionManagerInformationClass
,
15647 IN PVOID TransactionManagerInformation
,
15648 IN ULONG TransactionManagerInformationLength
);
15653 ZwEnumerateTransactionObject(
15654 IN HANDLE RootObjectHandle OPTIONAL
,
15655 IN KTMOBJECT_TYPE QueryType
,
15656 IN OUT PKTMOBJECT_CURSOR ObjectCursor
,
15657 IN ULONG ObjectCursorLength
,
15658 OUT PULONG ReturnLength
);
15663 ZwCreateTransaction(
15664 OUT PHANDLE TransactionHandle
,
15665 IN ACCESS_MASK DesiredAccess
,
15666 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
15667 IN LPGUID Uow OPTIONAL
,
15668 IN HANDLE TmHandle OPTIONAL
,
15669 IN ULONG CreateOptions OPTIONAL
,
15670 IN ULONG IsolationLevel OPTIONAL
,
15671 IN ULONG IsolationFlags OPTIONAL
,
15672 IN PLARGE_INTEGER Timeout OPTIONAL
,
15673 IN PUNICODE_STRING Description OPTIONAL
);
15679 OUT PHANDLE TransactionHandle
,
15680 IN ACCESS_MASK DesiredAccess
,
15681 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
15683 IN HANDLE TmHandle OPTIONAL
);
15688 ZwQueryInformationTransaction(
15689 IN HANDLE TransactionHandle
,
15690 IN TRANSACTION_INFORMATION_CLASS TransactionInformationClass
,
15691 OUT PVOID TransactionInformation
,
15692 IN ULONG TransactionInformationLength
,
15693 OUT PULONG ReturnLength OPTIONAL
);
15698 ZwSetInformationTransaction(
15699 IN HANDLE TransactionHandle
,
15700 IN TRANSACTION_INFORMATION_CLASS TransactionInformationClass
,
15701 IN PVOID TransactionInformation
,
15702 IN ULONG TransactionInformationLength
);
15707 ZwCommitTransaction(
15708 IN HANDLE TransactionHandle
,
15714 ZwRollbackTransaction(
15715 IN HANDLE TransactionHandle
,
15721 ZwCreateResourceManager(
15722 OUT PHANDLE ResourceManagerHandle
,
15723 IN ACCESS_MASK DesiredAccess
,
15724 IN HANDLE TmHandle
,
15725 IN LPGUID ResourceManagerGuid OPTIONAL
,
15726 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
15727 IN ULONG CreateOptions OPTIONAL
,
15728 IN PUNICODE_STRING Description OPTIONAL
);
15733 ZwOpenResourceManager(
15734 OUT PHANDLE ResourceManagerHandle
,
15735 IN ACCESS_MASK DesiredAccess
,
15736 IN HANDLE TmHandle
,
15737 IN LPGUID ResourceManagerGuid
,
15738 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
);
15743 ZwRecoverResourceManager(
15744 IN HANDLE ResourceManagerHandle
);
15749 ZwGetNotificationResourceManager(
15750 IN HANDLE ResourceManagerHandle
,
15751 OUT PTRANSACTION_NOTIFICATION TransactionNotification
,
15752 IN ULONG NotificationLength
,
15753 IN PLARGE_INTEGER Timeout
,
15754 IN PULONG ReturnLength OPTIONAL
,
15755 IN ULONG Asynchronous
,
15756 IN ULONG_PTR AsynchronousContext OPTIONAL
);
15761 ZwQueryInformationResourceManager(
15762 IN HANDLE ResourceManagerHandle
,
15763 IN RESOURCEMANAGER_INFORMATION_CLASS ResourceManagerInformationClass
,
15764 OUT PVOID ResourceManagerInformation
,
15765 IN ULONG ResourceManagerInformationLength
,
15766 IN PULONG ReturnLength OPTIONAL
);
15771 ZwSetInformationResourceManager(
15772 IN HANDLE ResourceManagerHandle
,
15773 IN RESOURCEMANAGER_INFORMATION_CLASS ResourceManagerInformationClass
,
15774 IN PVOID ResourceManagerInformation
,
15775 IN ULONG ResourceManagerInformationLength
);
15780 ZwCreateEnlistment(
15781 OUT PHANDLE EnlistmentHandle
,
15782 IN ACCESS_MASK DesiredAccess
,
15783 IN HANDLE ResourceManagerHandle
,
15784 IN HANDLE TransactionHandle
,
15785 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
15786 IN ULONG CreateOptions OPTIONAL
,
15787 IN NOTIFICATION_MASK NotificationMask
,
15788 IN PVOID EnlistmentKey OPTIONAL
);
15794 OUT PHANDLE EnlistmentHandle
,
15795 IN ACCESS_MASK DesiredAccess
,
15796 IN HANDLE RmHandle
,
15797 IN LPGUID EnlistmentGuid
,
15798 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
);
15803 ZwQueryInformationEnlistment(
15804 IN HANDLE EnlistmentHandle
,
15805 IN ENLISTMENT_INFORMATION_CLASS EnlistmentInformationClass
,
15806 OUT PVOID EnlistmentInformation
,
15807 IN ULONG EnlistmentInformationLength
,
15808 IN PULONG ReturnLength OPTIONAL
);
15813 ZwSetInformationEnlistment(
15814 IN HANDLE EnlistmentHandle
,
15815 IN ENLISTMENT_INFORMATION_CLASS EnlistmentInformationClass
,
15816 IN PVOID EnlistmentInformation
,
15817 IN ULONG EnlistmentInformationLength
);
15822 ZwRecoverEnlistment(
15823 IN HANDLE EnlistmentHandle
,
15824 IN PVOID EnlistmentKey OPTIONAL
);
15829 ZwPrePrepareEnlistment(
15830 IN HANDLE EnlistmentHandle
,
15831 IN PLARGE_INTEGER TmVirtualClock OPTIONAL
);
15836 ZwPrepareEnlistment(
15837 IN HANDLE EnlistmentHandle
,
15838 IN PLARGE_INTEGER TmVirtualClock OPTIONAL
);
15843 ZwCommitEnlistment(
15844 IN HANDLE EnlistmentHandle
,
15845 IN PLARGE_INTEGER TmVirtualClock OPTIONAL
);
15850 ZwRollbackEnlistment(
15851 IN HANDLE EnlistmentHandle
,
15852 IN PLARGE_INTEGER TmVirtualClock OPTIONAL
);
15857 ZwPrePrepareComplete(
15858 IN HANDLE EnlistmentHandle
,
15859 IN PLARGE_INTEGER TmVirtualClock OPTIONAL
);
15865 IN HANDLE EnlistmentHandle
,
15866 IN PLARGE_INTEGER TmVirtualClock OPTIONAL
);
15872 IN HANDLE EnlistmentHandle
,
15873 IN PLARGE_INTEGER TmVirtualClock OPTIONAL
);
15878 ZwReadOnlyEnlistment(
15879 IN HANDLE EnlistmentHandle
,
15880 IN PLARGE_INTEGER TmVirtualClock OPTIONAL
);
15885 ZwRollbackComplete(
15886 IN HANDLE EnlistmentHandle
,
15887 IN PLARGE_INTEGER TmVirtualClock OPTIONAL
);
15892 ZwSinglePhaseReject(
15893 IN HANDLE EnlistmentHandle
,
15894 IN PLARGE_INTEGER TmVirtualClock OPTIONAL
);
15895 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
15896 #if (NTDDI_VERSION >= NTDDI_WIN7)
15902 OUT PHANDLE KeyHandle
,
15903 IN ACCESS_MASK DesiredAccess
,
15904 IN POBJECT_ATTRIBUTES ObjectAttributes
,
15905 IN ULONG OpenOptions
);
15910 ZwOpenKeyTransactedEx(
15911 OUT PHANDLE KeyHandle
,
15912 IN ACCESS_MASK DesiredAccess
,
15913 IN POBJECT_ATTRIBUTES ObjectAttributes
,
15914 IN ULONG OpenOptions
,
15915 IN HANDLE TransactionHandle
);
15920 ZwNotifyChangeMultipleKeys(
15921 IN HANDLE MasterKeyHandle
,
15922 IN ULONG Count OPTIONAL
,
15923 IN OBJECT_ATTRIBUTES SubordinateObjects
[] OPTIONAL
,
15924 IN HANDLE Event OPTIONAL
,
15925 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
15926 IN PVOID ApcContext OPTIONAL
,
15927 OUT PIO_STATUS_BLOCK IoStatusBlock
,
15928 IN ULONG CompletionFilter
,
15929 IN BOOLEAN WatchTree
,
15930 OUT PVOID Buffer OPTIONAL
,
15931 IN ULONG BufferSize
,
15932 IN BOOLEAN Asynchronous
);
15937 ZwQueryMultipleValueKey(
15938 IN HANDLE KeyHandle
,
15939 IN OUT PKEY_VALUE_ENTRY ValueEntries
,
15940 IN ULONG EntryCount
,
15941 OUT PVOID ValueBuffer
,
15942 IN OUT PULONG BufferLength
,
15943 OUT PULONG RequiredBufferLength OPTIONAL
);
15949 IN HANDLE KeyHandle
,
15950 IN PUNICODE_STRING NewName
);
15955 ZwSetInformationKey(
15956 IN HANDLE KeyHandle
,
15957 IN KEY_SET_INFORMATION_CLASS KeySetInformationClass
,
15958 IN PVOID KeySetInformation
,
15959 IN ULONG KeySetInformationLength
);
15961 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
15968 #endif /* !_WDMDDK_ */