FwpsInjectNetworkReceiveAsync0 (Compact 7)
3/12/2014
This function injects packet data into the receive data path.
Syntax
NTSTATUS NTAPI
FwpsInjectNetworkReceiveAsync0(
IN HANDLE injectionHandle,
IN OPTIONAL HANDLE injectionContext,
IN UINT32 flags,
IN COMPARTMENT_ID compartmentId,
IN IF_INDEX interfaceIndex,
IN IF_INDEX subInterfaceIndex,
IN OUT NET_BUFFER_LIST *netBufferList,
IN FWPS_INJECT_COMPLETE0 completionFn,
IN OPTIONAL HANDLE completionContext
);
Parameters
- injectionHandle
An injection handle that was previously created by a call to the FwpsInjectionHandleCreate0 function, with the flags parameter set to FWPS_INJECTION_TYPE_NETWORK
- injectionContext
An optional handle to the injection context. If it is specified, it can be obtained by calling the FwpsQueryPacketInjectionState0 function when the packet injection state FWPS_PACKET_INJECTION_STATE is FWPS_PACKET_INJECTED_BY_SELF or FWPS_PACKET_PREVIOUSLY_INJECTED_BY_SELF
- flags
Reserved. Callout drivers must set this parameter to zero.
- compartmentId
The identifier of the routing compartment into which the packet data is injected, specified as a COMPARTMENT_ID type. This identifier is provided to a callout through the compartmentId member of the FWPS_INCOMING_METADATA_VALUES0 structure that is passed to the callout's classifyFn callout function. If the compartmentId member is available to callouts, FWPS_METADATA_FIELD_COMPARTMENT_ID is set in the currentMetadataValues member. Otherwise, set this parameter to UNSPECIFIED_COMPARTMENT_ID
- interfaceIndex
The index of the interface on which the original packet data was received. A callout driver should use the value of the interface index as one of the incoming data values to its classifyFn callout function if the packet is to be injected into the same interface where the original packet was indicated.
- subInterfaceIndex
The index of the subinterface on which the original packet data was received. A callout driver should use the value of the subinterface index that is passed as one of the incoming data values to its classifyFn callout function for this parameter if the packet is to be injected into the same subinterface where the original packet was indicated
- netBufferList
A pointer to a NET_BUFFER_LIST structure that describes the packet data that is being injected. A callout driver allocates a NET_BUFFER_LIST structure to use to insert packet data by calling either the FwpsAllocateCloneNetBufferList0 function or the FwpsAllocateNetBufferAndNetBufferList0 function. The NET_BUFFER_LIST structure must begin with an IP header
- completionFn
A pointer to a completionFn callout function that is provided by the callout driver. The filter engine calls this function after the packet data, described by the netBufferList parameter is injected into the network stack
- completionContext
A pointer to a callout driver-provided context that is passed to the callout function pointed to by the completionFn parameter. This parameter is optional and can be NULL
- netBufferList
A pointer to a NET_BUFFER_LIST structure that describes the packet data that is being injected. A callout driver allocates a NET_BUFFER_LIST structure to use to insert packet data by calling either the FwpsAllocateCloneNetBufferList0 function or the FwpsAllocateNetBufferAndNetBufferList0 function
Return Value
The FwpsInjectNetworkReceiveAsync0 function returns one of the following NTSTATUS codes:
Value | Description |
---|---|
STATUS_SUCCESS |
The packet data injection was initiated successfully. The filter engine calls the completion function after the filter engine has completed injecting the packet data into the network stack, or when a subsequent error occurred. If there is an error, the Status member of the completed NET_BUFFER_LIST structure will indicate the reason for failure. |
STATUS_FWP_TCPIP_NOT_READY |
The TCP/IP network stack is not ready to accept injection of packet data. |
STATUS_FWP_INJECT_HANDLE_CLOSING |
The injection handle is being closed. |
STATUS_FWP_INJECT_HANDLE_STALE |
The injection handle was not created by the flags parameter of the FwpsInjectionHandleCreate0 function set to FWPS_INJECTION_TYPE_NETWORK. |
Other status codes |
An error occurred. |
Remarks
A callout driver calls the FwpsInjectNetworkReceiveAsync0 function to insert packet data or a packet fragment into the receive data path. This function can execute asynchronously. Callout drivers usually insert data into the network stack when modifying packet data. If the return value is not STATUS_SUCCESS, the completion function is not called. In this case, the net buffer list pointed to by netBufferList must be freed by a call to FwpsFreeNetBufferList0 or FwpsFreeCloneNetBufferList0.
The injected packet can be indicated to the callout driver again. To prevent infinite looping, the driver should call the FwpsQueryPacketInjectionState0 function before it calls the classifyFn function. The driver should allow packets that have the injection state FWPS_PACKET_INJECTION_STATE set to FWPS_PACKET_INJECTED_BY_SELF or FWPS_PACKET_PREVIOUSLY_INJECTED_BY_SELF to pass through unaltered.
Requirements
Header |
fwpsk.h |
See Also
Reference
Functions Called by Callout Drivers
classifyFn
FWPS_INCOMING_METADATA_VALUES0
FWPS_PACKET_INJECTION_STATE
NET_BUFFER_LIST
FwpsAllocateCloneNetBufferList0
FwpsAllocateNetBufferAndNetBufferList0
FwpsFreeCloneNetBufferList0
FwpsFreeNetBufferList0
FwpsInjectionHandleCreate0
FwpsInjectionHandleDestroy0
FwpsQueryPacketInjectionState0
WFP Callout Driver Functions