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


Метод IWDFUsbTargetPipe::SetPipePolicy (wudfusb.h)

[Предупреждение: UMDF 2 является последней версией UMDF и заменяет UMDF 1. Все новые драйверы UMDF должны быть написаны с помощью UMDF 2. Новые функции не добавляются в UMDF 1, а поддержка UMDF 1 в более новых версиях Windows 10 ограничена. Универсальные драйверы Windows должны использовать UMDF 2. Дополнительные сведения см. в разделе начало работы с помощью UMDF.]

Метод SetPipePolicy задает политику канала WinUsb.

Синтаксис

HRESULT SetPipePolicy(
  [in] ULONG PolicyType,
  [in] ULONG ValueLength,
  [in] PVOID Value
);

Параметры

[in] PolicyType

Тип политики канала WinUsb, которую задает драйвер UMDF.

[in] ValueLength

Размер (в байтах) буфера, который SetPipePolicy предоставляет для параметра Value.

[in] Value

Указатель на буфер, содержащий политику канала WinUsb.

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

SetPipePolicy возвращает одно из следующих значений:

Код возврата Описание
S_OK

SetPipePolicy успешно задал политику канала WinUsb.

E_OUTOFMEMORY

В SetPipePolicy обнаружен сбой выделения ресурсов.

Код ошибки, определенный в Winerror.h
Это значение соответствует коду ошибки, возвращенной API WinUsb.

Комментарии

Политика канала управляет поведением USB-канала (например, истечением времени ожидания, обработкой коротких пакетов и т. д.).

Дополнительные сведения о допустимых типах политик и значениях, которые драйвер UMDF может передать для параметров PolicyType и Value , см. в функции WinUsb_SetPipePolicy .

Сведения о поведении политик канала см. в разделе Функции WinUSB для изменения политики канала.

Метод SetPipePolicy создает запрос UMDF и синхронно отправляет его в целевой объект ввода-вывода.

Примеры

В следующем примере кода задается политика для входных и выходных каналов.

HRESULT
CMyDevice::ConfigureUsbIoTargets(
    )
{
    HRESULT                 hr;
    USB_INTERFACE_DESCRIPTOR pInterface;
    WINUSB_PIPE_INFORMATION pipe;
    BOOL                    policy;
    DWORD                   err;
    BOOL                    result;
    LONG                    i;
    LONG                    timeout;
    ULONG                   length;

    length = sizeof(UCHAR);
    hr = m_pIUsbTargetDevice->RetrieveDeviceInformation(DEVICE_SPEED, 
                                                        &length,
                                                        &m_Speed);
    if (FAILED(hr)) {
        // Print out error.
    }
    if (SUCCEEDED(hr)) {
        // Print out device speed.
    }
    //
    // Set timeout policies for input and output pipes.
    //
    if (SUCCEEDED(hr))  {
       timeout = ENDPOINT_TIMEOUT;
       hr = m_pIUsbInputPipe->SetPipePolicy(PIPE_TRANSFER_TIMEOUT,
                                            sizeof(timeout),
                                            &timeout);
       if (FAILED(hr)) {
            // Print out cannot set timeout policy for input pipe.
       }
    }
    if (SUCCEEDED(hr))  {
       timeout = ENDPOINT_TIMEOUT;
       hr = m_pIUsbOutputPipe->SetPipePolicy(PIPE_TRANSFER_TIMEOUT,
                                             sizeof(timeout),
                                             &timeout);
       if (FAILED(hr))  {
            // Print out cannot set timeout policy for output pipe.
       }
    }
 return hr;
}

Требования

Требование Значение
Дата окончания поддержки Недоступно в UMDF 2.0 и более поздних версиях.
Целевая платформа Персональный компьютер
Минимальная версия UMDF 1.5
Верхняя часть wudfusb.h (включая Wudfusb.h)
DLL WUDFx.dll

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

IWDFUsbTargetPipe

IWDFUsbTargetPipe::RetrievePipePolicy

WinUsb_SetPipePolicy