MS-DOS для программиста



         

MS-DOS для программиста

Операционная система MS-DOS имеет в своем составе мощные и удобные функции, с помощью которых программы могут выполнить большинство операций над файлами и каталогами. Все эти операции удобно выполнять с помощью соответствующих функций стандартных библиотек любых систем разработки программного обеспечения, таких как Borland C++ или Microsoft Visual C++.
Однако системным программистам часто требуются более развитые средства управления дисками и файловой системой, чем те, которые обеспечиваются стандартными библиотеками, функциями MS-DOS, и даже функциями BIOS. В отдельных сложных случаях приходится прибегать к недокументированным прерываниям MS-DOS или использовать недокументированные структуры данных, рискуя потерять совместимость разрабатываемой программы с будущими версиями MS-DOS. Например, создание систем защиты от несанкционированного копирования программного обеспечения часто предполагает активное использование недокументированных возможностей MS-DOS.

Введение
Системным программистам часто требуются более развитые средства управления дисками и файловой системой, чем те, которые обеспечиваются стандартными библиотеками, функциями MS-DOS, и даже функциями BIOS. В отдельных сложных случаях приходится прибегать к недокументированным прерываниям MS-DOS или использовать недокументированные структуры данных, рискуя потерять совместимость разрабатываемой программы с будущими версиями MS-DOS.

Работа с дисками на физическом уровне
Это самый низкий уровень, применение которого оправдано далеко не всегда. Более того, мы настоятельно рекомендуем не работать с контроллером на уровне портов, если вы точно не знаете, зачем вам это нужно. Большинство задач решается с применением функций MS-DOS или BIOS (даже такие нетрадиционные задачи, как защита от несанкционированного копирования).

Обзор дисковых устройств
Обзор дисковых устройств - 2
Секторы, головки , цилиндры...
Характеристики дисковых накопителей
Определение типа компьютера
Прерывание INT 11h
Анализ содержимого CMOS-памяти
Анализ содержимого CMOS-памяти - 2
Таблицы параметров НМД и НГМД
Таблицы параметров НМД и НГМД - 2

Логическая структура диска в MS-DOS
До сих пор при работе с дисками мы не обращались за помощью к MS-DOS, выполняя все дисковые операции либо на уровне команд контроллера НГМД, либо на уровне функций BIOS. Операционная система предоставляет намного более удобные средства для работы с диском, чем обращение к отдельным секторам по их номеру, а также по номеру дорожки и головки .

Таблица разделов и логические диски
Главная загрузочная запись
Таблица разделов диска
Загрузочная запись
Загрузка операционной системы
Поля элемента таблицы раздела диска
Первичный и расширенный раздел
Программа PARTVIEW
Программа PARTVIEW - 2
Загрузочная запись

Файловая система DOS
Заметим, что существует два класса функций для работы с файлами. Первый класс использует управляющие блоки файлов FCB . Эти функции использовались в MS-DOS версий 1.х и имеют в настоящее время чисто исторический интерес. Вам они, скорее всего, никогда не будут нужны, за исключением одного случая - если вам надо составить программу, способную работать под управлением MS-DOS версии 1.0 или 1.1.

Получение справочной информации
Текущий диск и текущий каталог
Определение размера кластера и сектора
Определение размера свободного пространства
Блок управления устройством DDCB
Флаг прерывания
Адрес области DTA
Флаг проверки записи
Функции библиотеки Borland C++
_Dos_getdiskfree

Использование функций IOCTL
Мы покажем, как использовать функцию 44h прерывания INT21h для извлечения разнообразной информации об открытых файлах по их идентификатору, для определения момента достижения конца файла, для получения информации о НГМД и НМД и для выполнения таких низкоуровневых операций, как форматирование дорожки диска, чтение или запись секторов диска и т. д.

Получение различной информации
Состояние открытого файла
Определение момента достижения конца файла
Расположение открытого файла или устройства
Возможность замены носителя данных
Общее управление GENERIC IOCTL
Общее управление GENERIC IOCTL - 2
Примеры использования функций GENERIC IOCTL
Программа FMTIOCTL
Программа FMTIOCTL - 2

Защита программ от несанкционированного копирования
Не существует никаких "абсолютно надежных" методов защиты. Можно утверждать, что достаточно квалифицированные системные программисты, пользующиеся современными средствами анализа работы программного обеспечения (отладчики, дизассемблеры, перехватчики прерываний и т. д.), располагающие достаточным временем, смогут преодолеть практически любую защиту. Этому способствует "открытость" операционной системы MS-DOS, которая хорошо документирована и предоставляет любой программе доступ к любым программным и аппаратным ресурсам компьютера

Защита дискет от копирования
Защита дискет от копирования - 2
Программа FMT256
Программа FMT256 - 2
Программа FMT81TRK
Программа FMT81TRK - 2
Программа RW81TRK
Программа FMTINTRL
Программа CHKINTRL
Защита программ на жестком диске

