Информация об изменениях

Сообщение Re[5]: Мультипроцессный защищенный код от 06.04.2018 11:24

Изменено 06.04.2018 11:28 ononim

Re[5]: Мультипроцессный защищенный код
B>я имею ввиду иметь два сегмента юзеркода в одном процессе но у которых разные права на общий сегмент данных
B>т.е.
B>код сервиса находится в юзермоде в страницах из которых могут писать в общий сегмент данных
B>код клиента находится в юзермоде в страницах из которых НЕЛЬЗЯ прямо писать в общий сегмент данных, но можно вызывать код сервиса
B>такое реально? можно ли настроить разный доступ к одному сегменту с данными двум разным сегментам кода?
B>и всё — в юзер моде, потому что сервису нужны разные юзер апи
У вас некоторая каша в голове. Но ответ — реально. Код клиента — это процесс клиента, код сервиса — это процесс сервиса.
То что вы хотите реализовывается по тому же сценарию что я описал в первой мессаге, с некоторыми дополнениями
1) Сервис мапит файлампинг клиенту с PageProtection = PAGE_READONLY.
2) Синхронизация все равно потребуется, но без подвыподвертов, связанных с безопасностью. Кстати, чтобы достить максимума производительности можно сделать аналог критической секции на расшаренной памяти, что означает что помимо READ/WRITE области памяти потребуется еще одна маленькая область, writable для клиента, чтобы тот мог реализовать на ней. Обычную CRITICAL_SECTION так заюзать нельзя. Будет ли буст оптимален для такого сценария или у них межпроцессная синхронизация тупо на CreateMutex/WaitForSingleObject сделана — я хз. Когдато очень давно я писал свой велосипед с такой целью, но он проприетарен.
Re[5]: Мультипроцессный защищенный код
B>я имею ввиду иметь два сегмента юзеркода в одном процессе но у которых разные права на общий сегмент данных
B>т.е.
B>код сервиса находится в юзермоде в страницах из которых могут писать в общий сегмент данных
B>код клиента находится в юзермоде в страницах из которых НЕЛЬЗЯ прямо писать в общий сегмент данных, но можно вызывать код сервиса
B>такое реально? можно ли настроить разный доступ к одному сегменту с данными двум разным сегментам кода?
B>и всё — в юзер моде, потому что сервису нужны разные юзер апи
У вас некоторая каша в голове. Но ответ — реально. Код клиента — это процесс клиента, код сервиса — это процесс сервиса.
То что вы хотите реализовывается по тому же сценарию что я описал в первой мессаге, с некоторыми дополнениями
1) Сервис мапит файлампинг клиенту с PageProtection = PAGE_READONLY.
2) Синхронизация все равно потребуется, но без подвыподвертов, связанных с безопасностью. Кстати, чтобы достить максимума производительности можно сделать аналог критической секции на расшаренной памяти, что означает что помимо READ/WRITE области памяти потребуется еще одна маленькая область, writable для клиента, чтобы тот мог реализовать на ней вспомогательный спинлок. Обычную CRITICAL_SECTION так заюзать нельзя. Будет ли буст оптимален для такого сценария или у них межпроцессная синхронизация тупо на CreateMutex/WaitForSingleObject сделана — я хз. Когдато очень давно я писал свой велосипед с такой целью, но он проприетарен.