Seite 2 von 3

Re: Angemeldeter Benutzer

Verfasst: 24.06.2010 15:53
von bobobo
Wenn Einträge in der Registry für den User erstellt werden sollen sobald sich der User anmeldet,
warum machst Du das dann nicht genau auch beim Anmelden des Users ?

'Ne simple Lösung für Deine vermutetes Problem gibt es wohl eher nicht.

Re: Angemeldeter Benutzer

Verfasst: 24.06.2010 20:25
von Blackskyliner
purebas hat geschrieben: @bobobo
Die Programme nutzen mir nichts, da ich die Funktion innerhalb meines
PureBasic-Programms benötige.

Es muss doch irgendeinen Registereintrag geben, damit ich den am Computer
angemeldeten Benutzer ermitteln kann. Es muss doch einen PB-Programmierer
geben, der die Funktion ebenfalls schon benötigt und eine Lösung hat. :shock:
Du kannst doch das Programm als Datasection o.ä. in dein Programm einbetten und dann entsprechend an der Speicheradresse callen, dann ist es _innerhalb_ des Programms :)

Das Problem ist, das alle Funktionalen Lösungen es nun mal nicht vorsehen bei einem RunAs anzunehmen das da ein "Oberuser" bestehen könnte. Der Sinn und zweck am RunAs ist ja, dass sich das Programm verhält wie als wenn es von demjenigen ausgeführt wurde. Wenn du aus einem Programm heraus einen OpenFileRequester() erzeugst, dann sind die Einträge ja auch je nachdem welcher Benutzer das Programm geöffnet hat, also die Favoriten an der Linken Seite, die des öffnenden Nutzers.

Die Lösung mit der Registry klappt ja insofern nicht, da der UserHive vom RunAs User geladen wird, wie gesagt es wird erwartet dass sich das Programm so verhält, wie wenn der Benutzer es ausgeführt hätte.

Meine Überlegung währe das man einen eigenen RunAs Loader bastelt der, bevor es das Programm via RunAs startet, eine Datei irgendwo anlegt wo jeder Zugriff hat und dort den aktuellen User rein schreibt. Diese Datei kann dann entsprechend vom Programm ausgewertet werden... Oder das ganze als StatupScript was in den Autostart kommt und da entsprechend eine Datei anlegt, wer der aktuell angemeldete Benutzer ist, etc.

Hoffe ich habe ein bisschen geholfen :)

Re: Angemeldeter Benutzer

Verfasst: 25.06.2010 10:53
von purebas
bobobo hat geschrieben:Wenn Einträge in der Registry für den User erstellt werden sollen sobald sich der User anmeldet,
warum machst Du das dann nicht genau auch beim Anmelden des Users ?
Nein, nicht gut.

Ich habe ein Konfigurationsprogramm, welches mit Adminrechten gestartet wird.
Nach den Änderungen werden einerseits Registry-Einträge unter HKLM gespeichert
und andererseits unter den USER-Zweig des am Rechner angemeldeten Benutzers.
Damit ich also in den richtigen USER-Zweig schreiben kann, benötigt das
Konfigurationsprogramm den entsprechenden UserName.

Das aufrufende Programm kann ich jedoch nicht ändern.
Sonst könnte ich einfach eine Datei-Schnittstelle oder so etwas bauen.

Re: Angemeldeter Benutzer

Verfasst: 25.06.2010 10:57
von purebas
@Blackskyliner

Wenn ich runas mit der Option /env benutze, dann wird die Umgebung
vom aufrufenden Benutzers beibehalten. Dort hätte ich dann den
korrekten UserName. Aber, das aufzurufende Konfigurationsprogramm
wird nicht mit runas /env aufgerufen. Ich brauche eine Lösung die
immer funktioniert.

Das aufrufende Programm kann ich jedoch nicht ändern.
Sonst könnte ich einfach eine Datei-Schnittstelle oder so etwas bauen.

Re: Angemeldeter Benutzer

Verfasst: 25.06.2010 12:40
von Deluxe0321
Vll. schieße ich jetzt am Thema vorbei aber:

Code: Alles auswählen

*Buffer = AllocateMemory(100)  :  Len.i = 100
GetUserName_(*Buffer,@len)
MessageRequester("User is",PeekS(*Buffer))
Oder GetUserNameEx_(). Genügt das nicht?

Grüße

Re: Angemeldeter Benutzer

Verfasst: 25.06.2010 13:27
von purebas
GetUserNameEx funktioniert analog zu GetUserName.

Ich habe doch alles gut beschrieben... >_<

Ich möchte nicht den aktuellen Benutzernamen, sondern den Namen vom Benutzer der momentan am System angemeldet ist!

Wenn ein Benutzer ein Programm mit runas beispielsweise unter Administrator startet, dann möchte ich (bzw. das aufgerufene Programm)
wissen, welcher Benutzer am Rechner angemeldet ist und nicht unter welchem Kontext das Programm / der Prozess läuft.

Weiss denn darüber wirklich niemand Bescheid? Ich denke mit WMI könnte es gehen. Aber gibt es nicht ein einfacheres Mittel.
Ein RegDB-Eintrag oder eine API-Funktion?

-

Mittlerweile habe ich etwas erfolgversprechendes entdeckt:

Unter "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" gibt es einen Eintrag "AltDefaultUserName".

Hier steht auf meinen Rechner auch nach runas der gleiche Eintrag.
Ich bin mir nur nicht sicher warum der Eintrag mit "Alt" beginnt.
Vielleicht kann man sich darauf nicht 100% verlassen?

Re: Angemeldeter Benutzer

Verfasst: 25.06.2010 13:51
von jpd
Hallo purebas,

möglicherweiser wird dir dieser Link helfen:

http://www.purebasic.fr/german/viewtopi ... 41#p230841

Ciao
jpd

Re: Angemeldeter Benutzer

Verfasst: 25.06.2010 14:17
von Kiffi
purebas hat geschrieben:Ich habe doch alles gut beschrieben... >_<
ruhig, Brauner! Nicht motzen, wenn die anderen versuchen,
Dir zu helfen. WMI willste ja nicht. Deswegen halte ich die
Füsse still.

Grüße ... Kiffi

Re: Angemeldeter Benutzer

Verfasst: 25.06.2010 14:34
von purebas
Neben dem o.g. RegDB-Eintrag und runas mit Option /env,
gibt es noch den Befehl "netsh diag show computer /v".
Dieser Befehl zeigt offenbar den angemeldeten UserName.
Dabei ist es egal welcher Benutzer für runas genommen wurde.
Aber eventuell geht netsh auch über WMI...

@Kiffi

OK. Anscheinend gibt es keine einfache Variante.
Dann gibt mir doch bitte ein kleines Beispiel mit WMI!

Re: Angemeldeter Benutzer

Verfasst: 25.06.2010 15:12
von Shardik
Mit folgendem Programmaufruf (das Programm soll in Windows XP und Windows
Server 2003 vorhanden sein, andere Versionen könnte man ja einmal testen),
geht es:
QWINSTA.EXE console /SERVER:%COMPUTERNAME%
Unter BENUTZERNAME steht bei mir dann nicht mehr der Administrator-Name,
sondern der Name des Nutzers, der die Konsole mit "Ausführen als" gestartet hat.

Eigentlich war zur Problemlösung nur der richtige Google-Suchaufruf nötig: :wink:
Get user who started RunAs
Dort ist es der 10.Eintrag:
http://www.pcreview.co.uk/forums/thread-517859.php

Eine WMI-Variante ist in diesem Link auch aufgeführt. :wink: