| Sys-Info-Driver-Windows documentation | Contained in the Sys-Info-Driver-Windows distribution. |
Sys::Info::Driver::Windows::Device::CPU::WMI - Fetch CPU metadata through WMI
Nothing public here.
This document describes version 0.78 of Sys::Info::Driver::Windows::Device::CPU::WMI
released on 17 April 2011.
WMI plugin.
Sys::Info, http://vbnet.mvps.org/index.html?code/wmi/win32_processor.htm, http://msdn2.microsoft.com/en-us/library/aa394373.aspx, http://support.microsoft.com/kb/894569.
Burak Gursoy <burak@cpan.org>.
Copyright 2006 - 2011 Burak Gursoy. All rights reserved.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.12.2 or, at your option, any later version of Perl 5 you may have available.
| Sys-Info-Driver-Windows documentation | Contained in the Sys-Info-Driver-Windows distribution. |
package Sys::Info::Driver::Windows::Device::CPU::WMI; use strict; use warnings; use constant LOAD_DIV => 100; use constant VOLTAGE_DIV => 10; use base qw( Sys::Info::Base ); use Win32::OLE qw( in ); use Sys::Info::Driver::Windows qw( :WMI ); use Sys::Info::Driver::Windows::Device::CPU::WMI::Conf; our $VERSION = '0.78'; my $WMI_INFO = $CONF{info}; my %RENAME = %{ $CONF{rename}{cpu} }; my %CACHE_MEMORY_NAMES = %{ $CONF{rename}{cache_memory} }; my %LCACHE_NAMES = %{ $CONF{rename}{lcache} }; # TODO: Only available under Vista my @VISTA_OPTIONS = qw( L3CacheSpeed L3CacheSize ); my @__JUNK = qw( ConfigManagerErrorCode ConfigManagerUserConfig ErrorCleared ErrorDescription InstallDate L2CacheSpeed LastErrorCode OtherFamilyDescription PNPDeviceID PowerManagementCapabilities PowerManagementSupported UniqueId VoltageCaps ); POPULATE_UNSUPPORTED: { for my $j( @__JUNK ){ $RENAME{ $j } = '____' . $j; } } sub _from_wmi { my $self = shift; local $SIG{__DIE__}; local $@; my %LCACHE; my @names = keys %CACHE_MEMORY_NAMES; foreach my $f ( in WMI_FOR('Win32_CacheMemory') ) { my $purpose = $f->Purpose; next if $purpose !~ m{ \A L \d \- Cache }xmsi; $LCACHE{ $LCACHE_NAMES{ $purpose } } = { map { $CACHE_MEMORY_NAMES{$_} => $f->$_() } @names }; } my @attr; OUTER: foreach my $cpu (in WMI_FOR('Win32_Processor') ) { my %attr; INNER: foreach my $name (keys %RENAME) { my $val; my $eok = eval { $val = $cpu->$name(); 1; }; if ( $@ || ! $eok ) { warn '[WMI ERROR] ' . ( $@ || '<Unknown error>') . "\n"; next INNER; } next INNER if ! defined $val; if ( $name eq 'Name' ) { $val =~ s{\s+}{ }xmsg; $val = $self->trim( $val ); } my $ren = $RENAME{$name}; $attr{ $ren } = $WMI_INFO->{ $name }{ $val } || $val; } if ( $attr{bus_speed} && $attr{speed} ) { $attr{multiplier} = sprintf '%.2f', $attr{speed} / $attr{bus_speed}; } $attr{current_voltage} /= VOLTAGE_DIV if $attr{current_voltage}; # LoadPercentage : returns undef $attr{load} = sprintf '%.2f', $attr{load} / LOAD_DIV if $attr{load}; push @attr, {%attr, %LCACHE }; } return @attr; } 1; __END__