функция обратного вызова 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
Битовая маска флагов, указывающих разрешения на доступ для зарегистрированной области памяти. Можно задать следующие флаги:
[in] RequestCompletion
Указатель на подпрограмму обратного вызова завершения запроса NdkRequestCompletion (NDK_FN_REQUEST_COMPLETION).
[in, optional] RequestContext
Значение контекста, передаваемое параметру Context функции обратного вызова, указанной в параметре RequestCompletion .
Возвращаемое значение
Функция NdkRegisterMr возвращает один из следующих кодов NTSTATUS.
Код возврата | Описание |
---|---|
|
Регистрация смешанной реальности успешно завершена. |
|
Операция находится в состоянии ожидания и будет завершена позже. Драйвер вызовет указанную функцию RequestCompletion (NDK_FN_REQUEST_COMPLETION) для завершения ожидающей операции. |
|
Часть цепочки MDL от начального виртуального адреса до длины в байтах не представляет практически непрерывную область памяти. |
|
Запрос завершился сбоем из-за нехватки ресурсов.
Важно Запрос может завершиться как встроенным, так и асинхронным с этим кодом состояния.
|
|
Произошла ошибка. |
Комментарии
В объекте 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 позволяет таким поставщикам соответствующим образом поддерживать запросы на регистрацию.
Чтобы отменить регистрацию области памяти, используйте функцию NdkDeregisterMr (NDK_FN_DEREGISTER_MR).
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Не поддерживается, поддерживается в NDIS 6.30 и более поздних версиях. |
Минимальная версия сервера | Windows Server 2012 |
Целевая платформа | Windows |
Header | ndkpi.h (включая Ndkpi.h) |
IRQL | <=DISPATCH_LEVEL |