Détecter de manière fiable 16 processus de bit
-
29-09-2019 - |
Question
En raison de la nécessité d'exécuter une application ancienne 15+ ans je souhaite créer un programme de surveillance pour assurer une application 16 bits est en cours d'exécution sur une version 32 bits de Windows XP Pro et démarrer si nécessaire. Normalement, j'utiliser EnumWindows () pour rechercher la fenêtre de l'application. Malheureusement, cela ne fonctionne pas, ou du moins pas de manière fiable, pour 16 applications de bit.
Étant donné que je n'ai absolument aucun contrôle sur le code dans l'application en question, comment puis-je détecter de manière fiable si oui ou non il est en cours d'exécution? Je coder cela en C (non C ++ ou C #).
La solution
Vous aurez probablement besoin de processus Énumérer (par exemple, EnumProcesses
avec ou GetModuleFilenameEx
CreateToolhelp32Snapshot
avec Process32First
et Process32Next
). Si vous ne trouvez pas une instance de ntvdm.exe
, puis pas processus 16 bits est en cours d'exécution, et vous pouvez arrêter là. Si vous ne trouvez pas une instance de ntvdm.exe
, vous pouvez utiliser VDMEnumTaskWOWEx
pour énumérer les processus 16 bits en cours d'exécution en elle.
Retour quand il était encore sous les propriétaires d'origine, j'ai posté une article sur CodeGuru montrant comment faire tout cela. Ce serait prendre un peu de travail à faire compiler sous un compilateur moderne (par exemple, il est assez vieux qu'il utilise iostream.h
au lieu de iostream
, mais la partie de l'énumération des processus devrait être encore à peu près droit (mais, en regardant les choses, vous ll faut également permettre au SeDebugPrivilege
pour qu'il fonctionne sous Windows 7).