forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Xors3D (http://forum.boolean.name/forumdisplay.php?f=126)
-   -   Не полная загрузка системы (http://forum.boolean.name/showthread.php?t=20458)

DarkInside 13.11.2016 18:11

Ответ: Не полная загрузка системы
 
Как dll в отдельном потоке исполнять? Можно без обертки обойтись? (в виде еще одного exe, который вызывает dll и передает данные в главный exe)

impersonalis 13.11.2016 20:29

Ответ: Не полная загрузка системы
 
Основная программа выделяет память для обмена и передаёт её адрес в качестве параметра командной строки для запуска второй программы.
Вторая программа запускается, парсит адрес памяти для обмена, начинает главный цикл. В цикле выполняется (блокирующая) функция из DLL; после каждого выполнения, результаты сохраняются в память для обмена.
В той же памяти для обмена можно выделить бит, для сигнализации о необходимости остановки: главная программа поднимает бит, а вторичная, в очередной раз перезаписывая данные, его проверяет.

Но мне это не нравится: тут много потенциально опасных мест из-за отсутствия адекватной синхронизации (например, на случай расширения ТЗ). Думаю, антивирусные системы просто взвоют. К тому же - вторичную программу сможет использовать злоумышленник, если не шифровать параметры её запуска.

DarkInside 13.11.2016 20:59

Ответ: Не полная загрузка системы
 
Ну я примерно так и представлял обертку.

Только хотел какой-то готовый интерфейс для обмена использовать. Кстати, какой интерфейс лучше (с минимальной задержкой и при этом наиболее надежный)? WIN_MESSAGE можно или может TCP/IP поднять с отчетом о доставке, чтобы синхронизацию обеспечить? Есть еще вариант через консольную утилиту невидимый ram-disk создать и обмениваться через простое чтение-запись файлов.

UAC может мозг вынести, но его легко можно обойти через ring 2 (RunAsSystem). Если основное приложение запущено от имени системы, оно может творить что угодно (запускать exe), UAC не будет вмешиваться.

Цитата:

вторичную программу сможет использовать злоумышленник, если не шифровать параметры её запуска.
если он обладает навыками, чтобы выцепить, с какими параметрами exe должен запускаться, то он так же в состоянии выцепить параметры, с которыми должна вызываться сама dll, не вижу тут принципиальной разницы

mr.DIMAS 13.11.2016 23:58

Ответ: Не полная загрузка системы
 
Насколько мне известно, блиц уже сто лет как опенсорс. Берем его потрошка, прикручиваем многопоточность, параллельно переводя на C++14. Хотя кому оно надо

DarkInside 14.11.2016 00:03

Ответ: Не полная загрузка системы
 
Не, блиц тут не при чем.

impersonalis 14.11.2016 12:47

Ответ: Не полная загрузка системы
 
Цитата:

Сообщение от DarkInside (Сообщение 310069)
Ну я примерно так и представлял обертку.

Только хотел какой-то готовый интерфейс для обмена использовать.

Ну или непосредственно сырую память (new/delete все дела) или Виндовую надстроечку - OpenFileMapping сотоварищи (Разделяемая память):
Цитата:

В операционной системе Windows для создания разделяемой памяти используется функция CreateSharedMemory[13] из пакета Win32-SDK. C другой стороны, возможно использование функций CreateFileMapping и MapViewOfFile[14] из MSDN.
Это, конечно, не предел мечтаний, с другой стороны - под стать архитектуре с двумя приложениями :(


Часовой пояс GMT +4, время: 03:31.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot