AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Defragmentierung als Administrator ausführen
Thema durchsuchen
Ansicht
Themen-Optionen

Defragmentierung als Administrator ausführen

Ein Thema von eticket · begonnen am 19. Dez 2007 · letzter Beitrag vom 20. Dez 2007
 
eticket

Registriert seit: 30. Aug 2007
17 Beiträge
 
Delphi 5 Enterprise
 
#1

Defragmentierung als Administrator ausführen

  Alt 19. Dez 2007, 11:19
Hallo,

die Defragmentierung kann nur mit Administrationsrechten ausgeführt werden.
Ich suche ein Programm, mit dem man die Defragmentierung als "Hauptbenutzer" aufruft,
d.h. in der Oberfläche werden Administrator und Passwort (voreingestellt) übergeben.
Der User klickt dann nur auf Start und die Defragmentierung wird gestartet.

Anbei das Programmkonstrukt

Delphi-Quellcode:

function GetCurrUserName: string;
var
  Size : DWORD;
begin
  Size := MAX_COMPUTERNAME_LENGTH + 1;
  SetLength(Result, Size);
  if GetUserName(PChar(Result), Size) then
    SetLength(Result, Size)
  else
    Result := '';
end;

function ComputerNameStr: String;
var
  Size: DWORD;
begin
  Size := MAX_COMPUTERNAME_LENGTH + 1;
  SetLength(Result, Size);
  if GetComputerName(PChar(Result), Size) then
    SetLength(Result, Size)
  else
    Result := '';
end;

function Impersonate(const User, PW: string): Boolean;
var
  LogonType : Integer;
  LogonProvider : Integer;
  strAdminUser : string;
  strAdminDomain : string;
  strAdminPassword : string;
begin
  LogonType := LOGON32_LOGON_INTERACTIVE;
  LogonProvider := LOGON32_PROVIDER_DEFAULT;
  strAdminUser := USER;
  strAdminDomain := ComputerNameStr;
  strAdminPassword := PW;
  Result := LogonUser(PChar(strAdminUser), PChar(strAdminDomain), PChar(strAdminPassword), LogonType, LogonProvider, TokenHandle);
  if Result then
  begin
    Result := ImpersonateLoggedOnUser(TokenHandle);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
Var unstr, pwstr : String;
begin
     // Starte Defragmentierung
     unstr := Username.Text;
     pwstr := Password.Text;

     if Impersonate(unstr, pwstr) then
     begin
          RevertToSelf;
          if ShellExecute( Application.Handle , 'open' , PChar('dfrg.msc'), Nil, Nil, SW_NORMAL) <= 32 then
             ShowMessage('Es ist ein Fehler aufgetreten');
     end
     else
         MessageBox(0, PChar(SysErrorMessage(GetLastError)), '', 0);

end;
Es funktioniert klar, wenn der User lokale Administrationsrechte hat, nicht aber, wenn
er Hauptbenutzer ist.

Wie mache ich das?

Danke für eure Hilfe

Michael
  Mit Zitat antworten Zitat
 


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 11:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz