Ich versuche zu verhindern, dass eine DLL von Drittanbietern in meinem Prozess eine Datei liest, die ich geöffnet habe, und ich habe festgestellt, dass es ... nun, unmöglich ist.Warum liegt Windows CreateFile (<no share access>) für mich?
Egal was ich mache, egal welche Flags ich angeben, ihr Ruf immer scheint erfolgreich zu sein!
Hier ist der Screenshot von Process Monitor - der erste CreateFile
Anruf ist mein, und der Rest sind ihnen:
Wie ist das überhaupt möglich? Warum ist die "Share-Modus: Keine" mir liegen, und wie kann ich das verhindern?
Dieser Code unten ist ein Beispiel, das das Problem reproduziert:
#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);
}
Es ist auch erwähnenswert Ich habe keine Ahnung, wie sie die I/O-Priorität der Datei gleich zu Beginn auf "sehr niedrig" setzen. Hat nicht jede Datei "normale" Priorität, bis sie geändert wird? – Mehrdad
Bitte zeigen Sie Ihren Code, der die Datei öffnet. –
@RemyLebeau: Siehe Update. – Mehrdad