Ich habe ein Problem in Delphi-Anwendung mit der aktuellen Anwendung (aktuellen Thread) Griff. Ich weiß, dass ich aktuelle Thread-ID mit Windows-API-Funktion GetCurrentThreadID
abrufen kann, aber ich brauche aktuelle Thread-Kennung als Parameter für eine andere Windows-API-Funktion, die SuspendThread ist.Get Current Thread Handle
Eigentlich, was ich versuche zu tun, einen meiner alten DLL zum Einhaken API-Funktionen befindet sich in kernel32.dll wie OpenProcess
oder TerminateProcess
auch gemacht machen, um für SuspendProcess
tun Haken. Hook befindet sich in der DLL-Datei und wird mit SetWindowsHookEx in laufende Prozesse eingefügt, um dann die Basisadresse der Zielfunktionen zu finden. Ich hatte kein Problem mit Hooking-Funktionen wie TerminateProcess, weil es Prozess-ID als Parameter benötigt, die in der Hauptanwendung mit GetCurrentProcessID
leicht zu erhalten ist. Um einen ähnlichen Haken für SuspendThread
Funktion zu machen, muss ich Threadhandle als param übergeben.
einziger Ort, wo ich gefunden Thread-Handle ist PROCESS_INFORMATION
Struktur, die
typedef struct _PROCESS_INFORMATION { // pi
HANDLE hProcess;
HANDLE hThread;
DWORD dwProcessId;
DWORD dwThreadId;
} PROCESS_INFORMATION;
enthält aber Problem ist, dass diese Struktur nur nach dem Prozess mit CreateProcess
API-Funktion zu schaffen zur Verfügung steht. Das Hauptziel besteht darin, zu verhindern, dass Programmbenutzer verschiedene online verfügbare Tools wie ProcessExplorer usw. verwenden, um den Prozess zu beenden. Ich habe erreicht, dass mit Erfolg TerminateProcess API-Aufrufe einhängen und verhindern, dass auf diese Weise meine App zu schließen, aber die Option "Suspend" in diesen Tools zur Prozesssuche kann meinen Prozess anhalten. Es ist eine Internet-Kiosk-Anwendung und es ist wichtig, dass Benutzer diese Anwendung nicht schließen können. Anwendungen werden derzeit in Windows XP ausgeführt und müssen auf einem Administratorkonto ausgeführt werden, da andere Anwendungen, die Benutzer nach dem Anmelden meiner Anwendung verwenden, Administratorkonten benötigen, damit ich meine Anwendung nicht einfach unter eingeschränkten Benutzern ausführen kann.
Gibt es eine Möglichkeit, dass ich meine Hauptanwendung Haupt-Thread-Handle in Delphi bekommen kann?
Vielen Dank im Voraus
wegen Ziel entfernt –
Wenn ein Benutzer Programme (z. B. Process Explorer) auf Ihrem Internet-Kiosk installieren kann, haben Sie das Spiel bereits verloren. Sie sollten sich fragen, wie Sie den gesamten Computer mit Gruppenrichtlinien sichern können. –
Ich würde prüfen, welche Anwendungen genau das tun, die "Administrator" -Rechte benötigt, und wenn das eine ausreichend begrenzte Teilmenge von Privilegien ist, würde ich einen Benutzer mit diesen Privilegien nur erstellen, um sie ohne volle Admin-Privilegien laufen zu lassen. Andernfalls könnte es z. B. die richtigen Registrierungsschlüssel festlegen, um die "Watchdog" -DLL beim Booten zu entfernen und dann den Computer neu starten zu lassen. –