AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Angemeldeten Benutzer aus Dienst ermitteln - Windows 7
Thema durchsuchen
Ansicht
Themen-Optionen

Angemeldeten Benutzer aus Dienst ermitteln - Windows 7

Ein Thema von kuba · begonnen am 7. Sep 2009 · letzter Beitrag vom 8. Apr 2010
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von kuba
kuba

Registriert seit: 26. Mai 2006
Ort: Arnsberg
588 Beiträge
 
Delphi 11 Alexandria
 
#1

Angemeldeten Benutzer aus Dienst ermitteln - Windows 7

  Alt 7. Sep 2009, 18:22
Hallo,

ich verwende zur Zeit folgenden Code der in diesem Thread ermittelt wurde, um den aktuell angemeldeten Benutzer zu ermitteln:


Delphi-Quellcode:

function GetLUserName : string;
var
  Token : TJWSecurityToken;
begin
  Token := TJwSecurityToken.CreateWTSQueryUserToken();
  try
    try
      Result := Token.TokenOwner.AccountName[''];
      //AddToLog('Username requested: ' + Result);
    except
      on e : Exception do
      begin
        //AddToLog('@GetUsername' + #13#10 + e.Message);
        Result := '';
      end;
      on e : EJWSCLProcessNotFound do
      begin
        //AddToLog('No user is loged on');
        Result := '';
      end;
    end;
  finally
    Token.Free;
  end;
end;
Das funktioniert einwandfrei mit Windows Vista, mit Windows 7 crascht die Routine jedoch.
Kann mir jemand sagen woran das liegt ? Sind meine JEDI's zu alt ?

KUBA
Stefan Kubatzki
E=mc2
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

Re: Angemeldeten Benutzer aus Dienst ermitteln - Windows 7

  Alt 7. Sep 2009, 18:24
was heißt "crascht"?
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von kuba
kuba

Registriert seit: 26. Mai 2006
Ort: Arnsberg
588 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Angemeldeten Benutzer aus Dienst ermitteln - Windows 7

  Alt 7. Sep 2009, 18:31
Der NT-Service steigt (bei Windows 7, und auch bei Windows 2000) direkt nach dem Start wieder aus, mit Systemfehler 1067.
Dass der Code unter Win2000 nicht funktioniert ist ja bekannt, aber dass er in Vista funktioniert und in Windows 7 nicht mehr ist doch seltsam,oder ?

kuba
Stefan Kubatzki
E=mc2
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

Re: Angemeldeten Benutzer aus Dienst ermitteln - Windows 7

  Alt 7. Sep 2009, 18:40
1067 = ERROR_PROCESS_ABORTED = The process terminated unexpectedly.

hmmm, sehr hilfreich

Dann würde ich mal die Log-Funktionen nutzen und schauen was da nicht will.

Wobei bei dieser Funktion eigentlich nicht viel passieren sollte, da die Exceptions ja abgefangen würden ... also würde ich vermuten, daß es an was anderem liegt.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von kuba
kuba

Registriert seit: 26. Mai 2006
Ort: Arnsberg
588 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Angemeldeten Benutzer aus Dienst ermitteln - Windows 7

  Alt 7. Sep 2009, 18:48
sicher, Name des fehlerhaften Moduls: KERNELBASE.dll

anscheinend fehlt der Aufruf der Funktion in der DLL, oder sind meine Jedi's vielleicht doch zu alt ?
Habe erst seit ca. 2 Monaten Vista drauf und Teste meinen Code jetzt auch mit der Windows 7 Testversion unter Virtual Box...

Bin schon den halben Tag am googeln was Systemfehler 1067 bedeutet, jetzt weiss ich jedoch dass es an der GetUsername Routine liegt ...

Also, ich hätt schon ne Idee wie es "ordentlich" funktionieren würde. Leider hab ich nicht so den Plan ...
Vielleicht kann mir jemand erklären wie man folgenden Codeschnipsel ändern muss um eine Funktion statt ein Programm aufzurufen.
Kann eigentlich nicht so schwierig sein, komme aber leider nicht selbst drauf ...

Delphi-Quellcode:
 try
        CmdLine := Format('"%s%s" %s',[IncludeTrailingPathDelimiter(PW1),PW2,PW3]);
        FillChar(SI, SizeOf(SI), #0);
        FillChar(PI, SizeOf(PI), #0);
        SI.cb := SizeOf(SI);
        SI.lpDesktop := PChar('WinSta0\Default');
        SI.dwFlags := STARTF_USESHOWWINDOW;
        SI.wShowWindow := SW_SHOWDEFAULT;
        ProcCreated := CreateProcessAsUser(
                            hUserToken,
                            nil,
                            PChar(CmdLine), // pointer to command line string HIER MÖCHTE ICH GERN EINE FUNKTION AUFRUFEN !!!
                            nil, // pointer to process security attributes
                            nil, // pointer to thread security attributes
                            True, // handle inheritance
                            0, // creation flags
                            nil, // pointer to new environment block
                            nil, // pointer to current directory name
                            SI, // STARTUPINFO
                            PI); // PROCESS_INFORMATION

        if ProcCreated then
        begin
            CloseHandle(PI.hProcess);
            CloseHandle(PI.hThread);
        end
        else
            ShowMessage('Error ' + SysErrorMessage(GetLastError));
    finally
        CloseHandle(hUserToken);
    end;
diese Funktion möchte ich gern mit o.g. Routine aufrufen:

Delphi-Quellcode:
function GetUserName : string;
var
  Token : TJwSecurityToken;
begin
  Token := TJwSecurityToken.CreateTokenEffective(TOKEN_READ);
  try
    Result := Token.TokenOwner.AccountName[''];
  finally
    Token.Free;
  end;
end;
Die crascht jedenfalls nicht, funktioniert aber nur wenn der angemeldete Benutzer diese ausführt ...

kuba
Stefan Kubatzki
E=mc2
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

Re: Angemeldeten Benutzer aus Dienst ermitteln - Windows 7

  Alt 7. Sep 2009, 19:05
Starte mal den Service in deinem Userkontext und nicht als Service,
dann solltest du fehlende Funktionsaufrufe erkennen können (die stehen dann in der Exception)
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von kuba
kuba

Registriert seit: 26. Mai 2006
Ort: Arnsberg
588 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Angemeldeten Benutzer aus Dienst ermitteln - Windows 7

  Alt 7. Sep 2009, 19:08
Zitat von himitsu:
Starte mal den Service in deinem Userkontext und nicht als Service,
dann solltest du fehlende Funktionsaufrufe erkennen können (die stehen dann in der Exception)
danke für den Tip, probiers gleich aus - bis später ..

Ich verwende in meinem NT-Service übrigens den Code aus diesem Tread.

Habe festgestellt, dass es auch Probleme unter Vista gibt, wenn man z.B. den aktuellen User abmelden will. Das funktioniert ebenfalls nur wenn der "LOGOFF" im Userkontext ausgeführt wird. Daher wäre ich sehr dankbar, wenn mir jemand einen Tip geben könnte, wie man o.g. Code anpassen kann um auch z.B. ein "LOGOFF" im Userkontext auszuführen. Zur Zeit verwende ich ein "LOGOFF.EXE", das muss aber auch "schöner" gehen ...

kuba
Stefan Kubatzki
E=mc2
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#8

Re: Angemeldeten Benutzer aus Dienst ermitteln - Windows 7

  Alt 8. Sep 2009, 11:31
Unter Windows 7 hat sich am Terminal Service etwas geändert, was zu einem Problem führen kann.
Im Subversion trunk habe ich eine angepasst Version, die ich jedoch noch nicht richtig testen konnte.

Ich werde ein neues Package machen, sobald ich diese Version auf Win7 testen konnte. Im Moment fehlt mir aber die Zeit. Freiwillige?
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Benutzerbild von kuba
kuba

Registriert seit: 26. Mai 2006
Ort: Arnsberg
588 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Angemeldeten Benutzer aus Dienst ermitteln - Windows 7

  Alt 8. Sep 2009, 19:13
Zitat von Dezipaitor:
Unter Windows 7 hat sich am Terminal Service etwas geändert, was zu einem Problem führen kann.
Im Subversion trunk habe ich eine angepasst Version, die ich jedoch noch nicht richtig testen konnte.

Ich werde ein neues Package machen, sobald ich diese Version auf Win7 testen konnte. Im Moment fehlt mir aber die Zeit. Freiwillige?
Hallo,

ich hab mal diesen Code in der Unit JwsclToken verwendet. Bekomme leider Fehler beim compilieren...

Was muss ich runterladen und installieren um den Code zu testen ??

kuba
Stefan Kubatzki
E=mc2
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#10

Re: Angemeldeten Benutzer aus Dienst ermitteln - Windows 7

  Alt 8. Sep 2009, 19:23
WAS bemängelt denn der Compiler?

Zitat von kuba:
Was muss ich runterladen und installieren um den Code zu testen ??
Am Einfachsten das gesamte JWSCL?
Und eventuell nicht noch die JCL (aber den dort eingebundenen Units nach, könnte es sein, daß nur die JWSCL reicht)
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz