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.
Cihaz nesnelerini arabelleğe alınan G/Ç için ayarlayan herhangi bir alt düzey cihaz sürücüsü, cihazından aktarılan verileri Irp-AssociatedIrp.SystemBuffer> konumunda kilitli bir sistem alanı arabelleğine döndürerek bir okuma isteğini karşılar. Aynı arabellekten cihazına veri aktararak bir yazma isteğini karşılar.
Sonuç olarak, böyle bir cihaz sürücüsünün DispatchReadWrite yordamı genellikle aktarım isteğinin alınması üzerine aşağıdakileri yapar:
IoGetCurrentIrpStackLocation'ı çağırır ve aktarım isteğinin yönünü belirler.
İstek için parametrelerin geçerliliğini denetler.
Okuma isteği için, yordam genellikle sürücünün IoStackLocation->Parameters.Read.Length değerini kontrol ederek arabelleğin cihazdan aktarılan verileri alabilecek kadar büyük olup olmadığını belirler.
Örneğin, sistem klavye sınıfı sürücüsü yalnızca Win32 kullanıcı giriş iş parçacığından gelen okuma isteklerini işler. Bu sürücü, cihazdan gelen tuş vuruşlarını depolamak için KEYBOARD_INPUT_DATA adlı bir yapı tanımlar ve gelen okuma isteklerini karşılamak amacıyla belirli sayıda bu yapıyı iç halka arabelleğinde sürekli tutar.
Yazma isteği için, yordam genellikle Parameters.Write.Length'deki değeri denetler ve gerekirse Irp->AssociatedIrp.SystemBuffer'daki verileri denetler: yani, cihaz yalnızca tanımlı değer aralıklarına sahip üyeleri içeren yapılandırılmış veri paketlerini kabul ederse.
Herhangi bir parametre geçersizse DispatchReadWrite yordamı, IRP'leri Tamamlama bölümünde açıklandığı gibi IRP'yi hemen tamamlar. Aksi takdirde yordam, IRP'lerin Sürücü Yığında Geçirilmesi bölümünde açıklandığı gibi, diğer sürücü yordamları tarafından daha fazla işlem için IRP'yi iletir.
Arabelleğe alınan G/Ç kullanan en düşük düzey cihaz sürücüleri genellikle, isteğin kaynağı tarafından belirtilen boyuttaki verileri okuyarak veya yazarak aktarım isteğini karşılamalıdır. Böyle bir sürücü, cihazından gelen veya cihazına gönderilen veriler için bir yapı tanımlama olasılığı yüksektir ve sistem klavye sınıfı sürücüsünde olduğu gibi yapılandırılmış verileri dahili olarak arabelleğe alma olasılığı yüksektir.
Verileri dahili olarak arabelleğe alan sürücüler, IRP_MJ_FLUSH_BUFFERS isteklerini desteklemeli ve IRP_MJ_SHUTDOWN isteklerini de destekleyebilir.
Bir zincirdeki en üst düzey sürücü genellikle düşük sürücülere okuma/yazma isteği geçirmeden önce giriş IRP'sinin parametrelerini denetlemekten sorumludur. Sonuç olarak, birçok alt düzey sürücü, bir okuma/yazma IRP'sindeki G/Ç yığını konumlarının geçerli parametreleri olduğunu varsayabilir. Zincirdeki en düşük düzey sürücü, veri aktarımlarındaki cihaza özgü kısıtlamaların farkındaysa, bu sürücünün G/Ç yığını konumundaki parametrelerin geçerliliğini denetlemesi gerekir.