Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Общие вопросы: взаимодействие между приложениями


Автор: AlexLF 23.4.2014, 13:24
Вопросы на понимание к уважаемой публике по взаимодействию между приложениями (я понимаю в php и JavaScript, но не в десктопных приложениях). Мне это нужно для заявки на патент и моего проекта. 



Допустим, мы делаем приложение "Антивирус" (1 на рисунке), которое проверяет файлы на диске. Файлы для анализа ему указывает (стрелка 3) другие приложения. Например и в частности, приложение "Редактор" (2).

Вопрос 1. Как можно реализовать доставку пути к файлу, которое передается от приложения "Редактор" к приложению "Антивирус".

Для веб-приложений, это я знаю в теории, взаимодействие между программами происходит через порты. Как обстоят дела и как это формулируется (в грамотных выражениях) для десктопных приложений? Слово API я слышал, но никогда сам не применял. "Приложение "Антивирус" предоставляет API сторонним приложениям …" – или как это называется правильными словами.


Далее. "Антивирус" может работать с самыми разными приложениями. И не всем им можно доверять. Я полагаю, что можно сделать область (область 4, выделенная пунктиром), которая находится под управлением "Антивируса". Там находятся кнопки "Проверить" и результаты проверки. 

Вопрос 2. Можно ли сделать так, что "Редактор" не будет знать, что находится в окошке, которое контролируется "Антивирусом"?

Вопрос 3. Можно ли сделать так, что область, выделенная пунктиром, будет перемещаться, при перемещении окна "Редактора" (мышкой), сворачиваться по крестику и правильно перекрываться другими окнами. Пользователь вообще не должен догадываться, что эта область находится под контролем "Антивируса". (В HTML это бы называлось iframe.) 


Далее. Результаты анализа (результаты проверки на вирусы) могут храниться в хранилище данных "Антивируса" (5 на рисунке). (Чтобы не проверять файлы на вирусы каждый раз.) Например: хеш файла такой-то – вирусов нет. Эти результаты также являются приватными.

Вопрос 4: где существуют места на жестком диске, где приложение "Антивирус" может устроить свое хранилище, так, чтобы оно было защищено от доступа других приложений? Предполагаю из общих, что на диск С: (где установлена система) или C:/User должны быть регламентированы права доступа приложений. Или как обстоят дела с доступом вообще? 

Вопрос 5: Надо ли шифровать данные в хранилище? – чтобы другие приложения не могли прочитать.

Вопрос 6: Могут ли сторонние приложения прочитать результаты анализа, которые сейчас находятся в оперативной памяти "Антивируса"?

Автор: tzirechnoy 24.4.2014, 01:54
По-моему, зря Вы конкретно в "Антивирус" полезли. Криптозащита и защита от НСД -- это две области, принцыпиально не жалующие новичков.


Цитата
"Приложение "Антивирус" предоставляет API сторонним приложениям …" – или как это называется правильными словами.


Ну да, если это именно API (интэрфейс, описанный в терминах какого-то языка программирования) -- то так и называется. Типичное API описано либо на языке Си (файлы .h и библиотеки .dll), либо, под виндами -- в виде COM-интэрфейса.
Прежде чем писать своё -- имеет прямой смысл попробовать написать что-то под подобные библиотеки, чтобы посмотреть, как оно у людей делается.
Начать советую с Си, как минимум, потому, что он более портируем, чем COM.

Впрочем, кроме API можно предоставлять и протокол доступа. Такая вещь, на самом деле, должна быть знакома дажэ php-программисту. Указываешь каким-нибудь способом  метод соединения (например, tcp/ip-сокет или, например, под виндой -- named pipe с фиксированным именем), открываешь его в антивирусе и в приложэнии -- вот и получил двунаправленную трубу, по которой можно передавать какие-то данные. Определить для них протокол (как веб-программисту тебе будет проще взять для начала что-то вроде json-rpc), и по нему -- гонять все данные.


Цитата
Вопрос 2. Можно ли сделать так, что "Редактор" не будет знать, что находится в окошке, которое контролируется "Антивирусом"?


Как-то -- вроде можно. Но ненадолго, т.е. временно только перехватив на себя весь рабочий стол. Посмотри, как это сделали в UAC.

Цитата
Вопрос 3. Можно ли сделать так, что область, выделенная пунктиром, будет перемещаться, при перемещении окна "Редактора" (мышкой), сворачиваться по крестику и правильно перекрываться другими окнами. Пользователь вообще не должен догадываться, что эта область находится под контролем "Антивируса". (В HTML это бы называлось iframe.) 


