Weiss jemand zufällig wie der Windows-eigene Befehl "runas /netonly" intern funktioniert? Bisher bin ich davon ausgegangen das ich bei CreateProcessWithLogonW einfach nur das Logon-Flag von LOGON_WITH_PROFILE auf LOGON_NETCREDENTIALS_ONLY ändern muss. Leider scheint das aber nicht zu reichen.
Ein Anwender meines Programmes (ist etwas in der Art wie Luckies RunAsUser) hat mir geschrieben das es zwar mit dem "/netonly"-Parameter beim Windows-eigenen RunAs funktioniert, aber wenn er mein Programm verwendet und die Checkbox für LOGON_NETCREDENTIALS_ONLY setzt funktioniert es nicht mehr. Deshalb meine Vermutung das Microsoft da noch etwas mehr macht als nur das Logon-Flag zu ändern. Die Frage ist nur was?
Hier mal den Code den ich verwende (nur das wichtigste):
Delphi-Quellcode:
const
LOGON_WITH_PROFILE = $00000001;
LOGON_NETCREDENTIALS_ONLY = $00000002;
var
si: STARTUPINFOW;
pif: PROCESS_INFORMATION;
begin
// StartUpInfoW setzen
si.cb := SizeOf(startupinfow);
si.dwFlags := STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK;
si.wShowWindow := SW_SHOWDEFAULT;
si.lpReserved := nil;
si.lpDesktop := nil;
si.lpTitle := nil;
// CreateProcessWithLogonW ausführen...
CreateProcessWithLogonW('Benutzer', 'PC', 'Passwort', // Anmeldedaten
LOGON_WITH_PROFILE, // Logon-Flag
'Irgendeine_Anwendung.exe', // Anwendung
nil, // Parameter
CREATE_DEFAULT_ERROR_MODE or CREATE_UNICODE_ENVIRONMENT,
nil,
nil,
si,
pif);
end;