FwpsAllocateCloneNetBufferList0 (Compact 7)
3/12/2014
This function allocates a clone NET_BUFFER_LIST structure of an existing NET_BUFFER_LIST structure.
Syntax
NTSTATUS NTAPI
FwpsAllocateCloneNetBufferList0(
IN OUT NET_BUFFER_LIST *originalNetBufferList,
IN NDIS_HANDLE netBufferListPoolHandle OPTIONAL,
IN NDIS_HANDLE netBufferPoolHandle OPTIONAL,
IN ULONG allocateCloneFlags,
OUT NET_BUFFER_LIST **netBufferList
);
Parameters
- originalNetBufferList
A pointer to the original NET_BUFFER_LIST structure that is being cloned
- netBufferListPoolHandle
A NET_BUFFER_LIST pool handle that was obtained from a previous call to the NdisAllocateNetBufferListPool function. This parameter is optional and can be NULL.
- netBufferPoolHandle
A NET_BUFFER_LIST pool handle that was obtained from a previous call to the NdisAllocateNetBufferPool function. This parameter is optional and can be NULL.
- allocateCloneFlags
There are currently no flags defined for this function. Callout drivers should set this parameter to zero.
- netBufferList
A pointer to a variable which receives a pointer to the clone NET_BUFFER_LIST structure.
Return Value
The FwpsAllocateCloneNetBufferList0 function returns one of the following NTSTATUS codes:
Value | Description |
---|---|
STATUS_SUCCESS |
The clone NET_BUFFER_LIST structure was successfully allocated |
Other status codes |
An error occurred |
Remarks
A callout driver calls the FwpsAllocateCloneNetBufferList0 function to allocate a clone NET_BUFFER_LIST structure of an existing NET_BUFFER_LIST structure.
This function is a wrapper around the NdisAllocateCloneNetBufferList function, but it is specialized for use by WFP packet injection functions.
If the clone NET_BUFFER_LIST structure should have attributes that are associated with a given pool, the callout driver must specify the pool handle in the NetBufferListPoolHandle or NetBufferPoolHandle parameter. If these parameters are NULL, the default pool pre-allocated by NDIS is used.
The clone NET_BUFFER_LIST structure describes the same data that is described by the original NET_BUFFER_LIST structure. The FwpsAllocateCloneNetBufferList0 function does not copy the data that is described by the original MDLs to new data buffers. Instead, the clone NET_BUFFER_LIST structure references the original data buffers. The clone NET_BUFFER_LIST structure does not include an initial NET_BUFFER_LIST_CONTEXT structure.
This function sets the ParentNetBufferList member of the newly created clone NET_BUFFER_LIST structure to point to the parent NET_BUFFER_LIST structure. The parent structure's ChildRefCount member is incremented by 1.
A callout driver can modify the clone NET_BUFFER_LIST structure and insert it into the network stack to replace the original NET_BUFFER_LIST structure by calling the packet injection functions. After the data described by the clone NET_BUFFER_LIST structure is successfully injected into the network stack, the callout driver should free the clone NET_BUFFER_LIST structure by calling the FwpsFreeCloneNetBufferList0 function.
A callout driver can insert or replace individual net buffers (NET_BUFFER) or MDLs inside the clone net buffer list. Such a driver must also undo the modifications before it calls the FwpsFreeCloneNetBufferList0 function.
Requirements
Header |
fwpsk.h |
See Also
Reference
Functions Called by Callout Drivers
NET_BUFFER_LIST
NdisAllocateNetBufferListPool
NdisAllocateCloneNetBufferList
NET_BUFFER_LIST_CONTEXT
NET_BUFFER
FwpsFreeCloneNetBufferList0
WFP Callout Driver Functions