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

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

Синтаксис

EVT_SPB_CONTROLLER_READ EvtSpbControllerRead;

void EvtSpbControllerRead(
  [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 вызывает функцию обратного вызова драйвера контроллера SPB EvtSpbControllerIoRead , когда клиент (периферийный драйвер) контроллера SPB отправляет запрос IRP_MJ_READ целевому устройству, подключенному к шине. Значение параметра Request — это дескриптор, инкапсулирующий этот запрос.

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

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

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

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

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

Примеры

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

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

EVT_SPB_CONTROLLER_READ  MyEvtSpbControllerIoRead;

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

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

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

Требования

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

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