Compartilhar via


Função NdisAllocateNetBuffer (ndis/nblapi.h)

Chame a função NdisAllocateNetBuffer para alocar e inicializar uma estrutura NET_BUFFER de um pool de estruturas NET_BUFFER .

Sintaxe

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

Um identificador do pool de estruturas NET_BUFFER que foi retornado anteriormente de uma chamada para NdisAllocateNetBufferPool.

[in, optional] MdlChain

Um ponteiro para uma cadeia de MDL que o NDIS usa para inicializar a nova estrutura de NET_BUFFER . MdlChain pode ser NULL.

[in] DataOffset

O deslocamento inicial, em bytes, desde o início do buffer até o início do espaço de dados usado na cadeia de MDL. O espaço de dados antes desse deslocamento é espaço de dados não utilizado. Portanto, esse valor também representa a quantidade inicial de espaço de backfill disponível na cadeia de MDL. Se MdlChain for NULL, DataOffset deverá ser 0.

[in] DataLength

O comprimento do espaço de dados usado, em bytes, na cadeia de MDL. Se MdlChain for NULL, DataLength deverá ser 0.

Retornar valor

NdisAllocateNetBuffer retorna um ponteiro para a estrutura NET_BUFFER alocada pelo NDIS. Se a alocação não tiver sido bem-sucedida, esse ponteiro será NULL.

Comentários

Chame NdisFreeNetBuffer para liberar uma estrutura de NET_BUFFER alocada de um pool de estruturas NET_BUFFER .

ObserveNET_BUFFER e estruturas de NET_BUFFER_LIST devem ser alocadas de um pool de buffers NDIS. Um driver não deve alocar e inicializar uma estrutura NET_BUFFER ou NET_BUFFER_LIST de seu pool de memória privada ou da pilha.
 
A NET_BUFFER preallocada pode ser reutilizada reinicializando-a com outra cadeia de MDL quando possui NET_BUFFER, mas os campos DataOffset, DataLength, CurrentMdl e CurrentMdlOffset no NET_BUFFER devem ser consistentes com a nova cadeia de MDL.

Por exemplo, se a cadeia de MDL original contiver XDataLength e YDataOffset, e CurrentMdl começar com o segundo MDL (M) na cadeia MDL original, CurrentMdlOffset será Z. O campo MdlChain no NET_BUFFER_DATA então precisa apontar para uma nova cadeia de MDL que contém X'DataLength e Y'DataOffset. Se CurrentMdl começar com o terceiro MDL (M') na nova cadeia de MDL, CurrentMdlOffset será Z' e as seguintes macros precisarão ser usadas para definir campos em 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 Valor
Cliente mínimo com suporte Com suporte no NDIS 6.0 e posterior.
Plataforma de Destino Universal
Cabeçalho ndis/nblapi.h (inclua ndis.h)
Biblioteca Ndis.lib
IRQL <= DISPATCH_LEVEL
Regras de conformidade de DDI Irql_NetBuffer_Function(ndis), NdisAllocateNetBuffer(ndis)

Confira também

NET_BUFFER

NET_BUFFER_LIST

NdisAllocateNetBufferPool

NdisFreeNetBuffer