Angemeldeter Benutzer

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: Angemeldeter Benutzer

Beitrag 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.
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
Blackskyliner
Beiträge: 532
Registriert: 28.07.2005 00:54
Wohnort: /home/Blackskyliner/

Re: Angemeldeter Benutzer

Beitrag 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 :)
Keine meiner Antworten ist endgültig, es kann passieren, dass ich den so eben geposteten Beitrag noch mehrmals ändere, um Doppelposts zu umgehen.
_________________
Purebasic Windows 7 x64 & Linux (Ubuntu 10.04LTS) 4.50[x64|x86] Nutzer
_________________
Projekte: YAED - Yet another Event Dispatcher
Benutzeravatar
purebas
Beiträge: 127
Registriert: 11.03.2008 23:59
Wohnort: München

Re: Angemeldeter Benutzer

Beitrag 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.
Benutzeravatar
purebas
Beiträge: 127
Registriert: 11.03.2008 23:59
Wohnort: München

Re: Angemeldeter Benutzer

Beitrag 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.
Benutzeravatar
Deluxe0321
Beiträge: 336
Registriert: 19.05.2006 00:31
Kontaktdaten:

Re: Angemeldeter Benutzer

Beitrag 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
Ich habe keine Lösung, aber ich bewundere das Problem.
Benutzeravatar
purebas
Beiträge: 127
Registriert: 11.03.2008 23:59
Wohnort: München

Re: Angemeldeter Benutzer

Beitrag 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?
Benutzeravatar
jpd
Beiträge: 380
Registriert: 14.02.2005 10:33

Re: Angemeldeter Benutzer

Beitrag von jpd »

Hallo purebas,

möglicherweiser wird dir dieser Link helfen:

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

Ciao
jpd
PB 5.10 Windows 7 x64
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Angemeldeter Benutzer

Beitrag 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
a²+b²=mc²
Benutzeravatar
purebas
Beiträge: 127
Registriert: 11.03.2008 23:59
Wohnort: München

Re: Angemeldeter Benutzer

Beitrag 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!
Benutzeravatar
Shardik
Beiträge: 746
Registriert: 25.01.2005 12:19

Re: Angemeldeter Benutzer

Beitrag 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:
Zuletzt geändert von Shardik am 25.06.2010 15:19, insgesamt 2-mal geändert.
Antworten