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>
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>
Comment