1 /******************************************************************************
3 ******************************************************************************/
6 typedef UCHAR KIRQL
, *PKIRQL
;
7 typedef CCHAR KPROCESSOR_MODE
;
8 typedef LONG KPRIORITY
;
16 #define CACHE_FULLY_ASSOCIATIVE 0xFF
17 #define MAXIMUM_SUSPEND_COUNT MAXCHAR
19 #define EVENT_QUERY_STATE (0x0001)
20 #define EVENT_MODIFY_STATE (0x0002)
21 #define EVENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3)
23 #define LTP_PC_SMT 0x1
25 #if (NTDDI_VERSION < NTDDI_WIN7) || defined(_X86_) || !defined(NT_PROCESSOR_GROUPS)
26 #define SINGLE_GROUP_LEGACY_API 1
29 #define SEMAPHORE_QUERY_STATE (0x0001)
30 #define SEMAPHORE_MODIFY_STATE (0x0002)
31 #define SEMAPHORE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3)
34 $
if(_WDMDDK_
|| _WINNT_
)
36 typedef struct _PROCESSOR_GROUP_INFO
{
37 UCHAR MaximumProcessorCount
;
38 UCHAR ActiveProcessorCount
;
40 KAFFINITY ActiveProcessorMask
;
41 } PROCESSOR_GROUP_INFO
, *PPROCESSOR_GROUP_INFO
;
43 typedef enum _PROCESSOR_CACHE_TYPE
{
48 } PROCESSOR_CACHE_TYPE
;
50 typedef struct _CACHE_DESCRIPTOR
{
55 PROCESSOR_CACHE_TYPE Type
;
56 } CACHE_DESCRIPTOR
, *PCACHE_DESCRIPTOR
;
58 typedef struct _NUMA_NODE_RELATIONSHIP
{
61 GROUP_AFFINITY GroupMask
;
62 } NUMA_NODE_RELATIONSHIP
, *PNUMA_NODE_RELATIONSHIP
;
64 typedef struct _CACHE_RELATIONSHIP
{
69 PROCESSOR_CACHE_TYPE Type
;
71 GROUP_AFFINITY GroupMask
;
72 } CACHE_RELATIONSHIP
, *PCACHE_RELATIONSHIP
;
74 typedef struct _GROUP_RELATIONSHIP
{
75 USHORT MaximumGroupCount
;
76 USHORT ActiveGroupCount
;
78 PROCESSOR_GROUP_INFO GroupInfo
[ANYSIZE_ARRAY
];
79 } GROUP_RELATIONSHIP
, *PGROUP_RELATIONSHIP
;
81 typedef enum _LOGICAL_PROCESSOR_RELATIONSHIP
{
82 RelationProcessorCore
,
85 RelationProcessorPackage
,
88 } LOGICAL_PROCESSOR_RELATIONSHIP
;
90 typedef struct _PROCESSOR_RELATIONSHIP
{
94 _Field_size_(GroupCount
) GROUP_AFFINITY GroupMask
[ANYSIZE_ARRAY
];
95 } PROCESSOR_RELATIONSHIP
, *PPROCESSOR_RELATIONSHIP
;
97 typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION
{
98 ULONG_PTR ProcessorMask
;
99 LOGICAL_PROCESSOR_RELATIONSHIP Relationship
;
100 _ANONYMOUS_UNION
union {
107 CACHE_DESCRIPTOR Cache
;
108 ULONGLONG Reserved
[2];
110 } SYSTEM_LOGICAL_PROCESSOR_INFORMATION
, *PSYSTEM_LOGICAL_PROCESSOR_INFORMATION
;
112 typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX
{
113 LOGICAL_PROCESSOR_RELATIONSHIP Relationship
;
115 _ANONYMOUS_UNION
union {
116 PROCESSOR_RELATIONSHIP Processor
;
117 NUMA_NODE_RELATIONSHIP NumaNode
;
118 CACHE_RELATIONSHIP Cache
;
119 GROUP_RELATIONSHIP Group
;
121 } SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX
, *PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX
;
123 /* Processor features */
124 #define PF_FLOATING_POINT_PRECISION_ERRATA 0
125 #define PF_FLOATING_POINT_EMULATED 1
126 #define PF_COMPARE_EXCHANGE_DOUBLE 2
127 #define PF_MMX_INSTRUCTIONS_AVAILABLE 3
128 #define PF_PPC_MOVEMEM_64BIT_OK 4
129 #define PF_ALPHA_BYTE_INSTRUCTIONS 5
130 #define PF_XMMI_INSTRUCTIONS_AVAILABLE 6
131 #define PF_3DNOW_INSTRUCTIONS_AVAILABLE 7
132 #define PF_RDTSC_INSTRUCTION_AVAILABLE 8
133 #define PF_PAE_ENABLED 9
134 #define PF_XMMI64_INSTRUCTIONS_AVAILABLE 10
135 #define PF_SSE_DAZ_MODE_AVAILABLE 11
136 #define PF_NX_ENABLED 12
137 #define PF_SSE3_INSTRUCTIONS_AVAILABLE 13
138 #define PF_COMPARE_EXCHANGE128 14
139 #define PF_COMPARE64_EXCHANGE128 15
140 #define PF_CHANNELS_ENABLED 16
141 #define PF_XSAVE_ENABLED 17
142 #define PF_ARM_VFP_32_REGISTERS_AVAILABLE 18
143 #define PF_ARM_NEON_INSTRUCTIONS_AVAILABLE 19
144 #define PF_SECOND_LEVEL_ADDRESS_TRANSLATION 20
145 #define PF_VIRT_FIRMWARE_ENABLED 21
146 #define PF_RDWRFSGSBASE_AVAILABLE 22
147 #define PF_FASTFAIL_AVAILABLE 23
148 #define PF_ARM_DIVIDE_INSTRUCTION_AVAILABLE 24
149 #define PF_ARM_64BIT_LOADSTORE_ATOMIC 25
150 #define PF_ARM_EXTERNAL_CACHE_AVAILABLE 26
151 #define PF_ARM_FMAC_INSTRUCTIONS_AVAILABLE 27
152 #define PF_RDRAND_INSTRUCTION_AVAILABLE 28
153 #define PF_ARM_V8_INSTRUCTIONS_AVAILABLE 29
154 #define PF_ARM_V8_CRYPTO_INSTRUCTIONS_AVAILABLE 30
155 #define PF_ARM_V8_CRC32_INSTRUCTIONS_AVAILABLE 31
156 #define PF_RDTSCP_INSTRUCTION_AVAILABLE 32
157 #define PF_RDPID_INSTRUCTION_AVAILABLE 33
158 #define PF_ARM_V81_ATOMIC_INSTRUCTIONS_AVAILABLE 34
159 #define PF_SSSE3_INSTRUCTIONS_AVAILABLE 36
160 #define PF_SSE4_1_INSTRUCTIONS_AVAILABLE 37
161 #define PF_SSE4_2_INSTRUCTIONS_AVAILABLE 38
162 #define PF_AVX_INSTRUCTIONS_AVAILABLE 39
163 #define PF_AVX2_INSTRUCTIONS_AVAILABLE 40
164 #define PF_AVX512F_INSTRUCTIONS_AVAILABLE 41
165 #define PF_ARM_V82_DP_INSTRUCTIONS_AVAILABLE 43
166 #define PF_ARM_V83_JSCVT_INSTRUCTIONS_AVAILABLE 44
167 #define PF_ARM_V83_LRCPC_INSTRUCTIONS_AVAILABLE 45
169 $
endif(_WDMDDK_
|| _WINNT_
)
172 #define MAXIMUM_WAIT_OBJECTS 64
174 #define ASSERT_APC(Object) \
175 NT_ASSERT((Object)->Type == ApcObject)
177 #define ASSERT_DPC(Object) \
178 NT_ASSERT(((Object)->Type == 0) || \
179 ((Object)->Type == DpcObject) || \
180 ((Object)->Type == ThreadedDpcObject))
182 #define ASSERT_GATE(Object) \
183 NT_ASSERT((((Object)->Header.Type & KOBJECT_TYPE_MASK) == GateObject) || \
184 (((Object)->Header.Type & KOBJECT_TYPE_MASK) == EventSynchronizationObject))
186 #define ASSERT_DEVICE_QUEUE(Object) \
187 NT_ASSERT((Object)->Type == DeviceQueueObject)
189 #define ASSERT_TIMER(Object) \
190 NT_ASSERT(((Object)->Header.Type == TimerNotificationObject) || \
191 ((Object)->Header.Type == TimerSynchronizationObject))
193 #define ASSERT_MUTANT(Object) \
194 NT_ASSERT((Object)->Header.Type == MutantObject)
196 #define ASSERT_SEMAPHORE(Object) \
197 NT_ASSERT((Object)->Header.Type == SemaphoreObject)
199 #define ASSERT_EVENT(Object) \
200 NT_ASSERT(((Object)->Header.Type == NotificationEvent) || \
201 ((Object)->Header.Type == SynchronizationEvent))
204 #define DPC_THREADED 1
206 #define GM_LOCK_BIT 0x1
207 #define GM_LOCK_BIT_V 0x0
208 #define GM_LOCK_WAITER_WOKEN 0x2
209 #define GM_LOCK_WAITER_INC 0x4
211 #define LOCK_QUEUE_WAIT_BIT 0
212 #define LOCK_QUEUE_OWNER_BIT 1
214 #define LOCK_QUEUE_WAIT 1
215 #define LOCK_QUEUE_OWNER 2
216 #define LOCK_QUEUE_TIMER_LOCK_SHIFT 4
217 #define LOCK_QUEUE_TIMER_TABLE_LOCKS (1 << (8 - LOCK_QUEUE_TIMER_LOCK_SHIFT))
219 #define PROCESSOR_FEATURE_MAX 64
221 #define DBG_STATUS_CONTROL_C 1
222 #define DBG_STATUS_SYSRQ 2
223 #define DBG_STATUS_BUGCHECK_FIRST 3
224 #define DBG_STATUS_BUGCHECK_SECOND 4
225 #define DBG_STATUS_FATAL 5
226 #define DBG_STATUS_DEBUG_CONTROL 6
227 #define DBG_STATUS_WORKER 7
230 #define MAXIMUM_PROC_PER_GROUP 64
232 #define MAXIMUM_PROC_PER_GROUP 32
234 #define MAXIMUM_PROCESSORS MAXIMUM_PROC_PER_GROUP
236 #define EXCEPTION_DIVIDED_BY_ZERO 0
237 #define EXCEPTION_DEBUG 1
238 #define EXCEPTION_NMI 2
239 #define EXCEPTION_INT3 3
240 #define EXCEPTION_BOUND_CHECK 5
241 #define EXCEPTION_INVALID_OPCODE 6
242 #define EXCEPTION_NPX_NOT_AVAILABLE 7
243 #define EXCEPTION_DOUBLE_FAULT 8
244 #define EXCEPTION_NPX_OVERRUN 9
245 #define EXCEPTION_INVALID_TSS 0x0A
246 #define EXCEPTION_SEGMENT_NOT_PRESENT 0x0B
247 #define EXCEPTION_STACK_FAULT 0x0C
248 #define EXCEPTION_GP_FAULT 0x0D
249 #define EXCEPTION_RESERVED_TRAP 0x0F
250 #define EXCEPTION_NPX_ERROR 0x010
251 #define EXCEPTION_ALIGNMENT_CHECK 0x011
253 typedef enum _KBUGCHECK_CALLBACK_REASON
{
256 KbCallbackSecondaryDumpData
,
259 } KBUGCHECK_CALLBACK_REASON
;
261 struct _KBUGCHECK_REASON_CALLBACK_RECORD
;
263 _Function_class_(KBUGCHECK_REASON_CALLBACK_ROUTINE
)
266 (NTAPI KBUGCHECK_REASON_CALLBACK_ROUTINE
)(
267 _In_ KBUGCHECK_CALLBACK_REASON Reason
,
268 _In_
struct _KBUGCHECK_REASON_CALLBACK_RECORD
*Record
,
269 _Inout_ PVOID ReasonSpecificData
,
270 _In_ ULONG ReasonSpecificDataLength
);
271 typedef KBUGCHECK_REASON_CALLBACK_ROUTINE
*PKBUGCHECK_REASON_CALLBACK_ROUTINE
;
273 typedef struct _KBUGCHECK_ADD_PAGES
{
274 _Inout_ PVOID Context
;
276 _In_ ULONG BugCheckCode
;
277 _Out_ ULONG_PTR Address
;
278 _Out_ ULONG_PTR Count
;
279 } KBUGCHECK_ADD_PAGES
, *PKBUGCHECK_ADD_PAGES
;
281 typedef struct _KBUGCHECK_SECONDARY_DUMP_DATA
{
283 _In_ ULONG InBufferLength
;
284 _In_ ULONG MaximumAllowed
;
286 _Out_ PVOID OutBuffer
;
287 _Out_ ULONG OutBufferLength
;
288 } KBUGCHECK_SECONDARY_DUMP_DATA
, *PKBUGCHECK_SECONDARY_DUMP_DATA
;
290 typedef enum _KBUGCHECK_DUMP_IO_TYPE
{
294 KbDumpIoSecondaryData
,
296 } KBUGCHECK_DUMP_IO_TYPE
;
298 typedef struct _KBUGCHECK_DUMP_IO
{
301 _In_ ULONG BufferLength
;
302 _In_ KBUGCHECK_DUMP_IO_TYPE Type
;
303 } KBUGCHECK_DUMP_IO
, *PKBUGCHECK_DUMP_IO
;
305 #define KB_ADD_PAGES_FLAG_VIRTUAL_ADDRESS 0x00000001UL
306 #define KB_ADD_PAGES_FLAG_PHYSICAL_ADDRESS 0x00000002UL
307 #define KB_ADD_PAGES_FLAG_ADDITIONAL_RANGES_EXIST 0x80000000UL
309 typedef struct _KBUGCHECK_REASON_CALLBACK_RECORD
{
311 PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine
;
314 KBUGCHECK_CALLBACK_REASON Reason
;
316 } KBUGCHECK_REASON_CALLBACK_RECORD
, *PKBUGCHECK_REASON_CALLBACK_RECORD
;
318 typedef enum _KBUGCHECK_BUFFER_DUMP_STATE
{
324 } KBUGCHECK_BUFFER_DUMP_STATE
;
326 _Function_class_(KBUGCHECK_CALLBACK_ROUTINE
)
329 (NTAPI KBUGCHECK_CALLBACK_ROUTINE
)(
332 typedef KBUGCHECK_CALLBACK_ROUTINE
*PKBUGCHECK_CALLBACK_ROUTINE
;
334 typedef struct _KBUGCHECK_CALLBACK_RECORD
{
336 PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine
;
337 _Field_size_bytes_opt_(Length
) PVOID Buffer
;
342 } KBUGCHECK_CALLBACK_RECORD
, *PKBUGCHECK_CALLBACK_RECORD
;
344 _Function_class_(NMI_CALLBACK
)
347 (NTAPI NMI_CALLBACK
)(
348 _In_opt_ PVOID Context
,
349 _In_ BOOLEAN Handled
);
350 typedef NMI_CALLBACK
*PNMI_CALLBACK
;
352 typedef enum _KE_PROCESSOR_CHANGE_NOTIFY_STATE
{
353 KeProcessorAddStartNotify
= 0,
354 KeProcessorAddCompleteNotify
,
355 KeProcessorAddFailureNotify
356 } KE_PROCESSOR_CHANGE_NOTIFY_STATE
;
358 typedef struct _KE_PROCESSOR_CHANGE_NOTIFY_CONTEXT
{
359 KE_PROCESSOR_CHANGE_NOTIFY_STATE State
;
362 #if (NTDDI_VERSION >= NTDDI_WIN7)
363 PROCESSOR_NUMBER ProcNumber
;
365 } KE_PROCESSOR_CHANGE_NOTIFY_CONTEXT
, *PKE_PROCESSOR_CHANGE_NOTIFY_CONTEXT
;
368 _Function_class_(PROCESSOR_CALLBACK_FUNCTION
)
370 (NTAPI PROCESSOR_CALLBACK_FUNCTION
)(
371 _In_ PVOID CallbackContext
,
372 _In_ PKE_PROCESSOR_CHANGE_NOTIFY_CONTEXT ChangeContext
,
373 _Inout_ PNTSTATUS OperationStatus
);
374 typedef PROCESSOR_CALLBACK_FUNCTION
*PPROCESSOR_CALLBACK_FUNCTION
;
376 #define KE_PROCESSOR_CHANGE_ADD_EXISTING 1
378 #define INVALID_PROCESSOR_INDEX 0xffffffff
380 typedef enum _KINTERRUPT_POLARITY
{
381 InterruptPolarityUnknown
,
384 } KINTERRUPT_POLARITY
, *PKINTERRUPT_POLARITY
;
386 typedef enum _KPROFILE_SOURCE
{
388 ProfileAlignmentFixup
,
391 ProfileLoadInstructions
,
392 ProfilePipelineFrozen
,
393 ProfileBranchInstructions
,
394 ProfileTotalNonissues
,
398 ProfileBranchMispredictions
,
399 ProfileStoreInstructions
,
400 ProfileFpInstructions
,
401 ProfileIntegerInstructions
,
405 ProfileSpecialInstructions
,
408 ProfileDcacheAccesses
,
409 ProfileMemoryBarrierCycles
,
410 ProfileLoadLinkedIssues
,
414 typedef enum _KWAIT_REASON
{
455 typedef struct _KWAIT_BLOCK
{
456 LIST_ENTRY WaitListEntry
;
457 #if (NTDDI_VERSION >= NTDDI_WIN8)
459 volatile UCHAR BlockState
;
465 struct _KTHREAD
*Thread
;
466 struct _KQUEUE
*NotificationQueue
;
471 struct _KTHREAD
*Thread
;
473 struct _KWAIT_BLOCK
*NextWaitBlock
;
476 #if (NTDDI_VERSION >= NTDDI_WIN7)
477 volatile UCHAR BlockState
;
485 } KWAIT_BLOCK
, *PKWAIT_BLOCK
, *PRKWAIT_BLOCK
;
487 typedef enum _KINTERRUPT_MODE
{
492 #define THREAD_WAIT_OBJECTS 3
495 _Function_class_(KSTART_ROUTINE
)
497 (NTAPI KSTART_ROUTINE
)(
498 _In_ PVOID StartContext
);
499 typedef KSTART_ROUTINE
*PKSTART_ROUTINE
;
502 (NTAPI
*PKINTERRUPT_ROUTINE
)(
505 _Function_class_(KSERVICE_ROUTINE
)
506 _IRQL_requires_(HIGH_LEVEL
)
509 (NTAPI KSERVICE_ROUTINE
)(
510 _In_
struct _KINTERRUPT
*Interrupt
,
511 _In_ PVOID ServiceContext
);
512 typedef KSERVICE_ROUTINE
*PKSERVICE_ROUTINE
;
514 _Function_class_(KMESSAGE_SERVICE_ROUTINE
)
517 (NTAPI KMESSAGE_SERVICE_ROUTINE
)(
518 _In_
struct _KINTERRUPT
*Interrupt
,
519 _In_ PVOID ServiceContext
,
520 _In_ ULONG MessageID
);
521 typedef KMESSAGE_SERVICE_ROUTINE
*PKMESSAGE_SERVICE_ROUTINE
;
523 typedef enum _KD_OPTION
{
524 KD_OPTION_SET_BLOCK_ENABLE
,
529 (NTAPI
*PKNORMAL_ROUTINE
)(
530 IN PVOID NormalContext OPTIONAL
,
531 IN PVOID SystemArgument1 OPTIONAL
,
532 IN PVOID SystemArgument2 OPTIONAL
);
535 (NTAPI
*PKRUNDOWN_ROUTINE
)(
536 IN
struct _KAPC
*Apc
);
539 (NTAPI
*PKKERNEL_ROUTINE
)(
540 IN
struct _KAPC
*Apc
,
541 IN OUT PKNORMAL_ROUTINE
*NormalRoutine OPTIONAL
,
542 IN OUT PVOID
*NormalContext OPTIONAL
,
543 IN OUT PVOID
*SystemArgument1 OPTIONAL
,
544 IN OUT PVOID
*SystemArgument2 OPTIONAL
);
547 typedef struct _KAPC
{
553 struct _KTHREAD
*Thread
;
554 LIST_ENTRY ApcListEntry
;
556 PKKERNEL_ROUTINE KernelRoutine
;
557 PKRUNDOWN_ROUTINE RundownRoutine
;
558 PKNORMAL_ROUTINE NormalRoutine
;
563 PVOID SystemArgument1
;
564 PVOID SystemArgument2
;
566 KPROCESSOR_MODE ApcMode
;
568 } KAPC
, *PKAPC
, *RESTRICTED_POINTER PRKAPC
;
570 #define KAPC_OFFSET_TO_SPARE_BYTE0 FIELD_OFFSET(KAPC, SpareByte0)
571 #define KAPC_OFFSET_TO_SPARE_BYTE1 FIELD_OFFSET(KAPC, SpareByte1)
572 #define KAPC_OFFSET_TO_SPARE_LONG FIELD_OFFSET(KAPC, SpareLong0)
573 #define KAPC_OFFSET_TO_SYSTEMARGUMENT1 FIELD_OFFSET(KAPC, SystemArgument1)
574 #define KAPC_OFFSET_TO_SYSTEMARGUMENT2 FIELD_OFFSET(KAPC, SystemArgument2)
575 #define KAPC_OFFSET_TO_APCSTATEINDEX FIELD_OFFSET(KAPC, ApcStateIndex)
576 #define KAPC_ACTUAL_LENGTH (FIELD_OFFSET(KAPC, Inserted) + sizeof(BOOLEAN))
578 typedef struct _KDEVICE_QUEUE_ENTRY
{
579 LIST_ENTRY DeviceListEntry
;
582 } KDEVICE_QUEUE_ENTRY
, *PKDEVICE_QUEUE_ENTRY
,
583 *RESTRICTED_POINTER PRKDEVICE_QUEUE_ENTRY
;
585 typedef PVOID PKIPI_CONTEXT
;
588 (NTAPI
*PKIPI_WORKER
)(
589 IN OUT PKIPI_CONTEXT PacketContext
,
590 IN PVOID Parameter1 OPTIONAL
,
591 IN PVOID Parameter2 OPTIONAL
,
592 IN PVOID Parameter3 OPTIONAL
);
594 typedef struct _KIPI_COUNTS
{
600 ULONG FlushMultipleTb
;
606 ULONG SweepIcacheRange
;
607 ULONG FlushIoBuffers
;
609 } KIPI_COUNTS
, *PKIPI_COUNTS
;
612 _Function_class_(KIPI_BROADCAST_WORKER
)
613 _IRQL_requires_(IPI_LEVEL
)
615 (NTAPI KIPI_BROADCAST_WORKER
)(
616 _In_ ULONG_PTR Argument
);
617 typedef KIPI_BROADCAST_WORKER
*PKIPI_BROADCAST_WORKER
;
619 typedef ULONG_PTR KSPIN_LOCK
, *PKSPIN_LOCK
;
621 typedef struct _KSPIN_LOCK_QUEUE
{
622 struct _KSPIN_LOCK_QUEUE
*volatile Next
;
623 PKSPIN_LOCK
volatile Lock
;
624 } KSPIN_LOCK_QUEUE
, *PKSPIN_LOCK_QUEUE
;
626 typedef struct _KLOCK_QUEUE_HANDLE
{
627 KSPIN_LOCK_QUEUE LockQueue
;
629 } KLOCK_QUEUE_HANDLE
, *PKLOCK_QUEUE_HANDLE
;
633 typedef ULONG64 KSPIN_LOCK_QUEUE_NUMBER
;
635 #define LockQueueDispatcherLock 0
636 #define LockQueueExpansionLock 1
637 #define LockQueuePfnLock 2
638 #define LockQueueSystemSpaceLock 3
639 #define LockQueueVacbLock 4
640 #define LockQueueMasterLock 5
641 #define LockQueueNonPagedPoolLock 6
642 #define LockQueueIoCancelLock 7
643 #define LockQueueWorkQueueLock 8
644 #define LockQueueIoVpbLock 9
645 #define LockQueueIoDatabaseLock 10
646 #define LockQueueIoCompletionLock 11
647 #define LockQueueNtfsStructLock 12
648 #define LockQueueAfdWorkQueueLock 13
649 #define LockQueueBcbLock 14
650 #define LockQueueMmNonPagedPoolLock 15
651 #define LockQueueUnusedSpare16 16
652 #define LockQueueTimerTableLock 17
653 #define LockQueueMaximumLock (LockQueueTimerTableLock + LOCK_QUEUE_TIMER_TABLE_LOCKS)
657 typedef enum _KSPIN_LOCK_QUEUE_NUMBER
{
658 LockQueueDispatcherLock
,
659 LockQueueExpansionLock
,
661 LockQueueSystemSpaceLock
,
664 LockQueueNonPagedPoolLock
,
665 LockQueueIoCancelLock
,
666 LockQueueWorkQueueLock
,
668 LockQueueIoDatabaseLock
,
669 LockQueueIoCompletionLock
,
670 LockQueueNtfsStructLock
,
671 LockQueueAfdWorkQueueLock
,
673 LockQueueMmNonPagedPoolLock
,
674 LockQueueUnusedSpare16
,
675 LockQueueTimerTableLock
,
676 LockQueueMaximumLock
= LockQueueTimerTableLock
+ LOCK_QUEUE_TIMER_TABLE_LOCKS
677 } KSPIN_LOCK_QUEUE_NUMBER
, *PKSPIN_LOCK_QUEUE_NUMBER
;
679 #endif /* defined(_AMD64_) */
681 _Function_class_(KDEFERRED_ROUTINE
)
682 _IRQL_requires_(DISPATCH_LEVEL
)
685 (NTAPI KDEFERRED_ROUTINE
)(
686 _In_
struct _KDPC
*Dpc
,
687 _In_opt_ PVOID DeferredContext
,
688 _In_opt_ PVOID SystemArgument1
,
689 _In_opt_ PVOID SystemArgument2
);
690 typedef KDEFERRED_ROUTINE
*PKDEFERRED_ROUTINE
;
692 typedef enum _KDPC_IMPORTANCE
{
699 typedef struct _KDPC
{
702 volatile USHORT Number
;
703 LIST_ENTRY DpcListEntry
;
704 PKDEFERRED_ROUTINE DeferredRoutine
;
705 PVOID DeferredContext
;
706 PVOID SystemArgument1
;
707 PVOID SystemArgument2
;
708 volatile PVOID DpcData
;
709 } KDPC
, *PKDPC
, *RESTRICTED_POINTER PRKDPC
;
711 typedef struct _KDPC_WATCHDOG_INFORMATION
{
714 ULONG DpcWatchdogLimit
;
715 ULONG DpcWatchdogCount
;
717 } KDPC_WATCHDOG_INFORMATION
, *PKDPC_WATCHDOG_INFORMATION
;
719 typedef struct _KDEVICE_QUEUE
{
722 LIST_ENTRY DeviceListHead
;
724 # if defined(_AMD64_)
725 _ANONYMOUS_UNION
union {
727 _ANONYMOUS_STRUCT
struct {
735 } KDEVICE_QUEUE
, *PKDEVICE_QUEUE
, *RESTRICTED_POINTER PRKDEVICE_QUEUE
;
737 #define TIMER_EXPIRED_INDEX_BITS 6
738 #define TIMER_PROCESSOR_INDEX_BITS 5
740 typedef struct _DISPATCHER_HEADER
{
741 _ANONYMOUS_UNION
union {
742 _ANONYMOUS_STRUCT
struct {
744 _ANONYMOUS_UNION
union {
745 _ANONYMOUS_UNION
union {
746 UCHAR TimerControlFlags
;
747 _ANONYMOUS_STRUCT
struct {
750 UCHAR KeepShifting
:1;
751 UCHAR EncodedTolerableDelay
:5;
755 #if (NTDDI_VERSION < NTDDI_WIN7)
760 _ANONYMOUS_UNION
union {
761 _ANONYMOUS_UNION
union {
762 UCHAR ThreadControlFlags
;
763 _ANONYMOUS_STRUCT
struct {
764 UCHAR CpuThrottled
:1;
765 UCHAR CycleProfiling
:1;
766 UCHAR CounterProfiling
:1;
773 _ANONYMOUS_UNION
union {
774 #if (NTDDI_VERSION >= NTDDI_WIN7)
775 _ANONYMOUS_UNION
union {
776 UCHAR TimerMiscFlags
;
777 _ANONYMOUS_STRUCT
struct {
779 UCHAR Index
:TIMER_EXPIRED_INDEX_BITS
;
782 UCHAR Processor
:TIMER_PROCESSOR_INDEX_BITS
;
785 volatile UCHAR Expired
:1;
789 /* Pre Win7 compatibility fix to latest WDK */
792 _ANONYMOUS_UNION
union {
794 _ANONYMOUS_STRUCT
struct {
796 BOOLEAN Instrumented
:1;
798 BOOLEAN UmsScheduled
:1;
799 BOOLEAN UmsPrimary
:1;
801 } DUMMYUNIONNAME
; /* should probably be DUMMYUNIONNAME2, but this is what WDK says */
808 LIST_ENTRY WaitListHead
;
809 } DISPATCHER_HEADER
, *PDISPATCHER_HEADER
;
811 typedef struct _KEVENT
{
812 DISPATCHER_HEADER Header
;
813 } KEVENT
, *PKEVENT
, *RESTRICTED_POINTER PRKEVENT
;
815 typedef struct _KSEMAPHORE
{
816 DISPATCHER_HEADER Header
;
818 } KSEMAPHORE
, *PKSEMAPHORE
, *RESTRICTED_POINTER PRKSEMAPHORE
;
820 #define KSEMAPHORE_ACTUAL_LENGTH (FIELD_OFFSET(KSEMAPHORE, Limit) + sizeof(LONG))
822 typedef struct _KGATE
{
823 DISPATCHER_HEADER Header
;
824 } KGATE
, *PKGATE
, *RESTRICTED_POINTER PRKGATE
;
826 typedef struct _KGUARDED_MUTEX
{
831 _ANONYMOUS_UNION
union {
832 _ANONYMOUS_STRUCT
struct {
833 SHORT KernelApcDisable
;
834 SHORT SpecialApcDisable
;
836 ULONG CombinedApcDisable
;
838 } KGUARDED_MUTEX
, *PKGUARDED_MUTEX
;
840 typedef struct _KMUTANT
{
841 DISPATCHER_HEADER Header
;
842 LIST_ENTRY MutantListEntry
;
843 struct _KTHREAD
*RESTRICTED_POINTER OwnerThread
;
846 } KMUTANT
, *PKMUTANT
, *RESTRICTED_POINTER PRKMUTANT
, KMUTEX
, *PKMUTEX
, *RESTRICTED_POINTER PRKMUTEX
;
848 #define TIMER_TABLE_SIZE 512
849 #define TIMER_TABLE_SHIFT 9
851 typedef struct _KTIMER
{
852 DISPATCHER_HEADER Header
;
853 ULARGE_INTEGER DueTime
;
854 LIST_ENTRY TimerListEntry
;
856 #if (NTDDI_VERSION >= NTDDI_WIN7) && !defined(_X86_)
860 } KTIMER
, *PKTIMER
, *RESTRICTED_POINTER PRKTIMER
;
862 typedef enum _LOCK_OPERATION
{
868 #define KTIMER_ACTUAL_LENGTH (FIELD_OFFSET(KTIMER, Period) + sizeof(LONG))
870 _Function_class_(KSYNCHRONIZE_ROUTINE
)
873 (NTAPI KSYNCHRONIZE_ROUTINE
)(
874 _In_ PVOID SynchronizeContext
);
875 typedef KSYNCHRONIZE_ROUTINE
*PKSYNCHRONIZE_ROUTINE
;
877 typedef enum _POOL_TYPE
{
880 NonPagedPoolMustSucceed
,
882 NonPagedPoolCacheAligned
,
883 PagedPoolCacheAligned
,
884 NonPagedPoolCacheAlignedMustS
,
887 NonPagedPoolBase
= 0,
888 NonPagedPoolBaseMustSucceed
= NonPagedPoolBase
+ 2,
889 NonPagedPoolBaseCacheAligned
= NonPagedPoolBase
+ 4,
890 NonPagedPoolBaseCacheAlignedMustS
= NonPagedPoolBase
+ 6,
892 NonPagedPoolSession
= 32,
894 NonPagedPoolMustSucceedSession
,
895 DontUseThisTypeSession
,
896 NonPagedPoolCacheAlignedSession
,
897 PagedPoolCacheAlignedSession
,
898 NonPagedPoolCacheAlignedMustSSession
901 typedef enum _ALTERNATIVE_ARCHITECTURE_TYPE
{
905 } ALTERNATIVE_ARCHITECTURE_TYPE
;
907 /* Correctly define these run-time definitions for non X86 machines */
911 #define IsNEC_98 (FALSE)
915 #define IsNotNEC_98 (TRUE)
928 typedef struct _KSYSTEM_TIME
{
932 } KSYSTEM_TIME
, *PKSYSTEM_TIME
;
934 typedef struct DECLSPEC_ALIGN(16) _M128A
{
939 typedef struct DECLSPEC_ALIGN(16) _XSAVE_FORMAT
{
946 USHORT ErrorSelector
;
953 M128A FloatRegisters
[8];
955 M128A XmmRegisters
[16];
958 M128A XmmRegisters
[8];
959 UCHAR Reserved4
[192];
960 ULONG StackControl
[7];
963 } XSAVE_FORMAT
, *PXSAVE_FORMAT
;
965 typedef struct DECLSPEC_ALIGN(8) _XSAVE_AREA_HEADER
{
968 } XSAVE_AREA_HEADER
, *PXSAVE_AREA_HEADER
;
970 typedef struct DECLSPEC_ALIGN(16) _XSAVE_AREA
{
971 XSAVE_FORMAT LegacyState
;
972 XSAVE_AREA_HEADER Header
;
973 } XSAVE_AREA
, *PXSAVE_AREA
;
975 typedef struct _XSTATE_CONTEXT
{
979 _Field_size_bytes_opt_(Length
) PXSAVE_AREA Area
;
987 } XSTATE_CONTEXT
, *PXSTATE_CONTEXT
;
989 typedef struct _XSTATE_SAVE
{
991 struct _XSTATE_SAVE
* Prev
;
992 struct _KTHREAD
* Thread
;
994 XSTATE_CONTEXT XStateContext
;
995 #elif defined(_IA64_) || defined(_ARM_) || defined(_ARM64_)
998 _ANONYMOUS_UNION
union {
999 _ANONYMOUS_STRUCT
struct {
1002 struct _XSTATE_SAVE
* Prev
;
1003 PXSAVE_AREA Reserved3
;
1004 struct _KTHREAD
* Thread
;
1008 XSTATE_CONTEXT XStateContext
;
1011 } XSTATE_SAVE
, *PXSTATE_SAVE
;
1015 #define MAXIMUM_SUPPORTED_EXTENSION 512
1017 #if !defined(__midl) && !defined(MIDL_PASS)
1018 C_ASSERT(sizeof(XSAVE_FORMAT
) == MAXIMUM_SUPPORTED_EXTENSION
);
1023 #define XSAVE_ALIGN 64
1024 #define MINIMAL_XSTATE_AREA_LENGTH sizeof(XSAVE_AREA)
1026 #if !defined(__midl) && !defined(MIDL_PASS)
1027 C_ASSERT((sizeof(XSAVE_FORMAT
) & (XSAVE_ALIGN
- 1)) == 0);
1028 C_ASSERT((FIELD_OFFSET(XSAVE_AREA
, Header
) & (XSAVE_ALIGN
- 1)) == 0);
1029 C_ASSERT(MINIMAL_XSTATE_AREA_LENGTH
== 512 + 64);
1032 typedef struct _CONTEXT_CHUNK
{
1035 } CONTEXT_CHUNK
, *PCONTEXT_CHUNK
;
1037 typedef struct _CONTEXT_EX
{
1039 CONTEXT_CHUNK Legacy
;
1040 CONTEXT_CHUNK XState
;
1041 } CONTEXT_EX
, *PCONTEXT_EX
;
1043 #define CONTEXT_EX_LENGTH ALIGN_UP_BY(sizeof(CONTEXT_EX), STACK_ALIGN)
1045 #if (NTDDI_VERSION >= NTDDI_VISTA)
1046 extern NTSYSAPI
volatile CCHAR KeNumberProcessors
;
1047 #elif (NTDDI_VERSION >= NTDDI_WINXP)
1048 extern NTSYSAPI CCHAR KeNumberProcessors
;
1050 __CREATE_NTOS_DATA_IMPORT_ALIAS(KeNumberProcessors
)
1051 extern PCCHAR KeNumberProcessors
;
1057 typedef struct _EXCEPTION_REGISTRATION_RECORD
1059 struct _EXCEPTION_REGISTRATION_RECORD
*Next
;
1060 PEXCEPTION_ROUTINE Handler
;
1061 } EXCEPTION_REGISTRATION_RECORD
, *PEXCEPTION_REGISTRATION_RECORD
;
1063 typedef struct _NT_TIB
{
1064 struct _EXCEPTION_REGISTRATION_RECORD
*ExceptionList
;
1068 _ANONYMOUS_UNION
union {
1072 PVOID ArbitraryUserPointer
;
1073 struct _NT_TIB
*Self
;
1076 typedef struct _NT_TIB32
{
1077 ULONG ExceptionList
;
1081 _ANONYMOUS_UNION
union {
1085 ULONG ArbitraryUserPointer
;
1087 } NT_TIB32
,*PNT_TIB32
;
1089 typedef struct _NT_TIB64
{
1090 ULONG64 ExceptionList
;
1093 ULONG64 SubSystemTib
;
1094 _ANONYMOUS_UNION
union {
1098 ULONG64 ArbitraryUserPointer
;
1100 } NT_TIB64
,*PNT_TIB64
;
1102 _IRQL_requires_same_
1103 _Function_class_(EXPAND_STACK_CALLOUT
)
1105 (NTAPI EXPAND_STACK_CALLOUT
)(
1106 _In_opt_ PVOID Parameter
);
1107 typedef EXPAND_STACK_CALLOUT
*PEXPAND_STACK_CALLOUT
;
1110 (NTAPI
*PTIMER_APC_ROUTINE
)(
1111 _In_ PVOID TimerContext
,
1112 _In_ ULONG TimerLowValue
,
1113 _In_ LONG TimerHighValue
);
1115 typedef enum _TIMER_SET_INFORMATION_CLASS
{
1116 TimerSetCoalescableTimer
,
1118 } TIMER_SET_INFORMATION_CLASS
;
1120 #if (NTDDI_VERSION >= NTDDI_WIN7)
1121 typedef struct _TIMER_SET_COALESCABLE_TIMER_INFO
{
1122 _In_ LARGE_INTEGER DueTime
;
1123 _In_opt_ PTIMER_APC_ROUTINE TimerApcRoutine
;
1124 _In_opt_ PVOID TimerContext
;
1125 _In_opt_
struct _COUNTED_REASON_CONTEXT
*WakeContext
;
1126 _In_opt_ ULONG Period
;
1127 _In_ ULONG TolerableDelay
;
1128 _Out_opt_ PBOOLEAN PreviousState
;
1129 } TIMER_SET_COALESCABLE_TIMER_INFO
, *PTIMER_SET_COALESCABLE_TIMER_INFO
;
1130 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
1132 #define XSTATE_LEGACY_FLOATING_POINT 0
1133 #define XSTATE_LEGACY_SSE 1
1134 #define XSTATE_GSSE 2
1135 #define XSTATE_AVX XSTATE_GSSE
1136 #define XSTATE_MPX_BNDREGS 3
1137 #define XSTATE_MPX_BNDCSR 4
1138 #define XSTATE_AVX512_KMASK 5
1139 #define XSTATE_AVX512_ZMM_H 6
1140 #define XSTATE_AVX512_ZMM 7
1141 #define XSTATE_IPT 8
1142 #define XSTATE_PASID 10
1143 #define XSTATE_CET_U 11
1144 #define XSTATE_CET_S 12
1145 #define XSTATE_AMX_TILE_CONFIG 17
1146 #define XSTATE_AMX_TILE_DATA 18
1147 #define XSTATE_LWP 62
1148 #define MAXIMUM_XSTATE_FEATURES 64
1150 #define XSTATE_MASK_LEGACY_FLOATING_POINT (1LL << (XSTATE_LEGACY_FLOATING_POINT))
1151 #define XSTATE_MASK_LEGACY_SSE (1LL << (XSTATE_LEGACY_SSE))
1152 #define XSTATE_MASK_LEGACY (XSTATE_MASK_LEGACY_FLOATING_POINT | XSTATE_MASK_LEGACY_SSE)
1153 #define XSTATE_MASK_GSSE (1LL << (XSTATE_GSSE))
1154 #define XSTATE_MASK_AVX XSTATE_MASK_GSSE
1155 #define XSTATE_MASK_MPX ((1LL << (XSTATE_MPX_BNDREGS)) | (1LL << (XSTATE_MPX_BNDCSR)))
1156 #define XSTATE_MASK_AVX512 ((1LL << (XSTATE_AVX512_KMASK)) | (1LL << (XSTATE_AVX512_ZMM_H)) | (1LL << (XSTATE_AVX512_ZMM)))
1157 #define XSTATE_MASK_IPT (1LL << (XSTATE_IPT))
1158 #define XSTATE_MASK_PASID (1LL << (XSTATE_PASID))
1159 #define XSTATE_MASK_CET_U (1LL << (XSTATE_CET_U))
1160 #define XSTATE_MASK_CET_S (1LL << (XSTATE_CET_S))
1161 #define XSTATE_MASK_AMX_TILE_CONFIG (1LL << (XSTATE_AMX_TILE_CONFIG))
1162 #define XSTATE_MASK_AMX_TILE_DATA (1LL << (XSTATE_AMX_TILE_DATA))
1163 #define XSTATE_MASK_LWP (1LL << (XSTATE_LWP))
1165 #if defined(_AMD64_)
1166 #define XSTATE_MASK_ALLOWED \
1167 (XSTATE_MASK_LEGACY | \
1170 XSTATE_MASK_AVX512 | \
1172 XSTATE_MASK_PASID | \
1173 XSTATE_MASK_CET_U | \
1174 XSTATE_MASK_AMX_TILE_CONFIG | \
1175 XSTATE_MASK_AMX_TILE_DATA | \
1177 #elif defined(_X86_)
1178 #define XSTATE_MASK_ALLOWED \
1179 (XSTATE_MASK_LEGACY | \
1182 XSTATE_MASK_AVX512 | \
1184 XSTATE_MASK_CET_U | \
1188 #define XSTATE_MASK_PERSISTENT ((1LL << (XSTATE_MPX_BNDCSR)) | XSTATE_MASK_LWP)
1189 #define XSTATE_MASK_USER_VISIBLE_SUPERVISOR (XSTATE_MASK_CET_U)
1190 #define XSTATE_MASK_LARGE_FEATURES (XSTATE_MASK_AMX_TILE_DATA)
1193 #if !defined(__midl) && !defined(MIDL_PASS)
1194 C_ASSERT((XSTATE_MASK_ALLOWED
& XSTATE_MASK_LARGE_FEATURES
) == 0);
1198 #define XSTATE_COMPACTION_ENABLE 63
1199 #define XSTATE_COMPACTION_ENABLE_MASK (1LL << (XSTATE_COMPACTION_ENABLE))
1200 #define XSTATE_ALIGN_BIT 1
1201 #define XSTATE_ALIGN_MASK (1LL << (XSTATE_ALIGN_BIT))
1203 #define XSTATE_XFD_BIT 2
1204 #define XSTATE_XFD_MASK (1LL << (XSTATE_XFD_BIT))
1206 #define XSTATE_CONTROLFLAG_XSAVEOPT_MASK 1
1207 #define XSTATE_CONTROLFLAG_XSAVEC_MASK 2
1208 #define XSTATE_CONTROLFLAG_XFD_MASK 4
1209 #define XSTATE_CONTROLFLAG_VALID_MASK \
1210 (XSTATE_CONTROLFLAG_XSAVEOPT_MASK | \
1211 XSTATE_CONTROLFLAG_XSAVEC_MASK | \
1212 XSTATE_CONTROLFLAG_XFD_MASK)
1214 #define MAXIMUM_XSTATE_FEATURES 64
1216 typedef struct _XSTATE_FEATURE
{
1219 } XSTATE_FEATURE
, *PXSTATE_FEATURE
;
1221 typedef struct _XSTATE_CONFIGURATION
1223 ULONG64 EnabledFeatures
;
1224 #if (NTDDI_VERSION >= NTDDI_WINBLUE)
1225 ULONG64 EnabledVolatileFeatures
;
1233 ULONG OptimizedSave
:1;
1234 ULONG CompactionEnabled
:1; // WIN10+
1237 XSTATE_FEATURE Features
[MAXIMUM_XSTATE_FEATURES
];
1238 #if (NTDDI_VERSION >= NTDDI_WIN10)
1239 ULONG64 EnabledSupervisorFeatures
;
1240 ULONG64 AlignedFeatures
;
1241 ULONG AllFeatureSize
;
1242 ULONG AllFeatures
[MAXIMUM_XSTATE_FEATURES
];
1244 #if (NTDDI_VERSION >= NTDDI_WIN10_RS5)
1245 ULONG64 EnabledUserVisibleSupervisorFeatures
;
1247 #if (NTDDI_VERSION >= NTDDI_WIN11)
1248 ULONG64 ExtendedFeatureDisableFeatures
;
1249 ULONG AllNonLargeFeatureSize
;
1252 } XSTATE_CONFIGURATION
, *PXSTATE_CONFIGURATION
;
1254 #define MAX_WOW64_SHARED_ENTRIES 16
1257 // Flags for NXSupportPolicy
1259 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
1260 #define NX_SUPPORT_POLICY_ALWAYSOFF 0
1261 #define NX_SUPPORT_POLICY_ALWAYSON 1
1262 #define NX_SUPPORT_POLICY_OPTIN 2
1263 #define NX_SUPPORT_POLICY_OPTOUT 3
1267 // Shared Kernel User Data
1268 // Keep in sync with sdk/include/ndk/ketypes.h
1270 typedef struct _KUSER_SHARED_DATA
1272 ULONG TickCountLowDeprecated
; // 0x0
1273 ULONG TickCountMultiplier
; // 0x4
1274 volatile KSYSTEM_TIME InterruptTime
; // 0x8
1275 volatile KSYSTEM_TIME SystemTime
; // 0x14
1276 volatile KSYSTEM_TIME TimeZoneBias
; // 0x20
1277 USHORT ImageNumberLow
; // 0x2c
1278 USHORT ImageNumberHigh
; // 0x2e
1279 WCHAR NtSystemRoot
[260]; // 0x30
1280 ULONG MaxStackTraceDepth
; // 0x238
1281 ULONG CryptoExponent
; // 0x23c
1282 ULONG TimeZoneId
; // 0x240
1283 ULONG LargePageMinimum
; // 0x244
1284 ULONG Reserved2
[7]; // 0x248
1285 NT_PRODUCT_TYPE NtProductType
; // 0x264
1286 BOOLEAN ProductTypeIsValid
; // 0x268
1287 ULONG NtMajorVersion
; // 0x26c
1288 ULONG NtMinorVersion
; // 0x270
1289 BOOLEAN ProcessorFeatures
[PROCESSOR_FEATURE_MAX
]; // 0x274
1290 ULONG Reserved1
; // 0x2b4
1291 ULONG Reserved3
; // 0x2b8
1292 volatile ULONG TimeSlip
; // 0x2bc
1293 ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture
; // 0x2c0
1294 ULONG AltArchitecturePad
[1]; // 0x2c4
1295 LARGE_INTEGER SystemExpirationDate
; // 0x2c8
1296 ULONG SuiteMask
; // 0x2d0
1297 BOOLEAN KdDebuggerEnabled
; // 0x2d4
1298 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
1299 UCHAR NXSupportPolicy
; // 0x2d5
1301 volatile ULONG ActiveConsoleId
; // 0x2d8
1302 volatile ULONG DismountCount
; // 0x2dc
1303 ULONG ComPlusPackage
; // 0x2e0
1304 ULONG LastSystemRITEventTickCount
; // 0x2e4
1305 ULONG NumberOfPhysicalPages
; // 0x2e8
1306 BOOLEAN SafeBootMode
; // 0x2ec
1307 #if (NTDDI_VERSION >= NTDDI_WIN7)
1310 UCHAR TscQpcData
; // 0x2ed
1313 UCHAR TscQpcEnabled
:1; // 0x2ed
1314 UCHAR TscQpcSpareFlag
:1; // 0x2ed
1315 UCHAR TscQpcShift
:6; // 0x2ed
1318 UCHAR TscQpcPad
[2]; // 0x2ee
1320 #if (NTDDI_VERSION >= NTDDI_VISTA)
1323 ULONG SharedDataFlags
; // 0x2f0
1326 ULONG DbgErrorPortPresent
:1; // 0x2f0
1327 ULONG DbgElevationEnabled
:1; // 0x2f0
1328 ULONG DbgVirtEnabled
:1; // 0x2f0
1329 ULONG DbgInstallerDetectEnabled
:1; // 0x2f0
1330 ULONG DbgSystemDllRelocated
:1; // 0x2f0
1331 ULONG DbgDynProcessorEnabled
:1; // 0x2f0
1332 ULONG DbgSEHValidationEnabled
:1; // 0x2f0
1333 ULONG SpareBits
:25; // 0x2f0
1339 ULONG DataFlagsPad
[1]; // 0x2f4
1340 ULONGLONG TestRetInstruction
; // 0x2f8
1341 ULONG SystemCall
; // 0x300
1342 ULONG SystemCallReturn
; // 0x304
1343 ULONGLONG SystemCallPad
[3]; // 0x308
1346 volatile KSYSTEM_TIME TickCount
; // 0x320
1347 volatile ULONG64 TickCountQuad
; // 0x320
1350 ULONG ReservedTickCountOverlay
[3]; // 0x320
1351 ULONG TickCountPad
[1]; // 0x32c
1354 ULONG Cookie
; // 0x330
1355 #if (NTDDI_VERSION >= NTDDI_VISTA)
1356 ULONG CookiePad
[1]; // 0x334
1357 LONGLONG ConsoleSessionForegroundProcessId
; // 0x338
1359 #if (NTDDI_VERSION >= NTDDI_WS03)
1360 ULONG Wow64SharedInformation
[MAX_WOW64_SHARED_ENTRIES
]; // 2K3: 0x334 / Vista+: 0x340
1362 #if (NTDDI_VERSION >= NTDDI_VISTA)
1363 #if (NTDDI_VERSION >= NTDDI_WIN7)
1364 USHORT UserModeGlobalLogger
[16]; // 0x380
1366 USHORT UserModeGlobalLogger
[8]; // 0x380
1367 ULONG HeapTracingPid
[2]; // 0x390
1368 ULONG CritSecTracingPid
[2]; // 0x398
1370 ULONG ImageFileExecutionOptions
; // 0x3a0
1371 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
1372 ULONG LangGenerationCount
; // 0x3a4
1374 /* 4 bytes padding */
1376 ULONGLONG Reserved5
; // 0x3a8
1377 volatile ULONG64 InterruptTimeBias
; // 0x3b0
1378 #endif // NTDDI_VERSION >= NTDDI_VISTA
1379 #if (NTDDI_VERSION >= NTDDI_WIN7)
1380 volatile ULONG64 TscQpcBias
; // 0x3b8
1381 volatile ULONG ActiveProcessorCount
; // 0x3c0
1382 volatile USHORT ActiveGroupCount
; // 0x3c4
1383 USHORT Reserved4
; // 0x3c6
1384 volatile ULONG AitSamplingValue
; // 0x3c8
1385 volatile ULONG AppCompatFlag
; // 0x3cc
1386 ULONGLONG SystemDllNativeRelocation
; // 0x3d0
1387 ULONG SystemDllWowRelocation
; // 0x3d8
1388 ULONG XStatePad
[1]; // 0x3dc
1389 XSTATE_CONFIGURATION XState
; // 0x3e0
1391 } KUSER_SHARED_DATA
, *PKUSER_SHARED_DATA
;
1393 #if (NTDDI_VERSION >= NTDDI_VISTA)
1394 extern NTSYSAPI
volatile CCHAR KeNumberProcessors
;
1395 #elif (NTDDI_VERSION >= NTDDI_WINXP)
1396 extern NTSYSAPI CCHAR KeNumberProcessors
;
1398 extern PCCHAR KeNumberProcessors
;
1403 typedef struct _KAPC_STATE
{
1404 LIST_ENTRY ApcListHead
[MaximumMode
];
1406 BOOLEAN KernelApcInProgress
;
1407 BOOLEAN KernelApcPending
;
1408 BOOLEAN UserApcPending
;
1409 } KAPC_STATE
, *PKAPC_STATE
, *RESTRICTED_POINTER PRKAPC_STATE
;
1411 #define KAPC_STATE_ACTUAL_LENGTH (FIELD_OFFSET(KAPC_STATE, UserApcPending) + sizeof(BOOLEAN))
1413 #define ASSERT_QUEUE(Q) ASSERT(((Q)->Header.Type & KOBJECT_TYPE_MASK) == QueueObject);
1415 typedef struct _KQUEUE
{
1416 DISPATCHER_HEADER Header
;
1417 LIST_ENTRY EntryListHead
;
1418 volatile ULONG CurrentCount
;
1420 LIST_ENTRY ThreadListHead
;
1421 } KQUEUE
, *PKQUEUE
, *RESTRICTED_POINTER PRKQUEUE
;