Изучение математики похоже на получение классического образования, один специально подходящий для программистов и других компьютерных профессий. И математика вид вещи, что можно ценить больше, как Вы становитесь старше. Вы понимаете, что это не о вымучивании ответов так, как это о размышлении глубоко и концептуально. "Ответы", которые Вы могли бы вымучить, имеют намного больше смысла тот путь.
Когда-то, я рекомендовал бы брать курс геометрии и не тороплюсь, чтобы изучить, как доказать теоремы, посмотрите, как понятия текут вместе. В эти дни, тем не менее, я сказал бы, что может быть лучше взять курс в дискретной математике. Это намного более практично, и существует намного больше разнообразия, но существует все еще достаточно теории там для создания его оспариванием, если Вы хотите.
Дискретная математика также предоставляет Вам программирование проблем, о которых Вы, возможно, не думали прежде. Возможно, можно изрубить хорошую эвристику для решения полной NP проблемы, как N-городская проблема Коммивояжера. Возможно, даже предложите пару решений и протестируйте которые работа лучше всего в который обстоятельства.
(я никогда не посещал уроки CompSci в колледже. Можно, вероятно, сказать.)
Уловка состоит не в том, чтобы использовать 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 обычно загружается в том же сегменте. Но я не уверен, приведет ли это в конечном итоге к такому же результату и стоит ли затраченных усилий.
Из этой ссылки о функциях 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 ().
Надеюсь, что это поможет ...
Это работает для меня:
Следуйте инструкциям в Описание политик ограниченного использования программ в Windows XP , чтобы открыть редактор локальной или доменной политики.
Под Политики ограниченного использования программ -> Дополнительные правила, щелкните правой кнопкой мыши и выберите Новое правило хеширования.
Найдите (например) edit.com
. Убедитесь, что для уровня безопасности установлено значение «Запрещено». Нажмите OK.
Теперь
C: \> edit
Система не может выполнить указанную программу.
(Я получаю те же результаты от command.com
и cmd.exe
- под Win XP)