SysFn60/ru: Difference between revisions
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 = указатель на буфер | ||
* edx = размер буфера | |||
Формат IPC-буфера: | |||
''Возвращаемое значение:'' | |||
* eax = 0 - всегда успешно | |||
''Формат IPC-буфера:'' | |||
* +0: dword: если здесь не 0, то буфер считается заблокированным; блокируйте/разблокируйте буфер, когда вы с ним активно работаете и вам надо, чтобы извне не изменялись данные буфера (не поступали новые сообщения) | |||
* +4: dword: занято места в буфере (в байтах) | |||
Формат сообщения: | * +8: первое сообщение | ||
* +8+n: второе сообщение | |||
* ... | |||
''Формат сообщения:'' | |||
* +0: dword: PID процесса/потока, пославшего сообщение | |||
* +4: dword: длина сообщения (не считая этот заголовок) | |||
* +8: n*byte: данные сообщения | |||
=== Подфункция 2 - послать сообщение IPC. ===- | === Подфункция 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 (см. коды событий). |
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 (см. коды событий).