Функция 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. Дополнительные сведения см. в разделе "Примечания".

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

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

Код возврата Описание
STATUS_INFO_LENGTH_MISMATCH
Размер структуры WDF_REQUEST_SEND_OPTIONS , указанной параметром RequestOptions , был неправильным.
STATUS_INVALID_PARAMETER
Обнаружен недопустимый параметр.
STATUS_INSUFFICIENT_RESOURCES
Недостаточно памяти.
STATUS_INVALID_DEVICE_REQUEST
IRQL вызывающего объекта не был PASSIVE_LEVEL, или запрос ввода-вывода, указанный параметр запроса уже был помещен в очередь в целевой объект ввода-вывода.
STATUS_IO_TIMEOUT
Драйвер предоставил значение времени ожидания и запрос не завершился в течение выделенного времени.
STATUS_REQUEST_NOT_ACCEPTED
Пакет запроса ввода-вывода (IRP), который представляет параметр request , не предоставляет достаточно IO_STACK_LOCATION структур, чтобы разрешить драйверу перенаправить запрос.
 

Этот метод также может возвращать другие значения NTSTATUS.

Проверка ошибок возникает, если драйвер предоставляет недопустимый дескриптор объекта.

Примечания

Используйте метод WdfUsbTargetPipeResetSynchronously для синхронной отправки запроса сброса USB. Для асинхронной отправки таких запросов используйте WdfUsbTargetPipeFormatRequestForReset, а затем WdfRequestSend.

Прежде чем платформа сбрасывает USB-канал целевого ввода-вывода, он отменяет все запросы ввода-вывода, которые остаются в очереди целевого объекта ввода-вывода. Драйвер не должен отправлять дополнительные запросы ввода-вывода в целевой объект ввода-вывода, пока WdfUsbTargetPipeResetSynchronously не возвращается.

Драйвер должен вызвать WdfIoTargetStop перед вызовом WdfUsbTargetPipeResetSynchronously. После возврата WdfUsbTargetPipeResetSynchronous драйвер может вызвать WdfIoTargetStart.

Когда драйвер вызывает WdfUsbTargetPipeResetSynchronously, платформа отправляет запрос URB_FUNCTION_RESET_PIPE целевому объекту ввода-вывода. Дополнительные сведения о сбросе USB-канала см. в спецификации USB.

Метод WdfUsbTargetPipeResetSynchronously не возвращается до завершения запроса, если драйвер не предоставляет значение времени ожидания в структуре WDF_REQUEST_SEND_OPTIONS , на которую указывает параметр RequestOptions , или если ошибка не обнаружена.

Вы можете пересылать запрос ввода-вывода, полученный драйвером в очереди ввода-вывода, или создать и отправить новый запрос.

Чтобы переслать запрос ввода-вывода, полученный драйвером в очереди ввода-вывода, укажите дескриптор полученного запроса для параметра request метода WdfUsbTargetPipeResetSynchronously.

Чтобы создать и отправить новый запрос, укажите дескриптор запроса NULL для параметра request или создайте новый объект запроса и предоставьте его дескриптор:

  • Если вы предоставляете дескриптор запроса NULL , платформа использует внутренний объект запроса. Этот метод прост в использовании, но драйвер не может отменить запрос.
  • При вызове WdfRequestCreate для создания одного или нескольких объектов запроса можно повторно использовать эти объекты запроса, вызвав WdfRequestReuse. Этот метод позволяет функции обратного вызова EvtDriverDeviceAdd драйвера предварительно выделить объекты запроса для устройства. Кроме того, другой поток драйвера может вызвать WdfRequestCancelSentRequest , чтобы отменить запрос при необходимости.
Драйвер может указать параметр RequestOptions, отличный от NULL, независимо от того, предоставляет ли драйвер параметр запроса, отличный от NULL или null. Например, можно использовать параметр RequestOptions , чтобы указать значение времени ожидания.

Сведения о получении сведений о состоянии после завершения запроса ввода-вывода см. в разделе "Получение сведений о завершении".

Дополнительные сведения о методе WdfUsbTargetPipeResetSynchronously и целевых объектах ввода-вывода USB см. в разделе "Целевые объекты ввода-вывода USB".

Примеры

В следующем примере кода отправляется запрос на сброс в канал USB-устройства.

NTSTATUS  status;

status = WdfUsbTargetPipeResetSynchronously(
                                            Pipe, 
                                            WDF_NO_HANDLE,
                                            NULL
                                            );

Требования

   
Целевая платформа Универсальное
Минимальная версия KMDF 1,0
Минимальная версия UMDF 2,0
Заголовок wdfusb.h (include 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)

См. также

WdfObjectDereference

WdfRequestCancelSentRequest

WdfRequestSend

WdfUsbTargetPipeAbortSynchronously