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


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

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

Синтаксис

EVT_SERCX2_CUSTOM_RECEIVE_TRANSACTION_START EvtSercx2CustomReceiveTransactionStart;

void EvtSercx2CustomReceiveTransactionStart(
  [in] SERCX2CUSTOMRECEIVETRANSACTION CustomReceiveTransaction,
  [in] WDFREQUEST Request,
  [in] PMDL Mdl,
  [in] ULONG Offset,
  [in] ULONG Length
)
{...}

Параметры

[in] CustomReceiveTransaction

Дескриптор SERCX2CUSTOMRECEIVETRANSACTION для объекта пользовательской транзакции получения. Драйвер последовательного контроллера ранее вызвал метод SerCx2CustomReceiveTransactionCreate для создания этого объекта.

[in] Request

Дескриптор объекта запроса платформы, связанный с транзакцией пользовательского получения. Драйвер отвечает за выполнение этого запроса. Этот запрос может не быть запросом IRP_MJ_READ, отправленным клиентом, и поэтому драйвер последовательного контроллера не должен пытаться использовать этот запрос для доступа к буферу чтения. Этот запрос в основном используется для отмены, завершения и пересылки очередей (при необходимости). Чтобы получить доступ к буферу чтения для запроса на чтение клиента, используйте параметрыMdl, Offsetи Length.

[in] Mdl

Указатель на MDL, описывающий страницы памяти, охватываемые буфером чтения для пользовательской транзакции получения. Список точечной и сборной данных будет использовать область этой памяти, указанную параметрами Offset и Length.

[in] Offset

Начальная смещение для передачи данных. Этот параметр является смещением байтов с начала буферной области, описанной MDL. Если MDL задает общее количество байтов буферного пространства, возможные значения Offset находятся в диапазоне от 0 до N–1.

[in] Length

Размер передачи данных в байтах. Если MDL задает общее число байтов буферного пространства, возможные значения длины находятся в диапазоне 1 до N–смещения.

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

Никакой

Замечания

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

После вызова функции SerCx2 EvtSerCx2CustomReceiveTransaction Start драйвер последовательного контроллера инициирует транзакцию путем программирования пользовательского механизма передачи данных для перемещения данных из получения FIFO в оборудование последовательного контроллера в буфер в запросе чтения. Если запрос не может быть выполнен немедленно, прежде чем функция EvtSerCx2CustomReceiveTransaction Start возвращается, драйвер должен вызвать метод, например WdfRequestMarkCancelableEx, чтобы пометить запрос как отменяемый.

После Функция EvtSerCx2CustomReceiveTransactionStart запускает транзакцию, SerCx2 периодически вызывает функцию обратного вызова событий EvtSerCx2CustomReceiveTransactionQueryProgress функцию обратного вызова событий, выполняемую драйвером последовательного контроллера при выполнении этой транзакции. После завершения транзакции драйвер завершает ожидающий запрос на чтение, SerCx2 вызывает функцию обратного вызова события EvtSerCx2CustomReceiveTransactionCleanup, если драйвер реализует эту функцию.

Если драйвер последовательного контроллера реализует функцию обратного вызова событий EvtSerCx2CustomReceiveTransactionInitialize, SerCx2 вызывает эту функцию перед вызовом функции EvtSerCx2CustomReceiveTransactionStart. Непосредственно перед вызовом EvtSerCx2CustomReceiveTransactionStart, а после вызова EvtSerCx2CustomReceiveTransactionInitialize возвращается таймер, который определяет время ожидания запроса чтения. Дополнительные сведения см. в обсуждении общего времени ожидания в SERIAL_TIMEOUTS.

Если пользовательский механизм передачи данных является устройством DMA главного шины, функция EvtSerCx2CustomReceiveTransactionStart может вызывать метод, например WdfDmaTransactionInitializeUsingOffset, чтобы инициировать транзакцию DMA, которая использует буфер чтения, описанныйMdl, Offsetи Length.

Если объект запроса, определенный параметром запроса , содержит хранилище для закрытого контекста, это хранилище может быть неинициализировано при первом доступе к контексту драйвера последовательного контроллера. При первом доступе драйвер обычно должен заполнить контекст нулями, а затем, при необходимости, явно задать все поля в контексте, для которых требуются ненулевое начальное значение.

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

Примеры

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

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

EVT_SERCX2_CUSTOM_RECEIVE_TRANSACTION_START  MyCustomReceiveTransactionStart;

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

_Use_decl_annotations_
VOID
  MyCustomReceiveTransactionStart(
    SERCX2CUSTOMRECEIVETRANSACTION  CustomReceiveTransaction,
    WDFREQUEST  Request,
    PMDL  Mdl,
    ULONG  Offset,
    ULONG  Length
    )
  {...}

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

Требования

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

См. также

IRP_MJ_READ

MDL

SERCX2CUSTOMRECEIVETRANSACTION

SERIAL_TIMEOUTS

SerCx2CustomReceiveTransactionCreate

WdfDmaTransactionInitializeUsingOffset

WdfRequestMarkCancelableEx