• 枚举硬件设备


    下载源码: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

  • 相关阅读:
    给定一个整数数组和一个目标值,找出数组中和为目标值的两个数 例如给定nums = [2,7,11,15],target = 9
    python的基本语法
    POSIX标准 库文件
    C 标准库头文件
    管理工具:SWOT、PDCA、6W2H、SMART、WBS、时间管理
    函数指针和指针函数的区别
    Linux之正则表达式1
    windows与linux换行规则
    Linux之find
    Linux之文件(目录)默认权限、特殊权限与隐藏权限
  • 原文地址:https://www.cnblogs.com/findumars/p/5625557.html
Copyright © 2020-2023  润新知