return status;
}
-__drv_functionClass(IO_COMPLETION_ROUTINE)
-__drv_sameIRQL
-static NTSTATUS
-FdoQueryStopDeviceCompletion(
- IN PDEVICE_OBJECT DeviceObject,
- IN PIRP Irp,
- IN PVOID Context
- )
-{
- PXENFILT_FDO Fdo = Context;
-
- UNREFERENCED_PARAMETER(DeviceObject);
-
- if (Irp->PendingReturned)
- IoMarkIrpPending(Irp);
-
- IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
-
- return STATUS_SUCCESS;
-}
-
static NTSTATUS
FdoQueryStopDevice(
IN PXENFILT_FDO Fdo,
__FdoSetDevicePnpState(Fdo, StopPending);
Irp->IoStatus.Status = STATUS_SUCCESS;
- IoCopyCurrentIrpStackLocationToNext(Irp);
- IoSetCompletionRoutine(Irp,
- FdoQueryStopDeviceCompletion,
- Fdo,
- TRUE,
- TRUE,
- TRUE);
+ IoSkipCurrentIrpStackLocation(Irp);
status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
+ IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
return status;
return status;
}
-__drv_functionClass(IO_COMPLETION_ROUTINE)
-__drv_sameIRQL
-static NTSTATUS
-FdoCancelStopDeviceCompletion(
- IN PDEVICE_OBJECT DeviceObject,
- IN PIRP Irp,
- IN PVOID Context
- )
-{
- PXENFILT_FDO Fdo = Context;
-
- UNREFERENCED_PARAMETER(DeviceObject);
-
- if (Irp->PendingReturned)
- IoMarkIrpPending(Irp);
-
- IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
-
- return STATUS_SUCCESS;
-}
-
static NTSTATUS
FdoCancelStopDevice(
IN PXENFILT_FDO Fdo,
__FdoRestoreDevicePnpState(Fdo, StopPending);
- IoCopyCurrentIrpStackLocationToNext(Irp);
- IoSetCompletionRoutine(Irp,
- FdoCancelStopDeviceCompletion,
- Fdo,
- TRUE,
- TRUE,
- TRUE);
+ IoSkipCurrentIrpStackLocation(Irp);
status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
+ IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
return status;
return status;
}
-__drv_functionClass(IO_COMPLETION_ROUTINE)
-__drv_sameIRQL
-static NTSTATUS
-FdoStopDeviceCompletion(
- IN PDEVICE_OBJECT DeviceObject,
- IN PIRP Irp,
- IN PVOID Context
- )
-{
- PXENFILT_FDO Fdo = Context;
-
- UNREFERENCED_PARAMETER(DeviceObject);
-
- if (Irp->PendingReturned)
- IoMarkIrpPending(Irp);
-
- IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
-
- return STATUS_SUCCESS;
-}
-
static NTSTATUS
FdoStopDevice(
IN PXENFILT_FDO Fdo,
__FdoSetDevicePnpState(Fdo, Stopped);
Irp->IoStatus.Status = STATUS_SUCCESS;
- IoCopyCurrentIrpStackLocationToNext(Irp);
- IoSetCompletionRoutine(Irp,
- FdoStopDeviceCompletion,
- Fdo,
- TRUE,
- TRUE,
- TRUE);
+ IoSkipCurrentIrpStackLocation(Irp);
status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
+ IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
return status;
return status;
}
-__drv_functionClass(IO_COMPLETION_ROUTINE)
-__drv_sameIRQL
-static NTSTATUS
-FdoQueryRemoveDeviceCompletion(
- IN PDEVICE_OBJECT DeviceObject,
- IN PIRP Irp,
- IN PVOID Context
- )
-{
- PXENFILT_FDO Fdo = Context;
-
- UNREFERENCED_PARAMETER(DeviceObject);
-
- if (Irp->PendingReturned)
- IoMarkIrpPending(Irp);
-
- IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
-
- return STATUS_SUCCESS;
-}
-
static NTSTATUS
FdoQueryRemoveDevice(
IN PXENFILT_FDO Fdo,
__FdoSetDevicePnpState(Fdo, RemovePending);
Irp->IoStatus.Status = STATUS_SUCCESS;
- IoCopyCurrentIrpStackLocationToNext(Irp);
- IoSetCompletionRoutine(Irp,
- FdoQueryRemoveDeviceCompletion,
- Fdo,
- TRUE,
- TRUE,
- TRUE);
+ IoSkipCurrentIrpStackLocation(Irp);
status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
+ IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
return status;
return status;
}
-__drv_functionClass(IO_COMPLETION_ROUTINE)
-__drv_sameIRQL
-static NTSTATUS
-FdoCancelRemoveDeviceCompletion(
- IN PDEVICE_OBJECT DeviceObject,
- IN PIRP Irp,
- IN PVOID Context
- )
-{
- PXENFILT_FDO Fdo = Context;
-
- UNREFERENCED_PARAMETER(DeviceObject);
-
- if (Irp->PendingReturned)
- IoMarkIrpPending(Irp);
-
- IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
-
- return STATUS_SUCCESS;
-}
-
static NTSTATUS
FdoCancelRemoveDevice(
IN PXENFILT_FDO Fdo,
__FdoRestoreDevicePnpState(Fdo, RemovePending);
Irp->IoStatus.Status = STATUS_SUCCESS;
- IoCopyCurrentIrpStackLocationToNext(Irp);
- IoSetCompletionRoutine(Irp,
- FdoCancelRemoveDeviceCompletion,
- Fdo,
- TRUE,
- TRUE,
- TRUE);
+ IoSkipCurrentIrpStackLocation(Irp);
status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
+ IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
return status;
return status;
}
-__drv_functionClass(IO_COMPLETION_ROUTINE)
-__drv_sameIRQL
-static NTSTATUS
-FdoSurpriseRemovalCompletion(
- IN PDEVICE_OBJECT DeviceObject,
- IN PIRP Irp,
- IN PVOID Context
- )
-{
- PXENFILT_FDO Fdo = Context;
-
- UNREFERENCED_PARAMETER(DeviceObject);
-
- if (Irp->PendingReturned)
- IoMarkIrpPending(Irp);
-
- IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
-
- return STATUS_SUCCESS;
-}
-
static NTSTATUS
FdoSurpriseRemoval(
IN PXENFILT_FDO Fdo,
__FdoSetDevicePnpState(Fdo, SurpriseRemovePending);
Irp->IoStatus.Status = STATUS_SUCCESS;
- IoCopyCurrentIrpStackLocationToNext(Irp);
- IoSetCompletionRoutine(Irp,
- FdoSurpriseRemovalCompletion,
- Fdo,
- TRUE,
- TRUE,
- TRUE);
+ IoSkipCurrentIrpStackLocation(Irp);
status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
+ IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
return status;
done:
__FdoSetDevicePnpState(Fdo, Deleted);
- IoReleaseRemoveLockAndWait(&Fdo->Dx->RemoveLock, Irp);
-
status = FdoForwardIrpSynchronously(Fdo, Irp);
- IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+ IoReleaseRemoveLockAndWait(&Fdo->Dx->RemoveLock, Irp);
__FdoAcquireMutex(Fdo);
ASSERT3U(Fdo->References, !=, 0);
DriverReleaseMutex();
}
+ IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
return status;
fail1:
return status;
}
-__drv_functionClass(IO_COMPLETION_ROUTINE)
-__drv_sameIRQL
-static NTSTATUS
-FdoDispatchPnpCompletion(
- IN PDEVICE_OBJECT DeviceObject,
- IN PIRP Irp,
- IN PVOID Context
- )
-{
- PXENFILT_FDO Fdo = Context;
-
- UNREFERENCED_PARAMETER(DeviceObject);
-
- if (Irp->PendingReturned)
- IoMarkIrpPending(Irp);
-
- IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
- return STATUS_SUCCESS;
-}
-
static NTSTATUS
FdoDispatchPnp(
IN PXENFILT_FDO Fdo,
if (!NT_SUCCESS(status))
goto fail1;
- IoCopyCurrentIrpStackLocationToNext(Irp);
- IoSetCompletionRoutine(Irp,
- FdoDispatchPnpCompletion,
- Fdo,
- TRUE,
- TRUE,
- TRUE);
+ IoSkipCurrentIrpStackLocation(Irp);
status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
+ IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
break;
}
return STATUS_SUCCESS;
}
-__drv_functionClass(IO_COMPLETION_ROUTINE)
-__drv_sameIRQL
-static NTSTATUS
-FdoDispatchPowerCompletion(
- IN PDEVICE_OBJECT DeviceObject,
- IN PIRP Irp,
- IN PVOID Context
- )
-{
- PXENFILT_FDO Fdo = Context;
-
- UNREFERENCED_PARAMETER(DeviceObject);
-
- if (Irp->PendingReturned)
- IoMarkIrpPending(Irp);
-
- IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
- return STATUS_SUCCESS;
-}
-
static NTSTATUS
FdoDispatchPower(
IN PXENFILT_FDO Fdo,
if (MinorFunction != IRP_MN_QUERY_POWER &&
MinorFunction != IRP_MN_SET_POWER) {
- IoCopyCurrentIrpStackLocationToNext(Irp);
- IoSetCompletionRoutine(Irp,
- FdoDispatchPowerCompletion,
- Fdo,
- TRUE,
- TRUE,
- TRUE);
+ IoSkipCurrentIrpStackLocation(Irp);
status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
+ IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
goto done;
}
break;
default:
- IoCopyCurrentIrpStackLocationToNext(Irp);
- IoSetCompletionRoutine(Irp,
- FdoDispatchPowerCompletion,
- Fdo,
- TRUE,
- TRUE,
- TRUE);
+ IoSkipCurrentIrpStackLocation(Irp);
status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
+ IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
break;
}
return status;
}
-__drv_functionClass(IO_COMPLETION_ROUTINE)
-__drv_sameIRQL
-static NTSTATUS
-FdoDispatchDefaultCompletion(
- IN PDEVICE_OBJECT DeviceObject,
- IN PIRP Irp,
- IN PVOID Context
- )
-{
- PXENFILT_FDO Fdo = Context;
-
- UNREFERENCED_PARAMETER(DeviceObject);
-
- if (Irp->PendingReturned)
- IoMarkIrpPending(Irp);
-
- IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
-
- return STATUS_SUCCESS;
-}
-
static NTSTATUS
FdoDispatchDefault(
IN PXENFILT_FDO Fdo,
if (!NT_SUCCESS(status))
goto fail1;
- IoCopyCurrentIrpStackLocationToNext(Irp);
- IoSetCompletionRoutine(Irp,
- FdoDispatchDefaultCompletion,
- Fdo,
- TRUE,
- TRUE,
- TRUE);
+ IoSkipCurrentIrpStackLocation(Irp);
status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
+ IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
return status;
return status;
}
-__drv_functionClass(IO_COMPLETION_ROUTINE)
-__drv_sameIRQL
-static NTSTATUS
-PdoQueryStopDeviceCompletion(
- IN PDEVICE_OBJECT DeviceObject,
- IN PIRP Irp,
- IN PVOID Context
- )
-{
- PXENFILT_PDO Pdo = Context;
-
- UNREFERENCED_PARAMETER(DeviceObject);
-
- if (Irp->PendingReturned)
- IoMarkIrpPending(Irp);
-
- IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
-
- return STATUS_SUCCESS;
-}
-
static NTSTATUS
PdoQueryStopDevice(
IN PXENFILT_PDO Pdo,
__PdoSetDevicePnpState(Pdo, StopPending);
Irp->IoStatus.Status = STATUS_SUCCESS;
- IoCopyCurrentIrpStackLocationToNext(Irp);
- IoSetCompletionRoutine(Irp,
- PdoQueryStopDeviceCompletion,
- Pdo,
- TRUE,
- TRUE,
- TRUE);
+ IoSkipCurrentIrpStackLocation(Irp);
status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
+ IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
return status;
return status;
}
-__drv_functionClass(IO_COMPLETION_ROUTINE)
-__drv_sameIRQL
-static NTSTATUS
-PdoCancelStopDeviceCompletion(
- IN PDEVICE_OBJECT DeviceObject,
- IN PIRP Irp,
- IN PVOID Context
- )
-{
- PXENFILT_PDO Pdo = Context;
-
- UNREFERENCED_PARAMETER(DeviceObject);
-
- if (Irp->PendingReturned)
- IoMarkIrpPending(Irp);
-
- IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
-
- return STATUS_SUCCESS;
-}
-
static NTSTATUS
PdoCancelStopDevice(
IN PXENFILT_PDO Pdo,
__PdoRestoreDevicePnpState(Pdo, StopPending);
- IoCopyCurrentIrpStackLocationToNext(Irp);
- IoSetCompletionRoutine(Irp,
- PdoCancelStopDeviceCompletion,
- Pdo,
- TRUE,
- TRUE,
- TRUE);
+ IoSkipCurrentIrpStackLocation(Irp);
status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
+ IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
return status;
return status;
}
-__drv_functionClass(IO_COMPLETION_ROUTINE)
-__drv_sameIRQL
-static NTSTATUS
-PdoStopDeviceCompletion(
- IN PDEVICE_OBJECT DeviceObject,
- IN PIRP Irp,
- IN PVOID Context
- )
-{
- PXENFILT_PDO Pdo = Context;
-
- UNREFERENCED_PARAMETER(DeviceObject);
-
- if (Irp->PendingReturned)
- IoMarkIrpPending(Irp);
-
- IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
-
- return STATUS_SUCCESS;
-}
-
static NTSTATUS
PdoStopDevice(
IN PXENFILT_PDO Pdo,
__PdoSetDevicePnpState(Pdo, Stopped);
Irp->IoStatus.Status = STATUS_SUCCESS;
- IoCopyCurrentIrpStackLocationToNext(Irp);
- IoSetCompletionRoutine(Irp,
- PdoStopDeviceCompletion,
- Pdo,
- TRUE,
- TRUE,
- TRUE);
+ IoSkipCurrentIrpStackLocation(Irp);
status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
+ IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
return status;
return status;
}
-__drv_functionClass(IO_COMPLETION_ROUTINE)
-__drv_sameIRQL
-static NTSTATUS
-PdoQueryRemoveDeviceCompletion(
- IN PDEVICE_OBJECT DeviceObject,
- IN PIRP Irp,
- IN PVOID Context
- )
-{
- PXENFILT_PDO Pdo = Context;
-
- UNREFERENCED_PARAMETER(DeviceObject);
-
- if (Irp->PendingReturned)
- IoMarkIrpPending(Irp);
-
- IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
-
- return STATUS_SUCCESS;
-}
-
static NTSTATUS
PdoQueryRemoveDevice(
IN PXENFILT_PDO Pdo,
__PdoSetDevicePnpState(Pdo, RemovePending);
Irp->IoStatus.Status = STATUS_SUCCESS;
- IoCopyCurrentIrpStackLocationToNext(Irp);
- IoSetCompletionRoutine(Irp,
- PdoQueryRemoveDeviceCompletion,
- Pdo,
- TRUE,
- TRUE,
- TRUE);
+ IoSkipCurrentIrpStackLocation(Irp);
status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
+ IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
return status;
return status;
}
-__drv_functionClass(IO_COMPLETION_ROUTINE)
-__drv_sameIRQL
-static NTSTATUS
-PdoCancelRemoveDeviceCompletion(
- IN PDEVICE_OBJECT DeviceObject,
- IN PIRP Irp,
- IN PVOID Context
- )
-{
- PXENFILT_PDO Pdo = Context;
-
- UNREFERENCED_PARAMETER(DeviceObject);
-
- if (Irp->PendingReturned)
- IoMarkIrpPending(Irp);
-
- IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
-
- return STATUS_SUCCESS;
-}
-
static NTSTATUS
PdoCancelRemoveDevice(
IN PXENFILT_PDO Pdo,
__PdoRestoreDevicePnpState(Pdo, RemovePending);
Irp->IoStatus.Status = STATUS_SUCCESS;
- IoCopyCurrentIrpStackLocationToNext(Irp);
- IoSetCompletionRoutine(Irp,
- PdoCancelRemoveDeviceCompletion,
- Pdo,
- TRUE,
- TRUE,
- TRUE);
+ IoSkipCurrentIrpStackLocation(Irp);
status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
+ IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
return status;
return status;
}
-__drv_functionClass(IO_COMPLETION_ROUTINE)
-__drv_sameIRQL
-static NTSTATUS
-PdoSurpriseRemovalCompletion(
- IN PDEVICE_OBJECT DeviceObject,
- IN PIRP Irp,
- IN PVOID Context
- )
-{
- PXENFILT_PDO Pdo = Context;
-
- UNREFERENCED_PARAMETER(DeviceObject);
-
- if (Irp->PendingReturned)
- IoMarkIrpPending(Irp);
-
- IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
-
- return STATUS_SUCCESS;
-}
-
static NTSTATUS
PdoSurpriseRemoval(
IN PXENFILT_PDO Pdo,
__PdoSetDevicePnpState(Pdo, SurpriseRemovePending);
Irp->IoStatus.Status = STATUS_SUCCESS;
- IoCopyCurrentIrpStackLocationToNext(Irp);
- IoSetCompletionRoutine(Irp,
- PdoSurpriseRemovalCompletion,
- Pdo,
- TRUE,
- TRUE,
- TRUE);
+ IoSkipCurrentIrpStackLocation(Irp);
status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
+ IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
return status;
return status;
}
-__drv_functionClass(IO_COMPLETION_ROUTINE)
-__drv_sameIRQL
-static NTSTATUS
-PdoQueryInterfaceCompletion(
- IN PDEVICE_OBJECT DeviceObject,
- IN PIRP Irp,
- IN PVOID Context
- )
-{
- PXENFILT_PDO Pdo = Context;
-
- UNREFERENCED_PARAMETER(DeviceObject);
-
- if (Irp->PendingReturned)
- IoMarkIrpPending(Irp);
-
- IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
-
- return STATUS_SUCCESS;
-}
-
#define DEFINE_PDO_QUERY_INTERFACE(_Interface) \
static NTSTATUS \
PdoQuery ## _Interface ## Interface( \
}
done:
- IoCopyCurrentIrpStackLocationToNext(Irp);
- IoSetCompletionRoutine(Irp,
- PdoQueryInterfaceCompletion,
- Pdo,
- TRUE,
- TRUE,
- TRUE);
+ IoSkipCurrentIrpStackLocation(Irp);
status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
+ IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
return status;
return status;
}
-__drv_functionClass(IO_COMPLETION_ROUTINE)
-__drv_sameIRQL
-static NTSTATUS
-PdoDispatchPnpCompletion(
- IN PDEVICE_OBJECT DeviceObject,
- IN PIRP Irp,
- IN PVOID Context
- )
-{
- PXENFILT_PDO Pdo = Context;
-
- UNREFERENCED_PARAMETER(DeviceObject);
-
- if (Irp->PendingReturned)
- IoMarkIrpPending(Irp);
-
- IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
- return STATUS_SUCCESS;
-}
-
static NTSTATUS
PdoDispatchPnp(
IN PXENFILT_PDO Pdo,
if (!NT_SUCCESS(status))
goto fail1;
- IoCopyCurrentIrpStackLocationToNext(Irp);
- IoSetCompletionRoutine(Irp,
- PdoDispatchPnpCompletion,
- Pdo,
- TRUE,
- TRUE,
- TRUE);
+ IoSkipCurrentIrpStackLocation(Irp);
status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
+ IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
break;
}
return STATUS_SUCCESS;
}
-__drv_functionClass(IO_COMPLETION_ROUTINE)
-__drv_sameIRQL
-static NTSTATUS
-PdoDispatchPowerCompletion(
- IN PDEVICE_OBJECT DeviceObject,
- IN PIRP Irp,
- IN PVOID Context
- )
-{
- PXENFILT_PDO Pdo = Context;
-
- UNREFERENCED_PARAMETER(DeviceObject);
-
- if (Irp->PendingReturned)
- IoMarkIrpPending(Irp);
-
- IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
- return STATUS_SUCCESS;
-}
-
static NTSTATUS
PdoDispatchPower(
IN PXENFILT_PDO Pdo,
if (MinorFunction != IRP_MN_QUERY_POWER &&
MinorFunction != IRP_MN_SET_POWER) {
- IoCopyCurrentIrpStackLocationToNext(Irp);
- IoSetCompletionRoutine(Irp,
- PdoDispatchPowerCompletion,
- Pdo,
- TRUE,
- TRUE,
- TRUE);
+ IoSkipCurrentIrpStackLocation(Irp);
status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
+ IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
goto done;
}
break;
default:
- IoCopyCurrentIrpStackLocationToNext(Irp);
- IoSetCompletionRoutine(Irp,
- PdoDispatchPowerCompletion,
- Pdo,
- TRUE,
- TRUE,
- TRUE);
+ IoSkipCurrentIrpStackLocation(Irp);
status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
+ IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
break;
}
return status;
}
-__drv_functionClass(IO_COMPLETION_ROUTINE)
-__drv_sameIRQL
-static NTSTATUS
-PdoDispatchDefaultCompletion(
- IN PDEVICE_OBJECT DeviceObject,
- IN PIRP Irp,
- IN PVOID Context
- )
-{
- PXENFILT_PDO Pdo = Context;
-
- UNREFERENCED_PARAMETER(DeviceObject);
-
- if (Irp->PendingReturned)
- IoMarkIrpPending(Irp);
-
- IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
-
- return STATUS_SUCCESS;
-}
-
static NTSTATUS
PdoDispatchDefault(
IN PXENFILT_PDO Pdo,
if (!NT_SUCCESS(status))
goto fail1;
- IoCopyCurrentIrpStackLocationToNext(Irp);
- IoSetCompletionRoutine(Irp,
- PdoDispatchDefaultCompletion,
- Pdo,
- TRUE,
- TRUE,
- TRUE);
+ IoSkipCurrentIrpStackLocation(Irp);
status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
+ IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
return status;