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


функция WinUsb_Initialize (winusb.h)

Функция WinUsb_Initialize создает дескриптор WinUSB для устройства, указанного дескриптором файла.

Синтаксис

BOOL WinUsb_Initialize(
  [in]  HANDLE                   DeviceHandle,
  [out] PWINUSB_INTERFACE_HANDLE InterfaceHandle
);

Параметры

[in] DeviceHandle

Дескриптор устройства, возвращенного CreateFile . WinUSB использует перекрывающиеся функции ввода-вывода, поэтому FILE_FLAG_OVERLAPPED необходимо указать в параметре dwFlagsAndAttributes вызова CreateFile , чтобы DeviceHandle имели характеристики, необходимые для правильной работы WinUsb_Initialize .

[out] InterfaceHandle

Получает непрозрачный дескриптор для первого (по умолчанию) интерфейса на устройстве. Этот дескриптор требуется другим подпрограммам WinUSB, которые выполняют операции с интерфейсом по умолчанию. Чтобы освободить дескриптор, вызовите функцию WinUSB_Free .

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

WinUsb_Initialize возвращает значение TRUE , если операция выполнена успешно. В противном случае эта подпрограмма возвращает значение FALSE, и вызывающий объект может получить зарегистрированную ошибку, вызвав Метод GetLastError.

GetLastError может вернуть следующий код ошибки.

Код возврата Описание
ERROR_INVALID_HANDLE
Вызывающий объект передал значение NULL или недопустимый дескриптор в параметре DeviceHandle ; FILE_FLAG_OVERLAPPED не задано в дескрипторове файла.
ERROR_NOT_ENOUGH_MEMORY
Указывает, что для выполнения операции недостаточно памяти.
ERROR_BAD_DEVICE
Указывает, что не удалось найти дескриптор интерфейса по умолчанию для устройства.

Комментарии

При вызове WinUsb_Initialize параметры политики интерфейса сбрасываются до значений по умолчанию.

Вызов WinUsb_Initialize запрашивает в базовом стеке USB различные дескрипторы и выделяет достаточно памяти для хранения полученных данных дескриптора.

WinUsb_Initialize сначала извлекает дескриптор устройства, а затем получает связанный дескриптор конфигурации. Из дескриптора конфигурации вызов наследует связанные дескрипторы интерфейса и сохраняет их в массиве. Интерфейсы в массиве идентифицируются по отсчитываемым от нуля индексам. Значение индекса 0 указывает на первый интерфейс (интерфейс по умолчанию), значение 1 указывает на второй связанный интерфейс и т. д. WinUsb_Initialize анализирует дескриптор интерфейса по умолчанию для дескрипторов конечной точки и кэширует такие сведения, как связанные каналы или данные о состоянии. Дескриптор, полученный в параметре InterfaceHandle , является указателем на блок памяти, выделенный для первого интерфейса в массиве.

Если приложение хочет использовать другой интерфейс на устройстве, оно должно вызвать WinUsb_GetAssociatedInterface, указать индекс интерфейса и получить дескриптор блока памяти, выделенного для указанного интерфейса.

Требования

Требование Значение
Целевая платформа Универсальное
Верхняя часть winusb.h (включая Winusb.h)
Библиотека Winusb.lib
DLL Winusb.dll

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

WinUSB

Функции WinUSB

WinUSB_Free