我想写个分区逐扇区扫描的功能,之前使用CreateFile(“\\\\.\\D:”,...),是可以的,后来考虑到用ReadFile,WriteFile效率太差,决定一试内存映射文件。
但问题来了,CreateFile()这一步是成功的,但到了CreateFileMapping()时总报错,用GetLastError()查了下错误码,说是“参数不正确”。
将CreateFile(“\\\\.\\D:”,...)换成某个文件的话,比如CreateFile(“\\\\.\\D:\\aaa.dat”,...),再CreateFileMapping()就是成功的。期间,由于报错说“参数不正确”,我把这几个函数的访问属性GENERIC_READ,WRITE FILE_SHARE_READ,WRITE之类的反复调换,还是不行。也不是磁盘太大,内存不够的问题,后面将D盘换成几十兆的E盘也不行。难不成是内存映射文件只能映射文件,不能像CreateFile,ReadFile一样支持读写分区?不把设备当文件?
下面是代码片段:
HANDLE hDevice = CreateFile(_T("\\\\.\\D:"),GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if (hDevice == INVALID_HANDLE_VALUE)
{
DebugOutput(GetLastError());
return FALSE;
}
HANDLE hFileMapping = CreateFileMapping(hDevice,NULL,PAGE_READWRITE,0,0,NULL);
DebugOutput(GetLastError());   //一到这句就报错,说参数不正确。
LPBYTE pFileView = (LPBYTE)MapViewOfFile(hFileMapping,FILE_MAP_WRITE,0,0,0);  
        ......请熟悉大文件处理的各位指点迷津,我哪里出了问题?? 很重要,一定要解决。。