Как завершить процесс из ring0? И еще вопрос. Можно удалить сервис из ring0? есть функции такие? пишу на c++
Но ведь ключ в реестре это не всё что создаётся при регистрации сервиса, например если тупо вручную создать ключ то сервис не появится в списке сервисов. поправьте если неправ
2FED да, в кмдкит содержиться такое высказывание "что ручное создание ключей не гарантирует это" и ещё в каких-то трудах встречается это. но если вальнуть в реестре ветку драйвера, то почему-то, по крайней мере у меня, действует на 100%
wsd Ну так этож разные вещи. Ручное создание ветки реестра не гарантирует, что сервис запустится. Ручное удаление ветки реестра гарнтирует, что сервис не запустится.
Aspire так я разве не это сказал? в первой половине объяснил что запуск не гарантируется во второй что мочиться на 100% ?
wsd Извини, я только начинаю разбираться с ринг0. Просто хотел поучаствовать в обсуждении PS Вы от меня еще услышите кучу дурацких вопросов в этом подфоруме )))
В случае с веткой реестра: при загрузке драйвера в функции IopLoadDriver в цикле проверяется путь к уже загруженным модулям и к текущему - при совпадении загрузка завершается. P.S. Еще создается ветка HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\Root\LEGACY_XXXX.
как можно по eprocess или по PID узнать Handle процеса, чтоб скормть его TerminateProcess ? В eprocess обнаружил ..... +0x0c4 ObjectTable : Ptr32 _HANDLE_TABLE +0x000 TableCode : Uint4B +0x004 QuotaProcess : Ptr32 _EPROCESS +0x008 UniqueProcessId : Ptr32 Void +0x00c HandleTableLock : [4] _EX_PUSH_LOCK +0x01c HandleTableList : _LIST_ENTRY .... это то ?
Чтобы получить Handle по Pid: NTSTATUS ZwOpenProcess ( __out PHANDLE ProcessHandle, __in ACCESS_MASK DesiredAccess, __in POBJECT_ATTRIBUTES ObjectAttributes, __in_opt PCLIENT_ID ClientId ) Но лучше наверное по eprocess, чтобы небыло проблем с правами: NTSTATUS ObOpenObjectByPointer( IN PVOID Object, IN ULONG HandleAttributes, IN PACCESS_STATE PassedAccessState OPTIONAL, IN ACCESS_MASK DesiredAccess, IN POBJECT_TYPE ObjectType, IN KPROCESSOR_MODE AccessMode, OUT PHANDLE Handle );
at0s PsTerminateProcess(). Получать и манипулировать описателями в ядре имея ссылку на обьект это извращение. Вы бы есчо в юзермод прыгнули, чтоб оттуда сервис через апи вызвать
Кле-е-е-рк Найти не проблема. Суть в другом: зачем гемороиться с поиском (он же должен везде работать), когда можно использовать более легкий в плане реализации способ? Про выигрыш в скорости говорить, думаю, нет смысла - Винда так насыщена различными вызовами функций, что одной-двумя больше или меньше - роли не сыграет. А какие другие объективные причины? Перехват Zw? Ну с тем же успехом и Ps перехватить могут. В чем суть?
Twister Именно. Зачем приложению посылать оконные сообщения перед завершением, информируя чтобы приложение само нормально завершилось - этоже так сложно, лучше сносить всё бгг.