switch (Srb->PnPAction) {
case StorQueryCapabilities: {
- PSTOR_DEVICE_CAPABILITIES Caps = Srb->DataBuffer;
+ PSTOR_DEVICE_CAPABILITIES_EX Caps = Srb->DataBuffer;
- Caps->Removable = 1;
- Caps->EjectSupported = 1;
+ Caps->Removable = TargetGetRemovable(Target);
+ Caps->EjectSupported = TargetGetRemovable(Target);
Caps->SurpriseRemovalOK = 1;
Caps->UniqueID = 1;
InitData.MultipleRequestPerLu = TRUE;
InitData.HwAdapterControl = AdapterHwAdapterControl;
InitData.HwBuildIo = AdapterHwBuildIo;
+ InitData.FeatureSupport = STOR_FEATURE_FULL_PNP_DEVICE_CAPABILITIES;
status = StorPortInitialize(DriverObject,
RegistryPath,
IN PSCSI_REQUEST_BLOCK Srb
)
{
- PXENVBD_FEATURES Features = FrontendGetFeatures(Target->Frontend);
PXENVBD_DISKINFO DiskInfo = FrontendGetDiskInfo(Target->Frontend);
PINQUIRYDATA Data = Srb->DataBuffer;
ULONG Length = Srb->DataTransferLength;
return;
RtlZeroMemory(Data, Length);
- Data->DeviceType = DIRECT_ACCESS_DEVICE;
+ Data->DeviceType = (DiskInfo->DiskInfo & VDISK_READONLY) ?
+ READ_ONLY_DIRECT_ACCESS_DEVICE :
+ DIRECT_ACCESS_DEVICE;
Data->DeviceTypeQualifier = DEVICE_CONNECTED;
- Data->RemovableMedia = Features->Removable ||
+ Data->RemovableMedia = (DiskInfo->DiskInfo & VDISK_CDROM) ||
(DiskInfo->DiskInfo & VDISK_REMOVABLE);
Data->Versions = 4;
Data->ResponseDataFormat = 2;
return FrontendGetDeviceId(Target->Frontend);
}
+//TARGET_GET_PROPERTY(Removable, BOOLEAN)
+BOOLEAN
+TargetGetRemovable(
+ IN PXENVBD_TARGET Target
+ )
+{
+ return FrontendGetFeatures(Target->Frontend)->Removable;
+}
+
TARGET_GET_PROPERTY(DevicePnpState, DEVICE_PNP_STATE)
//TARGET_GET_PROPERTY(Missing, BOOLEAN)
TARGET_GET_PROPERTY(DeviceObject, PDEVICE_OBJECT)
TARGET_GET_PROPERTY(TargetId, ULONG)
TARGET_GET_PROPERTY(DeviceId, ULONG)
+TARGET_GET_PROPERTY(Removable, BOOLEAN)
TARGET_GET_PROPERTY(DevicePnpState, DEVICE_PNP_STATE)
TARGET_GET_PROPERTY(Missing, BOOLEAN)