16-разрядные Приложения, работающие под NTVDM

Изучение математики похоже на получение классического образования, один специально подходящий для программистов и других компьютерных профессий. И математика вид вещи, что можно ценить больше, как Вы становитесь старше. Вы понимаете, что это не о вымучивании ответов так, как это о размышлении глубоко и концептуально. "Ответы", которые Вы могли бы вымучить, имеют намного больше смысла тот путь.

Когда-то, я рекомендовал бы брать курс геометрии и не тороплюсь, чтобы изучить, как доказать теоремы, посмотрите, как понятия текут вместе. В эти дни, тем не менее, я сказал бы, что может быть лучше взять курс в дискретной математике. Это намного более практично, и существует намного больше разнообразия, но существует все еще достаточно теории там для создания его оспариванием, если Вы хотите.

Дискретная математика также предоставляет Вам программирование проблем, о которых Вы, возможно, не думали прежде. Возможно, можно изрубить хорошую эвристику для решения полной NP проблемы, как N-городская проблема Коммивояжера. Возможно, даже предложите пару решений и протестируйте которые работа лучше всего в который обстоятельства.

(я никогда не посещал уроки CompSci в колледже. Можно, вероятно, сказать.)

7
задан Jerry 2 November 2009 в 22:12
поделиться

3 ответа

Уловка состоит не в том, чтобы использовать VDMEnumProcessWOW (который дает VDM), а в том, чтобы использовать VDMEnumTasksWOW . Функция перечислителя, которую вы передаете этой функции, будет вызываться для каждой 16-битной задачи в указанном модуле VDM.

Я не проверял это сам, но, согласно документации, эта библиотека CodeProject выполняет именно это, если вы передадите значение перечисления PROC16. Это C ++, если вам нужна помощь в компиляции этого кода и вызове его из C #, дайте мне знать, и я дам вам пример.

Программа, которая использует эту технику, - Process Master , она поставляется с полный источник. Я предлагаю вам запустить его, чтобы узнать, дает ли он нужную информацию, и если да, вы можете применить этот метод к своему собственному приложению (он не работает в Windows Vista или 7, он использует старый код VB5, по-видимому, он несовместим. Он должен работать в XP).

Если что-то с этими функциями идет не так, как планировалось, возможно, вы используете Vista, и вам может потребоваться исправление, описанное в этом вопросе StackOverflow , которое указывает на загрузку исправление , которое, в свою очередь, описано здесь :

«Приложение, использующее Функция VDMEnumProcessWOW для перечислить виртуальные машины DOS возвращает нет вывода или неправильный вывод на компьютер с 32-битной Интригующее чтение известного Мэтта Пьетрека. Обратите внимание на предложение примерно в конце:

«Для начала, программы на базе MS-DOS кажется, всегда запускается в отдельном NTVDM сеансы. Я так и не смог получить Программа на основе MS-DOS для запуска в тот же сеанс, что и 16-битный Windows программа. Я не смог получить два самостоятельно запустил MS-DOS на базе программы для запуска в том же НТВДМ сеанс. Фактически сеансы NTVDM запущенные программы MS-DOS не отображаются в перечислениях VDMEnumProcessWOW. "

Похоже, чтобы узнать, какие процессы загружены, вам нужно написать перехватчик в NTVDM или написать прослушиватель, который отслеживает доступ к файлу. Когда приложение, которое пытается прочитать определенную DOS Файл - это NTVDM.exe, это бинго. Вы можете написать DLL, которая будет прикреплена только к NTVDM.exe, но теперь мы немного забегаем вперед. Короче говоря: эта небольшая поездка в NTVDM показала "возможности" которые в итоге оказались настоящими мистификациями.

Есть еще один способ, но времени слишком мало, чтобы создать пример. Вы можете покопаться в сегментах памяти DOS, и EXE обычно загружается в том же сегменте. Но я не уверен, приведет ли это в конечном итоге к такому же результату и стоит ли затраченных усилий.

6
ответ дан 7 December 2019 в 03:17
поделиться

Из этой ссылки о функциях VDMDBG вы можете выполнить P / Invoke "VDMEnumProcessWOW ()" , затем перечисляет модули внутри процесса с помощью PSAPI .

Примечание относительно 16-битных приложений DOS:

Ни одна из функций VDMDBG не работает с 16-битные приложения DOS. Перечислить DOS VDM, вам нужно использовать другой метод. Во-первых, вы можете использовать VDMEnumProcessWOW (), чтобы составить список все модули VDM Win16, а затем перечислить все экземпляров NTVDM.exe с использованием некоторых другая схема (например, PSAPI). любой NTVDM.exe из полного перечисления чего не было в списке Win16, это ДОС ВДМ. Вы можете создавать и прекращать 16-битные приложения DOS с CreateProcess () и TerminateProcess ().

Надеюсь, что это поможет ...

1
ответ дан 7 December 2019 в 03:17
поделиться

Это работает для меня:

  • Следуйте инструкциям в Описание политик ограниченного использования программ в Windows XP , чтобы открыть редактор локальной или доменной политики.

  • Под Политики ограниченного использования программ -> Дополнительные правила, щелкните правой кнопкой мыши и выберите Новое правило хеширования.

  • Найдите (например) edit.com . Убедитесь, что для уровня безопасности установлено значение «Запрещено». Нажмите OK.

Теперь

C: \> edit
Система не может выполнить указанную программу.

(Я получаю те же результаты от command.com и cmd.exe - под Win XP)

2
ответ дан 7 December 2019 в 03:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: