首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何不使用WriteFile到PhysicalDrive (Windows 7)而不获取ERROR_ACCESS_DENIED?

如何不使用WriteFile到PhysicalDrive (Windows 7)而不获取ERROR_ACCESS_DENIED?
EN

Stack Overflow用户
提问于 2011-07-07 09:29:23
回答 3查看 13.7K关注 0票数 8

我正试图为格式化的USB驱动器的每个扇区编写测试模式。有一个逻辑驱动器(例如h:)。此卷是胖格式的,包含要覆盖的数据。另外,我想覆盖整个物理驱动器。该程序运行时的用户权限提高了。

首先,我做了以下工作:

代码语言:javascript
运行
复制
// from the drive letter "h:" I get the physical disk number using
// IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS => "\\.\PhysicalDrive2"

hDevice = ::CreateFile( "\\.\PhysicalDrive2", GENERIC_READ|GENERIC_WRITE, 
  FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL ); 

// get the number of available sectors with IOCTL_DISK_GET_DRIVE_GEOMETRY_EX
// => ulNumberOfSectors

// now I try to write some sectors, e.g. 2 (I want to use a higher value):
WriteFile( hDevice, abBuffer, 2*512, &byteswritten, NULL );

WriteFile的调用在ERROR_ACCESS_DENIED中失败。

如果我写一个扇区,它就能工作。

当我覆盖第一个扇区并插入设备时,Windows想要格式化它。在这种情况下,我的2048个扇区的代码在没有ERROR_ACCESS_DENIED的情况下工作。

我还卸载了CodeProject: Windows 7物理驱动器上的WriteFile中描述的卷,但是这并没有改变任何事情。显然,卷已卸载,因为它在Windows中不再可见。

由于成绩原因,我想写的不只是一个部门。我也担心这个领域的其他问题可能会发生,因为我不完全理解这个问题。

有什么建议吗?

EN

回答 3

Stack Overflow用户

发布于 2012-01-30 09:49:59

我没有遇到不同WriteFile()大小的问题,但我确实解决了

WriteFile():拒绝<ERROR_ACCESS_DENIED/5>对'.\physicaldriveX‘的访问

Windows 7中的设备(通常为USB /SSD)以管理员身份运行(提升权限)如下:

计算机管理->磁盘管理:

  • 卷(H:在您的例子中) ->右键单击->删除卷
  • 磁盘(在本例中为磁盘2) ->右键单击->脱机。
  • 磁盘(在本例中为磁盘2) ->右键单击->联机。

在那之后,我就可以没有问题地给'.\physicaldriveX‘写文章了。

我认为,只要设备上有任何文件系统,Win7就会锁定物理设备(与以前的Windows版本不同),以避免一致性问题。

票数 3
EN

Stack Overflow用户

发布于 2013-11-04 16:55:20

您不能直接访问由挂载文件系统拥有的驱动器的扇区。

请参阅更改文件系统和存储堆栈,以限制直接磁盘访问和直接卷访问。

FSCTL_DISMOUNT_VOLUME的文档描述了覆盖文件系统的以下顺序:

  1. 打开一卷。
  2. 锁定音量。
  3. 格式化音量。
  4. 卸下音量。
  5. 打开音量。
  6. 关闭音量手柄。

您的模式写入操作将在步骤3而不是格式化。

票数 2
EN

Stack Overflow用户

发布于 2013-08-23 00:33:46

另一种方法是使用clean删除磁盘上的所有分区(和所有数据):

代码语言:javascript
运行
复制
C:\> diskpart
Diskpart> list disk

Diskpart> select disk N (where N is your disk number)

Diskpart> clean

Diskpart> exit
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6608466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档