搜索
bottom↓
回复: 85

WinUSB - 微软为所有 USB 设备提供的常规驱动程序

  [复制链接]

出0入0汤圆

发表于 2013-4-19 22:48:33 | 显示全部楼层 |阅读模式
本帖最后由 shangdawei 于 2013-4-19 22:54 编辑

WinUSB

本节介绍 Microsoft 为所有 USB 设备提供的常规 WinUSB 驱动程序 (Winusb.sys) 及其用户模式组件。

在早于 Windows XP Service Pack 2 (SP2) 的 Windows 版本中,所有 USB 设备驱动程序都必须在内核模式下运行。如果所创建的 USB 设备的操作系统没有本机类驱动程序,则需要为该设备编写内核模式设备驱动程序。

Windows USB (WinUSB) 是一种常规的 USB 设备驱动程序,它是与用于 Windows XP SP2 的 Windows 驱动程序框架 (WDF) 同时开发的。WinUSB 架构由内核模式驱动程序 (Winusb.sys) 和公开 WinUSB 功能的用户模式动态链接库 (Winusb.dll) 组成。 使用这些功能,你可以通过用户模式软件管理 USB 设备。


WinUSB 架构和模块

WinUSB 由于两个基本组件组成:

Winusb.sys 是一种内核模式驱动程序,可在 USB 设备的内核模式设备堆栈的协议驱动程序之上作为筛选器驱动程序或功能驱动程序进行安装。
Winusb.dll 是一种公开 WinUSB 功能的用户模式 DLL。.当 Winusb.sys 作为设备的功能驱动程序安装后,应用程序可以使用这些功能与其进行通信。
对于不要求自定义功能驱动程序的设备,Winusb.sys 可以在该设备的内核模式堆栈中作为功能驱动程序进行安装。随后,用户模式流程通过使用一组设备 I/O 控制请求或调用 WinUSB 功能来与 Winusb.sys 进行通信。


WinUSB (Winusb.sys) 安装

对于某些通用串行总线 (USB) 设备(如仅由单个应用程序访问的设备),你可以在该设备的内核模式堆栈中安装 WinUSB (Winusb.sys) 作为 USB 设备的功能驱动程序,来取代实施驱动程序。还可以安装 WinUSB 作为功能驱动程序或为 USB 复合设备的某个特定功能安装 WinUSB。WinUSB 通过使用 WinUSB 用户模式动态链接库 winusb.dll 公开的 WinUSB 功能 与设备进行通信。

编写 WinUSB 安装的自定义 INF

作为驱动程序包的一部分,你需要提供 .inf 文件,该文件将安装 Winusb.sys 作为 USB 设备的功能驱动程序。

有关如何安装 Winusb.sys 作为功能驱动程序的完整说明,请参阅如何安装 Winusb.sys 作为设备的功能驱动程序。

下面的示例 .inf 文件西那是的针对大多数 USB 设备的 WinUSB 安装,但进行了一些修改,例如将相应部分名称中的 USB_Install 更改为相应的 DDInstall 值。你还应根据需要更改版本、制造商和型号部分。例如,提供相应的制造商名称、已签名目录文件的名称、正确的设备类以及设备的供应商标识 (VID) 和产品标识 (PID)。

还应通知安装程序类已设置为 "USBDevice"。供应商可以对不属于其他类以及不是 USB 主控制器或集线器的设备使用 "USBDevice" 安装程序类。

如果要安装 WinUSB 作为 USB 复合设备中任一功能的功能驱动程序,必须在 INF 中提供中与该功能关联的硬件 ID。可以从“设备管理器”的 devnode 属性中获取该功能的硬件 ID。硬件 ID 字符串格式为 "USB\VID_vvvv&PID_pppp"。
  1. 下面的 INF 安装 WinUSB 作为基于 x64 系统上 OSR USB FX2 主板的功能驱动程序。


  2. ;
  3. ;
  4. ; Installs WinUsb
  5. ;

  6. [Version]
  7. Signature = "$Windows NT$"
  8. Class     = USBDevice
  9. ClassGUID = {88BAE032-5A81-49f0-BC3D-A4FF138216D6}
  10. Provider  = %ManufacturerName%
  11. CatalogFile = WinUSBInstallation.cat
  12. DriverVer=09/04/2012,13.54.20.543

  13. ; ========== Manufacturer/Models sections ===========

  14. [Manufacturer]
  15. %ManufacturerName% = Standard,NTamd64

  16. [Standard.NTamd64]
  17. %DeviceName% =USB_Install, USB\VID_0547&PID_1002

  18. ; ========== Class definition ===========

  19. [ClassInstall32]
  20. AddReg = ClassInstall_AddReg

  21. [ClassInstall_AddReg]
  22. HKR,,,,%ClassName%
  23. HKR,,NoInstallClass,,1
  24. HKR,,IconPath,%REG_MULTI_SZ%,"%systemroot%\system32\setupapi.dll,-20"
  25. HKR,,LowerLogoVersion,,5.2

  26. ; =================== Installation ===================

  27. [USB_Install]
  28. Include = winusb.inf
  29. Needs   = WINUSB.NT

  30. [USB_Install.Services]
  31. Include =winusb.inf
  32. Needs   = WINUSB.NT.Services

  33. [USB_Install.HW]
  34. AddReg=Dev_AddReg

  35. [Dev_AddReg]
  36. HKR,,DeviceInterfaceGUIDs,0x10000,"{9f543223-cede-4fa3-b376-a25ce9a30e74}"

  37. ; [DestinationDirs]
  38. ; If your INF needs to copy files, you must not use the DefaultDestDir directive here.  
  39. ; You must explicitly reference all file-list-section names in this section.

  40. ; =================== Strings ===================

  41. [Strings]
  42. ManufacturerName=""
  43. ClassName="Universal Serial Bus devices"
  44. DeviceName="Fx2 Learning Kit Device"
  45. REG_MULTI_SZ = 0x00010000
