简要分析cpu-z和gpu-z软件

   最近一直在搞获取cpu、显卡等硬件相关信息。搞的有点头大,获取硬件信息一般通过SetupDIXxxx类的函数获取相关的邮件信息,或者直接读取相关注册表中的数据,还有就是通过WMI方式获取(这在之前的文章中有提到,这里就不在论述了。)。几乎所有的数据都是可以从注册表中获取的。只不过这种方法比较繁琐一点。在setupapi.h中有很多函数,而且有很多在ddk或msdn中并没有讲述的api,大家有兴趣可以研究一下。

    接下来主要是讲讲,我最近搞的这个获取cpu和显卡信息的问题。对于硬件检测工具,有很多强大的工具,其中在获取cpu和显卡上,数cpuz和gpuz最nx了(或许还有更好的)。为什么这么说呢。不仅因为这两款小软件是专业,在同其他检查工具中获取cpu和显卡信息中,这两款工具的数据非常精确,详细。那么他们是如何实现的呢?这个我们慢慢来讨论。

   cpuz显示的数据关于cpu信息那些部分完成时靠cpuid指令获取到得。你不仅可以得到cpu family,model,stepping等信息,cpuid sn,缓存信息,acpiid,核心数,线程数,cpu特性等信息。都是使用这个命令获取到得。之后后面的内存信息,主板信息,芯片信息。其中主板名称,这个获取方式挺多的,cpuz是通过读取dmi信息的。dmi信息的获取在我后面的文章smbios中有介绍。内存和芯片信息,完全是靠驱动进行的,主要就是读写端口。枚举pci总线就可以得到总线上面的东西。

   gpuz这是个让人头疼的东西,因为之前通过其他方式获取的显存信息和gpuz获取的数据不同,因为在系统层获取的显存信息是实际分配给显卡使用的,这其中包括了将内存划分给显卡使用的,也就是共享显存的大小,根本得不到独立显存的大小。查看其他的硬件检测工具发现,它们获取到得显存的大小也和我一样都是共享显存大小,而不是硬件独立显存的大小。为了获取独立显存信息,这可让我很是费劲。同样,通过分析gpuz的工作原理,它首先是使用setupdixxx函数获取显卡的型号进行分析的,到这里我们可以猜到gpuz和cpuz一样都是有自己的库的。其实其他的硬件检测工具,都是带有一个库的,这个数据库就是用来存放各种硬件型号,和参数的。

你可能感兴趣的:(Windows,系统编程)