From 31ecea004c60fb147b54325f34a76f44de725ba8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Fri, 24 Feb 2006 13:41:20 +0000 Subject: [PATCH] Don't try to send the IRP to lower device when we are a PDO svn path=/trunk/; revision=21189 --- reactos/drivers/storage/pciidex/miniport.c | 33 +++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/reactos/drivers/storage/pciidex/miniport.c b/reactos/drivers/storage/pciidex/miniport.c index 346499a4510..f69597fb3ba 100644 --- a/reactos/drivers/storage/pciidex/miniport.c +++ b/reactos/drivers/storage/pciidex/miniport.c @@ -12,6 +12,37 @@ #define INITGUID #include "pciidex.h" +static NTSTATUS NTAPI +PciIdeXForwardOrIgnore( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp) +{ + if (((PCOMMON_DEVICE_EXTENSION)DeviceObject->DeviceExtension)->IsFDO) + return ForwardIrpAndForget(DeviceObject, Irp); + else + { + ULONG MajorFunction = IoGetCurrentIrpStackLocation(Irp)->MajorFunction; + NTSTATUS Status; + + if (MajorFunction == IRP_MJ_CREATE || + MajorFunction == IRP_MJ_CLEANUP || + MajorFunction == IRP_MJ_CLOSE) + { + Status = STATUS_SUCCESS; + } + else + { + DPRINT1("PDO stub for major function 0x%lx\n", MajorFunction); + ASSERT(FALSE); + Status = STATUS_NOT_SUPPORTED; + } + Irp->IoStatus.Information = 0; + Irp->IoStatus.Status = Status; + IoCompleteRequest(Irp, IO_NO_INCREMENT); + return Status; + } +} + static NTSTATUS NTAPI PciIdeXPnpDispatch( IN PDEVICE_OBJECT DeviceObject, @@ -51,7 +82,7 @@ PciIdeXInitialize( DriverObject->DriverExtension->AddDevice = PciIdeXAddDevice; for (i = 0; i <= IRP_MJ_MAXIMUM_FUNCTION; i++) - DriverObject->MajorFunction[i] = ForwardIrpAndForget; + DriverObject->MajorFunction[i] = PciIdeXForwardOrIgnore; DriverObject->MajorFunction[IRP_MJ_PNP] = PciIdeXPnpDispatch; return STATUS_SUCCESS;