Einzelnen Beitrag anzeigen

Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#1

Ein gültiges Token für CreateProcessAsuser bekommen

  Alt 9. Sep 2004, 23:56
MSDN-Library durchsuchenCreateProcessAsUser verlangt als ersten Parameter einen Token. Den kann man mit LogonUser bekommen. Nur leider schlägt LogonUser bei mir immer fehl:
Delphi-Quellcode:
function RunAs(const User, PW, App, Params: string): DWORD;
var
  bReturn: Boolean;
  dwReturn: DWORD;
  hLogon: THandle;
  si: TStartupInfo;
  pi: TProcessInformation;
begin
  SetLastError(0);
  if EnablePrivilege('SeTcbPrivilege') = 0 then
  begin
    bReturn := LogonUser(PChar(User), nil, PChar(PW), LOGON32_LOGON_INTERACTIVE,
      LOGON32_PROVIDER_WINNT50, hLogon);
    if bReturn then
    begin
      ZeroMemory(@si, sizeof(si));
      si.cb := sizeof(si);
      ZeroMemory(@pi, sizeof(pi));
      if CreateProcessAsUser(hLogon, PChar(App), PChar(Params), nil, nil, False,
        CREATE_DEFAULT_ERROR_MODE, nil, nil, si, pi) then
        dwReturn := 0
      else
        dwReturn := GetLastError;
      CloseHandle(hLogon);
      ZeroMemory(@PW[1], length(PW));
    end
    else
      dwReturn := GetLastError;
  end
  else
    dwReturn := GetLastError;
  result := dwReturn;
end;
Wie Motzi hier im Forum schon gesagt hat, braucht man dazu das Privileg 'SeTcbPrivilege'. Das bekomme ich auch. Aber LogonUser schlägt trotzdem fehl.
Zu Testezwecken wollte ich einfach eine Konsole als Admin öffen (bin selber nur Benutzer). Als fehlermeldung bekomme ich immer:
Zitat:
---------------------------
Project1
---------------------------
Der Client besitzt ein erforderliches Recht nicht
---------------------------
OK
---------------------------
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat