我注意到记事本可能需要很长时间才能加载一个看起来完全没有响应的大文件,但文件句柄在开始时似乎只在很短的时间内处于活动状态。一旦加载开始,另一个进程可以以独占共享模式打开文件,即dwShareMode使用值 0
记事本如何继续使用关闭的手柄或它使用的任何魔法进行加载?
我注意到记事本可能需要很长时间才能加载一个看起来完全没有响应的大文件,但文件句柄在开始时似乎只在很短的时间内处于活动状态。一旦加载开始,另一个进程可以以独占共享模式打开文件,即dwShareMode使用值 0
记事本如何继续使用关闭的手柄或它使用的任何魔法进行加载?
没关系,我已经弄清楚记事本的作用。如果其他人需要,这是解决方案:
hFile = CreateFile("file", 0x80000000, 3, NULL, 3, 0x80, NULL);
hMap = CreateFileMapping(hFile, NULL, 2, sizeHigh, sizeLow, NULL);
ptr = MapViewOfFile(hMap, 4, 0, 0, size);
CloseHandle(hMap);
CloseHandle(hFile);
/* At this point the handles are closed so programs that try
to get share exclusive on the file succeed but I still have
a pointer for reading the memory myself */
UnmapViewOfFile(ptr);