Einzelnen Beitrag anzeigen

Benutzerbild von Tonic1024
Tonic1024

Registriert seit: 10. Sep 2003
Ort: Cuxhaven
559 Beiträge
 
RAD-Studio 2009 Ent
 
#1

[gelöst]Impersonate in TService

  Alt 21. Aug 2013, 18:21
Hi zusammen...

Ich verwende seit ewigen Zeiten das Impersonate von Luckies webseite. Klappt auch immer ganz prima. Nur leider scheinen die Gegebenheiten innerhalb eines Services etwas anders.

Hier ist mein Code:
Delphi-Quellcode:
function Impersonate(const aUser, aPass: string): Boolean;
var
  LogonType : Integer;
  LogonProvider : Integer;
  strUser : String;
  strDomain : String;
  strPassword : String;
  Token: THandle;
begin
  LogonType := LOGON32_LOGON_INTERACTIVE;
  LogonProvider := LOGON32_PROVIDER_DEFAULT;
  strUser := aUser;
  strDomain := '';
  strPassword := aPass;
  Result := LogonUser(PChar(strUser), nil, PChar(strPassword), LogonType, LogonProvider, Token);
    generateLog('muh1');
  if Result then
  begin
    generateLog('muh2');
    Result := ImpersonateLoggedOnUser(Token); // hier bleibts hängen
    generateLog('muh3');
  end;
end;


// Der Aufruf:
      generateLog('vorher-'+GetUsername);
      Impersonate('User', 'Pass');
      generateLog('nachher-'+GetUsername);
im Log dann Folgendes:
Code:
vorher-SYSTEM
muh1
muh2
Und dann bleibt der Prozess hängen. Gelten für den System-User andere Regeln? Gibt es nen anderen Weg?

Gruß,

Toni
Der frühe Vogel fängt den Wurm, richtig.
Aber wird nicht auch der frühe Wurm vom Vogel gefressen?

Geändert von Tonic1024 (22. Aug 2013 um 10:48 Uhr)
  Mit Zitat antworten Zitat