Zitat von
Icydragon:
Bei einigen Funktionen muss man schon Domänen-Admin oder Sicherungs-Op sein, wenn man sie erfolgreich ausführen will.
Das ist korrekt und entspricht dem Sicherheitsmodell von Windows.
Zitat von
Icydragon:
Wie kann ich diese Funktion in einem solchen Fall unter einem anderen Benutzer ausführen?
Das Problem dabei ist, daß, wie du schon selber feststellst
LogonUser() das Privileg SE_TCB_NAME haben muß. TCB steht für Trusted Computing Base und schließt im Prinzip nur das System selber ein. Ein Admin kann dieses Privileg aber ebenfalls ergattern. Das Token welches du aus dem Aufruf von LogonUser() bekommst, kannst du dann verwenden um einen Thread deines Prozesses als dieser Nutzer (also mit dessen Rechten) laufen zu lassen. Dementsprechend kann innerhalb eines Prozesses auch mehrere Threads mit jeweils verschiedenen Nutzerkontexten Aufgaben machen lassen, die sonst nicht möglich wären.
Das was du machen willst, schreit förmlich nach Delegation an einen Dienst. Dieser Dienst würde dann für dich alles übernehmen was mit Logons zu tun hat. Eine Alternative könnte ab
W2K die Funktion
CreateProcessWithLogonW() bieten, die ohne besagtes Privileg auskommt. Allerdings müßtest du auch in diesem Fall zwischen den beiden Prozessen kommunizieren.