SysFn18/ru: Difference between revisions

From KolibriOS wiki
Jump to navigation Jump to search
m (Небольшие исправления)
m (обновление: "@panel" -> "@taskbar")
 
(34 intermediate revisions by 7 users not shown)
Line 1: Line 1:
'''Функция 18''' -  
'''Функция 18''' -  
----
----
=== Подфункция 1 - сделать неактивным окно потока ===
Введена в ревизии 2244
Параметры:
* eax = 18 - номер функции
* ebx = 1 - номер подфункции
* ecx = номер слота процесса/потока
Возвращаемое значение:
* функция не возвращает значения
'''Константы для регистров:'''
::eax - SF_SYSTEM (18)
::ebx - SSF_UNFOCUS_WINDOW (1)
=== Подфункция 2 - завершить процесс/поток по слоту. ===
=== Подфункция 2 - завершить процесс/поток по слоту. ===


Line 12: Line 27:
* Нельзя завершить поток операционной системы OS/IDLE (номер слота 1), можно завершить любой обычный поток/процесс.
* Нельзя завершить поток операционной системы OS/IDLE (номер слота 1), можно завершить любой обычный поток/процесс.
* Смотри также подфункцию 18 - завершение процесса/потока с заданным идентификатором.
* Смотри также подфункцию 18 - завершение процесса/потока с заданным идентификатором.
'''Константы для регистров:'''
::eax - SF_SYSTEM (18)
::ebx - SSF_TERMINATE_THREAD (2)


=== Подфункция 3 - сделать активным окно заданного потока. ===
=== Подфункция 3 - сделать активным окно заданного потока. ===
Line 24: Line 43:
* При указании корректного, но несуществующего слота активизируется какое-то окно.
* При указании корректного, но несуществующего слота активизируется какое-то окно.
* Узнать, какое окно является активным, можно вызовом подфункции 7.
* Узнать, какое окно является активным, можно вызовом подфункции 7.
'''Константы для регистров:'''
::eax - SF_SYSTEM (18)
::ebx - SSF_FOCUS_WINDOW (3)


=== Подфункция 4 - получить счётчик пустых тактов в секунду. ===
=== Подфункция 4 - получить счётчик пустых тактов в секунду. ===
Line 34: Line 57:
Возвращаемое значение:
Возвращаемое значение:
* eax = значение счётчика пустых тактов в секунду
* eax = значение счётчика пустых тактов в секунду
'''Константы для регистров:'''
::eax - SF_SYSTEM (18)
::ebx - SSF_GET_IDLE_COUNT (4)


=== Подфункция 5 - получить тактовую частоту. ===
=== Подфункция 5 - получить тактовую частоту. ===
Line 42: Line 69:
Возвращаемое значение:
Возвращаемое значение:
* eax = тактовая частота (по модулю 2^32 тактов = 4ГГц)
* eax = тактовая частота (по модулю 2^32 тактов = 4ГГц)
'''Константы для регистров:'''
::eax - SF_SYSTEM (18)
::ebx - SSF_GET_CPU_REQUENCY (5)


=== Подфункция 6 - сохранить рамдиск в файл на жёстком диске. ===
=== Подфункция 6 - сохранить рамдиск в файл на жёстком диске. ===
Line 54: Line 85:
Замечания:
Замечания:
* Все папки в указанном пути должны существовать, иначе вернётся значение 5, "файл не найден".
* Все папки в указанном пути должны существовать, иначе вернётся значение 5, "файл не найден".
'''Константы для регистров:'''
::eax - SF_SYSTEM (18)
::ebx - SSF_RD_TO_HDD (6)


=== Подфункция 7 - получить номер активного окна. ===
=== Подфункция 7 - получить номер активного окна. ===
Параметры:
Параметры:
* eax = 18 - номер функции
:* eax = 18 - номер функции
* ebx = 7 - номер подфункции
:* ebx = 7 - номер подфункции
Возвращаемое значение:
Возвращаемое значение:
* eax = номер активного окна (номер слота потока, окно которого активно)
:* eax = номер активного окна (номер слота потока, окно которого
::активно)
Замечания:
Замечания:
* Активное окно находится вверху оконного стэка и получает сообщения обо всём вводе с клавиатуры.
:* Активное окно находится вверху оконного стэка и получает
* Сделать окно активным можно вызовом подфункции 3.
::сообщения обо всём вводе с клавиатуры.
:* Сделать окно активным можно вызовом подфункции 3.
 
'''Константы для регистров:'''
::eax - SF_SYSTEM (18)
::ebx - SSF_GET_ACTIVE_WINDOW (7)


=== Подфункция 8 - отключить/разрешить звук спикера. ===
=== Подфункция 8 - отключить/разрешить звук спикера. ===
Line 71: Line 111:
При включённом - направляются на встроенный спикер.
При включённом - направляются на встроенный спикер.


=== Подподфункция 1 - получить состояние. ===
==== Подподфункция 1 - получить состояние. ====
Параметры:
Параметры:
* eax = 18 - номер функции
:* eax = 18 - номер функции
* ebx = 8 - номер подфункции
:* ebx = 8 - номер подфункции
* ecx = 1 - номер подподфункции
:* ecx = 1 - номер подподфункции
Возвращаемое значение:
Возвращаемое значение:
* eax = 0 - звук спикера разрешён; 1 - запрещён
:* eax = 0 - звук спикера разрешён; 1 - запрещён


=== Подподфункция 2 - переключить состояние. ===
==== Подподфункция 2 - переключить состояние. ====
Переключает состояния разрешения/запрещения.
Переключает состояния разрешения/запрещения.
Параметры:
Параметры:
* eax = 18 - номер функции
:* eax = 18 - номер функции
* ebx = 8 - номер подфункции
:* ebx = 8 - номер подфункции
* ecx = 2 - номер подподфункции
:* ecx = 2 - номер подподфункции
Возвращаемое значение:
Возвращаемое значение:
* функция не возвращает значения
:* функция не возвращает значения
 
'''Константы для регистров:'''
::eax - SF_SYSTEM (18)
::ebx - SSF_SPEAKER (8)
::ecx - SSSF_GET_STATE (1), SSSF_TOGGLE (2)


=== Подфункция 9 - завершение работы системы  ===
=== Подфункция 9 - завершение работы системы с параметром. ===


Параметры:
Параметры:
* eax = 18 - номер функции
:* eax = 18 - номер функции
* ebx = 9 - номер подфункции
:* ebx = 9 - номер подфункции
* ecx = параметр:
:* ecx = параметр:
** 2 = выключить компьютер
::* 2 = выключить компьютер
** 3 = перезагрузить компьютер
::* 3 = перезагрузить компьютер
** 4 = перезапустить ядро из файла kernel.mnt на рамдиске
::* 4 = перезапустить ядро из файла kernel.mnt на рамдиске
Возвращаемое значение:
Возвращаемое значение:
* при неверном ecx регистры не меняются (т.е. eax=18)
:* при неверном ecx регистры не меняются (т.е. eax=18)
* при правильном вызове всегда возвращается признак успеха eax=0
:* при правильном вызове всегда возвращается признак успеха eax=0
Замечания:
Замечания:
* Не следует полагаться на возвращаемое значение при неверном вызове, оно может измениться в последующих версиях ядра.
:* Не следует полагаться на возвращаемое значение при неверном
::вызове, оно может измениться в последующих версиях ядра.
 
'''Константы для регистров:'''
::eax - SF_SYSTEM (18)
::ebx - SSF_SHUTDOWN (9)


=== Подфункция 10 - свернуть окно приложения. ===
=== Подфункция 10 - свернуть окно приложения. ===


Сворачивает собственное окно.
Сворачивает собственное окно.
Параметры:
Параметры:
* eax = 18 - номер функции
:* eax = 18 - номер функции
* ebx = 10 - номер подфункции
:* ebx = 10 - номер подфункции
Возвращаемое значение:
Возвращаемое значение:
* функция не возвращает значения
:* функция не возвращает значения
Замечания:
Замечания:
* Минимизированное окно с точки зрения функции 9 сохраняет положение и размеры.
:* Минимизированное окно с точки зрения функции 9 сохраняет положение
* Восстановление окна приложения происходит при активизировании подфункцией 3.
::и размеры.
* Обычно нет необходимости явно сворачивать/разворачивать своё окно: сворачивание окна осуществляется системой при нажатии на кнопку минимизации (которая для окон со скином определяется автоматически   функцией 0, для окон без скина её можно определить функцией 8), восстановление - приложением @panel.
:* Восстановление окна приложения происходит при активизировании
::подфункцией 3.
:* Обычно нет необходимости явно сворачивать/разворачивать своё окно:
::сворачивание окна осуществляется системой при нажатии на кнопку
::минимизации (которая для окон со скином определяется автоматически
::функцией 0, для окон без скина её можно определить функцией 8),
::восстановление - приложением @taskbar.
 
'''Константы для регистров:'''
::eax - SF_SYSTEM (18)
::ebx - SSF_MINIMIZE_WINDOW (10)


=== Подфункция 11 - получить информацию о дисковой подсистеме. ===
=== Подфункция 11 - получить информацию о дисковой подсистеме. ===
<big>'''Внимание:''' Эта подфункция будет [http://board.kolibrios.org/viewtopic.php?f=35&t=1854 удалена] в следующих версиях системы</big>


Параметры:
Параметры:
* eax = 18 - номер функции
:* eax = 18 - номер функции
* ebx = 11 - номер подфункции
:* ebx = 11 - номер подфункции
* ecx = тип таблицы:
:* ecx = тип таблицы:
** 1 = короткая версия, 10 байт
::* 1 = короткая версия, 10 байт
** 2 = полная версия, 65536 байт
::* 2 = полная версия, 65536 байт
* edx = указатель на буфер (в приложении) для таблицы
:* edx = указатель на буфер (в приложении) для таблицы
 
Возвращаемое значение:
Возвращаемое значение:
* функция не возвращает значения
:* функция не возвращает значения
 
Формат таблицы: короткая версия:
Формат таблицы: '''короткая версия''':
:* +0: byte: информация о НГМД (дисководах для дискет), AAAABBBB,
* +0: byte: информация о НГМД (дисководах для дискет), AAAABBBB, где AAAA задаёт тип первого дисковода, BBBB - второго согласно следующему списку:
::где AAAA задаёт тип первого дисковода, BBBB - второго согласно
** 0 = нет дисковода
::следующему списку:
** 1 = 360Kb, 5.25''
::* 0 = нет дисковода
** 2 = 1.2Mb, 5.25''
::* 1 = 360Kb, 5.25''
** 3 = 720Kb, 3.5''
::* 2 = 1.2Mb, 5.25''
** 4 = 1.44Mb, 3.5''
::* 3 = 720Kb, 3.5''
** 5 = 2.88Mb, 3.5'' (такие дискеты сейчас уже не используются)
::* 4 = 1.44Mb, 3.5''
** Например, для стандартной конфигурации из одного 1.44-дисковода здесь будет 40h, а для случая 1.2Mb на A: и 1.44Mb на B: значение оказывается 24h.
::* 5 = 2.88Mb, 3.5'' (такие дискеты сейчас уже не используются)
* +1: byte: информация о жёстких дисках и CD-приводах, AABBCCDD, где AA соответствует контроллеру IDE0, ..., DD - IDE3:
::Например, для стандартной конфигурации из одного 1.44-дисковода
** 0 = устройство отсутствует
::здесь будет 40h, а для случая 1.2Mb на A: и 1.44Mb на B:
** 1 = жёсткий диск
::значение оказывается 24h.
** 2 = CD-привод
:* +1: byte: информация о жёстких дисках и CD-приводах, AABBCCDD,
** Например, в случае HD на IDE0 и CD на IDE2 здесь будет 48h.
::где AA соответствует контроллеру IDE0, ..., DD - IDE3:
* +2: 4 db: число найденных разделов на жёстких дисках с соответственно IDE0,...,IDE3. При отсутствии жёсткого диска на IDEx соответствующий байт нулевой, при наличии показывает число распознанных разделов, которых может и не быть (если носитель не отформатирован или если файловая система не поддерживается). В текущей версии ядра для жёстких дисков поддерживаются только FAT16, FAT32 и NTFS.
::* 0 = устройство отсутствует
* +6: 4 db: зарезервировано
::* 1 = жёсткий диск
 
::* 2 = CD-привод
Формат таблицы: '''полная версия''':
::Например, в случае HD на IDE0 и CD на IDE2 здесь будет 48h.
* +0: 10 db: такие же, как и в короткой версии
:* +2: 4 db: число найденных разделов на жёстких дисках с
* +10: 100 db: данные для первого раздела
::соответственно IDE0,...,IDE3.
* +110: 100 db: данные для второго раздела
::При отсутствии жёсткого диска на IDEx соответствующий байт
* ...
::нулевой, при наличии показывает число распознанных разделов,
* +10+100*(n-1): 100 db: данные для последнего раздела
::которых может и не быть (если носитель не отформатирован или
* Разделы расположены в следующем порядке: сначала последовательно все pаспознанные разделы на HD на IDE0 (если есть), затем на HD на IDE1 (если есть) и т.д. до IDE3.
::если файловая система не поддерживается). В текущей версии ядра
 
::для жёстких дисков поддерживаются только FAT16, FAT32 и NTFS.
:* +6: 4 db: зарезервировано
Формат таблицы: полная версия:
:* +0: 10 db: такие же, как и в короткой версии
:* +10: 100 db: данные для первого раздела
:* +110: 100 db: данные для второго раздела
:* ...
:* +10+100*(n-1): 100 db: данные для последнего раздела
Разделы расположены в следующем порядке: сначала последовательно все
распознанные разделы на HD на IDE0 (если есть),
затем на HD на IDE1 (если есть) и т.д. до IDE3.
Формат информации о разделе:
Формат информации о разделе:
* +0: dword: начальный физический сектор раздела
:* +0: dword: начальный физический сектор раздела
* +4: dword: последний физический сектор раздела (принадлежит разделу)
:* +4: dword: последний физический сектор раздела
* +8: byte: тип файловой системы: 16=FAT16, 32=FAT32, 1=NTFS, '''?=EXT2'''
::(принадлежит разделу)
* формат дальнейших данных зависит от файловой системы, может меняться с изменениями в ядре и поэтому не описывается
:* +8: byte: тип файловой системы:
::16=FAT16, 32=FAT32, 1=NTFS
:* формат дальнейших данных зависит от файловой системы,
::может меняться с изменениями в ядре и поэтому не описывается
Замечания:
:* Короткая таблица может быть использована для получения информации
::об имеющихся устройствах.


Замечания:
'''Константы для регистров:'''
* Короткая таблица может быть использована для получения информации об имеющихся устройствах.
::eax - SF_SYSTEM (18)
::ebx - SSF_INFO_DISC_SYS (11)


=== Подфункция 13 - получить версию ядра. ===
=== Подфункция 13 - получить версию ядра. ===


Параметры:
Параметры:
* eax = 18 - номер функции
:* eax = 18 - номер функции
* ebx = 13 - номер подфункции
:* ebx = 13 - номер подфункции
* ecx = указатель на буфер (не менее 16 байт), куда будет помещена информация
:* ecx = указатель на буфер (не менее 16 байт), куда будет помещена
 
::информация
Возвращаемое значение:
Возвращаемое значение:
* функция не возвращает значения
:* функция не возвращает значения,
::но, если указатель в ecx недопустимый, например,
::регион [ecx, ecx + 9) пересекается с памятью ядра,
::то тогда функция возвращает -1
Замечания:
* В данный момент используется только часть буфера размером
::9 байт. Тем не менее рекомендуется использовать буфер
::размером 16 байт для будущей совместимости, в будущем могут быть
::добавлены некоторые поля.


Структура буфера:
Структура буфера:
  db a,b,c,d для версии a.b.c.d
  db a,b,c,d для версии a.b.c.d
  db UID_xxx: одно из UID_NONE=0, UID_MENUET=1, UID_KOLIBRI=2
  db 0: зарезервировано
  dd REV - номер svn-ревизии ядра
  dd REV - номер svn-ревизии ядра
Для ядра Kolibri 0.7.1.0:
 
  db 0,7,1,0
Для ядра Kolibri 0.7.7.0+:
  db 2
  db 0,7,7,0
  dd 638
  db 0
  dd 1675
 
'''Константы для регистров:'''
::eax - SF_SYSTEM (18)
::ebx - SSF_KERNEL_VERSION (13)


=== Подфункция 14 - ожидать начала обратного хода луча развёртки монитора. ===
=== Подфункция 14 - ожидать начала обратного хода луча развёртки монитора. ===
Параметры:
Параметры:
* eax = 18 - номер функции
:* eax = 18 - номер функции
* ebx = 14 - номер подфункции
:* ebx = 14 - номер подфункции
 
Возвращаемое значение:
Возвращаемое значение:
* eax = 0 как признак успеха
:* eax = 0 как признак успеха
Замечания:
:* Функция предназначена исключительно для активных
::высокопроизводительных графических приложений; используется для
::плавного вывода графики.


Замечания:
'''Константы для регистров:'''
* Функция предназначена исключительно для активных высокопроизводительных графических приложений; используется для плавного вывода графики.
::eax - SF_SYSTEM (18)
::ebx - SSF_WAIT_RETRACE (14)


=== Подфункция 15 - поместить курсор мыши в центр экрана. ===
=== Подфункция 15 - поместить курсор мыши в центр экрана. ===


Параметры:
Параметры:
* eax = 18 - номер функции
:* eax = 18 - номер функции
* ebx = 15 - номер подфункции
:* ebx = 15 - номер подфункции
Возвращаемое значение:
:* eax = 0 как признак успеха


Возвращаемое значение:
'''Константы для регистров:'''
* eax = 0 как признак успеха
::eax - SF_SYSTEM (18)
::ebx - SSF_CURSOR_CENTER (15)


=== Подфункция 16 - Получить размер свободной оперативной памяти. ===
=== Подфункция 16 - Получить размер свободной оперативной памяти. ===
Параметры:
Параметры:
* eax = 18 - номер функции
:* eax = 18 - номер функции
* ebx = 16 - номер подфункции
:* ebx = 16 - номер подфункции
Возвращаемое значение:
:* eax = размер свободной памяти в килобайтах


Возвращаемое значение:
'''Константы для регистров:'''
* eax = размер свободной памяти в килобайтах
::eax - SF_SYSTEM (18)
::ebx - SSF_GET_FREE_RAM (16)


=== Подфункция 17 - получить размер имеющейся оперативной памяти. ===
=== Подфункция 17 - получить размер имеющейся оперативной памяти. ===


Параметры:
Параметры:
* eax = 18 - номер функции
:* eax = 18 - номер функции
* ebx = 17 - номер подфункции
:* ebx = 17 - номер подфункции
Возвращаемое значение:
:* eax = общий размер имеющейся памяти в килобайтах


Возвращаемое значение:
'''Константы для регистров:'''
* eax = общий размер имеющейся памяти в килобайтах
::eax - SF_SYSTEM (18)
::ebx - SSF_GET_TOTAL_RAM (17)


=== Подфункция 18 - завершить процесс/поток по идентификатору. ===
=== Подфункция 18 - завершить процесс/поток по идентификатору. ===


Параметры:
Параметры:
* eax = 18 - номер функции
:* eax = 18 - номер функции
* ebx = 18 - номер подфункции
:* ebx = 18 - номер подфункции
* ecx = идентификатор процесса/потока (PID/TID)
:* ecx = идентификатор процесса/потока (PID/TID)
 
Возвращаемое значение:
Возвращаемое значение:
* eax = 0 - успешно
:* eax = 0 - успешно
* eax = -1 - ошибка (процесс не найден или является системным)
:* eax = -1 - ошибка (процесс не найден или является системным)
Замечания:
:* Нельзя завершить поток операционной системы OS/IDLE (номер слота
::1), можно завершить любой обычный поток/процесс.
:* Смотри также подфункцию 2 - завершение
::процесса/потока по заданному слоту.


Замечания:
'''Константы для регистров:'''
* Нельзя завершить поток операционной системы OS/IDLE (номер слота 1), можно завершить любой обычный поток/процесс.
::eax - SF_SYSTEM (18)
* Смотри также подфункцию 2 - завершение процесса/потока по заданному слоту.
::ebx - SSF_TERMINATE_THREAD_ID (18)


=== Подфункция 19 - получить/установить настройки мыши. ===
=== Подфункция 19 - получить/установить настройки мыши. ===
Line 242: Line 346:


Параметры:
Параметры:
* eax = 18 - номер функции
:* eax = 18 - номер функции
* ebx = 19 - номер подфункции
:* ebx = 19 - номер подфункции
* ecx = 0 - номер подподфункции
:* ecx = 0 - номер подподфункции
 
Возвращаемое значение:
Возвращаемое значение:
* eax = текущая скорость мыши
:* eax = текущий делитель скорости


==== Подподфункция 1 - установить скорость мыши. ====
==== Подподфункция 1 - установить скорость мыши. ====
Параметры:
Параметры:
* eax = 18 - номер функции
:* eax = 18 - номер функции
* ebx = 19 - номер подфункции
:* ebx = 19 - номер подфункции
* ecx = 1 - номер подподфункции
:* ecx = 1 - номер подподфункции
* edx = новое значение скорости
:* edx = новое значение делителя скорости
Возвращаемое значение:
:* функция не возвращает значения


Возвращаемое значение:
Замечание: рекомендуемый делитель скорости = 4
* функция не возвращает значения


==== Подподфункция 2 - получить задержку мыши. ====
==== Подподфункция 2 - получить чувствительность мыши. ====


Параметры:
Параметры:
* eax = 18 - номер функции
:* eax = 18 - номер функции
* ebx = 19 - номер подфункции
:* ebx = 19 - номер подфункции
* ecx = 2 - номер подподфункции
:* ecx = 2 - номер подподфункции
 
Возвращаемое значение:
Возвращаемое значение:
* eax = текущая задержка мыши
:* eax = текущий коэффициент чувствительности


==== Подподфункция 3 - установить задержку мыши. ====
==== Подподфункция 3 - установить чувствительность мыши. ====


Параметры:
Параметры:
* eax = 18 - номер функции
:* eax = 18 - номер функции
* ebx = 19 - номер подфункции
:* ebx = 19 - номер подфункции
* ecx = 3 - номер подподфункции
:* ecx = 3 - номер подподфункции
* edx = новое значение задержки мыши
:* edx = новое значение коэффициента чувствительности
Возвращаемое значение:
:* функция не возвращает значения


Возвращаемое значение:
Замечание: рекомендуемый коэффициент чувствительности = 3
* функция не возвращает значения


==== Подподфункция 4 - установить положение курсора мыши. ====
==== Подподфункция 4 - установить положение курсора мыши. ====


Параметры:
Параметры:
* eax = 18 - номер функции
:* eax = 18 - номер функции
* ebx = 19 - номер подфункции
:* ebx = 19 - номер подфункции
* ecx = 4 - номер подподфункции
:* ecx = 4 - номер подподфункции
* edx = [координата по оси x]*65536 + [координата по оси y]
:* edx = [координата по оси x]*65536 + [координата по оси y]
Возвращаемое значение:
:* функция не возвращает значения
 
==== Подподфункция 5 - симулировать состояние клавиш мыши. ====


Параметры:
:* eax = 18 - номер функции
:* ebx = 19 - номер подфункции
:* ecx = 5 - номер подподфункции
:* edx = информация о эмулируемом состоянии кнопок мыши:
::(соответствует возвращаемому значению подфункции 2 функции 37)
::* бит 0 установлен = левая кнопка нажата
::* бит 1 установлен = правая кнопка нажата
::* бит 2 установлен = средняя кнопка нажата
::* бит 3 установлен = 4-я кнопка нажата
::* бит 4 установлен = 5-я кнопка нажата
Возвращаемое значение:
Возвращаемое значение:
* функция не возвращает значения
:* функция не возвращает значения
 
==== Подподфункция 6 - получить задержку двойного щелчка. ====


Замечания:
Параметры:
* Подподфункция 4 не проверяет переданное значение. Перед вызовом необходимо узнать текущее разрешение экрана (подфункцией 14) и проверить, что устанавливаемое положение не выходит за пределы экрана.
:* eax = 18 - номер функции
:* ebx = 19 - номер подфункции
:* ecx = 6 - номер подподфункции
Возвращаемое значение:
:* eax = текущая задержка двойного щелчка (в сотых секунды)


==== Подподфункция 5 - симулировать состояние клавиш мыши. ====
==== Подподфункция 7 - установить задержку двойного щелчка. ====


Параметры:
Параметры:
* eax = 18 - номер функции
:* eax = 18 - номер функции
* ebx = 19 - номер подфункции
:* ebx = 19 - номер подфункции
* ecx = 5 - номер подподфункции
:* ecx = 7 - номер подподфункции
* edx = информация о эмулируемом состоянии кнопок мыши: (соответствует возвращаемому значению подфункции 2 функции 37)
:* dl  = новое значение задержки двойного щелчка (в сотых секунды)
** бит 0 установлен = левая кнопка нажата
** бит 1 установлен = правая кнопка нажата
** бит 2 установлен = средняя кнопка нажата
** бит 3 установлен = 4-я кнопка нажата
** бит 4 установлен = 5-я кнопка нажата
 
Возвращаемое значение:
Возвращаемое значение:
* функция не возвращает значения
:* функция не возвращает значения


Замечания:
'''Константы для регистров:'''
* Рекомендуемая скорость мыши (в подподфункции 1) от 1 до 9. Устанавливаемая величина не проверяется кодом ядра, поэтому используйте осторожно, при некорректном значении курсор может "замёрзнуть". Скорость мыши можно регулировать в приложении SETUP.
::eax - SF_SYSTEM (18)
* Рекомендуемая величина задержки (в подподфункции 3) = 10. Меньшие значения не обрабатываются COM-мышами. При очень больших значениях невозможно передвижение мыши на 1 пиксель и курсор будет прыгать на величину установленной скорости (подподфункция 1). Устанавливаемая величина не проверяется кодом ядра. Величину задержки можно менять в приложении SETUP.
::ebx - SSF_MOUSE_SETTINGS (19)
::ecx - SSSF_GET_SPEED (0), SSSF_SET_SPEED (1), SSSF_GET_SPEEDUP (2),
:::SSSF_SET_SPEEDUP (3), SSSF_SET_POS (4), SSSF_SET_BUTTON (5),
:::SSSF_GET_DOUBLE_CLICK_DELAY (6), SSSF_SET_DOUBLE_CLICK_DELAY (7)


=== Подфункция 20 - получить информацию об оперативной памяти. ===
=== Подфункция 20 - получить информацию об оперативной памяти. ===


Параметры:
Параметры:
* eax = 18 - номер функции
:* eax = 18 - номер функции
* ebx = 20 - номер подфункции
:* ebx = 20 - номер подфункции
* ecx = указатель на буфер для информации (36 байт)
:* ecx = указатель на буфер для информации (36 байт)
Возвращаемое значение:
:* eax = общий размер имеющейся оперативной памяти в байтах
::или -1 в случае ошибки
:* буфер, на который указывает ecx, содержит следующую информацию:
::* +0: dword: общий размер имеющейся оперативной памяти в страницах
::* +4::dword: размер свободной оперативной памяти в страницах
::* +8::dword: число страничных ошибок (исключений #PF)
:::::::: в приложениях
::* +12: dword: размер кучи ядра в байтах
::* +16: dword: размер свободной памяти в куче ядра в байтах
::* +20: dword: общее количество блоков памяти в куче ядра
::* +24: dword: количество свободных блоков памяти в куче ядра
::* +28: dword: размер наибольшего свободного блока в куче ядра
:::::::: (зарезервировано)
::* +32: dword: размер наибольшего выделенного блока в куче ядра
:::::::: (зарезервировано)


Возвращаемое значение:
'''Константы для регистров:'''
* eax = общий размер имеющейся оперативной памяти в байтах или -1 в случае ошибки
::eax - SF_SYSTEM (18)
* буфер, на который указывает ecx, содержит следующую информацию:
::ebx - SSF_GET_RAM_INFO (20)
** +0: dword: общий размер имеющейся оперативной памяти в страницах
** +4:  dword: размер свободной оперативной памяти в страницах
** +8:  dword: число страничных ошибок (исключений #PF) в приложениях
** +12: dword: размер кучи ядра в байтах
** +16: dword: размер свободной памяти в куче ядра в байтах
** +20: dword: общее количество блоков памяти в куче ядра
** +24: dword: количество свободных блоков памяти в куче ядра
** +28: dword: размер наибольшего свободного блока в куче ядра (зарезервировано)
** +32: dword: размер наибольшего выделенного блока в куче ядра (зарезервировано)


=== Подфункция 21 - получить номер слота процесса/потока по идентификатору. ===
=== Подфункция 21 - получить номер слота процесса/потока по идентификатору. ===


Параметры:
Параметры:
* eax = 18 - номер функции
:* eax = 18 - номер функции
* ebx = 21 - номер подфункции
:* ebx = 21 - номер подфункции
* ecx = идентификатор процесса/потока (PID/TID)
:* ecx = идентификатор процесса/потока (PID/TID)
Возвращаемое значение:
:* eax = 0 - ошибка (неверный идентификатор)
:* иначе eax = номер слота


Возвращаемое значение:
'''Константы для регистров:'''
* eax = 0 - ошибка (неверный идентификатор)
::eax - SF_SYSTEM (18)
* иначе eax = номер слота
::ebx - SSF_GET_THREAD_SLOT (21)


=== Подфункция 22 - операции с окном другого процесса/потока. ===
=== Подфункция 22 - операции с окном другого процесса/потока. ===


Параметры:
Параметры:
* eax = 18 - номер функции
:* eax = 18 - номер функции
* ebx = 22 - номер подфункции
:* ebx = 22 - номер подфункции
* ecx = тип операции:
:* ecx = тип операции:
** 0 = минимизация окна, поток задан номером слота
::* 0 = минимизация окна, поток задан номером слота
** 1 = минимизация окна, поток задан идентификатором
::* 1 = минимизация окна, поток задан идентификатором
** 2 = восстановление окна, поток задан номером слота
::* 2 = восстановление окна, поток задан номером слота
** 3 = восстановление окна, поток задан идентификатором
::* 3 = восстановление окна, поток задан идентификатором
* edx = параметр операции (номер слота или PID/TID)
:* edx = параметр операции (номер слота или PID/TID)
Возвращаемое значение:
:* eax = 0 - успешно
:* eax = -1 - ошибка (неправильный параметр)
Замечания:
:* Поток может свернуть своё окно вызовом подфункции 10.
:* Восстановление окна с одновременной активизацией осуществляется
::подфункции 3 (принимающей номер слота).
 
'''Константы для регистров:'''
::eax - SF_SYSTEM (18)
::ebx - SSF_FOREIGN_WINDOW (22)
::ecx - SSSF_MINIMIZE (0), SSSF_MINIMIZE_ID (1), SSSF_RESTORE (2),
:::SSSF_RESTORE_ID (3)
 
=== Подфункция 23 - минимизировать все окна ===


Параметры:
:* eax = 18 - номер функции
:* ebx = 23 - номер подфункции
Возвращаемое значение:
Возвращаемое значение:
* eax = 0 - успешно
:* eax = 0 - все окна были минимизированы до вызова функции
* eax = -1 - ошибка (неправильный параметр)
:* eax = N - количество окон свернутых функцией
Замечания:
:* Окна спец. потоков (имя начинается с символа @) не сворачиваются.
 
'''Константы для регистров:'''
::eax - SF_SYSTEM (18)
::ebx - SSF_MINIMIZE_ALL (23)
 
=== Подфункция 24 - установить пределы отрисовки ===


Параметры:
:* eax = 18 - номер функции
:* ebx = 24 - номер подфункции
:* ecx = новый размер по X
:* edx = новый размер по Y
Возвращаемое значение:
:* функция не возвращает значения
Замечания:
Замечания:
* Поток может свернуть своё окно вызовом подфункции 10.
:* Функция не меняет физический размер видеорежима. Она предназначена
* Восстановление окна с одновременной активизацией осуществляется подфункцией 3 (принимающей номер слота).
::для нестандартных дисплеев, отображающих изображение частично.
:* Размеры указываемые в функции не должны превышать размеры текущего
::видеорежима, иначе функция ничего не изменит.
 
'''Константы для регистров:'''
::eax - SF_SYSTEM (18)
::ebx - SSF_SET_SCREEN_LIMITS (24)
 
=== Подфункция 25 - Управление положением окна относительно других окон. ===
 
==== Подподфункция 1 - получить положение ====
Параметры:
:* eax = 18 - номер функции
:* ebx = 25 - номер подфункции
:* ecx = 1 - номер подподфункции
:* edx = -1 (для текущего окна) или PID приложения
Возвращаемое значение:
:* eax = одна из констант положения окна
 
==== Подподфункция 2 - установить положение ====
Параметры:
:* eax = 18 - номер функции
:* ebx = 25 - номер подфункции
:* ecx = 2 - номер подподфункции
:* edx = -1(для текущего окна) или PID приложения
:* esi = новое положение окна (одна из констант ниже)
Возвращаемое значение:
:* eax = 0 - неудача
:* eax = 1 - успех
 
Константы положения окна относительно других окон:
:ZPOS_DESKTOP    = -2 - на самом заднем плане
:ZPOS_ALWAYS_BACK = -1 - позади всех окон
:ZPOS_NORMAL      = 0  - обычное
:ZPOS_ALWAYS_TOP  = 1  - поверх всех окон


'''Константы для регистров:'''
::eax - SF_SYSTEM (18)
::ebx - SSF_WINDOW_BEHAVIOR (25)
::ecx - SSSF_GET_WB (1), SSSF_SET_WB (2)


{{System_functions}}
{{System_functions}}
[[Category: SysCalls]]
[[Category: SysCalls]]

Latest revision as of 15:27, 12 January 2022

Функция 18 -


Подфункция 1 - сделать неактивным окно потока

Введена в ревизии 2244

Параметры:

  • eax = 18 - номер функции
  • ebx = 1 - номер подфункции
  • ecx = номер слота процесса/потока

Возвращаемое значение:

  • функция не возвращает значения

Константы для регистров:

eax - SF_SYSTEM (18)
ebx - SSF_UNFOCUS_WINDOW (1)

Подфункция 2 - завершить процесс/поток по слоту.

Параметры:

  • eax = 18 - номер функции
  • ebx = 2 - номер подфункции
  • ecx = номер слота процесса/потока

Возвращаемое значение:

  • функция не возвращает значения

Замечания:

  • Нельзя завершить поток операционной системы OS/IDLE (номер слота 1), можно завершить любой обычный поток/процесс.
  • Смотри также подфункцию 18 - завершение процесса/потока с заданным идентификатором.

Константы для регистров:

eax - SF_SYSTEM (18)
ebx - SSF_TERMINATE_THREAD (2)

Подфункция 3 - сделать активным окно заданного потока.

Параметры:

  • eax = 18 - номер функции
  • ebx = 3 - номер подфункции
  • ecx = номер слота потока

Возвращаемое значение:

  • функция не возвращает значения

Замечания:

  • При указании корректного, но несуществующего слота активизируется какое-то окно.
  • Узнать, какое окно является активным, можно вызовом подфункции 7.

Константы для регистров:

eax - SF_SYSTEM (18)
ebx - SSF_FOCUS_WINDOW (3)

Подфункция 4 - получить счётчик пустых тактов в секунду.

Под пустыми тактами понимается время, в которое процессор простаивает в ожидании прерывания (в инструкции hlt).

Параметры:

  • eax = 18 - номер функции
  • ebx = 4 - номер подфункции

Возвращаемое значение:

  • eax = значение счётчика пустых тактов в секунду

Константы для регистров:

eax - SF_SYSTEM (18)
ebx - SSF_GET_IDLE_COUNT (4)

Подфункция 5 - получить тактовую частоту.

Параметры:

  • eax = 18 - номер функции
  • ebx = 5 - номер подфункции

Возвращаемое значение:

  • eax = тактовая частота (по модулю 2^32 тактов = 4ГГц)

Константы для регистров:

eax - SF_SYSTEM (18)
ebx - SSF_GET_CPU_REQUENCY (5)

Подфункция 6 - сохранить рамдиск в файл на жёстком диске.

Параметры:

  • eax = 18 - номер функции
  • ebx = 6 - номер подфункции
  • ecx = указатель на строку с полным именем файла (например, "/hd0/1/kolibri/kolibri.img")

Возвращаемое значение:

  • eax = 0 - успешно
  • иначе eax = код ошибки файловой системы

Замечания:

  • Все папки в указанном пути должны существовать, иначе вернётся значение 5, "файл не найден".

Константы для регистров:

eax - SF_SYSTEM (18)
ebx - SSF_RD_TO_HDD (6)

Подфункция 7 - получить номер активного окна.

Параметры:

  • eax = 18 - номер функции
  • ebx = 7 - номер подфункции

Возвращаемое значение:

  • eax = номер активного окна (номер слота потока, окно которого
активно)

Замечания:

  • Активное окно находится вверху оконного стэка и получает
сообщения обо всём вводе с клавиатуры.
  • Сделать окно активным можно вызовом подфункции 3.

Константы для регистров:

eax - SF_SYSTEM (18)
ebx - SSF_GET_ACTIVE_WINDOW (7)

Подфункция 8 - отключить/разрешить звук спикера.

При отключённом звуке вызовы подфункции 55 функции 55 игнорируются. При включённом - направляются на встроенный спикер.

Подподфункция 1 - получить состояние.

Параметры:

  • eax = 18 - номер функции
  • ebx = 8 - номер подфункции
  • ecx = 1 - номер подподфункции

Возвращаемое значение:

  • eax = 0 - звук спикера разрешён; 1 - запрещён

Подподфункция 2 - переключить состояние.

Переключает состояния разрешения/запрещения. Параметры:

  • eax = 18 - номер функции
  • ebx = 8 - номер подфункции
  • ecx = 2 - номер подподфункции

Возвращаемое значение:

  • функция не возвращает значения

Константы для регистров:

eax - SF_SYSTEM (18)
ebx - SSF_SPEAKER (8)
ecx - SSSF_GET_STATE (1), SSSF_TOGGLE (2)

Подфункция 9 - завершение работы системы с параметром.

Параметры:

  • eax = 18 - номер функции
  • ebx = 9 - номер подфункции
  • ecx = параметр:
  • 2 = выключить компьютер
  • 3 = перезагрузить компьютер
  • 4 = перезапустить ядро из файла kernel.mnt на рамдиске

Возвращаемое значение:

  • при неверном ecx регистры не меняются (т.е. eax=18)
  • при правильном вызове всегда возвращается признак успеха eax=0

Замечания:

  • Не следует полагаться на возвращаемое значение при неверном
вызове, оно может измениться в последующих версиях ядра.

Константы для регистров:

eax - SF_SYSTEM (18)
ebx - SSF_SHUTDOWN (9)

Подфункция 10 - свернуть окно приложения.

Сворачивает собственное окно. Параметры:

  • eax = 18 - номер функции
  • ebx = 10 - номер подфункции

Возвращаемое значение:

  • функция не возвращает значения

Замечания:

  • Минимизированное окно с точки зрения функции 9 сохраняет положение
и размеры.
  • Восстановление окна приложения происходит при активизировании
подфункцией 3.
  • Обычно нет необходимости явно сворачивать/разворачивать своё окно:
сворачивание окна осуществляется системой при нажатии на кнопку
минимизации (которая для окон со скином определяется автоматически
функцией 0, для окон без скина её можно определить функцией 8),
восстановление - приложением @taskbar.

Константы для регистров:

eax - SF_SYSTEM (18)
ebx - SSF_MINIMIZE_WINDOW (10)

Подфункция 11 - получить информацию о дисковой подсистеме.

Внимание: Эта подфункция будет удалена в следующих версиях системы

Параметры:

  • eax = 18 - номер функции
  • ebx = 11 - номер подфункции
  • ecx = тип таблицы:
  • 1 = короткая версия, 10 байт
  • 2 = полная версия, 65536 байт
  • edx = указатель на буфер (в приложении) для таблицы

Возвращаемое значение:

  • функция не возвращает значения

Формат таблицы: короткая версия:

  • +0: byte: информация о НГМД (дисководах для дискет), AAAABBBB,
где AAAA задаёт тип первого дисковода, BBBB - второго согласно
следующему списку:
  • 0 = нет дисковода
  • 1 = 360Kb, 5.25
  • 2 = 1.2Mb, 5.25
  • 3 = 720Kb, 3.5
  • 4 = 1.44Mb, 3.5
  • 5 = 2.88Mb, 3.5 (такие дискеты сейчас уже не используются)
Например, для стандартной конфигурации из одного 1.44-дисковода
здесь будет 40h, а для случая 1.2Mb на A: и 1.44Mb на B:
значение оказывается 24h.
  • +1: byte: информация о жёстких дисках и CD-приводах, AABBCCDD,
где AA соответствует контроллеру IDE0, ..., DD - IDE3:
  • 0 = устройство отсутствует
  • 1 = жёсткий диск
  • 2 = CD-привод
Например, в случае HD на IDE0 и CD на IDE2 здесь будет 48h.
  • +2: 4 db: число найденных разделов на жёстких дисках с
соответственно IDE0,...,IDE3.
При отсутствии жёсткого диска на IDEx соответствующий байт
нулевой, при наличии показывает число распознанных разделов,
которых может и не быть (если носитель не отформатирован или
если файловая система не поддерживается). В текущей версии ядра
для жёстких дисков поддерживаются только FAT16, FAT32 и NTFS.
  • +6: 4 db: зарезервировано

Формат таблицы: полная версия:

  • +0: 10 db: такие же, как и в короткой версии
  • +10: 100 db: данные для первого раздела
  • +110: 100 db: данные для второго раздела
  • ...
  • +10+100*(n-1): 100 db: данные для последнего раздела

Разделы расположены в следующем порядке: сначала последовательно все распознанные разделы на HD на IDE0 (если есть), затем на HD на IDE1 (если есть) и т.д. до IDE3. Формат информации о разделе:

  • +0: dword: начальный физический сектор раздела
  • +4: dword: последний физический сектор раздела
(принадлежит разделу)
  • +8: byte: тип файловой системы:
16=FAT16, 32=FAT32, 1=NTFS
  • формат дальнейших данных зависит от файловой системы,
может меняться с изменениями в ядре и поэтому не описывается

Замечания:

  • Короткая таблица может быть использована для получения информации
об имеющихся устройствах.

Константы для регистров:

eax - SF_SYSTEM (18)
ebx - SSF_INFO_DISC_SYS (11)

Подфункция 13 - получить версию ядра.

Параметры:

  • eax = 18 - номер функции
  • ebx = 13 - номер подфункции
  • ecx = указатель на буфер (не менее 16 байт), куда будет помещена
информация

Возвращаемое значение:

  • функция не возвращает значения,
но, если указатель в ecx недопустимый, например,
регион [ecx, ecx + 9) пересекается с памятью ядра,
то тогда функция возвращает -1

Замечания:

  • В данный момент используется только часть буфера размером
9 байт. Тем не менее рекомендуется использовать буфер
размером 16 байт для будущей совместимости, в будущем могут быть
добавлены некоторые поля.

Структура буфера:

db a,b,c,d для версии a.b.c.d
db 0: зарезервировано
dd REV - номер svn-ревизии ядра

Для ядра Kolibri 0.7.7.0+:

db 0,7,7,0
db 0
dd 1675

Константы для регистров:

eax - SF_SYSTEM (18)
ebx - SSF_KERNEL_VERSION (13)

Подфункция 14 - ожидать начала обратного хода луча развёртки монитора.

Параметры:

  • eax = 18 - номер функции
  • ebx = 14 - номер подфункции

Возвращаемое значение:

  • eax = 0 как признак успеха

Замечания:

  • Функция предназначена исключительно для активных
высокопроизводительных графических приложений; используется для
плавного вывода графики.

Константы для регистров:

eax - SF_SYSTEM (18)
ebx - SSF_WAIT_RETRACE (14)

Подфункция 15 - поместить курсор мыши в центр экрана.

Параметры:

  • eax = 18 - номер функции
  • ebx = 15 - номер подфункции

Возвращаемое значение:

  • eax = 0 как признак успеха

Константы для регистров:

eax - SF_SYSTEM (18)
ebx - SSF_CURSOR_CENTER (15)

Подфункция 16 - Получить размер свободной оперативной памяти.

Параметры:

  • eax = 18 - номер функции
  • ebx = 16 - номер подфункции

Возвращаемое значение:

  • eax = размер свободной памяти в килобайтах

Константы для регистров:

eax - SF_SYSTEM (18)
ebx - SSF_GET_FREE_RAM (16)

Подфункция 17 - получить размер имеющейся оперативной памяти.

Параметры:

  • eax = 18 - номер функции
  • ebx = 17 - номер подфункции

Возвращаемое значение:

  • eax = общий размер имеющейся памяти в килобайтах

Константы для регистров:

eax - SF_SYSTEM (18)
ebx - SSF_GET_TOTAL_RAM (17)

Подфункция 18 - завершить процесс/поток по идентификатору.

Параметры:

  • eax = 18 - номер функции
  • ebx = 18 - номер подфункции
  • ecx = идентификатор процесса/потока (PID/TID)

Возвращаемое значение:

  • eax = 0 - успешно
  • eax = -1 - ошибка (процесс не найден или является системным)

Замечания:

  • Нельзя завершить поток операционной системы OS/IDLE (номер слота
1), можно завершить любой обычный поток/процесс.
  • Смотри также подфункцию 2 - завершение
процесса/потока по заданному слоту.

Константы для регистров:

eax - SF_SYSTEM (18)
ebx - SSF_TERMINATE_THREAD_ID (18)

Подфункция 19 - получить/установить настройки мыши.

Подподфункция 0 - получить скорость мыши.

Параметры:

  • eax = 18 - номер функции
  • ebx = 19 - номер подфункции
  • ecx = 0 - номер подподфункции

Возвращаемое значение:

  • eax = текущий делитель скорости

Подподфункция 1 - установить скорость мыши.

Параметры:

  • eax = 18 - номер функции
  • ebx = 19 - номер подфункции
  • ecx = 1 - номер подподфункции
  • edx = новое значение делителя скорости

Возвращаемое значение:

  • функция не возвращает значения

Замечание: рекомендуемый делитель скорости = 4

Подподфункция 2 - получить чувствительность мыши.

Параметры:

  • eax = 18 - номер функции
  • ebx = 19 - номер подфункции
  • ecx = 2 - номер подподфункции

Возвращаемое значение:

  • eax = текущий коэффициент чувствительности

Подподфункция 3 - установить чувствительность мыши.

Параметры:

  • eax = 18 - номер функции
  • ebx = 19 - номер подфункции
  • ecx = 3 - номер подподфункции
  • edx = новое значение коэффициента чувствительности

Возвращаемое значение:

  • функция не возвращает значения

Замечание: рекомендуемый коэффициент чувствительности = 3

Подподфункция 4 - установить положение курсора мыши.

Параметры:

  • eax = 18 - номер функции
  • ebx = 19 - номер подфункции
  • ecx = 4 - номер подподфункции
  • edx = [координата по оси x]*65536 + [координата по оси y]

Возвращаемое значение:

  • функция не возвращает значения

Подподфункция 5 - симулировать состояние клавиш мыши.

Параметры:

  • eax = 18 - номер функции
  • ebx = 19 - номер подфункции
  • ecx = 5 - номер подподфункции
  • edx = информация о эмулируемом состоянии кнопок мыши:
(соответствует возвращаемому значению подфункции 2 функции 37)
  • бит 0 установлен = левая кнопка нажата
  • бит 1 установлен = правая кнопка нажата
  • бит 2 установлен = средняя кнопка нажата
  • бит 3 установлен = 4-я кнопка нажата
  • бит 4 установлен = 5-я кнопка нажата

Возвращаемое значение:

  • функция не возвращает значения

Подподфункция 6 - получить задержку двойного щелчка.

Параметры:

  • eax = 18 - номер функции
  • ebx = 19 - номер подфункции
  • ecx = 6 - номер подподфункции

Возвращаемое значение:

  • eax = текущая задержка двойного щелчка (в сотых секунды)

Подподфункция 7 - установить задержку двойного щелчка.

Параметры:

  • eax = 18 - номер функции
  • ebx = 19 - номер подфункции
  • ecx = 7 - номер подподфункции
  • dl = новое значение задержки двойного щелчка (в сотых секунды)

Возвращаемое значение:

  • функция не возвращает значения

Константы для регистров:

eax - SF_SYSTEM (18)
ebx - SSF_MOUSE_SETTINGS (19)
ecx - SSSF_GET_SPEED (0), SSSF_SET_SPEED (1), SSSF_GET_SPEEDUP (2),
SSSF_SET_SPEEDUP (3), SSSF_SET_POS (4), SSSF_SET_BUTTON (5),
SSSF_GET_DOUBLE_CLICK_DELAY (6), SSSF_SET_DOUBLE_CLICK_DELAY (7)

Подфункция 20 - получить информацию об оперативной памяти.

Параметры:

  • eax = 18 - номер функции
  • ebx = 20 - номер подфункции
  • ecx = указатель на буфер для информации (36 байт)

Возвращаемое значение:

  • eax = общий размер имеющейся оперативной памяти в байтах
или -1 в случае ошибки
  • буфер, на который указывает ecx, содержит следующую информацию:
  • +0: dword: общий размер имеющейся оперативной памяти в страницах
  • +4::dword: размер свободной оперативной памяти в страницах
  • +8::dword: число страничных ошибок (исключений #PF)
в приложениях
  • +12: dword: размер кучи ядра в байтах
  • +16: dword: размер свободной памяти в куче ядра в байтах
  • +20: dword: общее количество блоков памяти в куче ядра
  • +24: dword: количество свободных блоков памяти в куче ядра
  • +28: dword: размер наибольшего свободного блока в куче ядра
(зарезервировано)
  • +32: dword: размер наибольшего выделенного блока в куче ядра
(зарезервировано)

Константы для регистров:

eax - SF_SYSTEM (18)
ebx - SSF_GET_RAM_INFO (20)

Подфункция 21 - получить номер слота процесса/потока по идентификатору.

Параметры:

  • eax = 18 - номер функции
  • ebx = 21 - номер подфункции
  • ecx = идентификатор процесса/потока (PID/TID)

Возвращаемое значение:

  • eax = 0 - ошибка (неверный идентификатор)
  • иначе eax = номер слота

Константы для регистров:

eax - SF_SYSTEM (18)
ebx - SSF_GET_THREAD_SLOT (21)

Подфункция 22 - операции с окном другого процесса/потока.

Параметры:

  • eax = 18 - номер функции
  • ebx = 22 - номер подфункции
  • ecx = тип операции:
  • 0 = минимизация окна, поток задан номером слота
  • 1 = минимизация окна, поток задан идентификатором
  • 2 = восстановление окна, поток задан номером слота
  • 3 = восстановление окна, поток задан идентификатором
  • edx = параметр операции (номер слота или PID/TID)

Возвращаемое значение:

  • eax = 0 - успешно
  • eax = -1 - ошибка (неправильный параметр)

Замечания:

  • Поток может свернуть своё окно вызовом подфункции 10.
  • Восстановление окна с одновременной активизацией осуществляется
подфункции 3 (принимающей номер слота).

Константы для регистров:

eax - SF_SYSTEM (18)
ebx - SSF_FOREIGN_WINDOW (22)
ecx - SSSF_MINIMIZE (0), SSSF_MINIMIZE_ID (1), SSSF_RESTORE (2),
SSSF_RESTORE_ID (3)

Подфункция 23 - минимизировать все окна

Параметры:

  • eax = 18 - номер функции
  • ebx = 23 - номер подфункции

Возвращаемое значение:

  • eax = 0 - все окна были минимизированы до вызова функции
  • eax = N - количество окон свернутых функцией

Замечания:

  • Окна спец. потоков (имя начинается с символа @) не сворачиваются.

Константы для регистров:

eax - SF_SYSTEM (18)
ebx - SSF_MINIMIZE_ALL (23)

Подфункция 24 - установить пределы отрисовки

Параметры:

  • eax = 18 - номер функции
  • ebx = 24 - номер подфункции
  • ecx = новый размер по X
  • edx = новый размер по Y

Возвращаемое значение:

  • функция не возвращает значения

Замечания:

  • Функция не меняет физический размер видеорежима. Она предназначена
для нестандартных дисплеев, отображающих изображение частично.
  • Размеры указываемые в функции не должны превышать размеры текущего
видеорежима, иначе функция ничего не изменит.

Константы для регистров:

eax - SF_SYSTEM (18)
ebx - SSF_SET_SCREEN_LIMITS (24)

Подфункция 25 - Управление положением окна относительно других окон.

Подподфункция 1 - получить положение

Параметры:

  • eax = 18 - номер функции
  • ebx = 25 - номер подфункции
  • ecx = 1 - номер подподфункции
  • edx = -1 (для текущего окна) или PID приложения

Возвращаемое значение:

  • eax = одна из констант положения окна

Подподфункция 2 - установить положение

Параметры:

  • eax = 18 - номер функции
  • ebx = 25 - номер подфункции
  • ecx = 2 - номер подподфункции
  • edx = -1(для текущего окна) или PID приложения
  • esi = новое положение окна (одна из констант ниже)

Возвращаемое значение:

  • eax = 0 - неудача
  • eax = 1 - успех

Константы положения окна относительно других окон:

ZPOS_DESKTOP = -2 - на самом заднем плане
ZPOS_ALWAYS_BACK = -1 - позади всех окон
ZPOS_NORMAL = 0 - обычное
ZPOS_ALWAYS_TOP = 1 - поверх всех окон

Константы для регистров:

eax - SF_SYSTEM (18)
ebx - SSF_WINDOW_BEHAVIOR (25)
ecx - SSSF_GET_WB (1), SSSF_SET_WB (2)