Могу ли я пропатчить kernel32.dll да так чтобы потом все это дело работало? Рассуждаю примерно так, что перед патченгом надо бы остановить все потоки... И еще вопрос, если я ее пропатчу, последующие загрузки этой либы будут уже моей пропатченной, или же надо ждать ребута?
для модификации файла, для которого уже открыт хендл с FILE_SHARE_READ только надо открыть файл, через ринг0 сменить права доступа к хендлу на read/write и писать столько, сколько захочется.
В ринг3 нельзя редактировать открытый файл без FILE_SHARE_WRITE. Единственный вариант - открыть том на запись, получить карту размещения файла на диске в кластерах и записывать кластеры напрямую
agent007 А кто тебе позволит его перезаписать то? MoveFile вернет ERROR_ACCESS_DENIED. Максимум, что можно сделать - отложенная операция перемещения через MoveFileEx, которая будет выполнена на следующей перезагрузке.
Повторяю еще раз, кто тебе позволит изменять как-либо этот файл? Переименование. запись, удаление и т.п. запрещено - только чтение и копирование
Great ну попробуй любой занятый файл переименовать (перенести) и заместо него записать любой с таким же именем...
вообще-то memory mapped file можно переименовывать, это же относится и к запущенным приложениям. Так что для замены длл: 1. удалить kernel32.dll из dllcache 2. переименовать kernel32.dll в kernel32.dll.old 3. скопировать в system32 свой kernel32.dll 4. ребут В случае проблем можно зайти через recovery console и вернуть старый файл