Tôi đang cố ngăn chặn DLL của bên thứ ba trong quá trình đọc tệp tôi đã mở và tôi đã tìm thấy nó là ... tốt, không thể.Tại sao CreateFile của Windows (<no share access>) lại nói dối tôi?
Không có vấn đề gì tôi làm, bất kể cờ chia sẻ tôi chỉ định, cuộc gọi của họ luôn luôn dường như thành công!
Dưới đây là ảnh chụp màn hình từ Process Monitor - các CreateFile
cuộc gọi đầu tiên là của tôi, và phần còn lại là của họ:
như thế nào này thậm chí có thể? Tại sao Chế độ Chia sẻ : Không có " nói dối tôi và làm cách nào tôi có thể ngăn chặn điều này?
Mã này dưới đây là một ví dụ mà tái tạo các vấn đề:
#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);
}
Điều đáng nói là tôi không biết làm cách nào để đặt mức ưu tiên I/O của tệp thành "rất thấp" ngay từ đầu. Không phải mọi tệp đều có ưu tiên "bình thường" cho đến khi nó được thay đổi? – Mehrdad
Vui lòng hiển thị mã của bạn mở tệp. –
@RemyLebeau: Xem cập nhật. – Mehrdad