From 3d472cf72f0c4f0d221bafec740f746974220831 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Tue, 31 May 2011 19:29:22 +0000 Subject: [PATCH] [PCIIDEX] - Handle IRP_MN_QUERY_REMOVE_DEVICE - Handle IRP_MN_QUERY_PNP_DEVICE_STATE to report that we are not disableable to the PnP manager so we don't get removed during driver installation svn path=/trunk/; revision=52028 --- reactos/drivers/storage/ide/pciidex/fdo.c | 15 ++++++++++++++- reactos/drivers/storage/ide/pciidex/pdo.c | 15 ++++++++++++++- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/reactos/drivers/storage/ide/pciidex/fdo.c b/reactos/drivers/storage/ide/pciidex/fdo.c index ff140e1d19e..497842fd09e 100644 --- a/reactos/drivers/storage/ide/pciidex/fdo.c +++ b/reactos/drivers/storage/ide/pciidex/fdo.c @@ -402,7 +402,7 @@ PciIdeXFdoPnpDispatch( { ULONG MinorFunction; PIO_STACK_LOCATION Stack; - ULONG_PTR Information = 0; + ULONG_PTR Information = Irp->IoStatus.Information; NTSTATUS Status; Stack = IoGetCurrentIrpStackLocation(Irp); @@ -419,6 +419,12 @@ PciIdeXFdoPnpDispatch( Status = PciIdeXFdoStartDevice(DeviceObject, Irp); break; } + case IRP_MN_QUERY_REMOVE_DEVICE: /* 0x01 */ + { + DPRINT("IRP_MJ_PNP / IRP_MN_QUERY_REMOVE_DEVICE\n"); + Status = STATUS_UNSUCCESSFUL; + break; + } case IRP_MN_QUERY_DEVICE_RELATIONS: /* 0x07 */ { switch (Stack->Parameters.QueryDeviceRelations.Type) @@ -441,6 +447,13 @@ PciIdeXFdoPnpDispatch( } break; } + case IRP_MN_QUERY_PNP_DEVICE_STATE: /* 0x14 */ + { + DPRINT("IRP_MJ_PNP / IRP_MN_QUERY_PNP_DEVICE_STATE\n"); + Information |= PNP_DEVICE_NOT_DISABLEABLE; + Status = STATUS_SUCCESS; + break; + } case IRP_MN_FILTER_RESOURCE_REQUIREMENTS: /* 0x0d */ { DPRINT("IRP_MJ_PNP / IRP_MN_FILTER_RESOURCE_REQUIREMENTS\n"); diff --git a/reactos/drivers/storage/ide/pciidex/pdo.c b/reactos/drivers/storage/ide/pciidex/pdo.c index 532cc22f601..f79b00a5315 100644 --- a/reactos/drivers/storage/ide/pciidex/pdo.c +++ b/reactos/drivers/storage/ide/pciidex/pdo.c @@ -360,7 +360,7 @@ PciIdeXPdoPnpDispatch( { ULONG MinorFunction; PIO_STACK_LOCATION Stack; - ULONG_PTR Information = 0; + ULONG_PTR Information = Irp->IoStatus.Information; NTSTATUS Status; Stack = IoGetCurrentIrpStackLocation(Irp); @@ -404,6 +404,12 @@ PciIdeXPdoPnpDispatch( Status = STATUS_SUCCESS; break; } + case IRP_MN_QUERY_REMOVE_DEVICE: /* 0x01 */ + { + DPRINT("IRP_MJ_PNP / IRP_MN_QUERY_REMOVE_DEVICE\n"); + Status = STATUS_UNSUCCESSFUL; + break; + } case IRP_MN_QUERY_DEVICE_RELATIONS: /* 0x07 */ { switch (Stack->Parameters.QueryDeviceRelations.Type) @@ -485,6 +491,13 @@ PciIdeXPdoPnpDispatch( Status = PciIdeXPdoQueryId(DeviceObject, Irp, &Information); break; } + case IRP_MN_QUERY_PNP_DEVICE_STATE: /* 0x14 */ + { + DPRINT("IRP_MJ_PNP / IRP_MN_QUERY_PNP_DEVICE_STATE\n"); + Information |= PNP_DEVICE_NOT_DISABLEABLE; + Status = STATUS_SUCCESS; + break; + } case IRP_MN_QUERY_BUS_INFORMATION: /* 0x15 */ { PPNP_BUS_INFORMATION BusInfo;