识别USB端口程序开发感想

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

程序功能:识别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);

ESP32-C3程序烧录全解析:USB与UART下载实战指南 在嵌入式开发中,程序烧录是连接软件与硬件的核心环节,其本质是通过特定通信协议将编译后的二进制固件写入微控制器(MCU)的非易失性存储器(如Flash)。这一过程依赖于芯片的启动模式与硬件接口,其中串行通信(如UART)和USB协议是实现数据传输的两种主流方式。理解其原理不仅能确保开发流程顺畅,更是进行高效调试和后期量产的基础。对于ESP32-C3这类集成RISC-V内核与无线功能的物联网芯片,其原生支持的USB Serial/JTAG功能,通过集成USB控制器,实现了单线完成供电、下载与调试,极大简化了硬件 阅读详情

相关推荐

JTAG错误代码84排查指南:从Quartus II驱动到BIOS设置的全面解决方案

JTAG(联合测试行动组)是嵌入式系统开发中用于芯片测试、编程和调试的工业标准接口协议,其核心原理是通过TAP(测试访问端口)状态机实现芯片内部寄存器的访问与控制。在FPGA/CPLD开发流程中,JTAG技术价值在于提供可靠的硬件配置通道,确保设计代码能正确下载到目标器件。然而,实际工程实践中常遇到JTAG通信失败问题,例如Quartus II编程时出现的“Unexpected error in JTAG server -- error code 84”。这类问题往往涉及软件配置、驱动兼容性、操作系统服务及

weixin_30516243的博客 385

zz: 遍历 USB devcie,读取设备描述符 device descriptor

 理论:    对于USB接口的设备,现在越来越多了。本篇我们就通过获取一个USB扫描仪设备中的序列号,来介绍如何获取usb设备的一些硬件信息。对于usb设备都是采用HCD0,HCD1,HCD2,HCD3等符号描述的。如下图:因此,有了这个名字,我们就可以使用CreateFile来打开usb设备。然后使用DeviceIoControl函数与usb设备通讯了。HCD是host controlle

jtujtujtu的专栏 7958

[arduino]ESP8266配置连接IoT阿里云平台(arduino D1 mini)

[arduino]ESP8266配置连接IoT阿里云平台(arduino D1 mini)前言ESP8266配置(基础)巨人的肩膀 前言 前言是我的个人感想,想看干货的请跳过。 自己很早之前入了一块esp8266,当时是在网络上看见有人用这个做了一个电子时钟,我很喜欢于是自己很感兴趣但是我不喜欢拿来主义,于是自己用arduino编译器自己写底层,也是经历了很多困难踩了很多的坑,最后只是完成了点亮灯带显示时间(每10分钟联网对时),然后就再也没动过了。最近老师建议我说可以连到阿里云上,我也就又开始研究如何连接

cold_hl的博客 2821

遍历 USB devcie,读取设备描述符 device descriptor

理论:    对于USB接口的设备,现在越来越多了。本篇我们就通过获取一个USB扫描仪设备中的序列号,来介绍如何获取usb设备的一些硬件信息。对于usb设备都是采用HCD0,HCD1,HCD2,HCD3等符号描述的。如下图:因此,有了这个名字,我们就可以使用CreateFile来打开usb设备。然后使用DeviceIoControl函数与usb设备通讯了。HCD是host controller

flyyyri的专栏 1万+

枚举所有USB设备代码

枚举所有连接的USB设备代码,编译环境VS2010 项目地址:https://gitee.com/tody_guo/ls_usb.git // ls_usb.cpp : Defines the entry point for the console application. #include "stdafx.h" #include <windows.h> #include &lt...

Tody Guo的专栏 6477

MFC操作注册表获取USB磁盘代码阅读步骤总结

