функция обратного вызова 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 при вызове функции 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
Модуль поставщика не подключился к клиентскому модулю.
Другие коды состояния
Произошла ошибка.

Remarks

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

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

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

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

Требования

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

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

NPI_PROVIDER_CHARACTERISTICS

NPI_REGISTRATION_INSTANCE

NmrClientAttachProvider

NmrProviderDetachClientComplete

NmrRegisterProvider

ProviderCleanupBindingContext

ProviderDetachClient