C#USB设备枚举Kernel32的PInvoke】的更多相关文章

using System; using System.Runtime.InteropServices; using System.Security; namespace Splash { #region Kernel32 [SuppressUnmanagedCodeSecurity] internal static class Kernel32 { /// <summary> /// 无效的文件句柄 /// </summary> public static readonly Int…
(一)DeviceIoControl的PInvoke /* ---------------------------------------------------------- 文件名称:DeviceIoControl.cs 作者:秦建辉 MSN:splashcn@msn.com QQ:36748897 博客:http://blog.csdn.net/jhqin 开发环境: Visual Studio V2010 .NET Framework 4 Client Profile 版本历史: V1.…
USB主机在检测到USB设备插入后,就要对设备进行枚举了.为什么要枚举呢?枚举就是从设备读取一些信息,知道设备是什么样的设备,如何进行通信,这样主机就可以根据这些信息来加载合适的驱动程序.调试USB设备,很重要的一点就是USB的枚举过程,只要枚举成功了,那么就已经成功大半了. 在说枚举之前,先大概说一下USB的一种传输模式——控制传输.这种传输在USB中是非常重要的,它要保证数据的正确性,在设备的枚举过程中都是使用控制传输.控制传输分为三个过程:①建立过程.②可选的数据过程.③状态过程.建立(S…
USB设备从接入HUB到正常工作之前.都属于设备枚举阶段.所谓设备枚举.就是让host控制器认识USB设备,并为其准备资源.建立好主机与设备间的数据传递机制. 该阶段的工作,是USB通信协议规定的,所以属于ISO标准流程.设备枚举阶段也相应了USB设备的五种状态. 设备枚举阶段分为例如以下8个步骤: 获取设备描写叙述符 复位 设置地址 再次获取设备描写叙述符 获取配置描写叙述符 获取接口.端点描写叙述符 获取字符串描写叙述符 选择设置配置 当中,步骤1与4都是获取设备描写叙述符,两者有什么差别?…
USB驱动分为两块,一块是USB的bus驱动,这个东西,Linux内核已经做好了,我们可以不管,我们只需要了解它的功能.形象的说,USB的bus驱动相当于铺出一条路来,让所有的信息都可以通过这条USB通道到达该到的地方,这部分工作由usb_core(drivers/usb/usb.c)来完成.当USB设备接到USB控制器接口时,usb_core就检测该设备的一些信息,如生产厂商的ID(VID)和产品的ID(PID),或者是设备所属的class.subclass跟protocol,以便确定应该调用…
集线器与控制器(USB地址7bit) 设备,配置,端点,接口 USB1.0(低速1.2),1.1(全速450m),2.0(高速,电流传输)区别 引脚4根(V,D-,D+,gnd),miniUSB增加 USB检测机制,D-.D+有没有高电平 USB设备有多个端点,设备地址和端点唯一确认一个通讯点 一个设备可以有多个配置(同时只有一个生效),一个配置可以有多个接口,接口下有多个端点.根据不同的功能选择不同的配置. USB设备枚举,获知设备类型,如何通讯. 传输编码(NRZI),传输以包为单位,每个包…
上篇 <Windows下USB磁盘开发系列一:枚举系统中U盘的盘符>介绍了很简单的获取系统U盘盘符的办法,现在介绍下如何枚举系统中所有USB设备(不光是U盘). 主要调用的API如下: 1,调用SetupDiGetClassDevs()获取指定设备类型的句柄: 2,调用SetupDiEnumDeviceInfo()枚举设备信息: 3,调用SetupDiGetDeviceRegistryProperty()获取设备信息. 具体实现函数如下: int enum_usb_device_info()…
USB主机在检测到USB设备插入后,就要对设备进行枚举了.为什么要枚举?枚举就是从设备读取各种描述符信息,这样主机就可以根据这些信息来加载合适的驱动程序,从而知道设备是什么样的设备,如何进行通信等. 枚举的过程: 1.  USB主机检测到USB设备插入之后,就会先对设备复位.USB设备在总线复位后其地址为0,这样主机就可以通过地址0和那些刚刚插入的设备通信.USB主机往地址为0的设备的端点0发送获取设备描述符的标准请求(这是一个控制传输的建立过程).设备收到该请求后,会按照主机请求的参数,在数据…
代码如下: 打开USB Hub设备之后,返回句柄hHubDevice,然后使用EnumerateHubPorts来枚举Hub的端 口.疑问在代码的中文注释中. bool CUsbEnumHub::EnumerateHubPorts(HANDLE hHubDevice, ULONG NumPorts, UsbItem* pRootItem) { ULONG index; BOOL bSuccess; PUSB_NODE_CONNECTION_INFORMATION_EX connectionInf…
当一个USB设备插入主机后,会有以下活动: 配上状态图…