MathiasSimmack hat folgendes geschrieben: |
Ja. Findet sich in Luckies Win32-API-Tutorials (KEY_READ) und wird beim Öffnen per "RegOpenKeyEx" angegeben. Guck mal in deinem Code ein paar Zeilen vor dem gezeigten Teil. |
Das ist das was mich gerade etwas wundert. Denn vor dem RegQueryValueEx() kommt kein RegOpenKeyEx(). Also gehe ich mal schwer davon aus das dadurch der Key mit irgendwelchen Standard Einstellungen geöffnet wird welche wahrscheinlich KEY_ALL_ACCESS sind was unter Vista nicht so richtig will?
Hab mich jetzt zwar schon selbst dran versucht vor den RegQueryValueEx noch einen RegOpenKeyEx davor zu setzen, aber irgendwie bin ich mir da sehr unsicher wie für den Performance Data Key die richtigen Parameter sind.
[Edit]
Auch recht interessant ist das auf der ensprechenden MSDN Seite zu RegQueryValueEx unten ein Beispiel angegeben ist, dort fehlt das RegOpenKeyEx ebenfalls.
msdn2.microsoft.com/...ibrary/ms724911.aspx
[Edit2]
In einem Knowledge Base Artikel bei Microsoft.com hab ich nun noch folgendes gefunden:
"The following sample code demonstrates how to use RegQueryValueEx to retrieve the object and counter titles. This method does not require opening the registry key...".
Das heißt wenn man mit RegQueryValueEx auf den HKEY_PERFORMANCE_DATA Zugreift dann direkt ohne RegOpenKeyEx()... beim MSDN Artikel für RegOpenKeyEx() wird HKEY_PERFORMANCE_DATA auch nicht als möglicher Parameter für den Key angegeben.
[Edit3]
Ausgehend von diesem Knowledge Base Artikel:
support.microsoft.com/kb/146906/en-us gehe ich mal davon aus das Microsoft in Vista eine verschärfte Version davon implementiert hat. Eine Überprüfung des Keys HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib in meiner Registry ergab das mein normaler Useraccount Tatsächlich keine Zugriffsrechte auf den Key hat. Einfaches Hinzufügen meines Benutzeraccounts hat das Problem behoben.
Bleibt die Frage was man dagegen tuen kann außer von jedem User zu erwarten das er seinem Account die Entsprechenden Berechtigungen gibt.
In dem Knowledge Base Artikel gibt es zwar Beispiel code den man mit etwas modifizierung dazu nutzen könnte um das ganze einmalig zu automatisieren, aber irgendwie grauts mir ein wenig vor der Konvertierung des Codes nach Delphi
