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

转来的,代码:

/*
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. kubeadm + containerd 部署 k8s-v1.23.3(含证书升级)

    文章目录 前言 环境准备 答应我,所有节点都要关闭防火墙 答应我,所有节点都要关闭selinux 答应我,所有节点都要关闭swap 答应我,所有节点都要开启内核模块 答应我,所有节点都要开启模块自动加 ...

  2. MySQL架构原理之存储引擎InnoDB_Redo Log和BinLog

    Redo Log和Binlog是MySQL日志系统中非常重要的两种机制,有很多相似之处同时也有差别,本文探究两者细节和区别. 一.Redo Log 1.Redo Log介绍 Redo:顾名思义就是重做 ...

  3. IE内核 播放 RTMP 视频

    VLC IE ActiveX 方式播放 需IE内核支持(IE或者双核浏览器). VLC 下载地址https://www.videolan.org/vlc/ 页面视频窗口 <div id=&quo ...

  4. Remix本地化,加载本地合约文件,本地链接Remix

    智能合约IDE,在线的比较卡,而且切换网络面临文件丢失的风险,选择本地搭建Solidity本地编辑环境,Remix-IDE + Remixd组合,加载本地合约代码.这里用到两个工具: Remix ID ...

  5. hacker模拟环境

    https://geekprank.com/hacker/

  6. 如何将k8s中的某些节点单独、仅给某些应用来使用

    1.概述 在k8s集群的使用场景中有这样的一种情况,某些机器只给某些特殊的应用来使用.那么,这个时候,需要有以下的2个条件来进行保障: 节点不允许其他的pod来使用 应用只允许被调度到该节点上 2.实 ...

  7. 【剑指 Offer II 001. 整数除法】同leedcode 29.两数相除

    剑指 Offer II 001. 整数除法 解题思路 在计算的时候将负数转化为正数,对于32位整数而言,最小的正数是-2^31, 将其转化为正数是2^31,导致溢出.因此将正数转化为负数不会导致溢出. ...

  8. 在Linux发行版上使用7zip的方法

    学习如何在 Ubuntu 和其他 Linux 发行版中安装和使用 7zip 7zip介绍 7Zip(更适当的写法是 7-Zip)是一种在 Windows 用户中广泛流行的归档格式.一个 7Zip 归档 ...

  9. Oracle之数据库浅谈

    前言 1970年的6月,IBM 公司的研究员埃德加·考特 (Edgar Frank Codd) 在 Communications of ACM 上发表了那篇著名的<大型共享数据库数据的关系模型& ...

  10. AHUACM寒假集训II(线段树)

    B.Mayor's posters POJ2528 题目大意: D.Count Color POJ2777 题目大意:长为 L ( L ≤ 1 0 5 ) L( L\leq10^5) L(L≤105) ...