SysFn60/ru: Difference between revisions

From KolibriOS wiki
Jump to navigation Jump to search
(Created page with ''''Функция 60 - Inter Process Communication (IPC).''' IPC применяется для посылок сообщений от одного процесса/потока ...')
 
Line 7: Line 7:
=== Подфункция 1 - установить область для получения IPC ===
=== Подфункция 1 - установить область для получения IPC ===
Вызывается процессом-приёмником.
Вызывается процессом-приёмником.
Параметры:
 
  * eax = 60 - номер функции
''Параметры:''
  * ebx = 1 - номер подфункции
 
  * ecx = указатель на буфер
* eax = 60 - номер функции
  * edx = размер буфера
* ebx = 1 - номер подфункции
Возвращаемое значение:
* ecx = указатель на буфер
  * eax = 0 - всегда успешно
* edx = размер буфера
Формат IPC-буфера:
 
  * +0: dword: если здесь не 0, то буфер считается заблокированным;
''Возвращаемое значение:''
    блокируйте/разблокируйте буфер, когда вы с ним активно работаете
 
    и вам надо, чтобы извне не изменялись данные буфера
* eax = 0 - всегда успешно
    (не поступали новые сообщения)
 
  * +4: dword: занято места в буфере (в байтах)
''Формат IPC-буфера:''
  * +8: первое сообщение
 
  * +8+n: второе сообщение
* +0: dword: если здесь не 0, то буфер считается заблокированным; блокируйте/разблокируйте буфер, когда вы с ним активно работаете и вам надо, чтобы извне не изменялись данные буфера (не поступали новые сообщения)
  * ...
* +4: dword: занято места в буфере (в байтах)
Формат сообщения:
* +8: первое сообщение
  * +0: dword: PID процесса/потока, пославшего сообщение
* +8+n: второе сообщение
  * +4: dword: длина сообщения (не считая этот заголовок)
* ...
  * +8: n*byte: данные сообщения
 
''Формат сообщения:''
 
* +0: dword: PID процесса/потока, пославшего сообщение
* +4: dword: длина сообщения (не считая этот заголовок)
* +8: n*byte: данные сообщения


=== Подфункция 2 - послать сообщение IPC. ===-
=== Подфункция 2 - послать сообщение IPC. ===-
Вызывается процессом-инициатором.
Вызывается процессом-инициатором.
Параметры:
 
  * eax = 60 - номер функции
''Параметры:''
  * ebx = 2 - номер подфункции
 
  * ecx = PID приёмника
* eax = 60 - номер функции
  * edx = указатель на данные сообщения
* ebx = 2 - номер подфункции
  * esi = длина сообщения (в байтах)
* ecx = PID приёмника
Возвращаемое значение:
* edx = указатель на данные сообщения
  * eax = 0 - успешно
* esi = длина сообщения (в байтах)
  * eax = 1 - приёмник не определил буфер для IPC-сообщений
 
    (может быть, ещё не успел, а может быть, это не тот поток,
''Возвращаемое значение:''
    который нужен)
 
  * eax = 2 - приёмник заблокировал IPC-буфер;
* eax = 0 - успешно
    попробуйте немного подождать
* eax = 1 - приёмник не определил буфер для IPC-сообщений (может быть, ещё не успел, а может быть, это не тот поток, который нужен)
  * eax = 3 - переполнение IPC-буфера приёмника
* eax = 2 - приёмник заблокировал IPC-буфер; попробуйте немного подождать
  * eax = 4 - процесса/потока с таким PID не существует
* eax = 3 - переполнение IPC-буфера приёмника
Замечания:
* eax = 4 - процесса/потока с таким PID не существует
  * Система сразу после записи IPC-сообщения в буфер посылает
''Замечания:''
    потоку-приёмнику событие с кодом 7 (см. коды событий).
 
* Система сразу после записи IPC-сообщения в буфер посылает потоку-приёмнику событие с кодом 7 (см. коды событий).

Revision as of 15:45, 10 April 2010

Функция 60 - Inter Process Communication (IPC).

IPC применяется для посылок сообщений от одного процесса/потока другому. При этом следует предварительно договориться о том, как интерпретировать конкретное сообщение.

Подфункция 1 - установить область для получения IPC

Вызывается процессом-приёмником.

Параметры:

  • eax = 60 - номер функции
  • ebx = 1 - номер подфункции
  • ecx = указатель на буфер
  • edx = размер буфера

Возвращаемое значение:

  • eax = 0 - всегда успешно

Формат IPC-буфера:

  • +0: dword: если здесь не 0, то буфер считается заблокированным; блокируйте/разблокируйте буфер, когда вы с ним активно работаете и вам надо, чтобы извне не изменялись данные буфера (не поступали новые сообщения)
  • +4: dword: занято места в буфере (в байтах)
  • +8: первое сообщение
  • +8+n: второе сообщение
  • ...

Формат сообщения:

  • +0: dword: PID процесса/потока, пославшего сообщение
  • +4: dword: длина сообщения (не считая этот заголовок)
  • +8: n*byte: данные сообщения

=== Подфункция 2 - послать сообщение IPC. ===-

Вызывается процессом-инициатором.

Параметры:

  • eax = 60 - номер функции
  • ebx = 2 - номер подфункции
  • ecx = PID приёмника
  • edx = указатель на данные сообщения
  • esi = длина сообщения (в байтах)

Возвращаемое значение:

  • eax = 0 - успешно
  • eax = 1 - приёмник не определил буфер для IPC-сообщений (может быть, ещё не успел, а может быть, это не тот поток, который нужен)
  • eax = 2 - приёмник заблокировал IPC-буфер; попробуйте немного подождать
  • eax = 3 - переполнение IPC-буфера приёмника
  • eax = 4 - процесса/потока с таким PID не существует

Замечания:

  • Система сразу после записи IPC-сообщения в буфер посылает потоку-приёмнику событие с кодом 7 (см. коды событий).