16-битные приложения, работающие под NTVDM
Я нахожусь в ловушке для выполнения некоторых старых 16-битных приложений, которые наши внутренние люди больше не должны использовать. Это 1985 DOS-приложения, так что ловить их было легко ... захватить любой процесс, который запускается под NTVDM.exe
Теперь проблема состоит в том, чтобы выяснить, какая программа NTVDM фактически работает под капотом. Очевидно, есть пара программ 1985 года, которые им СЛЕДУЕТ запускать, поэтому мне нужно увидеть фактическое имя EXE, которое скрывается под NTVDM.
<pre><code> WqlEventQuery query =
new WqlEventQuery("__InstanceCreationEvent",
new TimeSpan(0, 0, 1),
"TargetInstance isa \"Win32_Process\"");
ManagementEventWatcher watcher = new ManagementEventWatcher(query);
watcher.EventArrived += new EventArrivedEventHandler(watcher_EventArrived);
watcher.Start();
...
static void watcher_EventArrived(object sender, EventArrivedEventArgs e)
{
ManagementBaseObject instance = (ManagementBaseObject)e.NewEvent["TargetInstance"];
ProcessInfo PI = new ProcessInfo();
PI.ProcessID = int.Parse(instance["ProcessID"].ToString());
PI.ProcessName = instance["Name"].ToString();
PI.ProcessPath = instance["ExecutablePath"].ToString();
// Here's the part I need...
PI.ActualEXE = ???;
// ... do the magic on the PI class ...
instance.Dispose();
}
</code></pre>
Когда я получаю информацию об экземпляре, я могу получить командную строку, но аргументы-f -i10 " ... В командной строке нет имени EXE. Есть ли другой метод / свойство, на которое я должен обратить внимание, чтобы определить имя EXE 16-битного приложения, которое 'на самом деле работает?
ОБНОВИТЬ: Позвольте мне уточнить вопрос: если я могу найти процесс NTVDM, как я могу - программно - узнать фактический путь к EXE, который выполняется под ним?
Благодарю.