функция обратного вызова EVT_SPB_TARGET_DISCONNECT (spbcx.h)
Функция обратного вызова события EvtSpbTargetDisconnect драйвера контроллера SPB закрывает подключение к целевому устройству, которое ранее было открыто вызовом функции обратного вызова события EvtSpbTargetConnect драйвера.
Синтаксис
EVT_SPB_TARGET_DISCONNECT EvtSpbTargetDisconnect;
void EvtSpbTargetDisconnect(
[in] WDFDEVICE Controller,
[in] SPBTARGET Target
)
{...}
Параметры
[in] Controller
Дескриптор WDFDEVICE для объекта устройства платформы , представляющего контроллер SPB.
[in] Target
Дескриптор SPBTARGET для закрытия целевого объекта. Целевой объект — это периферийное устройство или порт, подключенный к шине. Расширение платформы SPB (SpbCx) ранее назначило этот дескриптор целевому объекту в обратном вызове EvtSpbTargetConnect , открывшему подключение к целевому объекту.
Возвращаемое значение
None
Remarks
Реализация этой функции драйвером контроллера SPB является необязательной.
SpbCx управляет очередью ввода-вывода для контроллера SPB. Если драйвер контроллера SPB регистрирует функцию обратного вызова EvtSpbTargetDisconnect , SpbCx вызывает эту функцию, когда клиент (драйвер периферийных устройств) драйвера контроллера отправляет IRP_MJ_CLOSE запрос на закрытие дескриптора SPBTARGET. Этот дескриптор представляет подключение к целевому устройству в шине, открытой клиентом в предыдущем запросе IRP_MJ_CREATE . Если функция EvtSpbTargetDisconnect возвращает код ошибки, SpbCx не выполняет запрос IRP_MJ_CLOSE .
Функция EvtSpbTargetDisconnect вызывается синхронно из контекста закрывающего потока клиента после завершения всех операций ввода-вывода, инициированных клиентом, и после того, как клиент разблокировал контроллер (если клиент ранее блокировал контроллер).
Если драйвер контроллера SPB выделил запросы ввода-вывода и отправил их следующему драйверу в цепочке запросов ввода-вывода для целевого устройства, функция EvtSpbTargetDisconnect должна отменить эти запросы перед возвратом.
Подпрограммы обратного вызова DispatchCleanup и CreateProcessNotifyEx клиентского драйвера можно вызвать в любое время после возврата обратного вызова EvtSpbTargetDisconnect . Когда процесс драйвера клиента завершается, его подпрограмма CreateProcessNotifyEx вызывается непосредственно перед уничтожением последнего потока для выхода из процесса.
Чтобы зарегистрировать функцию обратного вызова EvtSpbTargetDisconnect , вызовите метод SpbDeviceInitialize .
Примеры
Чтобы определить функцию обратного вызова EvtSpbTargetDisconnect , необходимо сначала предоставить объявление функции, определяющее тип определяемой функции обратного вызова. Windows предоставляет набор типов функций обратного вызова для драйверов. Объявление функции с помощью типов функций обратного вызова помогает анализу кода для драйверов, средству проверки статических драйверов (SDV) и другим средствам проверки находить ошибки, и это требование для написания драйверов для операционной системы Windows.
Например, чтобы определить функцию обратного вызова EvtSpbTargetDisconnect с именем MyEvtSpbTargetDisconnect
, используйте тип функции EVT_SPB_TARGET_DISCONNECT, как показано в следующем примере кода:
EVT_SPB_TARGET_DISCONNECT MyEvtSpbTargetDisconnect;
Затем реализуйте функцию обратного вызова следующим образом:
_Use_decl_annotations_
VOID
MyEvtSpbTargetDisconnect(
WDFDEVICE Controller,
SPBTARGET Target
)
{ ... }
Тип функции EVT_SPB_TARGET_DISCONNECT определен в файле заголовка Spbcx.h. Чтобы более точно определить ошибки при запуске средств анализа кода, не забудьте добавить заметку Use_decl_annotations в определение функции. Заметка Use_decl_annotations гарантирует использование заметок, которые применяются к типу функции EVT_SPB_TARGET_DISCONNECT в файле заголовка. Дополнительные сведения о требованиях к объявлениям функций см. в статье Объявление функций с помощью типов ролей функций для драйверов KMDF. Дополнительные сведения о Use_decl_annotations см. в статье О поведении функции.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Поддерживается начиная с Windows 8. |
Целевая платформа | Персональный компьютер |
Верхняя часть | spbcx.h |
IRQL | Вызывается на PASSIVE_LEVEL. |