Надежно обнаружить 16 -битный процесс
-
29-09-2019 - |
Вопрос
Из -за необходимости запустить 15 -летнюю приложение, я хочу создать программу сторожевого вещества, чтобы обеспечить 16 -битное приложение на 32 -битной версии Windows XP Pro и запустите ее, если это необходимо. Обычно я бы использовал EnumWindows (), чтобы найти окно приложения. К сожалению, это не работает или, по крайней мере, не надежно, для 16 -битных приложений.
Учитывая, что у меня нет абсолютно никакого контроля над кодом в рассматриваемом приложении, как я могу надежно определить, работает ли он? Я кодирую это в C (не C ++ или C#).
Решение
Вам, вероятно, нужно перечислять процессы (например, EnumProcesses
с GetModuleFilenameEx
или CreateToolhelp32Snapshot
с Process32First
и Process32Next
). Если вы не найдете экземпляра ntvdm.exe
, потом нет 16-битный процесс работает, и вы можете остановиться на этом. Если вы найдете экземпляр ntvdm.exe
, ты можешь использовать VDMEnumTaskWOWEx
перечислять 16-битные процессы, работающие в нем.
Когда он был еще под первоначальными владельцами, я опубликовал статья на Codeguru, демонстрируя, как сделать все это. Потребовалось бы немного работы, чтобы он собирал его под современным компилятором (например, он достаточно взрослый, чтобы он использовал iostream.h
вместо iostream
, но часть перечисления процесса все еще должна быть в значительной степени правильной (хотя, глядя на вещи, вам также нужно включить SeDebugPrivilege
Чтобы работать на Windows 7).