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.
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 |
---|---|
|
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. |
|
Tumpukan jaringan TCP/IP tidak siap menerima injeksi data paket. |
|
Handel injeksi sedang ditutup. |
|
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:
- Anggota currentMetadataValues dari struktur FWPS_INCOMING_METADATA_VALUES0 memiliki set bendera FWPS_METADATA_FIELD_IP_HEADER_SIZE .
- Anggota ipHeaderSize dari struktur FWPS_INCOMING_METADATA_VALUES0 lebih besar dari nol.
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 FwpsAllocateCloneNetBufferList0 FwpsAllocateNetBufferAndNetBufferList0 FwpsQueryPacketInjectionState0Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk