今天在写个工具,功能是将一些数据写到磁盘的绝对扇区上.

但是发现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 }

转载于:https://www.cnblogs.com/sephil/archive/2011/03/18/1988350.html

WriteFile写磁盘扇区是87错误的原因相关推荐

  1. 计算机io错误,小打小闹,磁盘扇区I/O错误解决,转走

    事先声明我是计算机菜鸟,我很懒(现在才写). 一周前,我意外将I/O(扇区)错误解决,没用fbdisk,没用低格.没能用网上提供的任何其他方式解决,被我一次不小心又带着破釜沉舟的勇气的操作解决.我直观 ...

  2. windows下修改磁盘扇区数据

    Windows系统提供了文件系统,通常应用程序读写文件都是调用CreateFile函数来实现,不会直接读写磁盘数据,但某些特殊目的中,我们需要读取磁盘扇区数据,查看是否包含某些关键字,并且有可能擦除这 ...

  3. WriteFile操作时返回87错误

    调用 WriteFile写数据时出错,用GetLastError得到错误代码为87(无效参数). 代码片段如下: if ((!WriteFile(m_hDevEx,pBuf,size,&Wri ...

  4. python读写磁盘扇区数据_C++-如何直接读取Windows磁盘扇区的数据?

    1.通过CreateFile系列来完成 读写扇区可以通过CreateFile打开磁盘逻辑分区,还要通过SetFilePointer以文件操作的方式把指针移到要操作的磁盘扇区开始处,在定位到要访问的扇区 ...

  5. python读写磁盘扇区数据_linux 读写磁盘扇区

    广告关闭 云服务器1核2G首年99年,还有多款热门云产品满足您的上云需求 为何更改为 4096 字节扇区? 如果您熟悉磁盘结构,就知道磁盘是被分解成扇区 的,大小通常是 512 字节: 所有读写操作均 ...

  6. Windows物理磁盘扇区读写示例总结

    Windows物理磁盘扇区读写示例 主要功能: 1. 根据逻辑磁盘盘符获取物理磁盘号: 2. 物理磁盘扇区计算: 3. 物理磁盘扇区读写: void CPDiskOprateDlg::OnBnClic ...

  7. python输入代码界面通常_vscode写python时的代码错误提醒和自动格式化的方法

    python的代码错误检查通常用pep8.pylint和flake8,自动格式化代码通常用autopep8.yapf.black.这些工具均可以利用pip进行安装,这里介绍传统的利用pip.exe安装 ...

  8. Redis 写磁盘出错 Cannot allocate memory

    故障简介 早上查看Redis日志的时候发现Redis一直在报错 [1524] 24 Mar 10:00:56.037 * 1 changes in 900 seconds. Saving... [15 ...

  9. 写磁盘太慢导致服务超时问题分析

    服务逻辑: 接收客户端的请求参数,写文件到本地磁盘 问题发现: 客户端报超时, 每天日志理论上是有几万条的,但是近几天只收到了几条 问题分析: 其实最开始的时候,以为是服务端处理不过来导致的,因为最开 ...

最新文章

  1. java 自动登录功能_jsp实现用户自动登录功能
  2. 《学得少考得好》读书笔记
  3. HDU 1426 Sudoku Killer
  4. python opencv 内存泄露_解决python中显示图片的plt.imshow plt.show()内存泄漏问题
  5. WebService的两种方式SOAP和REST比较
  6. 立体视觉(Stereo Vision)-本征矩阵(essential matrix)和基本矩阵(fundamental matrix)
  7. 前端MVC学习总结(三)——AngularJS服务、路由、内置API、jQueryLite
  8. python爬虫什么意思-Python为什么叫爬虫?Python与爬虫有什么关系?
  9. 《数据结构题集》2.12
  10. Coding and Paper Letter(五十七)
  11. 火狐浏览器50Linux32位,火狐浏览器32位完整离线安装包下载
  12. Barefoot Networks进军白盒市场
  13. label mpchart 饼图_ECharts饼图属性设置
  14. 【pygame】之小球基础
  15. 创新与赛道定义 ——产品定义和建立赛道是个技术活
  16. 最新版去水印小程序源码
  17. c++ eos智能合约开发_EOS智能合约开发为何编译成WebAssembly?
  18. 海河人才计划落户天津记录
  19. 查看PCIE带宽的信息
  20. 统信UOS arm平台用户,是时候告别网页版微信​了!

热门文章

  1. 0x0000007F蓝屏问题摸索解决-没有完成
  2. 基于指数平滑对心电信号进行PQRST模拟(第二种方案)
  3. flink的scala版本的wordcount+flink没有输出结果的几种原因
  4. Spark中Data skew(数据倾斜)Java+Python+Scala三种接口完整代码
  5. ubuntu19.10下面的redis的启动与关闭
  6. xfce4设置屏保/锁屏时间
  7. Jacobian vector products(转载+翻译+代码+解读)
  8. raid1 热备盘 linux,Centos 6.5 RAID1加热备盘
  9. 可逆素数编程c语言,巧用C语言求四位的可逆素数
  10. java 类无法实例_Java无法从类实例访问类方法