функция обратного вызова 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.
Чтобы зарегистрировать функцию обратного вызова
Примеры
Тип функции для этого обратного вызова объявлен в Sercx.h, как показано ниже.
typedef NTSTATUS
EVT_SERCX_WAITMASK(
__in WDFDEVICE Device
);
Чтобы определить функцию обратного вызова
EVT_SERCX_WAITMASK MyEvtSerCxWaitmask;
Затем реализуйте функцию обратного вызова следующим образом.
NTSTATUS
MyEvtSerCxWaitmask(
__in WDFDEVICE Device
)
{ ... }
Дополнительные сведения о требованиях SDV для объявлений функций см. в объявлении функций с помощью типов ролей функций для драйверов KMDF.
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Доступно начиная с Windows 8. |
целевая платформа | Настольный |
заголовка | sercx.h |
IRQL | Вызывается в IRQL <= DISPATCH_LEVEL |