WinUSB in Win 8.1

With Windows 8.1, the WinUSB APIs now support isochronous transfers.
However, the APIs are all listed in MSDN as “Minimnum supported client:
Windows 8.1”.

I’m a little confused by that. In the past, WinUSB was not an operating
system component. It was an add-on that I installed with my device.
The available functionality was determined by the WinUSB co-installer
version you used in your INF, not by the operating system version. That
is, I could grab the WinUSB co-installer from the 7600 WDK, install it
on XP, and be a happy camper.

Is the isochronous support fundamentally different somehow? Does it
rely on UMDF 2.0? Will the 8.1 version of WinUSB still install
downlevel, but without isochronous support?


Tim Roberts, xxxxx@probo.com
Providenza & Boekelheide, Inc.

I am generally annoyed by people that repeat their questions when they
don’t get an answer right away, but in this case I think there is a
point that really needs to be clarified. The libusb and libusbx
projects are trying to figure out how to support isochronous pipes, and
this is a critical point for them.

Thus far, the philosophy of KMDF, UMDF, and WinUSB has always been that
the available feature set is entirely dependent on my choice of
co-installer, with no dependency on the operating system in use. If I
want KMDF 1.9, then I carry KMDF 1.9 with me wherever I go. I can rely
on KMDF 1.9 features anywhere, from XP to Windows 8. That’s a nice feature.

The IMPLICATION from the MSDN page for the new WinUSB APIs (for example,
WinUsb_RegisterIsochBuffer) is that this philosophy may have changed. I
assume that WinUSB 8.1 can still be installed on XP (well, Vista, at
least). But when I do that, do I get isochronous support? Or do I only
get isochronous support if I install WinUSB 8.1 on Windows 8.1? If that
is the case, that’s a significant new inconvenience (and I won’t bring
up the fact that GetVersionEx is lying to us, making that more difficult
to determine).

Specifically, the libusbx folks have been thinking they could determine
whether isochronous support was present by doing GetProcAddress for
WinUsb_RegisterIsochBuffer. If they ALSO need to do an operating system
version check, that’s not a good thing.

If the support is strictly embedded in WinUSB and not dependent on the
operating system version, then the Requirements section of those MSDN
pages need to be revised.

Tim Roberts wrote:

With Windows 8.1, the WinUSB APIs now support isochronous transfers.
However, the APIs are all listed in MSDN as “Minimnum supported client:
Windows 8.1”.

I’m a little confused by that. In the past, WinUSB was not an operating
system component. It was an add-on that I installed with my device.
The available functionality was determined by the WinUSB co-installer
version you used in your INF, not by the operating system version. That
is, I could grab the WinUSB co-installer from the 7600 WDK, install it
on XP, and be a happy camper.

Is the isochronous support fundamentally different somehow? Does it
rely on UMDF 2.0? Will the 8.1 version of WinUSB still install
downlevel, but without isochronous support?


Tim Roberts, xxxxx@probo.com
Providenza & Boekelheide, Inc.

looks like my original response bounced due to encoding. There is no new WinUSB coinstaller in the 8.1 kit to install downlevel. nothing in there is tied to strictly to umdf, so that is not the reason there is no downlevel install. none of the Win8.1 WDF components go downlevel, we had to make a trade off between time to market and what we could test.

What Doron said. We didn’t make a new WinUSB coinstaller due to constraints, and as a result, on Vista/7/8 you can’t update WinUSB to 8.1. XP didn’t have a WinUSB so you might think of copying WinUSB 8.1 dll+sys there, but it won’t work because (a) WinUSB 8.1 depends on a KMDF version greater than is supported on XP, and (b) what if an older WinUSB was already added to the OS via coinstaller.

Using GetProcAddress to determine the presence of isochronous functions in WinUSB.dll is an acceptable way to know whether you have isoch support. Today it will only succeed on Win8.1.

Thanks for the feedback.

Hi,

“Tim Roberts” wrote in message news:xxxxx@ntdev…

(and I won’t bring up the fact that GetVersionEx is lying to us, making
that more difficult to determine).

For some reason, the VerifyVersionInfoW function does not lie, when asking
for the Major and Minor version of Windows.
I use Delphi 2009, which does not support changing the manifest, so I
cannot use the official way to detect Windows 8.1.
Using VerifyVersionInfoW works even without changing the manifest.

Regards, Matt