Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Windows API






Пакетні файли

Пакетный файл (англ. batch file, в просторечии - пакетник, батник, батничек) - текстовый файл в MS-DOS, OS/2 или Windows, содержащий последовательность команд, предназначенных для исполнения командным интерпретатором. После запуска пакетного файла, программа - интерпретатор (как правило COMMAND.COM или CMD.EXE) читает его строка за строкой и последовательно исполняет команды. Пакетный файл - аналог shell script в Unix-подобных операционных системах. Пакетные файлы полезны для автоматического запуска приложений. Основная область применения - автоматизация наиболее рутинных операций, что регулярно приходится совершать пользователю компьютера. Примерами таких операций могут служить - обработка текстовых файлов; копирование, перемещение, переименование, удаление файлов; работа с папками; архивация; создание резервных копий баз данных и т.п.

@rem Это пример простого комментария @rem echo off отключает режим отображения команд на экране. @echo off @rem echo выводит указанную надпись на экран. echo Hello world! @rem pause останавливает выполнение файла и ждет нажатия любой клавиши. pause @rem это пример вызова команды cd @rem с помощью echo. можно вставить пустую строку echo. @rem а это пример вывода переменной окружения echo %processor_identifier% pause  

Для виконання даної лабораторної роаботи вам знадоблятся наступні команди та змінні оточення:

Команда чи змінна оточення Характеристика
Ver Команда, що виводить назву та версію операційної системи
Hostname Команда, виводом якої є ім'я компьютера
systeminfo Команда, що виводить всю інформацію про систему, у тому числі домен, до якого входить комп’ютер та контроллер домена(“сервер входа в сеть”)
%systemroot%, %windir% Змінні оточення, які містять інформацію про папку, де встановлена ОС
%username% Змінна оточення, в якій знаходится ім'я користувача

Windows API

API (application programming interface — интерфейс прикладного программирования) ‑ набор подпрограмм, используемых приложениями для запросов и выполнения служб нижнего уровня операционной системой компьютера. Эти подпрограммы обычно выполняют задачи обслуживания, такие как управление файлами и отображение данных.

ЧастьAPI функций реализуется с помощью программных прерываний.

Программные прерывания – это один из способов перехода на подпрограмму с помощью специальной инструкции процессора, такой как INT в процессорах Intel Pentium, trap в процессорах Motorola, syscall в процессорах MIPS или Ticc в процессорах SPARK.При выполнении команды программного прерывания процессор отрабатывает ту же последовательность действий, что и при возникновении внешнего или внутреннего прерывания, но только происходит это в предсказуемой точке программы – там, где программист поместил данную команду.

Практически все современные процессоры имеют в системе команд инструкции программных прерываний. Их использование часто приводит к более компактному коду программ по сравнению с использованием стандартных команд выполнения процедур. Это объясняется тем, что разработчики процессора обычно резервируют для обработки прерываний небольшое число возможных подпрограмм, так что длина операнда в команде программного прерывания, который указывает на нужную подпрограмму, меньше, чем в команде перехода на подпрограмму. Другой причиной применения программных прерываний вместо обычных инструкций вызова подпрограмм является возможность смены пользовательского режима на привилегированный одновременно с вызовом процедуры – это свойство программных прерываний поддерживается большинством процессоров.

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

Системный вызов позволяет приложению обратиться к операционной системе с просьбой выполнить то или иное действие, оформленное как процедура кодового сегмента ОС.

Реализация системных вызовов должна удовлетворить следующим требованиям:

· Обеспечивать переключение в привилегированный режим;

· Обладать высокой скоростью вызова процедур ОС;

· Обеспечивать по возможности единообразное обращение к системным вызовам для всех аппаратных платформ, на которых работает ОС;

· Допускать легкое расширение набора системных вызовов;

· Обеспечивать контроль со стороны ОС за корректным использованием системных вызовов.

Первое требование для большинства аппаратных платформ может быть выполнено только с помощью механизма программных прерываний.

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

В большинстве ОС системные вызовы обслуживаются по централизованной схеме, основанного на существовании диспетчера системных вызовов. При любом системном вызове приложение выполняет программное прерывание с определенным и единственным номером вектора. Например, ОС Linux использует для системных вызовов команду INT 80h, а ОС Windows NT - INT 2Eh. Перед выполнением программного прерывания приложение тем или иным способом передает операционной системе номер системного вызова, который является индексом в таблице адреса процедур ОС, реализующих системные вызовы. Способ передачи зависит от реализации, например номер можно поместить в определенный регистр общего назначения процессора или передать через стек. Также некоторым способом передаются аргументы системного вызова, они могут как помещаться в регистры общего назначения, так и передаваться через стек или массив, находящийся в оперативной памяти. Массив удобен при большом объеме данных, передаваемых в качестве аргументов, при этом в регистре общего назначения указывается адрес этого массива.

Диспетчер системных вызовов представляет собой простую программу, которая сохраняет содержимое в системном стеке, поскольку в результате программного прерывания процессор переходит в привилегированный режим.

#include < windows.h> #include < tchar.h> #include < stdio.h>   #define INFO_BUFFER_SIZE 32767   void main() { TCHAR infoBuf[INFO_BUFFER_SIZE]; DWORD bufCharCount = INFO_BUFFER_SIZE;   // Get and display the system directory. GetSystemDirectory(infoBuf, INFO_BUFFER_SIZE); printf(" \nSystem Directory: %s", infoBuf);   // Get and display the Windows directory. GetWindowsDirectory(infoBuf, INFO_BUFFER_SIZE); printf(" \nWindows Directory: %s", infoBuf); printf(" \n"); }

 

Команда чи змінна оточення Характеристика
   
GetComputerName() Функція, виводом якої є ім'я компьютера
   
GetWindowsDirectory() Функція, яка містить інформацію про папку, де встановлена ОС
GetUserName() Функція, в якій знаходится ім'я користувача

Питання для самоконтролю:

1. Що таке пакетний файл? Навіщо потрібні пакетні файли?

2. Що робить команда «@rem»?

3. Що зміниться, якщо з пакетного файлу прибрати команду «@echo off»?

4. Чим відрізняється команда «echo Hi» від «@echo Hi»?

5. Що таке змінні оточення?

6. Що таке API функції? Яке призначення мають API функції?

7. Чому API функції реалізуються за допомогою програмного переривання?

8. Призначення аргументів функції GetComputerName()?

 

Лабораторна робота №2






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.