枚举硬件设备

下载源码:http://dl2.csdn.net/down4/20070627/27161251844.rar

HOWTO: 通过使用 SetupDi 调用函数枚举硬件设备

察看本文应用于的产品

文章编号 : 259695
最后修改 : 2004年3月10日
修订 : 2.0

本文的发布号曾为 CHS259695

概要

要得到 Windows 2000 中安装的硬件设备列表,应用程序可以调用 SetupDi 类 API 函数。

回到顶端

更多信息

以下代码段演示如何显示已经安装的所有硬件设备的列表:

#include <stdio.h>
#include <windows.h>
#include <setupapi.h>
#include <devguid.h>
#include <regstr.h>

int main( int argc, char *argv[ ], char *envp[ ] )
{
    HDEVINFO hDevInfo;
    SP_DEVINFO_DATA DeviceInfoData;
    DWORD i;

    // Create a HDEVINFO with all present devices.
    hDevInfo = SetupDiGetClassDevs(NULL,
        0, // Enumerator
        0,
        DIGCF_PRESENT | DIGCF_ALLCLASSES );

    if (hDevInfo == INVALID_HANDLE_VALUE)
    {
        // Insert error handling here.
        return 1;
    }

    // Enumerate through all devices in Set.

    DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
    for (i=0;SetupDiEnumDeviceInfo(hDevInfo,i,
        &DeviceInfoData);i++)
    {
        DWORD DataT;
        LPTSTR buffer = NULL;
        DWORD buffersize = 0;

        //
        // Call function with null to begin with,
        // then use the returned buffer size
        // to Alloc the buffer. Keep calling until
        // success or an unknown failure.
        //
        while (!SetupDiGetDeviceRegistryProperty(
            hDevInfo,
            &DeviceInfoData,
            SPDRP_DEVICEDESC,
            &DataT,
            (PBYTE)buffer,
            buffersize,
            &buffersize))
        {
            if (GetLastError() ==
                ERROR_INSUFFICIENT_BUFFER)
            {
                // Change the buffer size.
                if (buffer) LocalFree(buffer);
                buffer = LocalAlloc(LPTR,buffersize);
            }
            else
            {
                // Insert error handling here.
                break;
            }
        }

        printf("Result:[%s]/n",buffer);

        if (buffer) LocalFree(buffer);
    }

    if ( GetLastError()!=NO_ERROR &&
         GetLastError()!=ERROR_NO_MORE_ITEMS )
    {
        // Insert error handling here.
        return 1;
    }

    //  Cleanup
    SetupDiDestroyDeviceInfoList(hDevInfo);

    return 0;
}

以下代码段演示如何检索系统上的所有显示适配器组:

    hDevInfo = SetupDiGetClassDevs(
        (LPGUID) &GUID_DEVCLASS_DISPLAY,
        0,
        0,
        DIGCF_PRESENT);

以下代码段演示如何检索外围组件互连 (PCI) 总线上的所有设备组:

    hDevInfo = SetupDiGetClassDevs(NULL,
        REGSTR_KEY_PCIENUM, // Enumerator
        0,
        DIGCF_PRESENT | DIGCF_ALLCLASSES );

要求设备实例句柄(如 API 函数的 Config Manager 组)的 Windows API 函数可以使用SetupDiEnumDeviceInfo 函数返回的 SP_DEVINFO_DATA 结构中的 DevInst 值。

http://blog.csdn.net/kl222/article/details/1668843

时间: 2024-10-01 05:15:50

枚举硬件设备的相关文章

【VR】虚拟现实相关硬件设备

