Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Функция 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
Значение контекста, передаваемое параметру контекста функции обратного вызова, указанной в параметре RequestCompletion.
Возвращаемое значение
Функция NdkRegisterM r возвращает один из следующих кодов NTSTATUS.
| Возвращаемый код | Описание |
|---|---|
|
Регистрация MR успешно завершена. |
|
Операция ожидается и будет завершена позже. Драйвер вызовет указанную функцию RequestCompletion (NDK_FN_REQUEST_COMPLETION) для завершения ожидающей операции. |
|
Часть цепочки MDL от начального виртуального адреса до длины в байтах не представляет практически смежный регион памяти. |
|
Сбой запроса из-за нехватки ресурсов.
Важные запрос может завершиться сбоем, а также асинхронно с этим кодом состояния.
|
|
Произошла ошибка. |
Замечания
В объекте 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 позволяет таким поставщикам соответствующим образом поддерживать запросы на регистрацию.
Чтобы отменить регистрацию области памяти, используйте функцию NdkDeregisterMr (NDK_FN_DEREGISTER_MR).
Требования
| Требование | Ценность |
|---|---|
| минимальные поддерживаемые клиентские | Не поддерживается, поддерживается в NDIS 6.30 и более поздних версиях. |
| минимальный поддерживаемый сервер | Windows Server 2012 |
| целевая платформа | Виндоус |
| заголовка | ndkpi.h (include Ndkpi.h) |
| IRQL | <=DISPATCH_LEVEL |