Fungsi FwpsStreamInjectAsync0 (fwpsk.h)
Fungsi FwpsStreamInjectAsync0 menyuntikkan segmen data TCP ke aliran data TCP.
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.
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.
[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 |
---|---|
|
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. |
|
Tumpukan jaringan TCP/IP belum siap untuk menerima injeksi data aliran. |
|
Handel injeksi sedang ditutup. |
|
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 |