2550,11 → 2550,12 |
---------------------- Константы для регистров: ---------------------- |
eax - SF_SET_WINDOW_SHAPE (50) |
====================================================================== |
===================== Функция 51 - создать поток. ==================== |
===================== Функция 51, подфункция 1 ======================= |
========================== Создать поток ============================= |
====================================================================== |
Параметры: |
* eax = 51 - номер функции |
* ebx = 1 - единственная подфункция |
* ebx = 1 - номер подфункции |
* ecx = адрес точки входа потока (начальный eip) |
* edx = указатель стэка потока (начальный esp) |
Возвращаемое значение: |
2564,6 → 2565,47 |
---------------------- Константы для регистров: ---------------------- |
eax - SF_CREATE_THREAD (51) |
====================================================================== |
===================== Функция 51, подфункция 2 ======================= |
=================== Получить номер слота потока ====================== |
====================================================================== |
Параметры: |
* eax = 51 - номер функции |
* ebx = 2 - номер подфункции |
Возвращаемое значение: |
* eax = номер слота потока |
|
====================================================================== |
===================== Функция 51, подфункция 3 ======================= |
==================== Получить приоритет потока ======================= |
====================================================================== |
Параметры: |
* eax = 51 - номер функции |
* ebx = 3 - номер подфункции |
* ecx = номер слота потока или -1 (текущий поток) |
Возвращаемое значение: |
* eax = -1 - ошибка (неверный номер слота потока или поток завершен) |
* иначе eax = номер приоритета потока |
Замечания: |
* Приоритет потока имеет диапазон значений от 0 до 255. |
Значение 0 - наивысший приоритет потока, устанавливаемый по умолчанию при создании потока. |
|
====================================================================== |
===================== Функция 51, подфункция 4 ======================= |
=================== Установить приоритет потока ====================== |
====================================================================== |
Параметры: |
* eax = 51 - номер функции |
* ebx = 4 - номер подфункции |
* ecx = номер слота потока или -1 (текущий поток) |
* edx = приоритет потока |
Возвращаемое значение: |
* eax = -1 - ошибка (неверный номер слота потока или поток завершен) |
* иначе eax = старое значение приоритета потока |
Замечания: |
* Приоритет потока имеет диапазон значений от 0 до 255. |
Значение 0 - наивысший приоритет потока, устанавливаемый по умолчанию при создании потока. |
|
====================================================================== |
====================== Функция 54, подфункция 0 ====================== |
============== Узнать количество слотов в буфере обмена. ============= |
====================================================================== |
3599,11 → 3641,16 |
подфункцией 25. Сброс флагов исключений в модулях FPU и XMM также возлагается на обработчик пользователя. |
|
Внимание: |
Если пользовательский обработчик обрабатывает исключение переполнения стека (#SS), то должен быть установлен адрес резервного стека в заголовке программы (см. структуру APP_HEADER_01_ taskman.inc). |
В этот резервный стек будут записаны дополнительные данные (см. структуру EXCEPT_STACK sys32.inc). |
Пользовательский бработчик,при завершении обработки этого исключения, должен дополнительно обнулить бит занятости (бит номер 0) резервного стека в поле LockAccess структуры EXCEPT_STACK. |
1) Если пользовательский обработчик обрабатывает исключение переполнения стека (#SS), то должен быть установлен стартовый адрес резервного стека в регистре ESI. |
При возникновении исключения (#SS), в этот резервный стек будут записаны дополнительные данные (см. структуру EXCEPT_STACK sys32.inc). |
При завершении обработки этого исключения, пользовательский обработчик должен дополнительно обнулить бит занятости (бит номер 0) резервного стека в поле LockAccess структуры EXCEPT_STACK. |
|
2) Вы можете использовать режим "контролируемое исключение" для проверок на корректность адресов памяти при считывании\записи данных. |
Для этого: |
- В регистр ESI заносится адрес, куда должно перейти выполнение кода при возникновении исключения. |
- В регистр EDI заносится сигнатура - текст 'EXPT'. |
|
|
---------------------- Константы для регистров: ---------------------- |
eax - SF_SYS_MISC (68) |
ebx - SSF_SET_EXCEPTION_HANDLER (24) |