Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Последние темы форума

Показать новые сообщения »

Почтовая рассылка

Подписчиков: 11656
Последний выпуск: 19.06.2015

Функции DOS -

Вход:

  • AH = номер мультиплексного процесса
    • 01H = резидентная порция команды DOS 'PRINT'
    • 02H = резидентная порция команды DOS 'ASSIGN'
    • 10H = резидентная порция команды DOS 'SHARE'
    • 03H-7fH (зарезервировано)
    • 80H-0ffH (доступно для других процессов)
  • AL = номер подфункции
  • прочие = зависят от подфункций и конкретных мультиплексных процессов

Выход:

  • AX = код ошибки, если взведен флаг CF (для процессов DOS)
  • AL = статус установки (для процессов DOS)
    • 00H = не установлен. можно устанавливать
    • 01H = не установлен. Нельзя устанавливать
    • ffH = установлен

Этот вектор (0000:00bc) предоставляет средства управления процессами, доступные всей системе из любого приложения.

Каждый процесс должен включить себя в цепочку прерываний с этим кодом, и каждый процесс в цепочке должен проверять AH на свой мультиплексный номер процесса. Если запрос относится к другому процессу, активный процесс должен передать управление по первоначальному адресу прерывания 2fH (по адресу, который был в векторе 0:00bc перед тем, как текущий процесс установил себя).

Версии DOS:

INT 2fH не определено для более ранних версий, чем DOS 3.0 В DOS 3.0, INT 2fH определено ТОЛЬКО для PRINT, и значение AH (которое определяет номер процесса) не определено. В DOS 3.2, этот вектор определен так, как описано выше.

Print Spooler:

  • AH=1 (или AH=что угодно для DOS 2.x) это - интерфейс, определяемый для фоновой печати (печатного спулинга) после выполнения команды DOS 'PRINT'.
  • AL - номер подфункции (0-5). все подфункции могут возвращать ошибки (см. ниже).
    • AL = 0: опросить статус установки процесса
      • Выход:
      • AL = 00H = не установлен, можно устанавливать
      • AL = 01H = не установлен, нельзя устанавливать
      • AL = ffH = установлен
    • AL = 1: направить файл к спулеру
      • DS:DX => направляемый пакет
      • смещение 0 =уровень (всегда 0 для DOS 3.0, 3.1 и 3.2)
      • смещение 1 =DWORD адрес (смещение,сегмент) строки ASCIIZ, содержащей диск, путь и имя файла, направляемого в очередь печати (глобальные - обобщенные - имена НЕ допускаются)
    • AL = 2: снять выбранные файлы
      • DS:DX => строка ASCIIZ с именем удаляемого из очереди файла (глобальные символы допускаются в имени)
    • AL = 3: Снять все файлы (удалить все файлы из очереди и остановить печать)
    • AL = 4: статус. возвращает счетчик ошибок и задерживает очередь для изучения.

      используйте подфункцию 5, чтобы освободить очередь.

      Возвращает: DS:SI => блок описания файла в очереди. Один или несколько блоков с ASCIIZ-именами файлов. Конец блока отмечается именем, начинающимся с 00H.

      DX = счетчик последовательных ошибок, встретившихся при попытке вывода последнего символа.

    • AL = 5: конец статуса. Освобождает очередь для продолжения печати.
    • AL = 0f8H-0ffH: (резервируется для DOS)

      Ошибки спулера:

      Если установлен флаг CF, то AX содержит код ошибки:

      • AX = 1 - неверный номер функции
      • AX = 2 - файл не найден
      • AX = 3 - Путь не найден
      • AX = 4 - Слишком много файлов (нет доступных описателей)
      • AX = 5 - доступ отвергнут
      • AX = 6 - неверный описатель (handle)
      • AX = 8 - переполнение очереди
      • AX = 9 - Занято
      • AX = 0Ch - Путь и имя файла превышают 64 символа
      • AX = 0Fh - неверный диск

Assign

AH=2 - мультиплексный номер для резидентной порции команды DOS 'ASSIGN'. Определена только подфункция AL=0 (дать статус установки).

Share

AH=10H - мультиплексный номер резидентной порции команды DOS 'SHARE'. Определена только подфункция AL=0 (дать статус установки).

Создание собственного процесса

Руководство DOS Tech Ref разъясняет, что вы можете использовать INT 2fH как вход для установки и доступа к вашему собственному резидентному процессу. Идея состоит в следующем: если вы произвольно используете вектор прерывания для вашего собственного доступа, то вы подвергаетесь определенному риску, особенно в мультизадачной системе. если же вы используете предлагаемую мультиплексную "цепочку", то DOS знает о вас, и ваш вектор не будет перекрыт другим обработчиком. Одна возможная проблема: нет предопределенного способа определить мультиплексный номер вашего процесса (регистр AH). Плохо привязываться к конкретному числу, ибо нет гарантии, что другой процесс не будет использовать этот же номер. Вы должны предусмотреть какую-то логику, гарантирующую вам четкое опознание вашего процесса.

Ваш процесс должен по меньшей мере использовать подфункцию AL=0, чтобы вы могли выяснить, не был ли процесс уже установлен ранее.

Замечание:

Если ваш процесс использует сервис DOS, или выполняется с незамаскированными прерываниями, то он должен быть реентерабельным.

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог