怪事:很远的扇区可以读,近处的却读不到.请帮我看一下代码,谢谢关注!

LWH006 2003-08-30 09:12:15
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);
}
...全文
34 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
LWH006 2003-08-31
  • 打赏
  • 举报
回复
谢谢各位的解答.
idontlikenickname 2003-08-30
  • 打赏
  • 举报
回复


DWORD A 32-bit unsigned integer or the address of a segment and its associated offset.

Jinhao 2003-08-30
  • 打赏
  • 举报
回复
我也没找到DWORD的原型,但我认为是无符号的long,你可以看看这个代码
#include<iostream>
#include<windows.h>
using namespace std;

int main()
{
DWORD i=0;
DWORD a;
while(1)
{
a=i++;
if(a>i)
{
cout<<i<<endl;
if(i<0) {cout<<-10<<endl;break;}
}

}
}
如果只输出:0,那么DWORD就是无符号型的
LWH006 2003-08-30
  • 打赏
  • 举报
回复
overlap.Offset 必须是512的倍数,给个什么1,2,3 什么的就不行,当然0是正好符合条件的.

顺便问另一个问题:DWORD 的原型定义是怎样的? 我这里翻书也没有,记得它是无符号的,今天出错的一个地方,它又象是有符号的了。谢谢!
idontlikenickname 2003-08-30
  • 打赏
  • 举报
回复


why?

idontlikenickname 2003-08-30
  • 打赏
  • 举报
回复


why?

LWH006 2003-08-30
  • 打赏
  • 举报
回复
已经知道原因了.

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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