Ru/api/kernel: Difference between revisions

From KolibriOS wiki
Jump to navigation Jump to search
Line 95: Line 95:
Описание функции перенесено в отдельную статью: [[SysFn17|Функция 17]]
Описание функции перенесено в отдельную статью: [[SysFn17|Функция 17]]


== Функция 18 ==
'''Функция 18''' -  
=== Подфункция 2 - завершить процесс/поток по слоту. ===
 
Параметры:
  * eax = 18 - номер функции
  * ebx = 2 - номер подфункции
  * ecx = номер слота процесса/потока
Возвращаемое значение:
  * функция не возвращает значения
Замечания:
  * Нельзя завершить поток операционной системы OS/IDLE (номер слота
    1), можно завершить любой обычный поток/процесс.
  * Смотри также подфункцию 18 - завершение
    процесса/потока с заданным идентификатором.
 
 
=== Подфункция 3 - сделать активным окно заданного потока. ===
 
Параметры:
  * eax = 18 - номер функции
  * ebx = 3 - номер подфункции
  * ecx = номер слота потока
Возвращаемое значение:
  * функция не возвращает значения
Замечания:
  * При указании корректного, но несуществующего слота активизируется
    какое-то окно.
  * Узнать, какое окно является активным, можно вызовом подфункции 7.
 
 
=== Подфункция 4 - получить счётчик пустых тактов в секунду. ===
 
Под пустыми тактами понимается время, в которое процессор простаивает
в ожидании прерывания (в инструкции hlt).
 
Параметры:
  * eax = 18 - номер функции
  * ebx = 4 - номер подфункции
Возвращаемое значение:
  * eax = значение счётчика пустых тактов в секунду
 
 
=== Подфункция 5 - получить тактовую частоту. ===
 
Параметры:
  * eax = 18 - номер функции
  * ebx = 5 - номер подфункции
Возвращаемое значение:
  * eax = тактовая частота (по модулю 2^32 тактов = 4ГГц)
 
 
=== Подфункция 6 - сохранить рамдиск в файл на жёстком диске. ===
 
Параметры:
  * eax = 18 - номер функции
  * ebx = 6 - номер подфункции
  * ecx = указатель на строку с полным именем файла
    (например, "/hd0/1/kolibri/kolibri.img")
Возвращаемое значение:
  * eax = 0 - успешно
  * иначе eax = код ошибки файловой системы
Замечания:
  * Все папки в указанном пути должны существовать, иначе вернётся
    значение 5, "файл не найден".
 
 
=== Подфункция 7 - получить номер активного окна. ===
 
Параметры:
  * eax = 18 - номер функции
  * ebx = 7 - номер подфункции
Возвращаемое значение:
  * eax = номер активного окна (номер слота потока, окно которого
    активно)
Замечания:
  * Активное окно находится вверху оконного стэка и получает
    сообщения обо всём вводе с клавиатуры.
  * Сделать окно активным можно вызовом подфункции 3.
 
 
=== Подфункция 8 - отключить/разрешить звук спикера. ===
 
При отключённом звуке вызовы подфункции 55 функции 55 игнорируются.
При включённом - направляются на встроенный спикер.
 
=== Подподфункция 1 - получить состояние. ===
Параметры:
  * eax = 18 - номер функции
  * ebx = 8 - номер подфункции
  * ecx = 1 - номер подподфункции
Возвращаемое значение:
  * eax = 0 - звук спикера разрешён; 1 - запрещён
 
=== Подподфункция 2 - переключить состояние. ===
Переключает состояния разрешения/запрещения.
Параметры:
  * eax = 18 - номер функции
  * ebx = 8 - номер подфункции
  * ecx = 2 - номер подподфункции
Возвращаемое значение:
  * функция не возвращает значения
 
 
=== Подфункция 9 - завершение работы системы  ===
 
Параметры:
  * eax = 18 - номер функции
  * ebx = 9 - номер подфункции
  * ecx = параметр:
    * 2 = выключить компьютер
    * 3 = перезагрузить компьютер
    * 4 = перезапустить ядро из файла kernel.mnt на рамдиске
Возвращаемое значение:
  * при неверном ecx регистры не меняются (т.е. eax=18)
  * при правильном вызове всегда возвращается признак успеха eax=0
Замечания:
  * Не следует полагаться на возвращаемое значение при неверном
    вызове, оно может измениться в последующих версиях ядра.
  * Можно использовать подфункцию 1, чтобы на последнем шаге
    завершения работы пользователь сам решал, что ему нужно.
 
=== Подфункция 10 - свернуть окно приложения. ===
 
Сворачивает собственное окно.
Параметры:
  * eax = 18 - номер функции
  * ebx = 10 - номер подфункции
Возвращаемое значение:
  * функция не возвращает значения
Замечания:
  * Минимизированное окно с точки зрения функции 9 сохраняет положение
    и размеры.
  * Восстановление окна приложения происходит при активизировании
    подфункцией 3.
  * Обычно нет необходимости явно сворачивать/разворачивать своё окно:
    сворачивание окна осуществляется системой при нажатии на кнопку
    минимизации (которая для окон со скином определяется автоматически
    функцией 0, для окон без скина её можно определить функцией 8),
    восстановление - приложением @panel.
 
 
=== Подфункция 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
  * формат дальнейших данных зависит от файловой системы,
    может меняться с изменениями в ядре и поэтому не описывается
Замечания:
  * Короткая таблица может быть использована для получения информации
    об имеющихся устройствах.
 
 
=== Подфункция 13 - получить версию ядра. ===
 
Параметры:
  * eax = 18 - номер функции
  * ebx = 13 - номер подфункции
  * ecx = указатель на буфер (не менее 16 байт), куда будет помещена
    информация
Возвращаемое значение:
  * функция не возвращает значения
Структура буфера:
db a,b,c,d для версии a.b.c.d
db UID_xxx: одно из UID_NONE=0, UID_MENUET=1, UID_KOLIBRI=2
dd REV - номер svn-ревизии ядра
Для ядра Kolibri 0.7.1.0:
db 0,7,1,0
db 2
dd 638
 
 
=== Подфункция 14 - ожидать начала обратного хода луча развёртки монитора. ===
 
Параметры: