Rev 9995 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 9995 | Rev 10002 | ||
---|---|---|---|
Line 2548... | Line 2548... | ||
2548 | к прямоугольной форме. |
2548 | к прямоугольной форме. |
Line 2549... | Line 2549... | ||
2549 | 2549 | ||
2550 | ---------------------- Константы для регистров: ---------------------- |
2550 | ---------------------- Константы для регистров: ---------------------- |
2551 | eax - SF_SET_WINDOW_SHAPE (50) |
2551 | eax - SF_SET_WINDOW_SHAPE (50) |
2552 | ====================================================================== |
2552 | ====================================================================== |
- | 2553 | ===================== Функция 51, подфункция 1 ======================= |
|
2553 | ===================== Функция 51 - создать поток. ==================== |
2554 | ========================== Создать поток ============================= |
2554 | ====================================================================== |
2555 | ====================================================================== |
2555 | Параметры: |
2556 | Параметры: |
2556 | * eax = 51 - номер функции |
2557 | * eax = 51 - номер функции |
2557 | * ebx = 1 - единственная подфункция |
2558 | * ebx = 1 - номер подфункции |
2558 | * ecx = адрес точки входа потока (начальный eip) |
2559 | * ecx = адрес точки входа потока (начальный eip) |
2559 | * edx = указатель стэка потока (начальный esp) |
2560 | * edx = указатель стэка потока (начальный esp) |
2560 | Возвращаемое значение: |
2561 | Возвращаемое значение: |
2561 | * eax = -1 - ошибка (в системе слишком много потоков) |
2562 | * eax = -1 - ошибка (в системе слишком много потоков) |
Line 2562... | Line 2563... | ||
2562 | * иначе eax = TID - идентификатор потока |
2563 | * иначе eax = TID - идентификатор потока |
2563 | 2564 | ||
2564 | ---------------------- Константы для регистров: ---------------------- |
2565 | ---------------------- Константы для регистров: ---------------------- |
- | 2566 | eax - SF_CREATE_THREAD (51) |
|
- | 2567 | ====================================================================== |
|
- | 2568 | ===================== Функция 51, подфункция 2 ======================= |
|
- | 2569 | =================== Получить номер слота потока ====================== |
|
- | 2570 | ====================================================================== |
|
- | 2571 | Параметры: |
|
- | 2572 | * eax = 51 - номер функции |
|
- | 2573 | * ebx = 2 - номер подфункции |
|
- | 2574 | Возвращаемое значение: |
|
- | 2575 | * eax = номер слота потока |
|
- | 2576 | ||
- | 2577 | ====================================================================== |
|
- | 2578 | ===================== Функция 51, подфункция 3 ======================= |
|
- | 2579 | ==================== Получить приоритет потока ======================= |
|
- | 2580 | ====================================================================== |
|
- | 2581 | Параметры: |
|
- | 2582 | * eax = 51 - номер функции |
|
- | 2583 | * ebx = 3 - номер подфункции |
|
- | 2584 | * ecx = номер слота потока или -1 (текущий поток) |
|
- | 2585 | Возвращаемое значение: |
|
- | 2586 | * eax = -1 - ошибка (неверный номер слота потока или поток завершен) |
|
- | 2587 | * иначе eax = номер приоритета потока |
|
- | 2588 | Замечания: |
|
- | 2589 | * Приоритет потока имеет диапазон значений от 0 до 255. |
|
- | 2590 | Значение 0 - наивысший приоритет потока, устанавливаемый по умолчанию при создании потока. |
|
- | 2591 | ||
- | 2592 | ====================================================================== |
|
- | 2593 | ===================== Функция 51, подфункция 4 ======================= |
|
- | 2594 | =================== Установить приоритет потока ====================== |
|
- | 2595 | ====================================================================== |
|
- | 2596 | Параметры: |
|
- | 2597 | * eax = 51 - номер функции |
|
- | 2598 | * ebx = 4 - номер подфункции |
|
- | 2599 | * ecx = номер слота потока или -1 (текущий поток) |
|
- | 2600 | * edx = приоритет потока |
|
- | 2601 | Возвращаемое значение: |
|
- | 2602 | * eax = -1 - ошибка (неверный номер слота потока или поток завершен) |
|
- | 2603 | * иначе eax = старое значение приоритета потока |
|
- | 2604 | Замечания: |
|
- | 2605 | * Приоритет потока имеет диапазон значений от 0 до 255. |
|
- | 2606 | Значение 0 - наивысший приоритет потока, устанавливаемый по умолчанию при создании потока. |
|
2565 | eax - SF_CREATE_THREAD (51) |
2607 | |
2566 | ====================================================================== |
2608 | ====================================================================== |
2567 | ====================== Функция 54, подфункция 0 ====================== |
2609 | ====================== Функция 54, подфункция 0 ====================== |
2568 | ============== Узнать количество слотов в буфере обмена. ============= |
2610 | ============== Узнать количество слотов в буфере обмена. ============= |
2569 | ====================================================================== |
2611 | ====================================================================== |
Line 3597... | Line 3639... | ||
3597 | * После завершения критических действий в обработчике пользователя |
3639 | * После завершения критических действий в обработчике пользователя |
3598 | восстановление бита маски данного исключения можно сделать |
3640 | восстановление бита маски данного исключения можно сделать |
3599 | подфункцией 25. Сброс флагов исключений в модулях FPU и XMM также возлагается на обработчик пользователя. |
3641 | подфункцией 25. Сброс флагов исключений в модулях FPU и XMM также возлагается на обработчик пользователя. |
Line 3600... | Line 3642... | ||
3600 | 3642 | ||
3601 | Внимание: |
3643 | Внимание: |
- | 3644 | 1) Если пользовательский обработчик обрабатывает исключение переполнения стека (#SS), то должен быть установлен стартовый адрес резервного стека в регистре ESI. |
|
3602 | Если пользовательский обработчик обрабатывает исключение переполнения стека (#SS), то должен быть установлен адрес резервного стека в заголовке программы (см. структуру APP_HEADER_01_ taskman.inc). |
3645 | При возникновении исключения (#SS), в этот резервный стек будут записаны дополнительные данные (см. структуру EXCEPT_STACK sys32.inc). |
- | 3646 | При завершении обработки этого исключения, пользовательский обработчик должен дополнительно обнулить бит занятости (бит номер 0) резервного стека в поле LockAccess структуры EXCEPT_STACK. |
|
3603 | В этот резервный стек будут записаны дополнительные данные (см. структуру EXCEPT_STACK sys32.inc). |
3647 | |
- | 3648 | 2) Вы можете использовать режим "контролируемое исключение" для проверок на корректность адресов памяти при считывании\записи данных. |
|
- | 3649 | Для этого: |
|
- | 3650 | - В регистр ESI заносится адрес, куда должно перейти выполнение кода при возникновении исключения. |
|
Line 3604... | Line 3651... | ||
3604 | Пользовательский бработчик,при завершении обработки этого исключения, должен дополнительно обнулить бит занятости (бит номер 0) резервного стека в поле LockAccess структуры EXCEPT_STACK. |
3651 | - В регистр EDI заносится сигнатура - текст 'EXPT'. |
3605 | 3652 | ||
3606 | 3653 |