NDIS_SWITCH_SET_NET_BUFFER_LIST_SWITCH_CONTEXT fungsi panggilan balik (ndis.h)

Ekstensi sakelar yang dapat diperluas Hyper-V memanggil fungsi SetNetBufferListSwitchContext untuk melampirkan buffer konteks yang dialokasikan ekstensi ke NET_BUFFER_LIST. Konteks kemudian dapat diakses selama masa pakai NET_BUFFER_LIST tersebut, termasuk jika konteks diatur pada ingress dan NBL terlihat lagi saat keluar, terlepas dari apakah ekstensi lain mengatur konteksnya sendiri. Jenis akses ini tidak dimungkinkan menggunakan API konteks NET_BUFFER_LIST NDIS yang ada (NdisAllocateNetBufferListContext/ NET_BUFFER_LIST_CONTEXT_DATA_START) karena ekstensi lain dapat mengalokasikan konteks NDIS ketika mendapatkan kepemilikan NET_BUFFER_LIST, di mana pointer ke konteks NDIS asli hilang.

Sintaks

NDIS_SWITCH_SET_NET_BUFFER_LIST_SWITCH_CONTEXT NdisSwitchSetNetBufferListSwitchContext;

NDIS_STATUS NdisSwitchSetNetBufferListSwitchContext(
  [in]      NDIS_SWITCH_CONTEXT NdisSwitchContext,
  [in, out] PNET_BUFFER_LIST NetBufferList,
  [in]      PNDIS_SWITCH_NET_BUFFER_LIST_CONTEXT_TYPE ContextType,
  [in]      PVOID Context
)
{...}

Parameter

[in] NdisSwitchContext

Nilai NDIS_SWITCH_CONTEXT yang berisi handel modul sakelar yang dapat diperluas tempat ekstensi sakelar hyper-V yang dapat diperluas terpasang. Ketika ekstensi memanggil NdisFGetOptionalSwitchHandlers, handel ini dikembalikan melalui parameter NdisSwitchContext .

[in, out] NetBufferList

Penunjuk ke struktur NET_BUFFER_LIST untuk satu paket yang menerima asosiasi konteks.

Catatan Struktur ini harus berisi konteks penerusan sakelar yang dapat diperluas. Jika ekstensi membuat atau mengkloning paket, sebelumnya harus mengalokasikan struktur ini dengan memanggil fungsi AllocateNetBufferListForwardingContext .
 

[in] ContextType

Jenis konteks yang dideklarasikan menggunakan NDIS_DECLARE_SWITCH_NET_BUFFER_LIST_CONTEXT_TYPE yang akan digunakan sebagai kunci saat mengambil konteks.

[in] Context

Penunjuk ke konteks yang akan diambil menggunakan ContextType yang ditentukan.

Nilai kembali

Jika panggilan berhasil, fungsi akan mengembalikan NDIS_STATUS_SUCCESS. Jika tidak, kode kesalahan NDIS_STATUS_Xxx yang ditentukan dalam Ndis.h.

Keterangan

API SetNetBufferListSwitchContext memungkinkan ekstensi melampirkan konteks ke NET_BUFFER_LIST pada ingress dan mengambilnya saat keluar. Meskipun demikian, ekstensi harus tahan terhadap konteks ingress yang tidak ada pada egress. Konteks pengalihan tidak dipertahankan saat NET_BUFFER_LIST dikloning, jadi dalam skenario di mana NET_BUFFER_LIST dikloning antara masuk dan keluar, NET_BUFFER_LIST tidak akan memiliki konteks pengalihan asli.

Ekstensi harus mengelola masa pakai konteks. Salah satu pendekatannya adalah mengalokasikan NDIS NET_BUFFER_LIST konteks (menggunakan NdisAllocateNetBufferListContext, atau telah dikonfigurasi sebelumnya jika ekstensi memiliki kumpulan NET_BUFFER_LIST), dan menggunakan SetNetBufferListSwitchContext untuk mengaitkan pengidentifikasi jenis konteks dengan konteks NET_BUFFER_LIST NDIS. Ketika NBL selesai, ekstensi dapat membebaskan konteks NET_BUFFER_LIST NDIS (menggunakan NdisFreeNetBufferListContext, atau membebaskan NET_BUFFER_LIST itu sendiri jika berasal dari ekstensi).

Untuk informasi selengkapnya tentang konteks penerusan sakelar yang dapat diperluas, lihat Konteks Penerusan Sakelar Yang Dapat Diperluas Hyper-V.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Didukung di NDIS 6.30 dan yang lebih baru.
Target Platform Desktop
Header ndis.h (termasuk Ndis.h)
IRQL <= DISPATCH_LEVEL

Lihat juga

AllocateNetBufferListForwardingContext

GetNetBufferListDestinations

GetNetBufferListSwitchContext

NDIS_SWITCH_PORT_DESTINATION

NET_BUFFER

NET_BUFFER_LIST

NdisFGetOptionalSwitchHandlers

NdisFOidRequest