Also das Problem liegt nicht bei Vista sondern bei der Anzahl der Kerne. Du bekommst für jeden Kern eine solche Stuktur und der angegebene Fehler entspricht demnach STATUS_BUFFER_TOO_SMALL.
Ich hab das ganze mal so verwendet:
Delphi-Quellcode:
procedure TForm.ButtonClick(Sender: TObject);
var SysInfo: SYSTEM_INFO;
PowerInfos: Pointer;
PowerInfoArray: array of PROCESSOR_POWER_INFORMATION;
size, ret: Cardinal;
i: Integer;
begin
GetSystemInfo(SysInfo);
size := SizeOf(PROCESSOR_POWER_INFORMATION) * SysInfo.dwNumberOfProcessors;
GetMem(PowerInfos, size);
ZeroMemory(PowerInfos, size);
ret := CallNTPowerInformation(11, nil, 0, PowerInfos, size);
if ret = ERROR_SUCCESS then
begin
PowerInfoArray := PowerInfos;
for i := 0 to SysInfo.dwNumberOfProcessors - 1 do
begin
Memo.Lines.Add(IntToStr(PowerInfoArray[i].Number));
Memo.Lines.Add(IntToStr(PowerInfoArray[i].CurrentMhz));
//...
end;
end
else
//Fehler...
FreeMem(PowerInfos, size);
end;
Ich fürchte meine ehemaligen Basteleien sind aber alles andere als sauber. Vielleicht schaut da noch mal jemand drüber.