首页
社区
课程
招聘
[求助]用ReadFile函数打开磁盘的一些问题
发表于: 2010-4-26 21:46 4697

[求助]用ReadFile函数打开磁盘的一些问题

2010-4-26 21:46
4697
我还是直接贴代码吧
BOOL GetLogicalDriver(HWND hDlg)
{
    static char szBuffer[32] = {0};
	static int index = 0;
	static HANDLE hFile = NULL;
	char szTemp[512] = {0};
    static char szDiskData[512] = {0};
	static DWORD ReadNum = 0;
	char szRootPathName[8] = TEXT("\\\\.\\");
	index = SendDlgItemMessage(hDlg, IDC_COMBO_DRIVE, CB_GETCURSEL, NULL, NULL);
	if (index == CB_ERR)
	    return FALSE;
	SendDlgItemMessage(hDlg, IDC_COMBO_DRIVE, CB_GETLBTEXT, (WPARAM)index, (LPARAM)szBuffer);

   szRootPathName[strlen(szRootPathName)] = szBuffer[strlen(szBuffer)-4];
   szRootPathName[strlen(szRootPathName)] = szBuffer[strlen(szBuffer)-3];
   szRootPathName[strlen(szRootPathName)] = '\0';

   hFile = CreateFile(szRootPathName, GENERIC_WRITE | GENERIC_READ, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
   if (hFile == INVALID_HANDLE_VALUE)
   {
	  MessageBox(hDlg, TEXT("磁盘打开失败"), NULL, MB_OK);
	  memset(szRootPathName, 0, sizeof(szRootPathName));
      return FALSE;
   }

  // SetFilePointer(hFile, 512 * 128, 0, FILE_BEGIN);
   ReadFileEx(hFile, (void *)szTemp, 16, (LPDWORD)&ReadNum, NULL);         
   if (ReadNum != 0)
   {
      wsprintf((char *)szDiskData, TEXT("%0X"), szTemp);
      SetDlgItemText(hDlg, IDC_VIEW, szDiskData);
   } 
   else
   {
	   ReadNum = GetLastError();  // 0x57参数不正确
	   wsprintf(szTemp, TEXT("%0X"), ReadNum);
	   MessageBox(hDlg, szTemp, NULL, MB_OK);
	   MessageBox(hDlg, TEXT("磁盘读取失败"), NULL, MB_OK);
   	   memset(szRootPathName, 0, sizeof(szRootPathName));
   }
   CloseHandle(hFile);
	  return TRUE;
}

前面打开C盘已经成功了,但是每次读取数据的时候总是失败, ReadFile函数一直就是这么用的,不知道哪里出错了,也上网查了下,但还是没有解决,哪位大侠来指教下,万分感谢 WINDOWSXP系统

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
2
如果读取的是卷或者磁盘设备,那么每次读取的大小必须是扇区大小的整数倍,写的时候也是如此~~
调整下缓冲区大小,改为:
ReadFileEx(hFile, (void *)szTemp, 512, (LPDWORD)&ReadNum, NULL);   

还有,CreateFile时最好加上FILE_SHARE_READ标志吧。。。
2010-4-26 21:54
0
雪    币: 173
活跃值: (132)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
3
恩, 可以了, 谢谢
2010-4-26 22:11
0
游客
登录 | 注册 方可回帖
返回
//