From 999a6744db6e33ddabb5de0d260b121e69d09d1e Mon Sep 17 00:00:00 2001 From: Simon Rozman Date: Mon, 22 Jul 2019 11:13:20 +0200 Subject: [PATCH] Assert that adapter is always running when client is registering rings By attaching to NDIS device instead of creating our own device for I/O, the adapter is always running before client is able to connect and register rings. NDIS also won't allow adapter to pause with connected clients. Signed-off-by: Simon Rozman --- wintun.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/wintun.c b/wintun.c index 62b2485..0e19ee9 100644 --- a/wintun.c +++ b/wintun.c @@ -606,6 +606,8 @@ TunRegisterBuffers(_Inout_ TUN_CTX *Ctx, _Inout_ IRP *Irp) if (InterlockedCompareExchangePointer(&Ctx->Device.Owner, Stack->FileObject, NULL) != NULL) return STATUS_ALREADY_INITIALIZED; + ASSERT(InterlockedGet(&Ctx->Flags) & TUN_FLAGS_RUNNING); + TUN_REGISTER_RINGS *Rrb = Irp->AssociatedIrp.SystemBuffer; if (Status = STATUS_INVALID_PARAMETER, Stack->Parameters.DeviceIoControl.InputBufferLength != sizeof(*Rrb)) goto cleanupResetOwner;