[python-win32] Still looking for a method to get CPUID info ...
Tim Roberts
timr at probo.com
Tue Jan 5 23:15:31 CET 2010
J wrote:
> On Tue, Jan 5, 2010 at 16:53, Tim Roberts <timr at probo.com> wrote:
>
>
>> C:\tmp>python
>> Python 2.6.2 (r262:71605, Apr 14 2009, 22:40:02) [MSC v.1500 32 bit
>> (Intel)] onwin32
>> Type "help", "copyright", "credits" or "license" for more information.
>> >>> import ctypes
>> >>> c = ctypes.windll.cpuid
>> >>> hex(c.GetCpuidEcx())
>> '0x444d4163'
>> >>> hex(c.GetCpuidEdx())
>> '0x69746e65'
>>
>
> Also have to figure out how to decode the hex value into a more user
> friendly format ;-) BUT I think there was a white paper or something
> that I have bookmarked somewhere that does have hex values for the
> various flags, at least according to the Intel specs, assuming that
> vendors (in this case IBM) hasn't mucked with them.
>
Well, those hex values are actually part of the string "AuthenticAMD"
that gets returned in ebx, edx, and ecx in response to the standard
"cpuid" (since I'm running an AMD 64X2). That's because I used the
"eax=0" variant of cpuid. For the version you want, you'd set eax to 1
before invoking "cpuid", which would return the feature capability
bits. Replace the code with this:
GetCpuidEcx proc public, style:DWORD
mov eax, [style]
cpuid
mov eax, ecx
ret
GetCpuidEcx endp
GetCpuidEdx proc public, style:DWORD
mov eax, [style]
cpuid
mov eax, edx
ret
GetCpuidEdx endp
Now I can pass the cpuid code as a parameter:
C:\tmp>python
Python 2.6.2 (r262:71605, Apr 14 2009, 22:40:02) [MSC v.1500 32 bit
(Intel)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import ctypes
>>> c = ctypes.windll.cpuid
>>> c.GetCpuidEcx(1)
1
>>> hex(c.GetCpuidEdx(1))
'0x178bfbff'
>>>
--
Tim Roberts, timr at probo.com
Providenza & Boekelheide, Inc.
More information about the python-win32
mailing list