Есть комплект старых программ, которые сделаны для Вин98 и передача некоторых данных между разными програмами происходит "прямой записью в память процесса"... ну или как-то похоже через полухакнутое WinAPI. В Вынь98 это все работает нормально, он при попытке работы с Win2000 или далее, система закрывает этот софт за ошибку доступа к памяти, т.е. в НТях такое похоже уже запрещено. Есть какие-нить методы отключения проверки на запись в память "другого процесса" в НТях ? Т.е. фактически надо порушить часть системы разграничения доступа к памяти в НТях имхо... Или может как-нить для этих программ "поднять приоритет" чтобы им разрешалось перекидываться байтами между собой ?
в описании указано The handle must have PROCESS_VM_WRITE and PROCESS_VM_OPERATION access to the process. т.е. необходимо как-то поставить эти опции (флаги) у хендлов обоих процессов ? программы есть только в виде готовых исполняемых файлов : editor.exe и engine.exe ... из editor.exe по команде запускается engine.exe и некоторым образом через "запись в память" передаются параметры и что-то возвращается... при этом engine.exe достаточно быстро закрывается системой за запрещенный доступ к памяти при пересылке информации о некоторых объектах (не всех - часть пересылок работает)...
Права задают при получении хендла OpenProcess'ом. Если есть только исполняемые файлы - для начала нужно определить как происхолит "запись в память"
вообщем как было примерно раскопано реверсингом обмен идет через File Mapping причем похоже CreateFileMapping создается одним процессом, а OpenFileMapping и затем чтение/запись производится вторым (по переданному хендлу похоже) - это работает в Вынь98, но падает в Вынь2000 ...
Drakon Rider > "по переданному хэндлу похоже" Похоже или точно ? В отличие от NT+, в 9x файлы маппятся в 3-й гигабайт, разделяемый всеми процессами. Поэтому в 9х есть возможность прямого обращения к View, созданного другим процессом, т.е. второй процесс может и не создавать дубликат хэндла FM-объекта и свой View, а просто читать\писать по адресу, переданному из другого процесса. Ес-но в NT такой trick не проходит, т.к. все View являются приватными
>Похоже или точно ? предположительно... т.к. вроде OpenFileMapping сам не может получить хендл и его где-то надо брать... >В отличие от NT+, в 9x файлы маппятся в 3-й гигабайт, разделяемый всеми процессами. Поэтому в 9х есть возможность прямого обращения к View, созданного другим процессом, т.е. второй процесс может и не создавать дубликат хэндла FM-объекта и свой View, а просто читать\писать по адресу, переданному из другого процесса. Ес-но в NT такой trick не проходит, т.к. все View являются приватными и чем тогда это фиксить то ?
Drakon Rider я что тебе мешает присоеденить к процессу передатчику свою длл и к процессу приемнику тоже и пусть они симулируют для этихпроцессов обмен.
> присоеденить к процессу передатчику свою длл и к процессу приемнику тоже и пусть они симулируют для этихпроцессов обмен ну это немало прикручивать имхо... еще багу похоже программную раскопал - там в одном месте сначала делается UnMapViewOfFile, а потом и отмапленной памяти читается через несколько команд - возможно это работало в Вынь98, но в Вынь2000 сразу приводит к ошибке... если UnMap обойти, то валится уже не Engine.exe, а Editor.exe - вообщем похоже не совсем правильно исходные программы были сооружены... исходный вопрос сохраняется - вообще отключить проверку "защищенности" памти в НТях можно как-нить несложно или это аппаратная фича процессора и т.д. ? почему тогда в Вынь98 это все работало ? или она по-другому обрабатывает UnMapViewOfFile и отмапленная память остается доступна для чтения ?
> "почему тогда в Вынь98 это все работало ? или она по-другому обрабатывает UnMapViewOfFile и отмапленная память остается доступна для чтения ?" Я ж тебе толкую, что в 9x MapView создается в системном shared регионе, поэтому к нему сохраняется доступ из любого процесса пока система его не грохнет. А грохнуть она его может ес-но только после того как все процессы, владеющие данным объектом MMF, сделают UnMap и к тому же закроют все хэндлы этого MMF. В NT все MapView приватные для каждого процесса и становятся инвалидными сразу после UnMap в каждом конкретном процессе PS: Если дело в этом, то фантазии на тему "отключить проверку" это просто бред, т.к. в результате UnMap в NT делается VirtualFree выделенного региона памяти данного процесса, соответствующие страницы его виртуальной памяти помечаются как неприсутствующие, их связь с физ.памятью разрывается и тут уж ничего не поделаешь - "программно-аппаратная фича", если угодно
что так тянет использовать устаревший софт на совеременной ОС? если прога из-за несовместимости не работает в WinNT/2k/XP, а работает в Win9x, то и ползуйтесь её в Win9x или вас держит привязанность к закрытым помершим программам? если это всё ещё и коммерческая разработка - то тут уж вообще не понятно желание ТАК экономить на новом.
>что так тянет использовать устаревший софт на совеременной ОС? потомушто после апгрейда железа на i915, Вин98 перестала запускаться :/ ... зато на новом железе Engine тянет существенно больше полигонов при достаточном фпс, чем в 1999 году и можно сделать более детализированные модели и уровни...
отключить защиту памяти то есть чтобы все страницы в системе были "user" как ни странно весьма несложно - пару бит в ntldr-е но только тебе это 99% не поможет винда 98 от NT не только этими битами отличается дореверси до конца и разберись почему именно не идет тогда можно на эту так дозарезу нужную прогу написать обертку например или попатчить ну это как доктор пропишет если в питере - давай помогу
>пару бит в ntldr-е а которые ? ... я хоть попробую... >или попатчить ну это как доктор пропишет если в питере - давай помогу да - в питере, как связаться я не нашел... у меня адрес admin@drakan.ru - напиши плиз чтобы обсудить как что...