Поделиться через


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

Функция NdkBind (NDK_FN_BIND) привязывает окно памяти к определенному подрегиону области памяти (MR).

Синтаксис

NDK_FN_BIND NdkFnBind;

NTSTATUS NdkFnBind(
  [in]           NDK_QP *pNdkQp,
  [in, optional] PVOID RequestContext,
  [in]           NDK_MR *pMr,
  [in]           NDK_MW *pMw,
  [in]           PVOID VirtualAddress,
  [in]           SIZE_T Length,
  [in]           ULONG Flags
)
{...}

Параметры

[in] pNdkQp

Указатель на объект пары очередей NDK (QP) (NDK_QP).

[in, optional] RequestContext

Значение контекста, возвращаемое в RequestContext член структуры NDK_RESULT для этого запроса.

[in] pMr

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

[in] pMw

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

[in] VirtualAddress

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

Используйте макрос MmGetMdlVirtualAddress для получения виртуального адреса MDL для MR.

[in] Length

Длина MR для привязки к МВТ.

[in] Flags

Побитовое ИЛИ флагов, указывающее разрешенные операции. Поддерживаются следующие флаги:

Ценность Значение
NDK_OP_FLAG_SILENT_SUCCESS
0x00000001
Указывает, что успешное завершение этого запроса не создает событие завершения в очереди исходящего завершения. Однако запросы, которые завершаются сбоем, создают завершение в очереди завершения.
NDK_OP_FLAG_READ_FENCE
0x00000002
Указывает, что все предыдущие запросы на чтение должны быть завершены, прежде чем оборудование начнет обработку этого запроса.
NDK_OP_FLAG_ALLOW_REMOTE_READ
0x00000008
Включите доступ на чтение к окну памяти для любого подключенного однорангового узла. Чтобы получить доступ к окну памяти, подключенные одноранговые узлы должны иметь допустимый маркер.
NDK_OP_FLAG_ALLOW_REMOTE_WRITE
0x00000030
Включите доступ на запись к окну памяти для любого подключенного однорангового узла. Чтобы получить доступ к окну памяти, подключенные одноранговые узлы должны иметь допустимый маркер.
NDK_OP_FLAG_DEFER
0x00000200
Указывает поставщику NDK, что он может отложить запрос на оборудование для обработки. Дополнительные сведения об этом флаге см. в схемы отложенной обработки NDKPI.

Примечание Этот флаг поддерживается только в NDKPI 1.2 (Windows Server 2012 R2) и более поздних версиях.

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

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

Возвращаемый код Описание
STATUS_SUCCESS
Запрос был успешно размещен. Запись завершения будет помещена в очередь в CQ после завершения рабочего запроса.
STATUS_CONNECTION_INVALID
Пара очередей (QP) не подключена.
STATUS_ACCESS_VIOLATION
Область памяти не разрешает тип доступа, запрошенный для окна памяти. Для флага NDK_OP_FLAG_ALLOW_WRITE требуется область памяти, зарегистрированная с помощью флага NDK_MR_FLAG_ALLOW_LOCAL_WRITE.
Другие коды состояния
Произошла ошибка.

Замечания

NdkBind привязывает окно памяти (МВТ) к определенной подрегиону области памяти (MR).

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

После возвращения этого вызова удаленный маркер будет доступен с помощью функции NdkGetRemotetokenFromMw (NDK_FN_GET_REMOTE_TOKEN_FROM_MW).

Эта функция не поддерживает виртуальный адрес на основе нуля.

Требования

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

См. также

MmGetMdlVirtualAddress

схеме отложенной обработки NDKPI

требования к публикации рабочего запроса NDKPI

NDK_FN_GET_REMOTE_TOKEN_FROM_MW

NDK_MR

NDK_MW

NDK_QP

NDK_RESULT