Page 1 of 1

опять я и опять IPC

Posted: Fri Jul 01, 2005 12:16 pm
by DoomEd Archangel
всё же я не понимаю, господа присяжные заседатели! у меня появилось немного свободного времени на работе и я решил продолжить извращать Буфер обмена. а что из этого вышло? опять стою и НЕ ПОНИМАЮ!
для тех кто не помнит ф-ю 60:
60 = ВЗАИМОДЕЙСТВИЕ МЕЖДУ ПРОЦЕССАМИ (IPC)
INTER PROCESS COMMUNICATION
ebx = 1 - определить область памяти для приема сообщений IPC
ecx = адрес
edx = размер
ebx = 2 - послать сообщение
ecx = PID процесса
edx = указатель на сообщение
esi = его длина
регистры не изменяются
см. также функцию 40

Никаких описаний работы тов. Велосипед не предоставил.
Отправляю IPC сообщение длиной в 2 байта (типа "hi") а на том конце получаю
+0 dword PID отправляющего
+4 dword некое число, напрямую зависящее от количества передаваемых байт, однако принципа я не понял. отправляю 2 байта этот дворд равен 12. отправляю 256 байт - он равен пятьсот сколькототам.
+8 dword какие то страшные цифры 1819043176
+12 dword тоже цифры.
Мож кто слышал или сам сталкивался?
Вопрос 2 - принимается только первое сообщение IPC. Остальные игнорируются (точнее игнорируется само принятие этих сообщений - ф-я 10 молчит) мож надо что нить сбрасывать? флажок какой нить?

в теории уже почти готовы макросы отправки-прёма (ещё не проверял в действии т.к. см. выше)

Posted: Fri Jul 01, 2005 12:20 pm
by DoomEd Archangel
И ещё вспомнил чё хотел спросить - отлов нажатий клавиш (хотя бы принт скрин и скролл лок) в не активном приложении..
Посмотрел PANEL. хитроооо! я бы так не додумался, но ведь должен быть способ попроще?

Posted: Sat Jul 02, 2005 9:12 am
by halyavin_
Скорее всего +4 dword должен быть размером сообщения. +8 dword - самим сообщением.
Смотрим ветку дополнения sysfuncr.txt в форуме ядро. Я там описал принцип работы ipc в MenuetOS. Если это не поможет - шли программу, доказывающую неверность моего описания 60 функции. (halyavin [at ] land [point ] ru)

Posted: Mon Jul 04, 2005 6:38 am
by DoomEd Archangel
thnx! а я что то не смотрел.. сори :)

Posted: Tue Jan 10, 2006 1:09 pm
by DoomEd Archangel
тааак. (только не смейтесь ;) ) :lol: буфер на финишной прямой. такой вопрос - стек располагается ДО места приёма сообщений, т.к. при необходимости буфер увеличивает свою память. так вот - у велика даже в примере стек располагался где то в середине, это нормально???
второй вопрос - при уменьшении памяти программы какой минимальный предел допускаемый ядром? или его нету (минимума) ?

Posted: Tue Jan 10, 2006 2:45 pm
by halyavin
Размер буфера задается приложением при его создании. Ядро автоматически буфер не увеличивает. Так что где хочешь, там и располагай буфер, только гарантируй, что он ни с чем не пересечется. Велик любит стек посередине. Это имеет смысл когда после стека располагается структура данных, размер которой может расти.
DoomEd Archangel wrote: при уменьшении памяти программы какой минимальный предел допускаемый ядром? или его нету (минимума)
Минимума нет, но если укажешь отрицательное число, то ядро может упасть (эту ситуацию я не учел - будем исправлять).

Posted: Thu Jan 12, 2006 12:23 am
by Mario79
DoomEd Archangel
Молодец! Давай я за тебя болею!

Ты главное помни, что стек начинается в верхних адресах и начинает увеличиваться к нижним. Пока я этого не узнал, из поста Trans'a полтора года назад то делал кучу тупостей в коде и не мог понять, в чем дело. ;-)

В принципе минимальный размер программы нет смысла делать мене 4Кб или 1000h. Так как размер сегмента или страницы не бывает менее 4 Кб. Даже если программа занимает меньше, то она все равно будет занимать в памяти 4 Кб. Это физический предел.

Posted: Thu Jan 12, 2006 2:02 pm
by DoomEd Archangel
thnx. обнаружил глюк смещения копируемого сообщения, при множественном копировании/вставки... ищу.