Menginisialisasi Driver Protokol

Sistem memanggil rutin DriverEntry dari driver protokol setelah memuat driver. Penggerak protokol diaktifkan sebagai layanan sistem. Mereka dapat memuat kapan saja sebelum, selama, atau setelah driver miniport dimuat.

Driver protokol mengalokasikan sumber daya pengemudi dan mendaftarkan fungsi ProtocolXxx di DriverEntry. Ini termasuk klien CoNDIS dan manajer panggilan mandiri. Untuk mendaftarkan fungsi ProtocolXxx dengan NDIS, driver protokol memanggil fungsi NdisRegisterProtocolDriver.

DriverEntry mengembalikan STATUS_SUCCESS, atau NDIS_STATUS_SUCCESS yang setara, jika pendaftaran driver sebagai driver protokol NDIS berhasil. Jika DriverEntry gagal melakukan inisialisasi dengan meneruskan status kesalahan yang dikembalikan oleh fungsi NdisXxx atau oleh rutinitas dukungan mode kernel, driver tersebut tidak akan tetap aktif. DriverEntry harus dijalankan secara sinkron; artinya, tidak dapat mengembalikan STATUS_PENDING atau NDIS_STATUS_PENDING yang setara.

Fungsi DriverEntry dari driver protokol NDIS harus memanggil fungsi NdisRegisterProtocolDriver. Untuk mendaftarkan titik masuk ProtocolXxx dari driver dengan pustaka NDIS, driver protokol menginisialisasi struktur NDIS_PROTOCOL_DRIVER_CHARACTERISTICS dan meneruskannya ke NdisRegisterProtocolDriver.

Driver yang memanggil NdisRegisterProtocolDriver harus siap menerima panggilan segera ke salah satu fungsi ProtocolXxx mereka.

Driver protokol NDIS menyediakan fungsi ProtocolXxx berikut, yang merupakan versi terbaru dari fungsi yang disediakan driver warisan:

ProtocolSetOptions

ProtocolBindAdapterEx

ProtocolUnbindAdapterEx

Protokol OpenAdapterCompleteEx

ProtocolCloseAdapterCompleteEx

ProtocolNetPnPEvent

ProtocolUninstall

Driver protokol NDIS menyediakan fungsi ProtocolXxx berikut untuk operasi kirim dan terima:

ProtocolReceiveNetBufferLists

ProtocolSendNetBufferListsComplete

Semua jenis driver protokol NDIS harus mendaftarkan fungsi ProtocolBindAdapterEx dan ProtocolUnbindAdapterEx untuk mendukung Plug and Play (PnP). Secara umum, fungsi DriverEntry harus memanggil NdisRegisterProtocolDriver segera sebelum mengembalikan kontrol dengan nilai status STATUS_SUCCESS atau NDIS_STATUS_SUCCESS.

Setiap driver protokol yang mengekspor serangkaian rutinitas driver mode kernel standar selain fungsi ProtocolXxxx yang ditentukan NDIS harus mengatur titik masuk untuk rutinitas driver tersebut dalam objek driver tertentu yang diteruskan ke fungsi DriverEntry. Untuk informasi selengkapnya tentang fungsionalitas fungsi DriverEntry driver protokol seperti itu, lihat Menulis Rutinitas DriverEntry.

Jika upaya untuk mengalokasikan sumber daya yang dibutuhkan driver untuk melakukan operasi I/O jaringan gagal, DriverEntry harus merilis semua sumber daya yang sudah dialokasikan sebelum mengembalikan kontrol dengan status selain STATUS_SUCCESS atau NDIS_STATUS_SUCCESS.

Jika terjadi kesalahan setelah berhasil memanggil NdisRegisterProtocolDriver, driver harus memanggil fungsi NdisDeregisterProtocolDriver sebelum fungsi DriverEntry mengembalikan.

Untuk mengizinkan driver protokol mengonfigurasi layanan opsional, NDIS memanggil fungsi ProtocolSetOptions dalam konteks panggilan driver protokol ke NdisRegisterProtocolDriver. Untuk informasi selengkapnya tentang layanan opsional, lihat Mengonfigurasi Layanan Driver Protokol Opsional.

Driver klien CoNDIS harus memanggil fungsi NdisSetOptionalHandlers dari fungsi ProtocolSetOptions. Driver menginisialisasi struktur NDIS_CO_CLIENT_OPTIONAL_HANDLERS dan meneruskannya ke parameter OptionalHandlers dari NdisSetOptionalHandlers.

Manajer panggilan mandiri CoNDIS juga harus memanggil fungsi NdisSetOptionalHandlers dari fungsi ProtocolSetOptions. Driver menginisialisasi struktur NDIS_CO_CALL_MANAGER_OPTIONAL_HANDLERS dan meneruskannya pada parameter OptionalHandlers dari NdisSetOptionalHandlers.

MCM tidak merupakan driver protokol. Oleh karena itu, mereka harus memanggil fungsi NdisSetOptionalHandlers dari fungsi MiniportSetOptions. MCM menginisialisasi struktur NDIS_CO_CALL_MANAGER_OPTIONAL_HANDLERS dan meneruskannya pada parameter OptionalHandlers dari NdisSetOptionalHandlers.

Untuk membatalkan pendaftaran dengan NDIS, driver protokol memanggil NdisDeregisterProtocolDriver dari rutinitas Unload.

Untuk melakukan operasi pembersihan sebelum driver protokol dihapus instalannya, driver protokol dapat mendaftarkan fungsi ProtocolUninstall. Fungsi ProtocolUninstall bersifat opsional. Misalnya, bagian bawah protokol dari driver perantara mungkin memerlukan fungsi ProtocolUninstall. Driver perantara dapat merilis sumber daya tepi protokolnya di ProtocolUninstall sebelum NDIS memanggil fungsinya MiniportDriverUnload.