NDK_FN_REGISTER_MR função de retorno de chamada (ndkpi.h)
A função NdkRegisterMr (NDK_FN_REGISTER_MR) registra uma região de memória virtualmente contígua com um adaptador NDK.
Sintaxe
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
Um ponteiro para um objeto MR (região de memória NDK) (NDK_MR).
[in] Mdl
Um MDL ou uma cadeia de MDLs que representam uma região de memória virtualmente contígua do endereço virtual inicial até o número de bytes especificado no parâmetro Length .
[in] Length
O número de bytes a serem registrados a partir do endereço virtual do primeiro MDL. O primeiro endereço virtual do MDL pode ser obtido chamando a macro MmGetMdlVirtualAddress . O comprimento não deve exceder o número total de bytes representados pela cadeia de MDL.
[in] Flags
Uma máscara de bits de sinalizadores que especificam as permissões de acesso para a região de memória registrada. Os seguintes sinalizadores podem ser definidos:
[in] RequestCompletion
Um ponteiro para uma rotina de retorno de chamada de conclusão de solicitação NdkRequestCompletion (NDK_FN_REQUEST_COMPLETION).
[in, optional] RequestContext
Um valor de contexto a ser passado para o parâmetro Context da função de retorno de chamada especificada no parâmetro RequestCompletion .
Retornar valor
A função NdkRegisterMr retorna um dos seguintes códigos NTSTATUS.
Código de retorno | Descrição |
---|---|
|
O registro de MR foi concluído com êxito. |
|
A operação está pendente e será concluída posteriormente. O driver chamará a função RequestCompletion (NDK_FN_REQUEST_COMPLETION) especificada para concluir a operação pendente. |
|
A parte da cadeia de MDL do endereço virtual inicial até o comprimento em bytes não representa uma região de memória virtualmente contígua. |
|
Falha na solicitação devido a recursos insuficientes.
Importante A solicitação pode falhar embutida, bem como de forma assíncrona com esse código status.
|
|
Ocorreu um erro. |
Comentários
Em um objeto NDK_MR que foi criado com o parâmetro FastRegister definido como FALSE, NdkRegisterMr é usado para registrar uma região de memória virtualmente contígua com o adaptador.
O consumidor do NDK deve passar um MDL ou uma cadeia de MDLs que represente uma região de memória virtualmente contígua fixada na memória física. O endereço virtual base para a região de memória que está sendo registrada é o endereço virtual indicado pela macro MmGetMdlVirtualAddress . Se a cadeia de MDL não representar uma região de memória virtualmente contígua do endereço virtual inicial até o comprimento especificado em bytes, o provedor NDK deverá falhar na solicitação.
O provedor deve tratar o endereço virtual que MmGetMdlVirtualAddress retorna como um índice para o início da região de memória que está sendo registrada. O provedor não deve usar o endereço virtual como um endereço virtual válido para ler ou gravar conteúdo de buffer.
O consumidor do NDK não deve usar a cadeia de MDL enquanto a solicitação de registro estiver pendente.
O NdkRegisterMr não dá suporte a endereços virtuais baseados em zero.
Um consumidor de NDK deve passar o sinalizador NDK_MR_FLAG_RDMA_READ_SINK quando registrar memória que possa ser usada como o buffer do coletor para uma solicitação de leitura RDMA. Determinados provedores NDK podem exigir a habilitação de direitos de acesso especiais no buffer do coletor para uma solicitação de leitura RDMA em adaptadores para os quais o sinalizador de NDK_ADAPTER_FLAG_RDMA_READ_SINK_NOT_REQUIRED não está definido no membro AdapterFlags da estrutura NDK_ADAPTER_INFO . O sinalizador NDK_MR_FLAG_RDMA_READ_SINK permite que esses provedores ofereçam suporte às solicitações de registro adequadamente.
Para desregistrar a região de memória, use a função NdkDeregisterMr (NDK_FN_DEREGISTER_MR).
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 |