Как Process Explorer подменяет Task Manager.
А знаете, как Process
Explorer подменяет собой стандартный Task Manager?
![](http://infol.at.ua/_nw/0/40700.png) ![Process Explorer: Replace Task Manager.](file:///C:/DOCUME%7E1/Alex/LOCALS%7E1/Temp/msohtml1/05/clip_image002.gif)
Оказывается всё очень
просто и банально. Он устанавливает себя в качестве отладчика для taskmgr.exe! ![](http://infol.at.ua/_nw/0/s72968.jpg)
![Process Explorer is set as a](file:///C:/DOCUME%7E1/Alex/LOCALS%7E1/Temp/msohtml1/05/clip_image004.gif)
Преимущества такого метода
перехвата:
- Подмена происходит в недрах
CreateProcess. Неважно кто и как запускает taskmgr.exe, всегда будет
запущен Process Explorer;
- Не нужно возиться Windows File
Protection (WPF), пытаясь подменить исполняемый файл Task Manager’а в
%windir%\system32.
![](http://infol.at.ua/_nw/0/s94393.jpg)
Недостатки:
- Подмена происходит вне зависимости от
реального местонахождения taskmgr.exe. Это может быть и не Task Manager
вовсе, просто имя совпало. Все равно вместо него будет запущен Process
Explorer;
- Имя запускаемого файла “taskmgr.exe”
передается в командную строку подменяющего процесса. Т.е. так просто
напрямую заменить notepad.exe на другой редактор не получится.
Это же способ подменять
что угодно в обход WPF! Можно наконец красиво избавиться от этого …ского
notepad’a!
Подстановка исходного
имени файла в командную строку - это скорее баг, чем фича, что Вы наглядно
продемонстрировали на примере с notepad.
А почему бы не использовать переменную окружения процесса для хранения имени
исходного имени вызываемого файла?
А почему баг то? И даже не
фича это, а документированная возможность подключаться отладчиком при старте
приложения.
А то, что другим приложениям (блокнотам и прочим заменителям программ) “мешает”
передача имени исходного файла в качестве параметра - это их проблема.
|