我通过SetUpDiXXX函数可以按照class枚举系统设备,可是有些设备是虚拟的,有些设备是板载集成的,有没有一种机制可以判断一个独立的物理设备,比如CPU、显卡、内存条等等。MSDN说 setup class是按照设备能力来分类的,不是按照device location(总线类型,接口类型)来分的。而且在我看来,这些都是针对驱动来分类的。光驱可以有虚拟的,不过仍然在 CDROM 类里面,(上面提到的 CPU、显卡、内存条 估计虚拟的几率不大……呵呵)谁能讲讲,如何区分 (插在主板上的,但不是板载的) 和 (通过USB等接口连接的) 设备呢?谢谢。

解决方案 »

  1.   

    刚才找到一个获取硬盘信息的代码
    两种方式,PhysicalDrive方法和SCSI mini port方式。
    就是 DeviceIoControl 发送ID命令。
    \\.\\ScsiX
    \\.\\PhysicalDriveX不过winioctl.h貌似只对disk、存储媒体等定义了很多的结构与宏
    我看到一个 FILE_DEVICE_VIDEO ,却不知道该怎么用……是不是这种方式就不适用了?我如果要枚举PCI、PCI-E、AGP设备并把存在的设备的设备信息(型号信息,更过的没用啊~)获取到,该怎么办呢?
      

  2.   

    对于微软 能掌控的东西,WMI能获得精确的数据,其他都是默认值,要不就是没有值1. 我要通过某某某,获得,内存条的个数,每条内存的型号信息 和 容量大小
    2. 通过XXX,获得通过IDE SATA 等插在主板上的 硬盘、光驱设备(这两样有几个算几个,都要获得,能够判断其厂商型号的数据信息即可,多余的细节指标用不到,用WMI,哎虚拟光驱、U盘加载的逻辑卷都算再内了……)
    3. 通过YYY,获得主板厂商 和 型号 哪位高人指点一下,看哪些软、硬件资料、技术文档、权威网站……,能够解惑?谢谢。
      

  3.   

    你的需求其实有一些现成的软件等可以做到..Everest ultimate(原名AIDA32),是一个测试软硬件系统信息的工具,它可以详细的显示出PC每一个方面的信息。支持上千种(3400+)主板,支持上百种(360+)显卡,支持对并口/串口/USB这些PNP设备的检测,支持对各式各样的处理器的侦测。目前Everest Home已经能支持包括中文在内的30种语言,让你轻松使用。而且经过几次大的更新,现在的Everest已经具备了一定的硬件测试能力,让您对自己电脑的性能有个只管的认识。最新版本更新如下:1.修正了Intel i940/945/955/975/E7230芯片组信息显示方面的错误。2.增加对Ageia无理卡的支持。3.修正...  --- 而这种软件住主要就是它对于各种硬件的分析,从而得到对应的模板库,它运行的时候就匹配当前信息以及它自己的模板库等来实现...
      

  4.   

    我这里的意思就是,方法自然是包含各种方法,不同硬件信息等,通过不同的方法,有些通过WMI,有些通过底层驱动,有些通过BIOS等,而这个数据库显然是收集不同的硬件信息,然后根据前面多种方法得到的信息,然后从数据库来分析得出硬件的型号,品牌等,这一类软件,最值钱的东西就是这些各个硬件信息的收集,分析等..
      

  5.   

    囧了。你说的这些我都知道。真的是等于没说。现在我已经通过各种方式,获取到了cpu Brand信息,硬盘序列号(听说有的硬盘没序列号??),还有主板的 制造商、Product 信息,现在就差内存硬件信息(所插内存条数量,每个的牌子、容量即可)。我也得到了SMBios规范pdf,不过看那玩意儿是个细活……再有就是底层驱动了,和哪个驱动打交道呢?个人猜测,既然是要获得“插在主板上的硬件”的信息,那么可能就要通过南北桥芯片,不知道这两东西,在windows中的对象名称是啥?或者在驱动层访问特定地址即可?可能我问错地方了……