Fungsi FwpsConstructIpHeaderForTransportPacket0 (fwpsk.h)
Fungsi FwpsConstructIpHeaderForTransportPacket0 dipanggil oleh callout untuk membangun header IP baru atau untuk membangun kembali header paket IP yang sudah ada sebelumnya hanya untuk satu buffer net.
Sintaks
NTSTATUS FwpsConstructIpHeaderForTransportPacket0(
[in, out] NET_BUFFER_LIST *netBufferList,
ULONG headerIncludeHeaderLength,
[in] ADDRESS_FAMILY addressFamily,
[in] const UCHAR *sourceAddress,
[in] const UCHAR *remoteAddress,
[in] IPPROTO nextProtocol,
[in, optional] UINT64 endpointHandle,
[in, optional] const WSACMSGHDR *controlData,
[in] ULONG controlDataLength,
[in] UINT32 flags,
PVOID reserved,
[in, optional] IF_INDEX interfaceIndex,
[in, optional] IF_INDEX subInterfaceIndex
);
Parameter
[in, out] netBufferList
Penunjuk ke struktur NET_BUFFER_LIST yang menjelaskan data paket lapisan transportasi kloning tempat header IP baru akan dibangun atau dibangun kembali. Untuk membuat header IP baru, temukan offset struktur NET_BUFFER_LIST kloning di awal header transportasi. Untuk membangun kembali header paket IP yang sudah ada sebelumnya, temukan offset di awal header IP.
headerIncludeHeaderLength
Jika struktur NET_BUFFER_LIST yang ditunjukkan oleh NetBufferList sudah berisi header IP, menunjukkan ukuran total, dalam byte, dari header IP yang ada (jika ada). Jika NetBufferList tidak berisi header IP, headerIncludeHeaderSize adalah nol. Jika tidak, nilai parameter ini sama dengan anggota ipHeaderSize dari FWPS_INCOMING_METADATA_VALUES0 struktur yang diteruskan ke fungsi callout classifyFn driver callout. Perhatikan bahwa header ekstensi untuk header IPv6 yang ada akan dihapus ketika fungsi ini dipanggil, meskipun opsi IPv4 akan dipertahankan. Untuk informasi selengkapnya, lihat Keterangan.
[in] addressFamily
Salah satu keluarga alamat berikut:
AF_INET
Keluarga alamat IPv4.
AF_INET6
Keluarga alamat IPv6.
[in] sourceAddress
Penunjuk ke alamat IP sumber yang akan menjadi bagian dari header IP yang akan dibangun. Untuk IPv4, alamatnya adalah 4 byte. Untuk IPv6, alamatnya adalah 16 byte. Byte alamat sumber selalu dalam urutan byte jaringan.
[in] remoteAddress
Penunjuk ke buffer yang menentukan alamat IP jarak jauh yang akan menjadi bagian dari header IP yang akan dibangun.
Buffer dapat berisi alamat IPv4 (4 byte) atau alamat IPv6 (16 byte), dan alamat harus ditentukan dalam urutan byte jaringan. Versi IP harus cocok dengan parameter addressFamily .
[in] nextProtocol
Menentukan jenis protokol IPPROTO dari header IP baru yang akan dibangun. Untuk informasi selengkapnya tentang enumerasi IPPROTO, lihat AF_INET atau AF_INET6.
[in, optional] endpointHandle
Handel opsional 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.
[in, optional] controlData
Penunjuk opsional ke buffer yang berisi data kontrol soket yang ditentukan oleh fungsi WSASendMsg , yang dijelaskan dalam dokumentasi Microsoft Windows SDK. Untuk informasi tentang jenis WSACMSGHDR, lihat CMSGHDR.
Jika ada, data kontrol soket disediakan untuk callout dengan anggota controlData FWPS_INCOMING_METADATA_VALUES0 struktur yang diteruskan ke fungsi callout classifyFn driver callout.
Jika data kontrol soket bukan NULL, data harus disalin secara mendalam dalam implementasi driver callout dari fungsi classifyFn , dan buffer controlData harus tetap valid sampai fungsi penyelesaian injeksi dipanggil.
[in] controlDataLength
Panjangnya, dalam byte, dari parameter controlData .
[in] flags
Bendera yang menentukan apakah NBL ditujukan untuk jalur kirim atau terima. Parameter bendera dapat memiliki nilai berikut:
Nilai | Makna |
---|---|
FWPS_CONSTRUCT_IPHEADER_FOR_SEND | Ketika diatur, bendera ini menentukan bahwa NBL dimaksudkan untuk jalur pengiriman. |
FWPS_CONSTRUCT_IPHEADER_FOR_RECEIVE | Ketika diatur, bendera ini menentukan bahwa NBL dimaksudkan untuk jalur penerimaan. |
Untuk driver callout yang mendukung USO atau URO, wajib untuk mengatur parameter ini ke salah satu nilai ini. Driver callout lainnya dapat mengatur parameter ini ke nol. Bendera ini hanya didukung pada Windows Server 2022 23H2 dan yang lebih baru. Pada rilis Windows sebelumnya, driver callout harus selalu mengatur parameter ini ke nol.
reserved
Dicadangkan. Driver callout harus mengatur parameter ini ke NULL.
[in, optional] interfaceIndex
Indeks antarmuka tempat data paket asli diterima. Driver callout harus menggunakan nilai indeks antarmuka yang diteruskan sebagai salah satu nilai data masuk ke fungsi callout classifyFn untuk parameter ini. Parameter ini bersifat opsional dan bisa nol.
[in, optional] subInterfaceIndex
Indeks sub-antarmuka tempat data paket asli diterima. Driver callout harus menggunakan nilai indeks sub-antarmuka yang diteruskan sebagai salah satu nilai data masuk ke fungsi callout classifyFn untuk parameter ini jika paket akan disuntikkan ke subinterface yang sama tempat paket asli ditunjukkan. Parameter ini bersifat opsional dan bisa nol.
Nilai kembali
Fungsi FwpsConstructIpHeaderForTransportPacket0 mengembalikan salah satu kode NTSTATUS berikut.
Menampilkan kode | Deskripsi |
---|---|
|
Header IP baru berhasil dibangun. |
|
Terjadi kesalahan. |
Keterangan
Dari daftar buffer bersih yang dikloning pada lapisan transportasi keluar WFP (FWPS_LAYER_OUTBOUND_TRANSPORT_Xxx), FwpsConstructIpHeaderForTransportPacket0 membuat header baru untuk setiap buffer net yang merupakan bagian dari rantai daftar buffer net. Fungsi ini juga dapat digunakan untuk membangun kembali header IP paket yang sudah ada sebelumnya, dalam hal ini daftar buffer net hanya boleh berisi satu buffer net.
Fungsi ini berguna ketika header IP belum dibuat, tetapi alamat IP sumber atau port sumber harus dimodifikasi dari lapisan transportasi. Meskipun biasanya dimungkinkan untuk menunggu untuk melakukan modifikasi tersebut sampai paket mencapai lapisan Jaringan, ini tidak dapat dilakukan di lingkungan IPsec di mana paket IP dienkripsi atau ditandatangani secara digital sebelum mencapai lapisan Jaringan.
Alamat IP sumber dapat dimodifikasi menjadi alamat IP lain yang ditentukan secara lokal atau alamat lain yang tidak ada di komputer lokal. Paket yang dimodifikasi kemudian dapat dikirim atau disuntikkan ke jalur data penerima atau penerusan.
Jika parameter endpointHandle bukan nol ditentukan, status sesi (opsi soket), jika ada, yang terkait dengan soket akan digunakan untuk membangun setiap header IP baru. Demikian pula, jika opsi soket tambahan ditentukan dengan parameter controlData dan controlDataLength , opsi tersebut akan digunakan untuk membangun setiap header IP baru.
Jika daftar buffer net input dikloning dari lapisan transportasi WFP masuk, atau jika dibuat sebagai akibat dari operasi pengiriman mentah, buffer net sudah akan berisi header IP. Dalam hal ini, ketika fungsi ini dipanggil, opsi IPv4 akan dipertahankan di header IP baru, tetapi header AH/ESP dan header ekstensi IPv6 akan dihapus. Karena tumpukan TCP/IP mempertahankan header AH/ESP setelah pemrosesan IPsec, paket yang telah ditunjukkan oleh WFP dan dikloning oleh callout tidak dapat dengan mudah disuntikkan ke jalur data penerima. Akibatnya fungsi ini berguna untuk membangun kembali paket yang diproses IPsec yang akan disuntikkan ke jalur data penerima dengan fungsi FwpsInjectTransportReceiveAsync0 .
Untuk sesi yang disertakan header; misalnya, untuk memfilter lalu lintas Generic Routing Encapsulation (GRE) (protokol IP 47) yang dikirim pada soket mentah dari lapisan transportasi keluar, gunakan prosedur berikut sebelum Anda memanggil FwpsConstructIpHeaderForTransportPacket0:
- Mengkloning daftar buffer net dengan memanggil Fungsi FwpsAllocateCloneNetBufferList0 .
- Jika anggota headerIncludeHeaderLength dari struktur FWPS_INCOMING_METADATA_VALUES0 yang ditunjukkan oleh parameter inMetaValues fungsi classifyFn lebih besar dari nol, mundur daftar buffer bersih kloning dengan jumlah tersebut; misalnya, dengan panggilan ke NdisRetreatNetBufferListDataStart.
- Salin buffer yang ditunjukkan oleh anggota headerIncludeHeader dari FWPS_INCOMING_METADATA_VALUES0 ke wilayah yang baru mundur dari daftar buffer bersih kloning. Ukuran buffer harus sama dengan nilai headerIncludeHeaderLength.
- Panggil FwpsConstructIpHeaderForTransportPacket0 yang memiliki parameter NetBufferList yang menunjuk ke daftar buffer net kloning dan parameter headerIncludeHeaderSize diatur ke nilai headerIncludeHeaderLength.
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Tersedia dimulai dengan Windows Server 2008. |
Target Platform | Universal |
Header | fwpsk.h (termasuk Fwpsk.h) |
Pustaka | Fwpkclnt.lib |
IRQL | <= DISPATCH_LEVEL |
Lihat juga
FWPS_INCOMING_METADATA_VALUES0 FwpsInjectTransportReceiveAsync0Saran 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