Revise I/O errors
Signed-off-by: Simon Rozman <simon@rozman.si>
This commit is contained in:
parent
d3cc0570de
commit
ca79fd1368
10
wintun.c
10
wintun.c
@ -703,7 +703,7 @@ static NTSTATUS TunDispatch(DEVICE_OBJECT *DeviceObject, IRP *Irp)
|
||||
switch (stack->MajorFunction) {
|
||||
case IRP_MJ_READ:
|
||||
if (InterlockedGet((LONG *)&ctx->State) < TUN_STATE_PAUSED) {
|
||||
status = STATUS_INVALID_HANDLE;
|
||||
status = STATUS_FILE_FORCED_CLOSED;
|
||||
break;
|
||||
}
|
||||
|
||||
@ -716,7 +716,7 @@ static NTSTATUS TunDispatch(DEVICE_OBJECT *DeviceObject, IRP *Irp)
|
||||
|
||||
case IRP_MJ_WRITE:
|
||||
if (InterlockedGet((LONG *)&ctx->State) < TUN_STATE_PAUSED) {
|
||||
status = STATUS_INVALID_HANDLE;
|
||||
status = STATUS_FILE_FORCED_CLOSED;
|
||||
break;
|
||||
}
|
||||
|
||||
@ -725,7 +725,7 @@ static NTSTATUS TunDispatch(DEVICE_OBJECT *DeviceObject, IRP *Irp)
|
||||
|
||||
case IRP_MJ_CREATE:
|
||||
if (InterlockedGet((LONG *)&ctx->State) < TUN_STATE_PAUSED) {
|
||||
status = STATUS_INVALID_HANDLE;
|
||||
status = STATUS_DELETE_PENDING;
|
||||
break;
|
||||
}
|
||||
|
||||
@ -1099,9 +1099,9 @@ static void TunHaltEx(NDIS_HANDLE MiniportAdapterContext, NDIS_HALT_ACTION HaltA
|
||||
|
||||
InterlockedExchange((LONG *)&ctx->State, TUN_STATE_HALTING);
|
||||
|
||||
/* Cancel pending IRPs to unblock waiting clients. */
|
||||
/* Complete pending IRPs to unblock waiting clients. */
|
||||
for (IRP *pending_irp; (pending_irp = IoCsqRemoveNextIrp(&ctx->Device.ReadQueue.Csq, NULL)) != NULL;)
|
||||
TunCompleteRequest(pending_irp, 0, STATUS_CANCELLED);
|
||||
TunCompleteRequest(pending_irp, 0, STATUS_FILE_FORCED_CLOSED);
|
||||
|
||||
NdisFreeNetBufferListPool(ctx->NBLPool);
|
||||
ctx->NBLPool = NULL;
|
||||
|
Loading…
Reference in New Issue
Block a user