Я хочу прочитать конкретный сектор (сектор MBR) диска, используя команды ATA в vC++. Я новичок в VC++, поэтому перед отправкой команды на диск я сталкиваюсь с проблемой, используя DeviceIoControl. Я предоставляю код, который я использую, чтобы читать сектор, используя команду Read Sector (s) (0x20).Как прочитать конкретный сектор диска с помощью команды ATA?
BOOL status = FALSE;
PATA_PASS_THROUGH_EX pATAData;
DWORD dataSize = sizeof(ATA_PASS_THROUGH_EX) + 512;
BYTE Buffer[sizeof(ATA_PASS_THROUGH_EX) + 512];
DWORD bytescopied = 0;
pATAData = (ATA_PASS_THROUGH_EX*)Buffer;
ZeroMemory(pATAData,dataSize); // clears the buffer
pATAData->Length = sizeof(ATA_PASS_THROUGH_EX);
pATAData->DataBufferOffset = sizeof(ATA_PASS_THROUGH_EX);
pATAData->DataTransferLength = 512;
pATAData->TimeOutValue = 2;
pATAData->CurrentTaskFile[1] = 0x01;
pATAData->CurrentTaskFile[2] = 0x00;
pATAData->CurrentTaskFile[3] = 0x00;
pATAData->CurrentTaskFile[4] = 0x00;
pATAData->AtaFlags =ATA_FLAGS_DATA_IN;
pATAData->CurrentTaskFile[6] = 0x20; // command Read Sector(s)(0x20)
/* sends the command to the device, **hDevice** is device handle*/
status = DeviceIoControl(hDevice, IOCTL_ATA_PASS_THROUGH, pATAData, dataSize,Buffer, dataSize, &bytescopied, NULL);
Я не могу undersatnd, что неправильно в этом коде и то, что я здесь отсутствует, но это не работает. Что мне здесь не хватает? Если есть проблема с параметрами структуры PATA_PASS_THROUGH_EX, чем сказать, как читать первый сектор (MBR).
Вы вызвали GetLastError, чтобы понять, почему это не удалось? –
Не уверен, что это применимо, поскольку вы не показываете код для открытия устройства, но вы можете взглянуть в любом случае. http://stackoverflow.com/questions/3362037/problem-reading-mbr-with-deviceiocontrol-function –
Почему у этого есть тег 'qt'? Вы можете получить лучшую помощь с другими тегами, такими как: 'device',' hard-drive' или 'sata'. Кроме того, какая ошибка вы получаете? – titusjan