функция обратного вызова EVT_SERCX_CONTROL (sercx.h)
Функция обратного вызова событий EvtSerCxControl обрабатывает запрос управления ввода-вывода, имеющий код управления ввода-вывода (IOCTL), поддерживаемый расширением последовательной платформы (SerCx).
Синтаксис
EVT_SERCX_CONTROL EvtSercxControl;
NTSTATUS EvtSercxControl(
[in] WDFDEVICE Device,
[in] WDFREQUEST Request,
[in] size_t OutputBufferLength,
[in] size_t InputBufferLength,
[in] ULONG IoControlCode
)
{...}
Параметры
[in] Device
Дескриптор WDFDEVICE для объекта устройства платформы, представляющего последовательный контроллер.
[in] Request
Дескриптор WDFREQUEST для объекта запроса платформы, представляющего запрос элемента управления ввода-вывода.
[in] OutputBufferLength
Задает длину в байтах выходного буфера для запроса элемента управления ввода-вывода, указанного параметром запроса
[in] InputBufferLength
Указывает длину в байтах входного буфера для запроса элемента управления ввода-вывода, указанного параметром запроса
[in] IoControlCode
Указывает IOCTL из запроса элемента управления ввода-вывода, указанного параметром запроса
Возвращаемое значение
Функция EvtSerCxControl возвращает STATUS_SUCCESS, если вызов выполнен успешно. В противном случае возвращается соответствующий код состояния ошибки. Дополнительные сведения см. в следующем разделе "Примечания".
Замечания
Драйвер последовательного контроллера необходим для реализации этой функции обратного вызова. SerCx вызывает эту функцию, чтобы передать запрос элемента управления ввода-вывода драйверу контроллера для обработки. Перед возвратом этой функции он должен завершить запрос, выполнив запрошенную операцию или возвратив состояние ошибки. Драйвер, который не реализует поддержку конкретного запроса, должен вернуть состояние ошибки STATUS_NOT_IMPLEMENTED для этого запроса.
Как правило, функция EvtSerCxControl должна синхронизироваться с ISR драйвера контроллера, прежде чем эта функция изменяет параметры в аппаратных регистрах последовательного контроллера.
Возвращаемое значение функции EvtSerCxControl должно соответствовать значению состояния, которое эта функция записывает в блок состояния запроса элемента управления ввода-вывода. SerCx использует возвращаемое значение для отслеживания состояния драйвера контроллера и оборудования последовательного контроллера.
Ниже приведен список списков операций ввода-вывода, которые эта функция обратного вызова должна быть подготовлена для обработки:
IOCTL_SERIAL_CLEAR_STATSIOCTL_SERIAL_CLR_DTRIOCTL_SERIAL_CLR_RTSIOCTL_SERIAL_GET_BAUD_RATEIOCTL_SERIAL_GET_CHARSIOCTL_SERIAL_GET_COMMSTATUSIOCTL_SERIAL_GET_DTRRTSIOCTL_SERIAL_GET_HANDFLOWIOCTL_SERIAL_IMMEDIATE_CHARIOCTL_SERIAL_GET_LINE_CONTROLIOCTL_SERIAL_GET_MODEM_CONTROLIOCTL_SERIAL_GET_MODEMSTATUSIOCTL_SERIAL_GET_PROPERTIESIOCTL_SERIAL_GET_STATSIOCTL_SERIAL_LSRMST_INSERTIOCTL_SERIAL_SET_BAUD_RATEIOCTL_SERIAL_SET_BREAK_OFFIOCTL_SERIAL_SET_BREAK_ONIOCTL_SERIAL_SET_CHARSIOCTL_SERIAL_SET_DTRIOCTL_SERIAL_SET_FIFO_CONTROLIOCTL_SERIAL_SET_HANDFLOWIOCTL_SERIAL_SET_LINE_CONTROLIOCTL_SERIAL_SET_ MODEM_CONTROLIOCTL_SERIAL_SET_RTSIOCTL_SERIAL_SET_XOFFIOCTL_SERIAL_SET_XONIOCTL_SERIAL_XOFF_COUNTER Чтобы зарегистрировать функцию обратного вызова EvtSerCxControl, драйвер контроллера вызывает метод SerCxInitialize во время обратного вызова EvtDriverDeviceAd d.
Примеры
Тип функции для этого обратного вызова объявлен в Sercx.h, как показано ниже.
typedef NTSTATUS
EVT_SERCX_CONTROL(
__in WDFREQUEST Request,
__in size_t OutputBufferLength,
__in size_t InputBufferLength,
__in ULONG IoControlCode
);
Чтобы определить функцию обратного вызова
EVT_SERCX_CONTROL MyEvtSerCxControl;
Затем реализуйте функцию обратного вызова следующим образом.
NTSTATUS
MyEvtSerCxControl(
__in WDFREQUEST Request,
__in size_t OutputBufferLength,
__in size_t InputBufferLength,
__in ULONG IoControlCode
)
{ ... }
Дополнительные сведения о требованиях SDV для объявлений функций см. в объявлении функций с помощью типов ролей функций для драйверов KMDF.
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Доступно начиная с Windows 8. |
целевая платформа | Настольный |
заголовка | sercx.h |
IRQL | Вызывается в IRQL <= DISPATCH_LEVEL |