функция обратного вызова 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

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

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

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

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

Комментарии

В объекте NDK_MR , созданном с параметром 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
Целевая платформа Windows
Header ndkpi.h (включая Ndkpi.h)
IRQL <=DISPATCH_LEVEL

См. также раздел

MmGetMdlVirtualAddress

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

NDK_ADAPTER_INFO

NDK_FN_DEREGISTER_MR

NDK_FN_REQUEST_COMPLETION

NDK_MR