функция обратного вызова 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
Указывает длину выходного буфера в байтах для управляющего запроса ввода-вывода, указанного параметром Request .
[in] InputBufferLength
Указывает длину входного буфера (в байтах) для управляющего запроса ввода-вывода, указанного параметром Request .
[in] IoControlCode
Указывает IOCTL из запроса управления вводом-выводом, заданного параметром Request .
Возвращаемое значение
Функция EvtSerCxControl возвращает STATUS_SUCCESS, если вызов выполнен успешно. В противном случае возвращается соответствующий код состояния ошибки. Дополнительные сведения см. в разделе "Примечания".
Комментарии
Драйвер последовательного контроллера необходим для реализации этой функции обратного вызова. SerCx вызывает эту функцию для передачи управляющего запроса ввода-вывода драйверу контроллера для обработки. Перед возвратом этой функции она должна завершить запрос, выполнив запрошенную операцию или возвратив состояние ошибки. Драйвер, который не реализует поддержку определенного запроса, должен возвращать состояние ошибки STATUS_NOT_IMPLEMENTED для этого запроса.
Как правило, функция EvtSerCxControl должна синхронизироваться с ISR драйвера контроллера, прежде чем эта функция изменит параметры в аппаратных регистрах последовательного контроллера.
Возвращаемое значение функции EvtSerCxControl должно соответствовать значению состояния, которое эта функция записывает в блок состояния запроса управления вводом-выводом. SerCx использует возвращаемое значение для отслеживания состояния драйвера контроллера и оборудования последовательного контроллера.
Ниже приведен список IOCTL, для обработки которыми должна быть подготовлена эта функция обратного вызова.
IOCTL_SERIAL_CLEAR_STATSIOCTL_SERIAL_CLR_DTRIOCTL_SERIAL_CLR_RTSIOCTL_SERIAL_GET_BAUD_RATEIOCTL_SERIAL_GET_CHARS IOCTL_SERIAL_GET_COMMSTATUSIOCTL_SERIAL_GET_DTRRTS IOCTL_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_ON IOCTL_SERIAL_SET_CHARSIOCTL_SERIAL_SET_DTR IOCTL_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 во время обратного вызова EvtDriverDeviceAdd.
Примеры
Тип функции для этого обратного вызова объявлен в Sercx.h, как показано ниже.
typedef NTSTATUS
EVT_SERCX_CONTROL(
__in WDFREQUEST Request,
__in size_t OutputBufferLength,
__in size_t InputBufferLength,
__in ULONG IoControlCode
);
Чтобы определить функцию обратного вызова EvtSerCxControl с именем MyEvtSerCxControl
, необходимо сначала предоставить объявление функции, которое требуется для статического средства проверки драйверов (SDV) и других средств проверки, как показано ниже.
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 |