-
Forum: Win32/Win64 API (native code)
Delphi
by CodeX,
29. Nov 2011
Ohne Deinen Code Zeile für Zeile zu analysieren: Geht damit jetzt mehr als mit meinem Code hier aus diesem Thread, außer dass es ohne JEDI geht?
Für mich wäre ja ein wünschenswerter Fortschritt, dass der Service die Anwendung nicht mit System-Rechten, sondern mit Administratorrechten des eingeloggten Benutzers startet (selbstredend ohne UAC auszulösen). Lässt sich recht leicht über den...
-
Forum: Win32/Win64 API (native code)
Delphi
by CodeX,
22. Jun 2008
Ja, kann ich machen. Dann brauch ich einen Login, oder?
Kannst mir die Login-Daten per PN schicken. Ich versuche, den Artikel noch heute zu verfassen, da ich ab morgen eine Woche unterwegs bin und keine Zeit haben werde. Sollte das heute nicht mehr klappen, dann mache ich das in einer Woche.
-
Forum: Win32/Win64 API (native code)
Delphi
by CodeX,
21. Jun 2008
Klar doch. :)
-
Forum: Win32/Win64 API (native code)
Delphi
by CodeX,
21. Jun 2008
Ja, klar. Hatte das ja schon bei meinem letzen Posting geschrieben. Habe eben noch die kleineren Anpassungen, die Du geschrieben hast, eingebaut.
So sieht das ganze in der letzten Version aus:
procedure StartApp(const App, Parameters, CurDir : TJwString);
var
StartupInfo : TStartupInfoA;
ProcInfo : TProcessInformation;
pEnv : Pointer;
-
Forum: Win32/Win64 API (native code)
Delphi
by CodeX,
1. Jun 2008
Das stimmt, aber ich brauche das UserToken für
JwaWindows.CreateEnvironmentBlock(@pEnv, UserToken.TokenHandle, false);
sowieso. Da komme ich ja nicht drumherum, wenn ich die Benutzerumgebung mitgeben will.
Wenn ich TJwAutoPointer.Wrap(...) verwende, brauche ich dann die try-finally Blöcke trotzdem noch oder reicht das tatsächlich einfach nach jedem Erzeugen das Token einmal zu wrappen?
...
-
Forum: Win32/Win64 API (native code)
Delphi
by CodeX,
25. Mai 2008
Sure, this is my final code (so far ;)):
ZeroMemory(@StartupInfo, sizeof(StartupInfo));
StartupInfo.cb := SizeOf(StartupInfo);
StartupInfo.lpDesktop := 'winsta0\default';
pCmdLine := TJwPChar('"'+App+'" ' + Parameters);
pCurDir := Nil;
if Length(CurDir) > 0 then
-
Forum: Win32/Win64 API (native code)
Delphi
by CodeX,
23. Mai 2008
Vielen Dank für die Erläuterung! Damit wird so einiges klarer.
Hole mir die TokenSessionID jetzt dynamisch vom aktuellen Benutzer und erstelle für diesen auch gleich den passenden Umgebungsblock.
Scheint alles zu funktionieren. :)
Intern werde ich also drei verschiedene Blöcke für 2000, XP und Vista basteln, damit das jeweils korrekt funktioniert.
Gehe ich richtig in der Annahme, dass...
-
Forum: Win32/Win64 API (native code)
Delphi
by CodeX,
23. Mai 2008
Okay, gut zu wissen. Wobei CreateWTSQueryUserTokenEx bei mir (wie in meinem auskommentierten Beispiel) nur mit WtsGetActiveConsoleSessionID Sinn gemacht hat. Da letzteres aber erst ab XP existiert, habe ich das eben doch nicht verwendet.
Aber letztlich tut
UserToken := TJwSecurityToken.CreateCompatibilityQueryUserToken(MAXIMUM_ALLOWED, 'explorer.exe');
ja vollkommen das, was es soll. Nachteile...
-
Forum: Win32/Win64 API (native code)
Delphi
by CodeX,
22. Mai 2008
Du hast wohl alles schon mal gemacht, oder? :)
Habe ein wenig mit Deiner Funktion herumexperimentiert.
Hier meine Ergebnisse:
Wenn ich die Funktion genau so übernehme, dann wird die Umgebung von "Default User" genommen.
Zum Testen schaue ich immer über SHGetSpecialFolderLocation nach, welcher Bentzerordner aus dem Programm heraus angezeigt wird.
Nehme ich bei CreateEnvironmentBlock...
-
Forum: Win32/Win64 API (native code)
Delphi
by CodeX,
22. Mai 2008
Ok, nach einer vollständigen und peniblen Neuinstallation funktioniert Jwa und Jwscl jetzt wohl. Scheint was durcheinander gekommen zu sein mit der alten und der aktuellen Version. Nun gut, das geht ja jetzt schon mal. Dann versuche ich jetzt mal da drauf aufzubauen.
Das habe ich jetzt zusammengebasteln:
var
UserToken: TJwSecurityToken;
ConsoleUser : TJwSecurityId;
StartupInfo:...
-
Forum: Win32/Win64 API (native code)
Delphi
by CodeX,
22. Mai 2008
Yes, you're right this is shorter, but it gives me the environment of SYSTEM and not of the logged in user.
function GetEnvironment(): LPVOID;
var
SessionID : DWORD;
hToken : THandle;
begin
Result := nil;
WTSQueryUserToken(SessionID, hToken);
-
Forum: Win32/Win64 API (native code)
Delphi
by CodeX,
22. Mai 2008
Klingt gut. Die Frage ist nur: Wie?
Und wie komme ich an die SessionID?
Prinzipiell würde ich das ja so machen:
function GetEnvironment(): LPVOID;
var
LToken: THandle;
-
Forum: Win32/Win64 API (native code)
Delphi
by CodeX,
21. Mai 2008
@SirThornberry
Das Programm besteht eben schon länger und da ist es um ein vielfaches komplizierter, das auszulagern. Zumal würde ich gerne die Option behalten, das Programm (sofern mit Adminrechten gestartet) ohne Service zu benutzen.
@Remko
I'll have a look. Thanks.
@Dezipaitor
zu 2. Das andere Token bekomme ich aber wirklich nur von einem bestimmten Administratoraccount auf dem...
-
Forum: Win32/Win64 API (native code)
Delphi
by CodeX,
20. Mai 2008
Hallo Dezipaitor,
musste mich damals von diesem Problem trennen, weil ich mich um andere dringende Dinge kümmern musste. Nun ist das wieder aktuell für mich, weil ich das definitiv immer noch benötige.
1. XP Elevation
Ich habe XP Elevation in der aktuellen Version geholt und kriege das aber nach wie vor nicht zum Laufen. Du hast gesagt, Du arbeitest da immer noch dran. Kann es sein, dass...
-
Forum: Win32/Win64 API (native code)
Delphi
by CodeX,
26. Feb 2008
Na, das sollte doch machbar sein. Damit ist meine Idee doch gar nicht so weit hergeholt.
Richtig, Admin-Rechte reichen. Ich meinte auch nur, dass die System-Rechte, die ja dann wohl automatisch mitvererbt werden, auch ihre Arbeit tun würden. ;)
Nein, davon kann ich nicht ausgehen. D.h. für diese Lösung müsste das Passwort vom Administrator verschlüsselt gespeichert werden. Aber da es...
-
Forum: Win32/Win64 API (native code)
Delphi
by CodeX,
25. Feb 2008
Ich habe ein paar Beiträge zu ähnlichen Themen gefunden, jedoch sind diese bestenfalls auf Lösungsansätze hinausgelaufen.
Da ich das immer noch nicht hinbekommen habe, bitte ich hier um Hilfe.
Mein Szenario:
- Programm benötigt zwingend erhöhte Rechte (Adminrechte), da es diverse Systemeinstellungen ändern können soll
- Der Administrator des Systems kann natürlich Programme und Dienste...