Win7/10 下直接对"\\\\.\\PhysicalDriveX"设备WriteFile 被拒绝

fly4free 2017-09-22 11:14:34
这个设备就是U盘。其实前几天代码还在工作,今天不工作了。(GetLastError() = 5,但是确实是管理员启动的VS)
前几天有时候也不工作,重启系统就好了,今天重启也不好使了。

1. dev = CreateFile( TargetDiskDeviceName,
GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_DEVICE|FILE_ATTRIBUTE_NORMAL, NULL);

2 DeviceIoControl (dev, IOCTL_DISK_CREATE_DISK ...)

3. 然后 WriteFile 一个 512 字节的 0x00 数据到 磁盘的首个扇区

34 最后 DeviceIoControl (dev, IOCTL_DISK_UPDATE_PROPERTIES, ... )

上面的步骤在一个函数里,调用完这个函数,还调了其他函数,比如在指定扇区写一些自己的数据...

这应该怎么弄,才是正确的姿势呢?

...全文
1784 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
这不是鸭头 2017-09-24
  • 打赏
  • 举报
回复
引用 8 楼 fly4free 的回复:
[quote=引用 7 楼 arpnet99 的回复:] 写这种程序,像360这类的东西就应该全部关闭。
话说这个程序还是要运行在客户环境的,你不能让客户手动关闭360之类的软件吧 怎么你也得弄明白,安全类软件和自己的软件的关系吧,到时候出了问题也好解释。 昨天把安全软件在线升了个级,不用重启,之前不好使,升级后就好使了。 现在的某些安全类软件,对于有些操作,不通知你就拦截,还找不到放行的设置地方。[/quote] 有些操作是无法避免360的阻拦,要想不被拦,就得给360交钱。
fly4free 2017-09-24
  • 打赏
  • 举报
回复
引用 7 楼 arpnet99 的回复:
写这种程序,像360这类的东西就应该全部关闭。
话说这个程序还是要运行在客户环境的,你不能让客户手动关闭360之类的软件吧 怎么你也得弄明白,安全类软件和自己的软件的关系吧,到时候出了问题也好解释。 昨天把安全软件在线升了个级,不用重启,之前不好使,升级后就好使了。 现在的某些安全类软件,对于有些操作,不通知你就拦截,还找不到放行的设置地方。
这不是鸭头 2017-09-23
  • 打赏
  • 举报
回复
引用 6 楼 fly4free 的回复:
[quote=引用 5 楼 zhao4zhong1 的回复:] 建议用API Monitor软件监视WinHex是怎么调用相关API的。
感谢!这个工具貌似挺有用,不过我暂时用不上了 因为我知道原因了,因为我要写的位置是MBR的位置,——所以被我装的安全软件拦截了。 前几天每次运行时会有提示框,让你选择同意,或者拒绝。今天一直没出现,我都忘了。直到我又运行了一遍【我程序的参考开源项目】,偶然出了提示框才意识到这个问题。 不过不明白,为何winhex 没有提示呢…… [/quote]写这种程序,像360这类的东西就应该全部关闭。
oyljerry 2017-09-22
  • 打赏
  • 举报
回复
对应的U盘是否有问题,不能写入等。换一个试试
xiaobai_8001 2017-09-22
  • 打赏
  • 举报
回复
U盘挂了?换个U盘试试看。
fly4free 2017-09-22
  • 打赏
  • 举报
回复
引用 5 楼 zhao4zhong1 的回复:
建议用API Monitor软件监视WinHex是怎么调用相关API的。
感谢!这个工具貌似挺有用,不过我暂时用不上了 因为我知道原因了,因为我要写的位置是MBR的位置,——所以被我装的安全软件拦截了。 前几天每次运行时会有提示框,让你选择同意,或者拒绝。今天一直没出现,我都忘了。直到我又运行了一遍【我程序的参考开源项目】,偶然出了提示框才意识到这个问题。 不过不明白,为何winhex 没有提示呢……
赵4老师 2017-09-22
  • 打赏
  • 举报
回复
建议用API Monitor软件监视WinHex是怎么调用相关API的。
fly4free 2017-09-22
  • 打赏
  • 举报
回复
奇怪的是 ,我刚才用 WinHex 工具对磁盘1扇区进行写入,却很正常,自己的程序就不行 一定是姿势不对,谁知道应该怎么弄?
fly4free 2017-09-22
  • 打赏
  • 举报
回复
换了三个好使的U盘,都是如此。 证明好使过程: 格式化,拷入拷出文件,再格式化再拷贝文件。 因为格式化就是写包括第一个扇区(分区引导记录)的若干扇区,我自己的程序就是覆写的这里,所以如果U盘首扇区硬件出现问题,系统格式化也会失败的

2,641

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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