2012-12-21 16 views
6

Sürümünde bir üçüncü taraf DLL'nin açtığım bir dosyayı okumasını engellemeye çalışıyorum ve bunu iyi buldum ... iyi, imkansız.Windows, neden CreateFile (<paysız erişim>) bana yalan söylüyor?

Ne yaparsam yapayım ne olursa olsun, hangi bayrakları paylaştığım önemli değil, her zaman numaralı telefonu arayarak başarılı görünüyor!

Screenshot

Bu nasıl mümkündür: İlk CreateFile çağrı benimdir ve dinlenme onların vardır - İşte

Süreç Monitor'den ekran görüntüsü nedir? Neden "Paylaşım Modu: Yok" bana yalan söylüyor ve bunu nasıl önleyebilirim?

#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

Ayrıca, dosyanın I/O önceliğini başlangıçta "çok düşük" olarak nasıl ayarladıklarını bilmiyorum. Her dosya değişene kadar "normal" önceliğe sahip değil mi? – Mehrdad

+0

Lütfen dosyayı açan kodu gösterin. –

+0

@RemyLebeau: Güncellemeye bakın. – Mehrdad

cevap

1

Hisse modları aslında okuma ve dosyanın VERİLERİ yazmak için uygulanır:


aşağıda Bu kod sorunu reproduces bir örnektir. Öznitelikler (dosya boyutu, zaman damgaları, vb. Gibi) paylaşım kurallarına dahil değildir ve ACL'lere erişimini engellemenin bir yolu yoktur.

Yapabileceğiniz en iyi şey R/W/D erişimi için dosyayı açar ve SHARE_READ | WRITE | DELETE belirtmez.

Garip, ama doğru.

+0

Özniteliklerin okunmasını engellemeye çalışmıyordum ... Verilerin okunmasını engellemeye çalışıyordum. – Mehrdad

+0

MJZ'nin anlamı, dosya verilerini okuyan/yazan sonraki açıkların paylaşım haklarını belirtmek için dosya verilerinin okunması/yazılması için dosyayı açmanız gerektiği anlamına gelir. Dosyayı yalnızca okuma öznitelikleri için açarsanız, dosya verilerini okuyan/okuyan açılanlar için erişimi paylaşamazsınız. –

İlgili konular