NDIS_PD_POST_AND_DRAIN_BUFFER_LIST función de devolución de llamada (ndis.h)
La plataforma PacketDirect (PD) llama a la función PDPostAndDrainBufferList del controlador de miniporte compatible con PD para publicar estructuras de PD_BUFFER en colas de transmisión y recepción de PD y purgar las estructuras de PD_BUFFER publicadas anteriormente que se han completado.
Sintaxis
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
Puntero a la cola de transmisión o recepción que recibirá búferes publicados y habrá eliminado los búferes completados.
[in, out] PostBufferListHead
Encabezado de la lista de publicaciones. El proveedor quita los búferes de esta lista y los agrega al Queue.
[in, out] DrainBufferListTail
Cola de la lista de purga. El proveedor quita los búferes completados de Queue y los agrega a esta lista.
[in] MaxDrainCount
Cantidad máxima de estructuras de PD_BUFFER que se van a purgar. El proveedor debe asegurarse de que no supere esta cantidad. Un conjunto de estructuras de PD_BUFFER parciales que componen un único recuento de paquetes L2 es 1.
Valor devuelto
Esta función de devolución de llamada no devuelve un valor.
Observaciones
El proveedor quita los búferes de PostBufferList y los coloca en la cola, empezando por el búfer principal de la lista y avanzando hasta el siguiente búfer hasta que PostBufferList esté vacío o la cola esté llena (o casi llena). El proveedor avanza a PostListHead y devuelve el nuevo encabezado de lista al autor de la llamada. El proveedor también quita los búferes completados de la cola e los inserta en la cola de DrainBufferList y devuelve la nueva cola DrainBufferList al cliente.
Ejemplos de
Para definir una función de PDPostAndDrainBufferList, primero debe proporcionar una declaración de función que identifique el tipo de función que va a definir. Windows proporciona un conjunto de tipos de función para controladores. Declarar una función mediante los tipos de función ayuda a análisis de código para controladores, comprobador de controladores estáticos (SDV) y otras herramientas de comprobación encuentran errores y es un requisito para escribir controladores para el sistema operativo Windows.Por ejemplo, para definir un PDPostAndDrainBufferList función denominada "MyPDPostAndDrainBufferList", use el tipo NDIS_PD_POST_AND_DRAIN_BUFFER_LIST tal como se muestra en este ejemplo de código:
NDIS_PD_POST_AND_DRAIN_BUFFER_LIST MyPDPostAndDrainBufferList;
A continuación, implemente la función de la siguiente manera:
_Use_decl_annotations_
VOID
MyPDPostAndDrainBufferList(
NDIS_PD_QUEUE* Queue,
PD_BUFFER** PostBufferListHead,
PD_BUFFER*** DrainBufferListTail,
ULONG MaxDrainCount
)
{...}
El tipo de función NDIS_PD_POST_AND_DRAIN_BUFFER_LIST se define en el archivo de encabezado Ntddndis.h. Para identificar con más precisión los errores al ejecutar las herramientas de análisis de código, asegúrese de agregar la anotación Use_decl_annotations a la definición de función. La anotación Use_decl_annotations garantiza que se usen las anotaciones que se aplican al tipo de función NDIS_PD_POST_AND_DRAIN_BUFFER_LIST en el archivo de encabezado. Para obtener más información sobre los requisitos de las declaraciones de función, vea Declaración de funciones mediante el uso de tipos de roles de función para controladores NDIS.
Para obtener información sobre Use_decl_annotations, vea Anotación del comportamiento de la función.
A continuación se muestra un fragmento de código de ejemplo que ilustra las direccionamientos indirectos de puntero para esta función.
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 admitido | Windows 10 |
servidor mínimo admitido | Windows Server 2016 |
de la plataforma de destino de | Windows |
encabezado de | ndis.h |
irQL | <= DISPATCH_LEVEL |