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


функция обратного вызова EVT_SERCX2_PIO_TRANSMIT_PURGE_FIFO (sercx.h)

Функция обратного вызова событий EvtSerCx2PioTransmitPurgeFifo вызывается версией 2 расширения последовательной платформы (SerCx2), чтобы отменить любые байты неотступных данных, которые остаются в передаче FIFO в последовательном контроллере.

Синтаксис

EVT_SERCX2_PIO_TRANSMIT_PURGE_FIFO EvtSercx2PioTransmitPurgeFifo;

void EvtSercx2PioTransmitPurgeFifo(
  [in] SERCX2PIOTRANSMIT PioTransmit,
  [in] ULONG BytesAlreadyTransmittedToHardware
)
{...}

Параметры

[in] PioTransmit

Дескриптор SERCX2PIOTRANSMIT объекту PIO-передачи. Драйвер последовательного контроллера, ранее называемый методом SerCx2PioTransmitCreate для создания этого объекта.

[in] BytesAlreadyTransmittedToHardware

Количество байтов, которые уже были загружены в передачу FIFO во время текущей транзакции передачи PIO-передачи. Этот параметр представляет собой сумму всех байтов, передаваемых в предыдущих вызовах EvtSerCx2PioTransmitWriteBuffer функцию обратного вызова событий, которая входит в эту транзакцию.

Возвращаемое значение

Никакой

Замечания

Драйвер последовательного контроллера может реализовать эту функцию в качестве параметра. При реализации драйвер регистрирует функцию в вызове SerCx2PioTransmitCreate, который создает объект PIO-передачи.

Драйвер должен реализовать функцию EvtSerCx2PioTransmitPurgeFifo, если последовательный контроллер имеет аппаратный механизм FIFO (или аналогичный механизм буферизации) для хранения передаваемых данных. Если драйвер реализует эту функцию, он также должен реализовать функции EvtSerCx2PioTransmitDrainFifo и EvtSerCx2PioTransmitCancelDrainFifo функции обратного вызова событий.

SerCx2 инициирует транзакцию передачи PIO в ответ на запрос записи (IRP_MJ_WRITE) от клиента. Если этот запрос истекает или отменяется до завершения, SerCx2 вызывает функцию EvtSerCx2PioTransmitPurgeFifo, чтобы очистить все неотступные данные, которые могут остаться передаваемым FIFO.

После очистки FIFO передачи функция EvtSerCx2PioTransmitPurgeFifo должна вызвать метод SerCx2PioTransmitPurgeFifoComplete, чтобы уведомить SerCx2 о том, что FIFO был удален, и SerCx2 затем завершает запрос на запись.

Дополнительные сведения см. в разделе SerCx2 PIO-Transmit Транзакций.

Примеры

Чтобы определить функцию обратного вызова EvtSerCx2PioTransmitPurgeFifo, необходимо сначала указать объявление функции, определяющее тип определяемой функции обратного вызова. Windows предоставляет набор типов функций обратного вызова для драйверов. Объявление функции с помощью типов функций обратного вызова помогает анализ кода для драйверов, статический проверяющий драйвер (SDV) и другие средства проверки подлинности, и это требование для написания драйверов для операционной системы Windows.

Например, чтобы определить функцию обратного вызова EvtSerCx2PioTransmitPurgeFifo, которая называется MyPioTransmitPurgeFifo, используйте тип функции EVT_SERCX2_PIO_TRANSMIT_PURGE_FIFO, как показано в этом примере кода:

EVT_SERCX2_PIO_TRANSMIT_PURGE_FIFO  MyPioTransmitPurgeFifo;

Затем реализуйте функцию обратного вызова следующим образом:

_Use_decl_annotations_
VOID
  MyPioTransmitPurgeFifo(
    SERCX2PIOTRANSMIT  PioTransmit,
    ULONG  BytesAlreadyTransmittedToHardware

    )
  {...}

Тип функции EVT_SERCX2_PIO_TRANSMIT_PURGE_FIFO определен в файле заголовка Sercx.h. Чтобы более точно определить ошибки при запуске средств анализа кода, обязательно добавьте в определение функции заметку Use_decl_annotations. Заметка Use_decl_annotations гарантирует, что используются заметки, применяемые к типу функции EVT_SERCX2_PIO_TRANSMIT_PURGE_FIFO в файле заголовка. Дополнительные сведения о требованиях к объявлениям функций см. в объявлении функций с помощью типов ролей функций для драйверов KMDF. Дополнительные сведения о Use_decl_annotationsсм. в поведению функции.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Доступно начиная с Windows 8.1.
целевая платформа Настольный
заголовка sercx.h
IRQL Вызывается в IRQL <= DISPATCH_LEVEL.

См. также

EvtSerCx2SystemDmaTransmitCancelDrainFifo

EvtSerCx2SystemDmaTransmitDrainFifo

IRP_MJ_WRITE

SERCX2PIOTRANSMIT

SerCx2PioTransmitCreate

SerCx2PioTransmitPurgeFifoComplete