Compartir a través de


NDK_FN_SEND_AND_INVALIDATE función de devolución de llamada (ndkpi.h)

La función NdkSendAndInvalidate (NDK_FN_SEND_AND_INVALIDATE) publica una solicitud de envío en un par de cola de NDK (QP) y proporciona un token que se invalidará en el mismo nivel remoto al finalizar la recepción.

Sintaxis

NDK_FN_SEND_AND_INVALIDATE NdkFnSendAndInvalidate;

NTSTATUS NdkFnSendAndInvalidate(
  [in]           NDK_QP *pNdkQp,
  [in, optional] PVOID RequestContext,
                 const NDK_SGE *pSgl,
  [in]           ULONG nSge,
  [in]           ULONG Flags,
  [in]           UINT32 RemoteToken
)
{...}

Parámetros

[in] pNdkQp

Puntero a un par de colas NDK (QP) (NDK_QP).

[in, optional] RequestContext

Valor de contexto que se va a devolver en el miembro RequestContext de la estructura NDK_RESULT_EX para esta solicitud.

pSgl

Matriz de estructuras SGE (NDK_SGE) que representan los búferes que contienen los datos que se van a enviar.

[in] nSge

Número de estructuras SGE de la matriz especificada en el parámetro pSgl .

[in] Flags

OR bit a bit de marcas que especifican las operaciones permitidas. Se admiten las marcas siguientes:

Valor Significado
NDK_OP_FLAG_SILENT_SUCCESS
0x00000001
Si esta solicitud se realiza correctamente, no genera un evento de finalización en la cola de finalización de salida. Sin embargo, si se produce un error, genera un evento de finalización en la cola de finalización de salida.
NDK_OP_FLAG_READ_FENCE
0x00000002
Todas las solicitudes de lectura anteriores deben completarse antes de que el hardware comience a procesar esta solicitud.
NDK_OP_FLAG_SEND_AND_SOLICIT_EVENT
0x00000004
La cola de finalización del elemento del mismo nivel genera una notificación. Para obtener más información sobre NDK_OP_FLAG_SEND_AND_SOLICIT_EVENT, vea la sección Comentarios.
NDK_OP_FLAG_INLINE
0x00000040
Indica que la memoria a la que hacen referencia los SGE se debe transferir en línea. Además, el valor MemoryRegionToken de las entradas de NDK_SGE podría no ser válido. Las solicitudes insertadas no necesitan limitar el número de entradas de la lista SGE al valor MaxInitiatorRequestSge especificado cuando se creó el par de colas. La cantidad de memoria transferida insertada debe estar dentro de los límites de datos insertados del par de colas.
NDK_OP_FLAG_DEFER
0x00000200
Indica al proveedor NDK que puede aplazar la solicitud al hardware para su procesamiento. Para obtener más información sobre esta marca, vea Esquema de procesamiento diferido de NDKPI.

Nota Esta marca solo se admite en NDKPI 1.2 (Windows Server 2012 R2) y versiones posteriores.

[in] RemoteToken

Token remoto que se va a invalidar en el mismo nivel tras la finalización de la recepción. El proveedor NDK del mismo nivel receptor debe anular la conexión, tal como se especifica en las reglas de transporte de capa inferior, si el elemento del mismo nivel de envío especificó un token no válido.

Valor devuelto

La función NdkSendAndInvalidate devuelve uno de los siguientes códigos NTSTATUS.

Código devuelto Descripción
STATUS_SUCCESS
La solicitud se publicó correctamente. Una entrada de finalización se pondrá en cola en la cola de finalización (CQ) cuando se complete la solicitud de trabajo.
STATUS_CONNECTION_INVALID
El par de colas (QP) no está conectado.
Otros códigos de estado
Se produjo un error.

Comentarios

Puede usar la marca de NDK_OP_FLAG_SEND_AND_SOLICIT_EVENT si emite varias solicitudes de envío relacionadas. Establezca esta marca en la última solicitud del grupo.

Un consumidor de NDK puede usar esta marca al emitir varias solicitudes de envío relacionadas. El consumidor de NDK establece esta marca solo en la última solicitud de envío relacionada. El elemento del mismo nivel recibirá todas las solicitudes de envío como normales. Sin embargo, cuando el elemento del mismo nivel recibe la última solicitud de envío (la solicitud con la marca NDK_OP_FLAG_SEND_AND_SOLICIT_EVENT establecida), la cola de finalización del mismo nivel genera una notificación. La notificación se genera una vez completada la solicitud de recepción. Esta marca no tiene ningún significado para el receptor (del mismo nivel), a menos que el receptor haya llamado previamente a la función NdkArmCq (NDK_FN_ARM_CQ) con el tipo de notificación establecido en NDK_CQ_NOTIFY_SOLICITED.

Nota Las solicitudes que se completan con un error siempre coinciden con el tipo de notificación NDK_CQ_NOTIFY_SOLICITED .
 
El consumidor de NDK debe asegurarse de que no se llame a la función NdkSendAndInvalidate si el par receptor no admite la invalidación remota. El consumidor debe negociar esta funcionalidad mediante un mecanismo fuera de banda o no usar esta función. Si el consumidor infringe este requisito, el comportamiento del proveedor no está definido.

Cualquier estructura NDK_RESULT_EX que se agregue a una cola de finalización como resultado de una llamada a esta función debe especificar NdkOperationTypeSend para el miembro Type . Tenga en cuenta que no es necesario especificar un valor para el miembro TypeSpecificCompletionOutput de la estructura NDK_RESULT_EX .

Requisitos

Requisito Value
Cliente mínimo compatible Ninguno compatible, compatible con NDIS 6.40 y versiones posteriores.
Servidor mínimo compatible Windows Server 2012 R2
Plataforma de destino Windows
Encabezado ndkpi.h (incluya Ndkpi.h)
IRQL <=DISPATCH_LEVEL

Consulte también

Requisitos de control de finalización de NDKPI

Esquema de procesamiento diferido de NDKPI

Requisitos de publicación de solicitudes de trabajo de NDKPI

NDK_FN_ARM_CQ

NDK_QP

NDK_RESULT_EX

NDK_SGE