Función NdisAllocateNetBufferAndNetBufferList (ndis/nblapi.h)
Llame a la función NdisAllocateNetBufferAndNetBufferList para asignar e inicializar una estructura de NET_BUFFER_LIST que se inicializa con una estructura NET_BUFFER previamente asignada.
Sintaxis
NDIS_EXPORTED_ROUTINE NET_BUFFER_LIST * NdisAllocateNetBufferAndNetBufferList(
[in] NDIS_HANDLE PoolHandle,
[in] USHORT ContextSize,
[in] USHORT ContextBackFill,
[in, optional] __drv_aliasesMem MDL *MdlChain,
[in] ULONG DataOffset,
[in] SIZE_T DataLength
);
Parámetros
[in] PoolHandle
Identificador de grupo de NET_BUFFER_LIST estructura que se devolvió anteriormente desde . Función NdisAllocateNetBufferListPool . El miembro fAllocateNetBuffer de la estructura NET_BUFFER_LIST_POOL_PARAMETERS que el autor de la llamada pasó a NdisAllocateNetBufferListPool debe haberse establecido en TRUE y el miembro DataSize establecido en cero.
[in] ContextSize
Cantidad de espacio de datos usado en la estructura NET_BUFFER_LIST_CONTEXT que se va a reservar para el autor de la llamada. ContextSize debe ser un múltiplo del valor definido por MEMORY_ALLOCATION_ALIGNMENT.
[in] ContextBackFill
Cantidad de espacio de datos sin usar (espacio de reposición) que requiere el autor de la llamada. NDIS agrega este valor al contextSize y asigna espacio adicional. ContextBackFill debe ser un múltiplo del valor definido por MEMORY_ALLOCATION_ALIGNMENT.
[in, optional] MdlChain
Puntero a una cadena MDL que NDIS usa para inicializar la estructura de NET_BUFFER preasignada. MdlChain puede ser NULL.
[in] DataOffset
Desplazamiento inicial, en bytes, desde el inicio del búfer hasta el inicio del espacio de datos usado en la cadena MDL. El espacio de datos delante de este desplazamiento es un espacio de datos sin usar. Por lo tanto, este valor también representa la cantidad inicial de espacio de reposición disponible en la cadena MDL. Si MdlChain es NULL, DataOffset debe ser 0.
[in] DataLength
Longitud, en bytes, del espacio de datos usado en la cadena MDL. Si MdlChain es NULL, DataLength debe ser 0.
Valor devuelto
NdisAllocateNetBufferAndNetBufferList devuelve un puntero a la estructura de NET_BUFFER_LIST asignada. La estructura NET_BUFFER_LIST incluye una estructura de NET_BUFFER. Si la asignación no se realizó correctamente, este puntero es NULL.
Comentarios
Las estructuras que asigna la función NdisAllocateNetBufferAndNetBufferList deben proceder de un grupo que incluya NET_BUFFER_LIST estructuras emparejadas con estructuras de NET_BUFFER asignadas previamente. Para crear este grupo, debe llamar al Función NdisAllocateNetBufferListPool con el miembro fAllocateNetBuffer de la estructura NET_BUFFER_LIST_POOL_PARAMETERS establecida en TRUE y el miembro DataSize establecido en cero.
El NET_BUFFER preasignado se puede reutilizar reinicializando con otra cadena MDL cuando posee NET_BUFFER, pero los campos DataOffset, DataLength, CurrentMdl y CurrentMdlOffset de la NET_BUFFER deben ser coherentes con la nueva cadena MDL.
Por ejemplo, si la cadena MDL original contiene XDataLength e YDataOffset, y CurrentMdl comienza con la segunda MDL (M) en la cadena MDL original, CurrentMdlOffset es Z. El campo MdlChain de NET_BUFFER_DATA debe apuntar a una nueva cadena MDL que contenga X'DataLength e Y'DataOffset. Si CurrentMdl comienza con la tercera MDL (M') en la nueva cadena MDL, CurrentMdlOffset es Z' y las macros siguientes deben usarse para establecer campos en NET_BUFFER:
NET_BUFFER_FIRST_MDL(_NB) = New MDL chain;
NET_BUFFER_DATA_LENGTH(_NB) = X';
NET_BUFFER_DATA_OFFSET(_NB) = Y';
NET_BUFFER_CURRENT_MDL(_NB) = M';
NET_BUFFER_CURRENT_MDL_OFFSET(_NB) = Z';
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Se admite en NDIS 6.0 y versiones posteriores. |
Plataforma de destino | Universal |
Encabezado | ndis/nblapi.h (include ndis.h) |
Library | Ndis.lib |
IRQL | <= DISPATCH_LEVEL |
Reglas de cumplimiento de DDI | Irql_NetBuffer_Function(ndis), NdisAllocateNetBufferList(ndis), NdisAllocateNetBufferList_InitFail(ndis) |
Consulte también
NET_BUFFER_LIST_POOL_PARAMETERS
NdisAllocateNetBufferListPool