Aracılığıyla paylaş


Kesme Nesnesi Oluşturma

Bir cihazın donanım kesmelerini işleyen bir Windows Sürücü Çerçeveleri (WDF) sürücüsü, her cihazın destekleyebilecekleri her kesme için bir çerçeve kesme nesnesi oluşturmalıdır. İşletim sisteminin Windows 8 veya sonraki sürümlerinde çalışan 1.11 ve üzeri çerçeve sürümlerinde, Kernel-Mode Driver Framework (KMDF) ve User-Mode Driver Framework (UMDF) sürücüleri pasif düzeyde işleme gerektiren kesme nesneleri oluşturabilir. Ancak Yonga (SoC) platformundaki bir Sistem için sürücü yazmadığınız sürece, sürücünüz DIRQL kesme nesnelerini kullanmalıdır.

Bir sürücü genellikle EvtDriverDeviceAdd geri çağırma işlevinde framework kesme nesneleri oluşturur. Bir sürücü, EvtDevicePrepareHardware geri çağırma işlevinden kesme nesneleri de oluşturabilir.

Yapı, Tak Çalıştır (PnP) yöneticisi kesme vektörleri gibi sistem kaynaklarını cihaza tahsis etmeden önce sürücünün EvtDriverDeviceAdd geri çağırma işlevini çağırır. PnP yöneticisi kaynakları atadıktan sonra, çerçeve kesme kaynaklarını cihazın kesme nesnesinde depolar. ( Tak Çalıştır'ı desteklemeyen sürücüler kesme nesnelerini kullanamaz.)

Çerçeve kesme nesnesi oluşturmak için sürücünüzün bir WDF_INTERRUPT_CONFIG yapısı başlatması ve bunu WdfInterruptCreate yöntemine geçirmesi gerekir.

UMDF aşağıdaki kesme türlerini destekler:

  • Düzeyle tetiklenen (paylaşılan veya özel)
  • Kenar tetiklemeli (sadece münhasıran)
  • MSI (tanımı gereği tümden özel)

Dikkat UMDF, kenar tetiklemeli paylaşılan kesmeleri desteklemez.

UMDF sürüm 2.15'ten itibaren, UMDF, genellikle GPIO pinleri tarafından desteklenen ve donanım yazmaçları kullanarak açıkça etkinleştirilemeyen veya devre dışı bırakılamayan donanım basmalı düğmeler gibi basit cihazlar için kesmeleri destekler. Bir UMDF sürücüsü bu tür cihazları desteklemek için özel kenar tetiklemeli kesmeler kullanmalıdır.

KMDF'nin 1.15 sürümünden itibaren, Active-Both Kesmeleri İşleme bölümünde açıklanan geçici çözüm olmadan, KMDF bu tür cihazlar için kesmeleri de destekler.

Ayrıca WDF_INTERRUPT_CONFIG'de, sürücünüz aşağıdaki olay geri çağırma işlevlerine işaretçi sağlar:

EvtInterruptEnable
Donanım kesintisini etkinleştirir.

EvtInterruptDisable
Donanım kesintisini devre dışı bırakır.

EvtInterruptIsr
Kesme için kesme hizmeti rutini (ISR).

EvtInterruptDpc
Kesme için ertelenen yordam çağrısı (DPC).

EvtInterruptWorkItem
Pasif düzeyde kesme için iş öğesi.

Windows 8 veya daha yeni işletim sistemlerinde çerçeve sürüm 1.11 veya daha üstünü kullanan sürücüler için, sürücü, bir çerçeve kesme nesnesinin (DIRQL veya pasif) üst öğesini bir çerçeve cihaz nesnesine veya çerçeve kuyruğu nesnesine açıkça ayarlayabilir. Sürücü bir üst öğe belirtiyorsa, sürücünün kesme nesnesinin WDF_INTERRUPT_CONFIG yapısının AutomaticSerialization üyesini TRUE olarak ayarlaması gerekir. ( AutomaticSerialization TRUE ise, çerçevenin kesme nesnesinin EvtInterruptDpc veya EvtInterruptWorkItem geri çağırma işlevinin yürütülmesini kesmenin üst nesnesinin altındaki diğer nesnelerden gelen geri çağırma işlevleriyle eşitlediğini unutmayın.)

Örneğin bir sürücü, kuyruğun geri çağırmalarını kesmenin EvtInterruptDpc veya EvtInterruptWorkItem geri çağırmasıyla eşitlemek için bir kesmenin üst öğesi olarak bir kuyruk belirtebilir. Bu yapılandırmada, çerçeve cihaz nesnesini sildiğinde kuyruk nesnesini siler.

WdfInterruptCreate çağrıldıktan sonra, sürücü ek kesme parametreleri belirtmek için isteğe bağlı olarak WdfInterruptSetPolicy veya WdfInterruptSetExtendedPolicy'yi çağırabilir. Genellikle sürücü bu yöntemleri EvtDriverDeviceAdd geri çağırma işlevinden çağırır.

Çerçeve, kesmenin üst öğesini silmeden önce kesmeyi otomatik olarak siler. Bir sürücünün kesmeyi daha erken bir zamanda silmek için WdfObjectDelete'i çağırmaması gerekir.

İleti sinyalli kesmeleri destekleme

Windows Vista ve sonraki sürümler ileti sinyalli kesmeleri (MSI) destekler. İşletim sisteminin cihazınız için MSI'leri desteklemesini sağlamak için sürücünüzün INF dosyasının kayıt defterinde bazı değerler ayarlaması gerekir. Bu değerleri nasıl ayarlayacağınız hakkında bilgi almak için, bkz. Kayıt Defteri'nde Mesajla İmzalanan Kesmeleri Etkinleştirme.

Sürücünüz, cihazın desteklediği her kesme vektöru veya MSI iletisi için bir çerçeve kesme nesnesi oluşturmalıdır. PnP yöneticisi cihaza cihazın desteklediği tüm kesme kaynaklarını vermezse, sürücü ek kesme nesnelerini kullanmaz ve geri çağırma işlevlerini çağırmaz.

Windows 7'de, işletim sistemi cihaz işlevi başına 910'dan fazla kesme iletisi için kaynak isteklerini desteklemez. Windows 8'de, işletim sistemi cihaz işlevi başına 2.048'den fazla kesme için kaynak isteklerini desteklemez.

Cihaz sürücüsü bu sınırı aşarsa, cihaz başlatılamaz. Çok sayıda mantıksal işlemci içeren bir bilgisayarda çalışmak için, sürücü işlemci başına birden fazla kesme istememelidir.

Bir sürücü, PnP yöneticisinin, cihaz için kaynak gereksinimleri listesinden herhangi bir alternatif kesme kaynağı kümesi atadığı kesme kaynaklarının sistem yeniden dengelenmesini, herhangi bir hataya yol açmadan tolere etmelidir. Örneğin, cihaza sürücü tarafından istenenden daha az sayıda ileti kesintisi atanabilir. En kötü durumda, sürücü cihazı yalnızca bir satır tabanlı kesintiyle çalıştırmaya hazır olmalıdır.