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.
Sürücüler, çekirdek modunda yürütülen toplam kodun önemli bir yüzdesini oluşturur. Çekirdek modu sürücüsü, işletim sisteminin bir bileşenidir. Bu nedenle, güvenilir ve güvenli sürücüler işletim sisteminin genel güvenilirliğine önemli ölçüde katkıda bulunur. Güvenilir bir çekirdek modu sürücüsü oluşturmak için şu yönergeleri izleyin:
Cihaz nesnelerinin güvenliğini düzgün bir şekilde sağlayın.
Sistemin sürücülerine ve cihazlarına kullanıcı erişimi, sistemin cihaz nesnelerine atadığı güvenlik tanımlayıcıları tarafından denetlenmektedir. Sistem çoğu zaman bir cihaz yüklendiğinde cihaz güvenlik parametrelerini ayarlar. Daha fazla bilgi için bkz. Güvenli Cihaz Yüklemeleri Oluşturma. Bazen bir sürücünün cihazına erişimi denetlemede bir rol oynaması uygundur. Daha fazla bilgi için bkz. Cihaz Nesnelerinin Güvenliğini Sağlama.
Cihaz nesnelerini düzgün bir şekilde doğrulayın.
Bir sürücü birden fazla türde cihaz nesnesi oluşturursa, her IRP'de hangi türü aldığını kontrol etmesi gerekir. Daha fazla bilgi için bkz. Cihaz Nesnelerini Doğrulama Hatası.
"Güvenli dize" işlevlerini kullanın.
Dizeleri düzenlerken, bir sürücü C/C++ dil çalışma zamanı kitaplıklarıyla sağlanan dize işlevleri yerine güvenli dize işlevlerini kullanmalıdır. Daha fazla bilgi için bkz. Güvenli Dize İşlevlerini Kullanma.
Nesne tanıtıcılarını doğrulayın.
Giriş olarak nesne tanıtıcıları alan sürücüler tanıtıcıların geçerli, erişilebilir ve beklenen türde olduğunu doğrulamalıdır. Nesne tanıtıcılarını kullanma hakkında daha fazla bilgi için aşağıdaki konulara bakın:
Çok işlemcilileri düzgün şekilde destekleyin.
Sürücünüzün yalnızca tek işlemcili sistemlerde çalışacağını asla varsaymayın. Sürücünüzün çok işlemcili sistemlerde düzgün çalıştığından emin olmak için kullanabileceğiniz programlama teknikleri hakkında bilgi için aşağıdaki konulara bakın:
Sürücü durumunu düzgün bir şekilde işleyebilir.
Sürücünüzün, onun olduğunu düşündüğünüz durumda olduğundan emin olmanız önemlidir. Örneğin, sürücü bir IRP alırsa, aynı türde bir IRP'ye zaten hizmet mi ediyor? Sürücü bu durumu denetlemezse, ilk IRP kaybolabilir. Daha fazla bilgi için bkz. Sürücü Durumunu Denetleme Hatası.
IRP giriş değerlerini doğrulayın.
Arabellek adresleri ve uzunlukları gibi bir IRP ile ilişkili tüm değerleri doğrulamak hem güvenilirlik hem de güvenlik açısından önemlidir. Aşağıdaki konular IRP giriş değerlerini doğrulama hakkında bilgi sağlar:
DispatchReadWrite Kullanarak Arabelleğe Alınan G/Ç
Arabelleğe Alınmış G/Ç Hataları
Doğrudan G/Ç Kullanarak DispatchReadWrite
Giriş/Çıkış Denetim Kodları için Güvenlik Sorunları
G/Ç yığınını düzgün bir şekilde işleyebilir.
IRP'leri sürücü yığınından geçirirken, sürücülerin sonraki sürücünün G/Ç yığını konumunu ayarlamak için IoSkipCurrentIrpStackLocation veya IoCopyCurrentIrpStackLocationToNext çağrısında bulunmaları önemlidir. Bir G/Ç yığını konumunu doğrudan bir sonrakine kopyalayan kod yazmayın.
IRP tamamlama işlemlerini düzgün bir şekilde işleyin.
Bir sürücü, IRP'yi gerçekten destekleyip işlemedikçe STATUS_SUCCESS durum değerine sahip bir IRP'yi hiçbir zaman tamamlamamalıdır. IRP tamamlama işlemlerini işlemenin doğru yolları hakkında bilgi için bkz. IRP'leri tamamlama.
IRP iptal işlemlerini düzgün bir şekilde işleyin.
genellikle zaman uyumsuz olarak yürütürler çünkü iptal işlemlerinin düzgün kodlanması zor olabilir. Bu kod genellikle çalışan bir sistemde sık sık yürütülmediğinden iptal işlemlerini işleyen koddaki sorunlar uzun bir süre boyunca dikkatlerden kaçabilir.
IRP'leri İptal Etmealtında sağlanan tüm bilgileri okuduğunuzdan ve anladığınızdan emin olun. IRP İptal Eşitlemesi ve IRP'leri İptal Ederken Dikkate Alınacak Noktalar üzerine özellikle dikkat edin.
İptal işlemleriyle ilişkili eşitleme sorunlarını önlemenin bir yolu , iptal güvenli bir IRP kuyruğu uygulamaktır. İptal güvenli IRP kuyruğu, Windows XP ve sonraki işletim sistemi sürümleri için tanıtılan, ancak önceki sürümlere de geriye dönük olarak uyumlu olan, sürücü tarafından yönetilen bir kuyruktır.
IRP temizleme işlemini ve kapatma operasyonlarını düzgün bir şekilde işleyin.
IRP_MJ_CLEANUP ve IRP_MJ_CLOSE istekleri arasındaki farkı anladığınızdan emin olun. Temizleme istekleri, bir uygulama dosya nesnelerine ait tüm tanıtıcıları kapattıktan sonra, ancak bazen tüm G/Ç istekleri tamamlanmadan önce gelir. Dosya nesnesi için tüm G/Ç istekleri tamamlandıktan veya iptal edildikten sonra kapanış istekleri gelir. Daha fazla bilgi için aşağıdaki konulara bakın:
DispatchCreate, DispatchClose ve DispatchCreateClose Rutinleri
Temizleme ve Kapatma İşlemlerini Yönetirken Hataları
IRP'leri doğru işlemek hakkında ayrıntılı bilgi için bkz. IRP'leri İşlemede Ek Hatalar.
Sürücü Doğrulayıcı kullanma
Sürücü Doğrulayıcı , sürücünüzün güvenilirliğini sağlamak için kullanabileceğiniz en önemli araçtır. Sürücü Doğrulayıcı, bu bölümde ele alınanlar da dahil olmak üzere çeşitli yaygın sürücü sorunlarını denetleyebiliyor. Ancak, Sürücü Doğrulayıcı'nın kullanımı dikkatli, düşünceli yazılım tasarımının yerini almaz.