Şu anda WriteFile
numaralı çağrıya (veya daha doğrusu, CFile :: Write - ancak sadece WriteFile içsel olarak adlandırılan) bir çağrıya sorun yaşıyoruz ve bu da Win32 hatasına neden oluyor: 5
ERROR_ACCESS_DENIED
.WriteFile'ın ERROR_ACCESS_DENIED değerini döndürmesine neden olan nedir?
(Düzeltme:.! Biz davranışı Repro unutmayın Şu anda elimizdeki tüm CFile :: Yaz oldu kaynak hattını gösteren ve hata Error_access_denıed olarak içeren bir günlük dosyası olan)
(DÜZENLEME : dosya bir yerel sürücüde olduğunu ve aslında bir dosya ve dizin değil)
Şimdi WriteFiles's documentation gerçekten yardımcı olmuyor ve basit bir test uygulama içi deneme aşağıdaki sonuçları verir:.
- WriteFile neden yazılır (örneğin, dosya tanıtımı için açılmayan bir dosya tanıtıcısı için çağrılırsa ERROR_ACCESS_DENIED). sadece okuma için açılır). tanıtıcı geçerli değil veya dosya dosya için hiç
- erişim hakları veya yazma korumalı bayrak açık değil
- eğer
- O değil neden Error_access_denıed olacak'dan sonra değiştirilmiştir, dosya işlem tarafından açılmıştır. (Dosyayı açmadan başarısız olur çünkü bu önce değiştirilmişse dosya açılır, o zaman WriteFile olsun asla.)
- dosya nedense (Başka bir işlem/koldan Bu işlem en iyi sonucu yanlışlıkla
32
ERROR_SHARING_VIOLATION kilitlendi). dosyanın gerçekten okuma bayrağı yerine yazma bayrağıyla açılmışsa görünüşte bu çağrı için tek olasılık başarısız duruma, bize bırakıyor
. Ancak, bizim kodumuza baktığımızda, bu son derece düşük gibi görünüyor. (Nedeniyle bizim izleme,
biz
WriteFile başarısız olduğundan emin olabilir ve bunlar dışarı takip edilmez çünkü
biz hata Error_access_denıed olduğundan emin olabiliriz, biz, açılış bayrakları 100.1% emin olamaz.)
WriteFile'ın (CFile :: Write) bir ERROR_ACCESS_DENIED neden olacağı bilinen başka bir durum var mı?
Not:
- dosya ı gerçekleştirilen
- Tüm testler süre göstermektedir bu nedenle bir dizin olabilir ya da bloklarýnýn olamaz açık edildi: ayrıca bu sorunun bağlamını netleştirmek için Dosya açık değil, silinemez, bu yüzden dosya hala orada WriteFile
- çağrı vardı olmalıdır Dosya bir yerel sürücüde bulunan ve bir ağ sürücüsünde değil.
Biz Windows XP SP3 çalıştırdığınız ve bunu debug yapmanız gerekir eğer uygulama Visual Studio 2005
neden açılış bayraklarını izleyemiyorsa? Kodu düzenlemek istemiyorsanız, bunları denetlemek için yalnızca işlem izleyicisini kullanın. –
Elbette izleme ekleyebiliriz. Bu sadece bir zamanlar müşteri sitesinde olur. Orada bir hata ayıklayıcı ekleyemeyiz. –
Dosya sistemi filtre sürücüleri buna da neden olabilir, en belirgin örnek anti-virüs tarayıcılarıdır (şifreleme gibi başka şeyler de olsa). – Luke