Özel Durum Dağıtma

Bir donanım veya yazılım özel durumu oluştuğunda işlemci, özel durumun oluştuğu noktada yürütmeyi durdurur ve denetimi sisteme aktarır. İlk olarak, sistem hem geçerli iş parçacığının makine durumunu hem de özel durumu açıklayan bilgileri kaydeder. Sistem daha sonra özel durumu işlemek için bir özel durum işleyicisi bulmaya çalışır.

Özel durumun oluştuğu iş parçacığının makine durumu CONTEXT yapısına kaydedilir. Bu bilgiler (bağlam kaydıolarak adlandırılır), özel durum başarıyla işlenirse sistemin özel durum noktasında yürütmeye devam etmesine olanak tanır. Özel durumun açıklaması (özel durum kaydıolarak adlandırılır) EXCEPTION_RECORD bir yapıya kaydedilir. Bağlam kaydının makineye bağımlı bilgilerini özel durum kaydının makineden bağımsız bilgilerinden ayrı olarak depoladığı için, özel durum işleme mekanizması farklı platformlara taşınabilir.

Hem bağlam hem de özel durum kayıtlarındaki bilgiler GetExceptionInformation işlevi aracılığıyla kullanılabilir ve özel durum nedeniyle yürütülen özel durum işleyicileri tarafından kullanılabilir. Özel durum kaydı aşağıdaki bilgileri içerir.

  • Özel durum türünü tanımlayan bir özel durum kodu.
  • Özel durumun devam edip etmediğini gösteren bayraklar. Devam edilemeyen bir özel durumdan sonra yürütmeye devam etme girişimi başka bir özel durum oluşturur.
  • Başka bir özel durum kaydının işaretçisi. Bu, iç içe özel durumlar oluşursa bağlantılı bir özel durum listesi oluşturulmasını kolaylaştırır.
  • Özel durumun oluştuğu adres.
  • Özel durum hakkında ek bilgi sağlayan bir bağımsız değişken dizisi.

Kullanıcı modu kodunda bir özel durum oluştuğunda, sistem bir özel durum işleyicisi bulmak için aşağıdaki arama sırasını kullanır:

  1. İşlemde hata ayıklanıyorsa sistem hata ayıklayıcıya bildirir. Daha fazla bilgi için bkz. Hata Ayıklayıcısı Özel Durum İşleme.
  2. İşlemde hata ayıklanmıyorsa veya ilişkili hata ayıklayıcı özel durumu işlemiyorsa sistem, özel durumun oluştuğu iş parçacığının yığın çerçevelerini arayarak çerçeve tabanlı bir özel durum işleyicisi bulmaya çalışır. Sistem önce geçerli yığın çerçevesini arar, ardından önceki yığın çerçevelerini ters sırada arar.
  3. Çerçeve tabanlı işleyici bulunamazsa veya çerçeve tabanlı işleyici özel durumu işlemezse, ancak işlem hata ayıklanıyorsa, sistem hata ayıklayıcıya ikinci kez bildirir.
  4. İşlemde hata ayıklanmıyorsa veya ilişkili hata ayıklayıcı özel durumu işlemiyorsa, sistem özel durum türüne göre varsayılan işleme sağlar. Çoğu özel durum için, varsayılan eylem exitprocessişleviniçağırmaktır.

Çekirdek modu kodunda bir özel durum oluştuğunda sistem, özel durum işleyicisini bulma girişiminde çekirdek yığınının yığın çerçevelerini arar. İşleyici bulunamazsa veya hiçbir işleyici özel durumu işlemezse, exitWindowsişlevi çağrılmışsistem kapatılır.