Настройка и оптимизация MS-DOS
Проверьте, насколько сильно фрагментирован ваш диск - фрагментация сильно замедляет работу программ, активно использующих дисковую память. Обновите версию операционной системы MS-DOS до 6.22 - это даст вам дополнительно несколько десятков Кбайт основной оперативной памяти и возможность организации динамической компрессии данных.

План работ по оптимизации
Определение типа контроллера НМД
ST506/412
ESDI
SCSI
IDE и Enchanced IDE
Тип процессора
Расширенная память
Дополнительная память
Версия операционной системы

Операционная система MSDOS

В настоящее время можно найти уже довольно много книг, посвященных операционной системе MS-DOS. Большинство из них, однако, ограничиваются описанием MS-DOS на уровне пользователя или, в крайнем случае, на уровне прикладного программиста, не затрагивая деталей и тонкостей работы самой операционной системы. Этот подход, безусловно, правомерен и оправдан - пользователей ПЭВМ гораздо больше, чем системных программистов, а более глубокая информация предоставляется в руководствах, поставляемых фирмами и специальных заказных пособиях.
И все же потребность в, казалось бы, специальной информации у нас огромна. Наш программист часто оказывается в очень сложной ситуации: не имея доступа к зарубежной оригинальной литературе, он вынужден разрабатывать специальное программное обеспечение, написание которого требует глубокого знания операционной системы MS-DOS и аппаратных особенностей IBM PC. Можно с уверенностью сказать, что в условиях информационного голода, отсутствия фирменного технического обслуживания и необходимости обеспечения работы самой экзотической аппаратуры каждый прикладной программист вынужден быть немножко системным программистом, знать и уметь больше, чем его западный коллега.
Как известно, спрос рождает предложение, и уже сейчас появились книги под названием "Системное программирование в MS-DOS", в которых описываются, как правило, прерывания MS-DOS и приводятся примеры работы с ними. Такой подход нам кажется полезным только на начальном этапе изучения программирования в MS-DOS.
При написании настоящей книги авторы предполагали, что с прерываниями DOS и BIOS вы уже знакомы достаточно хорошо, либо способны разобраться самостоятельно - для этого существуют как специальные справочные системы типа TechHelp (которая сейчас имеется и на русском языке) или NortonGuide, так и контекстные справочники, являющиеся элементом интегрированных сред программирования (например, QuickAdvisor корпорации Microsoft или справочная система Thelp фирмы Borland International).
Авторы настоящего руководства стремились прежде всего осветить те вопросы, которые практически невозможно найти нигде, кроме как в документации, поставляемой фирмами. В соответствии с этим общеизвестные вещи изложены более кратко. В книге описана, например, структура управляющих блоков MS-DOS, показано, как написать собственный драйвер устройства или правильно работающую резидентную программу. Книга рассчитана на хорошего прикладного программиста, имеющего в своем распоряжении широко распространенную справочную информацию по MS-DOS, который, однако, пришел к необходимости еще более углубить свои знания.
Предполагается, что у вас имеется в распоряжении компьютер, на котором вы в процессе изучения книги можете опробовать приводимые нами примеры и проводить свои собственные исследования.
Все программы транслировались в среде Microsoft Quick C версий 2.01 и 2.5. На прилагаемой дискете находятся исходные тексты программ и некоторые утилиты, описанные в настоящем руководстве. Примеры составлены так, чтобы вы могли без значительных переделок использовать их в своих разработках.
Для тех, кто уже исчерпал документированные особенности MS-DOS, приводятся сведения о наиболее полезных недокументированных прерываниях и управляющих блоках MS-DOS. Изучение недокументированных прерываний и структур данных позволит вам глубже понять внутреннее устройство операционной системы, извлечь такую информацию о состоянии системы, которую трудно, если вообще возможно, получить "законным" способом.

Внутренняя организация MSDOS
Операционная система MSDOS

Команды DOS. Справочное пособие

Команда APPEND
Позволяет программам открывать файлы данных в заданных ката логах (которые называются присоединенными каталогами), как если бы они находились в текущем каталоге.
APPEND [[диск:]маршрут[;...]]            [/X[:ON :OFF]][/PATH:ON /PATH:OFF] [/E]
Не пользуйтесь этой командой при выполнении Windows. Для вывода списка каталогов наберите команду APPEND без параметров. Для отмены присоединенных каталогов пользуйтесь командой APPEND ;.

Команда APPEND
Команда XCOPY

Операционная система Microsoft Windows 3.1 для программиста -том 1

