MINIPORT_MESSAGE_INTERRUPT_DPC fungsi panggilan balik (ndis.h)

Driver miniport harus menyediakan handler MiniportMessageInterruptDPC jika driver memanggil fungsi NdisMRegisterInterruptEx untuk mendaftarkan gangguan.

Catatan Anda harus mendeklarasikan fungsi dengan menggunakan jenis MINIPORT_MESSAGE_INTERRUPT_DPC . Untuk informasi selengkapnya, lihat bagian Contoh berikut ini.
 

Sintaks

MINIPORT_MESSAGE_INTERRUPT_DPC MiniportMessageInterruptDpc;

void MiniportMessageInterruptDpc(
  [in] NDIS_HANDLE MiniportInterruptContext,
  [in] ULONG MessageId,
  [in] PVOID MiniportDpcContext,
  [in] PVOID ReceiveThrottleParameters,
       PVOID NdisReserved2 PULONG NdisReserved1,
  [in] PULONG 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] MessageId

Pengidentifikasi pesan interupsi bersinyali pesan (MSI). MessageId adalah indeks ke IO_INTERRUPT_MESSAGE_INFO_ENTRY struktur di dalam IO_INTERRUPT_MESSAGE_INFO struktur. NDIS meneruskan penunjuk ke struktur IO_INTERRUPT_MESSAGE_INFO terkait di anggota MessageInfoTable ketika driver berhasil mendaftar untuk MSI dengan fungsi NdisMRegisterInterruptEx .

[in] MiniportDpcContext

Penunjuk ke area konteks yang disediakan driver miniport saat memanggil fungsi NdisMQueueDpcEx atau NdisMQueueDpc . Jika NDIS yang disebut MiniportMessageInterruptDPC karena driver miniport mengembalikan bitmask dalam parameter TargetProcessors dari Fungsi MiniportMessageInterrupt , lalu MiniportDpcContext adalah NULL.

[in] ReceiveThrottleParameters

Penunjuk ke NDIS_RECEIVE_THROTTLE_PARAMETERS struktur menentukan jumlah maksimum struktur NET_BUFFER_LIST yang harus ditunjukkan driver miniport dalam DPC.

Catatan Di NDIS 6.1 dan yang lebih lama, parameter ini bernama NdisReserved1, jenis datanya adalah PULONG, dan disediakan untuk NDIS.
 

NdisReserved1

Dicadangkan untuk NDIS.

[in] NdisReserved2

Dicadangkan untuk NDIS.

Catatan Di NDIS 6.1 dan yang lebih lama, jenis data parameter ini adalah PULONG.
 

Nilai kembali

Tidak ada

Keterangan

Driver miniport yang mendaftarkan gangguan bertanda pesan dengan fungsi NdisMRegisterInterruptEx harus menyediakan fungsi MiniportMessageInterruptDPC .

NDIS memanggil MiniportMessageInterruptDPC 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 penyebab gangguan 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 MiniportMessageInterruptDPC. 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 MiniportMessageInterruptDPC.

MiniportMessageInterruptDPC memanggil Fungsi NdisMIndicateReceiveNetBufferLists untuk menunjukkan paket pada prosesor saat ini. MiniportMessageInterruptDPC dapat menentukan 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 MiniportMessageInterrupt , 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, MiniportMessageInterruptDPC harus mengaktifkan kembali interupsi pada NIC, untuk pesan yang ditentukan, sebelum kembali.

Sebelum NDIS memanggil MiniportMessageInterruptDPC, gangguan untuk pesan yang ditentukan pada NIC, biasanya telah dinonaktifkan di Fungsi MiniportMessageInterrupt . Sebelum mengembalikan kontrol, MiniportMessageInterruptDPC dapat mengaktifkan kembali interupsi. Jika driver miniport mengantre DPC tambahan saat gangguan dinonaktifkan, driver harus mengaktifkan gangguan setelah DPC terakhir dijalankan.

Catatan Untuk performa yang lebih baik, driver miniport hanya boleh menonaktifkan gangguan untuk pesan tertentu. Mereka tidak boleh menonaktifkan semua interupsi bersinyali pesan.
 
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 NdisMDeregisterInterruptEx dari fungsi MiniportInitializeEx atau MiniportHaltEx untuk merilis sumber daya yang dialokasikan dengan NdisMRegisterInterruptEx. Setelah NdisMDeregisterInterruptEx kembali, NDIS tidak memanggil fungsi MiniportMessageInterrupt atau MiniportMessageInterruptDPC driver miniport.

NDIS memanggil MiniportMessageInterruptDPC di IRQL = DISPATCH_LEVEL.

Contoh

Untuk menentukan fungsi MiniportMessageInterruptDPC , 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 MiniportMessageInterruptDPC yang diberi nama "MyMessageInterruptDPC", gunakan jenis MINIPORT_MESSAGE_INTERRUPT_DPC seperti yang ditunjukkan dalam contoh kode ini:

MINIPORT_MESSAGE_INTERRUPT_DPC MyMessageInterruptDPC;

Kemudian, terapkan fungsi Anda sebagai berikut:

_Use_decl_annotations_
VOID
 MyMessageInterruptDPC(
    NDIS_HANDLE  MiniportInterruptContext,
    ULONG  MessageId,
    PVOID  MiniportDpcContext,
    PVOID  ReceiveThrottleParameters,
    PVOID  NdisReserved2
    )
  {...}

Jenis fungsi MINIPORT_MESSAGE_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_MESSAGE_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

Lihat juga

IO_INTERRUPT_MESSAGE_INFO

IO_INTERRUPT_MESSAGE_INFO_ENTRY

MiniportHaltEx

MiniportInitializeEx

MiniportMessageInterrupt

NDIS_RECEIVE_THROTTLE_PARAMETERS NDIS_MINIPORT_INTERRUPT_CHARACTERISTICS

NET_BUFFER_LIST

NdisMDeregisterInterruptEx

NdisMIndicateReceiveNetBufferLists

NdisMQueueDpc

NdisMQueueDpcEx

NdisMRegisterInterruptEx

Receive Side Scaling (RSS)