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