Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
İşletim sistemi, belirli tür hataların sinyalini vermek için yapılandırılmış özel durum işleme kullanır. Bir sürücü tarafından çağrılan bir rutin, sürücünün işlemesi gereken bir istisna oluşturabilir.
Sistem aşağıdaki genel özel durum türlerini yakalar:
Donanım tanımlı hatalar veya tuzaklar, örneğin,
- Erişim ihlalleri (aşağıya bakın)
- Veri türü yanlış hizalamaları (tek baytlı sınıra hizalanmış 16 bit öğe gibi)
- Geçersiz ve ayrıcalıklı yönergeler
- Geçersiz kilit dizileri (kodun kilitlenmiş bir bölümünde geçersiz bir yönerge dizisi yürütmeye çalışma)
- Tamsayı sıfıra bölünür ve taşmalar
- Sıfıra bölünme, taşmalar, alt taşmalar ve ayrılmış işlenenler içeren kayan nokta işlemleri
- Kesme noktaları ve tek adımlı yürütme (hata ayıklayıcıları desteklemek için)
Sistem yazılımı tanımlı özel durumlar, örneğin,
- Koruma sayfası ihlalleri (koruma sayfasındaki bir konumdan veya bir konuma veri yüklemeye ya da depolamaya çalışma)
- Sayfa okuma hataları (bir sayfayı belleğe okumaya çalışma ve eşzamanlı G/Ç hatasıyla karşılaşma)
Erişim ihlali, geçerli sayfa koruma ayarları altında izin verilmeyen bir sayfada işlem gerçekleştirme girişimidir. Erişim ihlalleri aşağıdaki durumlarda oluşur:
Salt okunur bir sayfaya yazma gibi geçersiz bir okuma veya yazma işlemi.
Geçerli programın adres alanı sınırını aşan belleğe erişmek için (uzunluk ihlali olarak bilinir).
Şu anda yerleşik olan ancak bir sistem bileşeninin kullanımına ayrılmış bir sayfaya erişmek için. Örneğin, kullanıcı modu kodunun çekirdeğin kullandığı bir sayfaya erişmesine izin verilmez.
Bir işlem özel duruma neden olabilirse, sürücü işlemi try/except bloğuna dahil etmelidir. Kullanıcı modundaki konumlara erişimler, özel durumların tipik nedenleridir. Örneğin ProbeForWrite yordamı, sürücünün gerçekten kullanıcı modu arabelleğine yazabildiğini denetler. Bunu yapamazsa, yordam bir STATUS_ACCESS_VIOLATION özel durumu oluşturur. Aşağıdaki kod örneğinde, sürücü bir try/except içinde ProbeForWrite çağrısı yapar, böylece ortaya çıkan özel durumu (varsa) işleyebilmesini sağlar.
try {
...
ProbeForWrite(Buffer, BufferSize, BufferAlignment);
/* Note that any access (not just the probe, which must come first,
* by the way) to Buffer must also be within a try-except.
*/
...
} except (EXCEPTION_EXECUTE_HANDLER) {
/* Error handling code */
...
}
Sürücülerin yükseltilmiş özel durumları işlemesi gerekir. İşlenmeyen bir istisna, sistemin hata kontrolü yapmasına neden olur. Özel durumun yükseltilmesine neden olan sürücünün bunu işlemesi gerekir: Alt düzey bir sürücü, özel durumu işlemek için daha üst düzey bir sürücüye güvenemez.
Sürücüler ExRaiseAccessViolation, ExRaiseDatatypeMisalignment veya ExRaiseStatus yordamlarını kullanarak doğrudan bir özel durum oluşturabilir. Sürücü, bu yordamların ortaya çıkardığı özel durumları işlemelidir.
Aşağıda, en azından belirli durumlarda bir istisna oluşturabilecek yordamların kısmi bir listesi verilmektedir.
Kullanıcı modu arabelleklerine bellek erişimi de erişim ihlallerine neden olabilir. Daha fazla bilgi için bkz. Kullanıcı Alanı Adreslerini Referanslama Hataları.
Yapılandırılmış özel durum işlemenin C++ özel durumlarından farklı olduğunu unutmayın. Çekirdek C++ özel durumlarını desteklemez.
Yapılandırılmış özel durum işleme hakkında daha fazla bilgi için Microsoft Windows SDK'sı ve Visual Studio belgelerine bakın.