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


функция обратного вызова 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 о событии.

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

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

Примеры

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

typedef NTSTATUS
  EVT_SERCX_WAITMASK(
    __in WDFDEVICE Device
    );

Чтобы определить функцию обратного вызова EvtSerCxWaitmask с именем , необходимо сначала указать объявление функции, которое статических драйверов (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