1.获取设备路径接口 •m_lpClassGuid=_GUID GUID_DEVINTERFACE_USB_HOST_CONTROLLER {3ABF6F2D-71C4-462A-8A92-1E6861E6AF27} • •m_hDevInfo = SetupDiGetClassDevs( (LPGUID) m_lpClassGuid,NULL,NULL,DIGCF_PRESENT |DIG...

zggzgw的博客 1623

Slackware on Thinkpad X61 使用感想

作者: forever steel(zhoun) 原发: http://guo9310.blog.163.com/ 把笔记本Thinkpad X61从winxp换成Slackware Linux, 已经8个月了, 写一些个人感想吧. 跟以前使用Windows桌面不一样的地方. 我从1997年开始使用Linux, 对Linux还是比较熟悉. 以前的很多Linux发行版, 包括Slackwar...

zhoun 295

破解苹果的硬件限制:OpenCore Legacy Patcher如何让老款Mac重获新生

你是否曾因苹果官方停止支持而被迫放弃性能依然完好的老款Mac?当系统更新提示"不再兼容"时,那种无奈感想必很多Mac用户都深有体会。但技术的力量正在改变这一现状——OpenCore Legacy Patcher(OCLP)正在悄然改写苹果硬件的生命周期规则。 这款开源工具通过精妙的内存注入技术,绕过了苹果官方的硬件限制,让2007-2017年间的老款Mac能够安装并流畅运行最新的macOS系统。

gitblog_00841的博客 343

基于android的网络协议于ESP8266实现通信控制

如何用有趣而新奇的方式为物联网设备配网? CSDN话题挑战赛第1期 活动详情地址:CSDN 参赛话题:【如何用有趣而新奇的方式为物联网设备配网?】 话题描述:配网,是物联网设备必不可少的步骤。配网指用户拿到设备后为其联网的过程。相信大家能轻而易举地想到诸如APP,小程序,web等方式。那么我们能不能拓宽一下思路,大胆尝试一下更“新奇”的方式呢?信息传递的方式有很多种,如光线、颜色、振动、电压、电磁波和声音等。你是否拥有自己独特而绝妙的点子和大家分享呢?大家可以不拘泥于前文所述,大胆展现自己的脑洞。希

m0_64478952的博客 3409

iOS设备激活锁终极解决方案:从技术原理到实战操作全解析

当您面对一部被iCloud激活锁困住的iOS设备时,那种无助感想必深有体会。无论是二手购买忘记解绑,还是设备遗失后找回,激活锁都成为了使用设备的巨大障碍。今天,我们将深入探讨基于AppleRa1n工具的iOS 15-16.6系统激活锁绕过方案,为您提供一套完整的技术指南。 ## 问题根源:为什么iOS激活锁如此棘手? iOS设备的激活锁机制建立在苹果强大的安全生态之上。当您启用"查找我的iPh

gitblog_00407的博客 791

AppleRa1n激活锁绕过工具:iOS设备重获新生的完整指南

当你面对一部因Apple ID激活锁而无法使用的iPhone时,那种无助感想必深有体会。无论是忘记密码的个人设备,还是未解绑的二手手机,激活锁都成为了使用道路上的拦路虎。今天,我们将为你详细介绍AppleRa1n这款专业工具,它能够帮助你在iOS 15至16.6版本上安全绕过激活锁,让设备重新焕发生机。 ## 激活锁困局:你的设备是否也面临这些困扰? ### 常见激活锁场景 - **个人设备遗

gitblog_01146的博客 1029

OpenCore Legacy Patcher:如何让旧款Mac完美运行最新macOS的实战指南

你是否拥有一台性能依然强劲但已被苹果官方放弃支持的旧款Mac?当看到最新的macOS功能不断推出,而自己的设备却停留在过时系统时,那种无奈感想必很多Mac用户都深有体会。OpenCore Legacy Patcher正是为解决这一问题而生的开源工具,它能让你的老款Mac重新焕发生机,体验最新macOS系统的所有功能。 OpenCore Legacy Patcher通过内存注入和补丁技术,在不永久

gitblog_00522的博客 429

5分钟掌握Redpill Recovery:群晖NAS系统救援与定制安装终极指南

当你的群晖NAS系统突然无法启动,所有重要数据仿佛被封印在硬盘中,这种无助感想必很多NAS用户都经历过。Redpill Recovery(简称RR)作为一款开源NAS救援工具,正是为解决这类痛点而生。本文将带你从零开始,快速掌握这款强大的NAS系统救援与定制安装工具,让你在面对系统故障时不再束手无策。 ## 为什么你需要Redpill Recovery? **场景一:系统引导损坏** - 系统

gitblog_00006的博客 487

TI TPIC7710 EVM评估模块:汽车电子驻车制动系统开发实战指南

在汽车电子系统开发中,专用集成电路(ASIC)和评估模块(EVM)是工程师进行芯片验证和系统原型设计的关键工具。ASIC集成了特定应用所需的核心功能,而EVM则通过硬件解耦与图形化软件界面,将复杂的内部寄存器操作和实时信号监控转化为直观的交互体验。其技术价值在于大幅降低了安全关键系统(如电子驻车制动EPB)的开发风险与周期,使工程师能在实际PCB设计前,全面验证电机驱动、电流检测、故障注入等核心功能。典型的应用场景包括汽车执行器控制、电源管理及功能安全验证。本文以德州仪器TPIC7710 EVM为例,深入解

weixin_30776545的博客 362

LS1028A嵌入式Linux开发实战:双核A72与TSN工业网络全解析

在工业物联网与边缘计算场景中,嵌入式Linux系统的构建离不开对ARM架构处理器的深入理解。Cortex-A72作为ARMv8-A架构的高性能核心,在嵌入式工业领域凭借出色的单核性能与能效比,成为承载复杂协议栈与虚拟化负载的理想选择。而具备时间敏感网络(TSN)能力的集成交换芯片,则是实现工业网络确定性通信的关键,它通过硬件级的时钟同步与流量调度机制,为机器人控制、智能产线等场景提供低延迟、低抖动的数据传输保障。本文围绕NXP LS1028A平台,系统介绍从交叉编译环境搭建、U-Boot与ATF启动流程、设

weixin_34006468的博客 420

树莓派5无外设安装Ubuntu Server:从烧录到SSH完整指南

系统安装是嵌入式开发服务器部署的基础技能,而在无显示器、无键鼠的纯命令行场景下完成系统部署,则是远程运维能力的试金石。树莓派5作为当前热门的单板计算机,结合Ubuntu Server LTS版本,可以构建出轻量、稳定的服务端环境。其核心原理在于通过烧录工具预写网络配置与SSH服务,使设备在首次上电后自动完成系统展开并接入局域网,从而让操作者用一台笔记本即可全流程掌控。这种无头(headless)安装方式广泛应用于边缘计算、物联网网关、家庭服务器等场景,也适合批量刷机和教学实验。本文以树莓派5和Ubuntu

weixin_34162228的博客 486

遍历USB设备,获取扫描仪序列号之二

   #include "windows.h"#include "PlkUsbIo.h"#include #define NUM_HCS_TO_CHECK 10/******************************************************************/bool EnumUsbDevice();PCHAR GetDriverKeyName(HA

dsc的专栏 4589
上一篇: 编程修养(作者:陈皓)——向陈皓致敬
下一篇: 笔记:解决文件互相包含问题的小方法
lizuonan
博客等级 码龄21年 1粉丝 6原创
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值