复制代码
如何在不编写自定义 INF 的情况下自动安装 WinUSB

作为 OEM 或独立硬件供应商 (IHV),你可以构建自己的设备,以便在 Windows 8 以及早期版本的操作系统上自动安装 Winusb.sys。这种设备称作 WinUSB 设备,无需编写引用自带 Winusb.inf 的自定义 INF 文件。有关详细信息,请参阅 WinUSB 设备。

什么是 WinUSB 设备

WinUSB 设备是一种通用串行总线 (USB) 设备,其固件定义了某些 Microsoft 操作系统 (OS) 特征描述符,这些描述符将兼容 ID 报告为 "WINUSB"。

WinUSB 设备的用途是让 Windows 将 Winusb.sys 作为设备的功能驱动程序载入,而无需自定义 INF 文件。对于 WinUSB 设备,你无须为设备分发 INF 文件,对最终用户而言,这大大简化了驱动程序安装过程。相反,如果你需要提供自定义 INF,则不应将设备定义为 WinUSB 设备和在 INF 中指定设备的硬件 ID。

Microsoft 提供了 Winusb.inf,其中包含将 Winusb.sys 作为 USB 设备的设备驱动程序安装所需的信息。

在 Windows 8 之前,要将 Winusb.sys 作为功能驱动程序加载,你需要提供自定义 INF。自定义 INF 指定设备特定的硬件 ID,同时包括内置 Winusb.inf 的部分。这些部分是实例化服务、复制内置二进制文件以及注册设备接口 GUID(应用程序查找设备和与设备通讯必须使用 GUID)所必需的。有关编写自定义 INF 的信息,请参阅 WinUSB (Winusb.sys) 安装。

在 Windows 8 中,内置 Winusb.inf 文件经过更新后可让 Windows 自动将 INF 与 WinUSB 设备匹配。

使用内置 Winusb.inf 安装 WinUSB 设备

在 Windows 8 中,内置 Winusb.inf 文件已更新。INF 包括引用称为 "USB\MS_COMP_WINUSB" 的兼容 ID 的安装部分。

[Generic.Section.NTamd64]

%USB\MS_COMP_WINUSB.DeviceDesc%=WINUSB,USB\MS_COMP_WINUSB

更新的 INF 还包括称为 "USBDevice" 的新安装程序类。

"USBDevice" 安装程序类可供这些 Microsoft 未提供内置驱动程序的设备使用。通常,此类设备不属于定义良好的 USB 类(如音频、Bluetooth 等),并且需要自定义驱动程序。如果你的设备是 WinUSB 设备,则该设备很可能不属于 USB 类。因此,你的设备必须安装在 "USBDevice" 安装程序类下。更新的 Winusb.inf 便于实现该要求。

关于 USBDevice 类的使用。:  
不要对未分类设备使用“USB”安装程序类。该类预留用于安装控制器、集线器和复合设备。“USB”类误用可能造成严重的可靠性和性能问题。对于未分类设备,请使用“USBDevice”。

在 Windows 8 中,要使用“USBDevice”设备类,只需将其添加到你的 INF 中即可。

[版本]


  1. [Version]

  2. Class=USBDevice

  3. ClassGuid={88BAE032-5A81-49f0-BC3D-A4FF138216D6}

复制代码
在设备管理器中,你将会看到一个新节点 USB 通用串行总线设备,你的设备就显示在该节点下。

在 Windows 7 中,除前面的行外,你还需要在 INF 中创建以下注册表设置:

;---------- 添加注册表部分 ----------
  1. [USBDeviceClassReg]

  2. HKR,,,,"Universal Serial Bus devices"

  3. HKR,,NoInstallClass,,1

  4. HKR,,SilentInstall,,1

  5. HKR,,IconPath,%REG_MULTI_SZ%," %systemroot%\system32\setupapi.dll,-20"
复制代码
在设备管理器中,你将会发现你的设备显示在 USB 通用串行总线设备下。不过,该设备类描述由 INF 中指定的注册表设置派生而来。