虚拟现实(即VR)技术往往要结合各种外在硬件设备(简称外设)来实现. 其相关的硬件设备种类繁多,百度百科上已给出了较完整的陈述. (网址:http://baike.baidu.com/link?url=1hOwqM96DWpqBMage_lzIEpaMkUAENDeTtVxlN1PPXNf0nK6s4enhJttUWABBbG7Ych7eFD9xEbtM4td0pHOkq) 本文主要从Unity引擎开发的角度,对软件开发者触手可及的几种常见的硬件设备进行介绍.本文并不涉及每个硬件设备的SDK的具

Atitit.获取主板与bios序列号获取硬件设备信息&#160;&#160;Wmi&#160;wmic&#160;的作用

Atitit.获取主板与bios序列号获取硬件设备信息  Wmi wmic 的作用 1 获取硬件核心基础核心基础Wmi1 2 其他资料2 3 Wmic WMI 命令行接口2 4 Atitit.获取主板与bios序列号2 5 参考3 1 获取硬件核心基础核心基础Wmi WMI,是Windows 2K/XP管理系统的核心:对于其他的Win32操作系统,WMI是一个有用的插件.WMI以CIMOM为基础,CIMOM即公共信息模型对象管理器(Common Information Model Object 

光驱错误:由于其配置信息(注册表中的)不完整或已损坏,Windows 无法启动这个硬件设备

现象:Windows 无法启动这个硬件设备,卸载后重新扫描还是显示叹号.设备管理器光驱驱动右键属性,提示错误信息:由于其配置信息(注册表中的)不完整或已损坏,Windows 无法启动这个硬件设备. (代码 19) 解决方法: 1. 点开"开始"-运行regedit.exe,进入注册表编辑器,到左边的项目栏里找到HKEY_LOCAL_MACHINE\SYSTEM \CurrentControlSet\Control\Class\{4D36E965-E325-11C E-BFC1-0800

lspci通过系统总线查看硬件设备信息

lspci - 列出所有PCI设备 PCI 的科普: PCI(Peripheral Component Interconnect),是一种连接电子计算机主板和外部设备的总线标准. 常见的PCI卡包括网卡.声卡.调制解调器.电视卡和磁盘控制器,还有USB和串口等端口.原本显卡通常也是PCI设备,但很快其带宽已不足以支持显卡的性能.PCI显卡现在仅用在需要额外的外接显示器或主板上没有AGP和PCI Express槽的情况. 先看下lspci执行的效果,可以查看到硬件信息: 00:00.0 Host

走过硬件设备喧嚣期,互联网正在经历VR、AR进化

(上图为暴风集团副总裁王刚) "暴风魔镜最早打的广告是好奇者的玩具,但是到后面我们就发现仅有好奇心是不够的.暴风魔镜最初卖出30万台的时候,只用了三个月的时间,所以我们非常乐观,觉得在第一年卖100万台完全没有问题.后面发现错了,因为第一个30万台来得非常容易,当年是一帮发烧友,极度对科技充满好奇心的人.但是第二个30万台几乎用了我们一年的时间,那是因为仅卖好奇心是不够的,我们要满足用户需求,真正的需求是什么?" 这是暴风集团副总裁王刚,在5月18日由IT耳朵与镁客网联合举办的&quo

linux常用查看硬件设备信息命令

linux常用查看硬件设备信息命令  系统  # uname -a # 查看内核/操作系统/CPU信息  # head -n 1 /etc/issue # 查看操作系统版本  # cat /proc/cpuinfo # 查看CPU信息  # hostname # 查看计算机名  # lspci -tv # 列出所有PCI设备  # lsusb -tv # 列出所有USB设备  # lsmod # 列出加载的内核模块  # env # 查看环境变量  资源  # free -m # 查看内存使用量

usb由于其配置信息(注册表中的)不完整或已损坏,Windows 无法启动这个硬件设备(代码 19)

今天解决了一晚上,USB驱动的问题: 在设备管理器的usb设备的属性中,显示提示“由于其配置信息(注册表中的)不完整或已损坏,Windows 无法启动这个硬件设备”.注册表坏了.经过查询,解决方法如下: 方法:打开注册表编辑器(开始-->运行-->regedit),依次展开HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Class/在这下面有很多用“{}”括起来的项,一个一个的点开,看右面空口有没有“通用串行总线控制器”这些文字,在右面窗

Linux硬件设备访问

一.mmap设备操作 1.mmap系统调用 void *mmap(void * addr, size_t len, int prot, int flags, int fd, off_t offset) 返回值:内存映射的首地址(虚拟映射区首地址). 功能:内存映射函数mmap,负责把文件内容映射到进程的虚拟内存空间,通过对这段内存的读取和修改(使用指针),来实现对文件的读取和修改,而不需要再调用read,write等操作.实际上内核和应用程序都是使用的虚拟地址,我们不会对物理地址直接操作,而是通

物联网智能硬件设备常见攻击方法

以太网接入型设备,一般分为网线或WiFi两种.不管是WiFi还是网线,可以通过局域网抓包.笔记本WiFi桥接抓包等等手段.最著名的抓包软件 Wireshark如何抓取硬件设备的网络数据包,考量的是网络知识基本功,需要大家自行度娘! 基本准备工作:1,Wireshark监听udp的53端口,一部分硬件设备会使用域名,连接服务器之前,需要首先进行域名解析,走的就是udp53端口,也有极少数可能走tcp532,通过桥接等手段,让硬件设备的任何数据包必须经过本机,Wireshark不设过滤器,通过抓到的