Bagikan melalui


Memfilter Permintaan OID di Driver Filter NDIS

Driver filter dapat memproses permintaan OID yang berasal dari driver yang terlalu berlebihan. NDIS memanggil fungsi FilterOidRequest untuk memproses setiap permintaan OID. Driver filter dapat meneruskan permintaan OID ke driver yang mendasar dengan memanggil fungsi NdisFOidRequest .

NDIS dapat memanggil fungsi FilterCancelOidRequest driver filter untuk membatalkan permintaan OID. Ketika NDIS memanggil FilterCancelOidRequest, driver filter harus mencoba memanggil fungsi NdisFOidRequest sesegera mungkin.

Gambar berikut mengilustrasikan permintaan OID yang difilter.

Diagram yang mengilustrasikan proses permintaan OID yang difilter.

Driver filter dapat menyelesaikan permintaan OID secara sinkron atau asinkron dengan mengembalikan NDIS_STATUS_SUCCESS atau NDIS_STATUS_PENDING, masing-masing, dari FilterOidRequest. FilterOidRequest juga dapat diselesaikan secara sinkron dengan status kesalahan.

Driver filter yang berhasil menangani permintaan set OID harus mengatur anggota SupportedRevision dalam struktur NDIS_OID_REQUEST saat kembali dari permintaan set OID. Anggota SupportedRevision memberi tahu inisiator permintaan OID tentang revisi mana yang didukung driver. Untuk informasi selengkapnya tentang informasi versi dalam struktur NDIS, lihat Menentukan Informasi Versi NDIS.

Jika FilterOidRequest mengembalikan NDIS_STATUS_PENDING, filter harus memanggil fungsi NdisFOidRequestComplete setelah menyelesaikan permintaan OID. Dalam hal ini, driver meneruskan hasil permintaan pada parameter OidRequestdari NdisFOidRequestComplete. Driver melewati status akhir permintaan pada parameter StatusNdisFOidRequestComplete.

Jika FilterOidRequest mengembalikan NDIS_STATUS_SUCCESS, filterOidRequest mengembalikan hasil permintaan kueri dalam struktur NDIS_OID_REQUEST di parameter OidRequest . Dalam hal ini, driver tidak memanggil fungsi NdisFOidRequestComplete .

Untuk meneruskan permintaan OID ke driver yang mendasar, driver filter memanggil fungsi NdisFOidRequest . Jika permintaan tidak boleh diteruskan ke driver yang mendasar, driver filter dapat segera menyelesaikan permintaan. Untuk menyelesaikan permintaan tanpa penerusan, driver dapat mengembalikan NDIS_STATUS_SUCCESS (atau status kesalahan) dari FilterOidRequest, atau dapat memanggil NdisFOidRequestComplete setelah mengembalikan NDIS_STATUS_PENDING.

Catatan Sebelum driver memanggil NdisFOidRequest, driver harus mengalokasikan struktur NDIS_OID_REQUEST dan mentransfer informasi permintaan ke struktur baru dengan memanggil NdisAllocateCloneOidRequest.

Permintaan yang diteruskan berlanjut sama dengan permintaan yang dimulai oleh driver filter. Untuk informasi selengkapnya, lihat Membuat Permintaan OID dari Driver Filter NDIS.

Setelah driver yang mendasar menyelesaikan permintaan yang diteruskan, driver filter dapat memodifikasi respons, jika perlu, dan meneruskannya ke driver yang terlalu mengandalkan.

Driver filter dapat menerima permintaan OID dari driver yang terlalu berlebihan saat berada dalam status Memulai Ulang, Menjalankan, Menjeda, atau Dijeda .

Catatan Seperti driver miniport, driver filter hanya dapat menerima satu permintaan OID pada satu waktu. Karena NDIS menserialisasikan permintaan yang dikirim ke modul filter, driver filter tidak dapat dipanggil di FilterOidRequest sebelum menyelesaikan permintaan sebelumnya.

Berikut ini adalah contoh driver filter yang memodifikasi permintaan OID:

  • Driver filter menambahkan header. Dalam hal ini, setelah driver menerima respons terhadap kueri untuk OID_GEN_MAXIMUM_FRAME_SIZE dari driver yang mendasar, filter mengurangi ukuran headernya dari respons. Driver mengurangi ukuran headernya karena driver menyisipkan header di depan setiap paket yang dikirim dan menghapus header di setiap paket yang diterima.