Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Driver perantara harus menangani permintaan untuk mengatur daya ke status kerja (status daya perangkat jaringan D0) dan ke status tidur (status daya perangkat jaringan D1, D2, atau D3). Driver perantara juga harus mempertahankan variabel status daya dan flag StandBy. Masalah ini dibahas lebih lanjut dalam topik ini.
Untuk contoh manajemen daya driver perantara, lihat NDIS MUX Intermediate Driver dan sampel driver Notify Object di repositori sampel driver Windows di GitHub.
Menangani Pengaturan Permintaan Daya ke Mode Tidur
Ada dua kasus di mana driver perantara harus menangani permintaan daya yang ditetapkan ke status tidur:
NDIS meminta agar bagian atas miniport virtual dari driver perantara beralih ke status tidur.
Protokol driver perantara lapisan bawah menangani transisi driver miniport yang mendasar ke mode tidur ketika menerima pemberitahuan acara Plug and Play (PnP).
Peristiwa ini dapat terjadi dalam urutan apa pun dan satu peristiwa tidak selalu menyertai yang lain.
Ketika batas atas miniport virtual pengandar perantara menerima permintaan untuk mengubah daya ke keadaan tidur, urutan peristiwa untuk menangani permintaan adalah sebagai berikut:
NDIS memanggil fungsiProtocolNetPnPEvent dari setiap driver protokol yang terikat ke miniport virtual. Panggilan ke ProtocolNetPnPEvent menentukan peristiwa NetEventSetPower untuk keadaan tidur. Driver protokol yang terikat ke driver perantara berhenti mengirim data jaringan dan membuat permintaan OID ke miniport virtual driver perantara. Lapisan protokol terendah driver perantara dapat terus mengirim data jaringan dan permintaan turun sampai NDIS tunjukkan bahwa driver miniport yang mendasar sedang membuat transisi ke dalam keadaan tidur.
NDIS menjeda driver di atasnya dan kemudian miniport virtual setelah mengeluarkan peristiwa NetEventSetPower. Alasan yang ditentukan untuk jeda adalah transisi ke status daya rendah. Untuk informasi selengkapnya tentang menjeda miniport virtual, lihat Pausing an Adapter.
Catatan Tidak ada permintaan OID yang dapat dikirim ke miniport virtual saat dalam keadaan berdaya rendah, dengan pengecualian OID_PNP_SET_POWER.
NDIS mengeluarkan permintaan OID_PNP_SET_POWER ke miniport virtual dari driver pengantara. Driver perantara menerima permintaan dengan mengembalikan NDIS_STATUS_SUCCESS. Driver perantara tidak boleh menyebarluaskan permintaan OID_PNP_SET_POWER ke driver miniport yang mendasar. Setelah driver perantara tersebut menyelesaikan permintaan ini, driver ini tidak boleh memberikan indikasi data jaringan yang diterima lagi atau memberikan indikasi status, bahkan jika terus menerima data jaringan dan indikasi status dari driver miniport di bawahnya.
Ketika lapisan bawah protokol dari driver perantara mentransisikan driver miniport yang mendasar ke keadaan tidur, urutan langkah untuk menangani transisi adalah sebagai berikut:
NDIS memanggil fungsi ProtocolNetPnPEvent dari lapisan bawah protokol driver perantara. Panggilan ke ProtocolNetPnPEvent menentukan peristiwa NetEventSetPower untuk keadaan tidur. Driver perantara harus berhenti mengirim data jaringan dan membuat permintaan OID ke driver miniport yang berada di bawah. Jika ada permintaan atau pengiriman data yang tertunda, driver perantara harus mengembalikan NDIS_STATUS_PENDING dari panggilan ke ProtocolNetPnPEvent. Driver perantara memanggil NdisCompleteNetPnPEvent untuk menyelesaikan panggilan ke ProtocolNetPnPEvent. Antarmuka protokol driver menengah masih dapat menerima paket dan indikasi status dari driver miniport yang berada di bawahnya. Data jaringan yang diterima dapat diabaikan. Jika implementasi driver perantara tergantung pada pemantauan status dari driver miniport yang mendasarinya, indikasi status harus tetap dipantau.
NDIS menjeda bagian protokol dari driver perantara dan kemudian menjeda adaptor miniport yang berada di bawahnya setelah mengeluarkan peristiwa NetEventSetPower. Alasan yang ditentukan untuk jeda adalah transisi ke status daya rendah. Untuk informasi selengkapnya tentang menjeda pengikatan protokol, lihat Menjeda pengikatan.
Catatan Tidak ada permintaan OID yang dapat dikirim ke adaptor miniport yang mendasar ketika sedang dalam status daya rendah, dengan pengecualian OID_PNP_SET_POWER.
NDIS mengirimkan permintaan OID_PNP_SET_POWER ke driver miniport dasar. Namun, jika driver miniport yang mendasar tidak mendukung manajemen daya, itu akan dihentikan. Dalam hal ini, meskipun NDIS menghentikan driver miniport yang mendasari, tidak meminta agar protokol driver menengah melepaskan hubungan dari driver miniport dan NIC yang mendasari. Setelah driver miniport yang mendasar berhasil menyelesaikan pemrosesan OID (atau driver miniport dihentikan), itu tidak akan menunjukkan data atau status jaringan lagi.
Menangani Permintaan Pengaturan Daya ke Status Kerja
Ada dua kasus di mana driver perantara menangani permintaan daya yang ditetapkan ke status kerja:
NDIS meminta agar bagian atas miniport virtual dari driver perantara beralih ke kondisi beroperasi.
Protokol driver perantara lapisan bawah mengelola transisi driver miniport ke kondisi operasi, ketika menerima notifikasi peristiwa Plug and Play (PnP).
Peristiwa ini dapat terjadi dalam urutan apa pun dan satu peristiwa tidak selalu menyertai yang lain.
Ketika lapisan atas miniport virtual dari driver menengah menerima permintaan untuk mengatur daya ke kondisi kerja, urutan langkah untuk memproses permintaan adalah sebagai berikut:
NDIS mengeluarkan OID_PNP_SET_POWER ke miniport virtual dari driver perantara. Driver perantara mengembalikan NDIS_STATUS_SUCCESS ke permintaan daya yang ditetapkan. Driver perantara tidak boleh menyebarluaskan permintaan OID_PNP_SET_POWER ke driver miniport yang mendasar.
NDIS memulai ulang miniport virtual dan kemudian memulai ulang driver yang berada di atasnya setelah mengeluarkan OID daya yang disetel. Untuk informasi selengkapnya tentang memulai ulang miniport virtual, lihat Memulai Adaptor.
NDIS memanggil fungsi ProtocolNetPnPEvent dari driver protokol yang melapisi. Panggilan ke ProtocolNetPnPEvent menentukan peristiwa NetEventSetPower untuk mengatur status kerja (D0). Driver protokol terikat dapat mulai mengirim data jaringan ke miniport virtual driver perantara.
Ketika protokol tepi bawah driver perantara mentransisikan driver miniport yang mendasar ke status kerja, urutan peristiwa untuk menangani transisi adalah sebagai berikut:
NDIS mengeluarkan OID_PNP_SET_POWER ke driver miniport yang mendasarinya atau memanggil handler MiniportInitializeEx jika driver miniport tersebut dihentikan.
NDIS memulai ulang driver miniport yang mendasar dan kemudian antarmuka protokol NDIS menengah serta adaptor miniport yang mendasar setelah mengeluarkan OID. Untuk informasi selengkapnya tentang menjeda pengikatan protokol, lihat Memulai Ulang pengikatan.
NDIS memanggil fungsi ProtocolNetPnPEvent dari driver perantara. Panggilan ke ProtocolNetPnPEvent menentukan peristiwa NetEventSetPower untuk mengatur status kerja (D0). Driver perantara dapat mulai mengirim data jaringan ke driver miniport yang mendasar.
Status Daya dan Bendera Siaga
Driver perantara harus mempertahankan variabel status daya terpisah untuk setiap instans miniport virtual dan untuk setiap driver miniport yang mendasar tempat driver terikat. Driver perantara juga harus mempertahankan bendera StandingBy untuk setiap miniport virtual yaitu:
Atur ke TRUE saat kondisi daya miniport virtual atau driver miniport yang mendasar beralih dari status D0.
Atur ke FALSE saat status daya miniport virtual atau driver miniport dasar kembali ke D0.
Note Untuk driver perantara MUX, mungkin ada beberapa miniport virtual yang terkait dengan driver miniport yang mendasar atau beberapa miniport yang mendasar yang terkait dengan setiap miniport virtual. Ketika status daya adaptor miniport berubah, perilaku semua miniport terkait juga terpengaruh. Bagaimana perilaku dipengaruhi tergantung pada implementasinya. Misalnya, driver yang menerapkan solusi Load Balancing Failover (LBFO) mungkin tidak menonaktifkan miniport virtual ketika satu driver miniport yang mendasarinya dinonaktifkan. Namun, implementasi driver yang bergantung pada semua driver miniport yang mendasar akan memerlukan penonaktifan driver miniport virtual ketika salah satu driver miniport yang mendasar dinonaktifkan.
Driver perantara harus menggunakan bendera StandingBy dan variabel status daya saat memproses permintaan sebagai berikut:
Fungsi driver MiniportSendNetBufferLists harus gagal kecuali miniport virtual dan miniport adapter yang mendasarinya keduanya berada di D0.
Fungsi driver MiniportOidRequest harus selalu berhasil dalam OID_PNP_QUERY_POWER untuk memastikan bahwa driver menerima permintaan OID_PNP_SET_POWER berikutnya.
Fungsi driver MiniportOidRequestperlu gagal jika miniport virtual tidak berada di D0 atau jika StandingBy TRUE. Jika tidak, sistem harus mengantre satu permintaan jika driver miniport yang mendasar tidak dalam mode D0. Permintaan dalam antrean harus diproses ketika status driver miniport yang mendasari berubah menjadi D0.
Driver miniport virtual perantara harus melaporkan status hanya jika driver miniport yang mendasari dan miniport virtual berada di D0.