Операционная система Microsoft Windows по своим возможностям не только намного превосходит MS-DOS, но и даже просто не сравнима с MS-DOS. Удобный, хорошо продуманный, а главное, стандартизованный для всех программ Windows пользовательский интерфейс интуитивно ясен и удобен для изучения. Поэтому после появления Microsoft Windows версии 3.0 всего за несколько лет произошла настоящая революция прикладного программного обеспечения персональных компьютеров - практически все основные программные продукты были переделаны для работы в среде Windows. При этом они приобрели свойства и возможности, недостижимые ранее из-за ограничений, накладываемых операционной системой MS-DOS.
Но к сожалению, программирование для Windows - гораздо более трудоемкое и кропотливое занятие, чем программирование для MS-DOS. Это связано, в первую очередь, с обилием новых возможностей. Для создания пользовательского интерфейса и выполнения других задач вам предлагается набор из более чем тысячи функций! Если же вы собираетесь работать с мультимедиа или другими дополнительными подсистемами Windows, набор функций еще больше расширяется.

Основы Microsoft Windows
На помощь программисту приходит объектно-ориентированный подход и наборы классов, поставляемых в комплекте со средствами разработки программ или отдельно. Есть автоматизированные генераторы программ, почти или полностью исключающие программирование на каком бы то ни было процедурном языке. При этом сложность задачи сокращается в десятки и сотни раз, правда, иногда ценой потери эффективности и производительности программы.

Компоненты и подсистемы Windows
Файловая система
Управление программами
Управление оперативной памятью
Управление оперативной памятью - 2
Управление оперативной памятью - 3
Драйверы устройств ввода/вывода
Библиотеки динамической загрузки DLL
Библиотеки динамической загрузки DLL - 2
Интерфейс графических устройств GDI

Приложение OEM2ANSI
В качестве примера приведем исходный текст приложения OEM2ANSI, выполняющего перекодировку файла из набора OEM в набор ANSI. На примере этого приложения вы узнаете о стандартных средствах Windows, позволяющих выполнять поиск файлов в каталогах и сохранение файлов под заданным именем и в заданном каталоге. Кроме этого вы узнаете о существовании в программном интерфейсе Windows специальных функций, предназначенных для работы с файлами.

Приложение OEM2ANSI
Приложение OEM2ANSI - 2
Приложение OEM2ANSI - 3
Приложение OEM2ANSI - 4
Приложение OEM2ANSI - 5
Приложение OEM2ANSI - 6
Приложение OEM2ANSI - 7
Приложение OEM2ANSI - 8
Текстовый курсор
Текстовый курсор - 2

Операционная система Microsoft Windows 3.1 для программиста -том 2

Во второй части мы продолжим изучение программного интерфейса Windows. Будут рассмотрены ресурсы, стандартные (предопределенные) классы окон, а также диалоговые панели.
Первая глава посвящена ресурсам. Ресурсы - это данные, которые добавляются в файл загрузочного модуля приложения Windows и могут при необходимости загружаться в оперативную память. Расположение данных в ресурсах приложения позволяет достичь более эффективного использования памяти. Программы MS-DOS были вынуждены загружать, например, строки сообщений, в оперативную память или реализовывать собственную логику для их динамической загрузки из файлов. Для приложений Windows существует более элегантный способ, исключающий перегрузку памяти ненужными данными и избавляющий программиста от необходимости динамической загрузки данных из файлов.

Ресурсы
Физически ресурсы находятся внутри exe-файла приложения. Они могут загружаться в оперативную память автоматически при запуске приложения или по запросу приложения (явному или неявному). Такой механизм обеспечивает экономное использование оперативной памяти, так как все редко используемые данные можно хранить на диске и загружать в память только при необходимости.

Включение ресурсов
Таблица текстовых строк
Создание таблицы
Загрузка строки из таблицы
Приложение STRING
Файл string\string.cpp
Файл string\string.hpp
Файл string\string.rc
Файл string\string.def
Редактирование таблицы строк

Приложение EDIT
После описания всех стилей и сообщений текстового редактора у вас могло сложиться впечатление, что создание текстового редактора - очень сложная задача. Однако вам редко нужны все возможности органа управления класса "edit". Обычно для приложения требуется несложный однострочный или многострочный редактор, позволяющий вводить отдельные строки текста.

Список класса LISTBOX
Создание списка
Стили списка
Стили списка - 2
Коды извещения
Сообщения для списка
LB_ADDSTRING
LB_DELETESTRING
LB_DIR
LB_FINDSTRING

Приложение DLGCOMBO
Следующее приложение называется DLGCOMBO. Оно создает диалоговую панель, содержащую список "combobox", две кнопки ("OK" и "Cancel") и пиктограмму ( 3.5). С его помощью мы продемонстрируем использование функций, предназначенных для работы с органами управления, расположенными в диалоговой панели

Файл dlgcombo\dlgcombo.cpp
Файл dlgcombo\dlgcombo.cpp - 2
Файл dlgcombo\dlgcombo.cpp - 3
Файл dlgcombo\dlgcombo.cpp - 4
Файл dlgcombo\dlgcombo.hpp
Файл dlgcombo\dlgcombo.rc
Файл dlgcombo\appicon.ico
Файл dlgcombo\dlgcombo.def
Приложение DLGTAB
Файл dlgtab\dlgtab.cpp