- Eliyas Yakub,Microsoft Windows USB 核心团队



注意,"USBDevice" 类不仅限于 WinUSB。如果你有设备的自定义驱动程序,则可在自定义 INF 中使用 "USBDevice" 安装程序类。

在设备枚举过程中,USB 驱动程序堆栈会从设备读取兼容 ID。如果兼容 ID 是 "WINUSB",Windows 会将其用作设备标识符,并在更新的内置 Winusb.inf 中查找匹配,然后将 Winusb.sys 作为设备的功能驱动程序加载。

对于 Windows 8 之前的 Windows 版本,更新的 Winusb.inf 可通过 Windows 更新提供。
如果你的计算机配置为自动获取驱动程序更新,WinUSB 驱动程序将使用新的 INF 程序包进行安装,无需任何用户干预。




如何配置 WinUSB 设备

若要将 USB 设备标识为 WinUSB 设备,设备固件必须具有这些 Microsoft OS 描述符。

支持扩展的特征描述符

为了让 USB 驱动程序堆栈了解设备支持扩展的特征描述符,设备必须定义存储在字符串索引 0xEE 处的 OS 字符串描述符。在枚举过程中,驱动程序堆栈查询字符串描述符。如果存在描述符,驱动程序堆栈会假定设备包含一个或多个 OS 特征描述符和检索这些特征描述符所需要的数据。

检索的字符串描述符具有 bMS_VendorCode 字段值。该值表示 USB 驱动程序堆栈必须用来检索扩展特征描述符的供应商代码。

设置兼容 ID

匹配内置 Winusb.inf 和加载 WinUSB 驱动程序模块所需要的扩展兼容 ID OS 特征描述符。

扩展兼容 ID OS 特征描述符包含紧跟一个或多个功能部分的标题部分,具体取决于是否是复合设备。标题部分指定整个描述符的长度、功能部分的数量以及版本号。对于非复合设备,标题后紧跟一个仅与设备的接口关联的功能部分。该部分的 compatibleID 字段必须指定 "WINUSB" 作为字段值。复合设备有多个功能部分。每个功能部分的 compatibleID 字段必须指定 "WINUSB"。

注册设备接口 GUID

注册设备接口 GUID 所需要的扩展属性 OS 特征描述符。需要使用 GUID 从应用程序或服务查找设备、配置设备以及执行 I/O 操作。

在以前版本的 Windows 中,设备接口 GUID 注册通过自定义 INF 完成。从 Windows 8 开始,你的设备应使用扩展属性 OS 特征描述符报告接口 GUID。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2013-4-19 22:58:10 | 显示全部楼层

如何通过 WinUSB 功能访问 USB 设备

在本主题中,你将了解应用程序如何通过调用 WinUSB 功能与 USB 设备通信。本主题假定你已经将 WinUSB (Winusb.sys) 加载为设备的函数驱动程序。位于设备的内核模式堆栈中的 WinUSB。此驱动程序包括在 Windows 的 \Windows\System32\drivers 文件夹中。 有关安装此驱动程序的说明,请参阅 WinUSB (Winusb.sys) 安装。

如果你正在使用 Winusb.sys 作为 USB 设备的函数驱动程序,则可以从应用程序调用 WinUSB 功能来与设备通信。这些由用户模式 DLL Winusb.dll 公开的函数可简化通信过程。与构建设备 I/O 控制请求来执行标准 USB 操作(如配置设备、发送控制请求以及与设备互传数据)不同,应用程序调用等效的 WinUSB 功能。

Winusb.dll 使用应用程序提供的数据构建适当的设备 I/O 控制请求,然后将请求发送到 Winusb.sys 进行处理。为与 USB 堆栈通信,WinUSB 功能使用与应用程序的请求对应的适当 IOCTL 调用 DeviceIoControl。 当请求完成时,WinUSB 功能将 Winusb.sys 返回的任何信息(例如来自读请求的数据)再回传到调用进程。如果调用 DeviceIoControl 成功,它将返回非零值。如果调用失败或者挂起(不立即处理),DeviceIoControl 将返回零值。 如果出现错误,应用程序可以调用 GetLastError 以获得更详细的错误消息。

使用 WinUSB 功能与设备通信比实现驱动程序更简单。不过,请注意以下限制:

WinUSB 功能一次仅允许一个应用程序与设备通信。如果需要多个应用程序同时与设备通信,则必须实现一个函数驱动程序。
WinUSB 功能不支持在同步终结点之间传输流数据。同步传输需要一个内核模式的函数驱动程序。
WinUSB 功能不支持已经提供内核模式支持的设备。此类设备的示例包括调制解调器和网络适配器,二者分别由电话服务 API (TAPI) 和 NDIS 支持。
对于多功能设备,可以使用设备的 INF 文件分别为每个 USB 函数指定内置内核模式驱动程序或 Winusb.sys。不过,对于某个特定函数,只能指定其中一个选项,而不能同时指定两个。
可以将 Winusb.sys 安装为 USB 复合设备中函数的函数驱动程序。这需要在 INF 中进行一些硬件 ID 修改。有关详细信息,请参阅 WinUSB (Winusb.sys) 安装中的“为 WinUSB 安装编写 .Inf 文件”。

