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ünün DispatchCleanup rutini IRP_MJ_CLEANUP Girdi/Çıktı işlev kodu için IRP'leri yönetir.
Sürücüler, bir dosya nesnesinin tüm tanıtıcıları kapatıldıktan sonra gereken temizleme işlemlerini gerçekleştirmek için DispatchCleanup rutinini kullanabilir. DispatchCleanup'ın son tanıtıcıyı kapatan işlemin işlem bağlamında çağrıldığını unutmayın; bu işlem, tanıtıcıyı ilk açan işlemden farklı olabilir. (Bu fark genellikle başka bir işlemin işlem tanıtıcılarını çoğaltmak için DuplicateHandle kullanıcı modu yordamını kullanması nedeniyle oluşur.) Özgün işlem bağlamında temizleme gerçekleştirmesi gereken sürücüler, bu amaçla bir geri çağırma yordamı kaydetmek için PsSetCreateProcessNotifyRoutine yordamını kullanabilir, ancak bu geri çağırmaların sınırlı bir sistem kaynağı olduğunu unutmayın.
Genel olarak DispatchCleanup yordamı, hedef cihaz nesnesi için şu anda cihaz kuyruğunda (veya sürücünün iç IRP kuyruğunda) bulunan ve dosya nesnesiyle ilişkilendirilmiş her IRP için aşağıdakileri yaparak bir IRP_MJ_CLEANUP isteğini işlemelidir:
İptal yordamı işaretçisini NULL olarak ayarlamak için IoSetCancelRoutine'i çağırın.
Kuyruğa alınan IRP'nin sürücünün G/Ç yığını konumunda belirtilen dosya nesnesi, IRP_MJ_CLEANUP isteğinin G/Ç yığını konumunda alınan dosya nesnesiyle eşleşiyorsa, hedef cihaz nesnesi için şu anda kuyrukta olan tüm IRP'leri iptal edin.
IRP'yi tamamlamak ve STATUS_SUCCESS döndürmek için IoCompleteRequest'i çağırın.
Bir IRP_MJ_CLEANUP isteği işlenirken, sürücü IRP_MJ_READveya IRP_MJ_WRITE gibi ek istekler alabilir. Bu nedenle, kaynakları serbest bırakması gereken bir sürücü, DispatchCleanup yordamının yürütülmesini DispatchRead ve DispatchWrite gibi diğer dağıtım yordamlarıyla da eşitlemelidir.