Вместе с 2) -- скорее всего, нет.

Цитата
Вопрос 4: где существуют места на жестком диске, где приложение "Антивирус" может устроить свое хранилище, так, чтобы оно было защищено от доступа других приложений? Предполагаю из общих, что на диск С: (где установлена система) или C:/User должны быть регламентированы права доступа приложений. Или как обстоят дела с доступом вообще? 


Начни, пожалуй, отсюда http://msdn.microsoft.com/en-us/library/windows/desktop/aa374860(v=vs.85).aspx
Хотя это всё, конечно, как вводная никуда не годится. Не могу придумать сейчас ничего сильно лучшэ.

Цитата
Вопрос 5: Надо ли шифровать данные в хранилище? – чтобы другие приложения не могли прочитать.


Это несущественно на этом уровне.

Цитата
Вопрос 6: Могут ли сторонние приложения прочитать результаты анализа, которые сейчас находятся в оперативной памяти "Антивируса"?


Да. Но, если ты правильно врубился в 4) -- то не любые приложэния.







Автор: AlexLF 24.4.2014, 16:35
Спасибо за комменты, переварю - может быть напишу сюда, как понял.

Цитата

По-моему, зря Вы конкретно в "Антивирус" полезли. Криптозащита и защита от НСД -- это две области, принцыпиально не жалующие новичков.

"Антивирус" - не антивирус, и "Редактор" - не редактор. Я занимаюсь заявкой на изобретение и программировать на С не собираюсь. Это будут делать программисты, мне нужно понять сейчас, что возможно, что нет.

Автор: xvr 25.4.2014, 12:28
Цитата(AlexLF @  24.4.2014,  16:35 Найти цитируемый пост)
Я занимаюсь заявкой на изобретение

Судя по вашей картинке и вопросам изобрели вы велосипед  smile 

Ответы на ваши вопросы сильно зависят от 2х других вопросов -
  • Знает ли "Редактор" об "Антивирусе", т.е. имеется ли в его (редактора) коде явное взаимодействие с антивирусом
  • Доверяет ли "Антивирус" "Редактору"? Т.е. не будет ли "Редактор" предпренимать активных попыток изучить то, что ему предоставляет "Антивирус"?
Если ответы на об вопроса - да, то пункты 1-3 реализуются технологией ActiveX Controls.

Ответы на вопросы 4-6 зависят от степени пароноидальности "Антивируса"


Автор: AlexLF 26.4.2014, 16:34
Цитата

Ответы на ваши вопросы сильно зависят от 2х других вопросов -

Знает ли "Редактор" об "Антивирусе", т.е. имеется ли в его (редактора) коде явное взаимодействие с антивирусом
Доверяет ли "Антивирус" "Редактору"? Т.е. не будет ли "Редактор" предпренимать активных попыток изучить то, что ему предоставляет "Антивирус"?


Да, "Антивирус" о "Редакторе" знает. Наверно, "Редактору" сообщен какой-либо секретный номер, по котором он обращается к "Антивирусу". Чтобы не каждое приложение могло обращаться. И, пожалуй что, программисты "Редактора" предупреждены, что не стоит читать содержимое пунктирной области. Иначе их исключат из программы.

Цитата

Если ответы на об вопроса - да, то пункты 1-3 реализуются технологией ActiveX Controls.

Не очень понятно. Судя по Википедии, ActiveX - это про использование внутри Internet Explorer небольших приложений...

Цитата

Судя по вашей картинке и вопросам изобрели вы велосипед  smile 

Это полезный весипед. smile

Автор: xvr 26.4.2014, 18:04
Цитата(AlexLF @  26.4.2014,  16:34 Найти цитируемый пост)
Судя по Википедии, ActiveX - это про использование внутри Internet Explorer небольших приложений...

Не читайте википедию на ночь  smile К Internet Explorer'у она имеет очень отдаленное отношение - он всего лишь один из пользователей этой технологии. 
ActiveX это технология, позволяющая использовать объекты из одного приложения (или dll), в другом в виде 'черного ящика'. А ActiveX Controls - это ее расширение, позволяющее использовать не только объекты, но и экранные образы.

В вашем случае "Антивирус" - это ActiveX сервер (в виде исполняемого приложения), а область 4 в "Редакторе" - это ActiveX Control, который управляется из ActiveX сервера (Антивируса). При этом Редактор не в курсе, что именно показывается в области 4. Для передачи от Редактора к Антивирусу информации об обрабатываемых файлах (стрелка 3) можно использовать другой ActiveX объект (не визуальный), который будет хостится тем же ActiveX сервером (Антивирусом).

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)