fungsi FILTER_SYNCHRONOUS_OID_REQUEST (ndis.h)

NDIS memanggil fungsi FilterSynchronousOidRequest driver filter untuk mempratinjau permintaan OID Sinkron sebelum permintaan diberikan kepada driver miniport yang mendasar.

Fungsi ini didukung di NDIS 6.81 dan yang lebih baru.

Sintaks

NDIS_STATUS FILTER_SYNCHRONOUS_OID_REQUEST(
            NDIS_HANDLE      FilterModuleContext,
  [in, out] NDIS_OID_REQUEST *OidRequest,
  [out]     PVOID            *CallContext
);

Parameter

FilterModuleContext

Handel ke area konteks untuk modul filter yang merupakan target permintaan ini. Driver filter membuat dan menginisialisasi area konteks ini dalam fungsi FilterAttach .

[in, out] OidRequest

Penunjuk ke struktur NDIS_OID_REQUEST yang menentukan operasi yang diminta.

[out] CallContext

Slot penyimpanan berukuran PVOID untuk driver filter untuk berbagi status antara handler FilterSynchronousOidRequest dan FilterSynchronousOidRequestComplete . NDIS menjamin ini awalnya menunjuk ke nilai nol. Lihat bagian Keterangan untuk informasi selengkapnya.

Nilai kembali

Fungsi ini mengembalikan salah satu kode NDIS_STATUS yang sesuai berikut:

Menampilkan kode Deskripsi
NDIS_STATUS_SUCCESS Izinkan permintaan OID untuk terus menyebar ke driver miniport. Driver filter harus mengembalikan kode status ini untuk jenis OID yang tidak dikenal.
NDIS_STATUS_ALREADY_COMPLETE Berhenti menyebarkan permintaan OID ke bawah, dan sebaliknya kembalikan ke pemanggil dengan status NDIS_STATUS_SUCCESS.
  • NDIS_STATUS_BUFFER_TOO_SHORT
  • NDIS_STATUS_INVALID_LENGTH
  • NDIS_STATUS_INVALID_DATA
Sama seperti FilterDirectOidRequest.
NDIS_STATUS_RESOURCES Sama seperti FilterDirectOidRequest, tetapi dengan hati-hati bahwa permintaan OID sinkron harus diselesaikan dengan cepat, sehingga driver filter biasanya harus menghindari alokasi sumber daya.
NDIS_STATUS_NOT_SUPPORTED Driver filter tidak boleh mengembalikan kode ini hanya karena OID tidak dikenali. Driver filter hanya dapat mengembalikan ini jika filter mengenali operasi tetapi tidak dapat melakukannya karena alasan tertentu.

Keterangan

FilterSynchronousOidRequest adalah fungsi opsional. Jika driver filter tidak perlu mengamati atau memodifikasi permintaan OID Sinkron yang dikirim ke driver miniport, driver filter harus mengatur titik masuk untuk fungsi ini ke NULL saat memanggil NdisFRegisterFilterDriver.

NDIS memanggil fungsi FilterSynchronousOidRequest driver filter untuk memproses permintaan OID sinkron yang berasal dari driver yang terlalu berlebihan. Driver filter dapat membaca atau mengubah beberapa bidang dalam struktur NDIS_OID_REQUEST sebagai berikut:

Bidang Memfilter akses
Header Baca-saja
RequestType Baca/Tulis
PortNumber Baca/Tulis
Batas waktu Jangan akses
RequestId Jangan akses
RequestHandle Baca/Tulis
DATA Baca/Tulis
NdisReserved Jangan akses
MiniportReserved Jangan akses
SourceReserved Jangan akses
SupportedRevision Baca/Tulis
Reserved1, Reserved2 Jangan akses
SwitchId Baca/Tulis
VPortId Baca/Tulis
Bendera Baca/Tulis

Selain memodifikasi struktur NDIS_OID_REQUEST , driver filter dapat mengontrol permintaan menggunakan kode pengembalian dari FilterSynchronousOidRequest:

  • NDIS_STATUS_SUCCESS: OID terus menyebar ke driver miniport.
  • NDIS_STATUS_ALREADY_COMPLETE: OID segera diselesaikan kembali ke driver yang terlalu mengandalkan, tanpa terlebih dahulu menyebar ke driver miniport. Permintaan OID diselesaikan ke driver yang terlalu berlebihan dengan NDIS_STATUS_SUCCESS.
  • Kode status lainnya: OID segera diselesaikan kembali ke driver yang terlalu mengandalkan, tanpa terlebih dahulu menyebar ke driver miniport. Permintaan OID diselesaikan ke driver yang terlalu berlebihan dengan kode status yang dikembalikan oleh driver filter.

Jika driver filter juga mendaftarkan handler FilterSynchronousOidRequestComplete , NDIS menjamin bahwa handler FilterSynchronousOidRequestComplete akan dipanggil jika dan hanya jika handler FilterSynchronousOidRequest mengembalikan NDIS_STATUS_SUCCESS.

Handler FilterSynchronousOidRequest dapat menulis nilai berukuran PVOID apa pun ke *CallContext, dan nilai yang sama akan dikembalikan ke handler FilterSynchronousOidRequestComplete driver filter saat permintaan OID selesai. Driver filter dapat menggunakan ini untuk membawa status di dua handler. Karena handler FilterSynchronousOidRequestComplete hanya dipanggil jika handler FilterSynchronousOidRequest mengembalikan NDIS_STATUS_SUCCESS, tidak ada alasan untuk menulis nilai ke *CallContext saat mengembalikan kode lain. Demikian juga, tidak ada alasan untuk menulis nilai ke *CallContext jika driver filter tidak menyediakan handler FilterSynchronousOidRequestComplete .

Driver filter tidak boleh mengembalikan NDIS_STATUS_PENDING dari handler FilterSynchronousOidRequest . Permintaan OID sinkron tidak dapat ditunda atau dibatalkan.

Driver filter diharapkan kembali dari handler FilterSynchronousOidRequest mereka dengan cepat, tanpa memblokir, menunggu, atau tidur. Permintaan OID sinkron hanya digunakan untuk operasi latensi rendah, dan driver filter harus berusaha untuk melanjutkan atau menyelesaikannya dalam beberapa milidetik. NDIS tidak menserialisasikan permintaan OID Sinkron satu sama lain, terhadap permintaan OID lainnya, atau terhadap FilterPause. Merupakan tanggung jawab driver filter untuk menerapkan sinkronisasi yang diperlukan.

NDIS melakukan serialisasi permintaan OID Sinkron terhadap FilterDetach: NDIS menjamin bahwa tidak ada permintaan OID sinkron yang akan aktif setelah FilterDetach dipanggil.

Driver filter tidak boleh memanggil NdisAllocateCloneOidRequest atau NdisCancelOidRequest pada permintaan OID Sinkron. Driver filter tidak boleh memanggil NdisFSynchronousOidRequest pada permintaan OID yang diterima melalui handler FilterSynchronousOidRequest .

Jika driver filter menaikkan IRQL di handler FilterSynchronousOidRequest-nya , driver filter harus memulihkan IRQL ke tingkat awal sebelum kembali dari handler FilterSynchronousOidRequest-nya .

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows 10, versi 1709
Target Platform Windows
Header ndis.h (termasuk Ndis.h)
IRQL <= DISPATCH_LEVEL

Lihat juga

FilterSynchronousOidRequestComplete

NdisFSynchronousOidRequest

Antarmuka Permintaan OID Sinkron di NDIS 6.80