列出电脑上的所有USB端口和端口上的U盘(包含U盘的序列号)。
在windowsXP下已经已经解决。但在windows2000下检测到的Usb hub要比XP下少一个,端口也少,我所用的那种U盘也检测不到。
检测USB hub使用的是CreateFile,不知道为什么到windows2000下就不正常了。
使用CreateFile打开USB hubHostControllerName := '\\.\HCD' + IntToStr(ControllerIndex);//ControllerIndex从0开始增加
HostControllerHandle := CreateFile(PChar(HostControllerName),
                                       GENERIC_WRITE,     //$40000000
                                       FILE_SHARE_WRITE,  //$00000002;
                                       nil,
                                       OPEN_EXISTING, //3
                                       0,
                                       0);在windowsXP下可以获得5个Hub,但到了Windows2000下就变成了4个。
应该说CreateFile是个通用得函数吧,怎么到Windows2000就不正常了呢?

解决方案 »

  1.   

    我怕有别的影响,所以单把createFile拿出来做了一个测试程序,结果在windows2000下还是比windowsXP下少一个Hub。
    真是愁死我了。
      

  2.   

    又有新发现,在windowsXP下检测到的最后一个Hub的所有端口,实际上是前边所有Hub中端口的集合。
        在windows2000和windowsXP下,当我插普通U盘的时候,检测的U盘是列在实际的端口下的。当插入的是我们的专有U盘的时候,在windowsXP下U盘列在了最后一个Hub的端口下(也就是实际端口的映射);在windows2000下,则根本检测不到,但在资源管理器里边是有的。    说一下我使用的U盘:这种U盘是被分成了光盘区和普通U盘区的,在资源管理器里边显示的是一个光盘一个普通U盘。