最近在做一个硬盘加密的项目,需要向硬盘发送ATA指令,但怎么也发不成功,要不返回错误代码50:Not support,或者5:Access is denied.所以请求各位的帮助!先谢过大家了
解决方案 »
- 反对日本成为安理会常任理事国全球华人大签名:sign.sjwar.org.请大家积极参与,目前已有9W多人.希望大家支持!抵制日货,从我做起!
- 一个有挑战性的多文档问题,大侠请进
- 简单问题。很快给分,谢谢
- 帮帮忙呀 在对话框中间 如何才能实现(当按下enter键以后自动跳到下一个控键) 帮帮忙呀帮帮忙呀帮帮忙呀帮帮忙呀帮帮忙呀帮帮忙呀帮帮忙
- 送掉500分,哪位给看看咱的socket程序,一个http服务器
- 微调按钮与编辑控件使用的问题?
- 关于CTreeCtrl控件的问题
- 已有一个activeX控件(xxx.ocx),在win7+IE8下不能正常调用,应该如何解决?应该做成IE的加载项吗?
- ADO 内存消耗问题
- 大虾Help me!!!
- Active control嵌入网页的问题-奇怪
- 关于WritePrivateProfileString写中文的问题!("USER","Department","前台",InitFileName);
{
BOOL status;
HANDLE hDev;
ULONG rByte;
PUCHAR dataBuffer = NULL; ULONG sectorSize = 512;
ULONG alignmentMask = 0; hDev = CreateFile( driverName, // Object Name: Point Physical HDD 0
0, // Access Mode: 0 for Devices
FILE_SHARE_READ | FILE_SHARE_WRITE, // Shared Mode:
0, // Security Attributes: NULL can not be inherited(繼承)
OPEN_EXISTING, // Creation Disposition
0, // File flags and attributes
NULL); // Do not copy file attributes
if (hDev == INVALID_HANDLE_VALUE)
{
return FALSE;
} dataBuffer = AllocateAlignedBuffer(sectorSize,alignmentMask); ATA_PASS_THROUGH_DIRECT_WITH_BUFFERS ab;
memset(&ab, 0, sizeof(ab));
ab.aptd.Length = sizeof(ATA_PASS_THROUGH_DIRECT);
ab.aptd.TimeOutValue = 10;
unsigned size = offsetof(ATA_PASS_THROUGH_DIRECT_WITH_BUFFERS, ucSenseBuf);
ab.aptd.AtaFlags = ATA_FLAGS_DATA_IN;
ab.aptd.DataTransferLength = 512;
size += 512;
ab.aptd.DataBuffer = dataBuffer;
ab.ucSenseBuf[0] = 0xcf;
ab.aptd.CurrentTaskFile[1] = 0x01;
ab.aptd.CurrentTaskFile[3] = 0x06;
ab.aptd.CurrentTaskFile[4] = 0;
ab.aptd.CurrentTaskFile[5] = 0;
ab.aptd.CurrentTaskFile[6] = 0x20;
status = DeviceIoControl( hDev,
IOCTL_ATA_PASS_THROUGH,
&ab,
size,
&ab,
size,
&rByte,
NULL);
if (!status) //
{
long err = GetLastError();
return FALSE;
} return TRUE;
}