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


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

Функция обратного вызова модуля поставщика ProviderAttachClient подключает модуль поставщика к клиентскому модулю.

Синтаксис

NPI_PROVIDER_ATTACH_CLIENT_FN NpiProviderAttachClientFn;

NTSTATUS NpiProviderAttachClientFn(
  [in]  HANDLE NmrBindingHandle,
  [in]  PVOID ProviderContext,
  [in]  PNPI_REGISTRATION_INSTANCE ClientRegistrationInstance,
  [in]  PVOID ClientBindingContext,
  [in]  const VOID *ClientDispatch,
  [out] PVOID *ProviderBindingContext,
  [out] const VOID **ProviderDispatch
)
{...}

Параметры

[in] NmrBindingHandle

Дескриптор, используемый NMR для представления привязки между клиентским модулем и модулем поставщика.

[in] ProviderContext

Указатель на контекст регистрации модуля поставщика. Модуль поставщика передает этот указатель на NMR при вызове функции nmR NmrRegisterProvider для регистрации в NMR.

[in] ClientRegistrationInstance

Указатель на объект структура NPI_REGISTRATION_INSTANCE. Эта структура содержит данные регистрации клиентского модуля.

[in] ClientBindingContext

Указатель на контекст клиентского модуля для привязки между клиентским модулем и модулем поставщика. Клиентский модуль использует этот контекст для отслеживания состояния привязки. Содержимое контекста привязки клиентского модуля непрозрачно к модулю поставщика. Модуль поставщика передает этот указатель на клиентский модуль всякий раз, когда вызывает любой из NPI клиентского модуля функции обратного вызова, требующие контекста привязки клиентского модуля.

[in] ClientDispatch

Указатель на константную структуру, содержащую таблицу отправки NPI функции обратного вызова для клиентского модуля. Содержимое структуры зависит от NPI. Если NPI не определяет структуру таблицы диспетчеризации клиента, этот указатель null.

[out] ProviderBindingContext

Указатель на переменную, в которую модуль поставщика будет хранить указатель на его контекст для привязки между клиентским модулем и модулем поставщика. Модуль поставщика использует этот контекст для отслеживания состояния привязки. Содержимое контекста привязки модуля поставщика непрозрачно к клиентскому модулю. Клиентский модуль передает этот указатель на модуль поставщика при вызове одного из NPI модуля поставщика функций, требующих контекста привязки модуля поставщика. Модуль поставщика должен убедиться, что этот контекст остается допустимым и резидентным в памяти до тех пор, пока клиентский модуль подключен к модулю поставщика.

[out] ProviderDispatch

Указатель на переменную, в которую модуль поставщика будет хранить указатель на константную структуру, содержащую таблицу отправки NPI функций для модуля поставщика. Модуль поставщика должен убедиться, что эта структура остается допустимой и резидентной в памяти, пока клиентский модуль подключен к модулю поставщика. Содержимое структуры зависит от NPI.

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

Функция обратного вызова модуля поставщика ProviderAttachClient возвращает один из следующих кодов NTSTATUS:

Возвращаемый код Описание
STATUS_SUCCESS
Модуль поставщика успешно подключен к клиентскому модулю.
STATUS_NOINTERFACE
Модуль поставщика не подключился к клиентскому модулю.
Другие коды состояния
Произошла ошибка.

Замечания

NMR вызывает функцию обратного вызова модуля поставщика ProviderAttachClient всякий раз, когда клиентский модуль вызывает функцию NmrClientAttachProvider с дескриптором, который представляет привязку между клиентским модулем и модулем поставщика.

Модуль поставщика может изучить данные регистрации клиентского модуля. Эти данные указываются на параметр ClientRegistrationInstance. Модуль поставщика использует эти данные для определения того, будет ли он присоединяться к клиентскому модулю:

  • Если модуль поставщика определяет, что он будет подключаться к клиентскому модулю, то функция обратного вызова ProviderAttachClient должна выполнять следующие действия:
    1. Сохраните указатели, переданные в параметры ClientBindingContext и ClientDispatch, чтобы модуль поставщика мог вызывать функции N PI клиентского модуля.
    2. Сохраните дескриптор, переданный в параметре NmrBindingHandle. Модуль поставщика передает этот дескриптор в качестве параметра в функция NmrProviderDetachClientComplete при отключении от клиентского модуля.
    3. Задайте параметр ProviderBindingContext, чтобы указать структуру контекста привязки модуля поставщика для привязки между клиентским модулем и модулем поставщика.
    4. Задайте параметру ProviderDispatch указывать на структуру, содержащую таблицу отправки модуля поставщика функций NPI.
    5. Возврат STATUS_SUCCESS.
  • Если модуль поставщика определяет, что он не будет подключаться к клиентскому модулю, функция обратного вызова ProviderAttachClient должна возвращать STATUS_NOINTERFACE.
Если модуль поставщика подключается к клиентскому модулю и динамически выделяет память для контекста привязки, он должен освободить выделенную память, когда NMR вызывает модуль поставщика. ProviderCleanupBindingContext функцию обратного вызова после отключения модуля клиента и модуля поставщика.

NMR вызывает функцию обратного вызова модуля поставщика ProviderAttachClient в IRQL = PASSIVE_LEVEL.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Доступно в Windows Vista и более поздних версиях операционных систем Windows.
целевая платформа Виндоус
заголовка netioddk.h (include Wsk.h)
IRQL PASSIVE_LEVEL

См. также

NPI_PROVIDER_CHARACTERISTICS

NPI_REGISTRATION_INSTANCE

NmrClientAttachProvider

NmrProviderDetachClientComplete

NmrRegisterProvider

ProviderCleanupBindingContext

ProviderDetachClient