Difference between revisions of "SysFn60/ru"
Jump to navigation
Jump to search
m |
|||
(One intermediate revision by one other user not shown) | |||
Line 1: | Line 1: | ||
− | '''Функция 60 - Inter Process Communication (IPC). | + | '''Функция 60''' - Inter Process Communication (IPC). |
IPC применяется для посылок сообщений от одного процесса/потока | IPC применяется для посылок сообщений от одного процесса/потока | ||
Line 10: | Line 10: | ||
''Параметры:'' | ''Параметры:'' | ||
− | * eax = 60 - номер функции | + | :* eax = 60 - номер функции |
− | * ebx = 1 - номер подфункции | + | :* ebx = 1 - номер подфункции |
− | * ecx = указатель на буфер | + | :* ecx = указатель на буфер |
− | * edx = размер буфера | + | :* edx = размер буфера |
''Возвращаемое значение:'' | ''Возвращаемое значение:'' | ||
− | * eax = 0 - всегда успешно | + | :* eax = 0 - всегда успешно |
''Формат IPC-буфера:'' | ''Формат IPC-буфера:'' | ||
− | * +0: dword: если здесь не 0, то буфер считается заблокированным; блокируйте/разблокируйте буфер, когда вы с ним активно работаете и вам надо, чтобы извне не изменялись данные буфера (не поступали новые сообщения) | + | :* +0: dword: если здесь не 0, то буфер считается заблокированным; блокируйте/разблокируйте буфер, когда вы с ним активно работаете и вам надо, чтобы извне не изменялись данные буфера (не поступали новые сообщения) |
− | * +4: dword: занято места в буфере (в байтах) | + | :* +4: dword: занято места в буфере (в байтах) |
− | * +8: первое сообщение | + | :* +8: первое сообщение |
− | * +8+n: второе сообщение | + | :* +8+n: второе сообщение |
− | * ... | + | :* ... |
''Формат сообщения:'' | ''Формат сообщения:'' | ||
− | * +0: dword: PID процесса/потока, пославшего сообщение | + | :* +0: dword: PID процесса/потока, пославшего сообщение |
− | * +4: dword: длина сообщения (не считая этот заголовок) | + | :* +4: dword: длина сообщения (не считая этот заголовок) |
− | * +8: n*byte: данные сообщения | + | :* +8: n*byte: данные сообщения |
− | === Подфункция 2 - послать сообщение IPC. === | + | '''Константы для регистров:''' |
+ | ::eax - SF_IPC (60) | ||
+ | ::ebx - SSF_SET_AREA (1) | ||
+ | |||
+ | === Подфункция 2 - послать сообщение IPC. === | ||
Вызывается процессом-инициатором. | Вызывается процессом-инициатором. | ||
Line 39: | Line 43: | ||
''Параметры:'' | ''Параметры:'' | ||
− | * eax = 60 - номер функции | + | :* eax = 60 - номер функции |
− | * ebx = 2 - номер подфункции | + | :* ebx = 2 - номер подфункции |
− | * ecx = PID приёмника | + | :* ecx = PID приёмника |
− | * edx = указатель на данные сообщения | + | :* edx = указатель на данные сообщения |
− | * esi = длина сообщения (в байтах) | + | :* esi = длина сообщения (в байтах) |
''Возвращаемое значение:'' | ''Возвращаемое значение:'' | ||
− | * eax = 0 - успешно | + | :* eax = 0 - успешно |
− | * eax = 1 - приёмник не определил буфер для IPC-сообщений (может быть, ещё не успел, а может быть, это не тот поток, который нужен) | + | :* eax = 1 - приёмник не определил буфер для IPC-сообщений (может быть, ещё не успел, а может быть, это не тот поток, который нужен) |
− | * eax = 2 - приёмник заблокировал IPC-буфер; попробуйте немного подождать | + | :* eax = 2 - приёмник заблокировал IPC-буфер; попробуйте немного подождать |
− | * eax = 3 - переполнение IPC-буфера приёмника | + | :* eax = 3 - переполнение IPC-буфера приёмника |
− | * eax = 4 - процесса/потока с таким PID не существует | + | :* eax = 4 - процесса/потока с таким PID не существует |
''Замечания:'' | ''Замечания:'' | ||
− | * Система сразу после записи IPC-сообщения в буфер посылает потоку-приёмнику событие с кодом 7 (см. коды событий). | + | :* Система сразу после записи IPC-сообщения в буфер посылает потоку-приёмнику событие с кодом 7 (см. [[Events/ru | коды событий]]). |
+ | |||
+ | '''Константы для регистров:''' | ||
+ | ::eax - SF_IPC (60) | ||
+ | ::ebx - SSF_SEND_MESSAGE (2) | ||
{{System_functions}} | {{System_functions}} | ||
[[Category: SysCalls]] | [[Category: SysCalls]] |
Latest revision as of 12:37, 18 January 2016
Функция 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: данные сообщения
Константы для регистров:
- eax - SF_IPC (60)
- ebx - SSF_SET_AREA (1)
Подфункция 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 (см. коды событий).
Константы для регистров:
- eax - SF_IPC (60)
- ebx - SSF_SEND_MESSAGE (2)
|