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


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

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

Синтаксис

EVT_SERCX_WAITMASK EvtSercxWaitmask;

NTSTATUS EvtSercxWaitmask(
  [in] WDFDEVICE Device
)
{...}

Параметры

[in] Device

Дескриптор WDFDEVICE для объекта устройства платформы, представляющего последовательный контроллер.

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

Функция EvtSerCxWaitmask возвращает STATUS_SUCCESS, если вызов выполнен успешно. В противном случае возвращается соответствующий код состояния ошибки.

Комментарии

Драйвер последовательного контроллера реализует эту функцию обратного вызова. Расширение последовательной платформы (SerCx) вызывает эту функцию, чтобы уведомить драйвер о смене маски ожидания. Во время этого вызова функция EvtSerCxWaitmask вызывает метод SerCxGetWaitMask для получения новой маски ожидания. Драйвер немедленно начинает отслеживать события в новой маске ожидания и отменяет все старые маски ожидания, которые могли быть предоставлены в предыдущем вызове EvtSerCxWaitmask . Если новая маска ожидания равна нулю, драйвер просто отменяет старую маску ожидания и перестает отслеживать любые события маски ожидания.

Когда SerCx получает запрос IOCTL_SERIAL_SET_WAIT_MASK от клиента, обработчик запросов в SerCx вызывает функцию EvtSerCxWaitmask , чтобы задать новую маску ожидания. Дополнительные сведения о типах событий, которые могут быть заданы маской ожидания, см. в разделе SERIAL_EV_XXX.

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

Позже, когда событие в маске ожидания вызывает прерывание, ISR в драйвере последовательного контроллера планирует выполнение функции DPC. Эта функция DPC вызывает метод SerCxCompleteWait для уведомления SerCx о событии.

Первоначально после открытия клиентом подключения к последовательному порту и до первого вызова EvtSerCxWaitmask маска ожидания фактически равна нулю, а драйвер последовательного контроллера не отслеживает события SERIAL_EV_XXX .

Чтобы зарегистрировать функцию обратного вызова EvtSerCxWaitmask , драйвер контроллера вызывает метод SerCxInitialize во время обратного вызова EvtDriverDeviceAdd .

Примеры

Тип функции для этого обратного вызова объявлен в Sercx.h следующим образом.

typedef NTSTATUS
  EVT_SERCX_WAITMASK(
    __in WDFDEVICE Device
    );

Чтобы определить функцию обратного вызова EvtSerCxWaitmask с именем MyEvtSerCxWaitmask, необходимо сначала предоставить объявление функции, которое требуется для статического средства проверки драйверов (SDV) и других средств проверки, как показано ниже.

EVT_SERCX_WAITMASK MyEvtSerCxWaitmask;

Затем реализуйте функцию обратного вызова следующим образом.

NTSTATUS
  MyEvtSerCxWaitmask(
    __in WDFDEVICE Device
    )
{ ... }

Дополнительные сведения о требованиях SDV для объявлений функций см. в статье Объявление функций с помощью типов ролей функций для драйверов KMDF.

Требования

Требование Значение
Минимальная версия клиента Доступно начиная с Windows 8.
Целевая платформа Персональный компьютер
Верхняя часть sercx.h
IRQL Вызывается в IRQL <= DISPATCH_LEVEL

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

EvtDriverDeviceAdd

IOCTL_SERIAL_SET_WAIT_MASK

IOCTL_SERIAL_WAIT_ON_MASK

SERIAL_EV_XXX

SerCxGetWaitMask

SerCxInitialize