Srb->SrbStatus = SRB_STATUS_ERROR;
if (Data == NULL)
- return;
+ goto fail1;
RtlZeroMemory(Data, Length);
if (Length < sizeof(READ_CAPACITY_DATA))
- return;
+ goto fail2;
if (Cdb_PMI(Srb) == 0 && Cdb_LogicalBlock(Srb) != 0)
- return;
+ goto fail3;
SectorCount = DiskInfo->SectorCount;
SectorSize = DiskInfo->SectorSize;
Srb->DataTransferLength = sizeof(READ_CAPACITY_DATA);
Srb->SrbStatus = SRB_STATUS_SUCCESS;
+
+ return;
+
+fail3:
+ Error("fail3\n");
+fail2:
+ Error("fail2\n");
+fail1:
+ Error("fail1\n");
}
static DECLSPEC_NOINLINE VOID
Srb->SrbStatus = SRB_STATUS_ERROR;
if (Data == NULL)
- return;
+ goto fail1;
RtlZeroMemory(Data, Length);
- if (Length < sizeof(READ_CAPACITY16_DATA))
- return;
+ if (Length < sizeof(READ_CAPACITY_DATA_EX))
+ goto fail2;
if (Cdb_PMI(Srb) == 0 && Cdb_LogicalBlock(Srb) != 0)
- return;
+ goto fail3;
SectorCount = DiskInfo->SectorCount;
SectorSize = DiskInfo->SectorSize;
Data->LogicalBlockAddress.QuadPart = _byteswap_uint64(SectorCount - 1);
Data->BytesPerBlock = _byteswap_ulong(SectorSize);
- Data->LogicalPerPhysicalExponent = (UCHAR)LogicalPerPhysicalExponent;
- Srb->DataTransferLength = sizeof(READ_CAPACITY16_DATA);
+ if (Length == sizeof(READ_CAPACITY16_DATA))
+ Data->LogicalPerPhysicalExponent = (UCHAR)LogicalPerPhysicalExponent;
+ else
+ Length = sizeof(READ_CAPACITY_DATA_EX);
+
+ Srb->DataTransferLength = Length;
Srb->SrbStatus = SRB_STATUS_SUCCESS;
+
+ return;
+
+fail3:
+ Error("fail3\n");
+fail2:
+ Error("fail2\n");
+fail1:
+ Error("fail1\n");
}
static FORCEINLINE VOID