Aracılığıyla paylaş


SynchCritSection Rutinlerine Tanıtım

Kritik bölümler , donanım kaynaklarına veya sürücü verilerine özel erişim gerektiren kod bölümleridir. Başka bir deyişle, kodun aynı kaynaklara veya verilere başvurabilen diğer kodlar tarafından kesintiye uğramaması ve kaynaklara veya verilere aynı anda birden fazla işlemci tarafından başvurulmaması gerekir.

Kritik bölümler ISR'ler ve SynchCritSection yordamlarıyla sınırlandırılmalıdır. Sistem bu yordamları yalnızca geçerli işlemcinin IRQL değerini cihazın DIRQL değerine yükseltip bir döndürme kilidi aldıktan sonra çağırır. SynchCritSection yordamı döndürüldükten sonra, sistem döndürme kilidini serbest bırakır ve işlemcinin IRQL'ini düşürür.

İşlemcinin IRQL değerini cihazın DIRQL değerine yükseltmek, yüksek öncelikli bir cihaz dışında geçerli işlemcinin kesintiye uğramasını önler. Döndürme kilidi almak, diğer işlemcilerin bu döndürme kilidiyle ilişkili kritik bölüm kodlarını yürütmesini önler. (Bu döndürme kilidi bazen kesme dönüş kilidi olarak adlandırılır.)

Bir cihaz sürücüsünün StartIo ve DpcForIsr veya CustomDpc yordamları genellikle sürücünün ISR'si ile aynı donanım kaynaklarına (cihaz kayıtları veya diğer veri yolu göreli belleği gibi) veya sürücü tarafından korunan verilere erişmelidir. Sürücünün cihazına veya tasarımına bağlı olarak, dağıtım, AdapterControl, ControllerControl veya zamanlayıcı yordamları da donanım kaynaklarına veya sürücü tarafından korunan verilere erişebilir.

ISR olmayan kritik bölümleri çağırmak için bir sürücünün KeSynchronizeExecution yordamını kullanması gerekir. Bu yordam, synchCritSection yordamının adresini, sürücü tanımlı bağlam bilgileri ve kesme nesnesi işaretçisi ile birlikte giriş olarak kabul eder. Sistem, SynchCritSection rutini ile kullanılacak DIRQL ve spin lock'u belirlemek için kesme nesnesi işaretçisini kullanır. (Sürücü daha önce IoConnectInterrupt işlevinin SpinLock ve SynchronizeIrql parametrelerini kullanarak bu değerleri sağlamıştı.)