Clerk CreateRomouteThread возвращает ошибку ERROR_ACCESS_DENIED, при любых правах + sedebug привилегии. нету у меня никакого сервиса)
Дебажить кодес windbg x64. Ставьте Код (Text): bp Wow64NtCreateThread После бряка на этой функции трейсить ее по f10. лог выложите здесь, тогда все будет ясно.
leo >Соотв-но базовые адреса сис. dll м.б. различны в разных сессиях, но в пределах одной сессии для всех процессов они по прежнему одинаковы Ага, вот откуда ноги растут у этого утверждения. Следует учитывать, что там Mark имел в виду загрузочные сессии – т.е. сеансы работы оси между перезагрузками. >Поэтому нельзя жестко прошивать адреса ф-й в проге, а определять их в своем процессе и юзать в другом - можно, пока... Можно, пока не получится так, что какая-нибудь сторонняя длл загрузится до определённой системной и займёт её место, форсируя последующую релокацию последней Ну или там память кто-нибудь выделит не в том месте с тем же исходом. Хотя для ntdll и kernel32 пока действительно можно. Но kernel32 уже сейчас без проблем могут из этого исключить, как нам кажется. KeSqueer >+Установка привилегии SeDebugPrivilege Зачем её включать? freeq >а вы уверены что процесс в который вы делайте инжект запущен в той же сессии что и вы? А какая разница? lobzik Советуем сделать минимальный код, который должен создавать удалённый поток в блокноте. Без инжектов библиотек, без всего. Если это ничего не даст, можешь выложить этот минимальный код сюда – только чтобы он сразу без вопросов скомпилировался – мы посмотрим на w7 x64.
Еще должны быть флаги PROCESS_QUERY_INFORMATION и PROCESS_VM_READ при открытии процесса. Валится, как и подозревалось в wow64. хотя флаги не помогут все равно (ошибка будет, но позже), тред не будет создан в 64 битном процессе, опять же из-за особенностей wow64. Тест был на winxp64, чуть позже посмотрю на win7 Sol_Ksacap, проверьте личные сообщения.
freeq Ох, а и правда ведь. Но это фасилицируется на высоком уровне. На самом деле межесессионно поток создаётся (NtCreateThread() возвращает STATUS_SUCCESS), но при неудаче последующего запроса CsrClientCallServer() он будет уничтожен. Если, допустим, под дебаггером изменить статусы возврата после вызова CsrClientCallServer() на успех, то можно будет наблюдать, как CreateRemoteThread() вернёт корректный хендл.