我尝试使用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的访问被拒绝”。
为什么?
注意:
包含操作系统的第一个磁盘。我尝试写入系统中的第二个硬盘。
写入第二张磁盘时,没有其他进程尝试访问该磁盘上的数据。
我已将该应用程序提升为“管理员权限” 。
谢谢