NDK_FN_REGISTER_MR función de devolución de llamada (ndkpi.h)
La función NdkRegisterMr (NDK_FN_REGISTER_MR) registra una región de memoria virtualmente contigua con un adaptador NDK.
Sintaxis
NDK_FN_REGISTER_MR NdkFnRegisterMr;
NTSTATUS NdkFnRegisterMr(
[in] NDK_MR *pNdkMr,
[in] MDL *Mdl,
[in] SIZE_T Length,
[in] ULONG Flags,
[in] NDK_FN_REQUEST_COMPLETION RequestCompletion,
[in, optional] PVOID RequestContext
)
{...}
Parámetros
[in] pNdkMr
Puntero a un objeto de región de memoria NDK (MR) (NDK_MR).
[in] Mdl
MdL o cadena de MDL que representan una región de memoria prácticamente contigua desde la dirección virtual inicial hasta el número de bytes especificados en el parámetro Length .
[in] Length
Número de bytes que se van a registrar a partir de la primera dirección virtual de MDL. La primera dirección virtual de MDL se puede obtener llamando a la macro MmGetMdlVirtualAddress . La longitud no debe superar el número total de bytes representados por la cadena MDL.
[in] Flags
Máscara de bits de marcas que especifican los permisos de acceso para la región de memoria registrada. Se pueden establecer las marcas siguientes:
[in] RequestCompletion
Puntero a una rutina de devolución de llamada de finalización de solicitudes NdkRequestCompletion (NDK_FN_REQUEST_COMPLETION).
[in, optional] RequestContext
Valor de contexto que se va a pasar al parámetro Context de la función de devolución de llamada especificada en el parámetro RequestCompletion .
Valor devuelto
La función NdkRegisterMr devuelve uno de los siguientes códigos NTSTATUS.
Código devuelto | Descripción |
---|---|
|
El registro de MR se completó correctamente. |
|
La operación está pendiente y se completará más adelante. El controlador llamará a la función RequestCompletion (NDK_FN_REQUEST_COMPLETION) especificada para completar la operación pendiente. |
|
La parte de la cadena MDL desde la dirección virtual inicial hasta la longitud en bytes no representa una región de memoria prácticamente contigua. |
|
Error en la solicitud debido a recursos insuficientes.
Importante La solicitud puede producir un error en línea, así como de forma asincrónica con este código de estado.
|
|
Se produjo un error. |
Comentarios
En un objeto NDK_MR que se creó con el parámetro FastRegister establecido en FALSE, NdkRegisterMr se usa para registrar una región de memoria virtualmente contigua con el adaptador.
El consumidor de NDK debe pasar una MDL o cadena de MDL que represente una región de memoria virtualmente contigua anclada en memoria física. La dirección virtual base de la región de memoria que se está registrando es la dirección virtual indicada por la macro MmGetMdlVirtualAddress . Si la cadena MDL no representa una región de memoria prácticamente contigua desde la dirección virtual inicial hasta la longitud especificada en bytes, el proveedor NDK debe producir un error en la solicitud.
El proveedor debe tratar la dirección virtual que MmGetMdlVirtualAddress devuelve como un índice al inicio de la región de memoria que se está registrando. El proveedor no debe usar la dirección virtual como una dirección virtual válida para leer o escribir contenido del búfer.
El consumidor de NDK no debe usar la cadena MDL mientras la solicitud de registro está pendiente.
NdkRegisterMr no admite direcciones virtuales basadas en cero.
Un consumidor de NDK debe pasar la marca de NDK_MR_FLAG_RDMA_READ_SINK cuando registra la memoria que podría usarse como búfer receptor para una solicitud de lectura de RDMA. Algunos proveedores de NDK pueden requerir la habilitación de derechos de acceso especiales en el búfer del receptor para una solicitud de lectura de RDMA en adaptadores para los que la marca de NDK_ADAPTER_FLAG_RDMA_READ_SINK_NOT_REQUIRED no está establecida en el miembro AdapterFlags de la estructura de NDK_ADAPTER_INFO . La marca NDK_MR_FLAG_RDMA_READ_SINK permite a estos proveedores admitir las solicitudes de registro correctamente.
Para anular el registro de la región de memoria, use la función NdkDeregisterMr (NDK_FN_DEREGISTER_MR).
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Ninguno compatible, compatible con NDIS 6.30 y versiones posteriores. |
Servidor mínimo compatible | Windows Server 2012 |
Plataforma de destino | Windows |
Encabezado | ndkpi.h (incluya Ndkpi.h) |
IRQL | <=DISPATCH_LEVEL |