2012-12-21 56 views
6

我試圖防止在我的過程中從閱讀我打開的文件中的第三方DLL,我發現它是...好吧,不可能爲什麼Windows的CreateFile(<no share access>)對我說謊?

無論我做什麼,無論我指定什麼共享標誌,他們的電話總是似乎成功!

下面是從過程監控截圖 - 第一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); 
} 
+0

還值得一提的是,我不知道他們是如何在開始時將文件的I/O優先級設置爲「非常低」的。不是每個文件都有「正常」的優先級,直到它被更改? – Mehrdad

+0

請顯示打開文件的代碼。 –

+0

@RemyLebeau:查看更新。 – Mehrdad

回答

1

共享模式執行用於實際讀取和寫入文件的數據。共享規則不包含屬性(如文件大小,時間戳等),並且無法防止其訪問權限不足ACL。

您可以最好打開文件進行R/W/D訪問,而不指定SHARE_READ | WRITE | DELETE。

很奇怪,但是屬實。

+0

雖然我並沒有試圖阻止閱讀屬性,但我試圖阻止閱讀數據。 – Mehrdad

+0

MJZ的含義是,您必須打開文件以讀取/寫入文件數據,以指定讀取/寫入文件數據的後續打開的共享權限。如果僅打開文件以讀取屬性,則無法共享對讀取/寫入文件數據的打開的訪問。 –