我编写了一个磁盘实用程序,可以擦除整个物理驱动器。它使用windows文件api,调用:
destFile = CreateFile("\\\\.\\PhysicalDrive1",
GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL, OPEN_EXISTING,createflags, NULL);
然后只调用WriteFile
,并确保以扇区的倍数写入,即512字节。
这在过去,在XP上,甚至在Win7 RC上运行良好,您所要做的就是确保以管理员身份运行它。
但现在我有零售Win7专业版,它不再适用了!驱动程序仍然可以正常写入,但在成功打开的驱动器上调用WriteFile
现在会失败!
有谁知道为什么会这样?它可能与使用共享标志打开它有关吗?这总是我以前做过的,而且它起作用了。难道现在正在分享驱动器吗?阻止写入?有没有办法正确“卸载”一个驱动器,或至少其上的分区,以便我可以独占访问它?
以前工作的其他一些工具也不再有,但有些工具,如WD Diagnostic的擦除功能。在擦除驱动器之后,我的工具也可以使用它!让我相信我需要首先对驱动器做一些“卸载”过程,以释放写入它的权限。
有什么想法吗?
更新
从WriteFile
返回的错误代码为“5”,ERROR_ACCESS_DENIED
但是,如果我首先使用WD Diag'擦除'驱动器,我可以访问并写入驱动器。当我再次初始化驱动器并给它一个分区时,我会回到ERROR_ACCESS_DENIED
错误。
答案 0 :(得分:1)
这几乎肯定与通过更改页面文件中的扇区来防止针对驱动程序签名发现的攻击有关。它将阻止写入包含分区的磁盘区域。
请参阅http://msdn.microsoft.com/en-us/library/aa365747%28VS.85%29.aspx并查看以文本“如果您直接写入具有已装入文件系统的卷”的信息,基本上您必须锁定磁盘的卷才能写入其扇区。