Здравствуйте, gear nuke, Вы писали:
GN>Здравствуйте, onyx2, Вы писали:
O>>Проверял под XP — работает.
GN>Под SP2?
Только что проверил — работает.
Только там одна странность (только что выяснил) запускаешь exe из архива, он распаковывается запускается, а потом при закрытии программы (просто при закрытии, без всякого удаления exe-файла) происходит BSOD — думаю, что c SP2 это не связано
Здравствуйте, onyx2, Вы писали:
O> //zero ImageSection — теперь можно будет удалить образ любого выполняющегося exe в системе O> if (FileObject->SectionObjectPointer->ImageSectionObject) O> FileObject->SectionObjectPointer->ImageSectionObject= 0;
Это как минимум страшно озадачит фильтры в стеке, которые полагаются на подсчет ссылок. Неправильный подсчет ссылок = обычно взрыв рано или поздно (спустя неск часов например), если кто не в курсе. Или deadlock, неясно что лучше Хотя нет, когда фильтрам в стеке сносит крышу, проблемы могут быть самые разные...
Этот код явно также озадачит тот же FSD (или через его иное поведение Cc\Mm как-нибудь), который пользует указанное поле для сброса кэша в нужных местах вроде закрытия файла или тома, плюс искомые приключения (вижу пост ниже) даст обратная связь со стороны Мм и\или Сс на удаленный FO — кто-то же кодом выше сказал что можно удалять файло. Вполне может быть что его уже удалили — я так понимаю что у Вас IRP_MJ_CLOSE приходит до того как кто-то там у Вас перестал пользовать удаленный exe через ImageSectionObject? Если так, то после этого можно уже начинать потихоньку в белую простыню завертываться и в сторону кладбища начинать движение...
Тут бы можно было ссылочку накинуть, дабы FO не удалялся, но это замкнет круг — удаление не пройдет в RealZwSetInformationFile вероятно.
Короче, я бы не считал это решением совсем. Я бы лучше попросил обрисовать проблему автора топика. Скорее всего у него инсталлятор из-за этого требует перезагрузки или еще что — но такие вещи не решаются подобными методами.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
Re[3]: Решение - удаление выполняющегося в дан. момент .exe!
Пробовать лень — но, по идее, должно хотя бы уменьшить вероятность глюков: восстанавливать ImageSectionObject после обращения к RealZwSetInformationFile.
Re[3]: Решение - удаление выполняющегося в дан. момент .exe!
Здравствуйте, Valery A. Boronin, Вы писали:
VAB>Короче, я бы не считал это решением совсем.
IMHO дело не в деталях, а в том, что решение вообще возможно относительно малой кровью. В SP2 залатали старую дыру, дававшую возможность удаления. Предложенный способ имеет недостатки, но их решения наверняка найдутся, нужно только копать ещё . На выходных надо будет потренироваться. Мне почему-то кажется, что можно даже из юзермода попробовать сделать всё страницы exe dirty (тогда менеджер памяти отобразит их на swap) перед удалением. Запускить юзермодные процессы из ядра тоже не было задумано by design, но это возможно.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re: Решение - удаление выполняющегося в дан. момент .exe!
Как то граждане сложно всё...
Мне кажется самым правильным способом является создание внешнего процесса которые просто чекает что файл занят а потом убивает его. А хакерские методы в этом случае не самое лучшее решение. Но прикольное
С уважением AWOD.
Re[2]: Решение - удаление выполняющегося в дан. момент .exe!