#include <ntoskrnl.h>
#include <debug.h>
Go to the source code of this file.
◆ NDEBUG
◆ KeInitializeGate()
Definition at line 19 of file gate.c.
20{
21
25 Gate->Header.SignalState = 0;
27}
#define InitializeListHead(ListHead)
◆ KeSignalGateBoostPriority()
Definition at line 136 of file gate.c.
137{
143
144
145 for (;;)
146 {
147
149
150
152
153
154 if (
Gate->Header.SignalState)
break;
155
156
158 {
159
160 Gate->Header.SignalState = 1;
161 break;
162 }
163 else
164 {
165
168 WaitListEntry);
169
170
171 WaitThread = WaitBlock->
Thread;
172
173
175 {
176
178
179
181 continue;
182 }
183
184
186
187
189
190
193
194
196
197
199
200
201
202
203 if (WaitThread->
Queue)
204 {
205
207
208
209 if (WaitThread->
Queue)
210 {
211
213 }
214
215
217 }
218
219
221
222
224 return;
225 }
226 }
227
228
231}
#define RemoveEntryList(Entry)
#define IsListEmpty(ListHead)
#define KeLowerIrql(oldIrql)
KIRQL NTAPI KeRaiseIrqlToSynchLevel(VOID)
FORCEINLINE BOOLEAN KiTryToAcquireThreadLock(IN PKTHREAD Thread)
FORCEINLINE VOID KiReleaseDispatcherObject(IN DISPATCHER_HEADER *Object)
FORCEINLINE VOID KiAcquireDispatcherObject(IN DISPATCHER_HEADER *Object)
FORCEINLINE VOID KiReleaseDispatcherLockFromSynchLevel(VOID)
FORCEINLINE VOID KiReleaseThreadLock(IN PKTHREAD Thread)
FORCEINLINE VOID KiAcquireDispatcherLockAtSynchLevel(VOID)
FORCEINLINE struct _KPRCB * KeGetCurrentPrcb(VOID)
VOID NTAPI KiReadyThread(IN PKTHREAD Thread)
VOID FASTCALL KiExitDispatcher(KIRQL OldIrql)
#define ASSERT_IRQL_LESS_OR_EQUAL(x)
volatile ULONG CurrentCount
volatile INT_PTR WaitStatus
#define CONTAINING_RECORD(address, type, field)
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
#define ASSERT_GATE(Object)
◆ KeWaitForGate()
Definition at line 31 of file gate.c.
34{
42
43
44 do
45 {
46
48
49
50 if ((
Thread->ApcState.KernelApcPending) &&
51 !(
Thread->SpecialApcDisable) &&
53 {
54
56 }
57 else
58 {
59
62
63
65
66
68
69
70 if (
Gate->Header.SignalState)
71 {
72
73 Gate->Header.SignalState = 0;
74
75
78
79
81
82
84 break;
85 }
86
87
88 GateWaitBlock = &
Thread->WaitBlock[0];
91
92
93 Thread->WaitMode = WaitMode;
94 Thread->WaitReason = WaitReason;
98
99
102
103
105
106
108
109
111
112
114 {
115
117
118
120 }
121
122
124
125
127
128
130 }
132}
#define InsertTailList(ListHead, Entry)
_In_opt_ PFILE_OBJECT _In_opt_ PETHREAD Thread
#define KeGetCurrentThread
FORCEINLINE VOID KiAcquireApcLockRaiseToSynch(IN PKTHREAD Thread, IN PKLOCK_QUEUE_HANDLE Handle)
FORCEINLINE VOID KiSetThreadSwapBusy(IN PKTHREAD Thread)
FORCEINLINE VOID KiAcquireThreadLock(IN PKTHREAD Thread)
FORCEINLINE VOID KiReleaseApcLockFromSynchLevel(IN PKLOCK_QUEUE_HANDLE Handle)
FORCEINLINE VOID KiReleaseApcLock(IN PKLOCK_QUEUE_HANDLE Handle)
LONG_PTR FASTCALL KiSwapThread(IN PKTHREAD Thread, IN PKPRCB Prcb)
VOID FASTCALL KiActivateWaiterQueue(IN PKQUEUE Queue)
_Must_inspect_result_ _In_ WDFDEVICE _In_ PIRP _In_ WDFQUEUE Queue