Надежно определить 16-битный процесс - PullRequest
0 голосов
/ 08 ноября 2010

В связи с необходимостью запуска приложения старше 15 лет я хочу создать сторожевую программу, обеспечивающую работу 16-разрядного приложения в 32-разрядной версии Windows XP Pro, и запускать ее при необходимости. Обычно я бы использовал EnumWindows () для поиска окна приложения. К сожалению, это не работает или, по крайней мере, ненадежно, для 16-битных приложений.

Учитывая то, что я абсолютно не контролирую код в рассматриваемом приложении, как я могу надежно определить, работает ли оно? Я кодирую это в C (не C ++ или C #).

1 Ответ

2 голосов
/ 08 ноября 2010

Вам, вероятно, потребуется перечислить процессы (например, EnumProcesses с GetModuleFilenameEx или CreateToolhelp32Snapshot с Process32First и Process32Next). Если вы не нашли экземпляр ntvdm.exe, то no 16-битный процесс не запущен, и вы можете на этом остановиться. Если вы найдете экземпляр ntvdm.exe, вы можете использовать VDMEnumTaskWOWEx для перечисления 16-битных процессов, запущенных в нем.

В те времена, когда он еще находился под первоначальными владельцами, я опубликовал статью на CodeGuru, демонстрирующую, как это сделать. Чтобы компилировать его под современный компилятор, потребовалось бы немного работы (например, он достаточно стар, чтобы использовать iostream.h вместо iostream, но часть перечисления процесса все равно должна быть в значительной степени правильной (хотя, глядя на вещей, вам также нужно включить SeDebugPrivilege для его работы в Windows 7).

...