![]() |
AW: Windows 10 - GetModuleHandle('USER32.DLL') & LockWorkStation funktioniert nicht
Da das Beispiel im StackOverflow zu gehen scheint, wäre mir sehr geholfen, wenn jemand ausreichende VB-Kenntnisse hätte, um die Lösung der ersten Antwort zu übersetzen. Mir gelingt es nicht, ich scheitere an dem ersten Code-Beispiel, welches ja für das dritte Code-Beispiel benötigt wird :(
|
AW: Windows 10 - GetModuleHandle('USER32.DLL') & LockWorkStation funktioniert nicht
Zitat:
Es sollte dann klar werden, dass er den ganzen Quark aus dem ersten Code-Beispiel nicht braucht, sondern direkt CreateProcessAsUser aufruft (drittes Code-Beispiel) mit dem Handle aus WTSQueryUserToken. |
AW: Windows 10 - GetModuleHandle('USER32.DLL') & LockWorkStation funktioniert nicht
Mal so runtergetippt und ungetestet:
Delphi-Quellcode:
function WTSQueryUserToken(SessionId: ULONG; phToken: PDWORD): BOOL; stdcall; external wtsapi32;
function WTSGetActiveConsoleSessionId: DWORD; stdcall; external kernel32; procedure Test; var SessionId: DWORD; UserTokenHandle: DWORD; StartInfo: TStartupInfo; ProcessInfo: TProcessInformation; IsCreated: BOOL; begin UserTokenHandle := 0; SessionId := WTSGetActiveConsoleSessionId; if WTSQueryUserToken(SessionId, @UserTokenHandle) then begin FillChar(StartInfo, SizeOf(StartInfo), 0); StartInfo.cb := SizeOf(StartInfo); FillChar(ProcessInfo, SizeOf(ProcessInfo), 0); IsCreated := CreateProcessAsUser( UserTokenHandle, 'rundll32.exe', 'rundll32.exe user32.dll,LockWorkStation', nil, nil, False, 0, nil, nil, StartInfo, ProcessInfo); if not IsCreated then RaiseLastOSError; end else RaiseLastOSError; end; |
AW: Windows 10 - GetModuleHandle('USER32.DLL') & LockWorkStation funktioniert nicht
Guten Abend TiGü,
und erst einmal vielen herzlichen Dank für Deine Mühe, weiß ich sehr zu schätzen. DANKE! :thumb: Ich habe den Code gerade getestet und erhalte folgende Fehlermeldung:
Code:
Bei Ausführung von Zeile:
System Error. Code: 1314. Dem Client fehlt ein erforderliches Recht.
Code:
läuft in den Else-Zweig hinein, sprich liefert "False". SessionId ist "1".
if WTSQueryUserToken(SessionId, @UserTokenHandle) then
Vielleicht hat noch jemand eine Idee? Ich habe einfach eine kleine VCL-Testanwendung dazu gebaut und erhielt dann den Fehler. Viele Grüße |
AW: Windows 10 - GetModuleHandle('USER32.DLL') & LockWorkStation funktioniert nicht
Zitat:
|
AW: Windows 10 - GetModuleHandle('USER32.DLL') & LockWorkStation funktioniert nicht
Zitat:
|
AW: Windows 10 - GetModuleHandle('USER32.DLL') & LockWorkStation funktioniert nicht
Anders ausgedrückt: Du musst zusätzlich noch prüfen, ob dein Code im Dienst läuft oder nicht, und WTSQueryUserToken nur aufrufen, wenn es im Dienst ist.
Grüße Dalai |
AW: Windows 10 - GetModuleHandle('USER32.DLL') & LockWorkStation funktioniert nicht
@Dalai: Ja, ich weiß. Ich bin gerade am Testen und berichte gleich noch einmal dazu :)
|
AW: Windows 10 - GetModuleHandle('USER32.DLL') & LockWorkStation funktioniert nicht
Zusammenfassung: Der von TiGü gepostete Code funktioniert nach meinen Tests unter Windows XP, Windows 7, Windows 10 (1703) und Windows Server 2016.
ACHTUNG: Der Code funktioniert nicht, wenn nur eine RDP-Session besteht jedoch keine Benutzer angemeldet sind. Dazu gibt es im MSDN auch einige Informationen zu finden und in diesem Fall erhält man folgende Fehlermeldung: Zitat:
Viele Grüße |
AW: Windows 10 - GetModuleHandle('USER32.DLL') & LockWorkStation funktioniert nicht
Problem gelöst (Thema keine offene Frage mehr) :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz