- Return STATUS_SUCCESS for root bus PDO PnP IRPs so that function drivers can process them.

svn path=/trunk/; revision=11408
This commit is contained in:
Filip Navara 2004-10-24 09:13:18 +00:00
parent cad7a781f2
commit b02b780b4a

View file

@ -1,4 +1,4 @@
/* $Id: pnproot.c,v 1.23 2004/08/15 16:39:03 chorns Exp $ /* $Id: pnproot.c,v 1.24 2004/10/24 09:13:18 navaraf Exp $
* *
* COPYRIGHT: See COPYING in the top level directory * COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel * PROJECT: ReactOS kernel
@ -250,8 +250,9 @@ PdoQueryResources(
PIO_STACK_LOCATION IrpSp) PIO_STACK_LOCATION IrpSp)
{ {
PCM_RESOURCE_LIST ResourceList; PCM_RESOURCE_LIST ResourceList;
ULONG ResourceListSize = FIELD_OFFSET(CM_RESOURCE_LIST, List);
ResourceList = ExAllocatePool(PagedPool, sizeof(CM_RESOURCE_LIST)); ResourceList = ExAllocatePool(PagedPool, ResourceListSize);
if (ResourceList == NULL) if (ResourceList == NULL)
return STATUS_INSUFFICIENT_RESOURCES; return STATUS_INSUFFICIENT_RESOURCES;
@ -263,6 +264,28 @@ PdoQueryResources(
} }
NTSTATUS
PdoQueryResourceRequirements(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
PIO_STACK_LOCATION IrpSp)
{
PIO_RESOURCE_REQUIREMENTS_LIST ResourceList;
ULONG ResourceListSize = FIELD_OFFSET(IO_RESOURCE_REQUIREMENTS_LIST, List);
ResourceList = ExAllocatePool(PagedPool, ResourceListSize);
if (ResourceList == NULL)
return STATUS_INSUFFICIENT_RESOURCES;
RtlZeroMemory(ResourceList, ResourceListSize);
ResourceList->ListSize = ResourceListSize;
Irp->IoStatus.Information = (ULONG_PTR)ResourceList;
return STATUS_SUCCESS;
}
NTSTATUS NTSTATUS
PnpRootPdoPnpControl( PnpRootPdoPnpControl(
PDEVICE_OBJECT DeviceObject, PDEVICE_OBJECT DeviceObject,
@ -280,75 +303,44 @@ PnpRootPdoPnpControl(
NTSTATUS Status; NTSTATUS Status;
DPRINT("Called\n"); DPRINT("Called\n");
Status = Irp->IoStatus.Status; Status = Irp->IoStatus.Status;
IrpSp = IoGetCurrentIrpStackLocation(Irp); IrpSp = IoGetCurrentIrpStackLocation(Irp);
switch (IrpSp->MinorFunction) { switch (IrpSp->MinorFunction) {
#if 0 #if 0
case IRP_MN_CANCEL_REMOVE_DEVICE:
break;
case IRP_MN_CANCEL_STOP_DEVICE:
break;
case IRP_MN_DEVICE_USAGE_NOTIFICATION:
break;
case IRP_MN_EJECT:
break;
case IRP_MN_QUERY_BUS_INFORMATION: case IRP_MN_QUERY_BUS_INFORMATION:
break; break;
case IRP_MN_QUERY_CAPABILITIES:
break;
case IRP_MN_QUERY_DEVICE_RELATIONS: case IRP_MN_QUERY_DEVICE_RELATIONS:
/* FIXME: Possibly handle for RemovalRelations */ /* FIXME: Handle for TargetDeviceRelation */
break;
case IRP_MN_QUERY_DEVICE_TEXT:
break; break;
#endif #endif
case IRP_MN_QUERY_ID: case IRP_MN_QUERY_ID:
Status = PdoQueryId(DeviceObject, Irp, IrpSp); Status = PdoQueryId(DeviceObject, Irp, IrpSp);
break; break;
#if 0
case IRP_MN_QUERY_PNP_DEVICE_STATE:
break;
case IRP_MN_QUERY_REMOVE_DEVICE:
break;
case IRP_MN_QUERY_RESOURCE_REQUIREMENTS: case IRP_MN_QUERY_RESOURCE_REQUIREMENTS:
Status = PdoQueryResourceRequirements(DeviceObject, Irp, IrpSp);
break; break;
#endif
case IRP_MN_QUERY_RESOURCES: case IRP_MN_QUERY_RESOURCES:
Status = PdoQueryResources(DeviceObject, Irp, IrpSp); Status = PdoQueryResources(DeviceObject, Irp, IrpSp);
break; break;
#if 0
case IRP_MN_QUERY_STOP_DEVICE:
break;
case IRP_MN_REMOVE_DEVICE:
break;
case IRP_MN_SET_LOCK:
break;
case IRP_MN_START_DEVICE: case IRP_MN_START_DEVICE:
break; case IRP_MN_QUERY_STOP_DEVICE:
case IRP_MN_CANCEL_STOP_DEVICE:
case IRP_MN_STOP_DEVICE: case IRP_MN_STOP_DEVICE:
case IRP_MN_QUERY_REMOVE_DEVICE:
case IRP_MN_CANCEL_REMOVE_DEVICE:
case IRP_MN_REMOVE_DEVICE:
case IRP_MN_SURPRISE_REMOVAL:
Status = STATUS_SUCCESS;
break; break;
case IRP_MN_SURPRISE_REMOVAL:
break;
#endif
default: default:
DPRINT("Unknown IOCTL 0x%X\n", IrpSp->MinorFunction); DPRINT("Unknown IOCTL 0x%X\n", IrpSp->MinorFunction);
break; break;