Здравствуйте, AlexKom, Вы писали:
AK>Добрый день!
AK>Я столкнулся с проблемой — есть 32-битный проект, который выполняет inject в чужой процесс используя CreateRemoteThread. В 32-х битной WinXP всё работает замечательно. Тот же самый код в 64-битном окружении работать не хочет, функция CreateRemoteThread возвращает ошибку Access denied.
AK>Я использовал код Рихтера (глава 22 из книги "Создание эффективных Win32-приложений с учетом специфики 64-разрядной версии Windows). Та же самая ошибка. У Рихтера никаких объяснений по этому поводу нет (да и про возможность появления ошибки тоже).
AK>Есть подозрение, что 32-битный процесс запускается в своей "песочнице" и поэтому нельзя 32-битную dll внедрить в 32-битный процесс.
AK>Если кто-то сталкивался с подобной проблемой — поделитесь как решали. AK>Может быть у кого есть линки на хорошее описание, как именно выполняются 32-битные процессы в Win64 — было бы тоже замечательно. Ничего внятного по этой теме я пока найти не смог.
проблема оказалась во флаге PROCESS_VM_READ, который нужно было обязательно указать в OpenProcess. Удивительно, но без него все хорошо работало везде, кроме WinXP64. В документации четко указано, нужно обязательно его использовать.