可直接编译(设置成:使用多字节字符集)

转来的,代码:

/*
http://www.experts-exchange.com/Programming/Editors_IDEs/Q_24506125.html
*/ #include <stdio.h>
#include <windows.h>
#include <setupapi.h>
#include <devguid.h>
#include <winioctl.h>
#include <regstr.h>
#include <tchar.h>
#include <string>
using namespace std; #pragma comment(lib,"setupapi.lib") /*
获取设备数
路径: 如G:
设备数
*/
BOOL GetDeviceNumber(LPCTSTR pszDevPath, DWORD& dwDevNum) { BOOL bRC = FALSE; HANDLE hDrive = CreateFile(
pszDevPath,
0,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
NULL,
NULL
); if (INVALID_HANDLE_VALUE != hDrive) { STORAGE_DEVICE_NUMBER sdn;
DWORD dwBytesReturned = 0; bRC = DeviceIoControl(
hDrive,
IOCTL_STORAGE_GET_DEVICE_NUMBER,
NULL,
0,
&sdn,
sizeof(sdn),
&dwBytesReturned,
NULL
); if (bRC) dwDevNum = sdn.DeviceNumber; CloseHandle(hDrive);
}else printf("Error:[%d] (%s)\n",GetLastError(),pszDevPath); return bRC;
} int GetDeviceDescription(LPCTSTR pszDrive, TCHAR* pszDesc, const size_t szDescSize)
{
TCHAR acDevName[MAX_PATH];
// QueryDosDevice(pszDrive,acDevName,MAX_PATH);
// printf("Test: %s\n",acDevName);
_stprintf(acDevName,"\\\\.\\%s", pszDrive);
DWORD dwNumOfInterest = -1;;
GetDeviceNumber(acDevName,dwNumOfInterest);
//printf("DeviceNumber:[%d]\n",dwNumOfInterest);
GUID* guid = (GUID*)&GUID_DEVINTERFACE_DISK;
// Get device interface info set handle
// for all devices attached to system
HDEVINFO hDevInfo = SetupDiGetClassDevs(guid, NULL, NULL,
DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);
if (hDevInfo == INVALID_HANDLE_VALUE) {
return 0;
} // Retrieve a context structure for a device interface
// of a device information set.
DWORD dwIndex = 0;
BOOL bRet = FALSE; BYTE Buf[1024];
PSP_DEVICE_INTERFACE_DETAIL_DATA pspdidd =
(PSP_DEVICE_INTERFACE_DETAIL_DATA)Buf;
SP_DEVICE_INTERFACE_DATA spdid;
SP_DEVINFO_DATA spdd;
DWORD dwSize;
spdid.cbSize = sizeof(spdid);
while ( true ) {
bRet = SetupDiEnumDeviceInterfaces(hDevInfo, NULL,
guid, dwIndex, &spdid); if (!bRet) {
break;
} dwSize = 0;
SetupDiGetDeviceInterfaceDetail(hDevInfo,
&spdid, NULL, 0, &dwSize, NULL); if ( dwSize!=0 && dwSize<=sizeof(Buf) ) {
pspdidd->cbSize = sizeof(*pspdidd); // 5 Bytes! ZeroMemory((PVOID)&spdd, sizeof(spdd));
spdd.cbSize = sizeof(spdd); long res =
SetupDiGetDeviceInterfaceDetail(hDevInfo, &spdid, pspdidd,
dwSize, &dwSize,
&spdd); printf("Result:[%s]\n",pspdidd->DevicePath); // <--------- here! DWORD dwType;
LPTSTR buffer = NULL;
DWORD buffersize = 0; while (!SetupDiGetDeviceRegistryProperty(
hDevInfo,
&spdd,
SPDRP_FRIENDLYNAME,
&dwType,
(PBYTE)buffer,
buffersize,
&buffersize))
{
if (GetLastError() ==
ERROR_INSUFFICIENT_BUFFER)
{
// Change the buffer size.
if (buffer) LocalFree(buffer);
// Double the size to avoid problems on
// W2k MBCS systems per KB 888609.
buffer =(LPTSTR) LocalAlloc(LPTR,buffersize * 2);
}
else
{
// Insert error handling here.
break;
}
} DWORD dwNum = 0;;
GetDeviceNumber(pspdidd->DevicePath,dwNum);
//printf("DeviceNumber:[%d]\n",dwNum); //if (dwNumOfInterest == dwNum) _stprintf(pszDesc,_T("%s"),buffer);
if (dwNumOfInterest == dwNum) _stprintf(pszDesc,_T("%s"),pspdidd->DevicePath); //printf("Result:[%s]\n",buffer);
if (buffer) LocalFree(buffer); }
dwIndex++;
}
SetupDiDestroyDeviceInfoList(hDevInfo);
return 0;
} void main (int argc, char** argv) {
TCHAR acDesc[1024] = "<unknown>";
TCHAR* pszDrive;
if (2 != argc) { printf("Usage: usbdev.exe <drive letter> (ex.: 'usbdev f:')\n");
}
pszDrive = *(argv + 1);
GetDeviceDescription(pszDrive, acDesc, 1024);
_tprintf("\nDescription for %s\n\n\t%s\n", pszDrive, acDesc);
system("pause");
}

