J'ai un problème avec l'application Delphi pour déterminer la poignée de l'application en cours (filetage actuel). Je sais que je peux obtenir l'ID de thread actuel avec la fonction de l'API Windows GetCurrentThreadID
, mais j'ai besoin du handle de thread actuel à utiliser comme paramètre pour une autre fonction de l'API Windows qui est SuspendThread.Obtenir la poignée de filetage actuelle
En fait ce que je suis en train de faire est de faire un de mes vieux dll fait pour accrocher les fonctions API situés dans kernel32.dll comme OpenProcess
ou TerminateProcess
pour ne aussi crochet pour SuspendProcess
. Hook se trouve dans le fichier dll et utilise SetWindowsHookEx pour être injecté dans les processus en cours, puis trouve l'adresse de base des fonctions cibles. Je n'avais aucun problème avec les fonctions d'accrochage comme TerminateProcess car il fallait un ID de processus en tant que param facile à obtenir dans l'application principale en utilisant GetCurrentProcessID
. Pour faire un hook similaire pour la fonction SuspendThread
, j'ai besoin de passer le handle de thread en tant que param.
Le seul endroit où j'ai trouvé poignée de fil est une structure PROCESS_INFORMATION
qui contient
typedef struct _PROCESS_INFORMATION { // pi
HANDLE hProcess;
HANDLE hThread;
DWORD dwProcessId;
DWORD dwThreadId;
} PROCESS_INFORMATION;
mais le problème est que cette structure est disponible seulement après la création de processus avec CreateProcess
fonction API. L'objectif principal est d'empêcher les utilisateurs du programme d'utiliser différents outils disponibles en ligne comme ProcessExplorer etc pour mettre fin au processus. Je suis parvenu à réussir avec succès les appels d'API TerminateProcess et à empêcher ainsi la fermeture de mon application, mais l'option Suspend dans ces outils d'exploration de processus peut interrompre mon processus. C'est une application de kiosque internet et il est vital que les utilisateurs ne puissent pas fermer cette application. Les applications sont actuellement exécutées sous Windows XP et doivent être exécutées sur un compte administrateur, car les autres applications utilisées par les utilisateurs après la connexion à mon application nécessitent un compte administrateur. Je ne peux donc pas exécuter mon application sous un utilisateur restreint.
Y at-il un moyen que je peux obtenir mon handle de thread principal de l'application principale dans Delphi?
Merci à l'avance
supprimé à cause de l'objectif –
Si un utilisateur peut installer des programmes (tels que Process Explorer) sur votre kiosque Internet, vous avez déjà perdu la partie. Vous devriez demander comment verrouiller tout l'ordinateur avec des trucs comme la politique de groupe. –
Je voudrais inspecter ce que les applications font exactement qui nécessite des droits "administrateur" et si c'est un sous-ensemble assez limité de privilèges, je créer un utilisateur avec ces privilèges uniquement pour leur permettre de fonctionner sans privilèges d'administrateur complet. Sinon, il pourrait, par exemple, définir les clés de registre appropriées pour supprimer la DLL "watchdog" au démarrage, puis redémarrer la machine. –