NDK_FN_BUILD_LAM função de retorno de chamada (ndkpi.h)
A função NdkBuildLam (NDK_FN_BUILD_LAM) obtém um LAM (mapeamento de endereço lógico) do adaptador do provedor NDK para uma região de memória virtualmente contígua.
Sintaxe
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
Um ponteiro para um objeto de adaptador NDK (NDK_ADAPTER).
[in] Mdl
Uma MDL (lista de descritores de memória) ou uma cadeia de MDLs. A parte da cadeia de MDL do endereço virtual inicial até o número de bytes no parâmetro Length deve representar uma região de memória virtualmente contígua.
[in] Length
O número de bytes a serem mapeados a partir do endereço virtual do primeiro MDL. O endereço virtual MDL pode ser obtido com a macro MmGetMdlVirtualAddress . O comprimento não deve exceder o número total de bytes representados pela cadeia de MDL.
[in] RequestCompletion
Um ponteiro para uma função de retorno de chamada NdkRequestCompletion (NDK_FN_REQUEST_COMPLETION).
[in, optional] RequestContext
Um valor de contexto para o provedor passar de volta para a função de retorno de chamada NdkRequestCompletion especificada no parâmetro RequestCompletion .
pNdkLAM
Um ponteiro para um buffer que conterá uma estrutura NDK_LOGICAL_ADDRESS_MAPPING que contém uma matriz de página do adaptador. A matriz de páginas do adaptador é armazenada no membro AdapterPageArray e o membro AdapterPageCount contém o número de elementos de página do adaptador.
pLAMSize
O tamanho, em bytes, do buffer no parâmetro pNdkLAM para entrada ou o número real de bytes gravados para saída.
[out] pFBO
O primeiro valor de deslocamento de bytes (FBO) é retornado nesse local. O FBO é o deslocamento inicial na primeira página do adaptador.
Retornar valor
A função NdkBuildLam retorna um dos seguintes códigos NTSTATUS.
Código de retorno | Descrição |
---|---|
|
A operação foi concluída com sucesso. |
|
A solicitação está pendente, a função especificada no parâmetro RequestCompletion (NDK_FN_REQUEST_COMPLETION) será chamada quando a operação de build lam for concluída. |
|
A parte da cadeia de MDL do endereço virtual inicial até o número de bytes especificado no parâmetro Length não representa uma região de memória virtualmente contígua. |
|
A solicitação falhou devido a recursos insuficientes.
Importante A solicitação pode falhar embutida, bem como de forma assíncrona com esse código status.
|
|
O tamanho do buffer indicado pelo parâmetro *pLAMSize é muito pequeno para manter o LAM. Nesse caso, o valor de *pLAMSize é atualizado com o tamanho do buffer necessário. |
|
Ocorreu um erro. |
Comentários
A parte da cadeia de MDL do endereço virtual inicial até o número de bytes especificado no parâmetro Length deve representar uma região de memória virtualmente contígua. Caso contrário, o provedor NDK deverá falhar na solicitação. É responsabilidade do consumidor do NDK garantir que a cadeia de MDL esteja bloqueada. Ou seja, as páginas da alteração de MDL são fixadas na memória física.
Um consumidor do NDK pode chamar a função NdkGetPrivilegedMemoryRegionToken (NDK_FN_GET_PRIVILEGED_MEMORY_REGION_TOKEN) para obter um token de região de memória privilegiada de um provedor NDK.
Todas as páginas do adaptador retornadas por um provedor NDK devem ter PAGE_SIZE bytes de comprimento, em que PAGE_SIZE é o tamanho da página de memória compatível com a plataforma host, conforme definido em wdm.h.
O provedor deve tratar o valor do endereço virtual que a macro MmGetMdlVirtualAddress retorna para o MDL como um índice até o início da região de memória que está sendo mapeada. O provedor não deve usar o valor de endereço virtual como um endereço virtual válido para ler ou gravar conteúdos de buffer.
Se um provedor tiver um erro ao processar uma solicitação NdkBuildLam , o provedor deverá liberar todos os mapeamentos parciais criados internamente até agora antes de concluir a solicitação com falha.
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Nenhum com suporte, com suporte no NDIS 6.30 e posterior. |
Servidor mínimo com suporte | Windows Server 2012 |
Plataforma de Destino | Windows |
Cabeçalho | ndkpi.h (inclua Ndkpi.h) |
IRQL | <=DISPATCH_LEVEL |
Confira também
Requisitos de tempo de vida do objeto NDKPI