mirror of
https://github.com/reactos/reactos.git
synced 2024-12-27 09:34:43 +00:00
[NTOS:KE] Rename some locking functions to reflect the IRQL level changes
* KiAcquireApcLock -> KiAcquireApcLockRaiseToSynch * KiAcquireApcLockAtDpcLevel -> KiAcquireApcLockAtSynchLevel * KiReleaseApcLockFromDpcLevel -> KiReleaseApcLockFromSynchLevel * KiAcquireApcLockAtApcLevel -> KiAcquireApcLockRaiseToDpc * KiAcquireProcessLock -> KiAcquireProcessLockRaiseToSynch * KiReleaseProcessLockFromDpcLevel -> KiReleaseProcessLockFromSynchLevel * KiAcquireDispatcherLockAtDpcLevel -> KiAcquireDispatcherLockAtSynchLevel * KiReleaseDispatcherLockFromDpcLevel -> KiReleaseDispatcherLockFromSynchLevel * Add some ASSERTs
This commit is contained in:
parent
3b430eefdd
commit
7523a7b138
9 changed files with 120 additions and 116 deletions
|
@ -157,17 +157,18 @@ KiReleaseDispatcherLock(IN KIRQL OldIrql)
|
|||
|
||||
FORCEINLINE
|
||||
VOID
|
||||
KiAcquireDispatcherLockAtDpcLevel(VOID)
|
||||
KiAcquireDispatcherLockAtSynchLevel(VOID)
|
||||
{
|
||||
/* This is a no-op at DPC Level for UP systems */
|
||||
/* This is a no-op at SYNCH_LEVEL for UP systems */
|
||||
ASSERT(KeGetCurrentIrql() >= SYNCH_LEVEL);
|
||||
return;
|
||||
}
|
||||
|
||||
FORCEINLINE
|
||||
VOID
|
||||
KiReleaseDispatcherLockFromDpcLevel(VOID)
|
||||
KiReleaseDispatcherLockFromSynchLevel(VOID)
|
||||
{
|
||||
/* This is a no-op at DPC Level for UP systems */
|
||||
/* This is a no-op at SYNCH_LEVEL for UP systems */
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -360,16 +361,17 @@ KiReleaseDispatcherLock(IN KIRQL OldIrql)
|
|||
|
||||
FORCEINLINE
|
||||
VOID
|
||||
KiAcquireDispatcherLockAtDpcLevel(VOID)
|
||||
KiAcquireDispatcherLockAtSynchLevel(VOID)
|
||||
{
|
||||
/* Acquire the dispatcher lock */
|
||||
ASSERT(KeGetCurrentIrql() >= SYNCH_LEVEL);
|
||||
KeAcquireQueuedSpinLockAtDpcLevel(&KeGetCurrentPrcb()->
|
||||
LockQueue[LockQueueDispatcherLock]);
|
||||
}
|
||||
|
||||
FORCEINLINE
|
||||
VOID
|
||||
KiReleaseDispatcherLockFromDpcLevel(VOID)
|
||||
KiReleaseDispatcherLockFromSynchLevel(VOID)
|
||||
{
|
||||
/* Release the dispatcher lock */
|
||||
KeReleaseQueuedSpinLockFromDpcLevel(&KeGetCurrentPrcb()->
|
||||
|
@ -597,7 +599,7 @@ KiReleaseTimerLock(IN PKSPIN_LOCK_QUEUE LockQueue)
|
|||
|
||||
FORCEINLINE
|
||||
VOID
|
||||
KiAcquireApcLock(IN PKTHREAD Thread,
|
||||
KiAcquireApcLockRaiseToSynch(IN PKTHREAD Thread,
|
||||
IN PKLOCK_QUEUE_HANDLE Handle)
|
||||
{
|
||||
/* Acquire the lock and raise to synchronization level */
|
||||
|
@ -606,16 +608,17 @@ KiAcquireApcLock(IN PKTHREAD Thread,
|
|||
|
||||
FORCEINLINE
|
||||
VOID
|
||||
KiAcquireApcLockAtDpcLevel(IN PKTHREAD Thread,
|
||||
KiAcquireApcLockAtSynchLevel(IN PKTHREAD Thread,
|
||||
IN PKLOCK_QUEUE_HANDLE Handle)
|
||||
{
|
||||
/* Acquire the lock */
|
||||
ASSERT(KeGetCurrentIrql() >= SYNCH_LEVEL);
|
||||
KeAcquireInStackQueuedSpinLockAtDpcLevel(&Thread->ApcQueueLock, Handle);
|
||||
}
|
||||
|
||||
FORCEINLINE
|
||||
VOID
|
||||
KiAcquireApcLockAtApcLevel(IN PKTHREAD Thread,
|
||||
KiAcquireApcLockRaiseToDpc(IN PKTHREAD Thread,
|
||||
IN PKLOCK_QUEUE_HANDLE Handle)
|
||||
{
|
||||
/* Acquire the lock */
|
||||
|
@ -632,7 +635,7 @@ KiReleaseApcLock(IN PKLOCK_QUEUE_HANDLE Handle)
|
|||
|
||||
FORCEINLINE
|
||||
VOID
|
||||
KiReleaseApcLockFromDpcLevel(IN PKLOCK_QUEUE_HANDLE Handle)
|
||||
KiReleaseApcLockFromSynchLevel(IN PKLOCK_QUEUE_HANDLE Handle)
|
||||
{
|
||||
/* Release the lock */
|
||||
KeReleaseInStackQueuedSpinLockFromDpcLevel(Handle);
|
||||
|
@ -640,7 +643,7 @@ KiReleaseApcLockFromDpcLevel(IN PKLOCK_QUEUE_HANDLE Handle)
|
|||
|
||||
FORCEINLINE
|
||||
VOID
|
||||
KiAcquireProcessLock(IN PKPROCESS Process,
|
||||
KiAcquireProcessLockRaiseToSynch(IN PKPROCESS Process,
|
||||
IN PKLOCK_QUEUE_HANDLE Handle)
|
||||
{
|
||||
/* Acquire the lock and raise to synchronization level */
|
||||
|
@ -651,15 +654,15 @@ FORCEINLINE
|
|||
VOID
|
||||
KiReleaseProcessLock(IN PKLOCK_QUEUE_HANDLE Handle)
|
||||
{
|
||||
/* Release the lock */
|
||||
/* Release the lock and restore previous IRQL */
|
||||
KeReleaseInStackQueuedSpinLock(Handle);
|
||||
}
|
||||
|
||||
FORCEINLINE
|
||||
VOID
|
||||
KiReleaseProcessLockFromDpcLevel(IN PKLOCK_QUEUE_HANDLE Handle)
|
||||
KiReleaseProcessLockFromSynchLevel(IN PKLOCK_QUEUE_HANDLE Handle)
|
||||
{
|
||||
/* Release the lock */
|
||||
/* Release the lock without lowering IRQL */
|
||||
KeReleaseInStackQueuedSpinLockFromDpcLevel(Handle);
|
||||
}
|
||||
|
||||
|
@ -916,10 +919,11 @@ KxInsertTimer(IN PKTIMER Timer,
|
|||
IN ULONG Hand)
|
||||
{
|
||||
PKSPIN_LOCK_QUEUE LockQueue;
|
||||
ASSERT(KeGetCurrentIrql() >= SYNCH_LEVEL);
|
||||
|
||||
/* Acquire the lock and release the dispatcher lock */
|
||||
LockQueue = KiAcquireTimerLock(Hand);
|
||||
KiReleaseDispatcherLockFromDpcLevel();
|
||||
KiReleaseDispatcherLockFromSynchLevel();
|
||||
|
||||
/* Try to insert the timer */
|
||||
if (KiInsertTimerTable(Timer, Hand))
|
||||
|
|
|
@ -264,7 +264,7 @@ KiInsertQueueApc(IN PKAPC Apc,
|
|||
}
|
||||
|
||||
/* Release dispatcher lock */
|
||||
KiReleaseDispatcherLockFromDpcLevel();
|
||||
KiReleaseDispatcherLockFromSynchLevel();
|
||||
|
||||
/* Check if an interrupt was requested */
|
||||
KiRequestApcInterrupt(RequestInterrupt, Thread->NextProcessor);
|
||||
|
@ -330,7 +330,7 @@ KiDeliverApc(IN KPROCESSOR_MODE DeliveryMode,
|
|||
while (!IsListEmpty(&Thread->ApcState.ApcListHead[KernelMode]))
|
||||
{
|
||||
/* Lock the APC Queue */
|
||||
KiAcquireApcLockAtApcLevel(Thread, &ApcLock);
|
||||
KiAcquireApcLockRaiseToDpc(Thread, &ApcLock);
|
||||
|
||||
/* Check if the list became empty now */
|
||||
if (IsListEmpty(&Thread->ApcState.ApcListHead[KernelMode]))
|
||||
|
@ -441,7 +441,7 @@ KiDeliverApc(IN KPROCESSOR_MODE DeliveryMode,
|
|||
(Thread->ApcState.UserApcPending))
|
||||
{
|
||||
/* Lock the APC Queue */
|
||||
KiAcquireApcLockAtApcLevel(Thread, &ApcLock);
|
||||
KiAcquireApcLockRaiseToDpc(Thread, &ApcLock);
|
||||
|
||||
/* It's not pending anymore */
|
||||
Thread->ApcState.UserApcPending = FALSE;
|
||||
|
@ -744,7 +744,7 @@ KeInsertQueueApc(IN PKAPC Apc,
|
|||
ASSERT_IRQL_LESS_OR_EQUAL(DISPATCH_LEVEL);
|
||||
|
||||
/* Get the APC lock */
|
||||
KiAcquireApcLock(Thread, &ApcLock);
|
||||
KiAcquireApcLockRaiseToSynch(Thread, &ApcLock);
|
||||
|
||||
/* Make sure we can Queue APCs and that this one isn't already inserted */
|
||||
if (!(Thread->ApcQueueable) || (Apc->Inserted))
|
||||
|
@ -764,7 +764,7 @@ KeInsertQueueApc(IN PKAPC Apc,
|
|||
}
|
||||
|
||||
/* Release the APC lock and return success */
|
||||
KiReleaseApcLockFromDpcLevel(&ApcLock);
|
||||
KiReleaseApcLockFromSynchLevel(&ApcLock);
|
||||
KiExitDispatcher(ApcLock.OldIrql);
|
||||
return State;
|
||||
}
|
||||
|
@ -802,7 +802,7 @@ KeFlushQueueApc(IN PKTHREAD Thread,
|
|||
if (PreviousMode == UserMode)
|
||||
{
|
||||
/* Get the APC lock */
|
||||
KiAcquireApcLock(Thread, &ApcLock);
|
||||
KiAcquireApcLockRaiseToSynch(Thread, &ApcLock);
|
||||
|
||||
/* Select user list and check if it's empty */
|
||||
if (IsListEmpty(&Thread->ApcState.ApcListHead[UserMode]))
|
||||
|
@ -822,7 +822,7 @@ KeFlushQueueApc(IN PKTHREAD Thread,
|
|||
}
|
||||
|
||||
/* Otherwise, acquire the APC lock */
|
||||
KiAcquireApcLock(Thread, &ApcLock);
|
||||
KiAcquireApcLockRaiseToSynch(Thread, &ApcLock);
|
||||
}
|
||||
|
||||
/* Get the first entry and check if the list is empty now */
|
||||
|
@ -892,8 +892,8 @@ KeRemoveQueueApc(IN PKAPC Apc)
|
|||
ASSERT_APC(Apc);
|
||||
ASSERT_IRQL_LESS_OR_EQUAL(DISPATCH_LEVEL);
|
||||
|
||||
/* Get the APC lock */
|
||||
KiAcquireApcLock(Thread, &ApcLock);
|
||||
/* Get the APC lock (this raises IRQL to SYNCH_LEVEL) */
|
||||
KiAcquireApcLockRaiseToSynch(Thread, &ApcLock);
|
||||
|
||||
/* Check if it's inserted */
|
||||
Inserted = Apc->Inserted;
|
||||
|
@ -904,7 +904,7 @@ KeRemoveQueueApc(IN PKAPC Apc)
|
|||
ApcState = Thread->ApcStatePointer[(UCHAR)Apc->ApcStateIndex];
|
||||
|
||||
/* Acquire the dispatcher lock and remove it from the list */
|
||||
KiAcquireDispatcherLockAtDpcLevel();
|
||||
KiAcquireDispatcherLockAtSynchLevel();
|
||||
if (RemoveEntryList(&Apc->ApcListEntry))
|
||||
{
|
||||
/* Set the correct state based on the APC Mode */
|
||||
|
@ -921,7 +921,7 @@ KeRemoveQueueApc(IN PKAPC Apc)
|
|||
}
|
||||
|
||||
/* Release dispatcher lock */
|
||||
KiReleaseDispatcherLockFromDpcLevel();
|
||||
KiReleaseDispatcherLockFromSynchLevel();
|
||||
}
|
||||
|
||||
/* Release the lock and return */
|
||||
|
|
|
@ -44,7 +44,7 @@ KeWaitForGate(IN PKGATE Gate,
|
|||
do
|
||||
{
|
||||
/* Acquire the APC lock */
|
||||
KiAcquireApcLock(Thread, &ApcLock);
|
||||
KiAcquireApcLockRaiseToSynch(Thread, &ApcLock);
|
||||
|
||||
/* Check if a kernel APC is pending and we're below APC_LEVEL */
|
||||
if ((Thread->ApcState.KernelApcPending) &&
|
||||
|
@ -58,7 +58,7 @@ KeWaitForGate(IN PKGATE Gate,
|
|||
{
|
||||
/* Check if we have a queue and lock the dispatcher if so */
|
||||
Queue = Thread->Queue;
|
||||
if (Queue) KiAcquireDispatcherLockAtDpcLevel();
|
||||
if (Queue) KiAcquireDispatcherLockAtSynchLevel();
|
||||
|
||||
/* Lock the thread */
|
||||
KiAcquireThreadLock(Thread);
|
||||
|
@ -77,7 +77,7 @@ KeWaitForGate(IN PKGATE Gate,
|
|||
KiReleaseThreadLock(Thread);
|
||||
|
||||
/* Release the gate lock */
|
||||
if (Queue) KiReleaseDispatcherLockFromDpcLevel();
|
||||
if (Queue) KiReleaseDispatcherLockFromSynchLevel();
|
||||
|
||||
/* Release the APC lock and return */
|
||||
KiReleaseApcLock(&ApcLock);
|
||||
|
@ -116,11 +116,11 @@ KeWaitForGate(IN PKGATE Gate,
|
|||
KiActivateWaiterQueue(Queue);
|
||||
|
||||
/* Release the dispatcher lock */
|
||||
KiReleaseDispatcherLockFromDpcLevel();
|
||||
KiReleaseDispatcherLockFromSynchLevel();
|
||||
}
|
||||
|
||||
/* Release the APC lock but stay at DPC level */
|
||||
KiReleaseApcLockFromDpcLevel(&ApcLock);
|
||||
KiReleaseApcLockFromSynchLevel(&ApcLock);
|
||||
|
||||
/* Find a new thread to run */
|
||||
Status = KiSwapThread(Thread, KeGetCurrentPrcb());
|
||||
|
@ -203,7 +203,7 @@ KeSignalGateBoostPriority(IN PKGATE Gate)
|
|||
if (WaitThread->Queue)
|
||||
{
|
||||
/* Acquire the dispatcher lock */
|
||||
KiAcquireDispatcherLockAtDpcLevel();
|
||||
KiAcquireDispatcherLockAtSynchLevel();
|
||||
|
||||
/* Check if we still have one */
|
||||
if (WaitThread->Queue)
|
||||
|
@ -213,7 +213,7 @@ KeSignalGateBoostPriority(IN PKGATE Gate)
|
|||
}
|
||||
|
||||
/* Release lock */
|
||||
KiReleaseDispatcherLockFromDpcLevel();
|
||||
KiReleaseDispatcherLockFromSynchLevel();
|
||||
}
|
||||
|
||||
/* Make the thread ready */
|
||||
|
|
|
@ -92,10 +92,10 @@ KiAttachProcess(IN PKTHREAD Thread,
|
|||
#endif
|
||||
|
||||
/* Release dispatcher lock */
|
||||
KiReleaseDispatcherLockFromDpcLevel();
|
||||
KiReleaseDispatcherLockFromSynchLevel();
|
||||
|
||||
/* Release lock */
|
||||
KiReleaseApcLockFromDpcLevel(ApcLock);
|
||||
KiReleaseApcLockFromSynchLevel(ApcLock);
|
||||
|
||||
/* Swap Processes */
|
||||
KiSwapProcess(Process, SavedApcState->Process);
|
||||
|
@ -236,7 +236,7 @@ KeSetQuantumProcess(IN PKPROCESS Process,
|
|||
ASSERT_IRQL_LESS_OR_EQUAL(DISPATCH_LEVEL);
|
||||
|
||||
/* Lock the process */
|
||||
KiAcquireProcessLock(Process, &ProcessLock);
|
||||
KiAcquireProcessLockRaiseToSynch(Process, &ProcessLock);
|
||||
|
||||
/* Set new quantum */
|
||||
Process->QuantumReset = Quantum;
|
||||
|
@ -275,10 +275,10 @@ KeSetAffinityProcess(IN PKPROCESS Process,
|
|||
ASSERT((Affinity & KeActiveProcessors) != 0);
|
||||
|
||||
/* Lock the process */
|
||||
KiAcquireProcessLock(Process, &ProcessLock);
|
||||
KiAcquireProcessLockRaiseToSynch(Process, &ProcessLock);
|
||||
|
||||
/* Acquire the dispatcher lock */
|
||||
KiAcquireDispatcherLockAtDpcLevel();
|
||||
KiAcquireDispatcherLockAtSynchLevel();
|
||||
|
||||
/* Capture old affinity and update it */
|
||||
OldAffinity = Process->Affinity;
|
||||
|
@ -298,10 +298,10 @@ KeSetAffinityProcess(IN PKPROCESS Process,
|
|||
}
|
||||
|
||||
/* Release Dispatcher Database */
|
||||
KiReleaseDispatcherLockFromDpcLevel();
|
||||
KiReleaseDispatcherLockFromSynchLevel();
|
||||
|
||||
/* Release the process lock */
|
||||
KiReleaseProcessLockFromDpcLevel(&ProcessLock);
|
||||
KiReleaseProcessLockFromSynchLevel(&ProcessLock);
|
||||
KiExitDispatcher(ProcessLock.OldIrql);
|
||||
|
||||
/* Return previous affinity */
|
||||
|
@ -365,7 +365,7 @@ KeSetPriorityAndQuantumProcess(IN PKPROCESS Process,
|
|||
if (!Priority) Priority = LOW_PRIORITY + 1;
|
||||
|
||||
/* Lock the process */
|
||||
KiAcquireProcessLock(Process, &ProcessLock);
|
||||
KiAcquireProcessLockRaiseToSynch(Process, &ProcessLock);
|
||||
|
||||
/* Check if we are modifying the quantum too */
|
||||
if (Quantum) Process->QuantumReset = Quantum;
|
||||
|
@ -507,10 +507,10 @@ KeSetPriorityAndQuantumProcess(IN PKPROCESS Process,
|
|||
}
|
||||
|
||||
/* Release Dispatcher Database */
|
||||
KiReleaseDispatcherLockFromDpcLevel();
|
||||
KiReleaseDispatcherLockFromSynchLevel();
|
||||
|
||||
/* Release the process lock */
|
||||
KiReleaseProcessLockFromDpcLevel(&ProcessLock);
|
||||
KiReleaseProcessLockFromSynchLevel(&ProcessLock);
|
||||
KiExitDispatcher(ProcessLock.OldIrql);
|
||||
|
||||
/* Return previous priority */
|
||||
|
@ -531,7 +531,7 @@ KeQueryValuesProcess(IN PKPROCESS Process,
|
|||
ASSERT(KeGetCurrentIrql() <= DISPATCH_LEVEL);
|
||||
|
||||
/* Lock the process */
|
||||
KiAcquireProcessLock(Process, &ProcessLock);
|
||||
KiAcquireProcessLockRaiseToSynch(Process, &ProcessLock);
|
||||
|
||||
/* Initialize user and kernel times */
|
||||
TotalKernel = Process->KernelTime;
|
||||
|
@ -600,10 +600,10 @@ KeAttachProcess(IN PKPROCESS Process)
|
|||
else
|
||||
{
|
||||
/* Acquire APC Lock */
|
||||
KiAcquireApcLock(Thread, &ApcLock);
|
||||
KiAcquireApcLockRaiseToSynch(Thread, &ApcLock);
|
||||
|
||||
/* Acquire the dispatcher lock */
|
||||
KiAcquireDispatcherLockAtDpcLevel();
|
||||
KiAcquireDispatcherLockAtSynchLevel();
|
||||
|
||||
/* Legit attach attempt: do it! */
|
||||
KiAttachProcess(Thread, Process, &ApcLock, &Thread->SavedApcState);
|
||||
|
@ -626,7 +626,7 @@ KeDetachProcess(VOID)
|
|||
if (Thread->ApcStateIndex == OriginalApcEnvironment) return;
|
||||
|
||||
/* Acquire APC Lock */
|
||||
KiAcquireApcLock(Thread, &ApcLock);
|
||||
KiAcquireApcLockRaiseToSynch(Thread, &ApcLock);
|
||||
|
||||
/* Check for invalid attach attempts */
|
||||
if ((Thread->ApcState.KernelApcInProgress) ||
|
||||
|
@ -641,7 +641,7 @@ KeDetachProcess(VOID)
|
|||
Process = Thread->ApcState.Process;
|
||||
|
||||
/* Acquire dispatcher lock */
|
||||
KiAcquireDispatcherLockAtDpcLevel();
|
||||
KiAcquireDispatcherLockAtSynchLevel();
|
||||
|
||||
/* Decrease the stack count */
|
||||
ASSERT(Process->StackCount != 0);
|
||||
|
@ -655,7 +655,7 @@ KeDetachProcess(VOID)
|
|||
}
|
||||
|
||||
/* Release dispatcher lock */
|
||||
KiReleaseDispatcherLockFromDpcLevel();
|
||||
KiReleaseDispatcherLockFromSynchLevel();
|
||||
|
||||
/* Restore the APC State */
|
||||
KiMoveApcState(&Thread->SavedApcState, &Thread->ApcState);
|
||||
|
@ -665,7 +665,7 @@ KeDetachProcess(VOID)
|
|||
Thread->ApcStateIndex = OriginalApcEnvironment;
|
||||
|
||||
/* Release lock */
|
||||
KiReleaseApcLockFromDpcLevel(&ApcLock);
|
||||
KiReleaseApcLockFromSynchLevel(&ApcLock);
|
||||
|
||||
/* Swap Processes */
|
||||
KiSwapProcess(Thread->ApcState.Process, Process);
|
||||
|
@ -726,10 +726,10 @@ KeStackAttachProcess(IN PKPROCESS Process,
|
|||
}
|
||||
|
||||
/* Acquire APC Lock */
|
||||
KiAcquireApcLock(Thread, &ApcLock);
|
||||
KiAcquireApcLockRaiseToSynch(Thread, &ApcLock);
|
||||
|
||||
/* Acquire dispatcher lock */
|
||||
KiAcquireDispatcherLockAtDpcLevel();
|
||||
KiAcquireDispatcherLockAtSynchLevel();
|
||||
|
||||
/* Check if the Current Thread is already attached */
|
||||
if (Thread->ApcStateIndex != OriginalApcEnvironment)
|
||||
|
@ -764,7 +764,7 @@ KeUnstackDetachProcess(IN PRKAPC_STATE ApcState)
|
|||
for (;;)
|
||||
{
|
||||
/* Acquire APC Lock */
|
||||
KiAcquireApcLock(Thread, &ApcLock);
|
||||
KiAcquireApcLockRaiseToSynch(Thread, &ApcLock);
|
||||
|
||||
/* Check if a kernel APC is pending */
|
||||
if (Thread->ApcState.KernelApcPending)
|
||||
|
@ -799,7 +799,7 @@ KeUnstackDetachProcess(IN PRKAPC_STATE ApcState)
|
|||
Process = Thread->ApcState.Process;
|
||||
|
||||
/* Acquire dispatcher lock */
|
||||
KiAcquireDispatcherLockAtDpcLevel();
|
||||
KiAcquireDispatcherLockAtSynchLevel();
|
||||
|
||||
/* Decrease the stack count */
|
||||
ASSERT(Process->StackCount != 0);
|
||||
|
@ -813,7 +813,7 @@ KeUnstackDetachProcess(IN PRKAPC_STATE ApcState)
|
|||
}
|
||||
|
||||
/* Release dispatcher lock */
|
||||
KiReleaseDispatcherLockFromDpcLevel();
|
||||
KiReleaseDispatcherLockFromSynchLevel();
|
||||
|
||||
/* Check if there's an APC state to restore */
|
||||
if (ApcState->Process)
|
||||
|
@ -832,7 +832,7 @@ KeUnstackDetachProcess(IN PRKAPC_STATE ApcState)
|
|||
}
|
||||
|
||||
/* Release lock */
|
||||
KiReleaseApcLockFromDpcLevel(&ApcLock);
|
||||
KiReleaseApcLockFromSynchLevel(&ApcLock);
|
||||
|
||||
/* Swap Processes */
|
||||
KiSwapProcess(Thread->ApcState.Process, Process);
|
||||
|
@ -869,7 +869,7 @@ KeQueryRuntimeProcess(IN PKPROCESS Process,
|
|||
TotalKernel = Process->KernelTime;
|
||||
|
||||
/* Lock the process */
|
||||
KiAcquireProcessLock(Process, &ProcessLock);
|
||||
KiAcquireProcessLockRaiseToSynch(Process, &ProcessLock);
|
||||
|
||||
/* Loop all child threads and sum up their times */
|
||||
ListHead = &Process->ThreadListHead;
|
||||
|
|
|
@ -265,7 +265,7 @@ KeRemoveQueue(IN PKQUEUE Queue,
|
|||
/* Raise IRQL to synch, prepare the wait, then lock the database */
|
||||
Thread->WaitIrql = KeRaiseIrqlToSynchLevel();
|
||||
KxQueueThreadWait();
|
||||
KiAcquireDispatcherLockAtDpcLevel();
|
||||
KiAcquireDispatcherLockAtSynchLevel();
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -339,7 +339,7 @@ KeRemoveQueue(IN PKQUEUE Queue,
|
|||
{
|
||||
/* Increment the count and unlock the dispatcher */
|
||||
Queue->CurrentCount++;
|
||||
KiReleaseDispatcherLockFromDpcLevel();
|
||||
KiReleaseDispatcherLockFromSynchLevel();
|
||||
KiExitDispatcher(Thread->WaitIrql);
|
||||
}
|
||||
else
|
||||
|
@ -394,7 +394,7 @@ KeRemoveQueue(IN PKQUEUE Queue,
|
|||
else
|
||||
{
|
||||
/* Otherwise, unlock the dispatcher */
|
||||
KiReleaseDispatcherLockFromDpcLevel();
|
||||
KiReleaseDispatcherLockFromSynchLevel();
|
||||
}
|
||||
|
||||
/* Do the actual swap */
|
||||
|
@ -419,13 +419,13 @@ KeRemoveQueue(IN PKQUEUE Queue,
|
|||
/* Start another wait */
|
||||
Thread->WaitIrql = KeRaiseIrqlToSynchLevel();
|
||||
KxQueueThreadWait();
|
||||
KiAcquireDispatcherLockAtDpcLevel();
|
||||
KiAcquireDispatcherLockAtSynchLevel();
|
||||
Queue->CurrentCount--;
|
||||
}
|
||||
}
|
||||
|
||||
/* Unlock Database and return */
|
||||
KiReleaseDispatcherLockFromDpcLevel();
|
||||
KiReleaseDispatcherLockFromSynchLevel();
|
||||
KiExitDispatcher(Thread->WaitIrql);
|
||||
return QueueEntry;
|
||||
}
|
||||
|
@ -477,7 +477,7 @@ KeRundownQueue(IN PKQUEUE Queue)
|
|||
}
|
||||
|
||||
/* Release the dispatcher lock */
|
||||
KiReleaseDispatcherLockFromDpcLevel();
|
||||
KiReleaseDispatcherLockFromSynchLevel();
|
||||
|
||||
/* Exit the dispatcher and return the first entry (if any) */
|
||||
KiExitDispatcher(OldIrql);
|
||||
|
|
|
@ -138,8 +138,8 @@ KeAlertResumeThread(IN PKTHREAD Thread)
|
|||
ASSERT_IRQL_LESS_OR_EQUAL(DISPATCH_LEVEL);
|
||||
|
||||
/* Lock the Dispatcher Database and the APC Queue */
|
||||
KiAcquireApcLock(Thread, &ApcLock);
|
||||
KiAcquireDispatcherLockAtDpcLevel();
|
||||
KiAcquireApcLockRaiseToSynch(Thread, &ApcLock);
|
||||
KiAcquireDispatcherLockAtSynchLevel();
|
||||
|
||||
/* Return if Thread is already alerted. */
|
||||
if (!Thread->Alerted[KernelMode])
|
||||
|
@ -174,8 +174,8 @@ KeAlertResumeThread(IN PKTHREAD Thread)
|
|||
}
|
||||
|
||||
/* Release Locks and return the Old State */
|
||||
KiReleaseDispatcherLockFromDpcLevel();
|
||||
KiReleaseApcLockFromDpcLevel(&ApcLock);
|
||||
KiReleaseDispatcherLockFromSynchLevel();
|
||||
KiReleaseApcLockFromSynchLevel(&ApcLock);
|
||||
KiExitDispatcher(ApcLock.OldIrql);
|
||||
return PreviousCount;
|
||||
}
|
||||
|
@ -191,8 +191,8 @@ KeAlertThread(IN PKTHREAD Thread,
|
|||
ASSERT_IRQL_LESS_OR_EQUAL(DISPATCH_LEVEL);
|
||||
|
||||
/* Lock the Dispatcher Database and the APC Queue */
|
||||
KiAcquireApcLock(Thread, &ApcLock);
|
||||
KiAcquireDispatcherLockAtDpcLevel();
|
||||
KiAcquireApcLockRaiseToSynch(Thread, &ApcLock);
|
||||
KiAcquireDispatcherLockAtSynchLevel();
|
||||
|
||||
/* Save the Previous State */
|
||||
PreviousState = Thread->Alerted[AlertMode];
|
||||
|
@ -216,8 +216,8 @@ KeAlertThread(IN PKTHREAD Thread,
|
|||
}
|
||||
|
||||
/* Release the Dispatcher Lock */
|
||||
KiReleaseDispatcherLockFromDpcLevel();
|
||||
KiReleaseApcLockFromDpcLevel(&ApcLock);
|
||||
KiReleaseDispatcherLockFromSynchLevel();
|
||||
KiReleaseApcLockFromSynchLevel(&ApcLock);
|
||||
KiExitDispatcher(ApcLock.OldIrql);
|
||||
|
||||
/* Return the old state */
|
||||
|
@ -281,7 +281,7 @@ KeForceResumeThread(IN PKTHREAD Thread)
|
|||
ASSERT_IRQL_LESS_OR_EQUAL(DISPATCH_LEVEL);
|
||||
|
||||
/* Lock the APC Queue */
|
||||
KiAcquireApcLock(Thread, &ApcLock);
|
||||
KiAcquireApcLockRaiseToSynch(Thread, &ApcLock);
|
||||
|
||||
/* Save the old Suspend Count */
|
||||
PreviousCount = Thread->SuspendCount + Thread->FreezeCount;
|
||||
|
@ -294,18 +294,18 @@ KeForceResumeThread(IN PKTHREAD Thread)
|
|||
Thread->FreezeCount = 0;
|
||||
|
||||
/* Lock the dispatcher */
|
||||
KiAcquireDispatcherLockAtDpcLevel();
|
||||
KiAcquireDispatcherLockAtSynchLevel();
|
||||
|
||||
/* Signal and satisfy */
|
||||
Thread->SuspendSemaphore.Header.SignalState++;
|
||||
KiWaitTest(&Thread->SuspendSemaphore.Header, IO_NO_INCREMENT);
|
||||
|
||||
/* Release the dispatcher */
|
||||
KiReleaseDispatcherLockFromDpcLevel();
|
||||
KiReleaseDispatcherLockFromSynchLevel();
|
||||
}
|
||||
|
||||
/* Release Lock and return the Old State */
|
||||
KiReleaseApcLockFromDpcLevel(&ApcLock);
|
||||
KiReleaseApcLockFromSynchLevel(&ApcLock);
|
||||
KiExitDispatcher(ApcLock.OldIrql);
|
||||
return PreviousCount;
|
||||
}
|
||||
|
@ -322,14 +322,14 @@ KeFreezeAllThreads(VOID)
|
|||
ASSERT_IRQL_LESS_OR_EQUAL(DISPATCH_LEVEL);
|
||||
|
||||
/* Lock the process */
|
||||
KiAcquireProcessLock(Process, &LockHandle);
|
||||
KiAcquireProcessLockRaiseToSynch(Process, &LockHandle);
|
||||
|
||||
/* If someone is already trying to free us, try again */
|
||||
while (CurrentThread->FreezeCount)
|
||||
{
|
||||
/* Release and re-acquire the process lock so the APC will go through */
|
||||
KiReleaseProcessLock(&LockHandle);
|
||||
KiAcquireProcessLock(Process, &LockHandle);
|
||||
KiAcquireProcessLockRaiseToSynch(Process, &LockHandle);
|
||||
}
|
||||
|
||||
/* Enter a critical region */
|
||||
|
@ -344,7 +344,7 @@ KeFreezeAllThreads(VOID)
|
|||
Current = CONTAINING_RECORD(NextEntry, KTHREAD, ThreadListEntry);
|
||||
|
||||
/* Lock it */
|
||||
KiAcquireApcLockAtDpcLevel(Current, &ApcLock);
|
||||
KiAcquireApcLockAtSynchLevel(Current, &ApcLock);
|
||||
|
||||
/* Make sure it's not ours, and check if APCs are enabled */
|
||||
if ((Current != CurrentThread) && (Current->ApcQueueable))
|
||||
|
@ -369,26 +369,26 @@ KeFreezeAllThreads(VOID)
|
|||
else
|
||||
{
|
||||
/* Lock the dispatcher */
|
||||
KiAcquireDispatcherLockAtDpcLevel();
|
||||
KiAcquireDispatcherLockAtSynchLevel();
|
||||
|
||||
/* Unsignal the semaphore, the APC was already inserted */
|
||||
Current->SuspendSemaphore.Header.SignalState--;
|
||||
|
||||
/* Release the dispatcher */
|
||||
KiReleaseDispatcherLockFromDpcLevel();
|
||||
KiReleaseDispatcherLockFromSynchLevel();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Release the APC lock */
|
||||
KiReleaseApcLockFromDpcLevel(&ApcLock);
|
||||
KiReleaseApcLockFromSynchLevel(&ApcLock);
|
||||
|
||||
/* Move to the next thread */
|
||||
NextEntry = NextEntry->Flink;
|
||||
} while (NextEntry != ListHead);
|
||||
|
||||
/* Release the process lock and exit the dispatcher */
|
||||
KiReleaseProcessLockFromDpcLevel(&LockHandle);
|
||||
KiReleaseProcessLockFromSynchLevel(&LockHandle);
|
||||
KiExitDispatcher(LockHandle.OldIrql);
|
||||
}
|
||||
|
||||
|
@ -402,7 +402,7 @@ KeResumeThread(IN PKTHREAD Thread)
|
|||
ASSERT_IRQL_LESS_OR_EQUAL(DISPATCH_LEVEL);
|
||||
|
||||
/* Lock the APC Queue */
|
||||
KiAcquireApcLock(Thread, &ApcLock);
|
||||
KiAcquireApcLockRaiseToSynch(Thread, &ApcLock);
|
||||
|
||||
/* Save the Old Count */
|
||||
PreviousCount = Thread->SuspendCount;
|
||||
|
@ -417,19 +417,19 @@ KeResumeThread(IN PKTHREAD Thread)
|
|||
if ((!Thread->SuspendCount) && (!Thread->FreezeCount))
|
||||
{
|
||||
/* Acquire the dispatcher lock */
|
||||
KiAcquireDispatcherLockAtDpcLevel();
|
||||
KiAcquireDispatcherLockAtSynchLevel();
|
||||
|
||||
/* Signal the Suspend Semaphore */
|
||||
Thread->SuspendSemaphore.Header.SignalState++;
|
||||
KiWaitTest(&Thread->SuspendSemaphore.Header, IO_NO_INCREMENT);
|
||||
|
||||
/* Release the dispatcher lock */
|
||||
KiReleaseDispatcherLockFromDpcLevel();
|
||||
KiReleaseDispatcherLockFromSynchLevel();
|
||||
}
|
||||
}
|
||||
|
||||
/* Release APC Queue lock and return the Old State */
|
||||
KiReleaseApcLockFromDpcLevel(&ApcLock);
|
||||
KiReleaseApcLockFromSynchLevel(&ApcLock);
|
||||
KiExitDispatcher(ApcLock.OldIrql);
|
||||
return PreviousCount;
|
||||
}
|
||||
|
@ -516,7 +516,7 @@ KeStartThread(IN OUT PKTHREAD Thread)
|
|||
Thread->SystemAffinityActive = FALSE;
|
||||
|
||||
/* Lock the process */
|
||||
KiAcquireProcessLock(Process, &LockHandle);
|
||||
KiAcquireProcessLockRaiseToSynch(Process, &LockHandle);
|
||||
|
||||
/* Setup volatile data */
|
||||
Thread->Priority = Process->BasePriority;
|
||||
|
@ -553,7 +553,7 @@ KeStartThread(IN OUT PKTHREAD Thread)
|
|||
Thread->UserIdealProcessor = IdealProcessor;
|
||||
|
||||
/* Lock the Dispatcher Database */
|
||||
KiAcquireDispatcherLockAtDpcLevel();
|
||||
KiAcquireDispatcherLockAtSynchLevel();
|
||||
|
||||
/* Insert the thread into the process list */
|
||||
InsertTailList(&Process->ThreadListHead, &Thread->ThreadListEntry);
|
||||
|
@ -563,7 +563,7 @@ KeStartThread(IN OUT PKTHREAD Thread)
|
|||
Process->StackCount++;
|
||||
|
||||
/* Release locks and return */
|
||||
KiReleaseDispatcherLockFromDpcLevel();
|
||||
KiReleaseDispatcherLockFromSynchLevel();
|
||||
KiReleaseProcessLock(&LockHandle);
|
||||
}
|
||||
|
||||
|
@ -615,7 +615,7 @@ KeSuspendThread(PKTHREAD Thread)
|
|||
ASSERT_IRQL_LESS_OR_EQUAL(DISPATCH_LEVEL);
|
||||
|
||||
/* Lock the APC Queue */
|
||||
KiAcquireApcLock(Thread, &ApcLock);
|
||||
KiAcquireApcLockRaiseToSynch(Thread, &ApcLock);
|
||||
|
||||
/* Save the Old Count */
|
||||
PreviousCount = Thread->SuspendCount;
|
||||
|
@ -647,19 +647,19 @@ KeSuspendThread(PKTHREAD Thread)
|
|||
else
|
||||
{
|
||||
/* Lock the dispatcher */
|
||||
KiAcquireDispatcherLockAtDpcLevel();
|
||||
KiAcquireDispatcherLockAtSynchLevel();
|
||||
|
||||
/* Unsignal the semaphore, the APC was already inserted */
|
||||
Thread->SuspendSemaphore.Header.SignalState--;
|
||||
|
||||
/* Release the dispatcher */
|
||||
KiReleaseDispatcherLockFromDpcLevel();
|
||||
KiReleaseDispatcherLockFromSynchLevel();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Release Lock and return the Old State */
|
||||
KiReleaseApcLockFromDpcLevel(&ApcLock);
|
||||
KiReleaseApcLockFromSynchLevel(&ApcLock);
|
||||
KiExitDispatcher(ApcLock.OldIrql);
|
||||
return PreviousCount;
|
||||
}
|
||||
|
@ -676,7 +676,7 @@ KeThawAllThreads(VOID)
|
|||
ASSERT_IRQL_LESS_OR_EQUAL(DISPATCH_LEVEL);
|
||||
|
||||
/* Lock the process */
|
||||
KiAcquireProcessLock(Process, &LockHandle);
|
||||
KiAcquireProcessLockRaiseToSynch(Process, &LockHandle);
|
||||
|
||||
/* Loop the Process's Threads */
|
||||
ListHead = &Process->ThreadListHead;
|
||||
|
@ -687,7 +687,7 @@ KeThawAllThreads(VOID)
|
|||
Current = CONTAINING_RECORD(NextEntry, KTHREAD, ThreadListEntry);
|
||||
|
||||
/* Lock it */
|
||||
KiAcquireApcLockAtDpcLevel(Current, &ApcLock);
|
||||
KiAcquireApcLockAtSynchLevel(Current, &ApcLock);
|
||||
|
||||
/* Make sure we are frozen */
|
||||
OldCount = Current->FreezeCount;
|
||||
|
@ -700,26 +700,26 @@ KeThawAllThreads(VOID)
|
|||
if (!(Current->SuspendCount) && (!Current->FreezeCount))
|
||||
{
|
||||
/* Lock the dispatcher */
|
||||
KiAcquireDispatcherLockAtDpcLevel();
|
||||
KiAcquireDispatcherLockAtSynchLevel();
|
||||
|
||||
/* Signal the suspend semaphore and wake it */
|
||||
Current->SuspendSemaphore.Header.SignalState++;
|
||||
KiWaitTest(&Current->SuspendSemaphore, 0);
|
||||
|
||||
/* Unlock the dispatcher */
|
||||
KiReleaseDispatcherLockFromDpcLevel();
|
||||
KiReleaseDispatcherLockFromSynchLevel();
|
||||
}
|
||||
}
|
||||
|
||||
/* Release the APC lock */
|
||||
KiReleaseApcLockFromDpcLevel(&ApcLock);
|
||||
KiReleaseApcLockFromSynchLevel(&ApcLock);
|
||||
|
||||
/* Go to the next one */
|
||||
NextEntry = NextEntry->Flink;
|
||||
} while (NextEntry != ListHead);
|
||||
|
||||
/* Release the process lock and exit the dispatcher */
|
||||
KiReleaseProcessLockFromDpcLevel(&LockHandle);
|
||||
KiReleaseProcessLockFromSynchLevel(&LockHandle);
|
||||
KiExitDispatcher(LockHandle.OldIrql);
|
||||
|
||||
/* Leave the critical region */
|
||||
|
@ -737,7 +737,7 @@ KeTestAlertThread(IN KPROCESSOR_MODE AlertMode)
|
|||
ASSERT_IRQL_LESS_OR_EQUAL(DISPATCH_LEVEL);
|
||||
|
||||
/* Lock the Dispatcher Database and the APC Queue */
|
||||
KiAcquireApcLock(Thread, &ApcLock);
|
||||
KiAcquireApcLockRaiseToSynch(Thread, &ApcLock);
|
||||
|
||||
/* Save the old State */
|
||||
OldState = Thread->Alerted[AlertMode];
|
||||
|
@ -1383,7 +1383,7 @@ KeTerminateThread(IN KPRIORITY Increment)
|
|||
ASSERT_IRQL_LESS_OR_EQUAL(DISPATCH_LEVEL);
|
||||
|
||||
/* Lock the process */
|
||||
KiAcquireProcessLock(Process, &LockHandle);
|
||||
KiAcquireProcessLockRaiseToSynch(Process, &LockHandle);
|
||||
|
||||
/* Make sure we won't get Swapped */
|
||||
KiSetThreadSwapBusy(Thread);
|
||||
|
@ -1415,7 +1415,7 @@ KeTerminateThread(IN KPRIORITY Increment)
|
|||
} while (Entry != SavedEntry);
|
||||
|
||||
/* Acquire the dispatcher lock */
|
||||
KiAcquireDispatcherLockAtDpcLevel();
|
||||
KiAcquireDispatcherLockAtSynchLevel();
|
||||
|
||||
/* Check if the reaper wasn't active */
|
||||
if (!Entry)
|
||||
|
@ -1446,7 +1446,7 @@ KeTerminateThread(IN KPRIORITY Increment)
|
|||
RemoveEntryList(&Thread->ThreadListEntry);
|
||||
|
||||
/* Release the process lock */
|
||||
KiReleaseProcessLockFromDpcLevel(&LockHandle);
|
||||
KiReleaseProcessLockFromSynchLevel(&LockHandle);
|
||||
|
||||
/* Set us as terminated, decrease the Process's stack count */
|
||||
Thread->State = Terminated;
|
||||
|
@ -1464,6 +1464,6 @@ KeTerminateThread(IN KPRIORITY Increment)
|
|||
KiRundownThread(Thread);
|
||||
|
||||
/* Swap to a new thread */
|
||||
KiReleaseDispatcherLockFromDpcLevel();
|
||||
KiReleaseDispatcherLockFromSynchLevel();
|
||||
KiSwapThread(Thread, KeGetCurrentPrcb());
|
||||
}
|
||||
|
|
|
@ -184,13 +184,13 @@ KiCompleteTimer(IN PKTIMER Timer,
|
|||
KiReleaseTimerLock(LockQueue);
|
||||
|
||||
/* Acquire dispatcher lock */
|
||||
KiAcquireDispatcherLockAtDpcLevel();
|
||||
KiAcquireDispatcherLockAtSynchLevel();
|
||||
|
||||
/* Signal the timer if it's still on our list */
|
||||
if (!IsListEmpty(&ListHead)) RequestInterrupt = KiSignalTimer(Timer);
|
||||
|
||||
/* Release the dispatcher lock */
|
||||
KiReleaseDispatcherLockFromDpcLevel();
|
||||
KiReleaseDispatcherLockFromSynchLevel();
|
||||
|
||||
/* Request a DPC if needed */
|
||||
if (RequestInterrupt) HalRequestSoftwareInterrupt(DISPATCH_LEVEL);
|
||||
|
@ -321,7 +321,7 @@ KeSetTimerEx(IN OUT PKTIMER Timer,
|
|||
RequestInterrupt = KiSignalTimer(Timer);
|
||||
|
||||
/* Release the dispatcher lock */
|
||||
KiReleaseDispatcherLockFromDpcLevel();
|
||||
KiReleaseDispatcherLockFromSynchLevel();
|
||||
|
||||
/* Check if we need to do an interrupt */
|
||||
if (RequestInterrupt) HalRequestSoftwareInterrupt(DISPATCH_LEVEL);
|
||||
|
|
|
@ -386,7 +386,7 @@ WaitStart:
|
|||
/* Setup a new wait */
|
||||
Thread->WaitIrql = KeRaiseIrqlToSynchLevel();
|
||||
KxDelayThreadWait();
|
||||
KiAcquireDispatcherLockAtDpcLevel();
|
||||
KiAcquireDispatcherLockAtSynchLevel();
|
||||
}
|
||||
|
||||
/* We're done! */
|
||||
|
@ -403,7 +403,7 @@ NoWait:
|
|||
}
|
||||
|
||||
/* Unlock the dispatcher and adjust the quantum for a no-wait */
|
||||
KiReleaseDispatcherLockFromDpcLevel();
|
||||
KiReleaseDispatcherLockFromSynchLevel();
|
||||
KiAdjustQuantumThread(Thread);
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
@ -540,7 +540,7 @@ KeWaitForSingleObject(IN PVOID Object,
|
|||
else
|
||||
{
|
||||
/* Otherwise, unlock the dispatcher */
|
||||
KiReleaseDispatcherLockFromDpcLevel();
|
||||
KiReleaseDispatcherLockFromSynchLevel();
|
||||
}
|
||||
|
||||
/* Do the actual swap */
|
||||
|
@ -562,7 +562,7 @@ WaitStart:
|
|||
/* Setup a new wait */
|
||||
Thread->WaitIrql = KeRaiseIrqlToSynchLevel();
|
||||
KxSingleThreadWait();
|
||||
KiAcquireDispatcherLockAtDpcLevel();
|
||||
KiAcquireDispatcherLockAtSynchLevel();
|
||||
}
|
||||
|
||||
/* Wait complete */
|
||||
|
@ -571,7 +571,7 @@ WaitStart:
|
|||
|
||||
DontWait:
|
||||
/* Release dispatcher lock but maintain high IRQL */
|
||||
KiReleaseDispatcherLockFromDpcLevel();
|
||||
KiReleaseDispatcherLockFromSynchLevel();
|
||||
|
||||
/* Adjust the Quantum and return the wait status */
|
||||
KiAdjustQuantumThread(Thread);
|
||||
|
@ -835,7 +835,7 @@ KeWaitForMultipleObjects(IN ULONG Count,
|
|||
else
|
||||
{
|
||||
/* Otherwise, unlock the dispatcher */
|
||||
KiReleaseDispatcherLockFromDpcLevel();
|
||||
KiReleaseDispatcherLockFromSynchLevel();
|
||||
}
|
||||
|
||||
/* Swap the thread */
|
||||
|
@ -858,7 +858,7 @@ WaitStart:
|
|||
/* Setup a new wait */
|
||||
Thread->WaitIrql = KeRaiseIrqlToSynchLevel();
|
||||
KxMultiThreadWait();
|
||||
KiAcquireDispatcherLockAtDpcLevel();
|
||||
KiAcquireDispatcherLockAtSynchLevel();
|
||||
}
|
||||
|
||||
/* We are done */
|
||||
|
@ -867,7 +867,7 @@ WaitStart:
|
|||
|
||||
DontWait:
|
||||
/* Release dispatcher lock but maintain high IRQL */
|
||||
KiReleaseDispatcherLockFromDpcLevel();
|
||||
KiReleaseDispatcherLockFromSynchLevel();
|
||||
|
||||
/* Adjust the Quantum and return the wait status */
|
||||
KiAdjustQuantumThread(Thread);
|
||||
|
|
|
@ -2576,7 +2576,7 @@ MmSetExecuteOptions(IN ULONG ExecuteOptions)
|
|||
}
|
||||
|
||||
/* Change the NX state in the process lock */
|
||||
KiAcquireProcessLock(CurrentProcess, &ProcessLock);
|
||||
KiAcquireProcessLockRaiseToSynch(CurrentProcess, &ProcessLock);
|
||||
|
||||
/* Don't change anything if the permanent flag was set */
|
||||
if (!CurrentProcess->Flags.Permanent)
|
||||
|
|
Loading…
Reference in a new issue