c++ - 无法在 Windows 7 中写入物理磁盘?
问题描述
我尝试使用 Visual C++ 2008 编写一个小代码,它将一些数据写入物理磁盘,如下所示:
CFile File;
CFileException FileException;
DWORD dwBytesReturned;
CByteArray Buf;
if (File.Open(_T("\\\\.\\PhysicalDrive1"), CFile::modeWrite | CFile::shareDenyNone | CFile::typeBinary, &FileException))
{
if (::DeviceIoControl(File.m_hFile, FSCTL_LOCK_VOLUME, NULL, 0, NULL, 0, &dwBytesReturned, NULL))
{
Buf.SetSize(512 * 1024);
::memset(Buf.GetData(), 0, Buf.GetSize());
File.Write(Buf.GetData(), Buf.GetSize());
}
File.Close();
}
文件打开成功,调用::DeviceIoControl
也成功。但是,在调用以下代码行时:
File.Write(Buf.GetData(), Buf.GetSize());
我会得到一个例外,上面写着
“访问 \\.\PhysicalDrive1 被拒绝”。
为什么?
笔记:
第一个包含操作系统的磁盘。我尝试写入系统中的第二个硬盘。
写入第二个磁盘时,没有其他进程尝试访问磁盘上的数据。
我已将应用程序提升到"Administrator Privileges"。
谢谢
解决方案
推荐阅读
- regex - 仅当使用 grep 本机正则表达式被两个正则表达式包围时如何提取正则表达式
- asp.net-core - 404 在 Blazor Web 程序集应用程序中找不到 blazor.webassembly.js
- javascript - 如何检查滚动是否低于某个级别?
- python-3.x - 用于解析的 Python 正则表达式
- docker - Docker:我如何格式化 CMD/EntryPoint 以在同一个终端中运行我的客户端和服务器
- windows - nt!KiUnexpectedInterruptShadow 转储 IDT 时
- c# - 从 windows 窗体调用 c++ 函数时出错
- validation - 如果给出验证数据,Keras 如何选择最终模型?
- flutter - 如何在颤振背景下扫描 BLE 设备
- julia - 对元组类型进行别名时的额外内存分配