NDK_FN_BUILD_LAM función de devolución de llamada (ndkpi.h)
La función NdkBuildLam (NDK_FN_BUILD_LAM) obtiene una asignación de direcciones lógicas (LAM) del adaptador del proveedor NDK para una región de memoria prácticamente contigua.
Sintaxis
NDK_FN_BUILD_LAM NdkFnBuildLam;
NTSTATUS NdkFnBuildLam(
[in] NDK_ADAPTER *pNdkAdapter,
[in] MDL *Mdl,
[in] SIZE_T Length,
[in] NDK_FN_REQUEST_COMPLETION RequestCompletion,
[in, optional] PVOID RequestContext,
NDK_LOGICAL_ADDRESS_MAPPING *pNdkLAM,
ULONG *pLAMSize,
[out] ULONG *pFBO
)
{...}
Parámetros
[in] pNdkAdapter
Puntero a un objeto de adaptador NDK (NDK_ADAPTER).
[in] Mdl
Lista de descriptores de memoria (MDL) o cadena de MDL. La parte de la cadena MDL desde la dirección virtual inicial hasta el número de bytes del parámetro Length debe representar una región de memoria virtualmente contigua.
[in] Length
Número de bytes que se van a asignar a partir de la primera dirección virtual de MDL. La dirección virtual MDL se puede obtener con la macro MmGetMdlVirtualAddress . La longitud no debe superar el número total de bytes representados por la cadena MDL.
[in] RequestCompletion
Puntero a una función de devolución de llamada NdkRequestCompletion (NDK_FN_REQUEST_COMPLETION).
[in, optional] RequestContext
Valor de contexto para que el proveedor vuelva a la función de devolución de llamada NdkRequestCompletion especificada en el parámetro RequestCompletion .
pNdkLAM
Puntero a un búfer que contendrá una estructura de NDK_LOGICAL_ADDRESS_MAPPING que contiene una matriz de páginas del adaptador. La matriz de páginas del adaptador se almacena en el miembro AdapterPageArray y el miembro AdapterPageCount contiene el número de elementos de página del adaptador.
pLAMSize
Tamaño, en bytes, del búfer en el parámetro pNdkLAM para la entrada o el número real de bytes escritos para la salida.
[out] pFBO
El primer valor de desplazamiento de bytes (FBO) se devuelve en esta ubicación. FBO es el desplazamiento inicial dentro de la primera página del adaptador.
Valor devuelto
La función NdkBuildLam devuelve uno de los siguientes códigos NTSTATUS.
Código devuelto | Descripción |
---|---|
|
La operación se ha completado correctamente. |
|
La solicitud está pendiente, se llamará a la función especificada en el parámetro RequestCompletion (NDK_FN_REQUEST_COMPLETION) cuando se complete la operación de compilación de LAM. |
|
La parte de la cadena MDL desde la dirección virtual inicial hasta el número de bytes especificados en el parámetro Length 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.
|
|
El tamaño del búfer indicado por el parámetro *pLAMSize es demasiado pequeño para contener el LAM. En este caso, el valor de *pLAMSize se actualiza con el tamaño de búfer necesario. |
|
Se produjo un error. |
Comentarios
La parte de la cadena MDL desde la dirección virtual inicial hasta el número de bytes especificados en el parámetro Length debe representar una región de memoria prácticamente contigua. De lo contrario, el proveedor NDK debe producir un error en la solicitud. Es responsabilidad del consumidor de NDK asegurarse de que la cadena MDL está bloqueada. Es decir, las páginas del cambio de MDL se anclan en memoria física.
Un consumidor de NDK puede llamar a la función NdkGetPrivilegedMemoryRegionToken (NDK_FN_GET_PRIVILEGED_MEMORY_REGION_TOKEN) para obtener un token de región de memoria con privilegios de un proveedor NDK.
Todas las páginas del adaptador devueltas por un proveedor de NDK deben tener PAGE_SIZE bytes de longitud, donde PAGE_SIZE es el tamaño de página de memoria compatible con la plataforma host tal como se define en wdm.h.
El proveedor debe tratar el valor de dirección virtual que devuelve la macro MmGetMdlVirtualAddress para MDL como un índice al inicio de la región de memoria que se asigna. El proveedor no debe usar el valor de dirección virtual como una dirección virtual válida para leer o escribir contenido del búfer.
Si un proveedor tiene un error al procesar una solicitud NdkBuildLam , el proveedor debe liberar las asignaciones parciales compiladas internamente hasta ahora antes de completar la solicitud con error.
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 |
Consulte también
Requisitos de duración del objeto NDKPI