[HEADERS]
[reactos.git] / include / xdk / ketypes.h
1 /******************************************************************************
2 * Kernel Types *
3 ******************************************************************************/
4
5 typedef UCHAR KIRQL, *PKIRQL;
6 typedef CCHAR KPROCESSOR_MODE;
7 typedef LONG KPRIORITY;
8
9 typedef ULONG EXECUTION_STATE;
10
11 typedef enum _MODE {
12 KernelMode,
13 UserMode,
14 MaximumMode
15 } MODE;
16
17 /* Processor features */
18 #define PF_FLOATING_POINT_PRECISION_ERRATA 0
19 #define PF_FLOATING_POINT_EMULATED 1
20 #define PF_COMPARE_EXCHANGE_DOUBLE 2
21 #define PF_MMX_INSTRUCTIONS_AVAILABLE 3
22 #define PF_PPC_MOVEMEM_64BIT_OK 4
23 #define PF_ALPHA_BYTE_INSTRUCTIONS 5
24 #define PF_XMMI_INSTRUCTIONS_AVAILABLE 6
25 #define PF_3DNOW_INSTRUCTIONS_AVAILABLE 7
26 #define PF_RDTSC_INSTRUCTION_AVAILABLE 8
27 #define PF_PAE_ENABLED 9
28 #define PF_XMMI64_INSTRUCTIONS_AVAILABLE 10
29 #define PF_SSE_DAZ_MODE_AVAILABLE 11
30 #define PF_NX_ENABLED 12
31 #define PF_SSE3_INSTRUCTIONS_AVAILABLE 13
32 #define PF_COMPARE_EXCHANGE128 14
33 #define PF_COMPARE64_EXCHANGE128 15
34 #define PF_CHANNELS_ENABLED 16
35 #define PF_XSAVE_ENABLED 17
36
37 #define MAXIMUM_SUPPORTED_EXTENSION 512
38 #define MAXIMUM_WAIT_OBJECTS 64
39
40 #define ASSERT_APC(Object) \
41 ASSERT((Object)->Type == ApcObject)
42
43 #define ASSERT_DPC(Object) \
44 ASSERT(((Object)->Type == 0) || \
45 ((Object)->Type == DpcObject) || \
46 ((Object)->Type == ThreadedDpcObject))
47
48 #define ASSERT_GATE(object) \
49 ASSERT((((object)->Header.Type & KOBJECT_TYPE_MASK) == GateObject) || \
50 (((object)->Header.Type & KOBJECT_TYPE_MASK) == EventSynchronizationObject))
51
52 #define ASSERT_DEVICE_QUEUE(Object) \
53 ASSERT((Object)->Type == DeviceQueueObject)
54
55 #define ASSERT_TIMER(E) \
56 ASSERT(((E)->Header.Type == TimerNotificationObject) || \
57 ((E)->Header.Type == TimerSynchronizationObject))
58
59 #define ASSERT_MUTANT(E) \
60 ASSERT((E)->Header.Type == MutantObject)
61
62 #define ASSERT_SEMAPHORE(E) \
63 ASSERT((E)->Header.Type == SemaphoreObject)
64
65 #define ASSERT_EVENT(E) \
66 ASSERT(((E)->Header.Type == NotificationEvent) || \
67 ((E)->Header.Type == SynchronizationEvent))
68
69 #define DPC_NORMAL 0
70 #define DPC_THREADED 1
71
72 #define GM_LOCK_BIT 0x1
73 #define GM_LOCK_BIT_V 0x0
74 #define GM_LOCK_WAITER_WOKEN 0x2
75 #define GM_LOCK_WAITER_INC 0x4
76
77 #define LOCK_QUEUE_WAIT 1
78 #define LOCK_QUEUE_OWNER 2
79 #define LOCK_QUEUE_TIMER_LOCK_SHIFT 4
80 #define LOCK_QUEUE_TIMER_TABLE_LOCKS (1 << (8 - LOCK_QUEUE_TIMER_LOCK_SHIFT))
81
82 #define PROCESSOR_FEATURE_MAX 64
83
84 #define DBG_STATUS_CONTROL_C 1
85 #define DBG_STATUS_SYSRQ 2
86 #define DBG_STATUS_BUGCHECK_FIRST 3
87 #define DBG_STATUS_BUGCHECK_SECOND 4
88 #define DBG_STATUS_FATAL 5
89 #define DBG_STATUS_DEBUG_CONTROL 6
90 #define DBG_STATUS_WORKER 7
91
92 #if defined(_WIN64)
93 #define MAXIMUM_PROC_PER_GROUP 64
94 #else
95 #define MAXIMUM_PROC_PER_GROUP 32
96 #endif
97 #define MAXIMUM_PROCESSORS MAXIMUM_PROC_PER_GROUP
98
99 /* Exception Records */
100 #define EXCEPTION_NONCONTINUABLE 1
101 #define EXCEPTION_MAXIMUM_PARAMETERS 15
102
103 typedef struct _EXCEPTION_RECORD {
104 NTSTATUS ExceptionCode;
105 ULONG ExceptionFlags;
106 struct _EXCEPTION_RECORD *ExceptionRecord;
107 PVOID ExceptionAddress;
108 ULONG NumberParameters;
109 ULONG_PTR ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
110 } EXCEPTION_RECORD, *PEXCEPTION_RECORD;
111
112 typedef struct _EXCEPTION_RECORD32 {
113 NTSTATUS ExceptionCode;
114 ULONG ExceptionFlags;
115 ULONG ExceptionRecord;
116 ULONG ExceptionAddress;
117 ULONG NumberParameters;
118 ULONG ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
119 } EXCEPTION_RECORD32, *PEXCEPTION_RECORD32;
120
121 typedef struct _EXCEPTION_RECORD64 {
122 NTSTATUS ExceptionCode;
123 ULONG ExceptionFlags;
124 ULONG64 ExceptionRecord;
125 ULONG64 ExceptionAddress;
126 ULONG NumberParameters;
127 ULONG __unusedAlignment;
128 ULONG64 ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
129 } EXCEPTION_RECORD64, *PEXCEPTION_RECORD64;
130
131 typedef struct _EXCEPTION_POINTERS {
132 PEXCEPTION_RECORD ExceptionRecord;
133 PCONTEXT ContextRecord;
134 } EXCEPTION_POINTERS, *PEXCEPTION_POINTERS;
135
136
137 typedef enum _KBUGCHECK_CALLBACK_REASON {
138 KbCallbackInvalid,
139 KbCallbackReserved1,
140 KbCallbackSecondaryDumpData,
141 KbCallbackDumpIo,
142 KbCallbackAddPages
143 } KBUGCHECK_CALLBACK_REASON;
144
145 struct _KBUGCHECK_REASON_CALLBACK_RECORD;
146
147 typedef VOID
148 (DDKAPI *PKBUGCHECK_REASON_CALLBACK_ROUTINE)(
149 IN KBUGCHECK_CALLBACK_REASON Reason,
150 IN struct _KBUGCHECK_REASON_CALLBACK_RECORD *Record,
151 IN OUT PVOID ReasonSpecificData,
152 IN ULONG ReasonSpecificDataLength);
153
154 typedef struct _KBUGCHECK_REASON_CALLBACK_RECORD {
155 LIST_ENTRY Entry;
156 PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine;
157 PUCHAR Component;
158 ULONG_PTR Checksum;
159 KBUGCHECK_CALLBACK_REASON Reason;
160 UCHAR State;
161 } KBUGCHECK_REASON_CALLBACK_RECORD, *PKBUGCHECK_REASON_CALLBACK_RECORD;
162
163 typedef enum _KBUGCHECK_BUFFER_DUMP_STATE {
164 BufferEmpty,
165 BufferInserted,
166 BufferStarted,
167 BufferFinished,
168 BufferIncomplete
169 } KBUGCHECK_BUFFER_DUMP_STATE;
170
171 typedef VOID
172 (DDKAPI *PKBUGCHECK_CALLBACK_ROUTINE)(
173 IN PVOID Buffer,
174 IN ULONG Length);
175
176 typedef struct _KBUGCHECK_CALLBACK_RECORD {
177 LIST_ENTRY Entry;
178 PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine;
179 PVOID Buffer;
180 ULONG Length;
181 PUCHAR Component;
182 ULONG_PTR Checksum;
183 UCHAR State;
184 } KBUGCHECK_CALLBACK_RECORD, *PKBUGCHECK_CALLBACK_RECORD;
185
186 typedef BOOLEAN
187 (DDKAPI *PNMI_CALLBACK)(
188 IN PVOID Context,
189 IN BOOLEAN Handled);
190
191 typedef enum _TRACE_INFORMATION_CLASS {
192 TraceIdClass,
193 TraceHandleClass,
194 TraceEnableFlagsClass,
195 TraceEnableLevelClass,
196 GlobalLoggerHandleClass,
197 EventLoggerHandleClass,
198 AllLoggerHandlesClass,
199 TraceHandleByNameClass,
200 LoggerEventsLostClass,
201 TraceSessionSettingsClass,
202 LoggerEventsLoggedClass,
203 MaxTraceInformationClass
204 } TRACE_INFORMATION_CLASS;
205
206 typedef enum _KINTERRUPT_POLARITY {
207 InterruptPolarityUnknown,
208 InterruptActiveHigh,
209 InterruptActiveLow
210 } KINTERRUPT_POLARITY, *PKINTERRUPT_POLARITY;
211
212 typedef enum _KPROFILE_SOURCE {
213 ProfileTime,
214 ProfileAlignmentFixup,
215 ProfileTotalIssues,
216 ProfilePipelineDry,
217 ProfileLoadInstructions,
218 ProfilePipelineFrozen,
219 ProfileBranchInstructions,
220 ProfileTotalNonissues,
221 ProfileDcacheMisses,
222 ProfileIcacheMisses,
223 ProfileCacheMisses,
224 ProfileBranchMispredictions,
225 ProfileStoreInstructions,
226 ProfileFpInstructions,
227 ProfileIntegerInstructions,
228 Profile2Issue,
229 Profile3Issue,
230 Profile4Issue,
231 ProfileSpecialInstructions,
232 ProfileTotalCycles,
233 ProfileIcacheIssues,
234 ProfileDcacheAccesses,
235 ProfileMemoryBarrierCycles,
236 ProfileLoadLinkedIssues,
237 ProfileMaximum
238 } KPROFILE_SOURCE;
239
240 typedef enum _KWAIT_REASON {
241 Executive,
242 FreePage,
243 PageIn,
244 PoolAllocation,
245 DelayExecution,
246 Suspended,
247 UserRequest,
248 WrExecutive,
249 WrFreePage,
250 WrPageIn,
251 WrPoolAllocation,
252 WrDelayExecution,
253 WrSuspended,
254 WrUserRequest,
255 WrEventPair,
256 WrQueue,
257 WrLpcReceive,
258 WrLpcReply,
259 WrVirtualMemory,
260 WrPageOut,
261 WrRendezvous,
262 WrKeyedEvent,
263 WrTerminated,
264 WrProcessInSwap,
265 WrCpuRateControl,
266 WrCalloutStack,
267 WrKernel,
268 WrResource,
269 WrPushLock,
270 WrMutex,
271 WrQuantumEnd,
272 WrDispatchInt,
273 WrPreempted,
274 WrYieldExecution,
275 WrFastMutex,
276 WrGuardedMutex,
277 WrRundown,
278 MaximumWaitReason
279 } KWAIT_REASON;
280
281 typedef struct _KWAIT_BLOCK {
282 LIST_ENTRY WaitListEntry;
283 struct _KTHREAD *Thread;
284 PVOID Object;
285 struct _KWAIT_BLOCK *NextWaitBlock;
286 USHORT WaitKey;
287 UCHAR WaitType;
288 volatile UCHAR BlockState;
289 #if defined(_WIN64)
290 LONG SpareLong;
291 #endif
292 } KWAIT_BLOCK, *PKWAIT_BLOCK, *PRKWAIT_BLOCK;
293
294 typedef enum _KINTERRUPT_MODE {
295 LevelSensitive,
296 Latched
297 } KINTERRUPT_MODE;
298
299 #define THREAD_WAIT_OBJECTS 3
300
301 typedef VOID
302 (DDKAPI *PKINTERRUPT_ROUTINE)(
303 VOID);
304
305 typedef enum _KD_OPTION {
306 KD_OPTION_SET_BLOCK_ENABLE,
307 } KD_OPTION;
308
309 typedef enum _INTERFACE_TYPE {
310 InterfaceTypeUndefined = -1,
311 Internal,
312 Isa,
313 Eisa,
314 MicroChannel,
315 TurboChannel,
316 PCIBus,
317 VMEBus,
318 NuBus,
319 PCMCIABus,
320 CBus,
321 MPIBus,
322 MPSABus,
323 ProcessorInternal,
324 InternalPowerBus,
325 PNPISABus,
326 PNPBus,
327 Vmcs,
328 MaximumInterfaceType
329 } INTERFACE_TYPE, *PINTERFACE_TYPE;
330
331 typedef VOID
332 (DDKAPI *PKNORMAL_ROUTINE)(
333 IN PVOID NormalContext,
334 IN PVOID SystemArgument1,
335 IN PVOID SystemArgument2);
336
337 typedef VOID
338 (DDKAPI *PKRUNDOWN_ROUTINE)(
339 IN struct _KAPC *Apc);
340
341 typedef VOID
342 (DDKAPI *PKKERNEL_ROUTINE)(
343 IN struct _KAPC *Apc,
344 IN OUT PKNORMAL_ROUTINE *NormalRoutine,
345 IN OUT PVOID *NormalContext,
346 IN OUT PVOID *SystemArgument1,
347 IN OUT PVOID *SystemArgument2);
348
349 typedef struct _KAPC
350 {
351 UCHAR Type;
352 UCHAR SpareByte0;
353 UCHAR Size;
354 UCHAR SpareByte1;
355 ULONG SpareLong0;
356 struct _KTHREAD *Thread;
357 LIST_ENTRY ApcListEntry;
358 PKKERNEL_ROUTINE KernelRoutine;
359 PKRUNDOWN_ROUTINE RundownRoutine;
360 PKNORMAL_ROUTINE NormalRoutine;
361 PVOID NormalContext;
362 PVOID SystemArgument1;
363 PVOID SystemArgument2;
364 CCHAR ApcStateIndex;
365 KPROCESSOR_MODE ApcMode;
366 BOOLEAN Inserted;
367 } KAPC, *PKAPC, *RESTRICTED_POINTER PRKAPC;
368
369 typedef struct _KDEVICE_QUEUE_ENTRY {
370 LIST_ENTRY DeviceListEntry;
371 ULONG SortKey;
372 BOOLEAN Inserted;
373 } KDEVICE_QUEUE_ENTRY, *PKDEVICE_QUEUE_ENTRY,
374 *RESTRICTED_POINTER PRKDEVICE_QUEUE_ENTRY;
375
376 typedef PVOID PKIPI_CONTEXT;
377
378 typedef
379 VOID
380 (NTAPI *PKIPI_WORKER)(
381 IN PKIPI_CONTEXT PacketContext,
382 IN PVOID Parameter1,
383 IN PVOID Parameter2,
384 IN PVOID Parameter3);
385
386 typedef
387 ULONG_PTR
388 (NTAPI *PKIPI_BROADCAST_WORKER)(
389 IN ULONG_PTR Argument);
390
391 typedef ULONG_PTR KSPIN_LOCK, *PKSPIN_LOCK;
392
393 typedef struct _KSPIN_LOCK_QUEUE {
394 struct _KSPIN_LOCK_QUEUE *volatile Next;
395 PKSPIN_LOCK volatile Lock;
396 } KSPIN_LOCK_QUEUE, *PKSPIN_LOCK_QUEUE;
397
398 typedef struct _KLOCK_QUEUE_HANDLE {
399 KSPIN_LOCK_QUEUE LockQueue;
400 KIRQL OldIrql;
401 } KLOCK_QUEUE_HANDLE, *PKLOCK_QUEUE_HANDLE;
402
403 #if defined(_AMD64_)
404
405 typedef ULONG64 KSPIN_LOCK_QUEUE_NUMBER;
406
407 #define LockQueueDispatcherLock 0
408 #define LockQueueExpansionLock 1
409 #define LockQueuePfnLock 2
410 #define LockQueueSystemSpaceLock 3
411 #define LockQueueVacbLock 4
412 #define LockQueueMasterLock 5
413 #define LockQueueNonPagedPoolLock 6
414 #define LockQueueIoCancelLock 7
415 #define LockQueueWorkQueueLock 8
416 #define LockQueueIoVpbLock 9
417 #define LockQueueIoDatabaseLock 10
418 #define LockQueueIoCompletionLock 11
419 #define LockQueueNtfsStructLock 12
420 #define LockQueueAfdWorkQueueLock 13
421 #define LockQueueBcbLock 14
422 #define LockQueueMmNonPagedPoolLock 15
423 #define LockQueueUnusedSpare16 16
424 #define LockQueueTimerTableLock 17
425 #define LockQueueMaximumLock (LockQueueTimerTableLock + LOCK_QUEUE_TIMER_TABLE_LOCKS)
426
427 #else
428
429 typedef enum _KSPIN_LOCK_QUEUE_NUMBER {
430 LockQueueDispatcherLock,
431 LockQueueExpansionLock,
432 LockQueuePfnLock,
433 LockQueueSystemSpaceLock,
434 LockQueueVacbLock,
435 LockQueueMasterLock,
436 LockQueueNonPagedPoolLock,
437 LockQueueIoCancelLock,
438 LockQueueWorkQueueLock,
439 LockQueueIoVpbLock,
440 LockQueueIoDatabaseLock,
441 LockQueueIoCompletionLock,
442 LockQueueNtfsStructLock,
443 LockQueueAfdWorkQueueLock,
444 LockQueueBcbLock,
445 LockQueueMmNonPagedPoolLock,
446 LockQueueUnusedSpare16,
447 LockQueueTimerTableLock,
448 LockQueueMaximumLock = LockQueueTimerTableLock + LOCK_QUEUE_TIMER_TABLE_LOCKS
449 } KSPIN_LOCK_QUEUE_NUMBER, *PKSPIN_LOCK_QUEUE_NUMBER;
450
451 #endif
452
453 typedef VOID
454 (DDKAPI *PKDEFERRED_ROUTINE)(
455 IN struct _KDPC *Dpc,
456 IN PVOID DeferredContext,
457 IN PVOID SystemArgument1,
458 IN PVOID SystemArgument2);
459
460 typedef enum _KDPC_IMPORTANCE {
461 LowImportance,
462 MediumImportance,
463 HighImportance,
464 MediumHighImportance
465 } KDPC_IMPORTANCE;
466
467 typedef struct _KDPC
468 {
469 UCHAR Type;
470 UCHAR Importance;
471 volatile USHORT Number;
472 LIST_ENTRY DpcListEntry;
473 PKDEFERRED_ROUTINE DeferredRoutine;
474 PVOID DeferredContext;
475 PVOID SystemArgument1;
476 PVOID SystemArgument2;
477 volatile PVOID DpcData;
478 } KDPC, *PKDPC, *RESTRICTED_POINTER PRKDPC;
479
480 typedef struct _KDPC_WATCHDOG_INFORMATION {
481 ULONG DpcTimeLimit;
482 ULONG DpcTimeCount;
483 ULONG DpcWatchdogLimit;
484 ULONG DpcWatchdogCount;
485 ULONG Reserved;
486 } KDPC_WATCHDOG_INFORMATION, *PKDPC_WATCHDOG_INFORMATION;
487
488 typedef struct _KDEVICE_QUEUE {
489 CSHORT Type;
490 CSHORT Size;
491 LIST_ENTRY DeviceListHead;
492 KSPIN_LOCK Lock;
493 #if defined(_AMD64_)
494 union {
495 BOOLEAN Busy;
496 struct {
497 LONG64 Reserved : 8;
498 LONG64 Hint : 56;
499 };
500 };
501 #else
502 BOOLEAN Busy;
503 #endif
504
505 } KDEVICE_QUEUE, *PKDEVICE_QUEUE, *RESTRICTED_POINTER PRKDEVICE_QUEUE;
506
507 #define TIMER_EXPIRED_INDEX_BITS 6
508 #define TIMER_PROCESSOR_INDEX_BITS 5
509 typedef struct _DISPATCHER_HEADER {
510 _ANONYMOUS_UNION union {
511 _ANONYMOUS_STRUCT struct {
512 UCHAR Type;
513 _ANONYMOUS_UNION union {
514 _ANONYMOUS_UNION union {
515 UCHAR TimerControlFlags;
516 _ANONYMOUS_STRUCT struct {
517 UCHAR Absolute:1;
518 UCHAR Coalescable:1;
519 UCHAR KeepShifting:1;
520 UCHAR EncodedTolerableDelay:5;
521 } DUMMYSTRUCTNAME;
522 } DUMMYUNIONNAME;
523 UCHAR Abandoned;
524 #if (NTDDI_VERSION < NTDDI_WIN7)
525 UCHAR NpxIrql;
526 #endif
527 BOOLEAN Signalling;
528 } DUMMYUNIONNAME;
529 _ANONYMOUS_UNION union {
530 _ANONYMOUS_UNION union {
531 UCHAR ThreadControlFlags;
532 _ANONYMOUS_STRUCT struct {
533 UCHAR CpuThrottled:1;
534 UCHAR CycleProfiling:1;
535 UCHAR CounterProfiling:1;
536 UCHAR Reserved:5;
537 } DUMMYSTRUCTNAME;
538 } DUMMYUNIONNAME;
539 UCHAR Size;
540 UCHAR Hand;
541 } DUMMYUNIONNAME2;
542 _ANONYMOUS_UNION union {
543 #if (NTDDI_VERSION >= NTDDI_WIN7)
544 _ANONYMOUS_UNION union {
545 UCHAR TimerMiscFlags;
546 _ANONYMOUS_STRUCT struct {
547 #if !defined(_X86_)
548 UCHAR Index:TIMER_EXPIRED_INDEX_BITS;
549 #else
550 UCHAR Index:1;
551 UCHAR Processor:TIMER_PROCESSOR_INDEX_BITS;
552 #endif
553 UCHAR Inserted:1;
554 volatile UCHAR Expired:1;
555 } DUMMYSTRUCTNAME;
556 } DUMMYUNIONNAME;
557 #else
558 /* Pre Win7 compatibility fix to latest WDK */
559 UCHAR Inserted;
560 #endif
561 _ANONYMOUS_UNION union {
562 BOOLEAN DebugActive;
563 _ANONYMOUS_STRUCT struct {
564 BOOLEAN ActiveDR7:1;
565 BOOLEAN Instrumented:1;
566 BOOLEAN Reserved2:4;
567 BOOLEAN UmsScheduled:1;
568 BOOLEAN UmsPrimary:1;
569 } DUMMYSTRUCTNAME;
570 } DUMMYUNIONNAME; /* should probably be DUMMYUNIONNAME2, but this is what WDK says */
571 BOOLEAN DpcActive;
572 } DUMMYUNIONNAME3;
573 } DUMMYSTRUCTNAME;
574 volatile LONG Lock;
575 } DUMMYUNIONNAME;
576 LONG SignalState;
577 LIST_ENTRY WaitListHead;
578 } DISPATCHER_HEADER, *PDISPATCHER_HEADER;
579
580 typedef struct _KEVENT {
581 DISPATCHER_HEADER Header;
582 } KEVENT, *PKEVENT, *RESTRICTED_POINTER PRKEVENT;
583
584 typedef struct _KSEMAPHORE {
585 DISPATCHER_HEADER Header;
586 LONG Limit;
587 } KSEMAPHORE, *PKSEMAPHORE, *RESTRICTED_POINTER PRKSEMAPHORE;
588
589 typedef struct _KGATE
590 {
591 DISPATCHER_HEADER Header;
592 } KGATE, *PKGATE, *RESTRICTED_POINTER PRKGATE;
593
594 typedef struct _KGUARDED_MUTEX
595 {
596 volatile LONG Count;
597 PKTHREAD Owner;
598 ULONG Contention;
599 KGATE Gate;
600 __GNU_EXTENSION union
601 {
602 __GNU_EXTENSION struct
603 {
604 SHORT KernelApcDisable;
605 SHORT SpecialApcDisable;
606 };
607 ULONG CombinedApcDisable;
608 };
609 } KGUARDED_MUTEX, *PKGUARDED_MUTEX;
610
611 typedef struct _KMUTANT {
612 DISPATCHER_HEADER Header;
613 LIST_ENTRY MutantListEntry;
614 struct _KTHREAD *RESTRICTED_POINTER OwnerThread;
615 BOOLEAN Abandoned;
616 UCHAR ApcDisable;
617 } KMUTANT, *PKMUTANT, *RESTRICTED_POINTER PRKMUTANT, KMUTEX, *PKMUTEX, *RESTRICTED_POINTER PRKMUTEX;
618
619 #define TIMER_TABLE_SIZE 512
620 #define TIMER_TABLE_SHIFT 9
621
622 typedef struct _KTIMER {
623 DISPATCHER_HEADER Header;
624 ULARGE_INTEGER DueTime;
625 LIST_ENTRY TimerListEntry;
626 struct _KDPC *Dpc;
627 #if !defined(_X86_)
628 ULONG Processor;
629 #endif
630 ULONG Period;
631 } KTIMER, *PKTIMER, *RESTRICTED_POINTER PRKTIMER;
632
633 typedef BOOLEAN
634 (DDKAPI *PKSYNCHRONIZE_ROUTINE)(
635 IN PVOID SynchronizeContext);
636
637 typedef enum _POOL_TYPE {
638 NonPagedPool,
639 PagedPool,
640 NonPagedPoolMustSucceed,
641 DontUseThisType,
642 NonPagedPoolCacheAligned,
643 PagedPoolCacheAligned,
644 NonPagedPoolCacheAlignedMustS,
645 MaxPoolType,
646 NonPagedPoolSession = 32,
647 PagedPoolSession,
648 NonPagedPoolMustSucceedSession,
649 DontUseThisTypeSession,
650 NonPagedPoolCacheAlignedSession,
651 PagedPoolCacheAlignedSession,
652 NonPagedPoolCacheAlignedMustSSession
653 } POOL_TYPE;
654
655 typedef enum _ALTERNATIVE_ARCHITECTURE_TYPE
656 {
657 StandardDesign,
658 NEC98x86,
659 EndAlternatives
660 } ALTERNATIVE_ARCHITECTURE_TYPE;
661
662 typedef struct _KSYSTEM_TIME
663 {
664 ULONG LowPart;
665 LONG High1Time;
666 LONG High2Time;
667 } KSYSTEM_TIME, *PKSYSTEM_TIME;
668
669 typedef struct _PNP_BUS_INFORMATION {
670 GUID BusTypeGuid;
671 INTERFACE_TYPE LegacyBusType;
672 ULONG BusNumber;
673 } PNP_BUS_INFORMATION, *PPNP_BUS_INFORMATION;
674
675 typedef struct DECLSPEC_ALIGN(16) _M128A {
676 ULONGLONG Low;
677 LONGLONG High;
678 } M128A, *PM128A;
679
680 typedef struct DECLSPEC_ALIGN(16) _XSAVE_FORMAT {
681 USHORT ControlWord;
682 USHORT StatusWord;
683 UCHAR TagWord;
684 UCHAR Reserved1;
685 USHORT ErrorOpcode;
686 ULONG ErrorOffset;
687 USHORT ErrorSelector;
688 USHORT Reserved2;
689 ULONG DataOffset;
690 USHORT DataSelector;
691 USHORT Reserved3;
692 ULONG MxCsr;
693 ULONG MxCsr_Mask;
694 M128A FloatRegisters[8];
695 #if defined(_WIN64)
696 M128A XmmRegisters[16];
697 UCHAR Reserved4[96];
698 #else
699 M128A XmmRegisters[8];
700 UCHAR Reserved4[192];
701 ULONG StackControl[7];
702 ULONG Cr0NpxState;
703 #endif
704 } XSAVE_FORMAT, *PXSAVE_FORMAT;
705
706