Winusb.sys 也是 UMDF 函数驱动程序与关联的设备之间链接的关键部分。Winusb.sys 作为高层筛选器驱动程序安装在设备的内核模式堆栈中。应用程序通过与设备的 UMDF 函数驱动程序通信来发送读、写或设备 I/O 控制请求。驱动程序与框架交互,后者将请求传递到 Winusb.sys。Winusb.sys 随后处理该请求并将其传递到协议驱动程序,最后传递到设备。任何响应都通过反向路径返回。Winusb.sys 还作为设备堆栈的即插即用和电源所有者 (PPO)。

注意  WinUSB 功能需要 Windows XP 或更高版本。你可以在 C/C++ 应用程序中使用这些函数与你的 USB 设备通信。Microsoft 不支持为 WinUSB 提供托管 API。
本主题包括如何使用 WinUSB 功能与使用 Winusb.sys 作为函数驱动程序的 USB 设备进行通信的详细演练。

先决条件
设置项目
创建设备的文件句柄
获取设备的 WinUSB 接口句柄
查询设备以获取 USB 描述符
向默认终结点发送控制传输
发送 I/O 请求
释放设备句柄
实现主函数
相关主题

如何通过 WinUSB 功能访问 USB 设备

出0入0汤圆

发表于 2013-4-19 23:20:49 | 显示全部楼层
内容丰富,留待仔细阅读

出0入0汤圆

发表于 2013-4-19 23:23:34 | 显示全部楼层
感觉就像android里的HAL,把设备驱动放到用户态下

出0入0汤圆

 楼主| 发表于 2013-4-20 09:13:07 | 显示全部楼层
本帖最后由 shangdawei 于 2013-4-20 09:31 编辑

使用内置 Winusb.inf 安装 WinUSB 设备

这个就像HID或者MSC之类, 只要设备符合WinUSB的要求, 无需提供 inf和驱动, windows自动安装winusb.sys

另外在win8下, 修改/自定义 inf 文件, 或出现签名问题, 似乎要启动安全模式才允许安装,
使用内置的inf则不会出现这个问题, 要符合WinUSB的要求, 至少需要提供以下 3 项 :

1. 定义存储在字符串索引 0xEE 处的 OS 字符串描述符
  1. #define bMS_VendorCode              ( 0x01 )
  2. // "MSFT100" : index : 0xEE : langId : 0x0000
  3. const U8 OS_StringDescritpor[ ] =
  4. { 0x12,  0x03,  'M',  0,  'S',  0,  'F',  0,  'T',  0,  '1',  0,  '0',  0,  '0',  0,  bMS_VendorCode,  0 };
复制代码
处理 usb 标准请求时, 读取 index==0xEE 的串描述符, 返回 OS_StringDescritpor
bMS_VendorCode 将作为后续 Vendor 请求的请求代码

2. 设置扩展兼容 ID OS 特征描述符包
  1. // "WINUSB\0\0" : wIndex : 0x0004
  2. const U8 WINUSB_ExtendedCompatId_Descritpor[ ] =
  3. {
  4.   0x28, 0x00, 0x00, 0x00,                         // dwLength
  5.   0x00, 0x01,                                     // bcdVersion
  6.   0x04, 0x00,                                     // wIndex
  7.   0x01,                                           // bCount
  8.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,       // Reserved[7]
  9.   0x00,                                           // bFirstInterfaceNumber
  10.   0x01,                                           // RESERVED ( 0x01 )
  11.   'W', 'I', 'N', 'U', 'S', 'B', 0x00, 0x00,       // compactiableID[8]
  12.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // subCompactiableID[8]
  13.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00              // Reserved[6]
  14. };
复制代码
处理请求带代码为 bMS_VendorCode 的 vendor 请求时, 若设置包的 wIndex == 0x0004 返回WINUSB_ExtendedCompatId_Descritpor


