CreateWTSQueryUserTokenEx funktioniert nur unter Windows 2000. Unter XP kann es funkzen, muss aber nicht. Unter Vista funktioniert es nicht!
Damit dieser Desktopwechsel unter Vista nicht auftritt, musst man die TokenSessionID (Property) auf die jeweilige ID des Users setzen und dann damit das Programm starten.
Delphi-Quellcode:
var T,t2 : TJwSecurityToken;
S : TStartupInfo;
P : TProcessInformation;
begin
T := TJwSecurityToken.CreateTokenEffective(MAXIMUM_ALLOWED);
T2 := TJwSecurityToken.CreateDuplicateExistingToken(T.TokenHandle, MAXIMUM_ALLOWED);
//
T2.TokenSessionId := 2;
ZeroMemory(@S, Sizeof(S));
S.cb := sizeof(S);
CreateProcessAsUser(T2.TokenHandle,'C:\Windows\system32\cmd.exe',nil,nil,nil,false, 0, nil, nil, S,P);
...