Регистрация для получения уведомлений
Прослушивающие клиенты вызывают метод RegisterForPrintAsyncNotifications для регистрации для получения уведомлений. Прослушивающий клиент может быть приложением или запускаться внутри очереди очереди. Winspool.drv предоставляет эту функцию независимо от того, где она загружена.
Spoolss.lib предоставляет эту функцию, чтобы мониторы портов могли регистрировать уведомления. Компоненты, которые выполняются внутри очереди очереди и связываются с Spoolss.lib, могут вызывать RegisterForPrintAsyncNotifications. В следующей процедуре подробно описаны сведения, которые необходимо передать при вызове этой функции. Первый шаг процедуры применяется к первому параметру, второй шаг применяется ко второму параметру и т. д.
HRESULT
RegisterForPrintAsyncNotifications(
IN LPCWSTR,
IN PrintAsyncNotificationType*,
IN PrintAsyncNotifyUserFilter,
IN PrintAsyncNotifyConversationStyle,
IN IPrintAsyncNotifyCallback*,
OUT HANDLE*
);
Чтобы зарегистрироваться для получения уведомлений, укажите следующее:
Имя локального или удаленного принтера или сервера.
Тип уведомления, интересующего прослушивателя.
Фильтр пользователя, который указывает пользователя, от которого клиент заинтересован в получении уведомлений, либо того же пользователя, что и отправитель уведомления, либо всех пользователей.
Фильтр стиля беседы. Клиент может указать однонаправленное или двунаправленное взаимодействие.
Интерфейс IPrintAsyncNotifyCallback , который вызывается при возврате уведомления из другого конца канала. Этот параметр не может иметь значение NULL.
Когда эта функция возвращается, шестой параметр (типа HANDLE*) указывает на дескриптор регистрации. Дескриптор регистрации — это непрозрачная структура, которую получает клиент. Регистрация связана с удостоверением пользователя потока, выполняющего вызов регистрации. В дополнение к фильтру сеанса сеанса клиента диспетчер очереди выполняет фильтрацию клиентов на основе фильтра сеанса канала и сеанса регистрации клиента.
Чтобы уведомить диспетчер очереди очереди о том, что прослушивающий клиент больше не должен получать уведомления, клиент должен использовать этот дескриптор при вызове UnRegisterForPrintAsyncNotifications. Для однонаправленного обмена данными все ожидающие уведомления на стороне сервера отклоняются. При двунаправленном обмене данными, если существуют открытые двунаправленные каналы, обмен данными продолжается до тех пор, пока они не будут закрыты.
HRESULT
UnRegisterForPrintAsyncNotifications(
IN HANDLE
);