Autor Beitrag
Billi Berserker
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 44



BeitragVerfasst: Fr 02.03.07 02:58 
Um die CPU Auslastung auszulesen hab ich bisher die adCpuUsage Unit von www.aldyn.ru/products/cpu_usage/index.html benutzt. Durch die verschärften Sicherheitsrichtlinien in Vista (normaler User = kein Admin) funktioniert das ganze natürlich nicht mehr.
Das Problem steckt vermutlich hier:
ausblenden Delphi-Quelltext
1:
2:
        while RegQueryValueEx( HKEY_PERFORMANCE_DATA, Processor_IDX_Str, nilnil,
                PByte(_PerfData), @BS ) = ERROR_MORE_DATA do

Aus einem mir absolut unbegreiflichen Grund scheint der Zugriff auf den performance data registry key für nicht Administrator Accounts gesperrt zu sein. Führe ich die Anwendung als Administrator aus funktioniert das ganze ohne Probleme (d.h. den performance data registry key gibt es nocht).
Ich habe bereits stunden damit zugebracht diverse Foren (u.a. auch MSDN Support) zu durchsuchen und bis auf einen unbeantwortetten Beitrag zum selben Problem konnte ich nirgens etwas finden.

Hat eventuell hier schon jemand Erfahrungen damit unter Vista gemacht?
Und läßt sich das ganze eventuell über ein Manifest lösen? (aber bitte keins was Admin Rechte für die Anwendung verlangt).

Ich kenne mich leider mit der RegQueryValueEx funktion nicht aus (selbst nocht nie benutzt). Gibt es hier eventuell alternativen oder Parameter mit der der Registry mit stark eingeschränkten (Read Only?) Rechten geöffnet werden kann?
HelgeLange
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 735
Erhaltene Danke: 6

Windows 7
Delphi7 - Delphi XE
BeitragVerfasst: Fr 02.03.07 03:47 
Die dort benutzten Form kenne ich nicht, aber das TRegistry-Object kann einen Key read-only öffnen. Vielleicht wäre das ein Ansatz, oder?

_________________
"Ich bin bekannt für meine Ironie. Aber auf den Gedanken, im Hafen von New York eine Freiheitsstatue zu errichten, wäre selbst ich nicht gekommen." - George Bernhard Shaw
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 02.03.07 18:34 
user profile iconBilli Berserker hat folgendes geschrieben:
Und läßt sich das ganze eventuell über ein Manifest lösen? (aber bitte keins was Admin Rechte für die Anwendung verlangt).

a) Wieso nicht? b) Wie wäre es dann mit "asInvoker". Im Web kursiert eine Anleitung für Delphi, wie man ein Programm so schreibt, dass es zum einen normal läuft und erst dann per Vista eine Abfragebox anzeigen lässt, wenn man Funktionen verwendet, die erweiterte Rechte benötigen.

Zitat:
Gibt es hier eventuell alternativen oder Parameter mit der der Registry mit stark eingeschränkten (Read Only?) Rechten geöffnet werden kann?

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.
matze
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 4613
Erhaltene Danke: 24

XP home, prof
Delphi 2009 Prof,
BeitragVerfasst: Fr 02.03.07 18:55 
Hast du auch einen Link zu eben diesem Artikel?

_________________
In the beginning was the word.
And the word was content-type: text/plain.
Billi Berserker Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 44



BeitragVerfasst: Fr 02.03.07 22:16 
user profile iconMathiasSimmack 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 :(