Compartilhar via


Operações avançadas

As operações avançadas diminuem o tamanho do espaço de dados usado em uma estrutura NET_BUFFER ou em todas as estruturas de NET_BUFFER em uma estrutura NET_BUFFER_LIST .

Os drivers usam as seguintes funções avançadas:

NdisAdvanceNetBufferDataStart

NdisAdvanceNetBufferListDataStart

Às vezes, as operações avançadas podem liberar MDLs associados a uma estrutura NET_BUFFER. Para fornecer o mecanismo para liberar MDLs, um driver pode fornecer um ponto de entrada opcional para funções NetFreeMdl . Se o ponto de entrada for NULL, o NDIS usará um método padrão para alocar MDLs. Os MDLs só devem ser liberados em um NetFreeMdl usando essa recíproca do mecanismo que foi usado para alocar o MDL na função NetAllocateMdl .

Para obter o novo DataLength, o NDIS subtrai o DataOffsetDelta especificado pelo driver do DataLength atual. Se uma operação de retirada anterior alocasse um novo espaço de dados, a operação avançada poderá liberar essa memória alocada anteriormente. Se uma operação avançada não liberar memória, o NDIS simplesmente adicionará o DataOffsetDelta ao DataOffset atual para obter o novo DataOffset . Se a operação avançada liberou memória, o NDIS ajusta o DataOffset adequadamente.

Para o caso de envio completo, as operações avançadas podem liberar memória alocada em operações de retirada anteriores. Para melhorar o desempenho, os drivers devem alocar tamanho total de dados suficiente antes de enviar para acomodar as operações de retirada de todos os drivers subjacentes.

Para o caso de indicação de recebimento, as operações avançadas simplesmente ajustam o DataOffset e o DataLength adequadamente. Após a operação avançada, os cabeçalhos das camadas inferiores permanecem no espaço de dados não utilizado.