Ich benutze diesen Code um den Processor Performance Counter auszulesen (um den CPU Verbrauch pro Kern zu bekommen):
Delphi-Quellcode:
while RegQueryValueEx( HKEY_PERFORMANCE_DATA, Processor_IDX_Str,
nil,
nil,
PByte(_PerfData), @BS ) = ERROR_MORE_DATA
do
begin
// Get a buffer that is big enough.
INC(_BufferSize,$1000);
BS:=_BufferSize;
ReallocMem( _PerfData, _BufferSize );
end;
// Locate the performance object
_POT := PPERF_OBJECT_TYPE(DWORD(_PerfData) + _PerfData.HeaderLength);
for i := 1
to _PerfData.NumObjectTypes
do
begin
if _POT.ObjectNameTitleIndex = Processor_IDX
then Break;
_POT := PPERF_OBJECT_TYPE(DWORD(_POT) + _POT.TotalByteLength);
end;
// Check for success
if _POT.ObjectNameTitleIndex <> Processor_IDX
then
begin
raise Exception.Create('
Unable to locate the "Processor" performance object');
Exit;
end;
Es funktioniert problemlos unter WindowsXP.
Unter Vista (32 Bit) und 7 (64 Bit) bekomme ich jedoch eine
Exception die aussagt dass der Performance Counter nicht gefunden wurde.
Starte ich jedoch meine exe als Administrator, dann funktioniert alles wunderbar.
Kann es denn wirklich war sein dass ich sogar für den lesenden Zugriff auf Performance Counters Admin Rechte brauche?