2,640
社区成员
发帖
与我相关
我的任务
分享
if(DeviceIoControl(hDevice,FSCTL_DISMOUNT_VOLUME,NULL,0,NULL,0,&dwOutBytes,(LPOVERLAPPED)NULL))
{
odprintf("ok");
}
wsprintf(PhycialDriver, TEXT("\\\\.\\PhysicalDrive%d"), PhysicalNumber);
BOOL SetDriveMark(DWORD PhysicalNumber, LARGE_INTEGER TotalSector,UCHAR *buf)
{
HANDLE hDevice; // handle to the drive to be examined
DWORD junk; // discard results
TCHAR PhycialDriver[256]={0};
LARGE_INTEGER DistanceToMove, NewPos;
DWORD dwOutBytes;
wsprintf(PhycialDriver, TEXT("\\\\.\\PhysicalDrive%d"), PhysicalNumber);
hDevice = CreateFile(PhycialDriver, // drive to open
GENERIC_READ | GENERIC_WRITE, // access to the drive
FILE_SHARE_READ | // share mode
FILE_SHARE_WRITE,
NULL, // default security attributes
OPEN_EXISTING, // disposition
0, // file attributes
NULL); // do not copy file attributes
if (hDevice == INVALID_HANDLE_VALUE) // cannot open the drive
{
return (FALSE);
}
DistanceToMove.QuadPart = (TotalSector.QuadPart-1)*512;
if(SetFilePointerEx(hDevice, DistanceToMove, &NewPos, FILE_BEGIN) == 0)
{
odprintf("FilePosition fail %d\n", GetLastError());
CloseHandle(hDevice);
return (FALSE);
}
odprintf("FilePosition new %I64d\n", NewPos);
if(DeviceIoControl(hDevice,FSCTL_DISMOUNT_VOLUME,NULL,0,NULL,0,&dwOutBytes,(LPOVERLAPPED)NULL))
{
odprintf("ok");
}
if(WriteFile(hDevice, buf, 512, &junk, NULL) == 0)
{
odprintf("WriteFile fail %d\n", GetLastError());
CloseHandle(hDevice);
return (FALSE);
}
CloseHandle(hDevice);
return TRUE;
}