我试图阻止我的进程中的第三方 DLL 读取我打开的文件,我发现它是......好吧,不可能的。
无论我做什么,无论我指定什么共享标志,他们的调用似乎总是成功!
这是 Process Monitor 的屏幕截图——第一个CreateFile
电话是我的,其余的是他们的:
这怎么可能?为什么“共享模式:无”对我撒谎,我该如何防止这种情况?
下面的代码是重现问题的示例:
#include <stdio.h>
#include <Windows.h>
int main()
{
LPCTSTR file = TEXT("C:\\Test1234.xml");
HANDLE hFile1 =
CreateFile(file, FILE_READ_ATTRIBUTES, 0, NULL, OPEN_ALWAYS, 0, NULL);
HANDLE hFile2 =
CreateFile(file, FILE_READ_DATA, 0, NULL, OPEN_ALWAYS, 0, NULL);
DWORD n;
BYTE buf[1];
printf("%d\n", ReadFile(hFile2, buf, sizeof(buf), &n, NULL));
CloseHandle(hFile1);
CloseHandle(hFile2);
DeleteFile(file);
}