使用Setup API枚举系统设备
来源:互联网 发布:sql注入漏洞如何处理 编辑:程序博客网 时间:2024/05/15 04:07
#pragma comment(lib, "Setupapi.lib")#pragma comment(lib, "shlwapi.lib") #include "stdafx.h"#include <Windows.h>#include <setupapi.h>#include <devguid.h>#include <regstr.h>#include <shlwapi.h>#include <Rpc.h> int main( int argc, char *argv[ ], char *envp[ ] ){ HDEVINFO hDevInfo; SP_DEVINFO_DATA DeviceInfoData; DWORD i; char szGUID[] = _T("36FC9E60-C465-11CF-8056-444553540000"); GUID guid; UuidFromString((unsigned char *)szGUID, &guid); // 枚举指定类型设备 hDevInfo = SetupDiGetClassDevs(&guid, 0, // Enumerator 0, DIGCF_ALLCLASSES | DIGCF_PRESENT ); if (hDevInfo == INVALID_HANDLE_VALUE) { // Insert error handling here. return 1; } DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA); // 枚举指定设备信息集合的成员,并将数据放在PSP_DEVINFO_DATA中 for (i=0; SetupDiEnumDeviceInfo(hDevInfo, i, &DeviceInfoData); i++) { DWORD DataT; LPTSTR buffer = NULL; DWORD buffersize = 0; // 获取设备信息 while (!SetupDiGetDeviceRegistryProperty( hDevInfo, &DeviceInfoData, SPDRP_FRIENDLYNAME, &DataT, (PBYTE)buffer, buffersize, &buffersize)) { if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) { if (buffer) LocalFree(buffer); buffer = (LPTSTR)LocalAlloc(LPTR,buffersize); } else { break; } } if(buffer) { LONG nLen = strlen(buffer)+10; char* pStr = new char[nLen]; strcpy_s(pStr, nLen, "Result: "); strcat_s(pStr, nLen, buffer); if( StrStr(pStr, _T("WD"))!=NULL) { _tprintf(pStr); _tprintf(_T("\n")); } delete []pStr; } } if ( GetLastError()!=NO_ERROR && GetLastError()!=ERROR_NO_MORE_ITEMS ) return 1; SetupDiDestroyDeviceInfoList(hDevInfo); return 0;}如果配合WM_DEVICECHANGE消息,可以完成对U盘等设备的检测(注:在Win Me只能收到nEventType=7的消息,这时候要注意自己判断)
BOOL OnDeviceChange(UINT nEventType, DWORD_PTR dwData){ switch(nEventType) { case DBT_DEVICEARRIVAL: // 设备插入并可用 break; case DBT_DEVICEREMOVECOMPLETE: // 设备拨出 break; }}以下是一些设备在系统中的GUID,有的不会翻译,暂用英文:)
4D36E980-E325-11CE-BFC1-08002BE10318 软驱
4D36E965-E325-11CE-BFC1-08002BE10318 光驱
4D36E97D-E325-11CE-BFC1-08002BE10318 系统设备
6D807884-7D21-11CF-801C-08002BE10318 磁带机
36FC9E60-C465-11CF-8056-444553540000 USB
4D36E964-E325-11CE-BFC1-08002BE10318 适配器
D45B1C18-C8FA-11D1-9F77-0000F805F530 APMSUPPORT
E0CBF06C-CD8B-4647-BB8A-253B43F0F974 蓝牙设备
4D36E966-E325-11CE-BFC1-08002BE10318 电脑
6BDD1FC2-810F-11D0-BEC7-08002BE2092F 解码器
6BDD1FC3-810F-11D0-BEC7-08002BE2092F GPS——Global Positioning System
4D36E976-E325-11CE-BFC1-08002BE10318 No Driver
8ECC055D-047F-11D1-A537-0000F8753ED1 Non-plug And Play Drivers
4D36E97E-E325-11CE-BFC1-08002BE10318 Other Devices
4D36E97A-E325-11CE-BFC1-08002BE10318 Printer Upgrade
4D36E97C-E325-11CE-BFC1-08002BE10318 声音设备
2 0
- 使用Setup API枚举系统设备
- 【转】如何使用系统设备枚举器
- 如何使用系统设备枚举器
- 枚举系统视频设备
- 系统设备枚举
- 使用SetupDI* API列举系统中的设备
- API枚举系统进程
- 视频捕获 之 如何使用系统设备枚举器
- C#:USB设备枚举(二)设备枚举API
- C#:USB设备枚举(二)设备枚举API
- DirectShow系统设备的枚举
- directX枚举系统设备类
- 使用Native API查询Windows硬盘分区系统设备名称
- 使用Native API查询Windows硬盘分区系统设备名称
- 使用Native API查询Windows硬盘分区系统物理设备号
- 使用 Win32 API 枚举应用程序
- 使用多媒体API枚举音频设备
- 使用CreateFile API 枚举串口
- 互斥锁与条件变量应用
- 来自官网update的一些代码
- 读书笔记-《拆掉思维里的墙》
- VB.NET版机房收费系统—数据库设计
- 锁 阅读文献篇
- 使用Setup API枚举系统设备
- 静态成员
- Highcharts结合Ajax完美实现时序图的展现(asp.net)版本(我是拿来做参考的)
- 一款基于Webgl实现的3D类网页游戏
- 生日蛋糕——深搜+剪枝
- Extjs 教程 第一篇 下载、打包以及第一个例子
- APUE-3标准IO库
- 在命令行处理 console 应用执行的返回值。
- 汇编基础笔记1 cpu与存储器的读写