Announcement

Collapse
No announcement yet.

Privilegien in Windows NT ändern zum Zweiten

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

  • Privilegien in Windows NT ändern zum Zweiten

    An Andreas Kosch erst vielen Dank für Ihre schnelle Hilfe. Ich habe es wie Unten ausprobiert aber es hat nicht geklappt.<br>
    Wo und wie muss Ich Ihr code einsetzen ?<br>
    <br>
    mfg<br>
    <br>
    Ercan Karadeniz<br>
    <br>
    mail : [email protected] <br>
    <br>
    <br>
    <br>
    function SetPrivilege(PrivilegeName: String; Enable: Boolean): Boolean; <br>
    var <br>
    aTP : TTokenPrivileges; <br>
    aTPOld : TTokenPrivileges; <br>
    hToken : Handle; <br>
    dwRetLen : DWord; <br>
    <br>
    begin <br>
    Result := False; <br>
    OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or<br>
    TOKEN_QUERY, hToken); <br>
    aTP.PrivilegeCount := 1; <br>
    if LookupPrivilegeValue(nil, PChar(PrivilegeName), aTP.Privileges[0].LUID) then <br>
    begin<br>
    if Enable then aTP.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED else aTP.Privileges[0].Attributes := 0; <br>
    dwRetLen := 0; <br>
    Result :=AdjustTokenPrivileges(hToken, False, aTP, SizeOf(aTPOld), aTPOld, dwRetLen); <br>
    end; <br>
    CloseHandle(hToken); <br>
    end; <br>
    <br>
    <br>
    function ServiceStart(aMachine, aServiceName : string ) : boolean; <br>
    <br>
    // aMachine is UNC path or local machine if left empty <br>
    <br>
    var<br>
    h_manager,h_svc : SC_Handle; <br>
    svc_status : TServiceStatus; <br>
    Temp : PChar; <br>
    dwCheckPoint: DWord; <br>
    begin <br>
    svc_status.dwCurrentState :=1; <br>
    h_manager := OpenSCManager(PChar(aMachine), Nil,SC_MANAGER_CONNECT); <br>
    if h_manager > 0 then <br>
    begin <br>
    h_svc :=OpenService(h_manager, PChar(aServiceName),SERVICE_START or SERVICE_QUERY_STATUS); <br>
    if h_svc > 0 then <br>
    begin <br>
    temp := nil; <br>
    if (StartService(h_svc,0,temp)) then <br>
    if (QueryServiceStatus(h_svc,svc_status)) then <br>
    begin <br>
    while (SERVICE_RUNNING <>svc_status.dwCurrentState) do <br>
    begin <br>
    dwCheckPoint := svc_status.dwCheckPoint; Sleep(svc_status.dwWaitHint); <br>
    if (not QueryServiceStatus(h_svc,svc_status)) then break; <br>
    if (svc_status.dwCheckPoint < dwCheckPoint) then <br>
    begin // QueryServiceStatus didn't increment dwCheckPoint <br>
    break; <br>
    end; <br>
    end; <br>
    end; <br>
    CloseServiceHandle(h_svc); <br>
    end; <br>
    CloseServiceHandle(h_manager); <br>
    end; <br>
    Result:= SERVICE_RUNNING = svc_status.dwCurrentState; <br>
    end; <br>
    <br>
    <br>
    procedure changepriv; <br>
    begin <br>
    if SetPrivilege('SeProfileSingleProcess',true) then ShowMessage('Das Privileg wurde erfolgreich erteilt.')<br>
    else ShowMessage('Problem !Problem !Problem !Problem !Problem !Problem !'); <br>
    end; <br>
    <br>
    procedure TForm1.BitBtn1Click(Sender: TObject); <br>
    begin <br>
    changepriv; <br>
    if ServiceStart('','UPS') then ShowMessage('*******OK*******');<br>
    changepriv; <br>
    end; <br>
    <br>

  • #2
    Hallo,

    in diesem Fall würde ich die Rückgabewerte der API-Funktionen prüfen und im Fehlerfall die Funktion <b>RaiseLastWin32Error </b> aufrufen. Somit sollte Win32 den Grund für das Veto offenlegen. Das Kernproblem besteht darin, dass Windows NT verhindert, das ein unberechtigter Benutzer sich Privilegien verschafft, obwohl dieser nicht das Privileg für das Ändern für Privilegien hat. Das hört sich jetzt nach dem "Henne-Ei-Problem" an, aber als Ausweg kann sich ein Prozess über über den Aufruf von <b>CreateProcessAsUser</b> oder <b>LogonUser</b> höhere Rechte holen, als es der aktuell angemeldete Benutzer hat. Allerdings wird in jedem Fall die Information über die Zugangsdaten (Benutername/Passwort) des anderen Benutzers benötigt.

    Was spricht dagegen, den Benutzer zur Gruppe der <b>Hauptbenutzer</b> hinzufügen? In diesem Fall hat dieser Benutzer automatisch das Recht, Dienste zu starten und zu beenden

    Comment

    Working...
    X