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

[Относится к KMDF и UMDF]

Метод WdfUsbTargetPipeFormatRequestForReset создает запрос на сброс для указанного USB-канала, но не отправляет запрос.

Синтаксис

NTSTATUS WdfUsbTargetPipeFormatRequestForReset(
  [in] WDFUSBPIPE Pipe,
  [in] WDFREQUEST Request
);

Параметры

[in] Pipe

Дескриптор объекта канала платформы, полученный путем вызова WdfUsbInterfaceGetConfiguredPipe.

[in] Request

Дескриптор объекта запроса платформы. Дополнительные сведения см. в разделе "Примечания".

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

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

Код возврата Описание
STATUS_INVALID_PARAMETER
Обнаружен недопустимый параметр.
STATUS_INSUFFICIENT_RESOURCES
Недостаточно памяти.
STATUS_REQUEST_NOT_ACCEPTED
Пакет запроса ввода-вывода (IRP), который представляет параметр Request , не предоставляет достаточно IO_STACK_LOCATION структур, позволяющих драйверу пересылать запрос.
 

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

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

Комментарии

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

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

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

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

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

Чтобы создать новый запрос ввода-вывода, вызовите WdfRequestCreate , чтобы предварительно выделить объект запроса. Укажите дескриптор запроса для параметра Request метода WdfUsbTargetPipeFormatRequestForReset. Вы можете повторно использовать объект запроса, вызвав WdfRequestReuse. Функция обратного вызова EvtDriverDeviceAdd вашего драйвера может предварительно выделить объекты запросов для устройства.

После вызова WdfUsbTargetPipeFormatRequestForReset для форматирования запроса ввода-вывода драйвер должен вызвать WdfRequestSend для отправки запроса (синхронно или асинхронно) целевому объекту ввода-вывода.

Несколько вызовов WdfUsbTargetPipeFormatRequestForReset , использующих один и тот же запрос, не приводят к выделению дополнительных ресурсов. Таким образом, чтобы снизить вероятность того, что WdfRequestCreate вернет STATUS_INSUFFICIENT_RESOURCES, функция обратного вызова EvtDriverDeviceAdd драйвера может вызвать WdfRequestCreate для предварительного выделения одного или нескольких объектов запроса для устройства. Впоследствии драйвер может повторно использовать (вызвать WdfRequestReuse), переформатировать (вызвать WdfUsbTargetPipeFormatRequestForReset) и повторно отправить (вызвать WdfRequestSend) каждый объект запроса без риска STATUS_INSUFFICIENT_RESOURCES возвращаемого значения при последующем вызове WdfRequestCreate. Все последующие вызовы WdfUsbTargetPipeFormatRequestForReset для повторно использованного объекта запроса будут возвращать STATUS_SUCCESS, если значения параметров не изменяются. (Если драйвер не вызывает один и тот же метод форматирования запросов каждый раз, могут быть выделены дополнительные ресурсы.)

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

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

Примеры

Следующий пример кода форматирует запрос на сброс для USB-канала, регистрирует функцию обратного вызова CompletionRoutine и отправляет запрос.

status = WdfUsbTargetPipeFormatRequestForReset(
                                               pipe,
                                               Request
                                               );
if (!NT_SUCCESS(status)) {
    goto Exit;
}

WdfRequestSetCompletionRoutine(
                               Request,
                               AbortCompletionRoutine,
                               pipe
                               );

if (WdfRequestSend(
                   Request,
                   WdfUsbTargetPipeGetIoTarget(pipe),
                   WDF_NO_SEND_OPTIONS
                   ) == FALSE) {
    status = WdfRequestGetStatus(Request);
    goto Exit;
}
Exit:
if (!NT_SUCCESS(status)) {
    WdfRequestCompleteWithInformation(
                                      Request,
                                      status,
                                      0
                                      );
}
return;

Требования

Требование Значение
Целевая платформа Универсальное
Минимальная версия KMDF 1,0
Минимальная версия UMDF 2,0
Верхняя часть wdfusb.h (включая Wdfusb.h)
Библиотека Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL <=DISPATCH_LEVEL
Правила соответствия DDI DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), RequestFormattedValid(kmdf), RequestForUrbXrb(kmdf), RequestSendAndForgetNoFormatting(kmdf), RequestSendAndForgetNoFormatting2(kmdf), UsbKmdfIrql(kmdf), UsbKmdfIrql2(kmdf), UsbKmdfIrqlExplicit(kmdf)

См. также раздел

WdfRequestSend

WdfUsbInterfaceGetConfiguredPipe