Fungsi FwpsStreamInjectAsync0 (fwpsk.h)

Fungsi FwpsStreamInjectAsync0 menyuntikkan segmen data TCP ke aliran data TCP.

CatatanFwpsStreamInjectAsync0 adalah versi tertentu dari FwpsStreamInjectAsync. Lihat Nama Version-Independent WFP dan Menargetkan Versi Windows Tertentu untuk informasi selengkapnya.
 

Sintaks

NTSTATUS FwpsStreamInjectAsync0(
  [in]           HANDLE                injectionHandle,
  [in, optional] HANDLE                injectionContext,
  [in]           UINT32                flags,
  [in]           UINT64                flowId,
  [in]           UINT32                calloutId,
  [in]           UINT16                layerId,
  [in]           UINT32                streamFlags,
  [in, out]      NET_BUFFER_LIST       *netBufferList,
  [in]           SIZE_T                dataLength,
  [in]           FWPS_INJECT_COMPLETE0 completionFn,
  [in, optional] HANDLE                completionContext
);

Parameter

[in] injectionHandle

Handel injeksi yang sebelumnya dibuat oleh panggilan ke Fungsi FwpsInjectionHandleCreate0 .

[in, optional] injectionContext

Handel opsional ke konteks injeksi.

[in] flags

Dicadangkan. Driver callout harus mengatur parameter ini ke nol.

[in] flowId

Pengidentifikasi run-time yang menentukan aliran data untuk menyuntikkan data. Pengidentifikasi run-time untuk aliran data disediakan untuk driver callout melalui nilai metadata FWPS_METADATA_FIELD_FLOW_HANDLE yang disediakan mesin filter untuk fungsi callout classifyFn driver callout.

[in] calloutId

Pengidentifikasi run-time untuk callout di mesin filter. Pengidentifikasi ini dikembalikan ketika driver callout memanggil fungsi FwpsCalloutRegister0 atau FwpsCalloutRegister1 untuk mendaftarkan callout dengan mesin filter.

[in] layerId

Pengidentifikasi run-time untuk lapisan pemfilteran tempat aliran data sedang diproses. Nilai ini harus FWPS_LAYER_STREAM_V4 atau FWPS_LAYER_STREAM_V6. Pengidentifikasi run-time untuk lapisan di mana aliran data sedang diproses disediakan untuk callout di anggota layerId dari struktur FWPS_INCOMING_VALUES0 yang diteruskan mesin filter ke fungsi callout classifyFn driver callout.

[in] streamFlags

Bendera yang menentukan karakteristik aliran data tempat data akan disuntikkan.

Saat menyuntikkan data ke aliran data masuk, driver callout menentukan satu atau beberapa bendera berikut:

FWPS_STREAM_FLAG_RECEIVE

Menentukan bahwa data akan disuntikkan ke aliran data masuk. Bendera ini diperlukan saat menyuntikkan data ke aliran data masuk.

FWPS_STREAM_FLAG_RECEIVE_DISCONNECT

Menentukan bahwa bendera FIN akan diatur di header TCP untuk data yang disuntikkan ke aliran data masuk.

Catatan Jika bendera ini diatur, bendera FWPS_STREAM_FLAG_RECEIVE juga harus diatur, atau STATUS_FWP_INVALID_PARAMETER akan dikembalikan.
 

FWPS_STREAM_FLAG_RECEIVE_EXPEDITED

Menentukan bahwa data yang disuntikkan ke aliran data masuk adalah data out-of-band prioritas tinggi.

FWPS_STREAM_FLAG_RECEIVE_PUSH

Menentukan bahwa data masuk telah tiba dengan bendera PUSH yang diatur di header TCP, yang menunjukkan bahwa pengirim meminta transfer data segera. Penundaan transfer data yang tidak diinginkan dapat terjadi jika bendera ini tidak diatur. Bendera ini tersedia dimulai dengan Windows Vista dengan SP1.

Saat menyuntikkan data ke aliran data keluar, driver callout menentukan satu atau beberapa bendera berikut:

FWPS_STREAM_FLAG_SEND

Menentukan bahwa data akan disuntikkan ke aliran data keluar. Bendera ini diperlukan saat menyuntikkan data ke aliran data keluar.

FWPS_STREAM_FLAG_SEND_EXPEDITED

Menentukan bahwa data yang disuntikkan ke aliran data keluar adalah data yang berprioritas tinggi dan di luar band.

FWPS_STREAM_FLAG_SEND_NODELAY

Menentukan bahwa driver callout meminta bahwa tidak ada buffering data yang disuntikkan ke aliran data keluar.

FWPS_STREAM_FLAG_SEND_DISCONNECT

Menentukan bahwa aliran akan terputus setelah data dimasukkan ke aliran data keluar telah dikirim. Tumpukan jaringan akan mengatur bendera FIN di header TCP dari paket terakhir yang dikirim.

Catatan Jika bendera ini diatur, bendera FWPS_STREAM_FLAG_SEND juga harus diatur, atau STATUS_FWP_INVALID_PARAMETER akan dikembalikan.
 

[in, out] netBufferList

