NDIS_PD_POST_AND_DRAIN_BUFFER_LIST função de retorno de chamada (ndis.h)
A plataforma PacketDirect (PD) chama a função PDPostAndDrainBufferList de um driver de miniporto compatível com PD para postar estruturas de PD_BUFFER em filas de transmissão/recebimento de PD e esvaziar as estruturas de PD_BUFFER postadas anteriormente que foram concluídas.
Sintaxe
NDIS_PD_POST_AND_DRAIN_BUFFER_LIST NdisPdPostAndDrainBufferList;
VOID() NdisPdPostAndDrainBufferList(
[in, out] NDIS_PD_QUEUE *Queue,
[in, out] PD_BUFFER **PostBufferListHead,
[in, out] PD_BUFFER ***DrainBufferListTail,
[in] ULONG MaxDrainCount
)
{...}
Parâmetros
[in, out] Queue
Um ponteiro para a fila de transmissão ou recebimento que receberá buffers postados e terá buffers concluídos removidos.
[in, out] PostBufferListHead
O cabeçalho da lista de postagens. O provedor remove os buffers nesta lista e os adiciona à Fila.
[in, out] DrainBufferListTail
A parte final da lista de dreno. O provedor remove todos os buffers concluídos da Fila e os adiciona a essa lista.
[in] MaxDrainCount
A quantidade máxima de PD_BUFFER estruturas a serem drenados. O provedor deve garantir que não exceda esse valor. Um conjunto de estruturas de PD_BUFFER parciais que compõem uma única contagem de pacotes L2 é 1.
Retornar valor
Essa função de retorno de chamada não retorna um valor.
Comentários
O provedor remove buffers do PostBufferList e os coloca na fila, começando com o buffer principal na lista e avançando para o próximo buffer até que PostBufferList esteja vazio ou a fila esteja cheia (ou quase cheia). O provedor avançou para o PostListHead e retorna o cabeçalho da nova lista para o chamador. O provedor também remove todos os buffers concluídos da fila e os insere na parte final do DrainBufferList e retorna a nova cauda DrainBufferList para o cliente.
Exemplos
Para definir uma função PDPostAndDrainBufferList , primeiro você deve fornecer uma declaração de função que identifique o tipo de função que você está definindo. O Windows fornece um conjunto de tipos de função para drivers. Declarar uma função usando os tipos de função ajuda a Análise de Código para Drivers, SDV ( Verificador de Driver Estático ) e outras ferramentas de verificação a encontrar erros e é um requisito para gravar drivers para o sistema operacional Windows.Por exemplo, para definir uma função PDPostAndDrainBufferList chamada "MyPDPostAndDrainBufferList", use o tipo NDIS_PD_POST_AND_DRAIN_BUFFER_LIST conforme mostrado neste exemplo de código:
NDIS_PD_POST_AND_DRAIN_BUFFER_LIST MyPDPostAndDrainBufferList;
Em seguida, implemente sua função da seguinte maneira:
_Use_decl_annotations_
VOID
MyPDPostAndDrainBufferList(
NDIS_PD_QUEUE* Queue,
PD_BUFFER** PostBufferListHead,
PD_BUFFER*** DrainBufferListTail,
ULONG MaxDrainCount
)
{...}
O tipo de função NDIS_PD_POST_AND_DRAIN_BUFFER_LIST é definido no arquivo de cabeçalho Ntddndis.h. Para identificar erros com mais precisão ao executar as ferramentas de análise de código, adicione a anotação Use_decl_annotations à sua definição de função. A anotação Use_decl_annotations garante que as anotações aplicadas ao tipo de função NDIS_PD_POST_AND_DRAIN_BUFFER_LIST no arquivo de cabeçalho sejam usadas. Para obter mais informações sobre os requisitos para declarações de função, consulte Declarando funções usando tipos de função de função para drivers NDIS.
Para obter informações sobre Use_decl_annotations, consulte Anotando o comportamento da função.
Veja a seguir um snippet de código de exemplo que ilustra os indireções de ponteiro para essa função.
PD_BUFFER* PostHead = NULL;
PD_BUFFER** PostTail = &PostHead;
PD_BUFFER* DrainHead = NULL;
PD_BUFFER** DrainTail = &DrainHead;
PD_BUFFER* bufX = <allocated PD_BUFFER>;
bufX->NextPDBuffer = NULL;
*PostTail = bufX;
PostTail = &bufX->NextPDBuffer;
// BEFORE:
//PostHead == bufX
//PostTail == &bufZ->NextPDBuffer
//DrainHead == NULL
//DrainTail == &DrainHead
NDIS_PD_POST_AND_DRAIN_BUFFER_LIST(
Queue,
&PostHead,
&DrainTail,
32);
// AFTER:
//PostHead == bufY
//PostTail == &bufZ->NextPDBuffer
//DrainHead == buf1
//DrainTail == &buf5->NextPDBuffer
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows 10 |
Servidor mínimo com suporte | Windows Server 2016 |
Plataforma de Destino | Windows |
Cabeçalho | ndis.h |
IRQL | <= DISPATCH_LEVEL |