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


Функция WdfUsbTargetPipeResetSynchronously (wdfusb.h)

[Применимо к KMDF и UMDF]

Метод WdfUsbTargetPipeResetSynchronous создает запрос сброса и отправляет его синхронно в указанный 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 или запрос ввода-вывода, который был указан параметром request, уже был помещен в очередь в целевой объект ввода-вывода.
STATUS_IO_TIMEOUT
Драйвер предоставил значение времени ожидания и запрос не завершился в течение выделенного времени.
STATUS_REQUEST_NOT_ACCEPTED
Пакет запроса ввода-вывода (IRP), который представляет параметр запроса , не предоставляет достаточно IO_STACK_LOCATION структур, чтобы разрешить драйверу пересылать запрос.
 

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

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

Замечания

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

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

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

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

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

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

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

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

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

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

Дополнительные сведения о методе WdfUsbTargetPipeResetSynchronous и целевых объектов 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), запросForUrbXrb(kmdf), UsbKmdfIrql(kmdf), UsbKmdfIrql2(kmdf), UsbKmdfIrqlExplicit(kmdf)

См. также

WdfObjectDereference

WdfRequestCancelSentRequest

WdfRequestSend

WdfUsbTargetPipeAbortSynchronous