функция обратного вызова NDK_FN_REGISTER_MR (ndkpi.h)

Функция NdkRegisterMr (NDK_FN_REGISTER_MR) регистрирует практически смежный регион памяти с адаптером NDK.

Синтаксис

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
)
{...}

Параметры

[in] pNdkMr

Указатель на объект области памяти NDK (MR) (NDK_MR).

[in] Mdl

MDL или цепочка многомерных выражений, представляющих практически смежный регион памяти от начального виртуального адреса до количества байтов, указанных в параметре Length.

[in] Length

Количество байтов, которые нужно зарегистрировать, начиная с первого виртуального адреса MDL. Первый виртуальный адрес MDL можно получить, вызвав макрос MmGetMdlVirtualAddress. Длина не должна превышать общее количество байтов, представленных цепочкой MDL.

[in] Flags

Битовая маска флагов, указывающая разрешения доступа для зарегистрированной области памяти. Можно задать следующие флаги:

Ценность Значение
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

Указатель на подпрограмму обратного вызова завершения запроса NdkRequestCompletion (NDK_FN_REQUEST_COMPLETION).

[in, optional] RequestContext

Значение контекста, передаваемое параметру контекста функции обратного вызова, указанной в параметре RequestCompletion.

Возвращаемое значение

Функция NdkRegisterM r возвращает один из следующих кодов NTSTATUS.

Возвращаемый код Описание
STATUS_SUCCESS
Регистрация MR успешно завершена.
STATUS_PENDING
Операция ожидается и будет завершена позже. Драйвер вызовет указанную функцию RequestCompletion (NDK_FN_REQUEST_COMPLETION) для завершения ожидающей операции.
STATUS_INVALID_PARAMETER
Часть цепочки MDL от начального виртуального адреса до длины в байтах не представляет практически смежный регион памяти.
STATUS_INSUFFICIENT_RESOURCES
Сбой запроса из-за нехватки ресурсов.
Важные запрос может завершиться сбоем, а также асинхронно с этим кодом состояния.
 
Другие коды состояния
Произошла ошибка.

Замечания

В объекте NDK_MR, созданном с параметром fastRegister fastRegister значение FALSE, NdkRegisterMr используется для регистрации виртуального региона памяти с адаптером.

Потребитель NDK должен передавать MDL или цепочку многомерных выражений, представляющих практически смежный регион памяти, закрепленный в физической памяти. Базовый виртуальный адрес для зарегистрированного региона памяти — это виртуальный адрес, указанный макросом MmGetMdlVirtualAddress. Если цепочка MDL не представляет практически непрерывную область памяти от начального виртуального адреса до указанной длины в байтах, поставщик NDK должен завершить запрос сбоем.

Поставщик должен обрабатывать виртуальный адрес, который MmGetMdlVirtualAddress возвращается в качестве индекса до начала зарегистрированной области памяти. Поставщик не должен использовать виртуальный адрес в качестве допустимого виртуального адреса для чтения или записи содержимого буфера.

Потребитель NDK не должен использовать цепочку MDL во время ожидания запроса на регистрацию.

NdkRegisterMr не поддерживает виртуальные адреса на основе нуля.

Потребитель NDK должен передать флаг NDK_MR_FLAG_RDMA_READ_SINK при регистрации памяти, которая может использоваться в качестве буфера приемника для запроса чтения RDMA. Для некоторых поставщиков NDK может потребоваться включить специальные права доступа к буферу приемника для запроса на чтение RDMA для адаптеров, для которых флаг NDK_ADAPTER_FLAG_RDMA_READ_SINK_NOT_REQUIRED не задан в AdapterFlags член структуры NDK_ADAPTER_INFO. Флаг NDK_MR_FLAG_RDMA_READ_SINK позволяет таким поставщикам соответствующим образом поддерживать запросы на регистрацию.

Примечание Буферы можно зарегистрировать в нескольких целях. Поэтому флаг NDK_MR_FLAG_RDMA_READ_SINK может сопровождаться другими флагами.
 
Если потребитель NDK передает флаг NDK_MR_FLAG_RDMA_READ_SINK на адаптере, для которого установлен флаг NDK_ADAPTER_FLAG_RDMA_READ_SINK_NOT_REQUIRED в элементе AdapterFlags структуры NDK_ADAPTER_INFO, поставщику не требуется обрабатывать флаг NDK_MR_FLAG_RDMA_READ_SINK и не должен завершаться сбоем запроса из-за присутствия. этого флага.

Чтобы отменить регистрацию области памяти, используйте функцию NdkDeregisterMr (NDK_FN_DEREGISTER_MR).

Требования

Требование Ценность
минимальные поддерживаемые клиентские Не поддерживается, поддерживается в NDIS 6.30 и более поздних версиях.
минимальный поддерживаемый сервер Windows Server 2012
целевая платформа Виндоус
заголовка ndkpi.h (include Ndkpi.h)
IRQL <=DISPATCH_LEVEL

См. также

MmGetMdlVirtualAddress

требования к времени существования объекта NDKPI

NDK_ADAPTER_INFO

NDK_FN_DEREGISTER_MR

NDK_FN_REQUEST_COMPLETION

NDK_MR