为什么Windows的CreateFile(<no share =“”access =“”>)对我说谎?</no>

时间:2012-12-21 03:41:00

标签: c winapi createfile

我正在尝试阻止我的进程中的第三方DLL读取我打开的文件,我发现它是......好吧,不可能

无论我做什么,无论我指定什么共享标志,他们的呼叫始终似乎都成功了!

以下是Process Monitor的屏幕截图 - 第一个CreateFile电话是我的,其余的是他们的电话:

Screenshot

这怎么可能?为什么“分享模式:无”对我说谎,我该如何防止这种情况?


以下代码是重现问题的示例:

#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);
}

1 个答案:

答案 0 :(得分:1)

实施共享模式以实际读取和写入文件的DATA。共享规则不包含属性(如文件大小,时间戳等),并且无法阻止其访问ACL。

您可以尽力打开R / W / D访问文件,而不是指定SHARE_READ | WRITE | DELETE。

很奇怪,但确实如此。