请问处理IOCTL_STORAGE_QUERY_PROPERTY是否有问题?
case IOCTL_STORAGE_QUERY_PROPERTY: //0x2d1400
query = (PSTORAGE_PROPERTY_QUERY)ioBuffer;
header = (PSTORAGE_DESCRIPTOR_HEADER)ioBuffer;
if ((query->PropertyId == StorageAdapterProperty) && (query->QueryType == PropertyStandardQuery))
{
if (outputBufferLength >= sizeof(STORAGE_DESCRIPTOR_HEADER))
{
header->Version = sizeof(STORAGE_ADAPTER_DESCRIPTOR);//1
header->Size = sizeof(STORAGE_ADAPTER_DESCRIPTOR);
Irp->IoStatus.Information = outputBufferLength;//sizeof(STORAGE_DESCRIPTOR_HEADER);
ntStatus = STATUS_SUCCESS;
BulkUmss_DbgPrint(MidDbgLevel,("sizeof(STORAGE_DESCRIPTOR_HEADER)= %d\n",sizeof(STORAGE_DESCRIPTOR_HEADER)));
}
if (outputBufferLength >= sizeof(STORAGE_ADAPTER_DESCRIPTOR))
{
adapterDescriptor = (PSTORAGE_ADAPTER_DESCRIPTOR)header;
adapterDescriptor->MaximumTransferLength = 0x10 * PAGE_SIZE;
adapterDescriptor->MaximumPhysicalPages = 0x10;
adapterDescriptor->AlignmentMask = 1;
adapterDescriptor->AdapterUsesPio = TRUE;
adapterDescriptor->AdapterScansDown = FALSE;
adapterDescriptor->CommandQueueing = FALSE;
adapterDescriptor->AcceleratedTransfer = FALSE;
adapterDescriptor->BusType = BusTypeUsb;//BusTypeScsi
adapterDescriptor->BusMajorVersion = 1;
adapterDescriptor->BusMinorVersion = 0;
Irp->IoStatus.Information = outputBufferLength;//sizeof(STORAGE_ADAPTER_DESCRIPTOR);
ntStatus = STATUS_SUCCESS;
BulkUmss_DbgPrint(MidDbgLevel,("sizeof(STORAGE_ADAPTER_DESCRIPTOR) = %d\n",sizeof(STORAGE_ADAPTER_DESCRIPTOR)));
}
}
else if ((query->PropertyId == StorageDeviceProperty) && (query->QueryType == PropertyStandardQuery))
{
if (outputBufferLength >= sizeof(STORAGE_DESCRIPTOR_HEADER))
{
header->Version = sizeof(STORAGE_DEVICE_DESCRIPTOR); //1
header->Size = sizeof(STORAGE_DEVICE_DESCRIPTOR);
Irp->IoStatus.Information = outputBufferLength;//sizeof(STORAGE_DESCRIPTOR_HEADER);
ntStatus = STATUS_SUCCESS;
BulkUmss_DbgPrint(MidDbgLevel,("sizeof(STORAGE_DESCRIPTOR_HEADER)= %d\n",sizeof(STORAGE_DESCRIPTOR_HEADER)));
}
if (outputBufferLength >= sizeof(STORAGE_DEVICE_DESCRIPTOR))
{
deviceDescriptor = (PSTORAGE_DEVICE_DESCRIPTOR)header;
deviceDescriptor->DeviceType = DIRECT_ACCESS_DEVICE;//FILE_DEVICE_MASS_STORAGE
deviceDescriptor->DeviceTypeModifier = 0;
deviceDescriptor->RemovableMedia = TRUE;
deviceDescriptor->CommandQueueing = FALSE;
deviceDescriptor->VendorIdOffset = FIELD_OFFSET(STORAGE_DEVICE_DESCRIPTOR,VendorIdOffset);
deviceDescriptor->ProductIdOffset = FIELD_OFFSET(STORAGE_DEVICE_DESCRIPTOR,ProductIdOffset);
deviceDescriptor->ProductRevisionOffset = FIELD_OFFSET(STORAGE_DEVICE_DESCRIPTOR,ProductRevisionOffset);
deviceDescriptor->SerialNumberOffset = FIELD_OFFSET(STORAGE_DEVICE_DESCRIPTOR,SerialNumberOffset);
deviceDescriptor->BusType = BusTypeUsb;
deviceDescriptor->RawPropertiesLength = 0;
/*
fdoExtension = (PDEVICE_EXTENSION)pdoExtension->ParentFdo->DeviceExtension;
pInquiryBuf = fdoExtension->InquiryData;
deviceDescriptor = (PSTORAGE_DEVICE_DESCRIPTOR)header;
deviceDescriptor->DeviceType = pInquiryBuf->DeviceType;//DIRECT_ACCESS_DEVICE;//FILE_DEVICE_MASS_STORAGE
deviceDescriptor->DeviceTypeModifier = pInquiryBuf->DeviceTypeModifier;//0;
deviceDescriptor->RemovableMedia = pInquiryBuf->RemovableMedia;//TRUE;
deviceDescriptor->CommandQueueing = pInquiryBuf->CommandQueue;//FALSE;
deviceDescriptor->VendorIdOffset = FIELD_OFFSET(STORAGE_DEVICE_DESCRIPTOR,VendorIdOffset);
deviceDescriptor->ProductIdOffset = FIELD_OFFSET(STORAGE_DEVICE_DESCRIPTOR,ProductIdOffset);
deviceDescriptor->ProductRevisionOffset = FIELD_OFFSET(STORAGE_DEVICE_DESCRIPTOR,ProductRevisionOffset);
deviceDescriptor->SerialNumberOffset = FIELD_OFFSET(STORAGE_DEVICE_DESCRIPTOR,SerialNumberOffset);
deviceDescriptor->BusType = BusTypeUsb;
deviceDescriptor->RawPropertiesLength = 0;
*/
Irp->IoStatus.Information = outputBufferLength;
ntStatus = STATUS_SUCCESS;
BulkUmss_DbgPrint(MidDbgLevel,("sizeof(STORAGE_DEVICE_DESCRIPTOR)=%d\n",sizeof(STORAGE_DEVICE_DESCRIPTOR)));
BulkUmss_DbgPrint(MidDbgLevel,("sizeof(INQUIRYDATA)=%d\n",sizeof(INQUIRYDATA)));
}
}
break;
|