加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 电商 > 正文

教你WriteFile写磁盘扇区87错误的办理方案

发布时间:2018-10-29 21:52:32 所属栏目:电商 来源:本站整理
导读:本日在写个器材,成果是将一些数据写到磁盘的绝对扇区上. 可是发明ReadFile没题目,然则WriteFile老是报87错误(参数不正确). Google上查了一会,发明遇到题目的人不少,痛惜没有正确谜底.... 没辙,照旧啃MSDN,终于照旧本身办理了~呵呵 赶忙记下来,省得忘了...

本日在写个器材,成果是将一些数据写到磁盘的绝对扇区上.

可是发明ReadFile没题目,然则WriteFile老是报87错误(参数不正确).

Google上查了一会,发明遇到题目的人不少,痛惜没有正确谜底....

没辙,照旧啃MSDN,终于照旧本身办理了~呵呵

赶忙记下来,省得忘了...

着实首要是写入的数据巨细,必需是BytesOfSector巨细的倍数,一样平常是512字节,ReadFile却无所谓...

其它,MSDN上还说,WriteFile前最好先用FSCTL_LOCK_VOLUME可能FSCTL_DISMOUNT_VOLUME将磁盘锁定或卸载,不外我试下来仿佛没什么影响...

代码摘录如下:

 1 UINT CDevInfo::Write(LPVOID pData, UINT nSize)
 2 {
 3     if (!pData && nSize <= 0)
 4         return 0;
 5
 6     TCHAR szDevName[30];
 7     _stprintf(szDevName, _T(".PHYSICALDRIVE%d"), m_nDevNum); // DeviceNumber
 8
 9     HANDLE hDev = ::CreateFile(szDevName, GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, NULL, NULL);
10     if (hDev == INVALID_HANDLE_VALUE)
11         return 0;
12
13     DWORD dwCount;
14     if (!::DeviceIoControl(hDev, FSCTL_LOCK_VOLUME, NULL, 0, NULL, 0, &dwCount, NULL))
15         return 0;
16
17     DWORD dwWritten(0);
18     ::SetFilePointer(hDev, SECTOR_NUM * GetSectorSize(), NULL, FILE_BEGIN);
19     if (!::WriteFile(hDev, pData, nSize, &dwWritten, NULL))
20         dwWritten = 0;
21    
22     ::DeviceIoControl(hDev, FSCTL_UNLOCK_VOLUME, NULL, 0, NULL, 0, &dwCount, NULL);
23     ::CloseHandle(hDev);
24     return dwWritten;
25 }

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读