CreateProcessWithLogonW benutzt den sekundären Anmeldedienst. ShellExecute und runas macht das über die Shell.
ImpersonateLoggedOnUser kann man eigentlich nur für Dienste nutzen, die damit als ein anderer Benutzer auftreten wollen. Das ist der eigentliche Zweck. Mehr als die eigenen Rechte kann man damit nicht bekommen.
Wenn man ab Vista kurz mal mehr Rechte benötigt, kann man seine Methoden in
COM-
DLL auslagern, ein Interface dazu setzen und dann über Windows diese
DLL mit Adminrechten (über eine Exe von Windows) starten lassen. Nennt sich
COM Rlevation. Gibt ne Menge Beispiele für Delphi dazu, z.B. meine:
http://blog.delphi-jedi.net/2008/03/...gram-elevated/
http://blog.delphi-jedi.net/2008/03/...ta-with-jwscl/