diff --git a/src/SmartArrayControllerTool.cpp b/src/SmartArrayControllerTool.cpp index 11cfb46..462c3e0 100644 --- a/src/SmartArrayControllerTool.cpp +++ b/src/SmartArrayControllerTool.cpp @@ -124,18 +124,23 @@ int wmain(int argc, wchar_t* argv[]) ULONG length = 0, returned = 0; SCSI_PASS_THROUGH_WITH_BUFFERS sptwb; + BYTE cdb[] = { 0x12, 0x00, 0x00, 0x00, 0xFF, 0x00 }; // SCSI Inquiry CDB + ZeroMemory(&sptwb, sizeof(SCSI_PASS_THROUGH_WITH_BUFFERS)); sptwb.spt.Length = sizeof(SCSI_PASS_THROUGH); sptwb.spt.PathId = 0; sptwb.spt.TargetId = 0; sptwb.spt.Lun = 0; - sptwb.spt.CdbLength = 10; + sptwb.spt.CdbLength = ARRAYSIZE(cdb); sptwb.spt.SenseInfoLength = SPT_SENSE_LENGTH; sptwb.spt.DataIn = SCSI_IOCTL_DATA_IN; sptwb.spt.DataTransferLength = SPTWB_DATA_LENGTH; sptwb.spt.TimeOutValue = 120; sptwb.spt.DataBufferOffset = offsetof(SCSI_PASS_THROUGH_WITH_BUFFERS, ucDataBuf); sptwb.spt.SenseInfoOffset = offsetof(SCSI_PASS_THROUGH_WITH_BUFFERS, ucSenseBuf); + + memcpy(sptwb.spt.Cdb, cdb, sizeof(cdb)); + //sptwb.spt.Cdb[0] = 0x26; // SCSIOP_READ //sptwb.spt.Cdb[6] = 0x11; // @@ -144,11 +149,11 @@ int wmain(int argc, wchar_t* argv[]) length = offsetof(SCSI_PASS_THROUGH_WITH_BUFFERS, ucDataBuf) + sptwb.spt.DataTransferLength; - /*std::wcout << std::dec + std::wcout << std::dec << L"Total struct size: " << sizeof(SCSI_PASS_THROUGH_WITH_BUFFERS) << L", Calculated length: " << length << L", Header length: " << sptwb.spt.Length - << std::endl;*/ + << std::endl; BOOL ret = DeviceIoControl( handle, @@ -163,10 +168,10 @@ int wmain(int argc, wchar_t* argv[]) if (ret) { - std::wcout << L"Request succeeded" << std::endl; + std::wcout << L"Request succeeded (bytes returned: " << returned << L")" << std::endl; std::wcout << std::endl; - const std::vector buffer((PUCHAR)&sptwb + sptwb.spt.DataBufferOffset, (PUCHAR)&sptwb + sptwb.spt.DataBufferOffset + sptwb.spt.DataTransferLength); + const std::vector buffer(sptwb.ucDataBuf, sptwb.ucDataBuf + length); std::wostringstream ss; @@ -279,4 +284,4 @@ int wmain(int argc, wchar_t* argv[]) #endif CloseHandle(handle); - } +}