【发布时间】:2012-01-31 10:57:24
【问题描述】:
相关的微软文档是:
Blocking Direct Write Operations to Volumes and Disks
CreateFile, remarks on Physical Disks and Volumes
可执行文件是用 C++ 编写的,它调用CreateFile() 打开一个没有文件系统的 SD 卡。在没有管理员权限的情况下,CreateFile() 和连续的 ReadFile() 调用对于 GENERIC_READ 是成功的。
CreateFile 对GENERIC_WRITE 失败,即使具有管理员权限也是如此。在资源管理器中,我在属性 > 兼容性 > 权限级别下设置了以管理员身份运行。我还尝试从管理员 cmd 运行可执行文件(以 Ctrl+Shift+Enter 开头,“管理员:”在窗口标题中,适当提升)。尽管如此,我还是得到了ERROR_ACCESS_DENIED (0x5)。
我是否必须将其他内容传递给CreateFile? 我不知道什么是安全属性,我只是在第 92 行传递 NULL、relevant code is here,在第 48 行传递 here .
或者是否应该设置其他任何东西来以管理员权限运行该进程?
一个相关问题:
Can I get write access to raw disk sectors under Vista and Windows 7 in user mode?
Raw partition access in Windows Vista
How to obtain direct access to raw HD data in C?
Is there a clean way to obtain exclusive access to a physical partition under Windows?
【问题讨论】:
-
如果没有文件系统创建文件应该失败。也许在读取至少一个字节之前它不会失败,而写入则试图在打开时创建一个实际(空)文件。
-
@DannyVarod 阅读就像一个魅力,我已经阅读了大量数据并且数据是正确的。请参阅Microsoft's doc、
CreateFile是处理没有文件系统的驱动器的方法。 -
什么值作为 access 参数传递给
open_device()? -
@wallyk
GENERIC_WRITE,另见line 48。我已经在这个问题上设置了赏金。 -
让我们从基础开始:是否已请求独占写入权限?
标签: c++ .net c winapi windows-7