プロセス内のサードパーティの 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);
}