From e312a40ae29a3aa9ba86a3e1122348ff112c1499 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Gardou?= Date: Wed, 26 May 2021 17:05:15 +0200 Subject: [PATCH] [NTOS:KE] Implement KeAcquireInStackQueuedSpinLockForDpc & KeReleaseInStackQueuedSpinLockForDpc --- ntoskrnl/ke/spinlock.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/ntoskrnl/ke/spinlock.c b/ntoskrnl/ke/spinlock.c index c6e44a21c0c..6648f75e5a9 100644 --- a/ntoskrnl/ke/spinlock.c +++ b/ntoskrnl/ke/spinlock.c @@ -413,25 +413,32 @@ KeReleaseSpinLockForDpc(IN PKSPIN_LOCK SpinLock, } /* - * @unimplemented + * @implemented */ VOID FASTCALL KeAcquireInStackQueuedSpinLockForDpc(IN PKSPIN_LOCK SpinLock, IN PKLOCK_QUEUE_HANDLE LockHandle) { - UNIMPLEMENTED; - return; + LockHandle->OldIrql = KeGetCurrentIrql(); + if (LockHandle->OldIrql >= DISPATCH_LEVEL) + KeAcquireInStackQueuedSpinLockAtDpcLevel(SpinLock, LockHandle); + else + KeAcquireInStackQueuedSpinLock(SpinLock, LockHandle); } /* - * @unimplemented + * @implemented */ VOID FASTCALL KeReleaseInStackQueuedSpinLockForDpc(IN PKLOCK_QUEUE_HANDLE LockHandle) { - UNIMPLEMENTED; + if (LockHandle->OldIrql >= DISPATCH_LEVEL) + KeReleaseInStackQueuedSpinLockFromDpcLevel(LockHandle); + else + KeReleaseInStackQueuedSpinLock(LockHandle); + } /*