IN PDEVICE_OBJECT DeviceObject,
IN OUT PIRP Irp)
{
+ PIO_STACK_LOCATION IoStack;
LPWSTR Buffer;
PPDO_DEVICE_EXTENSION PDODeviceExtension;
LPWSTR GenericString = L"Composite USB Device";
+
+ //
+ // get current irp stack location
+ //
+ IoStack = IoGetCurrentIrpStackLocation(Irp);
+
//
// get device extension
//
PDODeviceExtension = (PPDO_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
+ //
+ // check if type is description
+ //
+ if (IoStack->Parameters.QueryDeviceText.DeviceTextType != DeviceTextDescription)
+ {
+ //
+ // we only handle description
+ //
+ return Irp->IoStatus.Status;
+ }
+
//
// is there a device description
//
//
// handle query device id
//
- Status = USBCCGP_SyncForwardIrp(PDODeviceExtension->NextDeviceObject, Irp);
+ if (IoForwardIrpSynchronously(PDODeviceExtension->NextDeviceObject, Irp))
+ {
+ Status = Irp->IoStatus.Status;
+ }
+ else
+ {
+ Status = STATUS_UNSUCCESSFUL;
+ }
+
if (NT_SUCCESS(Status))
{
//
return STATUS_NOT_IMPLEMENTED;
}
+NTSTATUS
+PDO_HandlePower(
+ PDEVICE_OBJECT DeviceObject,
+ PIRP Irp)
+{
+ NTSTATUS Status;
+ PIO_STACK_LOCATION IoStack;
+
+ IoStack = IoGetCurrentIrpStackLocation(Irp);
+
+ switch (IoStack->MinorFunction)
+ {
+ case IRP_MN_SET_POWER:
+ case IRP_MN_QUERY_POWER:
+ Irp->IoStatus.Status = STATUS_SUCCESS;
+ break;
+ }
+
+ Status = Irp->IoStatus.Status;
+ PoStartNextPowerIrp(Irp);
+ IoCompleteRequest(Irp, IO_NO_INCREMENT);
+ return Status;
+}
+
NTSTATUS
PDO_Dispatch(
case IRP_MJ_INTERNAL_DEVICE_CONTROL:
return PDO_HandleInternalDeviceControl(DeviceObject, Irp);
case IRP_MJ_POWER:
- PoStartNextPowerIrp(Irp);
- Irp->IoStatus.Status = STATUS_SUCCESS;
- IoCompleteRequest(Irp, IO_NO_INCREMENT);
- return STATUS_SUCCESS;
+ return PDO_HandlePower(DeviceObject, Irp);
default:
DPRINT1("PDO_Dispatch Function %x not implemented\n", IoStack->MajorFunction);
Status = Irp->IoStatus.Status;