Delphi-Quellcode:
if GetTokenInformation(hUserToken, TokenElevationType, @ElevationType,
SizeOf(ElevationType), ReturnLength) then
begin
if (ElevationType = 3) then
begin
if GetTokenInformation(hUserToken, TokenLinkedToken,
@hLinkedToken, SizeOf(hLinkedToken), ReturnLength) then
try
Result := DuplicateTokenEx(hLinkedToken, MAXIMUM_ALLOWED, nil,
SecurityImpersonation, TokenPrimary, hElevatedToken);
finally
CloseHandle(hLinkedToken);
end;
Das ist also der Code, um dem neuen Prozess Admin-Rechte zu verschaffen? - Das hab ich jetzt nicht wirklich verstanden: Du erstellst ein User-Token. Dazu erstellst du ein 2. Token, welches mit dem ersten verknüpft ist. Dann erstellst du ein 3. Token, welches aus dem 2. Token dupliziert wurde. Soweit komme ich schon nicht mehr mit. ABER: Jetzt schließt du vorzeitig das 2. Token. Das will mir nicht in den Kopf.
Aber egal, Hauptsache der Code funktioniert. Mich würde natürlich trotzdem gerne interessieren, bei welcher Zeile jetzt dem System gesagt wurde, dass der Prozess Admin-Rechte bekommt.
Und was mich auch brennend interessiert ist, was passiert, wenn eine Anwendung mit Admin-Manifest ohne Admin-Rechte gestartet wurde.
Übrigens: Da ist ein größerer Fehler drin: Laut
MSDN kommt in ElevationType eine Zahl ungleich Null rein, wenn es Admin-Rechte zu verteilen gibt, ansonsten kommt da Null rein. Die Prüfung auf 3 ist somit nicht 100%ig sicher!