MINIPORT_INTERRUPT_DPC fungsi panggilan balik (ndis.h)
Driver miniport harus menyediakan fungsi MiniportInterruptDPC jika driver memanggil fungsi NdisMRegisterInterruptEx untuk mendaftarkan gangguan.
Sintaks
MINIPORT_INTERRUPT_DPC MiniportInterruptDpc;
void MiniportInterruptDpc(
[in] NDIS_HANDLE MiniportInterruptContext,
[in] PVOID MiniportDpcContext,
[in] PVOID ReceiveThrottleParameters,
[in] PVOID NdisReserved2
)
{...}
Parameter
[in] MiniportInterruptContext
Handel ke blok informasi konteks interupsi. Driver miniport menyediakan handel ini di parameter MiniportInterruptContext yang diteruskan driver miniport ke Fungsi NdisMRegisterInterruptEx .
[in] MiniportDpcContext
Penunjuk ke area konteks yang disediakan driver miniport saat memanggil fungsi NdisMQueueDpcEx atau NdisMQueueDpc . Jika NDIS yang disebut MiniportInterruptDPC karena driver miniport mengembalikan bitmask dalam parameter TargetProcessors dari fungsi MiniportInterrupt , MiniportDpcContext adalah NULL.
[in] ReceiveThrottleParameters
Penunjuk ke NDIS_RECEIVE_THROTTLE_PARAMETERS struktur. Struktur ini menentukan jumlah maksimum struktur NET_BUFFER_LIST yang harus ditunjukkan driver miniport dalam DPC.
[in] NdisReserved2
Dicadangkan untuk NDIS.
Nilai kembali
Tidak ada
Keterangan
Driver miniport yang mendaftarkan gangguan dengan fungsi NdisMRegisterInterruptEx harus menyediakan fungsi MiniportInterruptDPC .
NDIS memanggil MiniportInterruptDPC untuk menyelesaikan pemrosesan interupsi yang ditangguhkan. Driver miniport dapat memanggil fungsi NdisMQueueDpcEx atau NdisMQueueDpc untuk meminta panggilan prosedur (DPC) tambahan yang ditangguhkan untuk prosesor lain.
Driver miniport menentukan sumber setiap gangguan dan mengambil tindakan yang tepat. Misalnya, jika gangguan menunjukkan penyelesaian operasi transmisi, driver miniport menyelesaikan permintaan pengiriman yang tertunda. Jika sumber interupsi adalah perubahan status tautan, driver miniport menunjukkan status tautan baru ke NDIS. Jika ada paket penerima yang luar biasa, driver miniport menunjukkan paket ke NDIS.
Driver miniport yang mendukung receive side scaling (RSS), dan mengaktifkan fitur ini, memeriksa antrean penerimanya di MiniportInterruptDPC. NIC bisa saja sudah mengantre menerima paket pada antrean terpisah berdasarkan nilai hash, jika NIC menyediakan kemampuan tersebut. Jika tidak, driver miniport dapat mengurutkan paket ke dalam antrean terpisah di MiniportInterruptDPC.
MiniportInterruptDPC memanggil Fungsi NdisMIndicateReceiveNetBufferLists untuk menunjukkan paket pada prosesor saat ini. MiniportInterruptDPC dapat mengidentifikasi pemrosesan yang diperlukan untuk CPU lain dan meminta NDIS untuk menjadwalkan DPC pada CPU di mana DPC tidak luar biasa.
Jika DPC saat ini berjalan pada CPU yang sama dengan fungsi MiniportInterrupt , driver miniport harus menunjukkan semua paket yang tidak dapat dipetakan ke CPU. Jika DPC ini adalah DPC terjadwal terakhir dan tidak akan meminta DPC tambahan, MiniportInterruptDPC harus mengaktifkan kembali gangguan pada NIC sebelum kembali.
Gangguan biasanya dinonaktifkan sudah pada NIC dalam fungsi MiniportInterrupt sebelum NDIS memanggil MiniportInterruptDPC. Sebelum mengembalikan kontrol, MiniportInterruptDPC dapat mengaktifkan kembali interupsi. Jika driver miniport mengantre DPC tambahan saat gangguan dinonaktifkan, driver harus mengaktifkan gangguan sebelum DPC terakhir kembali.
Driver Miniport harus membatasi jumlah buffer penerima yang mereka tunjukkan saat mereka memproses batch DPC interupsi untuk diselesaikan dalam batas waktu yang diperlukan. Batch DPC yang mengganggu adalah kumpulan semua DPC yang berjalan setelah ISR dan sebelum interupsi diaktifkan kembali.
Driver miniport dapat memanggil Fungsi NdisMDeregisterInterruptEx dari fungsi MiniportInitializeEx atau MiniportHaltEx untuk merilis sumber daya yang dialokasikan dengan NdisMRegisterInterruptEx. Setelah NdisMDeregisterInterruptEx kembali, NDIS tidak memanggil fungsi MiniportInterrupt atau MiniportInterruptDPC driver miniport.
NDIS memanggil MiniportInterruptDPC di IRQL = DISPATCH_LEVEL.
Contoh
Untuk menentukan fungsi MiniportInterruptDPC , Anda harus terlebih dahulu memberikan deklarasi fungsi yang mengidentifikasi jenis fungsi yang Anda tentukan. Windows menyediakan sekumpulan tipe fungsi untuk pengandar. Mendeklarasikan fungsi menggunakan jenis fungsi membantu Analisis Kode untuk Driver, Pemverifikasi Driver Statis (SDV), dan alat verifikasi lainnya menemukan kesalahan, dan itu adalah persyaratan untuk menulis driver untuk sistem operasi Windows.Misalnya, untuk menentukan fungsi MiniportInterruptDPC yang diberi nama "MyInterruptDPC", gunakan jenis MINIPORT_INTERRUPT_DPC seperti yang ditunjukkan dalam contoh kode ini:
MINIPORT_INTERRUPT_DPC MyInterruptDPC;
Kemudian, terapkan fungsi Anda sebagai berikut:
_Use_decl_annotations_
VOID
MyInterruptDPC(
NDIS_HANDLE MiniportInterruptContext,
PVOID MiniportDpcContext,
PVOID ReceiveThrottleParameters,
PVOID NdisReserved2
)
{...}
Jenis fungsi MINIPORT_INTERRUPT_DPC ditentukan dalam file header Ndis.h. Untuk mengidentifikasi kesalahan secara lebih akurat saat Anda menjalankan alat analisis kode, pastikan untuk menambahkan anotasi Use_decl_annotations ke definisi fungsi Anda. Anotasi Use_decl_annotations memastikan bahwa anotasi yang diterapkan ke jenis fungsi MINIPORT_INTERRUPT_DPC dalam file header digunakan. Untuk informasi selengkapnya tentang persyaratan untuk deklarasi fungsi, lihat Mendeklarasikan Fungsi dengan Menggunakan Jenis Peran Fungsi untuk Driver NDIS.
Untuk informasi tentang Use_decl_annotations, lihat Perilaku Fungsi Anotasi.
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Didukung di NDIS 6.0 dan yang lebih baru. |
Target Platform | Windows |
Header | ndis.h (termasuk Ndis.h) |
IRQL | DISPATCH_LEVEL |