xref: /reactos/sdk/include/xdk/kefuncs.h (revision 886670e9)
1 /******************************************************************************
2  *                              Kernel Functions                              *
3  ******************************************************************************/
4 $if (_WDMDDK_)
5 #if defined(_M_IX86)
6 $include(x86/ke.h)
7 #elif defined(_M_AMD64)
8 $include(amd64/ke.h)
9 #elif defined(_M_IA64)
10 $include(ia64/ke.h)
11 #elif defined(_M_PPC)
12 $include(ppc/ke.h)
13 #elif defined(_M_MIPS)
14 $include(mips/ke.h)
15 #elif defined(_M_ARM)
16 $include(arm/ke.h)
17 #elif defined(_M_ARM64)
18 $include(arm64/ke.h)
19 #else
20 #error Unknown Architecture
21 #endif
22 
23 NTKERNELAPI
24 VOID
25 NTAPI
26 KeInitializeEvent(
27   _Out_ PRKEVENT Event,
28   _In_ EVENT_TYPE Type,
29   _In_ BOOLEAN State);
30 
31 _IRQL_requires_max_(DISPATCH_LEVEL)
32 NTKERNELAPI
33 VOID
34 NTAPI
35 KeClearEvent(
36   _Inout_ PRKEVENT Event);
37 $endif (_WDMDDK_)
38 $if (_NTDDK_)
39 
40 _IRQL_requires_min_(PASSIVE_LEVEL)
41 _IRQL_requires_max_(DISPATCH_LEVEL)
42 NTKERNELAPI
43 VOID
44 FASTCALL
45 KeInvalidateRangeAllCaches(
46   _In_ PVOID BaseAddress,
47   _In_ ULONG Length);
48 $endif (_NTDDK_)
49 
50 #if (NTDDI_VERSION >= NTDDI_WIN2K)
51 
52 $if (_WDMDDK_)
53 #if defined(_NTDDK_) || defined(_NTIFS_)
54 _Maybe_raises_SEH_exception_
55 _IRQL_requires_max_(APC_LEVEL)
56 NTKERNELAPI
57 VOID
58 NTAPI
59 ProbeForRead(
60   __in_data_source(USER_MODE) _In_reads_bytes_(Length) CONST VOID *Address, /* CONST is added */
61   _In_ SIZE_T Length,
62   _In_ ULONG Alignment);
63 #endif /* defined(_NTDDK_) || defined(_NTIFS_) */
64 
65 _Maybe_raises_SEH_exception_
66 _IRQL_requires_max_(APC_LEVEL)
67 NTKERNELAPI
68 VOID
69 NTAPI
70 ProbeForWrite(
71   __in_data_source(USER_MODE) _Out_writes_bytes_(Length) PVOID Address,
72   _In_ SIZE_T Length,
73   _In_ ULONG Alignment);
74 
75 $endif (_WDMDDK_)
76 $if (_NTDDK_)
77 NTKERNELAPI
78 VOID
79 NTAPI
80 KeSetImportanceDpc(
81   _Inout_ PRKDPC Dpc,
82   _In_ KDPC_IMPORTANCE Importance);
83 
84 _IRQL_requires_max_(DISPATCH_LEVEL)
85 NTKERNELAPI
86 LONG
87 NTAPI
88 KePulseEvent(
89   _Inout_ PRKEVENT Event,
90   _In_ KPRIORITY Increment,
91   _In_ BOOLEAN Wait);
92 
93 _IRQL_requires_min_(PASSIVE_LEVEL)
94 _IRQL_requires_max_(DISPATCH_LEVEL)
95 NTKERNELAPI
96 LONG
97 NTAPI
98 KeSetBasePriorityThread(
99   _Inout_ PRKTHREAD Thread,
100   _In_ LONG Increment);
101 
102 _Acquires_lock_(_Global_critical_region_)
103 _IRQL_requires_max_(APC_LEVEL)
104 NTKERNELAPI
105 VOID
106 NTAPI
107 KeEnterCriticalRegion(VOID);
108 
109 _Releases_lock_(_Global_critical_region_)
110 _IRQL_requires_max_(APC_LEVEL)
111 NTKERNELAPI
112 VOID
113 NTAPI
114 KeLeaveCriticalRegion(VOID);
115 
116 NTKERNELAPI
117 DECLSPEC_NORETURN
118 VOID
119 NTAPI
120 KeBugCheck(
121   _In_ ULONG BugCheckCode);
122 $endif(_NTDDK_)
123 $if (_WDMDDK_ || _NTDDK_)
124 #if defined(SINGLE_GROUP_LEGACY_API)
125 $endif (_WDMDDK_ || _NTDDK_)
126 
127 $if (_WDMDDK_)
128 _IRQL_requires_min_(PASSIVE_LEVEL)
129 _IRQL_requires_max_(APC_LEVEL)
130 NTKERNELAPI
131 VOID
132 NTAPI
133 KeRevertToUserAffinityThread(VOID);
134 
135 _IRQL_requires_min_(PASSIVE_LEVEL)
136 _IRQL_requires_max_(APC_LEVEL)
137 NTKERNELAPI
138 VOID
139 NTAPI
140 KeSetSystemAffinityThread(
141   _In_ KAFFINITY Affinity);
142 
143 NTKERNELAPI
144 VOID
145 NTAPI
146 KeSetTargetProcessorDpc(
147   _Inout_ PRKDPC Dpc,
148   _In_ CCHAR Number);
149 
150 NTKERNELAPI
151 KAFFINITY
152 NTAPI
153 KeQueryActiveProcessors(VOID);
154 $endif (_WDMDDK_)
155 $if (_NTDDK_)
156 
157 NTKERNELAPI
158 VOID
159 NTAPI
160 KeSetTargetProcessorDpc(
161   _Inout_ PRKDPC Dpc,
162   _In_ CCHAR Number);
163 
164 NTKERNELAPI
165 KAFFINITY
166 NTAPI
167 KeQueryActiveProcessors(VOID);
168 $endif (_NTDDK_)
169 $if (_WDMDDK_ || _NTDDK_)
170 #endif /* defined(SINGLE_GROUP_LEGACY_API) */
171 $endif (_WDMDDK_ || _NTDDK_)
172 
173 $if (_WDMDDK_)
174 #if !defined(_M_AMD64)
175 NTKERNELAPI
176 ULONGLONG
177 NTAPI
178 KeQueryInterruptTime(VOID);
179 
180 NTKERNELAPI
181 VOID
182 NTAPI
183 KeQuerySystemTime(
184   _Out_ PLARGE_INTEGER CurrentTime);
185 #endif /* !_M_AMD64 */
186 
187 #if !defined(_X86_) && !defined(_M_ARM)
188 _Requires_lock_not_held_(*SpinLock)
189 _Acquires_lock_(*SpinLock)
190 _IRQL_requires_max_(DISPATCH_LEVEL)
191 _IRQL_saves_
192 _IRQL_raises_(DISPATCH_LEVEL)
193 NTKERNELAPI
194 KIRQL
195 NTAPI
196 KeAcquireSpinLockRaiseToDpc(
197   _Inout_ PKSPIN_LOCK SpinLock);
198 
199 #define KeAcquireSpinLock(SpinLock, OldIrql) \
200     *(OldIrql) = KeAcquireSpinLockRaiseToDpc(SpinLock)
201 
202 _Requires_lock_not_held_(*SpinLock)
203 _Acquires_lock_(*SpinLock)
204 _IRQL_requires_min_(DISPATCH_LEVEL)
205 NTKERNELAPI
206 VOID
207 NTAPI
208 KeAcquireSpinLockAtDpcLevel(
209   _Inout_ PKSPIN_LOCK SpinLock);
210 
211 _Requires_lock_held_(*SpinLock)
212 _Releases_lock_(*SpinLock)
213 _IRQL_requires_(DISPATCH_LEVEL)
214 NTKERNELAPI
215 VOID
216 NTAPI
217 KeReleaseSpinLock(
218   _Inout_ PKSPIN_LOCK SpinLock,
219   _In_ _IRQL_restores_ KIRQL NewIrql);
220 
221 _Requires_lock_held_(*SpinLock)
222 _Releases_lock_(*SpinLock)
223 _IRQL_requires_min_(DISPATCH_LEVEL)
224 NTKERNELAPI
225 VOID
226 NTAPI
227 KeReleaseSpinLockFromDpcLevel(
228   _Inout_ PKSPIN_LOCK SpinLock);
229 #endif /* !_X86_ */
230 
231 #if defined(_X86_) && (defined(_WDM_INCLUDED_) || defined(WIN9X_COMPAT_SPINLOCK))
232 NTKERNELAPI
233 VOID
234 NTAPI
235 KeInitializeSpinLock(
236   _Out_ PKSPIN_LOCK SpinLock);
237 #else
238 FORCEINLINE
239 VOID
240 KeInitializeSpinLock(_Out_ PKSPIN_LOCK SpinLock)
241 {
242   /* Clear the lock */
243   *SpinLock = 0;
244 }
245 #endif
246 
247 NTKERNELAPI
248 DECLSPEC_NORETURN
249 VOID
250 NTAPI
251 KeBugCheckEx(
252   _In_ ULONG BugCheckCode,
253   _In_ ULONG_PTR BugCheckParameter1,
254   _In_ ULONG_PTR BugCheckParameter2,
255   _In_ ULONG_PTR BugCheckParameter3,
256   _In_ ULONG_PTR BugCheckParameter4);
257 
258 _IRQL_requires_max_(DISPATCH_LEVEL)
259 NTKERNELAPI
260 BOOLEAN
261 NTAPI
262 KeCancelTimer(
263   _Inout_ PKTIMER);
264 
265 _IRQL_requires_min_(PASSIVE_LEVEL)
266 _IRQL_requires_max_(APC_LEVEL)
267 NTKERNELAPI
268 NTSTATUS
269 NTAPI
270 KeDelayExecutionThread(
271   _In_ KPROCESSOR_MODE WaitMode,
272   _In_ BOOLEAN Alertable,
273   _In_ PLARGE_INTEGER Interval);
274 
275 _Must_inspect_result_
276 NTKERNELAPI
277 BOOLEAN
278 NTAPI
279 KeDeregisterBugCheckCallback(
280   _Inout_ PKBUGCHECK_CALLBACK_RECORD CallbackRecord);
281 
282 _Acquires_lock_(_Global_critical_region_)
283 _IRQL_requires_max_(APC_LEVEL)
284 NTKERNELAPI
285 VOID
286 NTAPI
287 KeEnterCriticalRegion(VOID);
288 
289 _IRQL_requires_max_(DISPATCH_LEVEL)
290 NTKERNELAPI
291 VOID
292 NTAPI
293 KeInitializeDeviceQueue(
294   _Out_ PKDEVICE_QUEUE DeviceQueue);
295 
296 NTKERNELAPI
297 VOID
298 NTAPI
299 KeInitializeDpc(
300   _Out_ __drv_aliasesMem PRKDPC Dpc,
301   _In_ PKDEFERRED_ROUTINE DeferredRoutine,
302   _In_opt_ __drv_aliasesMem PVOID DeferredContext);
303 
304 NTKERNELAPI
305 VOID
306 NTAPI
307 KeInitializeMutex(
308   _Out_ PRKMUTEX Mutex,
309   _In_ ULONG Level);
310 
311 _IRQL_requires_max_(PASSIVE_LEVEL)
312 NTKERNELAPI
313 VOID
314 NTAPI
315 KeInitializeSemaphore(
316   _Out_ PRKSEMAPHORE Semaphore,
317   _In_ LONG Count,
318   _In_ LONG Limit);
319 
320 _IRQL_requires_max_(DISPATCH_LEVEL)
321 NTKERNELAPI
322 VOID
323 NTAPI
324 KeInitializeTimer(
325   _Out_ PKTIMER Timer);
326 
327 _IRQL_requires_max_(DISPATCH_LEVEL)
328 NTKERNELAPI
329 VOID
330 NTAPI
331 KeInitializeTimerEx(
332   _Out_ PKTIMER Timer,
333   _In_ TIMER_TYPE Type);
334 
335 _IRQL_requires_(DISPATCH_LEVEL)
336 NTKERNELAPI
337 BOOLEAN
338 NTAPI
339 KeInsertByKeyDeviceQueue(
340   _Inout_ PKDEVICE_QUEUE DeviceQueue,
341   _Inout_ PKDEVICE_QUEUE_ENTRY DeviceQueueEntry,
342   _In_ ULONG SortKey);
343 
344 _IRQL_requires_(DISPATCH_LEVEL)
345 NTKERNELAPI
346 BOOLEAN
347 NTAPI
348 KeInsertDeviceQueue(
349   _Inout_ PKDEVICE_QUEUE DeviceQueue,
350   _Inout_ PKDEVICE_QUEUE_ENTRY DeviceQueueEntry);
351 
352 NTKERNELAPI
353 BOOLEAN
354 NTAPI
355 KeInsertQueueDpc(
356   _Inout_ PRKDPC Dpc,
357   _In_opt_ PVOID SystemArgument1,
358   _In_opt_ PVOID SystemArgument2);
359 
360 _Releases_lock_(_Global_critical_region_)
361 _IRQL_requires_max_(APC_LEVEL)
362 NTKERNELAPI
363 VOID
364 NTAPI
365 KeLeaveCriticalRegion(VOID);
366 
367 NTHALAPI
368 LARGE_INTEGER
369 NTAPI
370 KeQueryPerformanceCounter(
371   _Out_opt_ PLARGE_INTEGER PerformanceFrequency);
372 
373 _IRQL_requires_max_(PASSIVE_LEVEL)
374 NTKERNELAPI
375 KPRIORITY
376 NTAPI
377 KeQueryPriorityThread(
378   _In_ PRKTHREAD Thread);
379 
380 NTKERNELAPI
381 ULONG
382 NTAPI
383 KeQueryTimeIncrement(VOID);
384 
385 _IRQL_requires_max_(DISPATCH_LEVEL)
386 NTKERNELAPI
387 LONG
388 NTAPI
389 KeReadStateEvent(
390   _In_ PRKEVENT Event);
391 
392 _IRQL_requires_max_(DISPATCH_LEVEL)
393 NTKERNELAPI
394 LONG
395 NTAPI
396 KeReadStateMutex(
397   _In_ PRKMUTEX Mutex);
398 
399 _IRQL_requires_max_(DISPATCH_LEVEL)
400 NTKERNELAPI
401 LONG
402 NTAPI
403 KeReadStateSemaphore(
404   _In_ PRKSEMAPHORE Semaphore);
405 
406 _IRQL_requires_max_(DISPATCH_LEVEL)
407 NTKERNELAPI
408 BOOLEAN
409 NTAPI
410 KeReadStateTimer(
411   _In_ PKTIMER Timer);
412 
413 _Must_inspect_result_
414 NTKERNELAPI
415 BOOLEAN
416 NTAPI
417 KeRegisterBugCheckCallback(
418   _Out_ PKBUGCHECK_CALLBACK_RECORD CallbackRecord,
419   _In_ PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine,
420   _In_reads_bytes_opt_(Length) PVOID Buffer,
421   _In_ ULONG Length,
422   _In_ PUCHAR Component);
423 
424 _When_(Wait==0, _IRQL_requires_max_(DISPATCH_LEVEL))
425 _When_(Wait==1, _IRQL_requires_max_(APC_LEVEL))
426 NTKERNELAPI
427 LONG
428 NTAPI
429 KeReleaseMutex(
430   _Inout_ PRKMUTEX Mutex,
431   _In_ BOOLEAN Wait);
432 
433 _When_(Wait==0, _IRQL_requires_max_(DISPATCH_LEVEL))
434 _When_(Wait==1, _IRQL_requires_max_(APC_LEVEL))
435 NTKERNELAPI
436 LONG
437 NTAPI
438 KeReleaseSemaphore(
439   _Inout_ PRKSEMAPHORE Semaphore,
440   _In_ KPRIORITY Increment,
441   _In_ LONG Adjustment,
442   _In_ _Literal_ BOOLEAN Wait);
443 
444 _IRQL_requires_(DISPATCH_LEVEL)
445 NTKERNELAPI
446 PKDEVICE_QUEUE_ENTRY
447 NTAPI
448 KeRemoveByKeyDeviceQueue(
449   _Inout_ PKDEVICE_QUEUE DeviceQueue,
450   _In_ ULONG SortKey);
451 
452 _IRQL_requires_(DISPATCH_LEVEL)
453 NTKERNELAPI
454 PKDEVICE_QUEUE_ENTRY
455 NTAPI
456 KeRemoveDeviceQueue(
457   _Inout_ PKDEVICE_QUEUE DeviceQueue);
458 
459 _IRQL_requires_max_(DISPATCH_LEVEL)
460 NTKERNELAPI
461 BOOLEAN
462 NTAPI
463 KeRemoveEntryDeviceQueue(
464   _Inout_ PKDEVICE_QUEUE DeviceQueue,
465   _Inout_ PKDEVICE_QUEUE_ENTRY DeviceQueueEntry);
466 
467 _IRQL_requires_max_(HIGH_LEVEL)
468 NTKERNELAPI
469 BOOLEAN
470 NTAPI
471 KeRemoveQueueDpc(
472   _Inout_ PRKDPC Dpc);
473 
474 _IRQL_requires_max_(DISPATCH_LEVEL)
475 NTKERNELAPI
476 LONG
477 NTAPI
478 KeResetEvent(
479   _Inout_ PRKEVENT Event);
480 
481 _When_(Wait==0, _IRQL_requires_max_(DISPATCH_LEVEL))
482 _When_(Wait==1, _IRQL_requires_max_(APC_LEVEL))
483 NTKERNELAPI
484 LONG
485 NTAPI
486 KeSetEvent(
487   _Inout_ PRKEVENT Event,
488   _In_ KPRIORITY Increment,
489   _In_ _Literal_ BOOLEAN Wait);
490 
491 NTKERNELAPI
492 VOID
493 NTAPI
494 KeSetImportanceDpc(
495   _Inout_ PRKDPC Dpc,
496   _In_ KDPC_IMPORTANCE Importance);
497 
498 _IRQL_requires_min_(PASSIVE_LEVEL)
499 _IRQL_requires_max_(DISPATCH_LEVEL)
500 NTKERNELAPI
501 KPRIORITY
502 NTAPI
503 KeSetPriorityThread(
504   _Inout_ PKTHREAD Thread,
505   _In_ KPRIORITY Priority);
506 
507 _IRQL_requires_max_(DISPATCH_LEVEL)
508 NTKERNELAPI
509 BOOLEAN
510 NTAPI
511 KeSetTimer(
512   _Inout_ PKTIMER Timer,
513   _In_ LARGE_INTEGER DueTime,
514   _In_opt_ PKDPC Dpc);
515 
516 _IRQL_requires_max_(DISPATCH_LEVEL)
517 NTKERNELAPI
518 BOOLEAN
519 NTAPI
520 KeSetTimerEx(
521   _Inout_ PKTIMER Timer,
522   _In_ LARGE_INTEGER DueTime,
523   _In_ LONG Period OPTIONAL,
524   _In_opt_ PKDPC Dpc);
525 
526 NTHALAPI
527 VOID
528 NTAPI
529 KeStallExecutionProcessor(
530   _In_ ULONG MicroSeconds);
531 
532 _IRQL_requires_max_(HIGH_LEVEL)
533 NTKERNELAPI
534 BOOLEAN
535 NTAPI
536 KeSynchronizeExecution(
537   _Inout_ PKINTERRUPT Interrupt,
538   _In_ PKSYNCHRONIZE_ROUTINE SynchronizeRoutine,
539   _In_opt_ __drv_aliasesMem PVOID SynchronizeContext);
540 
541 _IRQL_requires_min_(PASSIVE_LEVEL)
542 _When_((Timeout==NULL || Timeout->QuadPart!=0), _IRQL_requires_max_(APC_LEVEL))
543 _When_((Timeout!=NULL && Timeout->QuadPart==0), _IRQL_requires_max_(DISPATCH_LEVEL))
544 NTKERNELAPI
545 NTSTATUS
546 NTAPI
547 KeWaitForMultipleObjects(
548   _In_ ULONG Count,
549   _In_reads_(Count) PVOID Object[],
550   _In_ __drv_strictTypeMatch(__drv_typeConst) WAIT_TYPE WaitType,
551   _In_ __drv_strictTypeMatch(__drv_typeCond) KWAIT_REASON WaitReason,
552   _In_ __drv_strictType(KPROCESSOR_MODE/enum _MODE,__drv_typeConst) KPROCESSOR_MODE WaitMode,
553   _In_ BOOLEAN Alertable,
554   _In_opt_ PLARGE_INTEGER Timeout,
555   _Out_opt_ PKWAIT_BLOCK WaitBlockArray);
556 
557 #define KeWaitForMutexObject KeWaitForSingleObject
558 
559 _IRQL_requires_min_(PASSIVE_LEVEL)
560 _When_((Timeout==NULL || Timeout->QuadPart!=0), _IRQL_requires_max_(APC_LEVEL))
561 _When_((Timeout!=NULL && Timeout->QuadPart==0), _IRQL_requires_max_(DISPATCH_LEVEL))
562 NTKERNELAPI
563 NTSTATUS
564 NTAPI
565 KeWaitForSingleObject(
566   _In_ _Points_to_data_ PVOID Object,
567   _In_ __drv_strictTypeMatch(__drv_typeCond) KWAIT_REASON WaitReason,
568   _In_ __drv_strictType(KPROCESSOR_MODE/enum _MODE,__drv_typeConst) KPROCESSOR_MODE WaitMode,
569   _In_ BOOLEAN Alertable,
570   _In_opt_ PLARGE_INTEGER Timeout);
571 $endif (_WDMDDK_)
572 $if (_NTIFS_)
573 
574 NTKERNELAPI
575 VOID
576 NTAPI
577 KeInitializeMutant(
578   _Out_ PRKMUTANT Mutant,
579   _In_ BOOLEAN InitialOwner);
580 
581 _IRQL_requires_max_(DISPATCH_LEVEL)
582 NTKERNELAPI
583 LONG
584 NTAPI
585 KeReadStateMutant(
586   _In_ PRKMUTANT Mutant);
587 
588 _When_(Wait==0, _IRQL_requires_max_(DISPATCH_LEVEL))
589 _When_(Wait==1, _IRQL_requires_max_(APC_LEVEL))
590 NTKERNELAPI
591 LONG
592 NTAPI
593 KeReleaseMutant(
594   _Inout_ PRKMUTANT Mutant,
595   _In_ KPRIORITY Increment,
596   _In_ BOOLEAN Abandoned,
597   _In_ BOOLEAN Wait);
598 
599 NTKERNELAPI
600 VOID
601 NTAPI
602 KeInitializeQueue(
603   _Out_ PRKQUEUE Queue,
604   _In_ ULONG Count);
605 
606 _IRQL_requires_max_(DISPATCH_LEVEL)
607 NTKERNELAPI
608 LONG
609 NTAPI
610 KeReadStateQueue(
611   _In_ PRKQUEUE Queue);
612 
613 _IRQL_requires_min_(PASSIVE_LEVEL)
614 _IRQL_requires_max_(DISPATCH_LEVEL)
615 NTKERNELAPI
616 LONG
617 NTAPI
618 KeInsertQueue(
619   _Inout_ PRKQUEUE Queue,
620   _Inout_ PLIST_ENTRY Entry);
621 
622 _IRQL_requires_min_(PASSIVE_LEVEL)
623 _IRQL_requires_max_(DISPATCH_LEVEL)
624 NTKERNELAPI
625 LONG
626 NTAPI
627 KeInsertHeadQueue(
628   _Inout_ PRKQUEUE Queue,
629   _Inout_ PLIST_ENTRY Entry);
630 
631 _IRQL_requires_min_(PASSIVE_LEVEL)
632 _When_((Timeout==NULL || Timeout->QuadPart!=0), _IRQL_requires_max_(APC_LEVEL))
633 _When_((Timeout!=NULL && Timeout->QuadPart==0), _IRQL_requires_max_(DISPATCH_LEVEL))
634 NTKERNELAPI
635 PLIST_ENTRY
636 NTAPI
637 KeRemoveQueue(
638   _Inout_ PRKQUEUE Queue,
639   _In_ KPROCESSOR_MODE WaitMode,
640   _In_opt_ PLARGE_INTEGER Timeout);
641 
642 _IRQL_requires_max_(APC_LEVEL)
643 NTKERNELAPI
644 VOID
645 NTAPI
646 KeAttachProcess(
647   _Inout_ PKPROCESS Process);
648 
649 _IRQL_requires_max_(APC_LEVEL)
650 NTKERNELAPI
651 VOID
652 NTAPI
653 KeDetachProcess(VOID);
654 
655 _IRQL_requires_max_(DISPATCH_LEVEL)
656 NTKERNELAPI
657 PLIST_ENTRY
658 NTAPI
659 KeRundownQueue(
660   _Inout_ PRKQUEUE Queue);
661 
662 _IRQL_requires_max_(APC_LEVEL)
663 NTKERNELAPI
664 VOID
665 NTAPI
666 KeStackAttachProcess(
667   _Inout_ PKPROCESS Process,
668   _Out_ PKAPC_STATE ApcState);
669 
670 _IRQL_requires_max_(APC_LEVEL)
671 NTKERNELAPI
672 VOID
673 NTAPI
674 KeUnstackDetachProcess(
675   _In_ PKAPC_STATE ApcState);
676 
677 _IRQL_requires_min_(PASSIVE_LEVEL)
678 _IRQL_requires_max_(DISPATCH_LEVEL)
679 NTKERNELAPI
680 UCHAR
681 NTAPI
682 KeSetIdealProcessorThread(
683   _Inout_ PKTHREAD Thread,
684   _In_ UCHAR Processor);
685 
686 _IRQL_requires_max_(APC_LEVEL)
687 NTKERNELAPI
688 BOOLEAN
689 NTAPI
690 KeSetKernelStackSwapEnable(
691   _In_ BOOLEAN Enable);
692 
693 #if defined(_X86_)
694 _Requires_lock_not_held_(*SpinLock)
695 _Acquires_lock_(*SpinLock)
696 _IRQL_raises_(SYNCH_LEVEL)
697 _IRQL_saves_
698 NTHALAPI
699 KIRQL
700 FASTCALL
701 KeAcquireSpinLockRaiseToSynch(
702   _Inout_ PKSPIN_LOCK SpinLock);
703 #else
704 _Requires_lock_not_held_(*SpinLock)
705 _Acquires_lock_(*SpinLock)
706 _IRQL_raises_(SYNCH_LEVEL)
707 _IRQL_saves_
708 NTKERNELAPI
709 KIRQL
710 KeAcquireSpinLockRaiseToSynch(
711   _Inout_ PKSPIN_LOCK SpinLock);
712 #endif
713 $endif (_NTIFS_)
714 
715 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
716 
717 #if (NTDDI_VERSION >= NTDDI_WINXP)
718 
719 $if (_WDMDDK_)
720 _Requires_lock_not_held_(*LockHandle)
721 _Acquires_lock_(*LockHandle)
722 _Post_same_lock_(*SpinLock, *LockHandle)
723 _IRQL_requires_max_(DISPATCH_LEVEL)
724 _IRQL_saves_global_(QueuedSpinLock,LockHandle)
725 _IRQL_raises_(DISPATCH_LEVEL)
726 _DECL_HAL_KE_IMPORT
727 VOID
728 FASTCALL
729 KeAcquireInStackQueuedSpinLock(
730   _Inout_ PKSPIN_LOCK SpinLock,
731   _Out_ PKLOCK_QUEUE_HANDLE LockHandle);
732 
733 _Requires_lock_not_held_(*LockHandle)
734 _Acquires_lock_(*LockHandle)
735 _Post_same_lock_(*SpinLock, *LockHandle)
736 _IRQL_requires_min_(DISPATCH_LEVEL)
737 NTKERNELAPI
738 VOID
739 FASTCALL
740 KeAcquireInStackQueuedSpinLockAtDpcLevel(
741   _Inout_ PKSPIN_LOCK SpinLock,
742   _Out_ PKLOCK_QUEUE_HANDLE LockHandle);
743 
744 _Requires_lock_not_held_(*Interrupt->ActualLock)
745 _Acquires_lock_(*Interrupt->ActualLock)
746 _IRQL_requires_max_(HIGH_LEVEL)
747 _IRQL_saves_
748 _IRQL_raises_(HIGH_LEVEL)
749 NTKERNELAPI
750 KIRQL
751 NTAPI
752 KeAcquireInterruptSpinLock(
753   _Inout_ PKINTERRUPT Interrupt);
754 
755 _IRQL_requires_min_(PASSIVE_LEVEL)
756 _IRQL_requires_max_(DISPATCH_LEVEL)
757 NTKERNELAPI
758 BOOLEAN
759 NTAPI
760 KeAreApcsDisabled(VOID);
761 
762 NTKERNELAPI
763 ULONG
764 NTAPI
765 KeGetRecommendedSharedDataAlignment(VOID);
766 
767 _IRQL_requires_max_(PASSIVE_LEVEL)
768 NTKERNELAPI
769 ULONG
770 NTAPI
771 KeQueryRuntimeThread(
772   _In_ PKTHREAD Thread,
773   _Out_ PULONG UserTime);
774 
775 _Requires_lock_held_(*LockHandle)
776 _Releases_lock_(*LockHandle)
777 _IRQL_requires_(DISPATCH_LEVEL)
778 NTKERNELAPI
779 VOID
780 FASTCALL
781 KeReleaseInStackQueuedSpinLockFromDpcLevel(
782   _In_ PKLOCK_QUEUE_HANDLE LockHandle);
783 
784 _Requires_lock_held_(*Interrupt->ActualLock)
785 _Releases_lock_(*Interrupt->ActualLock)
786 _IRQL_requires_(HIGH_LEVEL)
787 NTKERNELAPI
788 VOID
789 NTAPI
790 KeReleaseInterruptSpinLock(
791   _Inout_ PKINTERRUPT Interrupt,
792   _In_ _IRQL_restores_ KIRQL OldIrql);
793 
794 _IRQL_requires_(DISPATCH_LEVEL)
795 NTKERNELAPI
796 PKDEVICE_QUEUE_ENTRY
797 NTAPI
798 KeRemoveByKeyDeviceQueueIfBusy(
799   _Inout_ PKDEVICE_QUEUE DeviceQueue,
800   _In_ ULONG SortKey);
801 
802 _Requires_lock_held_(*LockHandle)
803 _Releases_lock_(*LockHandle)
804 _IRQL_requires_(DISPATCH_LEVEL)
805 _IRQL_restores_global_(QueuedSpinLock,LockHandle)
806 _DECL_HAL_KE_IMPORT
807 VOID
808 FASTCALL
809 KeReleaseInStackQueuedSpinLock(
810   _In_ PKLOCK_QUEUE_HANDLE LockHandle);
811 $endif (_WDMDDK_)
812 $if (_NTDDK_)
813 _IRQL_requires_min_(PASSIVE_LEVEL)
814 _IRQL_requires_max_(DISPATCH_LEVEL)
815 NTKERNELAPI
816 BOOLEAN
817 NTAPI
818 KeAreApcsDisabled(VOID);
819 $endif (_NTDDK_)
820 $if (_NTIFS_)
821 
822 _Requires_lock_not_held_(Number)
823 _Acquires_lock_(Number)
824 _IRQL_raises_(DISPATCH_LEVEL)
825 _DECL_HAL_KE_IMPORT
826 KIRQL
827 FASTCALL
828 KeAcquireQueuedSpinLock(
829   _In_ KSPIN_LOCK_QUEUE_NUMBER Number);
830 
831 _Requires_lock_held_(Number)
832 _Releases_lock_(Number)
833 _DECL_HAL_KE_IMPORT
834 VOID
835 FASTCALL
836 KeReleaseQueuedSpinLock(
837   _In_ KSPIN_LOCK_QUEUE_NUMBER Number,
838   _In_ KIRQL OldIrql);
839 
840 _Must_inspect_result_
841 _Post_satisfies_(return == 1 || return == 0)
842 _DECL_HAL_KE_IMPORT
843 LOGICAL
844 FASTCALL
845 KeTryToAcquireQueuedSpinLock(
846   _In_ KSPIN_LOCK_QUEUE_NUMBER Number,
847   _Out_ _At_(*OldIrql, _IRQL_saves_) PKIRQL OldIrql);
848 $endif (_NTIFS_)
849 
850 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
851 
852 $if (_WDMDDK_)
853 #if (NTDDI_VERSION >= NTDDI_WINXPSP1)
854 
855 _Must_inspect_result_
856 NTKERNELAPI
857 BOOLEAN
858 NTAPI
859 KeDeregisterBugCheckReasonCallback(
860   _Inout_ PKBUGCHECK_REASON_CALLBACK_RECORD CallbackRecord);
861 
862 _Must_inspect_result_
863 NTKERNELAPI
864 BOOLEAN
865 NTAPI
866 KeRegisterBugCheckReasonCallback(
867   _Out_ PKBUGCHECK_REASON_CALLBACK_RECORD CallbackRecord,
868   _In_ PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine,
869   _In_ KBUGCHECK_CALLBACK_REASON Reason,
870   _In_ PUCHAR Component);
871 
872 #endif /* (NTDDI_VERSION >= NTDDI_WINXPSP1) */
873 
874 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
875 _IRQL_requires_max_(APC_LEVEL)
876 NTKERNELAPI
877 VOID
878 NTAPI
879 KeFlushQueuedDpcs(VOID);
880 #endif /* (NTDDI_VERSION >= NTDDI_WINXPSP2) */
881 $endif (_WDMDDK_)
882 $if (_WDMDDK_ || _NTDDK_)
883 #if (NTDDI_VERSION >= NTDDI_WS03)
884 $endif (_WDMDDK_ || _NTDDK_)
885 
886 $if (_WDMDDK_)
887 _IRQL_requires_max_(APC_LEVEL)
888 NTKERNELAPI
889 PVOID
890 NTAPI
891 KeRegisterNmiCallback(
892   _In_ PNMI_CALLBACK CallbackRoutine,
893   _In_opt_ PVOID Context);
894 
895 _IRQL_requires_max_(APC_LEVEL)
896 NTKERNELAPI
897 NTSTATUS
898 NTAPI
899 KeDeregisterNmiCallback(
900   _In_ PVOID Handle);
901 
902 NTKERNELAPI
903 VOID
904 NTAPI
905 KeInitializeThreadedDpc(
906   _Out_ PRKDPC Dpc,
907   _In_ PKDEFERRED_ROUTINE DeferredRoutine,
908   _In_opt_ PVOID DeferredContext);
909 
910 _IRQL_requires_min_(PASSIVE_LEVEL)
911 _IRQL_requires_max_(IPI_LEVEL-1)
912 NTKERNELAPI
913 ULONG_PTR
914 NTAPI
915 KeIpiGenericCall(
916   _In_ PKIPI_BROADCAST_WORKER BroadcastFunction,
917   _In_ ULONG_PTR Context);
918 
919 _Requires_lock_not_held_(*SpinLock)
920 _Acquires_lock_(*SpinLock)
921 _IRQL_requires_max_(DISPATCH_LEVEL)
922 _IRQL_saves_
923 NTKERNELAPI
924 KIRQL
925 FASTCALL
926 KeAcquireSpinLockForDpc(
927   _Inout_ PKSPIN_LOCK SpinLock);
928 
929 _Requires_lock_held_(*SpinLock)
930 _Releases_lock_(*SpinLock)
931 _IRQL_requires_(DISPATCH_LEVEL)
932 NTKERNELAPI
933 VOID
934 FASTCALL
935 KeReleaseSpinLockForDpc(
936   _Inout_ PKSPIN_LOCK SpinLock,
937   _In_ _IRQL_restores_ KIRQL OldIrql);
938 
939 _Must_inspect_result_
940 NTKERNELAPI
941 BOOLEAN
942 FASTCALL
943 KeTestSpinLock(
944   _In_ PKSPIN_LOCK SpinLock);
945 $endif (_WDMDDK_)
946 
947 $if (_NTDDK_)
948 NTKERNELAPI
949 BOOLEAN
950 NTAPI
951 KeInvalidateAllCaches(VOID);
952 $endif (_NTDDK_)
953 $if (_WDMDDK_ || _NTDDK_)
954 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
955 $endif (_WDMDDK_ || _NTDDK_)
956 $if (_WDMDDK_ || _NTDDK_)
957 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
958 $endif (_WDMDDK_ || _NTDDK_)
959 
960 $if (_WDMDDK_)
961 _Must_inspect_result_
962 _IRQL_requires_min_(DISPATCH_LEVEL)
963 _Post_satisfies_(return == 1 || return == 0)
964 NTKERNELAPI
965 BOOLEAN
966 FASTCALL
967 KeTryToAcquireSpinLockAtDpcLevel(
968   _Inout_ _Requires_lock_not_held_(*_Curr_)
969   _When_(return!=0, _Acquires_lock_(*_Curr_))
970     PKSPIN_LOCK SpinLock);
971 
972 _IRQL_requires_min_(PASSIVE_LEVEL)
973 _IRQL_requires_max_(DISPATCH_LEVEL)
974 NTKERNELAPI
975 BOOLEAN
976 NTAPI
977 KeAreAllApcsDisabled(VOID);
978 
979 _Acquires_lock_(_Global_critical_region_)
980 _Requires_lock_not_held_(*Mutex)
981 _Acquires_lock_(*Mutex)
982 _IRQL_requires_max_(APC_LEVEL)
983 _IRQL_requires_min_(PASSIVE_LEVEL)
984 NTKERNELAPI
985 VOID
986 FASTCALL
987 KeAcquireGuardedMutex(
988   _Inout_ PKGUARDED_MUTEX GuardedMutex);
989 
990 _Requires_lock_not_held_(*FastMutex)
991 _Acquires_lock_(*FastMutex)
992 _IRQL_requires_max_(APC_LEVEL)
993 _IRQL_requires_min_(PASSIVE_LEVEL)
994 NTKERNELAPI
995 VOID
996 FASTCALL
997 KeAcquireGuardedMutexUnsafe(
998   _Inout_ PKGUARDED_MUTEX GuardedMutex);
999 
1000 _Acquires_lock_(_Global_critical_region_)
1001 _IRQL_requires_max_(APC_LEVEL)
1002 NTKERNELAPI
1003 VOID
1004 NTAPI
1005 KeEnterGuardedRegion(VOID);
1006 
1007 _Releases_lock_(_Global_critical_region_)
1008 _IRQL_requires_max_(APC_LEVEL)
1009 NTKERNELAPI
1010 VOID
1011 NTAPI
1012 KeLeaveGuardedRegion(VOID);
1013 
1014 _IRQL_requires_max_(APC_LEVEL)
1015 _IRQL_requires_min_(PASSIVE_LEVEL)
1016 NTKERNELAPI
1017 VOID
1018 FASTCALL
1019 KeInitializeGuardedMutex(
1020   _Out_ PKGUARDED_MUTEX GuardedMutex);
1021 
1022 _Requires_lock_held_(*FastMutex)
1023 _Releases_lock_(*FastMutex)
1024 _IRQL_requires_max_(APC_LEVEL)
1025 NTKERNELAPI
1026 VOID
1027 FASTCALL
1028 KeReleaseGuardedMutexUnsafe(
1029   _Inout_ PKGUARDED_MUTEX GuardedMutex);
1030 
1031 _Releases_lock_(_Global_critical_region_)
1032 _Requires_lock_held_(*Mutex)
1033 _Releases_lock_(*Mutex)
1034 _IRQL_requires_max_(APC_LEVEL)
1035 NTKERNELAPI
1036 VOID
1037 FASTCALL
1038 KeReleaseGuardedMutex(
1039   _Inout_ PKGUARDED_MUTEX GuardedMutex);
1040 
1041 _Must_inspect_result_
1042 _Success_(return != FALSE)
1043 _IRQL_requires_max_(APC_LEVEL)
1044 _Post_satisfies_(return == 1 || return == 0)
1045 NTKERNELAPI
1046 BOOLEAN
1047 FASTCALL
1048 KeTryToAcquireGuardedMutex(
1049   _When_ (return, _Requires_lock_not_held_(*_Curr_) _Acquires_exclusive_lock_(*_Curr_)) _Acquires_lock_(_Global_critical_region_)
1050   _Inout_ PKGUARDED_MUTEX GuardedMutex);
1051 $endif (_WDMDDK_)
1052 $if (_NTDDK_)
1053 _Must_inspect_result_
1054 _IRQL_requires_max_(APC_LEVEL)
1055 NTKERNELAPI
1056 NTSTATUS
1057 NTAPI
1058 KeExpandKernelStackAndCallout(
1059   _In_ PEXPAND_STACK_CALLOUT Callout,
1060   _In_opt_ PVOID Parameter,
1061   _In_ SIZE_T Size);
1062 
1063 _Acquires_lock_(_Global_critical_region_)
1064 _IRQL_requires_max_(APC_LEVEL)
1065 NTKERNELAPI
1066 VOID
1067 NTAPI
1068 KeEnterGuardedRegion(VOID);
1069 
1070 _Releases_lock_(_Global_critical_region_)
1071 _IRQL_requires_max_(APC_LEVEL)
1072 NTKERNELAPI
1073 VOID
1074 NTAPI
1075 KeLeaveGuardedRegion(VOID);
1076 $endif (_NTDDK_)
1077 $if (_WDMDDK_ || _NTDDK_)
1078 #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
1079 $endif (_WDMDDK_ || _NTDDK_)
1080 
1081 #if (NTDDI_VERSION >= NTDDI_VISTA)
1082 $if (_WDMDDK_)
1083 _Requires_lock_not_held_(*LockHandle)
1084 _Acquires_lock_(*LockHandle)
1085 _Post_same_lock_(*SpinLock, *LockHandle)
1086 _IRQL_requires_max_(DISPATCH_LEVEL)
1087 _IRQL_saves_global_(QueuedSpinLock,LockHandle)
1088 NTKERNELAPI
1089 VOID
1090 FASTCALL
1091 KeAcquireInStackQueuedSpinLockForDpc(
1092   _Inout_ PKSPIN_LOCK SpinLock,
1093   _Out_ PKLOCK_QUEUE_HANDLE LockHandle);
1094 
1095 _Requires_lock_held_(*LockHandle)
1096 _Releases_lock_(*LockHandle)
1097 _IRQL_requires_(DISPATCH_LEVEL)
1098 _IRQL_restores_global_(QueuedSpinLock,LockHandle)
1099 NTKERNELAPI
1100 VOID
1101 FASTCALL
1102 KeReleaseInStackQueuedSpinLockForDpc(
1103   _In_ PKLOCK_QUEUE_HANDLE LockHandle);
1104 
1105 _IRQL_requires_(DISPATCH_LEVEL)
1106 NTKERNELAPI
1107 NTSTATUS
1108 NTAPI
1109 KeQueryDpcWatchdogInformation(
1110   _Out_ PKDPC_WATCHDOG_INFORMATION WatchdogInformation);
1111 $endif (_WDMDDK_)
1112 $if (_WDMDDK_ || _NTDDK_)
1113 #if defined(SINGLE_GROUP_LEGACY_API)
1114 $endif (_WDMDDK_ || _NTDDK_)
1115 
1116 $if (_WDMDDK_)
1117 _IRQL_requires_min_(PASSIVE_LEVEL)
1118 _IRQL_requires_max_(APC_LEVEL)
1119 NTKERNELAPI
1120 KAFFINITY
1121 NTAPI
1122 KeSetSystemAffinityThreadEx(
1123   _In_ KAFFINITY Affinity);
1124 
1125 _IRQL_requires_min_(PASSIVE_LEVEL)
1126 _IRQL_requires_max_(APC_LEVEL)
1127 NTKERNELAPI
1128 VOID
1129 NTAPI
1130 KeRevertToUserAffinityThreadEx(
1131   _In_ KAFFINITY Affinity);
1132 
1133 NTKRNLVISTAAPI
1134 ULONG
1135 NTAPI
1136 KeQueryActiveProcessorCount(
1137   _Out_opt_ PKAFFINITY ActiveProcessors);
1138 
1139 NTKERNELAPI
1140 ULONG
1141 NTAPI
1142 KeQueryMaximumProcessorCount(VOID);
1143 $endif (_WDMDDK_)
1144 $if (_NTDDK_)
1145 NTKRNLVISTAAPI
1146 ULONG
1147 NTAPI
1148 KeQueryActiveProcessorCount(
1149   _Out_opt_ PKAFFINITY ActiveProcessors);
1150 
1151 NTKERNELAPI
1152 ULONG
1153 NTAPI
1154 KeQueryMaximumProcessorCount(VOID);
1155 $endif (_NTDDK_)
1156 $if (_WDMDDK_ || _NTDDK_)
1157 #endif /* SINGLE_GROUP_LEGACY_API */
1158 $endif (_WDMDDK_ || _NTDDK_)
1159 $if (_NTIFS_)
1160 _IRQL_requires_max_(DISPATCH_LEVEL)
1161 NTKERNELAPI
1162 VOID
1163 KeQueryOwnerMutant(
1164   _In_ PKMUTANT Mutant,
1165   _Out_ PCLIENT_ID ClientId);
1166 
1167 _IRQL_requires_min_(PASSIVE_LEVEL)
1168 _When_((Timeout==NULL || *Timeout!=0), _IRQL_requires_max_(APC_LEVEL))
1169 _When_((Timeout!=NULL && *Timeout==0), _IRQL_requires_max_(DISPATCH_LEVEL))
1170 NTKERNELAPI
1171 ULONG
1172 NTAPI
1173 KeRemoveQueueEx(
1174   _Inout_ PKQUEUE Queue,
1175   _In_ KPROCESSOR_MODE WaitMode,
1176   _In_ BOOLEAN Alertable,
1177   _In_opt_ PLARGE_INTEGER Timeout,
1178   _Out_writes_to_(Count, return) PLIST_ENTRY *EntryArray,
1179   _In_ ULONG Count);
1180 $endif (_NTIFS_)
1181 
1182 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
1183 
1184 $if (_WDMDDK_)
1185 #if (NTDDI_VERSION >= NTDDI_WS08)
1186 
1187 _IRQL_requires_max_(APC_LEVEL)
1188 PVOID
1189 NTAPI
1190 KeRegisterProcessorChangeCallback(
1191   _In_ PPROCESSOR_CALLBACK_FUNCTION CallbackFunction,
1192   _In_opt_ PVOID CallbackContext,
1193   _In_ ULONG Flags);
1194 
1195 _IRQL_requires_max_(APC_LEVEL)
1196 VOID
1197 NTAPI
1198 KeDeregisterProcessorChangeCallback(
1199   _In_ PVOID CallbackHandle);
1200 
1201 #endif /* (NTDDI_VERSION >= NTDDI_WS08) */
1202 $endif (_WDMDDK_)
1203 $if (_WDMDDK_ || _NTDDK_)
1204 #if (NTDDI_VERSION >= NTDDI_WIN7)
1205 
1206 NTKERNELAPI
1207 ULONG
1208 NTAPI
1209 KeQueryActiveProcessorCountEx(
1210   _In_ USHORT GroupNumber);
1211 
1212 NTKERNELAPI
1213 ULONG
1214 NTAPI
1215 KeQueryMaximumProcessorCountEx(
1216   _In_ USHORT GroupNumber);
1217 
1218 NTKERNELAPI
1219 USHORT
1220 NTAPI
1221 KeQueryActiveGroupCount(VOID);
1222 
1223 NTKERNELAPI
1224 USHORT
1225 NTAPI
1226 KeQueryMaximumGroupCount(VOID);
1227 
1228 NTKERNELAPI
1229 KAFFINITY
1230 NTAPI
1231 KeQueryGroupAffinity(
1232   _In_ USHORT GroupNumber);
1233 
1234 NTKERNELAPI
1235 ULONG
1236 NTAPI
1237 KeGetCurrentProcessorNumberEx(
1238   _Out_opt_ PPROCESSOR_NUMBER ProcNumber);
1239 
1240 NTKERNELAPI
1241 VOID
1242 NTAPI
1243 KeQueryNodeActiveAffinity(
1244   _In_ USHORT NodeNumber,
1245   _Out_opt_ PGROUP_AFFINITY Affinity,
1246   _Out_opt_ PUSHORT Count);
1247 
1248 NTKERNELAPI
1249 USHORT
1250 NTAPI
1251 KeQueryNodeMaximumProcessorCount(
1252   _In_ USHORT NodeNumber);
1253 
1254 NTKRNLVISTAAPI
1255 USHORT
1256 NTAPI
1257 KeQueryHighestNodeNumber(VOID);
1258 
1259 NTKRNLVISTAAPI
1260 USHORT
1261 NTAPI
1262 KeGetCurrentNodeNumber(VOID);
1263 
1264 _IRQL_requires_max_(DISPATCH_LEVEL)
1265 NTKERNELAPI
1266 NTSTATUS
1267 NTAPI
1268 KeQueryLogicalProcessorRelationship(
1269   _In_opt_ PPROCESSOR_NUMBER ProcessorNumber OPTIONAL,
1270   _In_ LOGICAL_PROCESSOR_RELATIONSHIP RelationshipType,
1271   _Out_writes_bytes_opt_(*Length) PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Information,
1272   _Inout_ PULONG Length);
1273 
1274 $endif (_WDMDDK_ || _NTDDK_)
1275 
1276 $if (_WDMDDK_)
1277 _IRQL_requires_max_(DISPATCH_LEVEL)
1278 _IRQL_requires_min_(PASSIVE_LEVEL)
1279 _IRQL_requires_same_
1280 ULONG64
1281 NTAPI
1282 KeQueryTotalCycleTimeProcess(
1283   _Inout_ PKPROCESS Process,
1284   _Out_ PULONG64 CycleTimeStamp);
1285 
1286 _IRQL_requires_max_(APC_LEVEL)
1287 _IRQL_requires_min_(PASSIVE_LEVEL)
1288 _IRQL_requires_same_
1289 ULONG64
1290 NTAPI
1291 KeQueryTotalCycleTimeThread(
1292   _Inout_ PKTHREAD Thread,
1293   _Out_ PULONG64 CycleTimeStamp);
1294 
1295 _Must_inspect_result_
1296 NTKERNELAPI
1297 NTSTATUS
1298 NTAPI
1299 KeSetTargetProcessorDpcEx(
1300   _Inout_ PKDPC Dpc,
1301   _In_ PPROCESSOR_NUMBER ProcNumber);
1302 
1303 _IRQL_requires_min_(PASSIVE_LEVEL)
1304 _IRQL_requires_max_(APC_LEVEL)
1305 NTKERNELAPI
1306 VOID
1307 NTAPI
1308 KeSetSystemGroupAffinityThread(
1309   _In_ PGROUP_AFFINITY Affinity,
1310   _Out_opt_ PGROUP_AFFINITY PreviousAffinity);
1311 
1312 _IRQL_requires_min_(PASSIVE_LEVEL)
1313 _IRQL_requires_max_(APC_LEVEL)
1314 NTKERNELAPI
1315 VOID
1316 NTAPI
1317 KeRevertToUserGroupAffinityThread(
1318   _In_ PGROUP_AFFINITY PreviousAffinity);
1319 
1320 _IRQL_requires_max_(DISPATCH_LEVEL)
1321 NTKRNLVISTAAPI
1322 BOOLEAN
1323 NTAPI
1324 KeSetCoalescableTimer(
1325   _Inout_ PKTIMER Timer,
1326   _In_ LARGE_INTEGER DueTime,
1327   _In_ ULONG Period,
1328   _In_ ULONG TolerableDelay,
1329   _In_opt_ PKDPC Dpc);
1330 
1331 NTKERNELAPI
1332 ULONGLONG
1333 NTAPI
1334 KeQueryUnbiasedInterruptTime(VOID);
1335 
1336 _Must_inspect_result_
1337 _IRQL_requires_max_(DISPATCH_LEVEL)
1338 _Ret_range_(<=, 0)
1339 _When_(return==0, _Kernel_float_saved_)
1340 NTKERNELAPI
1341 NTSTATUS
1342 NTAPI
1343 KeSaveExtendedProcessorState(
1344   _In_ ULONG64 Mask,
1345   _Out_ _Requires_lock_not_held_(*_Curr_)
1346   _When_(return==0, _Acquires_lock_(*_Curr_))
1347     PXSTATE_SAVE XStateSave);
1348 
1349 _Kernel_float_restored_
1350 NTKERNELAPI
1351 VOID
1352 NTAPI
1353 KeRestoreExtendedProcessorState(
1354   _In_ _Requires_lock_held_(*_Curr_) _Releases_lock_(*_Curr_)
1355     PXSTATE_SAVE XStateSave);
1356 
1357 NTSTATUS
1358 NTAPI
1359 KeGetProcessorNumberFromIndex(
1360   _In_ ULONG ProcIndex,
1361   _Out_ PPROCESSOR_NUMBER ProcNumber);
1362 
1363 ULONG
1364 NTAPI
1365 KeGetProcessorIndexFromNumber(
1366   _In_ PPROCESSOR_NUMBER ProcNumber);
1367 $endif (_WDMDDK_)
1368 $if (_NTDDK_)
1369 _IRQL_requires_max_(APC_LEVEL)
1370 NTKERNELAPI
1371 NTSTATUS
1372 NTAPI
1373 KeSetHardwareCounterConfiguration(
1374   _In_reads_(Count) PHARDWARE_COUNTER CounterArray,
1375   _In_ ULONG Count);
1376 
1377 _IRQL_requires_max_(APC_LEVEL)
1378 NTKERNELAPI
1379 NTSTATUS
1380 NTAPI
1381 KeQueryHardwareCounterConfiguration(
1382   _Out_writes_to_(MaximumCount, *Count) PHARDWARE_COUNTER CounterArray,
1383   _In_ ULONG MaximumCount,
1384   _Out_ PULONG Count);
1385 $endif (_NTDDK_)
1386 $if (_WDMDDK_ || _NTDDK_)
1387 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
1388 $endif (_WDMDDK_ || _NTDDK_)
1389 $if (_WDMDDK_)
1390 #if !defined(_IA64_)
1391 NTHALAPI
1392 VOID
1393 NTAPI
1394 KeFlushWriteBuffer(VOID);
1395 #endif
1396 
1397 /* VOID
1398  * KeInitializeCallbackRecord(
1399  *   IN PKBUGCHECK_CALLBACK_RECORD  CallbackRecord)
1400  */
1401 #define KeInitializeCallbackRecord(CallbackRecord) \
1402   (CallbackRecord)->State = BufferEmpty;
1403 
1404 #if defined(_PREFAST_)
1405 
1406 void __PREfastPagedCode(void);
1407 void __PREfastPagedCodeLocked(void);
1408 #define PAGED_CODE() __PREfastPagedCode();
1409 #define PAGED_CODE_LOCKED() __PREfastPagedCodeLocked();
1410 
1411 #elif DBG
1412 
1413 #if (NTDDI_VERSION >= NTDDI_VISTA)
1414 #define PAGED_ASSERT( exp ) NT_ASSERT( exp )
1415 #else
1416 #define PAGED_ASSERT( exp ) ASSERT( exp )
1417 #endif
1418 
1419 #define PAGED_CODE() { \
1420   if (KeGetCurrentIrql() > APC_LEVEL) { \
1421     KdPrint( ("NTDDK: Pageable code called at IRQL > APC_LEVEL (%d)\n", KeGetCurrentIrql() )); \
1422     PAGED_ASSERT(FALSE); \
1423   } \
1424 }
1425 
1426 #define PAGED_CODE_LOCKED() NOP_FUNCTION;
1427 
1428 #else
1429 
1430 #define PAGED_CODE() NOP_FUNCTION;
1431 #define PAGED_CODE_LOCKED() NOP_FUNCTION;
1432 
1433 #endif /* DBG */
1434 
1435 $endif (_WDMDDK_)
1436