Win XP停,IOCTL_ATA_PASS_THROUGH的使用?
Win XP下,IOCTL_ATA_PASS_THROUGH的使用?!!急!!
想编写C++程序,想SATA Disk发送ATA Command,如READ/WRITE SECTORS,Download等。查了些资料,发现IOCTL_ATA_PASS_THROUGH可以发送ATA Command,但是我写了个小Code,总是不能成功呢?求大神解惑!!!
或者,请大神告诉我一个可以在Win Xp下发送ATA Command的方法。PS:我不是要发IDENTIFY DEVICE这个指令,而是发送如READ SECTORS, WRITE SECTORS, DOWNLOAD等指令的方法!!!!万分感谢!!!!
Code如下。直接使用WDK进行编译!
HANDLE hDevice = CreateFile("\\\\.\\PhysicalDrive0", GENERIC_READ|GENERIC_WRITE,
0, NULL, OPEN_EXISTING, 0, NULL);
// 这一步是成功的,我可以打开Port
ATA_PASS_TRHOUGH_EX inputBuffer;
ULONG inputBufferSize = sizeof(ATA_PASS_THROUGH_EX);
inputBuffer.Length = sizeof(ATA_PASS_THROUGH_EX);
inputBuffer.AtaFlags = ATA_FLAGS_DATA_IN;
inputBuffer.DataTransferLength = 512; // 1 sector
inputBuffer.DaatBufferSize = 0;
inputBuffer.CurrentTaskFile[0] = 0; // feature reg
inputBuffer.CurrentTaskFile[1] = 1; // sector count reg
inputBuffer.CurrentTaskFile[2] = 0x3f; // sector number reg
inputBuffer.CurrentTaskFile[3] = 0; // cyl low reg
inputBuffer.CurrentTaskFile[4] = 0; // cyl high reg
inputBuffer.CurrentTaskFile[5] = 0xe0; // device reg
inputBuffer.CurrentTaskFile[6] = 0x20; // commang reg
inputBuffer.CurrentTaskFile[7] = 0;
UCHAR *outputBuffer;
ULONG outputBufferSize = 512;
ULONG length = outputBuffer + sizeof(ATA_PASS_THROUGH_EX);
BOOL status;
status = DeviceIoControl(hDevice,
IOCTL_ATA_PASS_THROUGH,
想编写C++程序,想SATA Disk发送ATA Command,如READ/WRITE SECTORS,Download等。查了些资料,发现IOCTL_ATA_PASS_THROUGH可以发送ATA Command,但是我写了个小Code,总是不能成功呢?求大神解惑!!!
或者,请大神告诉我一个可以在Win Xp下发送ATA Command的方法。PS:我不是要发IDENTIFY DEVICE这个指令,而是发送如READ SECTORS, WRITE SECTORS, DOWNLOAD等指令的方法!!!!万分感谢!!!!
Code如下。直接使用WDK进行编译!
HANDLE hDevice = CreateFile("\\\\.\\PhysicalDrive0", GENERIC_READ|GENERIC_WRITE,
0, NULL, OPEN_EXISTING, 0, NULL);
// 这一步是成功的,我可以打开Port
ATA_PASS_TRHOUGH_EX inputBuffer;
ULONG inputBufferSize = sizeof(ATA_PASS_THROUGH_EX);
inputBuffer.Length = sizeof(ATA_PASS_THROUGH_EX);
inputBuffer.AtaFlags = ATA_FLAGS_DATA_IN;
inputBuffer.DataTransferLength = 512; // 1 sector
inputBuffer.DaatBufferSize = 0;
inputBuffer.CurrentTaskFile[0] = 0; // feature reg
inputBuffer.CurrentTaskFile[1] = 1; // sector count reg
inputBuffer.CurrentTaskFile[2] = 0x3f; // sector number reg
inputBuffer.CurrentTaskFile[3] = 0; // cyl low reg
inputBuffer.CurrentTaskFile[4] = 0; // cyl high reg
inputBuffer.CurrentTaskFile[5] = 0xe0; // device reg
inputBuffer.CurrentTaskFile[6] = 0x20; // commang reg
inputBuffer.CurrentTaskFile[7] = 0;
UCHAR *outputBuffer;
ULONG outputBufferSize = 512;
ULONG length = outputBuffer + sizeof(ATA_PASS_THROUGH_EX);
BOOL status;
status = DeviceIoControl(hDevice,
IOCTL_ATA_PASS_THROUGH,