3. 注册设备接口 GUID
  1. // L"DeviceInterfaceGUID" : wIndex = 0x0005
  2. // L"{12345678-1234-1234-1234-123456789ABC}"
  3. //
  4. const U8 WINUSB_ExtendedProperty_InterfaceGUID_Descritpor[ ] =
  5. {
  6.   0x8E, 0x00, 0x00, 0x00,     // dwTotalSize = Header + All sections
  7.   0x00, 0x01,                 // bcdVersion
  8.   0x05, 0x00,                 // wIndex
  9.   0x01, 0x00,                 // wCount
  10.   
  11.   0x84, 0x00, 0x00, 0x00,     // dwSize -- this section
  12.   
  13.   0x01, 0x00, 0x00, 0x00,     // dwPropertyDataType
  14.   
  15.   0x28, 0x00,                 // wPropertyNameLength
  16.   
  17.   'D', 0x00, 'e', 0x00,       // bProperytName : WCHAR : L"DeviceInterfaceGUID"
  18.   'v', 0x00, 'i', 0x00,       // bProperytName : WCHAR
  19.   'c', 0x00, 'e', 0x00,       // bProperytName : WCHAR
  20.   'I', 0x00, 'n', 0x00,       // bProperytName : WCHAR
  21.   't', 0x00, 'e', 0x00,       // bProperytName : WCHAR
  22.   'r', 0x00, 'f', 0x00,       // bProperytName : WCHAR
  23.   'a', 0x00, 'c', 0x00,       // bProperytName : WCHAR
  24.   'e', 0x00, 'G', 0x00,       // bProperytName : WCHAR
  25.   'U', 0x00, 'I', 0x00,       // bProperytName : WCHAR
  26.   'D', 0x00, 0x00, 0x00,      // bProperytName : WCHAR
  27.   
  28.   0x4E, 0x00, 0x00, 0x00,     // dwPropertyDataLength : 78 Bytes = 0x0000004E
  29.   
  30.   '{', 0x00, '1', 0x00,       // bPropertyData : WCHAR : L"{12345678-1234-1234-1234-123456789ABC}"
  31.   '2', 0x00, '3', 0x00,       // bPropertyData
  32.   '4', 0x00, '5', 0x00,       // bPropertyData
  33.   '6', 0x00, '7', 0x00,       // bPropertyData
  34.   '8', 0x00, '-', 0x00,       // bPropertyData
  35.   '1', 0x00, '2', 0x00,       // bPropertyData
  36.   '3', 0x00, '4', 0x00,       // bPropertyData
  37.   '-', 0x00, '1', 0x00,       // bPropertyData
  38.   '2', 0x00, '3', 0x00,       // bPropertyData
  39.   '4', 0x00, '-', 0x00,       // bPropertyData
  40.   '1', 0x00, '2', 0x00,       // bPropertyData
  41.   '3', 0x00, '4', 0x00,       // bPropertyData
  42.   '-', 0x00, '1', 0x00,       // bPropertyData
  43.   '2', 0x00, '3', 0x00,       // bPropertyData
  44.   '4', 0x00, '5', 0x00,       // bPropertyData
  45.   '6', 0x00, '7', 0x00,       // bPropertyData
  46.   '8', 0x00, '9', 0x00,       // bPropertyData
  47.   'A', 0x00, 'B', 0x00,       // bPropertyData
  48.   'C', 0x00, '}', 0x00,       // bPropertyData
  49.   0x00, 0x00                  // bPropertyData
  50. };
复制代码
处理请求带代码为 bMS_VendorCode 的 vendor 请求时, 若设置包的 wIndex == 0x0005 返回WINUSB_ExtendedProperty_InterfaceGUID_Descritpor

至此, Windows 将安装 WinUsb.sys 作为设备的驱动







通讯过程参考



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-4-20 09:38:37 | 显示全部楼层
有意思。。。

出0入0汤圆

发表于 2013-4-20 10:01:23 | 显示全部楼层
学习 mark

出0入0汤圆

发表于 2013-4-20 10:12:25 | 显示全部楼层
1、有直接生成WinUSB的驱动并且直接加载的工具。
2、访问可以直接用LibUSB的Win32驱动。
代码和Linux是兼容的。

出0入0汤圆

发表于 2013-4-20 10:17:14 | 显示全部楼层
这个很不错

出0入0汤圆

 楼主| 发表于 2013-4-20 11:52:38 | 显示全部楼层
本帖最后由 shangdawei 于 2013-4-20 12:04 编辑
dr2001 发表于 2013-4-20 10:12
1、有直接生成WinUSB的驱动并且直接加载的工具。
2、访问可以直接用LibUSB的Win32驱动。
代码和Linux是兼容 ...


搜索到这些软件, 应该可以生成的驱动并且直接加载

http://sourceforge.net/projects/libusb-win32/

http://sourceforge.net/projects/libusbx/

http://sourceforge.net/projects/libusbk/

http://sourceforge.net/projects/libwdi/

http://sourceforge.net/projects/libwdi/files/zadig/





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
头像被屏蔽

出0入0汤圆

发表于 2013-4-20 19:04:06 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入8汤圆

发表于 2013-4-20 19:42:23 | 显示全部楼层
挺好。。。

出0入0汤圆

发表于 2013-4-20 20:27:19 | 显示全部楼层
标记一下,能自己做USB设备的驱动不?

出0入0汤圆

 楼主| 发表于 2013-4-20 21:06:41 | 显示全部楼层
可以做自己设备的usb驱动

出0入0汤圆

发表于 2013-4-20 21:10:16 | 显示全部楼层
真不错,支持下

出0入0汤圆

发表于 2013-6-13 11:03:19 | 显示全部楼层
WinUSB不错,和libusb有得一比

出0入0汤圆

发表于 2013-6-13 11:47:23 | 显示全部楼层
好东西, mark, winusb
头像被屏蔽

