怪事:很远的扇区可以读,近处的却读不到.请帮我看一下代码,谢谢关注!
int lmn()
{
char* buffer = (char*)malloc (1024*1); //用来保存读写数据的缓冲区
HANDLE hDevice ;
// 求出磁盘总磁区数Totalsectors
_ULARGE_INTEGER FreeAv,TotalBytes,FreeBytes;
if ( GetDiskFreeSpaceEx("C:",&FreeAv,&TotalBytes,&FreeBytes)==FALSE )
{return 0;}
ULONGLONG point;
point=(TotalBytes.HighPart<<32)+TotalBytes.LowPart-512; //这是一个比较大的位置,能成功
DWORD readLow,readHigh;
readHigh = point>>32;
readLow = (point<<32)>>32;
// win 2k code
char _devicename[] = "\\\\.\\C:";
hDevice = CreateFile(_devicename,GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
if (hDevice == INVALID_HANDLE_VALUE) return 0;
// 好象函数 SetFilePointerEx() 对 ReadFileEx() 已没有必要了
// if (! SetFilePointerEx (hDevice, point, &NEWpoint, FILE_BEGIN) )
// return 0;
OVERLAPPED overlap;
overlap.Offset = readLow;
overlap.OffsetHigh =readHigh;
// overlap.Offset =(DWORD)1; // 问题在此处,如果去掉此句的注释使它有效,并且值为0,能成功,其它较小的值1,2,3,...均不成功!
// overlap.OffsetHigh =(DWORD)0;
overlap.hEvent = NULL; //使用告警函数时无需要使用事件
if (!ReadFileEx(hDevice,buffer,512*1,&overlap,NULL))
{
CloseHandle(hDevice);
return 0;
}
CloseHandle(hDevice);
return strlen(buffer);
}