向硬盘发送security_erase_unit擦除数据,请求大家指点!

solomon_jie 2009-11-23 05:33:04
ATA_PASS_THROUGH_DIRECT yy;

ULONG length = 0,
errorCode = 0,
returned = 0,
sectorSize = 512;
int iBufferLen =256,iyySize;
DWORD dwReturned;

ZeroMemory(&yy,sizeof(ATA_PASS_THROUGH_DIRECT));
yy.Length = sizeof(yy);
yy.AtaFlags = ATA_FLAGS_DATA_OUT;
yy.PathId = 0;
yy.TargetId = 0;
yy.Lun = 0;
yy.ReservedAsUchar = 0;
yy.DataTransferLength = sizeof(yy)+iBufferLen;
yy.TimeOutValue = 3;
yy.ReservedAsUlong = 0;
yy.DataBuffer = new WORD[iBufferLen];
memset(&yy.PreviousTaskFile,0,sizeof(yy.PreviousTaskFile));
memset(&yy.CurrentTaskFile,0,sizeof(yy.CurrentTaskFile));
yy.CurrentTaskFile[6] = 0xEC;

iyySize= sizeof(ATA_PASS_THROUGH_DIRECT)+yy.DataTransferLength;

BOOL status = DeviceIoControl(fileHandle,
IOCTL_ATA_PASS_THROUGH_DIRECT,
&yy,
iyySize,
&yy,
iyySize,
&dwReturned,
FALSE);

if (!status )
{
errorCode = GetLastError();
printf("Error getting device and/or adapter properties; "
"error was %d\n", status);
}

这是我的发送指令代码,发送没有成功,找不到问题在哪里,请大家指点,希望有做过类似项目的朋友们,能不吝指教,给我实例看看,谢谢大家了!
...全文
334 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
solomon_jie 2009-11-23
  • 打赏
  • 举报
回复
是否能判断下我这样来调用此ATA指令是正确的,我试过get硬盘的一些信息是可以的,如果是正确的,发送擦除指令是不是要有一些特别的设置,多谢。
wangk 2009-11-23
  • 打赏
  • 举报
回复
请检查返回值,如果是权限问题请提权,如果是参数问题请参考:
http://msdn.microsoft.com/en-us/library/ms804493.aspx
solomon_jie 2009-11-23
  • 打赏
  • 举报
回复
这里是yy.CurrentTaskFile[6] = 0xF4;

2,643

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