出0入0汤圆

发表于 2013-6-13 12:59:53 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

发表于 2013-7-21 23:14:49 | 显示全部楼层
libusbx也是使用winusb作为底层驱动的,感觉libusbx的api更加方便一些
学习了,之前都是用的libwdi的wdi-sample.exe安装的winusb的驱动

出0入0汤圆

发表于 2013-7-22 09:03:16 | 显示全部楼层
标志备用。

出0入0汤圆

发表于 2013-7-22 09:33:33 | 显示全部楼层
好资料,留下备用

出0入0汤圆

发表于 2013-7-29 23:24:35 | 显示全部楼层
膜拜高人啊…………菜鸟还需更多修为。

出280入168汤圆

发表于 2013-7-29 23:33:06 | 显示全部楼层
make make , 留待细看

出0入0汤圆

发表于 2013-9-2 04:08:39 | 显示全部楼层
good job !!!

出0入0汤圆

发表于 2013-9-2 21:16:06 | 显示全部楼层
果断保存 并收藏 这个太有用了  我用 libUSb-win32 出现一下莫名奇怪的问题 总是解决不了!

出0入0汤圆

发表于 2013-9-2 21:24:56 | 显示全部楼层
好资料,收藏

出0入0汤圆

发表于 2013-9-16 23:13:47 | 显示全部楼层
mark 收藏,这个是好东东

出0入0汤圆

发表于 2013-9-17 09:55:19 | 显示全部楼层
MARK 收藏

出0入0汤圆

发表于 2013-9-22 17:43:29 来自手机 | 显示全部楼层
留名,谢谢           

出200入0汤圆

发表于 2013-9-22 18:27:53 来自手机 | 显示全部楼层
认真学习,收藏

出0入0汤圆

发表于 2013-10-12 21:34:53 | 显示全部楼层
好资料,果断收藏了

出0入0汤圆

发表于 2013-10-12 22:22:06 | 显示全部楼层
收藏了,谢谢.WinUSB

出0入0汤圆

发表于 2013-10-12 23:01:46 | 显示全部楼层
不错 谢谢....................

出0入0汤圆

发表于 2013-10-18 13:44:53 | 显示全部楼层
信息量很大,收下了。

出0入0汤圆

发表于 2013-11-2 08:35:21 | 显示全部楼层
果断收下,谢谢楼主共享

出0入0汤圆

发表于 2013-12-25 12:13:00 | 显示全部楼层
信息量真到,回帖的信息量也大,winusb,libusb

出0入0汤圆

发表于 2014-2-22 10:33:12 | 显示全部楼层
winusb,libusb

出0入0汤圆

发表于 2014-2-22 10:37:15 | 显示全部楼层
这个解决了win8的问题,很不错

出0入0汤圆

发表于 2014-2-22 14:45:54 | 显示全部楼层
很不错的资料,up之

出870入263汤圆

发表于 2014-3-14 12:19:29 | 显示全部楼层
标个记号,设备和PC通信常见的解决方案。

出0入0汤圆

发表于 2014-11-19 11:08:22 | 显示全部楼层
好东东。

出0入8汤圆

发表于 2014-11-19 11:29:59 | 显示全部楼层
mark   以后用到

出0入0汤圆

发表于 2014-11-19 12:47:23 | 显示全部楼层
很不错的资料,如果有个范例那更好了

出0入0汤圆

发表于 2014-11-19 13:07:09 | 显示全部楼层
mark,学习

出0入0汤圆

发表于 2014-11-19 13:12:53 | 显示全部楼层
关注下,呵呵

出0入0汤圆

发表于 2014-11-19 13:14:31 | 显示全部楼层
有时间再看。

出0入4汤圆

发表于 2014-11-19 13:52:48 | 显示全部楼层
正在做stm32的USB驱动,收藏一下

出0入0汤圆

发表于 2015-11-9 15:24:25 | 显示全部楼层
好贴,做USB通信很有用

出0入0汤圆

发表于 2017-7-28 20:24:14 | 显示全部楼层

确实是好贴!

出0入0汤圆

发表于 2017-7-28 21:03:31 | 显示全部楼层
mark,好资料

出0入0汤圆

发表于 2017-11-20 00:44:42 来自手机 | 显示全部楼层
请问这个只需要配置VID和PID即可找到驱动吗?

出20入0汤圆

发表于 2017-11-20 01:03:21 | 显示全部楼层
make make , 留待细看

出0入0汤圆

发表于 2017-11-20 01:26:28 | 显示全部楼层
收藏一下.

出0入0汤圆

 楼主| 发表于 2017-11-20 08:52:38 | 显示全部楼层
jinzhen107 发表于 2017-11-20 00:44
请问这个只需要配置VID和PID即可找到驱动吗?

不需要VID/PID匹配,需要实现提到的几个请求处理,就可以自动安装驱动。

出0入0汤圆

