Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
[Применимо к 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-ввода-вывода, если операция выполнена успешно. В противном случае этот метод может вернуть одно из следующих значений:
| Возвращаемый код | Описание |
|---|---|
|
Размер структуры WDF_REQUEST_SEND_OPTIONS , указанной параметром RequestOptions , был неверным. |
|
Обнаружен недопустимый параметр. |
|
Недостаточно памяти было доступно. |
|
IRQL вызывающего объекта не был PASSIVE_LEVEL или запрос ввода-вывода, который указанный параметр запроса уже был поставлен в очередь в целевой объект ввода-вывода. |
|
Драйвер предоставил значение времени ожидания и запрос не завершился в течение выделенного времени. |
|
Пакет запроса ввода-вывода (IRP), который представляет параметр запроса , не предоставляет достаточно IO_STACK_LOCATION структур, чтобы разрешить драйверу перенаправить запрос. |
Этот метод также может возвращать другие значения NTSTATUS.
Ошибка возникает, если драйвер предоставляет недопустимый дескриптор объекта.
Замечания
Используйте метод WdfUsbTargetPipeResetSynchronously для синхронной отправки запроса сброса USB. Для отправки таких запросов асинхронно используйте WdfUsbTargetPipeFormatRequestForReset, а затем WdfRequestSend.
Перед сбросом USB-канала целевого объекта ввода-вывода платформа отменяет все запросы ввода-вывода, оставшиеся в очереди целевого объекта ввода-вывода. Драйвер не должен отправлять дополнительные запросы ввода-вывода в целевой объект ввода-вывода, пока WdfUsbTargetPipeResetSynchronous не возвращается.
Драйвер должен вызывать WdfIoTargetStop перед вызовом WdfUsbTargetPipeResetSynchronous. После возврата WdfUsbTargetPipeResetSynchronous драйвер может вызвать WdfIoTargetStart.
Когда драйвер вызывает WdfUsbTargetPipeResetSynchronous, платформа отправляет URB_FUNCTION_RESET_PIPE запрос на целевой объект ввода-вывода. Дополнительные сведения о сбросе USB-канала см. в спецификации USB.
Метод WdfUsbTargetPipeResetSynchronously не возвращается до завершения запроса, если драйвер не предоставляет значение времени ожидания в структуре WDF_REQUEST_SEND_OPTIONS , на которую указывает параметр RequestOptions , или если ошибка не обнаружена.
Вы можете пересылать запрос ввода-вывода, полученный драйвером в очереди ввода-вывода, или создать и отправить новый запрос.
Чтобы перенаправить запрос ввода-вывода, полученный драйвером в очереди ввода-вывода, укажите дескриптор полученного запроса для параметра request метода WdfUsbTargetPipeResetSynchronously.
Чтобы создать и отправить новый запрос, укажите дескриптор запроса NULL для параметра Request или создайте новый объект запроса и предоставьте его дескриптор:
- Если вы предоставляете дескриптор запроса NULL , платформа использует внутренний объект запроса. Этот метод прост в использовании, но драйвер не может отменить запрос.
- При вызове WdfRequestCreate для создания одного или нескольких объектов запроса можно повторно использовать эти объекты запроса, вызвав WdfRequestReuse. Этот метод позволяет функции обратного вызова EvtDriverDeviceAdd драйвера предварительно выделить объекты запроса для устройства. Кроме того, при необходимости другой поток драйвера может вызвать WdfRequestCancelSentRequest , чтобы отменить запрос.
Сведения о получении сведений о состоянии после завершения запроса ввода-вывода см. в разделе "Получение сведений о завершении".
Дополнительные сведения о методе WdfUsbTargetPipeResetSynchronously и целевых объектах ввода-вывода USB см. в разделе "Целевые объекты ввода-вывода USB".
Примеры
В следующем примере кода отправляется запрос сброса на канал USB-устройства.
NTSTATUS status;
status = WdfUsbTargetPipeResetSynchronously(
Pipe,
WDF_NO_HANDLE,
NULL
);
Требования
| Требование | Ценность |
|---|---|
| целевая платформа | Всеобщий |
| минимальная версия KMDF | 1.0 |
| минимальная версия UMDF | 2.0 |
| Header | wdfusb.h (include Wdfusb.h) |
| Library | 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) |