C++获取设备 PID,VID 信息的更多相关文章

  1. Cordova各个插件使用介绍系列(六)—$cordovaDevice获取设备的相关信息

    详情请看:Cordova各个插件使用介绍系列(六)—$cordovaDevice获取设备的相关信息 在项目中需要获取到当前设备,例如手机的ID,联网状态,等,然后这个Cordova里有这个插件可以用, ...

  2. 获取设备和 App 信息

    设备对照表:https://www.theiphonewiki.com/wiki/Models 获取设备和 App 信息代码: NSLog(@"设备信息如下"); NSLog(@& ...

  3. ios 获取设备相关的信息

    .获取设备的信息 UIDevice *device = [[UIDevice alloc] int]; NSString *name = device.name; //获取设备所有者的名称 NSStr ...

  4. iOS ---------- 获取设备的各种信息

    一.目录结构: 获取屏幕宽度与高度 获取设备版本号 获取iPhone名称 获取app版本号 获取电池电量 获取当前系统名称 获取当前系统版本号 获取通用的唯一识别码UUID 获取当前设备IP 获取总内 ...

  5. iOS 获取设备的各种信息的方法

    一.目录结构: 获取屏幕宽度与高度 获取设备版本号 获取iPhone名称 获取app版本号 获取电池电量 获取当前系统名称 获取当前系统版本号 获取通用的唯一识别码UUID 获取当前设备IP 获取总内 ...

  6. Android开发之获取设备的屏幕信息和px dp之间的转换

    DisplayMetrics metric = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metr ...

  7. snmp获取设备相关管理信息

    在本文中,作者将向我们展示如何用snmp代理监视网络设备,甚至发送软件警告. 网络上很多代理在为我们服务.只要我们开启UDP/161,162端口,这些代理就会以Management Informati ...

  8. C#:获取设备电量相关信息

    更多资源:http://denghejun.github.io [DllImport("kernel32.dll",EntryPoint="GetSystemPowerS ...

  9. iOS 随笔小技巧 弱self 打印当前类行数列数,多人开发自动适配pch地址,获取设备uid的信息

    $(SRCROOT)/PrefixHeader.pch自动适配pch地址 __weak __block typeof(self) weakself = self; __weak typeof(self ...

随机推荐

  1. ASP.NET Core 6框架揭秘实例演示[06]:依赖注入框架设计细节

    由于依赖注入具有举足轻重的作用,所以<ASP.NET Core 6框架揭秘>的绝大部分章节都会涉及这一主题.本书第3章对.NET原生的依赖注入框架的设计和实现进行了系统的介绍,其中设计一些 ...

  2. Linux性能优化之内存性能调优

    一.根据性能指标找工具 二.根据工具查性能 三.内存优化策略 常见的优化思路有这么几种: 1)最好禁止 Swap.如果必须开启 Swap,降低 swappiness 的值,减少内存回收时 Swap 的 ...

  3. ASP.NET Core 6框架揭秘实例演示[09]:配置绑定

    我们倾向于将IConfiguration对象转换成一个具体的对象,以面向对象的方式来使用配置,我们将这个转换过程称为配置绑定.除了将配置树叶子节点配置节的绑定为某种标量对象外,我们还可以直接将一个配置 ...

  4. Linux下的Tmux分屏操作

    Linux中,我们使用命令行的时候,一个窗口只能使用一个命令行,若是需要使用多个输入位置进行操作,那么只能多开几个窗口,今天介绍一款软件,可以让我们在一个窗口使用多个输入行,先来效果图展示下 Linu ...

  5. BI数据可视化工具怎么选?用这款就够了!

    任何一项产品的选择都需要谨慎而全面,BI数据可视化工具的选择就更不用说了.作为企业的IT部门,如果没有良好的BI工具支持,IT部门将会十分容易陷入困境.那么面对多元化的BI工具市场,IT部门该如何选择 ...

  6. 【C# 锁】 SpinLock锁 详细分析(包括内部代码)

    OverView 同步基元分为用户模式和内核模式 用户模式:Iterlocked.Exchange(互锁).SpinLocked(自旋锁).易变构造(volatile关键字.volatile类.Thr ...

  7. 【C# 编码格式】 System.Text 命名空间 Encoding

    Encoding基类    System.Text.ASCIIEncoding类    System.Text.UnicodeEncoding类    System.Text.UTF32Encodin ...

  8. C# 开始支持动态化编程

    在.NET 4.0的运行时进行动态编程时,我们引入了一个新功能:动态语言运行时.可以这样理解,CLR的目的是为静态类型的编程语言提供一个统一的框架或编程模型,而DLR便是在.NET平台上为动态语言提供 ...

  9. Ocelot和IdentityServer4初体验

    Ocelot是一个用.NET Core实现的开源API网关技术.IdentityServer4是一个基于OpenID Connect和OAuth2.0的针对ASP.NET Core的框架,以中间件的形 ...

  10. idea教程--Maven 骨架介绍

    简单的说,Archetype是Maven工程的模板工具包.一个Archetype定义了要做的相同类型事情的初始样式或模型.这个名称给我们提供来了一个一致的生成Maven工程的方式.Archetype会 ...