c++ - WriteFile error #5 "denied access"win Vista/7 下

标签 c++ winapi fat32

我在谷歌上搜索了很多,但找不到这个问题的任何答案...

我有一个 C++ 控制台应用程序,它读取 1GB SD 卡,修复未正确关闭的文件并相应地写入 FAT 表。 SD 卡最初由定制设备中的固件写入。 它在 Xp 之前工作正常,在 Win Vista/7 中停止工作。 我尝试提升权限:在管理员帐户类型中,我使用“以管理员身份运行”方法启动了一个 cmd 窗口,但没有成功。 我还尝试了一个要求 highestAvailable 特权的 list ,但没有成功。

我在一些帖子中读到“Windows Vista 根本不允许您从用户模式进程访问磁盘。有人知道绕过这种行为的任何方法吗?

我正在研究解决方法,但我想知道这是否不可能

编辑:

这是我在这里的第一篇文章,所以我不太了解链接问题......但我根本不关心任何垃圾邮件......只是在社区驱动的网站上提问:)

代码看起来像

hDevice = CreateFile(buffer,GENERIC_READ | GENERIC_WRITE,
        FILE_SHARE_READ | FILE_SHARE_WRITE,NULL, OPEN_EXISTING,0,NULL); 

然后我从 SD 中读取 BTB 信息并查找和未正确关闭的文件。

最后在尝试写入 SD 时

WriteFile(hDevice,buffer,SD_SECTOR_SIZE, &temp, 0)

我收到拒绝访问(错误 #5)

CreateFile() 上的字符串是\.\g:因为 g 字母对应于我机器上的 SD 卡。一切正常,正如我之前所说,它可以在 XP 上运行。我还尝试使用:DeviceIoControl 和 FSCTL_LOCK_VOLUME,但会出现内存故障错误。

希望这有助于理解并感谢任何帮助

最佳答案

我认为这是由于路径字符串“buffer”造成的;我遇到了同样的问题。 您用于获取设备访问权限的路径需要类似于“\\.\PhysicalDrive%d” %d 是驱动器的十进制数。

在 Vista 中,此字符串是区分大小写的。 检查拼写。您还需要管理员权限,就像以前在 XP 中一样。

对于卷,。这封信需要大写 例如“\\.\G:”

另请注意,将 SD 卡作为设备而不是卷进行访问要好得多,因为如果 Windows 挂载它,可能会挂载带有写入缓存的文件系统。

此外:我忘了提到您读取/写入数据的缓冲区应该是页面对齐的,并且读取是扇区大小的倍数。 VirtualAlloc() 做这个

关于c++ - WriteFile error #5 "denied access"win Vista/7 下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3600853/

相关文章:

c++ - 使用 STL vector 管理 opengl 缓冲区对象

java - 3D 模型移动,找到移动 3d 模型的更好方法

c++ - 需要 Volume Shadow Copy API 来卡住 Exchange Writers

linux - 如何将 64GB USB 的文件系统从 FAT32 更改为允许我将 35GB 文件从 x86_64 Linux 机器放入 USB 的系统?

python - 使用 Python 将 USB 驱动器格式化为 FAT32

python - 使用多种文件系统类型 : Python won't escape properly?

c++ - 为什么在 c/c++ 中,开关的优化方式与链式 if else 不同?

winapi - 使用 Windows Hook 禁用按键

c++ - 在 DirectShow 的不同流中寻找

c++ - 抽象类 : invalid abstract return type for member function ‘virtual...’