SysFn60/ru
Jump to navigation
Jump to search
Функция 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 (см. коды событий).