Fungsi FwpsInjectTransportSendAsync1 (fwpsk.h)

Fungsi FwpsInjectTransportSendAsync1 menyuntikkan data paket dari lapisan kesalahan transportasi, datagram, atau ICMP ke jalur kirim data. Fungsi ini berbeda dari versi sebelumnya (FwpsInjectTransportSendAsync0) karena mengambil struktur parameter yang diperbarui sebagai argumen.

CatatanFwpsInjectTransportSendAsync1 adalah versi spesifik dari FwpsInjectTransportSendAsync yang digunakan di Windows 7 dan yang lebih baru. Lihat Nama Version-Independent WFP dan Menargetkan Versi Windows Tertentu untuk informasi selengkapnya. Untuk Windows Vista, FwpsInjectTransportSendAsync0 tersedia.
 

Sintaks

NTSTATUS FwpsInjectTransportSendAsync1(
  [in]           HANDLE                      injectionHandle,
  [in, optional] HANDLE                      injectionContext,
  [in]           UINT64                      endpointHandle,
  [in]           UINT32                      flags,
  [in, optional] FWPS_TRANSPORT_SEND_PARAMS1 *sendArgs,
  [in]           ADDRESS_FAMILY              addressFamily,
  [in]           COMPARTMENT_ID              compartmentId,
  [in, out]      NET_BUFFER_LIST             *netBufferList,
  [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. Jika ditentukan, itu dapat diperoleh dengan memanggil fungsi FwpsQueryPacketInjectionState0 ketika status injeksi paket FWPS_PACKET_INJECTION_STATEFWPS_PACKET_INJECTED_BY_SELF atau FWPS_PACKET_PREVIOUSLY_INJECTED_BY_SELF.

[in] endpointHandle

Handel yang menunjukkan titik akhir transportasi tumpukan di jalur kirim data tempat paket akan disuntikkan. Handel titik akhir ini disediakan untuk panggilan melalui anggota transportEndpointHandle FWPS_INCOMING_METADATA_VALUES0 struktur yang diteruskan ke fungsi callout classifyFn driver callout. Driver callout harus menggunakan handel yang disediakan untuk menyuntikkan paket kloning kembali ke jalur data sesegera mungkin, sebelum soket yang terkait dengan titik akhir tumpukan ditutup dan handel menjadi tidak lagi valid.

[in] flags

Parameter ini dicadangkan. Driver callout harus mengatur parameter ini ke nol.

[in, optional] sendArgs

Penunjuk ke FWPS_TRANSPORT_SEND_PARAMS1 struktur yang menentukan properti paket keluar saat ini. Parameter ini dapat berupa NULL hanya jika daftar buffer bersih yang akan disuntikkan berisi header IP (misalnya, jika paket dikirim melalui soket mentah).

[in] addressFamily

Salah satu keluarga alamat berikut:

AF_INET

Keluarga alamat IPv4.

AF_INET6

Keluarga alamat IPv6.

[in] compartmentId

Pengidentifikasi kompartemen perutean tempat data paket disuntikkan, ditentukan sebagai jenis COMPARTMENT_ID . Pengidentifikasi ini diberikan kepada callout melalui anggota compartmentId FWPS_INCOMING_METADATA_VALUES0 struktur yang diteruskan ke fungsi callout classifyFn driver callout. Jika anggota compartmentId tersedia untuk callout, FWPS_METADATA_FIELD_COMPARTMENT_ID akan diatur dalam anggota currentMetadataValues . Jika tidak, atur parameter ini ke UNSPECIFIED_COMPARTMENT_ID.

[in, out] netBufferList

Penunjuk ke struktur NET_BUFFER_LIST yang menjelaskan data paket yang sedang disuntikkan. Driver callout mengalokasikan struktur NET_BUFFER_LIST untuk digunakan untuk menyuntikkan data paket dengan memanggil Fungsi FwpsAllocateCloneNetBufferList0 atau Fungsi FwpsAllocateNetBufferAndNetBufferList0 .

[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.

[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.

Nilai kembali

Fungsi FwpsInjectTransportSendAsync1 mengembalikan salah satu kode NTSTATUS berikut:

Menampilkan kode Deskripsi
STATUS_SUCCESS
Injeksi data paket berhasil dimulai. Mesin filter akan memanggil fungsi penyelesaian setelah mesin filter selesai menyuntikkan data paket ke tumpukan jaringan, atau ketika kesalahan terjadi kemudian. Jika terjadi kesalahan, anggota Status struktur NET_BUFFER_LIST yang telah selesai akan menunjukkan alasan kegagalan.
STATUS_FWP_TCPIP_NOT_READY
Tumpukan jaringan TCP/IP tidak siap menerima injeksi data paket.
STATUS_FWP_INJECT_HANDLE_CLOSING
Handel injeksi sedang ditutup.
Kode status lainnya
Terjadi kesalahan.

Keterangan

Driver callout memanggil fungsi FwpsInjectTransportSendAsync1 untuk menyuntikkan data paket dari lapisan kesalahan transportasi, datagram, atau ICMP ke jalur kirim data. Pada lapisan ini, header IP mungkin belum terbentuk, dan ketika kebijakan IPsec aktif, data paket tidak dienkripsi atau ditandatangani. Oleh karena itu, fungsi ini sangat ideal untuk digunakan untuk inspeksi paket di lingkungan yang mendukung IPsec.

Fungsi ini dapat dijalankan secara asinkron.

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

Driver callout biasanya menyuntikkan data ke tumpukan jaringan saat mereka memodifikasi data paket. Untuk informasi selengkapnya tentang bagaimana driver callout dapat memodifikasi data paket, lihat Operasi Driver Callout.

Paket yang disuntikkan dapat ditunjukkan ke driver callout lagi. Untuk mencegah perulangan tak terbatas, driver harus terlebih dahulu memanggil Fungsi FwpsQueryPacketInjectionState0 sebelum memanggil fungsi callout classifyFn , dan mengizinkan paket yang memiliki status injeksi FWPS_PACKET_INJECTION_STATE diatur ke FWPS_PACKET_INJECTED_BY_SELF atau FWPS_PACKET_PREVIOUSLY_INJECTED_BY_SELF.

Parameter endpointHandle dan anggota yang dinyatakan dalam
FWPS_TRANSPORT_SEND_PARAMS1 struktur yang diarahkan oleh parameter sendArgs disediakan untuk callout dari lapisan jaringan berikut:

FWPS_LAYER_OUTBOUND_TRANSPORT_V4
FWPS_LAYER_OUTBOUND_TRANSPORT_V6
FWPS_LAYER_DATAGRAM_DATA_V4 (ketika arah keluar ditentukan dengan FWP_DIRECTION_OUTBOUND)
FWPS_LAYER_DATAGRAM_DATA_V6 (ketika arah keluar ditentukan dengan FWP_DIRECTION_OUTBOUND)
FWPS_LAYER_OUTBOUND_ICMP_ERROR_V4
FWPS_LAYER_OUTBOUND_ICMP_ERROR_V6

Datagram milik soket mentah jika kedua hal berikut ini benar:

Pada lapisan jaringan berikut, jika datagram milik soket mentah, Anda harus menyalin anggota headerIncludeHeader dan headerIncludeHeaderLength dari struktur FWPS_INCOMING_METADATA_VALUES0 ke anggota struktur FWPS_TRANSPORT_SEND_PARAMS1 yang sesuai yang ditunjuk parameter sendArgs :

  • FWPS_LAYER_DATAGRAM_DATA_V4 (ketika arah keluar ditentukan dengan FWP_DIRECTION_OUTBOUND)
  • FWPS_LAYER_DATAGRAM_DATA_V6 (ketika arah keluar ditentukan dengan FWP_DIRECTION_OUTBOUND)

Persyaratan

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

Lihat juga

FWPS_INCOMING_METADATA_VALUES0

FWPS_PACKET_INJECTION_STATE

FWPS_TRANSPORT_SEND_PARAMS1

FwpsAllocateCloneNetBufferList0 FwpsAllocateNetBufferAndNetBufferList0

FwpsFreeCloneNetBufferList0

FwpsFreeNetBufferList0

FwpsInjectTransportSendAsync0

FwpsInjectionHandleCreate0

FwpsInjectionHandleDestroy0

FwpsQueryPacketInjectionState0

NET_BUFFER_LIST

classifyFn

completionFn