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.
Ara sürücü, gücü çalışma durumuna (ağ cihazı güç durumu D0) ve uyku durumlarına (D1, D2 veya D3 ağ cihazı güç durumu) ayarlama isteklerini işlemelidir. Ara birim sürücüsü ayrıca güç durumu değişkenlerini ve StandBy bayrağını da tutmalıdır. Bu sorunlar bu konu başlığında daha ayrıntılı olarak ele alınmıştır.
Ara sürücü güç yönetimi örnekleri için GitHub'daki Windows sürücü örnekleri deposundaki NDIS MUX Ara Sürücüsü ve Bildirim Nesnesi sürücü örneğine bakın.
Güç İsteğini Uyku Durumuna Ayarlamayı İşleme
Ara sürücünün, uyku durumuna yönelik bir güç isteğini işlemeyi gerektiren iki durum vardır:
NDIS, ara sürücüsünün sanal miniport üst katmanının uyku moduna geçmesini istemektedir.
Ara sürücü protokolü alt katmanı, bir Tak ve Kullan (PnP) olay bildirimi aldığında temel miniport sürücüsünün uyku moduna geçişini yönetir.
Bu olaylar herhangi bir sırada gerçekleşebilir ve bir olayın diğerine eşlik etmesi gerekmez.
Ara sürücünün sanal miniport üst kenarı, uyku durumuna güç ayarlama isteği aldığında, isteği işlemeye yönelik olayların sırası aşağıdaki gibidir:
NDIS, sanal miniport'a bağlı her protokol sürücüsünün ProtocolNetPnPEvent işlevini çağırır. ProtocolNetPnPEvent çağrısı, uyku durumu için NetEventSetPower olayını belirtir. Ara sürücüye bağlı protokol sürücüleri, ağ verilerini göndermeyi ve ara sürücü sanal mini penceresine OID istekleri göndermeyi durdurur. Ara sürücünün protokol taban katmanı, NDIS temel alınan miniport sürücüsünün uyku durumuna geçiş yaptığını belirtmediği sürece ağ verilerini ve istekleri göndermeye devam edebilir.
NDIS, NetEventSetPower olayını verdikten sonra katman sürücüleri ve sonrasında sanal miniport'u duraklatır. Duraklamanın belirtilen nedeni, düşük güç durumuna geçiştir. Sanal miniportu duraklatma hakkında daha fazla bilgi için bkz. Bağdaştırıcı Duraklatma.
Not sanal miniport düşük güç durumundayken sanal miniport'a OID_PNP_SET_POWERdışında hiçbir OID isteği gönderilemiyor.
NDIS, ara sürücünün sanal miniportuna bir OID_PNP_SET_POWER isteği iletir. Ara sürücü, NDIS_STATUS_SUCCESS döndürerek isteği kabul eder. Ara sürücü, OID_PNP_SET_POWER isteğini temel alınan miniport sürücüsüne yaymamalıdır. Ara sürücü bu isteği tamamladıktan sonra, temel alınan miniport sürücüsünden ağ verilerini ve durum göstergelerini almaya devam etse bile daha fazla alınan ağ verilerini veya durumu göstermemelidir.
Ara sürücü protokol alt katmanı temel miniport sürücüsünü uyku durumuna geçirdiğinde, geçişi yönetmeye yönelik olayların dizisi aşağıdaki gibidir:
NDIS, ara sürücü protokolü alt kenarının ProtocolNetPnPEvent işlevini çağırır. ProtocolNetPnPEvent çağrısı, uyku durumu için NetEventSetPower olayını belirtir. Ara sürücü, ağ verileri göndermeyi ve temel alınan miniport sürücüsüne OID istekleri göndermeyi durdurmalıdır. Bekleyen istekler veya gönderimler varsa, ara sürücü ProtocolNetPnPEventçağrısından NDIS_STATUS_PENDING döndürmelidir. Ara sürücü, ProtocolNetPnPEventçağrısını tamamlamak için NdisCompleteNetPnPEvent çağırır. Ara sürücünün protokol kenarı, temel alınan miniport sürücüsünden paket ve durum göstergelerini almaya devam edebilir. Alınan ağ verileri göz ardı edilebilir. Eğer ara sürücü uygulaması, miniport sürücüsünün durumunu izlemeye bağlıysa, durum göstergeleri yine de izlenmelidir.
NDIS, ara sürücünün protokol kenarını duraklatır ve NetEventSetPower olayını verdikten sonra altta yatan miniport bağdaştırıcısını duraklatır. Duraklamanın belirtilen nedeni, düşük güç durumuna geçiştir. Protokol bağlamasını duraklatma hakkında daha fazla bilgi için bkz. Bağlamayı Durdurma.
Not: Temel alınan miniport bağdaştırıcısı düşük güç durumundayken OID_PNP_SET_POWERdışında hiçbir OID isteği gönderilemez.
NDIS, alttaki miniport sürücüsüne bir OID_PNP_SET_POWER isteği gönderir. Ancak, temel alınan miniport sürücüsü güç yönetimini desteklemiyorsa durdurulur. Bu durumda, NDIS temel alınan miniport sürücüsünü durdursa bile, ara sürücü protokolünün temel alınan miniport sürücüsünden ve NIC'den bağlantısını kesmesini istemez. Temel alınan miniport sürücüsü OID'yi işlemeyi başarıyla tamamladıktan (veya miniport sürücüsü durdurulduktan) sonra, artık herhangi bir ağ verisi veya durumu belirtmeyecektir.
Güç İsteğini Çalışma Durumuna Ayarlamayı İşleme
Ara sürücünün belirli bir güç isteğini çalışma durumuna işlemesi iki durum vardır:
NDIS, ara sürücünün sanal miniportunun üst katmanının çalışma durumuna geçmesini istemektedir.
Ara sürücü protokolü alt katmanı, bir Tak ve Çalıştır (PnP) olay bildirimi aldığında temel miniport sürücüsünün çalışma durumuna geçişini yönetir.
Bu olaylar herhangi bir sırada gerçekleşebilir ve bir olayın diğerine eşlik etmesi gerekmez.
Ara sürücünün sanal miniport üst kenarı, gücü çalışma durumuna ayarlama isteği aldığında, isteği işlemeye yönelik olay dizisi aşağıdaki gibidir:
NDIS, ara sürücünün sanal miniportuna bir OID_PNP_SET_POWER verir. Ara katman sürücüsü, ayarlanan güç isteğine NDIS_STATUS_SUCCESS döndürür. Ara sürücü, OID_PNP_SET_POWER isteğini temel alınan miniport sürücüsüne yaymamalıdır.
NDIS, sanal miniportu yeniden başlatır ve ardından güç OID'sini ayarladıktan sonra üstteki sürücüleri yeniden başlatır. Sanal bir miniportu yeniden başlatma hakkında daha fazla bilgi için bkz. Adaptör Yeniden Başlatma.
NDIS, üst protokol sürücülerinin ProtocolNetPnPEvent fonksiyonunu çağırır. ProtocolNetPnPEvent çağrısı, çalışma durumunu (D0) ayarlamak için bir NetEventSetPower olayı belirtir. Bağlı protokol sürücüleri, ara sürücünün sanal mini penceresine ağ verileri göndermeye başlayabilir.
Ara sürücünün protokol alt kenarı, temel alınan miniport sürücüsünü çalışma durumuna geçirdiğinde, geçişi işlemeye yönelik olayların dizisi aşağıdaki gibidir:
NDIS, temel alınan miniport sürücüsüne bir OID_PNP_SET_POWER oluşturur veya temel alınan miniport sürücüsü durdurulduysa MiniportInitializeEx işleyicisini çağırır.
NDIS, OID'yi verdikten sonra temel alınan miniport sürücüsünü ve ardından ara NDIS'nin protokol kenarını ve temel alınan miniport bağdaştırıcısını yeniden başlatır. Protokol bağlamasını duraklatma hakkında daha fazla bilgi için bkz. Bağlamayı Yeniden Başlatma.
NDIS, ara sürücünün ProtocolNetPnPEvent işlevini çağırır. ProtocolNetPnPEvent çağrısı, çalışma durumunu (D0) ayarlamak için bir NetEventSetPower olayı belirtir. Ara sürücü, ağ verilerini temel alınan miniport sürücüsüne göndermeye başlayabilir.
Güç Durumları ve Bekleme Bayrağı
Ara sürücü, her sanal miniport örneği ve sürücünün bağlı olduğu temel alınan her miniport sürücüsü için ayrı bir güç durumu değişkeni tutmalıdır. Ara sürücü, aşağıdaki her sanal miniport için bir StandingBy bayrağı da bulundurmalıdır:
Sanal miniport veya temel alınan miniport sürücüsünün güç durumu D0'dan ayrıldığında TRUE olarak ayarlayın.
Güç durumu sanal miniport veya temel miniport sürücüsü için D0'ye döndüğünde, ayarı FALSE olarak yapın.
Not MUX ara sürücüler için, altta yatan bir miniport sürücüsüyle ilişkili birden fazla sanal miniport veya her sanal miniportla ilişkili birden fazla altta yatan miniport olabilir. Herhangi bir miniport bağdaştırıcısının güç durumu değiştiğinde, ilişkili tüm miniport'ların davranışı da etkilenir. Davranışın nasıl etkilendiği uygulamaya özgüdür. Örneğin, Yük Dengeleme Yük Devretme (LBFO) çözümü uygulayan bir sürücü, herhangi bir temel miniport sürücüsü devre dışı bırakıldığında sanal miniportları devre dışı bırakamayabilir. Ancak, temel alınan tüm miniport sürücülerine bağlı bir sürücü uygulaması, temel alınan herhangi bir miniport sürücüsü devre dışı bırakıldığında sanal miniport'ların devre dışı bırakılmasına ihtiyaç duyar.
Ara sürücü, istekleri işlerken Aşağıdaki gibi StandingBy bayrağını ve güç durumu değişkenlerini kullanmalıdır:
Sürücünün MiniportSendNetBufferLists işlevi, sanal miniport ve temel alınan miniport bağdaştırıcısının her ikisi de D0'de olmadığı sürece başarısız olmalıdır.
Sürücünün MiniportOidRequest işlevi, sürücünün sonraki OID_PNP_SET_POWER isteklerini almasını sağlamak için her zaman OID_PNP_QUERY_POWER'ı başarıyla tamamlamalıdır.
Sanal miniport D0'de değilse veya StandingBy TRUE ise sürücünün MiniportOidRequest işlevi başarısız olmalıdır. Aksi takdirde, temel alınan miniport sürücüsü D0'de değilse tek bir isteği kuyruğa almalıdır. Miniport sürücüsünün temel durumu D0 olduğunda kuyruğa alınmış bir istek işlenmelidir.
Ara sürücüye ait sanal miniport, yalnızca hem temel alınan miniport sürücüsü hem de sanal miniport D0'daysa durumu bildirmelidir.