发表于 2017-11-20 16:51:38 | 显示全部楼层
您好!
    我想用WINUSB 去写下ISP1583的驱动!,按照要求建立个工程,只改了VID和HID,其他怎么去改什么断点,也不知道怎么去改!
请问你这个容易实现吗?

目前改了这些可以找到USB驱动并且安装了,但是就是不跟上位机软件通讯!

出0入0汤圆

 楼主| 发表于 2017-11-20 17:01:53 | 显示全部楼层
jinzhen107 发表于 2017-11-20 16:51
您好!
    我想用WINUSB 去写下ISP1583的驱动!,按照要求建立个工程,只改了VID和HID,其他怎么去改什么 ...

如何通过 WinUSB 功能访问 USB 设备

https://msdn.microsoft.com/zh-cn ... loads/ff540174.aspx

出0入0汤圆

发表于 2017-11-20 17:27:00 | 显示全部楼层
本帖最后由 jinzhen107 于 2017-11-20 18:53 编辑


感谢
你的提供做的讯息

若有有个实例,直接改就好了!

出0入0汤圆

 楼主| 发表于 2017-11-20 18:57:33 | 显示全部楼层
什么开发环境,什么语言?

出0入0汤圆

发表于 2017-11-20 19:35:11 | 显示全部楼层
shangdawei 发表于 2017-11-20 18:57
什么开发环境,什么语言?

Microsoft Visual Studio 2012
语言为:C++        或C也可以。别的我也看不懂

出0入0汤圆

 楼主| 发表于 2017-11-20 20:48:07 | 显示全部楼层
jinzhen107 发表于 2017-11-20 19:35
Microsoft Visual Studio 2012
语言为:C++        或C也可以。别的我也看不懂

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2017-11-20 20:57:16 | 显示全部楼层
本帖最后由 jinzhen107 于 2017-11-20 21:00 编辑


我也是这么建立的!

但是后面的怎么改端点,读写,怎么应用那些API就找不到
我把这个建立的也上传附件了!

通过这个生成的驱动,USB能找到能也能识别。就是不能跟上机通讯,总显示是脱机

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2017-11-21 08:29:04 | 显示全部楼层
mark,winUsb,留待查阅!

出0入0汤圆

发表于 2018-1-15 22:29:00 | 显示全部楼层

收藏了,谢谢.WinUSB

出0入0汤圆

发表于 2018-1-16 08:55:07 | 显示全部楼层
记号,以后用的到

出0入0汤圆

发表于 2018-1-16 10:40:27 | 显示全部楼层
好资料,做个记号!

出10入120汤圆

发表于 2018-1-16 10:59:35 | 显示全部楼层
没看明白,简单的问一句,有个以前老版本的XETIEK的编程器,只能工作在WIN7 32位系统上,我能把它通过这个升级到64位系统吗?

出0入0汤圆

 楼主| 发表于 2018-1-16 13:35:35 | 显示全部楼层
makesoft 发表于 2018-1-16 10:59
没看明白,简单的问一句,有个以前老版本的XETIEK的编程器,只能工作在WIN7 32位系统上,我能把它通过这个 ...

如果有64位驱动的话,应该可以。

出10入120汤圆

发表于 2018-1-16 14:22:30 | 显示全部楼层
shangdawei 发表于 2018-1-16 13:35
如果有64位驱动的话,应该可以。

就是原厂不提供64位驱动,所以才无法使用的。

出0入0汤圆

 楼主| 发表于 2018-1-16 14:29:08 | 显示全部楼层
makesoft 发表于 2018-1-16 14:22
就是原厂不提供64位驱动,所以才无法使用的。

不想用两台电脑,在虚拟机里面运行应该可以。
头像被屏蔽

出0入0汤圆

发表于 2018-1-27 13:30:16 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

 楼主| 发表于 2018-1-27 13:55:58 | 显示全部楼层
bbs2009 发表于 2018-1-27 13:30
可以看看这个据说是KEIL新作的 WinUSB上位机例子,支持中断传输,批量传输和控制传输 。


This is an Windows application that communicates with USB Device using WinUSB Interface.

This application can be built using Visual Studio 2010 or later.

This application requires WinDDK version 7600.16385.1 installed in C:\WinDDK\7600.16385.1\ folder.

With default settings it uses GUID assigned to USB Device Custom Class example that can be found
in respective device pack in folder .\Middleware\USB\Device\WinUSB_Echo

This application can also be used with any WinUSB device.

.\Middleware\USB\Device\WinUSB_Echo 这个是下位机程序吗?
头像被屏蔽

出0入0汤圆

发表于 2018-1-27 18:06:06 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

 楼主| 发表于 2018-1-27 18:25:07 | 显示全部楼层
bbs2009 发表于 2018-1-27 18:06
http://www.keil.com/pack/doc/mw/USB/html/dev_cc_tutorial.html

多谢分享!

出0入0汤圆

发表于 2018-1-27 19:22:04 来自手机 | 显示全部楼层
用过libusb,在Windows系统下的稳定性不行,会打嗝。改用WinUSB后就好了。

