Справочник по базовым функциям API Windows NT/2000
Гэри Неббет
В этой книге базовые функции API описаны в том же стиле, что и в
документации комплекта разработки драйверов устройств DDK. Рассматриваемые
конструкции были извлечены из Windows NT 4.0 Service Pack 3 и последней бета
версии Windows 2000 для процессоров Intel.
Несмотря на стилистическое сходство, эта книга существенно отличается от
документации DDK. Информация для нее была получена в результате исследования
поведения самой Windows NT. В книге содержится полное описание базовых
функций API, которого вполне достаточно для разработки утилит на уровне
"resource kit", а также другого "нестандартного" программного обеспечения,
реализующего возможности, недоступные обычным приложениям.
Поскольку предполагается, что читатель знаком с интерфейсом Win32 API, C++ и
стандартными библиотеками C++, указание на полную эквивалентность между
базовой системной службой и функцией Win32 зачастую является единственным
объяснением приведенного в книге материала.
Книга разделена на 17 глав и четыре приложения. В каждой главе
рассматривается группа взаимосвязанных системных служб. В приложениях
представлен дополнительный материал, имеющий особое значение для тех, кто
создает приложения, выполняющиеся в режиме ядра.
Введение
Базовый интерфейс прикладных программ Windows NT - это набор системных служб, поддерживаемых операционной системой Windows NT как для программ, работающих в пользовательском режиме, так и в режиме ядра. Функции базовых API эквивалентны системным вызовам UNIX или системным службам VMS.
В документации по Windows NT базовые API описаны явно недостаточно, поэтому не существует даже общепринятого соглашения, что именно под ними подразумевать. "Базовые API" (native API) и "базовые системные службы" (native system services) являются вполне эквивалентными понятиями. Термин "базовые" (native) служит для того, чтобы отличить API от API Win32, который является интерфейсом операционной системы для взаимодействия с большинством приложений MS Windows.
Считается, что Microsoft отказывается публиковать полную информацию о базовых API потому, что они хотят сохранить за собой свободу изменять в новых версиях интерфейс операционной системы и не быть связанными обязательством гарантировать их совместимость с прежними версиями. Полное документирование интерфейса могло бы стать настоящим тормозом, ведь в этом случае пришлось бы обеспечивать работоспособность и тех функциональных возможностей, которые компания считает явно устаревшими. И в самом деле, вероятно для демонстрации того, что этот интерфейс не должен использоваться рабочими приложениями, в Windows 2000 удалены некоторые функции базовых API, существовавшие в Windows NT 4.0, а отдельные структуры данных были изменены таким образом, чтобы они стали полностью не совместимы с программами, написанными под Windows NT 4.0.
В этой книге базовые API описаны в том же стиле, как и в документации по базовым API комплекта разработки драйверов устройств (DDK - Device Driver Kit). Несмотря на то, что названия параметров базовых системных служб и элементов структур были описаны "в стиле" официального представления API, совпадение их имен с фактическими названиями не гарантируется. Рассматриваемые конструкции были извлечены из Windows NT 4.0 Service Pack 3 и последней бета версии Windows 2000 (Release Candidate 2) для процессоров Intel. Некоторые из функций базовых API на платформе Intel не реализованы (например, поддержка для памяти очень большой емкости (VLM - Very Large Memory), а, следовательно, в этой книге и не описаны. Другие функции (например, поддержка виртуальных машин DOS (VDM - Virtual DOS Machines)) описаны лишь частично. Службы графического интерфейса системы реализованы в win32k.sys и в данной книге
не рассматриваются.
Несмотря на стилистическое сходство, эта книга существенно отличается от документации DDK. В основном тем, что информация для данной книги была получена в результате исследования поведения самой Windows NT, а не из ее исходного кода или документации группы разработчиков.
Несмотря на то, что содержащаяся здесь информация основана на скрупулезном анализе, нет никакой гарантии полного отсутствия незначительных ошибок в тексте самой книги. Эти ошибки никоим образом не уменьшают ценности данной книги, которая содержит полное описание базовых API, вполне достаточное для разработки утилит на уровне "resource kit" (то есть инструментальных средств для анализа и отладки), а также и другого "нестандартного" программного обеспечения, реализующего возможности, недоступные обычным приложениям.
Данная книга не рассматривает темы, содержащиеся в документации DDK, а также не повторяет того, что изложено во втором издании книги Дэвида Соломона (David Solomon) Inside Windows NT (Внутренний мир Windows NT). Кроме того, здесь предполагается, что читатель знаком с Win32 API, C++ и стандартными библиотеками C++.
Это введение предназначено для того, чтобы обсудить некоторые общие вопросы, касающиеся базовых API, прежде чем приступить к их подробному рассмотрению.
Структура книги
Книга разделена на 17 глав и четыре приложения. В каждой главе рассматривается группа взаимосвязанных (иногда логически слабо) системных служб, а последняя, 17-ая глава, "Разное", посвящена функциям, не вошедшим в предыдущие главы. Описание каждой системной службы составлено так, чтобы она была понятна сама по себе, и благодаря этому в содержании или предметном указателе можно было бы без труда найти как саму функцию, так и всю связанную с ней информацию.
Порядок следования глав определен исходя из попытки представить предварительное описание системных функций до их применения на конкретных примерах. Например, глава, в которой описываются процессы, следует после глав, посвященных виртуальной памяти и объектам раздела, поскольку системные службы виртуальной памяти и объектов раздела необходимы в примере, демонстрирующем создание процесса.
В приложениях представлен дополнительный материал, который, в основном, не зависит от конкретных системных служб (за исключением, пожалуй, приложения В, "Исключения и отладка", в котором приведены основные сведения о системных службах, устанавливающих и обрабатывающих исключения). Особое значение для тех, кто программирует в режиме ядра, имеет приложение А, "Вызов системных служб из режима ядра", в котором рассматриваются методы создания полноценных системных служб, доступных для программ, работающих в режиме ядра.
Об авторе
Гэри Неббет (Gary Nebbett) начал заниматься операционными системами, когда был включен в группу разработчиков MultiMIRTOS (встроенной операционной системы реального времени для процессора Intel 8086) компании Standard Telecommunication Laboratories сразу же по окончании Лондонского университета в 1982 году. Как только у Гэри пробудился интерес к операционным системам, он испытал свои силы в разработке инструментальных средств отслеживания системных вызовов, восстановления удаленных файлов и перехвата сетевого трафика для тех операционных систем, с которыми ему приходилось работать (в частности, VMS, UNIX и NT). Гэри живет в швейцарском городе Базеле. В свободное время он увлекается игрой в сквош, лыжным кроссом, прогулками в Альпах. Гэри катается на мотоцикле в Черном лесу, а иногда и разгадывает сложные кроссворды. Известно, что он редко отказывается от пары стаканчиков портвейна (особенно
в сопровождении кусочка сыра "Стилтон").
О научных рецензентах
Майкл В. Барри (Michael W. Barry) обладает восемнадцатилетним опытом в области программирования. Получив степень B.S.E.E. в университете города Остин штата Техас, Майкл приступил к работе в корпорации Datapoint Corporation, где он занимался сетями и разработкой настольных систем видеоконференц-связи. Майкл - обладатель 14 патентов - начиная от организации видеотелеконференций и заканчивая обработкой цветного изображения для кластерной печати. Созданием программ для ядра Windows NT и пользовательского режима Майкл занимается начиная с бета-версии NT 3.1 и в настоящий момент является признанным экспертом по операционной системе Windows NT. Майкл - автор и научный рецензент ряда научно-технических изданий. В настоящее время Майкл старший - вице-президент Development and Engineering at T/R systems, Inc. (изобретатели кластерной печати), где он и его группа являются пионерами разработки систем
для кластерной печати на базе Windows NT.
Майкл живет в Атланте (штат Джорджия)ы со своей прекрасной женой и двумя замечательными дочерьми. В свое свободное время он наслаждается подводным плаванием, теннисом, футболом, водными лыжами и каноэ.
Томас Л. Новацкий (Thomas L. Nowatzki) обладает более чем 25-летним опытом профессиональной разработки программного обеспечения для ряда операционных платформ и аппаратных средств. Последние 5 лет он занимался анализом архитектуры Intel, производительностью Windows NT и ее внутренней организацией. Формально его образование заключается в обладании степени магистра наук по электронной технике университета Северной Дакоты. Он является соавтором двух патентов США, а также обладателем полудюжины авторских свидетельств, защищающих его права в различных областях компьютерных технологий.
Комментарии и предложения
Задачей нашего издательства является создание серьезных технических книг самого высокого качества и глубокого содержания. Все наши книги сделаны с особым вниманием и тщательностью, подверглись строгой проверке, включая индивидуальную экспертизу представителями профессионального технического сообщества.
Отзывы читателей являются естественным продолжением этого процесса. Если у Вас есть какие-либо замечания и предложения, которые помогут нам улучшить качество данной книги или изменить ее так, чтобы она больше соответствовала Вашим потребностям, свяжитесь с нами по адресу networktech@mcp.com. Пожалуйста, укажите в Вашем сообщении название книги и ее ISBN.