Compartilhar via


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:

Valor Significado
NDK_MR_FLAG_ALLOW_LOCAL_READ
0x00000000
NDK_MR_FLAG_ALLOW_LOCAL_WRITE
0x00000001
NDK_MR_FLAG_ALLOW_REMOTE_READ
0x00000002
NDK_MR_FLAG_ALLOW_REMOTE_WRITE
0x00000005
NDK_MR_FLAG_RDMA_READ_SINK
0x00000008

[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
STATUS_SUCCESS
O registro de MR foi concluído com êxito.
STATUS_PENDING
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.
STATUS_INVALID_PARAMETER
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.
STATUS_INSUFFICIENT_RESOURCES
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.
 
Outros códigos 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.

Nota Os buffers podem ser registrados para várias finalidades. Portanto, o sinalizador NDK_MR_FLAG_RDMA_READ_SINK pode ser acompanhado por outros sinalizadores.
 
Se um consumidor do NDK passar o sinalizador NDK_MR_FLAG_RDMA_READ_SINK em um adaptador para o qual o sinalizador NDK_ADAPTER_FLAG_RDMA_READ_SINK_NOT_REQUIRED é definido no membro AdapterFlags da estrutura NDK_ADAPTER_INFO , o provedor não será obrigado a manipular o sinalizador NDK_MR_FLAG_RDMA_READ_SINK e não deverá falhar na solicitação devido à presença desse sinalizador.

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

Confira também

MmGetMdlVirtualAddress

Requisitos de tempo de vida do objeto NDKPI

NDK_ADAPTER_INFO

NDK_FN_DEREGISTER_MR

NDK_FN_REQUEST_COMPLETION

NDK_MR