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,
                            &inputBuffer, 
                            inputBufferSize,
                            outputBuffer,
                            length,
                            &returned,
                            FALSE);

  if(!status) {
   ULONG errorcode = GetLastError();}
 
  到这里,我每次运行,得到的errorcode都是87,即参数不正确。实在不知道哪个参数有问题???求达人解答!!!或者,告诉个其他能在Win XP下,发送ATA Command(WRITE/READ SECTORS)的方法!!!!谢谢



------解决方案--------------------
  到这里,我每次运行,得到的errorcode都是87,即参数不正确。实在不知道哪个参数有问题???求达人解答!!!或者,告诉个其他能在Win XP下,发送ATA Command(WRITE/READ SECTORS)的方法!!!!谢谢Win XP下,IOCTL_ATA_PASS_THROUGH的使用?解决方案