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


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

Функция WinUsb_GetOverlappedResult извлекает результаты перекрывающейся операции с указанным файлом.

Синтаксис

BOOL WinUsb_GetOverlappedResult(
  [in]  WINUSB_INTERFACE_HANDLE InterfaceHandle,
  [in]  LPOVERLAPPED            lpOverlapped,
  [out] LPDWORD                 lpNumberOfBytesTransferred,
  [in]  BOOL                    bWait
);

Параметры

[in] InterfaceHandle

Непрозрачный дескриптор первого интерфейса на устройстве, возвращаемый WinUsb_Initialize.

[in] lpOverlapped

Указатель на структуру OVERLAPPED , указанную при запуске перекрывающейся операции.

[out] lpNumberOfBytesTransferred

Указатель на переменную, получающую количество байтов, которые фактически были переданы операцией чтения или записи.

[in] bWait

Если этот параметр имеет значение TRUE, функция не возвращается до завершения операции. Если этот параметр имеет значение FALSE и операция по-прежнему находится в состоянии ожидания, функция возвращает значение FALSE , а функция GetLastError возвращает ERROR_IO_INCOMPLETE.

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

Если функция выполнена успешно, возвращается любое число, отличное от нуля. Если функция выполняется неудачно, возвращается нулевое значение. Дополнительные сведения об ошибке можно получить, вызвав GetLastError.

Комментарии

Эта функция похожа на подпрограмму API Win32 GetOverlappedResult с одним отличием— вместо передачи дескриптора файла, возвращаемого из CreateFile, вызывающий объект передает дескриптор интерфейса, возвращаемый из WinUsb_Initialize. Вызывающий объект может использовать любой из подпрограмм API, если передается соответствующий дескриптор. Функция WinUsb_GetOverlappedResult извлекает дескриптор файла из дескриптора интерфейса, а затем вызывает Метод GetOverlappedResult.

Результаты, сообщаемые функцией WinUsb_GetOverlappedResult , являются результатами последней перекрывающейся операции указанного дескриптора, для которой была предоставлена указанная структура OVERLAPPED и для которой ожидались результаты операции. Ожидающая операция указывается, когда функция, которая запустила операцию, возвращает значение FALSE, а подпрограмма GetLastError возвращает ERROR_IO_PENDING. Когда операция ввода-вывода находится в состоянии ожидания, функция, которая запустила операцию, сбрасывает элемент hEvent структуры OVERLAPPED в состояние без знака. После завершения ожидающей операции система присваивает объекту события состояние сигнального.

Вызывающий объект может указать, что объект события сбрасывается вручную в структуре OVERLAPPED . Если используется объект события автоматического сброса, дескриптор события не должен указываться в любой другой операции ожидания в интервале между запуском перекрывающейся операции и вызовом WinUsb_GetOverlappedResult. Например, объект события иногда указывается в одной из подпрограмм ожидания для ожидания завершения операции. Когда подпрограмма ожидания возвращается, система устанавливает для события автоматического сброса состояние без знака, а последовательный вызов WinUsb_GetOverlappedResult с параметром bWait , равным TRUE , приводит к блокировке функции на неопределенный срок.

Если параметр bWait имеет значение TRUE, WinUsb_GetOverlappedResult определяет, завершена ли ожидающая операция, ожидая, пока объект события будет находиться в состоянии сигнала.

Если элемент hEvent структуры OVERLAPPED имеет значение NULL, система использует состояние дескриптора файла, чтобы сообщить о завершении операции. Не используйте для этой цели дескрипторы файлов. Лучше использовать объект события из-за путаницы, которая может возникнуть при выполнении нескольких параллельных перекрывающихся операций в одном файле. В этом случае невозможно узнать, какая операция вызвала сигнал о состоянии объекта.

Требования

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

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

WinUSB

Функции WinUSB

WinUsb_Initialize

_URB_CONTROL_DESCRIPTOR_REQUEST