Итак, имеем процесс, запущенный из файлового потока NTFS. К примеру, C:\Temp\SomeFile:SomeStream.exe. Удаляем SomeFile по F8 в FAR'е или Shift+Del в проводнике... Файл удаляется и имеем рабочий процесс-призрак! В списке процессов он виден, но файла образа у него нет ;-)
Тестировал под WinXP, но я думаю, что этому подвержены все версии NT.
Вот пошаговая инструкция, как потестить это дело:
1) скопируйте FARом notepad.exe в папку C:\TEMP.
2) Отключите параметр "Использовать системную функцию копирования"
3) Наведите указатель на regedit.exe и нажмите F5.
4) В диалоговом окне копирования вбейте путь C:\TEMP\notepad.exe:regedit.exe
и нажмите Ввод.
5) В командной строке FARa в каталоге C:\TEMP наберите notepad.exe:regedit.exe и
нажмите Ввод.
6) Должен запустится Regedit. Сверните его. Наведите указатель FARа на notepad.exe (в котором поток regedit)... Нажмите F8, Enter и получите экстаз ;-)) У вас regedit стал "призраком"...
[NT] Ха — ещё один глюк в XP ;-)16.07.03 20:54 Автор: HandleX <Александр М.> Статус: The Elderman
если файл записать в поток к корневому каталогу (type notepad.exe >c:\:notepad.exe)
а потом его запустить
start c:\:notepad.exe
то в списке процессов получаем еще один System idle process... неплохая маскировка ;-))
NT40 SP6 - не пашет07.07.03 14:56 Автор: NKritsky <Nickolay A. Kritsky> Статус: Elderman
> если файл записать в поток к корневому каталогу (type > notepad.exe >c:\:notepad.exe) > а потом его запустить > start c:\:notepad.exe вот тут появляется Messagebox о том что "e:\:note2.exe is not a valid Windows NT application"
> то в списке процессов получаем еще один System idle > process... неплохая маскировка ;-)) Нихера себе маскировка - если я увижу у себя второй SystemIdleProcess я пожалуй обращу на это вниммание :-)
> > если файл записать в поток к корневому каталогу (type > > notepad.exe >c:\:notepad.exe) Команда type безобразно покорёжит exe. Она же текстовая...
Попробуй FARом...
> вот тут появляется Messagebox о том что "e:\:note2.exe is > not a valid Windows NT application" Ну ты понял, почему not valid...
> > то в списке процессов получаем еще один System idle > > process... неплохая маскировка ;-)) > Нихера себе маскировка - если я увижу у себя второй > SystemIdleProcess я пожалуй обращу на это вниммание :-) Гы. Я бы тоже ;-)
все работает07.07.03 15:13 Автор: ZaDNiCa <indeed ZaDNiCa> Статус: Elderman
> > > если файл записать в поток к корневому каталогу > (type > > > notepad.exe >c:\:notepad.exe) > Команда type безобразно покорёжит exe. Она же текстовая... > Попробуй FARом... все работает без проблем
иначе не предлагал бы
система - w2k SP3
> > Нихера себе маскировка - если я увижу у себя второй > > SystemIdleProcess я пожалуй обращу на это вниммание > :-) > Гы. Я бы тоже ;-) к тем кто знает все процессы наизусть - это ясное дело не относится
однако таких не очень много
Sorry. Наверное, это косяк Диспетчера Задач Win2k, в XP его переделали и всё рулез.07.07.03 15:16 Автор: HandleX <Александр М.> Статус: The Elderman
> > > если файл записать в поток к корневому каталогу > (type > > > notepad.exe >c:\:notepad.exe) > Команда type безобразно покорёжит exe. Она же текстовая... это я уже заметил :-)
> Попробуй FARом... так я и пробовал, просто не стал уточнять - сорри
> > вот тут появляется Messagebox о том что "e:\:note2.exe > is > > not a valid Windows NT application" > Ну ты понял, почему not valid... Вопрос открыт
> > Попробуй FARом... > так я и пробовал, просто не стал уточнять - сорри > > > вот тут появляется Messagebox о том что > "e:\:note2.exe > > is > > > not a valid Windows NT application" > > Ну ты понял, почему not valid... > Вопрос открыт Закрываю вопрос.
Под NT4 Wks SP6 такие дела:
Start notepad.exe.exe:regedit.exe не работает по причине глюкавости команды Start ;-)
CreateProcess() работает, процессы создаются, "призраки" остаются ;-)
Диспетчер задач показывает вместо реального имени (или хотя бы regedit.exe) notepad.exe ;-) Вот где маскировка — пиши поток в internat.exe или в explorer.exe — не всякий догадается, ху из ху ;-)
В случае же с файлом 'C:\:notepad.exe' не работает ни CreateProcess, ни CreateProcessW с префиксом «\\?\» — ошибка 193.
Причём это не работает не только для потока из корневого каталога, но и для потока «C:\Temp:notepad.exe» тоже, т.е. для любого каталога.
Под Win2k ситуация похожая, исключая только то, что могут создаваться процессы из потоков, которые в каталогах. Причём Диспетчер Задач показывает вместо реального образа имя каталога (у меня для процесса из C:\Temp:notepad.exe показывал «Temp»).
Причём прикол — команда start не позволяет запускать процессы из потоков, которые в файлах, но позволяет из тех, которые в каталогах ;-)
Ну, и наконец, для случая с C:\:notepad.exe появляются два System Idle процесса, причём это так думает только Диспетчер Задач. Far'овский плагин просмотра процессов работает корректно (показывает «:notepad.exe»), правда не показывает его свойства.
Ну вот такие дела, если кого это обрадует ;-)
NT40 И ещё один вопрос :-)07.07.03 18:29 Автор: NKritsky <Nickolay A. Kritsky> Статус: Elderman
> В случае же с файлом 'C:\:notepad.exe' не работает ни > CreateProcess, ни CreateProcessW с префиксом «\\?\» — > ошибка 193. Это я и сам заметил. Есть какие-нибудь идеи по поводу тогопочемуименно такая ситуация? Я пока дошел только до NtCreateSection - сейчас дальше не могу копать - закачка отвалится :-) Если кто-то расскажет в чем там дело буду рад. Просто интересно.
Хм... Под XP всё нормально. Может уже исправили?07.07.03 13:52 Автор: HandleX <Александр М.> Статус: The Elderman
Как его теперь удалить. Не усечь до 0, а именно удалить стандартными средствами. В гугле советуют перенести файл на фат и обратно. Но не буду же я корень тащить на фат :-)
Цитата: "In addition, streams cannot be deleted - to delete a stream you must delete its parent."
Фигня всё это. Вызови DeleteFile("C:\:notepad.exe")07.07.03 14:30 Автор: HandleX <Александр М.> Статус: The Elderman
Мне вот другое интересно — как NT его будет пейджить?07.07.03 12:20 Автор: HandleX <Александр М.> Статус: The Elderman Отредактировано 07.07.03 12:55 Количество правок: 1
Чудится мне, если exe будет большой, а процесс будет долго работать, и NT будет ещё чем-то напрягаться, то упадёт в синий экран через время, когда надо будет восстановить страницу из образа ;-)
Хм а ты уверен что файл удалился?07.07.03 14:38 Автор: Killer{R} <Dmitry> Статус: Elderman
Ну, после перезагрузки после проверки диска видим вот что:
--------------------------------------
Checking file system on C:
The type of the file system is NTFS.
A disk check has been scheduled.
Windows will now check the disk.
Cleaning up 1 unused index entries from index $SII of file 0x9.
Cleaning up 1 unused index entries from index $SDH of file 0x9.
Cleaning up 1 unused security descriptors.
--------------------------------------
Кстати, постоянно такая фигня в XP. Откуда берутся — сам большой Билл, наверное, не знает ;-)
В корне диска лишнего ничего не появляется, в каталоге, где велись эксперименты, тоже всё чисто. Выходит, удаляется он ;-)
[NT] По вере вашей да будет вам...07.07.03 15:40 Автор: Killer{R} <Dmitry> Статус: Elderman
> В корне диска лишнего ничего не появляется, в каталоге, где > велись эксперименты, тоже всё чисто. Выходит, удаляется он > ;-) совсем не выходит. если открытый файл какойлибо файл переписать в другой каталог хэндл не теряется и программа прекрасно работает с этим файлом даже не зная что файл уже в другом месте. Так что если твой файл вообще пропал из списка файлов не значит что он стерт Ж). имхо надо почитать доки по нтфс.
[NT] А может и выходит ;-)07.07.03 16:07 Автор: HandleX <Александр М.> Статус: The Elderman
> совсем не выходит. если открытый файл какойлибо файл > переписать в другой каталог хэндл не теряется и программа > прекрасно работает с этим файлом даже не зная что файл уже > в другом месте. Так что если твой файл вообще пропал из > списка файлов не значит что он стерт Ж). имхо надо почитать > доки по нтфс. С хендлами не так всё просто. Они суть ссылки на объект ядра, а при вызове MoveFile() система выставляет правильный путь в полях самого объекта. И сделано это для обновления запущенного софта, имхо.
я тут эксперимент провел07.07.03 16:20 Автор: Killer{R} <Dmitry> Статус: Elderman
взял прогу свою, довольно специфическую - написана на билдере и многие окна создаются только когда надо, а потом удаляются. прогу скорировал в поток как ты сказал запустил и сразу удалил. Удалилась нормально и полностью. У меня сп4 стоит. Далее стал открывать окошки - фиг вам - говорит Invalid strem но вообще пашет.Ок. Закрыл ее, записал опять. Запустил и на этот раз пооткрывал все что можно. Затем все закрыл и свернул (9Mb в RAM-> 1.5Mb). Удалил, развернул - и все равно пашет все нормально.
ЗЫ а баг действительно есть. Нo не фатальный Ж). Пиши в M$ если лицензия на винду есть Ж).