Функция WdfUsbTargetPipeResetSynchronously (wdfusb.h)
[Применимо к KMDF и UMDF]
Метод WdfUsbTargetPipeResetSynchronously создает запрос на сброс и отправляет его синхронно в указанный USB-канал.
Синтаксис
NTSTATUS WdfUsbTargetPipeResetSynchronously(
[in] WDFUSBPIPE Pipe,
[in, optional] WDFREQUEST Request,
[in, optional] PWDF_REQUEST_SEND_OPTIONS RequestOptions
);
Параметры
[in] Pipe
Дескриптор объекта конвейера платформы, полученный путем вызова метода WdfUsbInterfaceGetConfiguredPipe.
[in, optional] Request
Дескриптор объекта запроса платформы. Этот параметр является необязательным и может иметь значение NULL. Дополнительные сведения см. в разделе "Примечания".
[in, optional] RequestOptions
Указатель на структуру, выделенную вызывающим объектом, WDF_REQUEST_SEND_OPTIONS , которая задает параметры для запроса. Этот указатель является необязательным и может иметь значение NULL. Дополнительные сведения см. в разделе "Примечания".
Возвращаемое значение
WdfUsbTargetPipeResetSynchronously возвращает значение состояния завершения целевого объекта ввода-вывода USB, если операция выполнена успешно. В противном случае этот метод может возвращать одно из следующих значений:
Код возврата | Описание |
---|---|
|
Неправильный размер структуры WDF_REQUEST_SEND_OPTIONS , указанной параметром RequestOptions . |
|
Обнаружен недопустимый параметр. |
|
Недостаточно памяти. |
|
IRQL вызывающего объекта не был PASSIVE_LEVEL, или запрос ввода-вывода, указанный параметром Request , уже помещен в очередь в целевой объект ввода-вывода. |
|
Драйвер указал значение времени ожидания, и запрос не был выполнен в течение отведенного времени. |
|
Пакет запроса ввода-вывода (IRP), который представляет параметр Request , не предоставляет достаточно IO_STACK_LOCATION структур, позволяющих драйверу пересылать запрос. |
Этот метод также может возвращать другие значения NTSTATUS.
Ошибка проверка возникает, если драйвер предоставляет недопустимый дескриптор объекта.
Комментарии
Используйте метод WdfUsbTargetPipeResetSynchronously для синхронной отправки запроса на сброс USB. Для отправки таких запросов асинхронно используйте WdfUsbTargetPipeFormatRequestForReset, за которым следует WdfRequestSend.
Прежде чем платформа сбрасывает USB-канал целевого объекта ввода-вывода, она отменяет все запросы ввода-вывода, оставшиеся в очереди целевого объекта ввода-вывода. Драйвер не должен отправлять дополнительные запросы ввода-вывода в целевой объект ввода-вывода до тех пор, пока не будет возвращено значение WdfUsbTargetPipeResetSynchronously .
Драйвер должен вызвать WdfIoTargetStop , прежде чем вызывать WdfUsbTargetPipeResetSynchronously. После возврата WdfUsbTargetPipeResetSynchronously драйвер может вызвать WdfIoTargetStart.
Когда драйвер вызывает WdfUsbTargetPipeResetSynchronously, платформа отправляет запрос URB_FUNCTION_RESET_PIPE целевому объекту ввода-вывода. Дополнительные сведения о сбросе USB-канала см. в спецификации USB.
Метод WdfUsbTargetPipeResetSynchronously не возвращается до завершения запроса, если драйвер не предоставляет значение времени ожидания в структуре WDF_REQUEST_SEND_OPTIONS , на которую указывает параметр RequestOptions , или если не обнаружена ошибка.
Вы можете переслать запрос ввода-вывода, полученный драйвером в очереди ввода-вывода, или создать и отправить новый запрос.
Чтобы переслать запрос ввода-вывода, полученный драйвером в очереди ввода-вывода, укажите дескриптор полученного запроса для параметра Request метода WdfUsbTargetPipeResetSynchronously.
Чтобы создать и отправить новый запрос, укажите дескриптор запроса NULL для параметра Request или создайте новый объект запроса и укажите его дескриптор:
- Если вы предоставляете дескриптор запроса NULL , платформа использует внутренний объект запроса. Этот метод прост в использовании, но драйвер не может отменить запрос.
- При вызове WdfRequestCreate для создания одного или нескольких объектов запроса можно повторно использовать эти объекты запроса, вызвав WdfRequestReuse. Этот метод позволяет функции обратного вызова EvtDriverDeviceAdd драйвера предварительно выделить объекты запроса для устройства. Кроме того, другой поток драйвера может вызвать WdfRequestCancelSentRequest , чтобы при необходимости отменить запрос.
Сведения о получении сведений о состоянии после завершения запроса ввода-вывода см. в разделе Получение сведений о завершении.
Дополнительные сведения о методе WdfUsbTargetPipeResetSynchronously и целевых объектах ВВОДА-вывода USB см. в разделе Usb I/O Targets.
Примеры
В следующем примере кода отправляется запрос на сброс в канал USB-устройства.
NTSTATUS status;
status = WdfUsbTargetPipeResetSynchronously(
Pipe,
WDF_NO_HANDLE,
NULL
);
Требования
Требование | Значение |
---|---|
Целевая платформа | Универсальное |
Минимальная версия KMDF | 1,0 |
Минимальная версия UMDF | 2,0 |
Верхняя часть | wdfusb.h (включая Wdfusb.h) |
Библиотека | Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF) |
IRQL | PASSIVE_LEVEL |
Правила соответствия DDI | DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), RequestForUrbXrb(kmdf), UsbKmdfIrql(kmdf), UsbKmdfIrql2(kmdf), UsbKmdfIrqlExplicit(kmdf) |
См. также раздел
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по