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.
Bu IRP, sistem güç durumundaki bir değişikliğin sürücüsünü bildirir veya bir cihaz için cihaz güç durumunu ayarlar.
Ana Kod
Gönderildiğinde
Sistem güç yöneticisi veya cihaz güç ilkesi sahibi bu IRP'yi gönderebilir.
Güç yöneticisi, sürücüleri sistem güç durumundaki bir değişikliği bildirmek için bu IRP'yi gönderir. Sürücü boşta algılama için cihazını kaydederse, güç yöneticisi boşta olan bir cihazın güç durumunu değiştirmek için bu IRP'yi gönderir.
Güç ilkesine sahip olan bir sürücü, cihazın güç durumunu ayarlamak için bu IRP'yi gönderir. Bu IRP'yi göndermek için bir sürücünün PoRequestPowerIrp'i çağırması gerekir.
Güç yöneticisi bu IRP'yi IRQL = PASSIVE_LEVEL'de PDO'da DO_POWER_PAGABLE bayrağını ayarlayan cihaz yığınlarına gönderir. Bu tür yığınlardaki sürücüler, isteği tamamlamak için disk belleği koduna veya verilere dokunabilir.
DO_POWER_INRUSH bayrağı ayarlanırsa güç yöneticisi IRQL = DISPATCH_LEVEL'de IRP'yi gönderebilir. Bu tür sürücüler herhangi bir disk belleği koduna veya veriye doğrudan veya dolaylı olarak erişemez.
Giriş Parametreleri
Parameters.Power.Type üyesi, SystemPowerState veya DevicePowerState olmak üzere ayarlanan güç durumunun türünü belirtir.
Parameters.Power.State üyesi güç durumunun kendisini aşağıdaki gibi belirtir:
- Parameters.Power.TypeSystemPowerState ise, değer SYSTEM_POWER_STATE türünün numaralandırıcısı olur.
- Parameters.Power.TypeDevicePowerState ise, değer DEVICE_POWER_STATE türünün numaralandırıcısı olur.
Parameters.Power.ShutdownType üyesi, istenen geçiş hakkında ek bilgiler belirtir. Bu üyenin olası değerleri POWER_ACTION numaralandırma değerleridir. Daha fazla bilgi için bkz. Sistem Güç Eylemleri.
Parameters.Power.SystemPowerStateContext üyesi, bir bilgisayarın önceki sistem güç durumları hakkında bilgi içeren salt okunur, kısmen opak bir SYSTEM_POWER_STATE_CONTEXT yapısıdır. Parameters.Power.TypeSystemPowerState, Parameters.Power.State ise PowerSystemWorking ise, bu yapıdaki iki bayrak biti, bilgisayarın S0 (çalışan) sistem durumuna girmesinin hızlı başlangıç mı yoksa hazırda bekleme modundan çıkarma mı olduğunu gösterir. Daha fazla bilgi için bkz. Hızlı Başlatmayı Hazırda Bekleme modundan Çıkarma'dan Ayırt Etme.
IRP_MN_SET_POWER için sistem güç geçişi bağlamı
Aşağıdaki tabloda IRP_MN_SET_POWER içeriği gösterilmektedir. Parameters.Power. {State|Her sistem güç geçişi için SYSTEM_POWER_STATE_CONTEXT yapısındaki ShutdownType} ve CurrentSystemState, TargetSystemState ve EffectiveSystemState bit alanları. Her satır bir IRP_MN_SET_POWER temsil eder.
| Geçiş | Devlet | Kapatma Türü | Geçerli SystemState | Hedef SystemState | Effective SystemState | Yorumlar |
|---|---|---|---|---|---|---|
| Uyku moduna... | S3 | Uyku | S0 | S3 | S3 | |
| ... Uyandırmak | S0 | Uyku | S3 | S0 | S0 | |
| Karma Uyku... | S4 | Kış uykusuna yatmak | S0 | S3 | S4 | Hazırda bekleme dosyasıyla uyku (Hızlı S4) |
| ... Uyandırmak | S0 | Uyku | S3 | S0 | S0 | |
| ... Uyandırma/PwrLost | S0 | Uyku | S4 | S0 | S0 | |
| Hazırda beklet... | S4 | Kış uykusuna yatmak | S0 | S4 | S4 | |
| ... Uyandırmak | S0 | Uyku | S4 | S0 | S0 | |
| Karma Kapatma:... | S4 | Kış uykusuna yatmak | S0 | S5 | S4 | Uygulamalar kapatıldı, kullanıcı kapatılmış gibi oturumu kapattı (hazırda bekleme önyüklemesi) |
| ... Hızlı Başlangıç | S0 | Uyku | S4 | S0 | S0 | |
| Kapat:... | S5 | Kapatma/Sıfırlama/Kapatma | S0 | S5 | S5 | |
| ... Sistem Önyüklemesi | Önyükleme için S-IRP yok |
Çıkış Parametreleri
Parameters.Power.SystemContext , sistem kullanımı için ayrılmıştır.
G/Ç Durum Bloğu
Bir sürücü, cihazın istenen duruma girdiğini belirtmek için Irp-IoStatus.Status> değerini STATUS_SUCCESS olarak ayarlar.
Bir sürücü, sistem güç durumunu ayarlama isteğinde başarısız olmamalıdır.
Bir veri yolu sürücüsünün üzerinde bulunan işlev ve filtre sürücüleri, cihaz güç durumunu ayarlama isteğinde başarısız olmamalıdır. Bus sürücüsü, cihaz kaldırılırsa veya kaldırılma sürecinde bir cihaz güç açma isteğinde başarısız olabilir.
Operasyon
Güç yöneticisi veya sürücü IRP_MN_SET_POWER IRP isteyebilir. Güç yöneticisi aşağıdaki nedenlerden biri nedeniyle bu IRP'yi gönderir:
Sürücüleri sistem güç durumundaki bir değişikliği bildirmek için
Power Manager'ın boşta algılama gerçekleştirdiği bir cihazın güç durumunu değiştirmek için
Bir sürücü sistem güç durumu için bir IRP_MN_QUERY_POWER isteğinde başarısız olduktan sonra geçerli sistem durumunu yeniden doğrulama. Daha fazla bilgi için bkz. IRP_MN_QUERY_POWER.
Cihaz güç ilkesine sahip bir sürücü, cihazının güç durumunu değiştirmek için IRP_MN_SET_POWER gönderir.
Sistem, herhangi bir zamanda her cihaz nesnesi için yalnızca bir IRP'nin etkin olmasını sağlar.
Her sürücü IoCallDriver (Windows Vista'dan başlayarak) veya PoCallDriver (Windows Server 2003, Windows XP ve Windows 2000) çağrısı yaparak her güç IRP'sini sonraki alt sürücüye geçirmelidir. PoCallDriver arabirimi IoCallDriver'a benzer, ancak güç yönetimi alt sistemi IRP'yi sonraki sürücüye geçirmeden önce geciktirebilir. Örneğin, cihazın inrush akım gerektirmesi ve bu nedenle başka bir cihazla seri olarak güçlendirilmiş olması gerekiyorsa PowerDeviceD0 isteğinde gecikmeler oluşabilir.
Bir sürücü Windows Server 2003, Windows XP veya Windows 2000'de bir IRP_MN_SET_POWER isteği aldıktan sonra, PoStartNextPowerIrp'i Çağırma bölümünde açıklandığı gibi bir sürücünün PoStartNextPowerIrp'içağırması gerekir. Windows Vista'den başlayarak PoStartNextPowerIrp çağrısı gerekli değildir ve böyle bir çağrı güç yönetimi işlemi gerçekleştirmez.
Sistem Güç Durumları için IRP_MN_SET_POWER
Yalnızca sistem güç yöneticisi bir sistem kümesi güç IRP'sini gönderebilir.
Bir sürücü, sistem güç durumunu ayarlama isteğinde başarısız olmamalıdır.
Mümkün olduğunda, güç yöneticisi sistem uyku durumu istemek için IRP_MN_SET_POWER göndermeden önce IRP_MN_QUERY_POWER gönderir. Ancak, bazı koşullar altında (örneğin, Güç Kapat düğmesine basan kullanıcı veya pilin süresi doluyor), güç yöneticisi önce sorgulamadan IRP_MN_SET_POWER verebilir. Power Manager yalnızca uyku durumları için sorgular; çalıştırmadan önce hiçbir zaman sorgulamaz.
IRP_MN_SET_POWER isteği, bir cihaz için cihaz yığınındaki en üst sürücüye gönderilir. Üstteki sürücü IRP'yi bir sonraki alt sürücüye geçirir ve bu şekilde IRP, IRP'yi tamamlaması gereken veri yolu sürücüsüne ulaşana kadar devam eder.
Bir filtre sürücüsünün genellikle bir sistem kümesi güç IRP'sinde işlem görmesi gerekmez; bunu geçirmek dışında.
Ancak cihaz güç ilkesi sahibi, IRP'yi geçirmeden önce bir IoCompletion yordamı ayarlar. IoCompletion yordamında, cihaz güç IRP'sine yönelik bir IRP_MN_SET_POWER isteği gönderir. Daha fazla bilgi için bkz . Cihaz Güç İlkesi Sahibinde Sistem Set-Power IRP İşleme.
Sistem kümesi güç IRP'si sürücüleri sistem güç durumunda bir değişikliğin yakın olduğunu ve sürücülerin buna hazırlanmaları gerektiğini bildirir. Ancak, bir sürücü bir cihaz güç durumu için IRP_MN_SET_POWER alıncaya kadar cihazının güç durumunu değiştirmemelidir.
Parameters.Power.ShutdownType değeri, bekleyen eylemler hakkında ek bilgi sağlar. IRP PowerSystemShutdown (S5) değerini belirttiğinde, bir sürücü sistemin sıfırlanıp sıfırlanmadığını (PowerActionShutdownReset) veya daha sonra yeniden başlatmak için süresiz olarak kapatılıp kapatılmadığını belirleyebilir (PowerActionShutdownOff). Çoğu cihazın sürücüleri için fark önemsizdir. Ancak, video akış cihazları gibi bazı cihazlarda, sistem sıfırlanırken G/Ç'yi durdurmak için bir sürücü cihazı kapatabilir.
ShutdownType'daki değer PowerActionShutdown da olabilir. Bu durumda, sürücü ne tür bir kapatma istendiğinden bahsedemez ve bu nedenle sıfırlama işlemine devam etmelidir.
Cihaz Güç Durumları
Bir veri yolu sürücüsünün üzerinde bulunan işlev ve filtre sürücüleri, cihaz güç durumunu ayarlama isteğinde başarısız olmamalıdır. Bus sürücüsü, cihaz kaldırılırsa veya kaldırılma sürecinde bir cihaz güç açma isteğinde başarısız olabilir.
Bir sürücü, IRP'yi tamamlamadan önce cihazı istenen duruma ayarlamalıdır.
IRP daha düşük bir güç durumuna geçiş istediğinde, sürücülerin cihaz yığınında aşağı doğru ilerlerken IRP'yi işlemesi ve sürücünün cihazı çalışma durumuna geri yüklemek için ihtiyaç duyduğu bağlamı kaydetmesi gerekir. Bir veri yolu sürücüsü bir IRP aldıktan sonra, sürücü:
Sürücünün cihazı çalışma durumuna geri yüklemesi için gereken bağlamı kaydeder.
Cihazı istenen güç durumuna ayarlar.
Power Manager'a bildirmek için PoSetPowerState'i çağırır.
Sonraki güç IRP'sini başlatmak için PoStartNextPowerIrp'i çağırır (yalnızca Windows Server 2003, Windows XP ve Windows 2000).
Cihaz güç IRP'sini tamamlar.
Sürücünün bu IRP'yi zamanında tamamlaması gerekir. Genel olarak, sürücüler tipik bir kullanıcının dikkat çekici derecede yavaş bulacağı gecikmelerden kaçınmalıdır. Örneğin, bir sürücü önbelleğe alınmış disk veya ağ verilerini temizlemek için sistem durumu değişikliğini geciktirebilir, ancak ağ bağlantısını canlı tutmamalı veya bir bandı biçimlendirmemelidir. Daha fazla bilgi için bkz. Power IRP'leri geçirme.
İşletim sisteminin Windows 2000 ve sonraki sürümlerinde, IRP PowerDeviceD1, PowerDeviceD2 veya PowerDeviceD3 belirtiyorsa ve bir sistem kümesi güç IRP etkinse Parameters.Power.ShutdownType değeri sistem IRP'siyle ilgili bilgi sağlar.
Hazırda bekleme yolundaki cihazların sürücüleri bu değeri incelemelidir. IRP , PowerDeviceD3 ve ShutdownType istekleri PowerActionHibernate ise, böyle bir sürücü cihazı geri yüklemek için gereken bağlamı kaydetmeli, ancak cihazı kapatmamalıdır; makine güç kaybettiğinde cihaz D3 durumuna girer.
İşletim sisteminin Windows 2000 ve sonraki sürümlerinde, istenen güç durumu PowerDeviceD0 ise sürücülerin ShutdownType'daki değere güvenmemesi gerekir.
Windows 98/Me'de, IRP bir cihaz güç durumu isterse ShutdownType her zaman PowerActionNone olur.
Bir cihazın ne zaman kapatıldığını belirleyen sürücü, cihaz sınıfına bağlı olarak değişir.
Bir cihazın ne zaman açıldığını belirleyen sürücü, neredeyse her zaman cihaz kayıtlarına erişen bir sürücüdür. Sürücünün, cihazın donanım kayıt defterine erişmeden önce D0 durumunda olduğunu doğrulaması gerekir. Cihaz D0 durumunda değilse, sürücünün cihazı açmak üzere bir IRP göndermek için PoRequestPowerIrp'i çağırması gerekir. Sürücü, cihaz D0 durumunda olmadığı sürece cihazına erişemez.
Bir sürücü cihaz durumu D0 için bir set-power IRP aldığında, bir IoCompletion yordamı ayarlar ve IRP'yi sonraki alt sürücüye geçirir.
IRP veri yolu sürücüsüne ulaştığında, bu sürücü cihaza güç uygular (veya sıfırlar), PoStartNextPowerIrp 'i (yalnızca Windows Server 2003, Windows XP ve Windows 2000) çağırır ve cihazın yeni güç durumunu güç yöneticisine bildirmek için PoSetPowerState'i çağırır.
Veri yolu sürücüsü güç açma IRP'sini tamamladıktan sonra işlev ve filtre sürücüleri, cihaz yığınını yedeklerken IoCompletion yordamlarında IRP'yi işler. IoCompletion yordamında, her sürücü cihaz bağlamını geri yükler veya yeniden başlatır ve diğer gerekli başlatma görevlerini gerçekleştirir.
Daha fazla bilgi için bkz . Cihaz Güç Durumları için IRP_MN_SET_POWER işleme.
Gereksinimler
Üstbilgi: Wdm.h (Wdm.h, Ntddk.h veya Ntifs.h dahil)