识别USB端口程序开发感想

程序功能:识别USB设备插在左边的U口还是右边的U口。
准备工作:1.下载资源:因为这个功能设计到驱动级别的编程(本人才疏学浅,可能对这一点的认识有偏差),所以windows自带的
  API中没有实现此功能的函数,需要下载一套新的开发包。大家熟知的是Win_DDK,它里面有我们需要的API,
  这个软件XP版的非常不好下,因为微软是收费的,而且用它开发的人少,我记得当初是在某个ftp服务器上
  下的。
  2.安装Win_DDK,我直接安装在了C://的路径下。然后在VC中设置
  Tools->Options->Directories中设置Win_DDK的路径,比如C:/WINDDK/2600/INC/WXP
  Project->setting->Link中设置需要的库文件,比如hid.lib setupapi.lib
  库文件的路径我没有设置,直接把需要的.lib文件拷到当前路径下了。
识别USB端口函数的调用过程:

void IdentifyUSB::IdenUSB() 
{
    HANDLE    hHCDev;
    HANDLE    hHubDevice;
    BOOL    success;
    PCHAR    deviceName;
    ULONG   nBytes;
    PCHAR   rootHubName;
    PUSB_NODE_CONNECTION_INFORMATION    connectionInfo;
//------打开HCDx端口,得到它的句柄------
    hHCDev = CreateFile("//./HCD2",        //注意这个形式:/.HCD0。具体原因我就不知道了,呵呵。
                    GENERIC_WRITE,
                    FILE_SHARE_WRITE,
                    NULL,
                    OPEN_EXISTING,
                    0,
                    NULL);
    rootHubName =(char*) GetRootHubName(hHCDev);    //例子中现成的函数,直接拿来用了。

    deviceName = (PCHAR)malloc(strlen(rootHubName) + sizeof("//./"));
    strcpy(deviceName, "//./");
    strcpy(deviceName + sizeof("//./") - 1, rootHubName);
    hHubDevice = CreateFile(deviceName,    //形式大概是/.USB#ROOT_HUB#4&5f8db32&0#{f18a0e88-c30c-11d0-8815-00a0c906bed8
}

                    GENERIC_WRITE,
                    FILE_SHARE_WRITE,
                    NULL,
                    OPEN_EXISTING,
                    0,
                    NULL);
    nBytes = sizeof(USB_NODE_CONNECTION_INFORMATION) + sizeof(USB_PIPE_INFO) * 30;              
    connectionInfo = (PUSB_NODE_CONNECTION_INFORMATION)malloc(nBytes);
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值