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

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

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

   大家不必对这两款小工具感到惊讶,实际上他们在实现的技术上并没有高超地方。在获取cpu数据上,其中很大一部分都是通过使用CPUID指令来实现的,这个指令相当强大,感兴趣的话,最好是到intel和amd官方网站下相关手册看看。首先一个就是mov eax,0获取cpu信息,来判断是intel的cpu,amd的cpu或其他厂家的。在这之后就是使用不同cpu厂家各自的cpuid指令获取如cpu id,名称,高速缓存信息,特性,实时cpu速度等。当然了,光是使用cpuid不能得到一些更为详细的数据,比如intel实际的cpu核心数,在这个上面我一直没有找到方法来得到实际的核心数,而不是通过超线程的模拟的核心个数。那么cpuz又是如何做到的呢。刚开始就猜想是cpuz内部有个类似数据库,根据不同型号的cpu枚举出详细的cpu参数信息。在通过逆向分析中,发现这个小工具中果真是有一堆cpu参数信息。到这里对于cpuz的分析就差不多了,要是想得到cpu更详细的信息,最好是看各个cpu厂家的官方手册进行。

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


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/whf727/archive/2009/06/23/4292720.aspx

猜你喜欢

转载自blog.csdn.net/myemailsz/article/details/5683968
z