zoukankan      html  css  js  c++  java
  • WIN32编程 通过使用SetupDi 调用函数枚举硬件设备

    要得到 Windows 2000 中安装的硬件设备列表,应用程序可以调用 SetupDi 类 API 函数。
    以下代码段演示如何显示已经安装的所有硬件设备的列表:

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

    #pragma comment(lib,"Setupapi.lib")


    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 = (LPTSTR)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 );

  • 相关阅读:
    HDU 1874 畅通project续 最短路径入门(dijkstra)
    怎样推断 ios设备的类型(iphone,ipod,ipad)
    双向数据绑定---AngularJS的基本原理学习
    常见的CPU訪问引起的内存保护问题为什么仅仅用event_122上报
    最简单的基于FFmpeg的视频编码器-更新版(YUV编码为HEVC(H.265))
    【Java项目实战】——DRP之HTML总结
    myql5.7.7优化配置參数
    2014年七月最佳jQuery插件荟萃
    敏捷DoD完毕定义的多种形态
    c#网络通信框架networkcomms内核解析之三 消息同步调用
  • 原文地址:https://www.cnblogs.com/MaxWoods/p/754226.html
Copyright © 2011-2022 走看看