出0入0汤圆

发表于 2019-7-5 20:42:50 | 显示全部楼层
您好请问下我按您的代码我OS 兼容ID注册GUID都已经被电脑识别到了为什么它还不会安装驱动 我是用的STM32F2的HID设备更改的代码 电脑已经接受到了 但不会自动安装 请问下这是为什么

出0入0汤圆

发表于 2019-7-5 20:43:15 | 显示全部楼层

如果您愿意为我解决这个问题的话我会有偿询问的

出0入0汤圆

发表于 2019-7-6 08:35:29 | 显示全部楼层
win10 才能面安装。win7之前,必须加载inf。winusb我测试结果就是这样。还是不尽人意。最后使用 msc 协议。这样系统会自动安装驱动,并且可以使用bulk传输

出0入0汤圆

 楼主| 发表于 2019-7-6 10:59:25 | 显示全部楼层
对于 Windows 8 之前的 Windows 版本,更新的 Winusb.inf 可通过 Windows 更新提供。
如果你的计算机配置为自动获取驱动程序更新,WinUSB 驱动程序将使用新的 INF 程序包进行安装,无需任何用户干预。

WinUsbCompat.rar (5.41 KB, 下载次数: 376)

下载这个文件,解压缩 .inf 右键安装。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2019-7-6 14:05:20 | 显示全部楼层
本帖最后由 shouqiang_zhang 于 2019-7-6 14:07 编辑

楼主,我右键安装,说INF不支持此类安装,是什么原因造成的?我的系统win7 x64, 另外问下,这个支持USB3.0驱动吗?


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2019-7-6 14:13:23 | 显示全部楼层
好资料 非常感谢

出0入8汤圆

发表于 2019-7-6 14:52:16 | 显示全部楼层
楼主真了不起,6年前的帖子还来解答

出0入0汤圆

 楼主| 发表于 2019-7-6 23:37:17 | 显示全部楼层
shouqiang_zhang 发表于 2019-7-6 14:05
楼主,我右键安装,说INF不支持此类安装,是什么原因造成的?我的系统win7 x64, 另外问下,这个支持USB ...





Windows 2012 R2 安装成功。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2019-7-6 23:42:03 | 显示全部楼层
WinUSB (Winusb.sys) 安装
https://docs.microsoft.com/zh-cn ... winusb-installation
https://docs.microsoft.com/en-us ... ivers/usbcon/winusb


Manually Install WinUsb Driver on Windows 7
https://www.silabs.com/community ... lly_installwin-A2Jj
02/06/2017 | 02:19 pm

Win7 ships with the correct 'winusb.sys' file, but is missing an updated '.inf' file that associates the driver with "usb\ms_comp_winusb" devices. Normally if the USB device supports Microsoft OS descriptors, then it will allow Windows to automatically install the WinUSB driver. This mechanism is supported "in-box" for Win8 and newer. For Win7 the mechanism is supported through Windows update. Depending on the update policy for the Win7 machine, the appropriate driver may or may not be already available on the machine. If it is not already on the machine, user can use the following manual procedure to install the driver if necessary.

Search for "windows phone winusb" at [Microsoft®Update Catalog|https://www.catalog.update.microsoft.com/Home.aspx].
Download "Windows Phone - Other hardware - WinUsb Device".
Extract the contents of the downloaded '.cab' file to a temporary folder.
In device manager select "Update driver software ..." --> "Browse my computer for driver software".
5. Navigate to the temporary folder with the downloaded driver and complete the installation.

This procedure only needs to be done once.

出0入0汤圆

发表于 2020-1-28 13:42:45 | 显示全部楼层
WinUSB (Winusb.sys) 安装
2018/05/09
  
对于某些通用串行总线(USB)设备,例如仅由单个应用程序访问的设备,你可以将设备的内核模式堆栈中的WinUSB (WinUSB)安装为 USB 设备的函数驱动程序,而不是实现驱动程序。
本主题包含以下部分:
不使用 INF 文件自动安装 WinUSB
通过指定系统提供的设备类来安装 WinUSB
为 WinUSB 安装编写自定义 INF
如何创建驱动程序包以安装 Winusb

出0入0汤圆

发表于 2020-1-28 13:44:08 | 显示全部楼层
不使用 INF 文件自动安装 WinUSB

作为 OEM 或独立硬件供应商(IHV),可以构建设备,以便在 Windows 8 和更高版本的操作系统上自动安装 Winusb。 此类设备称为 WinUSB 设备,无需编写引用内置 Winusb 的自定义 INF 文件。
连接 WinUSB 设备时,系统会自动读取设备信息并加载 Winusb。
有关详细信息,请参阅WinUSB 设备。

出5入14汤圆

发表于 2022-11-23 14:53:23 | 显示全部楼层
正好在学 PYTHON + WINUSB ,感谢楼主的无私分享!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子论坛 -- 东莞阿莫电子网站 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2023-1-28 18:50

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表