Función NdisAllocateNetBuffer (ndis/nblapi.h)

Llame a la función NdisAllocateNetBuffer para asignar e inicializar una estructura de NET_BUFFER desde un grupo de estructuras de NET_BUFFER .

Sintaxis

NDIS_EXPORTED_ROUTINE NET_BUFFER * NdisAllocateNetBuffer(
  [in]           NDIS_HANDLE PoolHandle,
  [in, optional] MDL         *MdlChain,
  [in]           ULONG       DataOffset,
  [in]           SIZE_T      DataLength
);

Parámetros

[in] PoolHandle

Identificador de grupo de estructura de NET_BUFFER que se devolvió anteriormente desde una llamada a NdisAllocateNetBufferPool.

[in, optional] MdlChain

Puntero a una cadena MDL que NDIS usa para inicializar la nueva estructura de NET_BUFFER . 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 del espacio de datos usado, en bytes, en la cadena MDL. Si MdlChain es NULL, DataLength debe ser 0.

Valor devuelto

NdisAllocateNetBuffer devuelve un puntero a la estructura NET_BUFFER asignada por NDIS. Si la asignación no se realizó correctamente, este puntero es NULL.

Comentarios

Llame a NdisFreeNetBuffer para liberar una estructura de NET_BUFFER que se asignó desde un grupo de estructuras de NET_BUFFER .

Tenga en cuentaNET_BUFFER y NET_BUFFER_LIST estructuras deben asignarse desde un grupo de búferes NDIS. Un controlador no debe asignar ni inicializar una estructura de NET_BUFFER o NET_BUFFER_LIST desde su grupo de memoria privada o la pila.
 
El NET_BUFFER asignado previamente se puede reutilizar reinicializando con otra cadena MDL cuando posee NET_BUFFER, pero los campos DataOffset, DataLength, CurrentMdl y CurrentMdlOffset de 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) de la cadena MDL original, CurrentMdlOffset es Z. A continuación, el campo MdlChain de NET_BUFFER_DATA debe apuntar a una nueva cadena MDL que contiene X'DataLength e Y'DataOffset. Si CurrentMdl comienza con la tercera MDL (M') de la nueva cadena MDL, CurrentMdlOffset es Z' y las siguientes macros 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

   
Cliente mínimo compatible Compatible con NDIS 6.0 y versiones posteriores.
Plataforma de destino Universal
Header ndis/nblapi.h (include ndis.h)
Library Ndis.lib
IRQL <= DISPATCH_LEVEL
Reglas de cumplimiento de DDI Irql_NetBuffer_Function(ndis), NdisAllocateNetBuffer(ndis)

Consulte también

NET_BUFFER

NET_BUFFER_LIST

NdisAllocateNetBufferPool

NdisFreeNetBuffer