Announcement

Collapse
No announcement yet.

Rechte Problem unter win xp Prof

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Rechte Problem unter win xp Prof

    Hallo

    ich habe folgendes Problem :
    in unserer Firma haben wir ein Netzwerk mit 50 Nutzern - diese Nutzer haben grundlegend Hauptbenutzer Rechte

    Ich habe ein Delphi-prog geschrieben das es ermöglicht über spezielle API Ressourcen ermöglicht anzuzeigen welche Rechner an sind und welche nicht. (ähnlich loggedon2)

    Der Hacken das Programm soll bei Benutzern laufen die keine admin-rechte haben, denn ohne kommt ein Socket Fehler

    es gibt die möglichkeit bei winxp prof :
    - rechte Maustaste \ Ausführen als

    Dann kommt ein anmelde-dialog wo die Anmeldung des Netz-Admins eingegeben wird und das Programm wird als Admin ausgeführt und funktioniert

    leider kann ich meinen Benutzern keine admin rechte geben (wäre fatal)

    also gibt es eine möglichkeit diese anmelde-prozedur zu hinterlegen ?

    wenn ja wäre ich euch sehr dankbar

    ach ja ich hab noch herausbekommen das wenn man eine verknüpfung zu der exe anlegt das man dort ein häckchen setzen kann von wegen _: Programm unter anderem benutzer ausführen (so spart man den rechtsklick)

    also wenn es auf windows / delphi ebene eine möglichkeit gebe die anmeldung zu automatisieren wäre es genau das was ich brauche

    thx schonmal im voraus

    mfG TeeKay

  • #2
    Hallo Thomas,
    ich habe was ähnliches folgendermassen gelöst:
    <pre>
    procedure WriteLastErr(AStr: string);
    begin
    WriteToLog('ERROR: ' + AStr + ': ' + SysErrorMessage(GetLastError));
    end;
    var
    sUsrName,
    sUsrPswd
    sDomain : string;
    HToken: THandle;
    luid : TLargeInteger;
    si : TStartUpInfo;
    pi : PROCESS_INFORMATION;
    begin

    if not LookupPrivilegeValue(NIL,pchar('SeTcbPrivilege'#0) ,luid) then WriteLastErr('PrivilegeValue');

    if LogonUser(PCHAR(sUsrName +#0),PCHAR(sDomain+#0),PCHAR(sUsrPswd +#0),LOGON32_LOGON_INTERACTIVE,LOGON32_PROVIDER_DE FAULT,HToken) then
    begin
    if not ImpersonateLoggedOnUser(HToken) then WriteLastErr('ImpersonateLoggedOnUser');
    FillChar(si,SizeOf(si),#0);
    si.cb:= SizeOf(si);
    si.dwFlags:= 0;
    si.lpReserved:= NIL;
    si.cbReserved2:= 0;
    si.lpReserved2:= NIL;
    si.lpTitle:= NIL;
    si.lpDesktop:= PCHAR(''#0);

    if CreateProcessAsUser(HToken, // handle to a token that represents a logged-on user
    NIL, // pointer to name of executable module
    PCHAR('rasdial ' + s4 + ' ' + s1 + s2 + ' ' + s3 + #0), // pointer to command line string
    NIL, // pointer to process security attributes
    NIL, // pointer to thread security attributes
    false, // new process inherits handles
    0, // oder CREATE_DEFAULT_ERROR_MODE or NORMAL_PRIORITY_CLASS, // creation flags
    PCHAR(''#0), // pointer to new environment block
    NIL, // pointer to current directory name
    si, // pointer to STARTUPINFO
    pi) // pointer to PROCESS_INFORMATION
    then begin
    WriteToLog('Started as user : rasdial');
    WaitForInputIdle(pi.hProcess , 2000);
    end
    else WriteLastErr('Start as user failed');
    end // if logonuser ...

    else WriteLastErr('LogonUser');
    end;
    </pre&gt

    Comment


    • #3
      Danke schön
      ich habe noch eine andere Lösung gefunden und zwar bei den Jedi Komponenten gibt es die Unit JclMiscel mit folgender Procedur :

      <pre>procedure CreateProcAsUser(const UserDomain: string; const UserName: string; const PassWord: string; const CommandLine: string)</pre>

      es funktioniert mit lokalen Admins bei Netz-admins muss man auf die Gruppenrichtlinien achten sonst bekommt man folgende Fehlermeldung

      <pre>This account does not have the privilege "Einsetzen als Teil des Betriebssystems" (SeTcbPrivilege)</pre>

      jedoch muss man beachten das man quasi eine vorgeschaltete Anwendung nutzt um die richtige mit anderem Benutzer zu öffnen

      mfG Thoma

      Comment

      Working...
      X