#include <ntoskrnl.h>
#include <debug.h>
Go to the source code of this file.
|
| ULONG NTAPI | KiChainedDispatch2ndLvl (VOID) |
| |
| VOID NTAPI | KiGetVectorDispatch (IN ULONG Vector, IN PDISPATCH_INFO Dispatch) |
| |
| VOID NTAPI | KiConnectVectorToInterrupt (IN PKINTERRUPT Interrupt, IN CONNECT_TYPE Type) |
| |
| FORCEINLINE DECLSPEC_NORETURN VOID | KiExitInterrupt (IN PKTRAP_FRAME TrapFrame, IN KIRQL OldIrql, IN BOOLEAN Spurious) |
| |
| DECLSPEC_NORETURN VOID __cdecl | KiUnexpectedInterrupt (VOID) |
| |
| VOID FASTCALL | KiUnexpectedInterruptTailHandler (IN PKTRAP_FRAME TrapFrame) |
| |
| VOID FASTCALL | KiInterruptDispatch (IN PKTRAP_FRAME TrapFrame, IN PKINTERRUPT Interrupt) |
| |
| VOID FASTCALL | KiChainedDispatch (IN PKTRAP_FRAME TrapFrame, IN PKINTERRUPT Interrupt) |
| |
| VOID FASTCALL | KiInterruptTemplateHandler (IN PKTRAP_FRAME TrapFrame, IN PKINTERRUPT Interrupt) |
| |
| VOID NTAPI | KeInitializeInterrupt (IN PKINTERRUPT Interrupt, IN PKSERVICE_ROUTINE ServiceRoutine, IN PVOID ServiceContext, IN PKSPIN_LOCK SpinLock, IN ULONG Vector, IN KIRQL Irql, IN KIRQL SynchronizeIrql, IN KINTERRUPT_MODE InterruptMode, IN BOOLEAN ShareVector, IN CHAR ProcessorNumber, IN BOOLEAN FloatingSave) |
| |
| BOOLEAN NTAPI | KeConnectInterrupt (IN PKINTERRUPT Interrupt) |
| |
| BOOLEAN NTAPI | KeDisconnectInterrupt (IN PKINTERRUPT Interrupt) |
| |
| BOOLEAN NTAPI | KeSynchronizeExecution (IN OUT PKINTERRUPT Interrupt, IN PKSYNCHRONIZE_ROUTINE SynchronizeRoutine, IN PVOID SynchronizeContext OPTIONAL) |
| |
◆ NDEBUG
◆ PKI_INTERRUPT_DISPATCH
◆ KeConnectInterrupt()
Definition at line 394 of file irqobj.c.
395{
401
402
406
407
412 {
414 }
415
416
419
420
423
424
426 {
427
429
430
432 {
433
435
436
438
439
443 }
446 (
Dispatch.Interrupt->ShareVector) &&
448 {
449
451
452
453
454
455#if defined(CONFIG_SMP)
457#else
459#endif
460
461
463 {
464
466
467
469 }
470
471
474 }
475 }
476
477
480
481
482 if ((Connected) && (
Error))
483 {
484 DPRINT1(
"HalEnableSystemInterrupt failed\n");
487 }
488
489
490 return Connected;
491}
#define InsertTailList(ListHead, Entry)
#define InitializeListHead(ListHead)
BOOLEAN NTAPI HalEnableSystemInterrupt(IN ULONG Vector, IN KIRQL Irql, IN KINTERRUPT_MODE InterruptMode)
BOOLEAN NTAPI KeDisconnectInterrupt(IN PKINTERRUPT Interrupt)
VOID NTAPI KiGetVectorDispatch(IN ULONG Vector, IN PDISPATCH_INFO Dispatch)
VOID NTAPI KiConnectVectorToInterrupt(IN PKINTERRUPT Interrupt, IN CONNECT_TYPE Type)
FORCEINLINE VOID KiReleaseDispatcherLock(IN KIRQL OldIrql)
FORCEINLINE KIRQL KiAcquireDispatcherLock(VOID)
VOID NTAPI KeSetSystemAffinityThread(IN KAFFINITY Affinity)
VOID NTAPI KeRevertToUserAffinityThread(VOID)
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_INTERRUPT_CONFIG _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFINTERRUPT * Interrupt
_In_ USHORT _In_ ULONG _In_ PSOCKADDR _In_ PSOCKADDR _Reserved_ ULONG _In_opt_ PVOID _In_opt_ const WSK_CLIENT_CONNECTION_DISPATCH * Dispatch
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
◆ KeDisconnectInterrupt()
Definition at line 498 of file irqobj.c.
499{
505
506
508
509
511
512
515 {
516
519
520
522
523
525 {
526
527#if defined(CONFIG_SMP)
529#else
531#endif
533 {
534
536 InterruptListEntry.Flink,
538 InterruptListEntry);
539
540
542 }
543
544
546
547
549 InterruptListEntry.Flink,
551 InterruptListEntry);
552
553
554 if (
Dispatch.Interrupt == NextInterrupt)
555 {
556
558 }
559 }
560 else
561 {
562
565 }
566
567
569 }
570
571
574
575
577}
#define RemoveEntryList(Entry)
VOID NTAPI HalDisableSystemInterrupt(IN ULONG Vector, IN KIRQL Irql)
#define CONTAINING_RECORD(address, type, field)
Referenced by KeConnectInterrupt().
◆ KeInitializeInterrupt()
| VOID NTAPI KeInitializeInterrupt |
( |
IN PKINTERRUPT |
Interrupt, |
|
|
IN PKSERVICE_ROUTINE |
ServiceRoutine, |
|
|
IN PVOID |
ServiceContext, |
|
|
IN PKSPIN_LOCK |
SpinLock, |
|
|
IN ULONG |
Vector, |
|
|
IN KIRQL |
Irql, |
|
|
IN KIRQL |
SynchronizeIrql, |
|
|
IN KINTERRUPT_MODE |
InterruptMode, |
|
|
IN BOOLEAN |
ShareVector, |
|
|
IN CHAR |
ProcessorNumber, |
|
|
IN BOOLEAN |
FloatingSave |
|
) |
| |
Definition at line 326 of file irqobj.c.
337{
340
341
344
345
347 {
349 }
350 else
351 {
352
355 }
356
357
369
370
372 {
373
375 }
376
377
381
382
384
385
387}
#define KeInitializeSpinLock(sl)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
struct _KINTERRUPT KINTERRUPT
PULONG KiInterruptTemplateObject
VOID __cdecl KiInterruptTemplate(VOID)
_Must_inspect_result_ _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFSPINLOCK * SpinLock
_In_ PKSERVICE_ROUTINE ServiceRoutine
_In_ PKSERVICE_ROUTINE _In_opt_ PVOID _In_opt_ PKSPIN_LOCK _In_ ULONG _In_ KIRQL _In_ KIRQL _In_ KINTERRUPT_MODE InterruptMode
_In_ PKSERVICE_ROUTINE _In_opt_ PVOID _In_opt_ PKSPIN_LOCK _In_ ULONG _In_ KIRQL _In_ KIRQL SynchronizeIrql
_In_ PKSERVICE_ROUTINE _In_opt_ PVOID _In_opt_ PKSPIN_LOCK _In_ ULONG _In_ KIRQL _In_ KIRQL _In_ KINTERRUPT_MODE _In_ BOOLEAN _In_ KAFFINITY _In_ BOOLEAN FloatingSave
_In_ PKSERVICE_ROUTINE _In_opt_ PVOID _In_opt_ PKSPIN_LOCK _In_ ULONG _In_ KIRQL _In_ KIRQL _In_ KINTERRUPT_MODE _In_ BOOLEAN ShareVector
_In_ PKSERVICE_ROUTINE _In_opt_ PVOID ServiceContext
◆ KeSynchronizeExecution()
Definition at line 584 of file irqobj.c.
587{
590
591
594
595
597
598
600
601
603
604
606
607
609}
static KSYNCHRONIZE_ROUTINE SynchronizeRoutine
#define KeRaiseIrql(irql, oldIrql)
#define KeLowerIrql(oldIrql)
#define KeAcquireSpinLockAtDpcLevel(SpinLock)
#define KeReleaseSpinLockFromDpcLevel(SpinLock)
_In_ PKSYNCHRONIZE_ROUTINE _In_opt_ __drv_aliasesMem PVOID SynchronizeContext
◆ KiChainedDispatch()
Definition at line 231 of file irqobj.c.
233{
237
238
240
241
245 {
246
247 ListHead = &
Interrupt->InterruptListEntry;
248 NextEntry = ListHead;
250 {
251
253 {
254
256 }
257
258
259 KxAcquireSpinLock(
Interrupt->ActualLock);
260
261
264
265
266 KxReleaseSpinLock(
Interrupt->ActualLock);
267
268
270 {
271
274 }
275
276
278
279
280 NextEntry = NextEntry->
Flink;
281
282
283 if (NextEntry == ListHead)
284 {
285
287
288
290 }
291
292
294 }
295
296
298 }
299 else
300 {
301
303 }
304}
BOOLEAN NTAPI HalBeginSystemInterrupt(IN KIRQL Irql, IN ULONG Vector, OUT PKIRQL OldIrql)
VOID FASTCALL KfLowerIrql(IN KIRQL NewIrql)
KIRQL FASTCALL KfRaiseIrql(IN KIRQL NewIrql)
FORCEINLINE DECLSPEC_NORETURN VOID KiExitInterrupt(IN PKTRAP_FRAME TrapFrame, IN KIRQL OldIrql, IN BOOLEAN Spurious)
FORCEINLINE struct _KPRCB * KeGetCurrentPrcb(VOID)
struct _LIST_ENTRY * Flink
Referenced by KiGetVectorDispatch().
◆ KiChainedDispatch2ndLvl()
◆ KiConnectVectorToInterrupt()
Definition at line 95 of file irqobj.c.
97{
100
101
103
104
106 {
107
109 }
110 else
111 {
112
117
118
120
121
122
123
126 }
127
128
130}
ACPI_PHYSICAL_ADDRESS ACPI_SIZE BOOLEAN Warn UINT32 *TableIdx UINT32 ACPI_TABLE_HEADER *OutTableHeader ACPI_TABLE_HEADER **OutTable ACPI_HANDLE UINT32 ACPI_WALK_CALLBACK ACPI_WALK_CALLBACK void void **ReturnValue UINT32 ACPI_BUFFER *RetPathPtr ACPI_OBJECT_HANDLER Handler
FORCEINLINE VOID KeRegisterInterruptHandler(IN ULONG Vector, IN PVOID Handler)
VOID(NTAPI * PKINTERRUPT_ROUTINE)(VOID)
Referenced by KeConnectInterrupt(), and KeDisconnectInterrupt().
◆ KiExitInterrupt()
◆ KiGetVectorDispatch()
Definition at line 28 of file irqobj.c.
30{
35
36
41
42
44
45
49
50
55
56
58
59
62 DispatchCode);
63
64
66 {
67
69 }
70 else
71 {
72
75 {
76
78 }
81 {
82
84 }
85 else
86 {
87
89 }
90 }
91}
UCHAR FASTCALL HalSystemVectorDispatchEntry(IN ULONG Vector, OUT PKINTERRUPT_ROUTINE **FlatDispatch, OUT PKINTERRUPT_ROUTINE *NoConnection)
#define PRIMARY_VECTOR_BASE
VOID FASTCALL KiChainedDispatch(IN PKTRAP_FRAME TrapFrame, IN PKINTERRUPT Interrupt)
#define HalVectorToIDTEntry
FORCEINLINE PVOID KeQueryInterruptHandler(IN ULONG Vector)
VOID NTAPI KiStartUnexpectedRange(VOID)
ULONG KiUnexpectedEntrySize
void KiInterruptDispatch(void)
Referenced by KeConnectInterrupt(), KeDisconnectInterrupt(), and KiConnectVectorToInterrupt().
◆ KiInterruptDispatch()
Definition at line 197 of file irqobj.c.
199{
201
202
204
205
209 {
210
211 KxAcquireSpinLock(
Interrupt->ActualLock);
212
213
215
216
217 KxReleaseSpinLock(
Interrupt->ActualLock);
218
219
221 }
222 else
223 {
224
226 }
227}
◆ KiInterruptTemplateHandler()
Definition at line 308 of file irqobj.c.
310{
311
313
314
316}
VOID(FASTCALL * PKI_INTERRUPT_DISPATCH)(IN PKTRAP_FRAME TrapFrame, IN PKINTERRUPT Interrupt)
FORCEINLINE VOID KiEnterInterruptTrap(IN PKTRAP_FRAME TrapFrame)
◆ KiUnexpectedInterrupt()
Definition at line 154 of file irqobj.c.
155{
156
158}
DECLSPEC_NORETURN VOID NTAPI KeBugCheck(ULONG BugCheckCode)
◆ KiUnexpectedInterruptTailHandler()
Definition at line 162 of file irqobj.c.
163{
165
166
168
169
171
172
174 {
175
176 DPRINT1(
"\n\x7\x7!!! Unexpected Interrupt 0x%02lx !!!\n", TrapFrame->ErrCode);
177
178
180 }
181 else
182 {
183
185 }
186}
◆ KiISROverflow
◆ KiISRTimeout