Index: disk.c =================================================================== --- disk.c (revision 69875) +++ disk.c (working copy) @@ -502,8 +502,8 @@ // AdapterDescriptor->Version = sizeof(STORAGE_ADAPTER_DESCRIPTOR); AdapterDescriptor->Size = sizeof(STORAGE_ADAPTER_DESCRIPTOR); - AdapterDescriptor->MaximumTransferLength = MAXULONG; //FIXME compute some sane value - AdapterDescriptor->MaximumPhysicalPages = 25; //FIXME compute some sane value + AdapterDescriptor->MaximumTransferLength = 0x20000; //MAXULONG; //FIXME compute some sane value + AdapterDescriptor->MaximumPhysicalPages = 33; //25; //FIXME compute some sane value AdapterDescriptor->AlignmentMask = 0; AdapterDescriptor->AdapterUsesPio = FALSE; AdapterDescriptor->AdapterScansDown = FALSE; Index: misc.c =================================================================== --- misc.c (revision 69875) +++ misc.c (working copy) @@ -292,7 +292,7 @@ { PURB Urb; - PUCHAR Buffer; + //PUCHAR Buffer; NTSTATUS Status; // @@ -307,6 +307,7 @@ return STATUS_INSUFFICIENT_RESOURCES; } +#if 0 ////////////////////////////not used, not FreeItem() // // allocate 1-byte buffer // @@ -319,6 +320,7 @@ FreeItem(Buffer); return STATUS_INSUFFICIENT_RESOURCES; } +#endif ////////////////////////////////////////////////// // // initialize vendor request @@ -372,25 +374,46 @@ // // execute request // - Status = USBSTOR_ClassRequest(DeviceObject, DeviceExtension, USB_BULK_GET_MAX_LUN, DeviceExtension->InterfaceInformation->InterfaceNumber, USBD_TRANSFER_DIRECTION_IN, sizeof(UCHAR), Buffer); + Status = USBSTOR_ClassRequest( + DeviceObject, + DeviceExtension, + USB_BULK_GET_MAX_LUN, + DeviceExtension->InterfaceInformation->InterfaceNumber, + USBD_TRANSFER_DIRECTION_IN, + sizeof(UCHAR), + Buffer); - DPRINT("MaxLUN: %x\n", *Buffer); + DPRINT("USBSTOR_GetMaxLUN: USBSTOR_ClassRequest return Status - %x, MaxLUN - %x\n", Status, *Buffer); - if (*Buffer > 0xF) + if ( NT_SUCCESS(Status) ) { + if (*Buffer > 0xF) + { + // + // invalid response documented in usb mass storage specification + // + Status = STATUS_DEVICE_DATA_ERROR; + } + else + { + // + // store maxlun + // + DeviceExtension->MaxLUN = *Buffer; + } + } + else + { // - // invalid response documented in usb mass storage specification + // "USB Mass Storage Class. Bulk-Only Transport. Revision 1.0" + // 3.2 Get Max LUN (class-specific request) : + // Devices that do not support multiple LUNs may STALL this command. // - Status = STATUS_DEVICE_DATA_ERROR; - } - else - { - // - // store maxlun - // - DeviceExtension->MaxLUN = *Buffer; - } + DeviceExtension->MaxLUN = 0; + Status = STATUS_SUCCESS; + } + // // free buffer //