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


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

Функция обратного вызова события EvtSpbControllerIoWrite драйвера контроллера SPB записывает данные на указанное целевое устройство из буферов, которые предоставляются вместе с запросом на запись.

Синтаксис

EVT_SPB_CONTROLLER_WRITE EvtSpbControllerWrite;

void EvtSpbControllerWrite(
  [in] WDFDEVICE Controller,
  [in] SPBTARGET Target,
  [in] SPBREQUEST Request,
  [in] size_t Length
)
{...}

Параметры

[in] Controller

Дескриптор WDFDEVICE для объекта устройства платформы , представляющего контроллер SPB.

[in] Target

Дескриптор SPBTARGET для целевого объекта для этого запроса ввода-вывода. Целевой объект — это периферийное устройство или порт, подключенный к шине. Расширение платформы SPB (SpbCx) ранее назначило этот дескриптор целевому объекту в обратном вызове EvtSpbTargetConnect , открывшем подключение к целевому объекту.

[in] Request

Дескриптор SPBREQUEST для запроса ввода-вывода. Драйвер контроллера SPB должен выполнить этот запрос, выполнив запрошенную операцию или возвратив состояние ошибки. Дополнительные сведения см. в разделе Примечания.

[in] Length

Число байтов для записи на целевое устройство.

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

None

Remarks

SpbCx управляет очередью ввода-вывода для контроллера SPB. SpbCx вызывает функцию обратного вызова EvtSpbControllerIoWrite драйвера контроллера SPB, когда клиент (драйвер периферийного устройства) контроллера SPB отправляет запрос IRP_MJ_WRITE целевому устройству, подключенному к шине. Значение параметра Request — это дескриптор, который инкапсулирует этот запрос.

Обратный вызов EvtSpbControllerIoWrite не возвращает значение состояния. Вместо этого драйвер контроллера SPB указывает состояние операции записи в состоянии завершения запроса ввода-вывода.

Обратный вызов EvtSpbControllerIoWrite является асинхронным. То есть функция обратного вызова должна инициировать запрошенную операцию записи, а затем возвращать ее, не дожидаясь завершения операции. Позже драйвер контроллера SPB выполняет запрос на запись во время прерывания DPC или DPC таймера.

Обратный вызов EvtSpbControllerIoWrite не возвращает значение состояния. Вместо этого драйвер контроллера SPB указывает состояние операции записи в состоянии завершения запроса ввода-вывода.

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

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

Чтобы зарегистрировать функцию обратного вызова EvtSpbControllerIoWrite , вызовите метод SpbDeviceInitialize .

Примеры

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

Например, чтобы определить функцию обратного вызова EvtSpbControllerIoWrite с именем MyEvtSpbControllerIoWrite, используйте тип функции EVT_SPB_CONTROLLER_WRITE, как показано в следующем примере кода:

EVT_SPB_CONTROLLER_WRITE  MyEvtSpbControllerIoWrite;

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

_Use_decl_annotations_
VOID
  MyEvtSpbControllerIoWrite(
    WDFDEVICE Controller,
    SPBTARGET Target,
    SPBREQUEST Request,
    size_t Length
    )
{ ... }

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

Требования

Требование Значение
Минимальная версия клиента Поддерживается начиная с Windows 8.
Целевая платформа Персональный компьютер
Верхняя часть spbcx.h
IRQL Вызывается в IRQL <= DISPATCH_LEVEL.

См. также раздел