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 DispatchPower yordamı, IRP_MJ_POWER G/Ç işlev kodu için IRP'leri işleyerek güç yönetimini destekler. IRP_MJ_POWER işlev koduyla ilişkili, Güç Yönetimi için birkaç küçük G/Ç işlev kodu vardır. Power Manager, sürücüleri güç durumlarını değiştirmeye, sistem uyandırma olaylarını beklemeye ve yanıtlamaya ve sürücüleri cihazları hakkında sorgulamaya yönlendirmek için bu küçük işlev kodlarını kullanır.
Her sürücünün DispatchPower yordamı aşağıdaki görevleri gerçekleştirir:
Mümkünse IRP'yi işle.
PoCallDriver kullanarak IRP'yi cihaz yığınındaki bir sonraki alt sürücüye geçirin.
Bir veri yolu sürücüsüyse, cihazda istenen güç işlemini gerçekleştirin ve IRP'yi tamamlayın.
Birkaç durum dışında, bir işlev veya filtre sürücüsünün IRP'yi başarısız kılmasına izin verildiği durumlarda, cihaz için tüm sürücüler güç IRP'lerini işleme fırsatına sahip olmalıdır. Çoğu işlev ve filtre sürücüsü, her güç IRP'si için biraz işlem yapar veya bir IoCompletion rutinini ayarlar. Sonrasında IRP'yi tamamlamadan, onu bir sonraki alt sürücüye geçirir. Sonunda IRP, gerekirse cihazın güç durumunu fiziksel olarak değiştiren ve IRP'yi tamamlayan veri yolu sürücüsüne ulaşır.
IRP tamamlandığında G/Ç yöneticisi, IRP cihaz yığınında aşağı doğru ilerlerken sürücüler tarafından ayarlanan tüm IoCompletion yordamlarını çağırır. Bir sürücünün tamamlama yordamı ayarlaması gerekip gerekmediği, IRP türüne ve sürücünün bireysel gereksinimlerine bağlıdır.
Bir cihazı destekleyen güç IRP'leri önce cihaz yığınındaki en düşük sürücü (temel veri yolu sürücüsü) ve ardından yığındaki her bir ardışık sürücü tarafından işlenmelidir. Bir cihazı kapatan güç IRP'leri önce cihaz yığınının üst kısmındaki sürücü tarafından ve ardından yığından aşağı inen her bir sürücü tarafından işlenmelidir.
Çıkarılabilir Cihazlar için Özel İşleme
DispatchPower yordamlarında, çıkarılabilir cihazların sürücüleri cihazın hala mevcut olup olmadığını denetlemelidir. Cihaz kaldırıldıysa, sürücü IRP'yi sonraki alt sürücüye geçirmemelidir. Bunun yerine, sürücü aşağıdakileri yapmalıdır:
Sonraki güç IRP'sini işlemeye başlamak için PoStartNextPowerIrp'i çağırın.
Irp->IoStatus.Status'u STATUS_DELETE_PENDING olarak ayarlayın.
IRP'yi tamamlamak için IO_NO_INCREMENT belirterek, IoCompleteRequest çağırın.
STATUS_DELETE_PENDING döndürülür.