我正在使用CreateFile,ReadFile和WriteFile直接访问磁盘的扇区。看来我可以读取所需的任何扇区,但是在写入时,对于16或以上的扇区,我得到ERROR_ACCESS_DENIED。我很茫然地解释为什么我可以写前15个扇区,而不能写其他扇区。
这是在Windows 10上。
请注意,我并未尝试对16以上的每个扇区进行随机抽样,它们似乎都失败了。
int wmain(int argc, WCHAR *argv[])
{
HANDLE hDisk = NULL;
hDisk = CreateFile(
L"\\\\.\\Q:",
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
0,
NULL);
char *rgb = (char *) malloc(512);
BOOL b = FALSE;
DWORD dw = 0;
LONG lo = 0;
LONG hi = 0;
for(int i=0; i<20; i++)
{
hi = 0;
lo = i * 512;
dw = SetFilePointer(hDisk, lo, &hi, FILE_BEGIN);
b = ReadFile(hDisk, rgb, 512, &dw, NULL);
if (b == FALSE)
printf("Cannot read sector %d\r\n", i);
hi = 0;
lo = i * 512;
dw = SetFilePointer(hDisk, lo, &hi, FILE_BEGIN);
b = WriteFile(hDisk, rgb, 512, &dw, NULL);
if (b == FALSE)
printf("Cannot write sector %d\r\n", i);
}
return 0;
}
上面的代码输出:
Cannot write sector 16
Cannot write sector 17
Cannot write sector 18
Cannot write sector 19
为了使内容简短,我省略了错误处理代码。
答案 0 :(得分:0)
我发现了问题。 因为我使用FILE_SHARE_READ打开了驱动器| FILE_SHARE_WRITE,我被拒绝访问磁盘中包含正在使用的卷的部分。 至少那是我的有根据的猜测。
一旦我删除了SHARE标志,并确保我拥有对该驱动器的唯一访问权,就可以读写任何扇区。