Penunjuk ke struktur NET_BUFFER_LIST yang menjelaskan data yang sedang disuntikkan ke aliran data. Driver callout mengalokasikan struktur NET_BUFFER_LIST untuk digunakan untuk menyuntikkan data ke aliran data dengan memanggil FwpsAllocateCloneNetBufferList0, FwpsAllocateNetBufferAndNetBufferList0, atau fungsi FwpsCloneStreamData0 . Struktur NET_BUFFER_LIST dapat menjelaskan rantai daftar buffer jaringan. Jika parameter streamFlagsFWPS_STREAM_FLAG_RECEIVE_DISCONNECT atau FWPS_STREAM_FLAG_SEND_DISCONNECT, netBufferList dapat berupa NULL.

[in] dataLength

Jumlah byte data yang disuntikkan ke aliran data.

[in] completionFn

Penunjuk ke fungsi callout completionFn yang disediakan oleh driver callout. Mesin filter memanggil fungsi ini setelah data paket, yang dijelaskan oleh parameter netBufferList , telah disuntikkan ke dalam tumpukan jaringan.

Jika parameter netBufferList menjelaskan rantai NET_BUFFER_LIST , completionFn akan dipanggil sekali untuk setiap NET_BUFFER_LIST dalam rantai.

Jika parameter netBufferList adalah NULL dan parameter streamFlags memiliki set FWPS_STREAM_FLAG_RECEIVE_DISCONNECT atau FWPS_STREAM_FLAG_SEND_DISCONNECT , fungsi completionFn tidak akan dipanggil.

Parameter ini diperlukan dan tidak boleh NULL. Jika NULL, STATUS_FWP_NULL_POINTER akan dikembalikan.

[in, optional] completionContext

Penunjuk ke konteks yang disediakan driver callout yang diteruskan ke fungsi callout yang diarahkan oleh parameter completionFn . Parameter ini bersifat opsional dan dapat berupa NULL.

Mengembalikan nilai

Fungsi FwpsStreamInjectAsync0 kode NTSTATUS seperti salah satu dari berikut ini.

Menampilkan kode Deskripsi
STATUS_SUCCESS
Injeksi ke aliran data berhasil dimulai. Mesin filter akan memanggil fungsi penyelesaian yang ditentukan ketika struktur NET_BUFFER_LIST dialokasikan setelah mesin filter selesai menyuntikkan data ke aliran data.
STATUS_FWP_TCPIP_NOT_READY
Tumpukan jaringan TCP/IP belum siap untuk menerima injeksi data aliran.
STATUS_FWP_INJECT_HANDLE_CLOSING
Handel injeksi sedang ditutup.
Kode status lainnya
Terjadi kesalahan.

Keterangan

Driver callout memanggil fungsi FwpsStreamInjectAsync0 dari dalam fungsi callout classifyFn callout untuk menyuntikkan data baru atau kloning ke aliran data yang saat ini sedang diproses. Driver callout dapat memanggil fungsi FwpsStreamInjectAsync0 hanya jika memproses aliran data di lapisan aliran.

Driver callout juga dapat memanggil fungsi FwpsStreamInjectAsync0 dari luar fungsi callout classifyFn callout callout untuk menyuntikkan data ke aliran data yang saat ini ditangguhkan. Aliran data ditangguhkan saat fungsi callout classifyFn callout mengatur anggota streamAction dari FWPS_STREAM_CALLOUT_IO_PACKET0 struktur untuk FWPS_STREAM_ACTION_DEFER.

Selain itu, driver callout dapat memanggil fungsi FwpsStreamInjectAsync0 dari luar fungsi callout classifyFn callout untuk menyuntikkan data ke aliran data setelah indikasi FIN tertunda.

Sebagai alternatif, driver callout dapat memanggil fungsi FwpsStreamInjectAsync0 dari konteks utas arbitrer di luar fungsi callout classifyFn callout jika driver callout mengkloning dan memblokir semua data yang ditunjukkan untuk pemrosesan di luar band. Driver callout yang mengalihkan semua data yang ditunjukkan ke mode pengguna untuk diproses dapat memanggil fungsi FwpsStreamInjectAsync0 dengan cara ini.

Callout dapat menunggu segmen data dengan terlebih dahulu mengkloningnya dengan panggilan ke fungsi FwpsCloneStreamData0 , diikuti dengan memblokir segmen data dengan mengatur FWP_ACTION_BLOCK dalam anggota actionType dari struktur FWPS_CLASSIFY_OUT0 .

Data aliran yang disuntikkan tidak akan diindikasikan kembali ke callout, tetapi akan tersedia untuk melakukan streaming callout dari sublayer dengan bobot lebih rendah.

Jika nilai yang dikembalikan tidak STATUS_SUCCESS, fungsi penyelesaian tidak akan dipanggil. Dalam hal ini, daftar buffer jaringan yang diarahkan oleh netBufferList harus dibebaskan dengan panggilan ke FwpsFreeNetBufferList0 atau FwpsFreeCloneNetBufferList0.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Tersedia dimulai dengan Windows Vista.
Target Platform Universal
Header fwpsk.h (termasuk Fwpsk.h)
Pustaka Fwpkclnt.lib
IRQL <= DISPATCH_LEVEL

Lihat juga

FWPS_INCOMING_VALUES0

FWPS_STREAM_CALLOUT_IO_PACKET0 FwpsAllocateCloneNetBufferList0 FwpsAllocateNetBufferAndNetBufferList0

FwpsCalloutRegister0

FwpsCalloutRegister1

FwpsCloneStreamData0

FwpsInjectionHandleCreate0

FwpsInjectionHandleDestroy0

NET_BUFFER_LIST

classifyFn

completionFn