Menginisialisasi Driver Filter

Inisialisasi driver filter terjadi segera setelah sistem memuat driver. Filter driver dimuat sebagai layanan sistem. Sistem dapat memuat driver filter kapan saja sebelum, selama, atau setelah driver miniport dimuat. NDIS dapat melampirkan modul filter ke adaptor miniport setelah adaptor miniport jenis yang didukung oleh driver filter tersedia dan inisialisasi driver filter selesai.

Saat rangkaian driver dimulai, sistem memasang driver filter jika belum terpasang. Untuk informasi selengkapnya tentang memulai driver stack yang menyertakan modul filter, lihat Memulai Driver Stack.

Setelah filter driver dimuat, sistem memanggil rutinitas driver DriverEntry.

Sistem meneruskan dua argumen ke DriverEntry:

  • Penunjuk ke objek driver, yang dibuat oleh sistem I/O.

  • Penunjuk ke jalur registri, yang menentukan tempat parameter khusus driver disimpan.

DriverEntry mengembalikan nilai STATUS_SUCCESS, atau NDIS_STATUS_SUCCESS yang setara dengan itu, jika driver berhasil terdaftar sebagai driver filter NDIS. Jika DriverEntry gagal menginisialisasi dengan menyebarkan status kesalahan yang dikembalikan oleh fungsi NdisXxx atau dengan rutinitas dukungan mode kernel, driver tidak akan tetap dimuat. DriverEntry harus dijalankan secara sinkron; artinya, tidak dapat mengembalikan STATUS_PENDING atau NDIS_STATUS_PENDING yang setara.

Driver filter meneruskan objek driver ke fungsi NdisFRegisterFilterDriver ketika terdaftar di NDIS sebagai driver filter. Driver dapat menggunakan jalur registri untuk mendapatkan informasi konfigurasi. Untuk informasi selengkapnya tentang cara mengakses informasi konfigurasi driver filter, lihat Mengakses Informasi Konfigurasi untuk Driver Filter.

Filter driver memanggil NdisFRegisterFilterDriver dari rutinitas DriverEntry. Driver filter mengekspor sekumpulan fungsi FilterXxx dengan melewatkan struktur NDIS_FILTER_DRIVER_CHARACTERISTICS ke NdisFRegisterFilterDriver pada parameter FilterCharacteristics.

Struktur NDIS_FILTER_DRIVER_CHARACTERISTICS menentukan titik masuk untuk fungsi FilterXxx wajib dan opsional. Beberapa fungsi opsional dapat dilewati. Untuk informasi selengkapnya tentang cara mengelak fungsi, lihat di Mode Bypass Data .

Driver yang memanggil NdisFRegisterFilterDriver harus siap untuk panggilan langsung ke salah satu fungsi FilterXxx mereka.

Struktur NDIS_FILTER_DRIVER_CHARACTERISTICS menentukan titik masuk untuk fungsi FilterXxx wajib ini:

FilterAttach

FilterDetach

FilterRestart

FilterPause

Struktur NDIS_FILTER_DRIVER_CHARACTERISTICS menentukan titik masuk untuk fungsi FilterXxx yang opsional dan tidak dapat diubah saat run-time: FilterXxx.

FilterSetOptions

FilterSetModuleOptions

FilterOidRequest

FilterOidRequestComplete

FilterStatus

FilterNetPnPEvent

FilterDevicePnPEventNotify

FilterCancelSendNetBufferLists

Struktur NDIS_FILTER_DRIVER_CHARACTERISTICS menentukan titik masuk default untuk fungsi-fungsi opsional ini; yang dapat diubah saat run-time, FilterXxx:

FilterSendNetBufferLists

FilterSendNetBufferListsComplete

FilterReturnNetBufferLists

FilterReceiveNetBufferLists

Empat fungsi sebelumnya juga didefinisikan dalam struktur NDIS_FILTER_PARTIAL_CHARACTERISTICS. Struktur ini menentukan fungsi yang dapat dikonfigurasi pada run time dengan memanggil fungsi NdisSetOptionalHandlers dari fungsi FilterSetModuleOptions. Jika driver filter akan mengubah karakteristik parsial ini selama waktu proses, driver harus menyediakan titik masuk untuk FilterSetModuleOptions. Karakteristik parsial dapat berbeda untuk setiap modul filter. Untuk informasi lebih lanjut, lihat Memulai Modul Filter.

NDIS memanggil fungsi FilterSetOptions dalam konteks panggilan ke NdisFRegisterFilterDriver. FilterSetOptions mendaftarkan layanan opsional ke NDIS. Untuk informasi selengkapnya, lihat Mengonfigurasi Layanan Driver Filter Opsional.

Jika panggilan ke NdisFRegisterFilterDriver berhasil, NDIS mengisi variabel di NdisFilterDriverHandle dengan handle driver filter. Driver filter menyimpan handel ini dan kemudian meneruskan handel ini ke fungsi NDIS, seperti NdisFDeregisterFilterDriver, yang memerlukan handel driver filter sebagai parameter input. Ketika driver dilepas, harus memanggil fungsi NdisFDeregisterFilterDriver untuk melepaskan sumber daya yang telah dialokasikan oleh NdisFRegisterFilterDriver.

Setelah FilterSetOptions kembali, modul filter berada dalam status Dilepas . NDIS dapat memanggil fungsi FilterAttach driver filter kapan saja setelah panggilan ke FilterSetOptions dikembalikan. Driver melakukan inisialisasi spesifik modul filter dalam fungsi FilterAttach. Untuk informasi selengkapnya tentang melampirkan modul filter ke tumpukan driver, lihat Melampirkan Modul Filter.

Driver filter juga melakukan inisialisasi khusus driver lainnya yang diperlukan dalam DriverEntry. Driver filter harus melepaskan sumber daya khusus terkait driver yang dialokasikannya dalam rutinitas FilterDriverUnload. Untuk informasi selengkapnya, lihat Membongkar Driver Filter.