Найдите исполнителя для вашего проекта прямо сейчас!
Разместите заказ на фриланс-бирже и предложения поступят уже через несколько минут.

Если кратко, то задача состоит в том, чтобы написать функцию HANDLE CreateActCtx(LPCVOID pManifest, DWORD dwSize), которая бы не обращалась к csrss.exe, но, тем не менее, отдавала корректный HANDLE, который бы нормально обрабатывался прочими функциями, работающими с activation context.

Дело в том, что создание activation context вовлекает в себя вызов csrss.exe, а это неудобно, когда хочется создать контекст непосредственно из памяти. Например, хочется создавать контекст динамически, не используя временные файлы. Сейчас это невыполнимо.

Хорошая новость состоит в том, что HANDLE, который возвращает стандартный CreateActCtx(ACTCTX) - это указатель на некий буфер, который создается / заполняется частично в csrss.exe. Все прочие функции, вроде ActicateActCtx, используют только этот буфер. Таким образом, для решения задачи необходимо выделить ту часть работы, которую делает csrss.exe, и делать ее в контексте вызывающего процесса. Выяснилось, что csrss.exe вызывает недокументированную функцию sxs.dll!SxsGenerateActivationContext, которая выполняет значительную часть работы. Вероятно, решение должно использовать эту функцию.

От исполнителя требуется любовь к дизассемблированию, радость от копания во внутренностях windows. Предполагается, что будет найден момент, когда процесс вызывает CsrClientCallServer, будут разобраны параметры, далее исследовано, как эти параметры обрабатывает csrss.exe, как именно вызывает sxs.dll!SxsGenerateActivationContext.

Кроме того, известно, что VMWare ThinApp (aka thinstall) умеет создавать контексты прямо из памяти.

16 лет назад
Unhandled_Ex
Россия
16 лет в сервисе
Был
6 лет назад