diff --git a/src/sys/driver.h b/src/sys/driver.h index 69f0eee8..0a4b472d 100644 --- a/src/sys/driver.h +++ b/src/sys/driver.h @@ -686,28 +686,6 @@ VOID FspIrpHookReset(PIRP Irp); PVOID FspIrpHookContext(PVOID Context); NTSTATUS FspIrpHookNext(PDEVICE_OBJECT DeviceObject, PIRP Irp, PVOID Context); -/* utility: wait groups - * - * A Wait Group is a synchronization primitive that encapsulates a counter. - * A Wait Group is considered signaled when the counter is 0 and non-signaled - * when the counter is non-0. (Wait Group functionality is similar to Golang's - * sync.WaitGroup.) - * - * Wait Groups must always be allocated in non-paged storage. - */ -typedef struct -{ - KEVENT Event; - LONG Count; - KSPIN_LOCK SpinLock; -} FSP_WGROUP; -VOID FspWgroupInitialize(FSP_WGROUP *Wgroup); -VOID FspWgroupIncrement(FSP_WGROUP *Wgroup); -VOID FspWgroupDecrement(FSP_WGROUP *Wgroup); -VOID FspWgroupSignalPermanently(FSP_WGROUP *Wgroup); -NTSTATUS FspWgroupWait(FSP_WGROUP *Wgroup, - KPROCESSOR_MODE WaitMode, BOOLEAN Alertable, PLARGE_INTEGER PTimeout); - /* silos */ typedef struct { diff --git a/src/sys/util.c b/src/sys/util.c index 20e7edb6..96f63363 100644 --- a/src/sys/util.c +++ b/src/sys/util.c @@ -131,12 +131,6 @@ NTSTATUS FspIrpHook(PIRP Irp, PIO_COMPLETION_ROUTINE CompletionRoutine, PVOID Ow VOID FspIrpHookReset(PIRP Irp); PVOID FspIrpHookContext(PVOID Context); NTSTATUS FspIrpHookNext(PDEVICE_OBJECT DeviceObject, PIRP Irp, PVOID Context); -VOID FspWgroupInitialize(FSP_WGROUP *Wgroup); -VOID FspWgroupIncrement(FSP_WGROUP *Wgroup); -VOID FspWgroupDecrement(FSP_WGROUP *Wgroup); -VOID FspWgroupSignalPermanently(FSP_WGROUP *Wgroup); -NTSTATUS FspWgroupWait(FSP_WGROUP *Wgroup, - KPROCESSOR_MODE WaitMode, BOOLEAN Alertable, PLARGE_INTEGER PTimeout); #ifdef ALLOC_PRAGMA #pragma alloc_text(PAGE, FspIsNtDdiVersionAvailable) @@ -180,13 +174,6 @@ NTSTATUS FspWgroupWait(FSP_WGROUP *Wgroup, #pragma alloc_text(PAGE, FspSafeMdlDelete) #pragma alloc_text(PAGE, FspIrpHook) #pragma alloc_text(PAGE, FspIrpHookReset) -// !#pragma alloc_text(PAGE, FspIrpHookContext) -// !#pragma alloc_text(PAGE, FspIrpHookNext) -// !#pragma alloc_text(PAGE, FspWgroupInitialize) -// !#pragma alloc_text(PAGE, FspWgroupIncrement) -// !#pragma alloc_text(PAGE, FspWgroupDecrement) -// !#pragma alloc_text(PAGE, FspWgroupSignalPermanently) -// !#pragma alloc_text(PAGE, FspWgroupWait) #endif static const LONG Delays[] = @@ -1506,56 +1493,3 @@ NTSTATUS FspIrpHookNext(PDEVICE_OBJECT DeviceObject, PIRP Irp, PVOID Context) return Result; } - -VOID FspWgroupInitialize(FSP_WGROUP *Wgroup) -{ - // !PAGED_CODE(); - - KeInitializeEvent(&Wgroup->Event, NotificationEvent, TRUE); - Wgroup->Count = 0; - KeInitializeSpinLock(&Wgroup->SpinLock); -} - -VOID FspWgroupIncrement(FSP_WGROUP *Wgroup) -{ - // !PAGED_CODE(); - - KIRQL Irql; - - KeAcquireSpinLock(&Wgroup->SpinLock, &Irql); - if (0 <= Wgroup->Count && 1 == ++Wgroup->Count) - KeClearEvent(&Wgroup->Event); - KeReleaseSpinLock(&Wgroup->SpinLock, Irql); -} - -VOID FspWgroupDecrement(FSP_WGROUP *Wgroup) -{ - // !PAGED_CODE(); - - KIRQL Irql; - - KeAcquireSpinLock(&Wgroup->SpinLock, &Irql); - if (0 < Wgroup->Count && 0 == --Wgroup->Count) - KeSetEvent(&Wgroup->Event, 1, FALSE); - KeReleaseSpinLock(&Wgroup->SpinLock, Irql); -} - -VOID FspWgroupSignalPermanently(FSP_WGROUP *Wgroup) -{ - // !PAGED_CODE(); - - KIRQL Irql; - - KeAcquireSpinLock(&Wgroup->SpinLock, &Irql); - Wgroup->Count = -1; - KeSetEvent(&Wgroup->Event, 1, FALSE); - KeReleaseSpinLock(&Wgroup->SpinLock, Irql); -} - -NTSTATUS FspWgroupWait(FSP_WGROUP *Wgroup, - KPROCESSOR_MODE WaitMode, BOOLEAN Alertable, PLARGE_INTEGER PTimeout) -{ - // !PAGED_CODE(); - - return KeWaitForSingleObject(&Wgroup->Event, Executive, WaitMode, Alertable, PTimeout); -}