Вопрос

Из -за необходимости запустить 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).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top