RU2649293C1 - Система и способ передачи перехваченных запросов от драйвера к драйверу в процессе инициализации драйверов - Google Patents

Система и способ передачи перехваченных запросов от драйвера к драйверу в процессе инициализации драйверов Download PDF

Info

Publication number
RU2649293C1
RU2649293C1 RU2017115046A RU2017115046A RU2649293C1 RU 2649293 C1 RU2649293 C1 RU 2649293C1 RU 2017115046 A RU2017115046 A RU 2017115046A RU 2017115046 A RU2017115046 A RU 2017115046A RU 2649293 C1 RU2649293 C1 RU 2649293C1
Authority
RU
Russia
Prior art keywords
driver
drivers
created
operating system
initialization
Prior art date
Application number
RU2017115046A
Other languages
English (en)
Inventor
Константин Юрьевич Манурин
Original Assignee
Акционерное общество "Лаборатория Касперского"
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Акционерное общество "Лаборатория Касперского" filed Critical Акционерное общество "Лаборатория Касперского"
Priority to RU2017115046A priority Critical patent/RU2649293C1/ru
Application granted granted Critical
Publication of RU2649293C1 publication Critical patent/RU2649293C1/ru

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • G06F9/4411Configuring for operating with peripheral devices; Loading of device drivers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Stored Programmes (AREA)

Abstract

Изобретение относится к области передачи перехваченных запросов от драйвера к драйверу в процессе инициализации драйверов. Техническим результатом является обеспечение надежной гарантированной передачи запроса от драйвера А на доступ к данным, предоставляемым драйвером Б, за счет обеспечения передачи упомянутого запроса драйверу Б не ранее момента завершения инициализации драйвера Б, и повышение производительности передачи запроса от драйвера А на доступ к данным, предоставляемым драйвером Б. Раскрыт реализуемый компьютером способ передачи перехваченных запросов от драйвера к драйверу в процессе инициализации упомянутых драйверов, при этом ни один из упомянутых драйверов на момент перехвата запросов еще не был проинициализирован, содержащий этапы, на которых: а) перехватывают запросы драйвера А1 и драйвера А2, при этом запрос от драйвера А1 перехватывают раньше запроса от драйвера А2, на доступ к данным, предоставляемым драйвером Б, который на момент перехвата запроса еще не инициализирован, при этом драйверам А1 и А2 для инициализации необходимы данные, предоставляемые проинициализированным драйвером Б; б) формируют связный список, элементами которого являются объекты синхронизации, каждый из которых представляет собой данные, содержащие: объект ядра операционной системы, который приостанавливает инициализацию создавшего объект синхронизации драйвера до тех пор, пока драйвер Б не выполнит инициализацию, и указатель, содержащий в случае, если связный список содержит более одного элемента, адрес объекта синхронизации, добавленного в связный список ранее; для чего: создают объект синхронизации в адресном пространстве драйвера А1, размещают в области глобальных данных драйвера Б адрес, указывающий на созданный объект синхронизации в драйвере А1; в) дополняют упомянутый связный список, для чего: создают объект синхронизации в адресном пространстве драйвера А2, устанавливают адрес, размещенный в области глобальных данных Б и указывающий на объект синхронизации, созданный ранее, как указатель в упомянутый объект синхронизации, созданный драйвером А2, размещают в области глобальных данных драйвера Б адрес, указывающий на созданный объект синхронизации в драйвере А2; г) после инициализации драйвера Б объект ядра операционной системы, содержащийся в каждом созданном объекте синхронизации из связного списка, средствами операционной системы разрешает продолжить инициализацию драйвера, создавшего соответствующий объект синхронизации; д) передают перехваченные на этапе а) запросы драйверу Б. 7 з.п. ф-лы, 3 ил.

Description

Область техники
Изобретение относится к исполнению программного кода, а более конкретно к системам и способам передачи перехваченных запросов от драйвера к драйверу в процессе инициализации драйверов.
Уровень техники
На текущий момент подавляющее большинство операционных систем на вычислительных устройствах (серверов, персональных компьютеров, ноутбуков, мобильных устройств и т.п.) работает в многозадачном режиме - режиме, в котором процессы, порожденные в операционных системах, работающих на упомянутых вычислительных устройствах, могут в свою очередь состоять из нескольких потоков, которые также могут выполняться параллельно (многопоточность).
Основная сложность реализации работы в многозадачном режиме заключается в обеспечении синхронизации процессов - приведении двух или нескольких процессов к такому их исполнению, при котором определенные стадии упомянутых процессов совершаются в заранее заданном порядке, либо одновременно.
Обеспечение такого выполнения процессов, при котором определенные стадии упомянутых процессов совершаются в определенном порядке, либо одновременно.
Синхронизация необходима в случаях, когда параллельно выполняющимся процессам необходимо взаимодействовать друг с другом.
Для организации синхронизации процессов применяются методы межпроцессного взаимодействия (англ. inter-process communication, IPC), такие как сигналы (англ. signal), семафоры (англ. semaphore), каналы (англ. pipe), и т.д. Каждый метод межпроцессного взаимодействия обладает своими плюсами и минусами. Например, метод совместного использования памяти (англ. shared memory) предъявляет низкие требования к используемым вычислительным ресурсам, но в случае, если при реализации синхронизации процессов были допущены ошибки, они скорее всего приведут к некорректной работе (зависаниям, падению производительности, неверным результатам и т.д.) сразу всех процессов, использующих общую память, а мьютексы (англ. mutex) в свою очередь просты в использовании, ошибки работы одного процесса практически не влияют на работу других процессов, но требовательны к вычислительным ресурсам. Кроме того, часть методов межпроцессного взаимодействия способна работать только в режиме пользователя, часть - более универсальна и способна работать в режиме ядра.
Зачастую требуются более сложные, чем описанные выше, методы синхронизации. В качестве примера, когда требуются методы синхронизации, стандартно не предоставляемые операционной системой, можно привести инициализацию драйверов – процесса, во время которого происходит выделение оперативной памяти, создание данных, используемых драйверами впоследствии для своей работы и т.д. В случае, когда для успешной инициализации одного драйвера требуются данные, предоставляемые другим драйвером (например, драйвер антивируса, анализируемый поведение файла, и драйвер антивируса, перехватываемый выполнение файла), необходима синхронизация работы упомянутых драйверов (т.е. необходима синхронизация инициализации драйверов) для того, чтобы избежать ситуации, когда запрашиваемые данные получить невозможно, поскольку соответствующий драйвер еще не был запущен или проинициализирован, в противном случае работоспособность как драйверов, участвующих в обмене данными, так и операционной системы в целом может быть нарушена. Основная сложность заключается в том, что работа драйвера в режиме ядра ограничена как со стороны программного обеспечения, так и со стороны аппаратной части: от невозможности доступа к некоторым функциям API операционной системы до обработки данных и взаимодействия с пользователями.
Например, в патентной публикации US 8434098 B2 описана технология работы драйвера, содержащего в себе элементы, работающие в режиме ядра, и элементы, работающие в пользовательском режиме. Драйвер загружается в пользовательском режиме и связывается с другими драйверами (которые также загружаются в пользовательском режиме) с помощью отложенного вызова процедур (англ. Deferred procedure call, DPC). Кроме того, упомянутый драйвер отслеживает поведение других драйверов для корректного выполнения своего функционала и предотвращения коллизий с последними. Хотя описанная технология хорошо справляется с задачами синхронизации обмена данными между драйверами, уже работающими в операционной системе и имеющими модули, работающие в режиме пользователя, она не справляется с синхронизацией драйверов в случае работы в режиме ядра, не может отслеживать очередность вызова.
Хотя описанные выше способы работы хорошо справляются с задачами синхронизации приложений и моделей драйверов, работающих в режиме пользователя, они зачастую не помогают решать проблемы синхронизации инициализации драйверов, работающих в режиме ядра.
Настоящее изобретение позволяет решать задачу синхронизации инициализации драйверов.
Раскрытие изобретения
Изобретение предназначено для передачи перехваченных запросов от драйвера к драйверу в процессе инициализации драйверов.
Технический результат настоящего изобретения заключается в гарантированной передаче запроса от драйвера А на доступ к данным, предоставляемым драйвером Б за счет обеспечения передачи упомянутого запроса драйверу Б не ранее момента завершения инициализации драйвера Б.
Еще один технический результат настоящего изобретения заключается в надежности передачи запроса от драйвера А на доступ к данным, предоставляемым драйвером Б за счет обеспечения передачи упомянутого запроса драйверу Б не ранее момента завершения инициализации драйвера Б.
Еще один технический результат настоящего изобретения заключается в повышении производительности передачи запроса от драйвера А на доступ к данным, предоставляемым драйвером Б.
Данные результаты достигаются с помощью использования реализуемого компьютером способа передачи перехваченных запросов от драйвера к драйверу в процессе инициализации упомянутых драйверов, при этом ни один из упомянутых драйверов на момент перехвата запросов еще не был проинициализирован, содержащий этапы, на которых: перехватывают запросы драйвера А1 и драйвера А2, при этом запрос от драйвера А1 перехватывают раньше запроса от драйвера А2, на доступ к данным, предоставляемым драйвером Б, который на момент перехвата запроса еще не инициализирован, при этом драйверам А1 и А2 для инициализации необходимы данные, предоставляемые проинициализированным драйвером Б; формируют связный список, элементами которого являются объекты синхронизации, каждый из которых представляет собой данные, содержащие: объект ядра операционной системы, который приостанавливает инициализацию создавшего объект синхронизации драйвера до тех пор, пока драйвер Б не выполнит инициализацию, и указатель, содержащий в случае, если связный список содержит более одного элемента, адрес объекта синхронизации, добавленного в связный список ранее; для чего: создают объект синхронизации в адресном пространстве драйвера А1, размещают в области глобальных данных драйвера Б адрес, указывающий на созданный объект синхронизации в драйвере А1; дополняют упомянутый связный список, для чего: создают объект синхронизации в адресном пространстве драйвера А2, устанавливают адрес, размещенный в области глобальных данных Б и указывающий на объект синхронизации, созданный ранее, как указатель в упомянутый объект синхронизации, созданный драйвером А2, размещают в области глобальных данных драйвера Б адрес, указывающий на созданный объект синхронизации в драйвере А2; после инициализации драйвера Б объект ядра операционной системы, содержащийся в каждом созданном объекте синхронизации из связного списка, средствами операционной системы разрешает продолжить инициализацию драйвера, создавшего соответствующий объект синхронизации; передают перехваченные на предыдущем этапе запросы драйверу Б.
В другом частном случае реализации способа в качестве данных, предоставляемых драйвером Б, выступают по меньшей мере: API функции; исполняемый код; входные параметры для драйверов А1 и А2.
Еще в одном частном случае реализации способа определение значения в области глобальных данных драйвера Б производится по заранее заданному адресу области глобальных данных.
В другом частном случае реализации способа в качестве объекта ядра операционной системы выступает объект KEVENT.
Еще в одном частном случае реализации способа объект ядра операционной системы находится в одном из двух состояний, определяемых тем, в каком этапе инициализации находится драйвер Б, при этом в одном состоянии объект ядра запрещает создавшему указанный объект ядра драйверам А1 и А2 продолжать инициализацию, а в другом состоянии разрешает драйверам А1 и А2 продолжать инициализацию.
В другом частном случае реализации способа после инициализации драйвера Б изменяют состояние каждого объекта ядра операционной системы, содержащихся в каждом объекте синхронизации, созданном соответствующими драйверами А1 и А2, причем изменение состояния производится таким образом, что каждый драйвер А1 и А2 продолжит инициализацию, приостановленную после создания объекта ядра операционной системы.
Еще в одном частном случае реализации способа в качестве области памяти драйверов А1 и А2, в которой создают объект синхронизации, выступает по меньшей мере: стек оперативной памяти драйверов А1 и А2; область глобальных данных драйверов А1 и А2.
В другом частном случае реализации способа заранее установленное значение в объекте синхронизации указывает на то, что данный объект синхронизации является последним созданным объектом синхронизации.
Краткое описание чертежей
Фиг. 1 иллюстрирует систему передачи перехваченных запросов от драйвера к драйверу в процессе инициализации драйверов.
Фиг. 2 иллюстрирует способ передачи перехваченных запросов от драйвера к драйверу в процессе инициализации драйверов.
Фиг. 3 представляет пример компьютерной системы общего назначения, персональный компьютер или сервер.
Хотя изобретение может иметь различные модификации и альтернативные формы, характерные признаки, показанные в качестве примера на чертежах, будут описаны подробно. Следует понимать, однако, что цель описания заключается не в ограничении изобретения конкретным его воплощением. Наоборот, целью описания является охват всех изменений, модификаций, входящих в рамки данного изобретения, как это определено в приложенной формуле.
Описание вариантов осуществления изобретения
Объекты и признаки настоящего изобретения, способы для достижения этих объектов и признаков станут очевидными посредством отсылки к примерным вариантам осуществления. Однако настоящее изобретение не ограничивается примерными вариантами осуществления, раскрытыми ниже, оно может воплощаться в различных видах. Сущность, приведенная в описании, является ничем иным, как конкретными деталями, необходимыми для помощи специалисту в области техники в исчерпывающем понимании изобретения, и настоящее изобретение определяется в объеме приложенной формулы.
Введем ряд определений и понятий, которые будут использованы при описании вариантов осуществления изобретения.
Инициализация - задание начальных значений программных переменных (адресов, счетчиков, переключателей, указателей и т.п.) перед выполнением программы (например, приложения, драйвера, ядра операционной системы) с целью обеспечения работоспособности упомянутой программы.
Инициализация драйвера – процесс, во время которого происходит инициализация, приводящая к выделению оперативной памяти, созданию данных, используемых драйвером впоследствии для своей работы. Успешной инициализация драйвера является в случае, когда после ее завершения проинициализированный драйвер способен корректно выполнять весь предоставляемый им функционал.
Синхронизация процессов - приведение двух или нескольких процессов к такому их исполнению, при котором определенные стадии упомянутых процессов совершаются в заранее заданном порядке, либо одновременно.
Синхронизация инициализации драйверов - приведение двух или нескольких драйверов к такому их исполнению, при котором в ситуации, когда для успешной инициализации одного драйвера требуются данные, предоставляемые другим драйвером, не допускается ситуация, когда запрашиваемые первым драйвером данные получить невозможно, поскольку второй драйвер еще не был запущен (т.е. не был загружен в память и драйверу не было передано управление операционной системой) или проинициализирован (в противном случае работоспособность как драйверов, участвующих в обмене данными, так и операционной системы в целом может быть нарушена).
Фиг. 1 иллюстрирует систему передачи перехваченных запросов от драйвера к драйверу в процессе инициализации драйверов.
Структурная схема системы передачи перехваченных запросов от драйвера к драйверу в процессе инициализации драйверов содержит драйверы А 110, драйвер Б 120, средство перехвата 130, средство контроля 140, средство инициализации 150 и средство формирования связных списков 160.
Драйверы А 110 представляют собой драйверы, которым для инициализации необходимы данные, предоставляемые другим драйвером (драйвером Б 120), при этом для получения упомянутых данных драйвер А 110 формирует и передает запрос драйверу Б 120 на предоставление необходимых данных.
В одном из вариантов реализации системы запрос представляет собой команду, включающую в себя по меньшей мере:
Figure 00000001
тип запрашиваемых у драйвера Б 120 данных;
Figure 00000002
объем запрашиваемых данных;
Figure 00000003
входные параметры используемых в подготовке драйвером Б 120 данных;
Figure 00000004
адреса оперативной памяти, куда требуется передать запрашиваемые данные.
В одном из вариантов реализации системы в качестве данных, предоставляемых драйвером Б 120 драйверу А 110, выступают по меньшей мере:
Figure 00000005
интерфейс API-функций, содержащий адреса API-функций, типы входных параметров для упомянутых API функций;
Figure 00000006
исполняемый код;
Figure 00000007
входные параметры для драйверов А 110.
Например, драйвер А 110 производит проверку перехваченного файла на вредоносность, при этом одним из элементов проверки является проверка файла на доверенность, которую выполняет драйвер Б 120. Драйвер Б 120 предоставляет драйверу А 110 для упомянутой проверки специализированный API. Использование соответствующего API является использованием функционала драйвера Б 120 драйвером А 110.
В одном из вариантов реализации системы один из драйверов А 110 в процессе инициализации может создавать несколько потоков, каждый из которых посылает сформированный запрос к драйверу Б 120, обращается за данными к драйверу Б 120, а для успешной инициализации драйвера А 110 необходима корректная обработка данных, полученных от драйвера Б 120 каждым из упомянутых потоков.
Драйвер Б 120 представляет собой драйвер, который после своей инициализации предоставляет по запросу данные драйверам А 110.
В одном из вариантов реализации системы драйвер Б 120 может быть загружен в оперативную память и выполняться к моменту получения запроса от драйверов А 110 на предоставления данных, но все еще не может корректно обрабатывать запрос, получаемые от драйвера А 110 (например, для обработки полученного от А 110 запроса на шифрование данных, переданных в упомянутом запросе, драйверу Б 120 необходимо предварительно загрузить ключи шифрования, если упомянутые ключи на момент получения запроса от драйвера А 110 загружены еще не были, то шифрование данных осуществить невозможно). В таком состоянии драйвер Б 120 считается непроинициализированным.
Средство перехвата 130 предназначено для перехвата запросов по меньшей мере двух драйверов А 110 (драйвера А1 110.1 и драйвера А2 110.2) на предоставление данных драйвером Б 120 (т.е. на доступ драйверов А 110 к данным, предоставляемым драйвером Б 120), который на момент перехвата запросов еще не инициализирован, при этом драйверам А1 110.1 и А2 110.2 для инициализации необходимы данные, предоставляемые проинициализированным драйвером Б 120.
В одном из вариантов реализации системы средство перехвата 130 может осуществлять перехват запросов от драйверов А 110 с помощью работающего в операционной системе драйвера (например, драйвера, встраиваемого в обработчик вызова WinAPI функций, который при обнаружении вызова функций
Figure 00000008
и т.д. передает перехваченные запросы средству перехвата 130) или средствами самой операционной системы (не отображены на Фиг. 1) (аналогично описанному выше примеру со специализированным драйвером, только в данном случае сам обработчик вызова WinAPI функций при обнаружении вызова функций
Figure 00000008
и т.д. передает обрабатываемые запросы средству перехвата 130).
Средство контроля 140 предназначено для выявления состояния инициализации драйвера Б 120 с помощью определения значения в области глобальных данных драйвера Б 120 (область памяти драйвера Б 120, область видимости которой такова, что данные в упомянутой области памяти драйвера Б 120 доступны всем драйверам, работающие в операционной системе), при этом в качестве состояния инициализации драйвера выступают по меньшей мере:
Figure 00000009
драйвер еще не запущен;
Figure 00000010
драйвер запущен, но инициализацию еще не начал;
Figure 00000011
драйвер запущен, инициализацию начал, но еще не завершил;
Figure 00000012
драйвер запущен и успешно проинициализирован;
при этом в качестве определяемого значения выступает:
Figure 00000013
адрес, который указывает на объект синхронизации, созданный ранее одним из драйверов А 110 (драйвером А1 110.1), при этом объект синхронизации представляет собой совокупность данных, содержащих:
Figure 00000014
объект ядра операционной системы, в зависимости от состояния которого операционная система приостанавливает (до тех пор, пока драйвер Б 120 не завершит инициализацию) или возобновляет (после того как драйвер Б 120 не завершит инициализацию) инициализацию создавшего объект синхронизации драйвера А 110, и
Figure 00000015
указатель на другой объект синхронизации, который равен по меньшей мере одному из значений:
Figure 00000016
заранее установленному значению (например, если указатель не указывает ни на какой объект, то такой указатель называется нулевым, равным address = null = 0x000000, в другом примере любой указатель на объект всегда выравнен по 4, т.е. кратен 4 address = 4 * index, поэтому любое значение указателя, не кратное 4, может использоваться для хранения дополнительной информации, например, состояния объекта: 0x10000000 - указатель на объект, 0x10000001 - означает, что по адресу 0x10000000 существует объект и в текущий момент находится в состоянии #1 и т.д.);
Figure 00000017
адресу, указывающему на другой объект синхронизации, созданный ранее другим драйвером А 110;
Figure 00000018
начальное значение (заранее установленное разработчиками рассматриваемой системы), которое указывает на отсутствие объекта синхронизации (т.е. что ни один драйвер А 110 не создал еще объекта синхронизации, и тем самым указатель на объект синхронизации отсутствует).
Средство инициализации 150 предназначено для инициализации драйвера 120, при этом инициализация драйвера Б 120 включает в себя выполнение, в результате которого драйвер Б 120 получает возможность обрабатывать запросы от драйверов А 110 и предоставлять по упомянутым запросам драйверам А 110 данные.
Средство формирования связных списков 160 предназначено для формирования связного списка, элементами которого являются объекты синхронизации, каждый из которых представляет собой данные, содержащие:
Figure 00000019
объект ядра операционной системы (сам объект ядра операционной системы или указатель на упомянутый объект ядра операционный системы), который приостанавливает инициализацию создавшего объект синхронизации драйвера А 110 до тех пор, пока драйвер Б 120 не выполнит инициализацию, и
Figure 00000020
указатель, содержащий в случае, если связный список содержит более одного элемента, адрес объекта синхронизации, добавленного в связный список ранее;
для чего упомянутое средство 160:
Figure 00000021
создает объект синхронизации и размещает в адресном пространстве драйвера А1 110.1,
Figure 00000022
размещает в области глобальных данных драйвера Б 120 адрес, указывающий на созданный объект синхронизации в драйвере А1 110.1,
а также для дополнения упомянутого связного списка, для чего упомянутое средство 160
Figure 00000023
создает объект синхронизации и размещает в адресном пространстве драйвера А2 110.2,
Figure 00000024
устанавливает адрес, размещенный в области глобальных данных драйвера Б 120 и указывающий на объект синхронизации, созданный ранее, как указатель в упомянутый объект синхронизации, созданный драйвером А2 110.2,
Figure 00000025
размещает в области глобальных данных драйвера Б 120 адрес, указывающий на созданный объект синхронизации в драйвере А2 110.2.
Фиг. 2 иллюстрирует способ передачи перехваченных запросов от драйвера к драйверу в процессе инициализации драйверов.
Структурная схема способа передачи перехваченных запросов от драйвера к драйверу в процессе инициализации драйверов содержит следующие этапы: этап 200, на котором выполняют инициализацию драйвера Б 120, этап 210, на котором перехватывают запросы драйверов А 110 к драйверу Б 120, этап 220, на котором выявляют состояние инициализации драйвера Б 120, этап 230, на котором формируют связные списки, этап 240, на котором средствами операционной системы возобновляют инициализацию драйверов А 110, этапа 250, на котором передают перехваченные запросы от драйверов А 110 драйверу Б 120.
На этапе 200 инициализируют драйвер Б 120, при этом инициализация драйвера Б 120 может не быть завершена к моменту, когда драйверы А 110 передадут свои запросы драйверу Б 120 на доступ к данным, предоставляемым драйвером Б 120.
При этом инициализация заключается в выполнении действий драйвером Б 120, в результате которых драйвер Б 120 получает возможность предоставлять по запросу данные драйверам А 110.
В одном из вариантов реализации способа драйвер Б 120 может быть загружен в оперативную память и выполняться к моменту получения запроса от драйверов А 110 на предоставления данных, но все еще не обладает функционалом для корректной обработки запроса, получаемые от драйвера А 110 (например, для обработки полученного от А 110 запроса на шифрование данных, переданных в упомянутом запросе, драйверу Б 120 необходимо предварительно загрузить ключи шифрования, если упомянутые ключи на момент получения запроса от драйвера А 110 загружены не были, то шифрование данных осуществить невозможно). В таком состоянии драйвер Б 120 считается непроинициализированным, в противном случае драйвер Б 120 считается проинициализированным и получает возможность предоставлять данные по запросу драйвера А 110.
В одном из вариантов реализации способа драйвер Б 120 не только не будет инициализирован, но даже не будет запущен до момента, когда драйверы А 110 передадут запросы драйверу Б 120 на доступ к данным, предоставляемым драйвером Б 120 (т.е. возможна ситуация, когда драйверы А 110 будут запущены раньше драйвера Б 120).
В одном из вариантов реализации способа драйвер Б 120 инициализируется средствами операционной системы (например, с помощью API, предоставляемой операционной системой).
Например, драйвер Б 120 способен шифровать приватным ключом {K} данные, получаемые от драйверов А 110, и передать их обратно драйверам А 110 для последующего использования. Хотя драйвер Б 120 может быть загружен в оперативную память и выполняться к моменту получения данных от драйверов А 110, до тех пор, пока он не получит приватный ключ {K} (например, загрузить с жесткого диска), он не сможет выполнять функционал, запрашиваемый драйверами А 110, таким образом, для драйверов А 110, драйвер Б 120 не будет инициализирован (до тех пор, пока не загрузит приватный ключ {K} в оперативную память).
При этом драйвер Б 120 может предоставлять разные данные по запросам разных драйверов А 110 (выполнять разный функционал). Что в свою очередь означает, что драйвер Б 120 может быть в определенный момент времени инициализирован для предоставления одних данных и не инициализирован для предоставления других данных, что в свою очередь может привести к тому, что один из драйверов А 110 (драйвер А1 110.1) сможет продолжить свою инициализацию, а другой (драйвер А2 110.2) - нет (не смог получить требуемые данные от драйвера Б 120).
Например, драйвер Б 120 способен:
Figure 00000026
шифровать приватным ключом {K} данные, получаемые от драйверов А 110, и передать их обратно драйверам А 110 для последующего использования,
Figure 00000027
проверять на вредоносность данные, получаемые от драйверов А 110, и передавать обратно драйверам А 110 результаты упомянутой проверки.
Драйвер Б 120 может быть загружен в оперативную память и выполняться к моменту получения данных от драйверов А 110 (драйвера А1 110.1, передающего драйверу Б 120 данные для шифрования и драйвера А2 110.2, передающего драйверу Б 120 данные для проверки на вредоносность), кроме того, драйвером Б 120 может уже быть получен приватный ключ {K} для выполнения шифрования данных (например, может быть загружен с жесткого диска), но еще не получены антивирусные базы для проверки данных на вредоносность. В таком состоянии драйвер Б 120 сможет выполнять функционал, запрашиваемый драйверами А1 110.1, и не сможет - запрашиваемый драйвером А2 110.2.
На этапе 210 перехватывают запросы по меньшей мере двух драйверов А 110 (драйвера А1 110.1 и драйвера А2 110.2) на доступ к данным, предоставляемым драйвером Б 120, который на момент перехвата запросов еще не инициализирован, при этом драйверам А1 110.1 и А2 110.2 для инициализации необходимы данные, предоставляемые проинициализированным драйвером Б 120.
Таким образом:
Figure 00000028
драйвера А 110 представляют собой драйвера, которым для инициализации необходимы данные, предоставляемые другим драйвером (драйвером Б 120),
Figure 00000029
драйвер Б 120 представляет собой драйвер, который после своей инициализации предоставляет по запросу данные драйверам А 110.
В одном из вариантов реализации способа в качестве данных, предоставляемых драйвером Б 120, выступают по меньшей мере:
Figure 00000030
интерфейс API-функций, содержащий адреса API-функций, типы входных параметров для упомянутых API функций;
Figure 00000031
исполняемый код;
Figure 00000032
входные параметры для драйверов А 110.
Например, драйвер Б 120 может предоставлять интерфейс, т.е. адрес, по которому один из драйверов А 110 должен передавать данные, формат передаваемых данных и адрес, по которому еще один из драйверов А 110 сможет получать обработанные данные (по аналогии с тем, как работают DLL библиотеки).
Упомянутый пример можно представить в виде псевдокода:
Figure 00000033
В другом случае, драйвер Б 120 может предоставлять данные, которые один из драйверов А 110 будет обрабатывать как исполняемый код (т.е. данные будут содержать наборы команд, понятные операционной системе или процессору, на котором работает один из драйверов А 110), и после получения данных от драйвера Б 120 один из драйверов А 110 сможет передать на упомянутые данные управление.
Упомянутый пример можно представить в виде псевдокода:
Figure 00000034
Еще в одном случае драйвер Б 120 может предоставлять «голые данные» (англ. raw data), которые один из драйверов А 110 будет использовать для дальнейшей обработки.
Упомянутый пример можно представить в виде псевдокода:
Figure 00000035
Figure 00000036
На этапе 220 выявляют состояние инициализации драйвера Б 120 с помощью определения значения в области глобальных данных драйвера Б 120, при этом в качестве состояния инициализации драйвера выступают по меньшей мере:
Figure 00000037
драйвер еще не запущен;
Figure 00000038
драйвер запущен, но инициализацию еще не начал;
Figure 00000039
драйвер запущен, инициализацию начал, но еще не завершил;
Figure 00000040
драйвер запущен и успешно проинициализирован;
при этом в качестве определяемого значения выступает:
Figure 00000041
адрес, который указывает на объект синхронизации, созданный ранее одним из драйверов А 110 (драйвером А1 110.1), при этом объект синхронизации представляет собой совокупность данных, содержащих:
Figure 00000042
объект ядра операционной системы, в зависимости от состояния которого операционная система приостанавливает (до тех пор, пока драйвер Б 120 не завершит инициализацию) или возобновляет (после того как драйвер Б 120 не завершит инициализацию) инициализацию создавшего объект синхронизации драйвера А 110, и
Figure 00000043
указатель на другой объект синхронизации, который равен по меньшей мере одному из значений:
Figure 00000044
заранее установленному значению (например, если указатель не указывает ни на какой объект, то такой указатель называется нулевым, равным address = null = 0x000000, в другом примере любой указатель на объект всегда выравнен по 4, т.е. кратен 4 address = 4 * index, поэтому любое значение указателя, не кратное 4, может использоваться для хранения дополнительной информации, например состояния объекта: 0x10000000 - указатель на объект, 0x10000001 - означает, что по адресу 0x10000000 существует объект и в текущий момент находится в состоянии #1 и т.д.),
Figure 00000045
адресу, указывающему на другой объект синхронизации, созданный ранее другим драйвером А 110;
Figure 00000046
начальное значение (заранее установленное разработчиками рассматриваемой системы), которое указывает на отсутствие объекта синхронизации (т.е. что ни один драйвер А 110 не создал еще объекта синхронизации и тем самым указатель на объект синхронизации отсутствует). В одном из вариантов реализации способа на этапе 220 определение значения в области глобальных данных драйвера Б 120 производится по заранее заданному адресу области глобальных данных драйвера Б 120.
Например, при реализации синхронизации инициализации драйверов разработчиком упомянутой реализации может быть задан конкретный адрес в области глобальных данных драйвера Б 120 (например, 0х802В7Е15), значения по которому используются при дальнейшей обработке. В другом варианте реализации способа адрес в области глобальных данных может отличаться (например, 0x803243F6).
Еще в одной реализации способа на этапе 220 определение значения в области глобальных данных драйвера Б 120 производится по адресу глобальной области данных, вычисляемому на основании значений внутренних статических переменных упомянутого драйвера Б 120, заданных разработчиками драйвера Б 120.
Например, упомянутый адрес в области глобальных данных драйвера Б 120 может вычисляться как контрольная сумма (к примеру, CRC32) от пути, по которому расположен драйвер Б 120 на запоминающем устройстве:
Figure 00000047
Т.е. адрес в области глобальных данных драйвера Б 120 может задаваться таким образом, чтобы любой драйвер А 110 однозначно мог его вычислить вне зависимости от условий работы (время и порядок запуска драйверов и других приложений операционной системы, доступные вычислительные ресурсы, например объем оперативной памяти, действия пользователя и т.д.) драйвера А 110, драйвера Б 120 и операционной системы в целом.
На этапе 230 формируют связный список, элементами которого являются объекты синхронизации, каждый из которых представляет собой данные, содержащие:
Figure 00000048
объект ядра операционной системы, который приостанавливает инициализацию создавшего объект синхронизации драйвера до тех пор, пока драйвер Б 120 не выполнит инициализацию, и
Figure 00000049
указатель, содержащий в случае, если связный список содержит более одного элемента, адрес объекта синхронизации, добавленного в связный список ранее;
для чего:
Figure 00000050
создают объект синхронизации в адресном пространстве драйвера А1 110.1,
Figure 00000051
размещают в области глобальных данных драйвера Б 120 адрес, указывающий на созданный объект синхронизации в драйвере А1 110.1.
Также формируют еще один связный список для чего:
Figure 00000052
создают объект синхронизации в адресном пространстве драйвера А2 110.2,
Figure 00000053
устанавливают адрес, размещенный в области глобальных данных Б и указывающий на объект синхронизации, созданный ранее, как указатель в упомянутый объект синхронизации, созданный драйвером А2 110.2,
Figure 00000054
размещают в области глобальных данных драйвера Б 120 адрес, указывающий на созданный объект синхронизации в драйвере А2 110.2.
В одном из вариантов реализации способа в качестве объекта ядра операционной системы выступает объект KEVENT.
При работе с объектом KEVENT может использоваться функция операционной системы KeWaitForSingleObject для отслеживания состояний объекта KEVENT, таким образом вызвавший упомянутую функцию драйвер может определять текущее состояние объекта KEVENT.
В одном из вариантов реализации способа объект ядра операционной системы находится в одном из двух состояний, определяемых тем, на каком этапе инициализации находится драйвер Б 120, при этом в одном состоянии объект ядра запрещает создавшим указанный объект ядра драйверам А 110 (драйверу А1 110.1 и драйверу А2 110.2) продолжать инициализацию, а в другом состоянии разрешает драйверам А 110 продолжать инициализацию.
В одном из вариантов реализации способа запрет драйверу продолжить инициализацию реализуется средствами операционной системы - в зависимости от состояния объекта ядра операционной системы операционная система приостанавливает выполнение потока, в котором происходит инициализация упомянутого драйвера, или выполнение упомянутого потока возобновляет (в случае, если оно было остановлено ранее).
Например, над объектом KEVENT можно выполнить два действия:
Figure 00000055
сбросить объект KEVENT (англ. reset kevent), при этом в сброшенном состоянии (т.е. в состоянии, в который объект KEVENT был переведен ядром операционной системы после вызова функции сброса объекта KEVENT, например KeResetEvent) после вызова функции KeWaitForSingleObject, отслеживающей состояние объекта KEVENT, управление не возвращается вызвавшему упомянутую функцию драйверу, таким образом ядро операционной системы приостанавливает исполнение драйвера, ожидая пока состояние объекта KEVENT будет изменено, т.е. будет установлен объект KEVENT (англ. set kevent);
Figure 00000056
установить объект KEVENT (англ. reset kevent),
при этом в установленном состоянии (т.е. в состоянии, в который объект KEVENT был переведен ядром операционной системы после вызова функции установки объекта KEVENT, например KeSetEvent) после вызова функции KeWaitForSingleObject, отслеживающей состояние объекта KEVENT, управление будет возвращено вызвавшему упомянутую функцию драйверу, таким образом драйвер сможет продолжить свою инициализацию.
При этом после инициализации драйвера Б 120 изменяют состояние каждого из объектов ядра операционной системы, содержащихся в каждом объекте синхронизации, созданном соответствующим драйвером А 110 (драйвером А1 110.1 и драйвером А2 110.2) на этапе 230, причем изменение состояния производится таким образом, что каждый драйвер А 110 продолжит инициализацию, приостановленную после создания объекта ядра операционной системы.
В одном из вариантов реализации способа в качестве области памяти адресного пространства драйвера А 110, в которой создают объект синхронизации, выступает по меньшей мере:
Figure 00000057
стек оперативной памяти драйвера А 110;
Figure 00000058
область глобальных данных драйвера А 110.
В одном из вариантов реализации способа заранее установленное значение в объекте синхронизации указывает на то, что данный объект синхронизации является последним созданным объектом синхронизации.
На этапе 240 после инициализации драйвера Б 120 (выполненного на этапе 200) объект ядра операционной системы, содержащийся в каждом созданном объекте синхронизации, разрешает продолжить инициализацию соответствующего драйвера А 110 (т.е. операционная система в зависимости от состояния объекта ядра операционной системы приостанавливает или возобновляет выполнение процесса, в котором происходит инициализация драйвера А 110), для чего упомянутый объект ядра операционной системы переводится в такое состояние, для которого операционная система позволяет продолжить выполнение драйвера, выполняющего инициализацию (т.е. продолжить свою инициализацию).
На этапе 250 передают перехваченные запросы от каждого драйвера А 110 драйверу Б 120.
После передачи упомянутого запроса драйвер Б 120 предоставляет затребованные данные драйверу А 110.
Таким образом реализуется синхронизация инициализации драйверов А 110 и драйвера Б 120, т.е. работа драйвера А 110 зависит от состояния, в котором находится драйвер Б 120, и состоит из этапов, на начало, завершение и ход которых влияет состояние драйвера Б 120.
Описанная выше технология может работать не только на уровне драйверов (когда к драйверу Б 120 обращаются несколько драйверов А 110, например драйвер А1 110.1 и драйвер А2 110.2), но и на уровне потоков одного драйвера А 110.
В одном из вариантов реализации способа один из драйверов А 110 создает несколько потоков, каждый из которых обладает своей функциональностью. Например, поток #1 передает драйверу Б 120 данные для шифрования, поток #2 передает драйверу Б 120 данные для проверки на вредоносность. При обращении к драйверу Б 120, в случае, когда упомянутый драйвер еще не инициализирован, выполнение соответствующего потока приостанавливается до тех пор, пока драйвер Б 120 не будет проинициализирован. При этом также возможна и описанная выше ситуация, когда драйвер Б 120 загружен в оперативную память и выполняется к моменту получения запроса от потока #1 драйвера А 110 (поток #1 передает драйверу Б 120 данные для шифрования) и от потока #2 драйвера А 110 (поток #2 передает драйверу Б 120 данные для проверки на вредоносность), кроме того, драйвером Б 120 может уже быть получен приватный ключ {К} для выполнения шифрования данных (например, может быть загружен с жесткого диска), но еще не получены антивирусные базы для проверки данных на вредоносность. В таком состоянии драйвер Б 120 сможет выполнять функционал, запрашиваемый потоком #1 драйвера А 110, и не сможет - запрашиваемый потоком #2 драйвера 110.
Описанная выше технология выполняется:
Figure 00000059
на стороне соответствующих драйверов А 110 и Б 120,
в этом случае соответствующий функционал добавляется в драйверы на уровне компиляции с помощью отвечающих за реализацию библиотек или уже во время выполнения за счет подключения динамических библиотек с последующим использованием соответствующих функций из них;
Figure 00000060
на стороне ядра операционной системы,
в этом случае соответствующий функционал реализован на стороне ядра операционной системы, таким образом в самих драйверах А 110 и Б 120 происходят лишь вызовы соответствующих API-функций, вся логика работы находится на стороне ядра операционной системы и полностью непрозрачна для упомянутых драйверов.
Драйвер А 110:
Figure 00000061
Драйвер Б 120:
Figure 00000062
Осуществление описанной синхронизации инициализации драйверов в потоке инициализации драйверов позволяет решить несколько фундаментальных проблем:
Figure 00000063
обеспечить гарантированную инициализацию драйверов, т.е. повысить их работоспособность,
Figure 00000064
устранить возможность неустранимого сбоя операционной системы, связанного с невозможностью работы одного из инициализируемых драйверов.
Кроме того, используемые ресурсы (такие как объект KEVENT), используемые для описанной синхронизации инициализации драйверов в потоке инициализации драйверов, обеспечивают ряд преимуществ перед существующими решениями в области синхронизации, а именно:
Figure 00000065
уменьшение используемой оперативной памяти при выполнении синхронизации инициализации драйверов,
поскольку с одной стороны объект KEVENT представляет собой объект, занимающий и использующий мало места в оперативной памяти, без дополнительного функционала, реализованного через многочисленные API-функции, а с другой стороны объекты синхронизации представляют собой также объекты, занимающий и использующий мало места в оперативной памяти, содержащие лишь указатели и занимающие минимальный объем в оперативной памяти;
Figure 00000066
уменьшение времени, затраченного на выполнение синхронизации инициализации драйверов,
поскольку, как описано выше, объекты синхронизации «компактны», и как следствие на их создание и обработку требуется незначительное время, при этом сама обработка заключается лишь в небольшом количестве операций сравнения.
Рассмотрим работу способа синхронизации инициализации драйверов в потоке инициализации драйверов на примере инициализации драйверов антивирусного программного обеспечения: драйвера klark.sys (далее, драйвер А), предназначенного для блокировки недоверенных потоков операционной системы (т.е. потоков, о которых отсутствует информация о том, что упомянутые потоки не несут прямой или косвенный урон пользователям), и драйвера klif.sys (далее, драйвер Б), предназначенного для определения, является ли исследуемый поток операционной системы доверенным или нет, при этом для работы драйверу klark.sys требуются данные, получаемые и предоставляемые драйвером klif.sys через специализированный API.
Драйвер А обращается к драйверу Б с целью проверить, является ли поток chrome.exe (далее, поток #1) доверенным. Для начала драйвер А проверяет, проинициализирован ли драйвер Б. С этой целью драйвер А получает по адресу 0xE1AD7A8B в области глобальных данных драйвера Б (адрес которой был определен разработчиками программного обеспечения, обеспечивающего синхронизацию в потоке инициализации драйверов) 32-битное численное значение, характеризующее текущее состояние драйвера Б. Поскольку драйвер Б еще не проинициализирован к моменту, когда драйвер А запрашивает данные, а обращение драйвера А к драйверу Б является первым из подобных обращений, то полученное значение равно 0x00000000, что соответствует неинициализированному драйверу Б.
Далее драйвер А:
Figure 00000067
средствами операционной системы создает объект KEVENT (событие ядра) (далее, kevent #1) и получает указатель на него;
Figure 00000068
создает в области данные своего стека по адресу 0x803243F6 (определяется средствами операционной системы) объект синхронизации, представляющий собой два 32-битных значения, одно из которых является указателем на созданный ранее объект kevent #1, а другое является пустым указателем (0x00000000);
Figure 00000069
по адресу 0xE1AD7A8B в области глобальных данных драйвера Б заменяют текущее значение (0x00000000) на адрес созданного объекта синхронизации.
После того как объект синхронизации создан, драйвер А вызывает функцию операционной системы KeWaitForSingleObject для ожидания изменения состояния созданного объекта kevent #1.
Тем временем драйвер Б был успешно запущен и проинициализирован. После завершения инициализации драйвер Б проверяет значение по адресу 0xE1AD7A8B в области глобальных данных драйвера Б.
Драйвер А заново обращается к драйверу Б с целью проверки на недоверенность поток #2. Вначале он проверяет, проинициализирован ли драйвер Б. С этой целью драйвер А получает по адресу в области глобальных данных драйвера Б 0xE1AD7A8B состояние драйвера Б.
Драйвер А заново обращается к драйверу Б с целью проверки на недоверенность поток #3. Вначале он проверяет, проинициализирован ли драйвер Б. С этой целью драйвер А получает по адресу в области глобальных данных драйвера Б 0xE1AD7A8B состояние драйвера Б. Поскольку драйвер Б уже проинициализирован, то полученное состояние имеет значение OxFFFFFFFF (данное значение было выбрано заранее разработчиками для описанного состояния). Определив по упомянутому значению состояния драйвера Б, что драйвер Б уже проинициализирован драйвер А передает запрос драйверу Б на проведение проверки на недоверенность анализируемого потока (т.е. минуя все описанные выше вспомогательные действия, обеспечивающие синхронизацию инициализируемых драйверов).
Фиг. 3 представляет пример компьютерной системы общего назначения, персональный компьютер или сервер 20, содержащий центральный процессор 21, системную память 22 и системную шину 23, которая содержит разные системные компоненты, в том числе память, связанную с центральным процессором 21. Системная шина 23 реализована, как любая известная из уровня техники шинная структура, содержащая в свою очередь память шины или контроллер памяти шины, периферийную шину и локальную шину, которая способна взаимодействовать с любой другой шинной архитектурой. Системная память содержит постоянное запоминающее устройство (ПЗУ) 24, память с произвольным доступом (ОЗУ) 25. Основная система ввода/вывода (BIOS) 26 содержит основные процедуры, которые обеспечивают передачу информации между элементами персонального компьютера 20, например, в момент загрузки операционной системы с использованием ПЗУ 24.
Персональный компьютер 20 в свою очередь содержит жесткий диск 27 для чтения и записи данных, привод магнитных дисков 28 для чтения и записи на сменные магнитные диски 29 и оптический привод 30 для чтения и записи на сменные оптические диски 31, такие как CD-ROM, DVD-ROM и иные оптические носители информации. Жесткий диск 27, привод магнитных дисков 28, оптический привод 30 соединены с системной шиной 23 через интерфейс жесткого диска 32, интерфейс магнитных дисков 33 и интерфейс оптического привода 34 соответственно. Приводы и соответствующие компьютерные носители информации представляют собой энергонезависимые средства хранения компьютерных инструкций, структур данных, программных модулей и прочих данных персонального компьютера 20.
Настоящее описание раскрывает реализацию системы, которая использует жесткий диск 27, сменный магнитный диск 29 и сменный оптический диск 31, но следует понимать, что возможно применение иных типов компьютерных носителей информации 56, которые способны хранить данные в доступной для чтения компьютером форме (твердотельные накопители, флеш карты памяти, цифровые диски, память с произвольным доступом (ОЗУ) и т.п.), которые подключены к системной шине 23 через контроллер 55.
Компьютер 20 имеет файловую систему 36, где хранится записанная операционная система 35, а также дополнительные программные приложения 37, другие программные модули 38 и данные программ 39. Пользователь имеет возможность вводить команды и информацию в персональный компьютер 20 посредством устройств ввода (клавиатуры 40, манипулятора «мышь» 42). Могут использоваться другие устройства ввода (не отображены): микрофон, джойстик, игровая консоль, сканер и т.п. Подобные устройства ввода по своему обычаю подключают к компьютерной системе 20 через последовательный порт 46, который в свою очередь подсоединен к системной шине, но могут быть подключены иным способом, например, при помощи параллельного порта, игрового порта или универсальной последовательной шины (USB). Монитор 47 или иной тип устройства отображения также подсоединен к системной шине 23 через интерфейс, такой как видеоадаптер 48. В дополнение к монитору 47, персональный компьютер может быть оснащен другими периферийными устройствами вывода (не отображены), например колонками, принтером и т.п.
Персональный компьютер 20 способен работать в сетевом окружении, при этом используется сетевое соединение с другим или несколькими удаленными компьютерами 49. Удаленный компьютер (или компьютеры) 49 являются такими же персональными компьютерами или серверами, которые имеют большинство или все упомянутые элементы, отмеченные ранее при описании существа персонального компьютера 20, представленного на Фиг. 3. В вычислительной сети могут присутствовать также и другие устройства, например маршрутизаторы, сетевые станции, пиринговые устройства или иные сетевые узлы.
Сетевые соединения могут образовывать локальную вычислительную сеть (LAN) 50 и глобальную вычислительную сеть (WAN). Такие сети применяются в корпоративных компьютерных сетях, внутренних сетях компаний и, как правило, имеют доступ к сети Интернет. В LAN- или WAN-сетях персональный компьютер 20 подключен к локальной сети 50 через сетевой адаптер или сетевой интерфейс 51. При использовании сетей персональный компьютер 20 может использовать модем 54 или иные средства обеспечения связи с глобальной вычислительной сетью, такой как Интернет. Модем 54, который является внутренним или внешним устройством, подключен к системной шине 23 посредством последовательного порта 46. Следует уточнить, что сетевые соединения являются лишь примерными и не обязаны отображать точную конфигурацию сети, т.е. в действительности существуют иные способы установления соединения техническими средствами связи одного компьютера с другим.
В заключение следует отметить, что приведенные в описании сведения являются примерами, которые не ограничивают объем настоящего изобретения, определенного формулой.

Claims (26)

1. Реализуемый компьютером способ передачи перехваченных запросов от драйвера к драйверу в процессе инициализации упомянутых драйверов, при этом ни один из упомянутых драйверов на момент перехвата запросов еще не был проинициализирован, содержащий этапы, на которых:
а) перехватывают запросы драйвера А1 и драйвера А2, при этом запрос от драйвера А1 перехватывают раньше запроса от драйвера А2, на доступ к данным, предоставляемым драйвером Б, который на момент перехвата запроса еще не инициализирован, при этом драйверам А1 и А2 для инициализации необходимы данные, предоставляемые проинициализированным драйвером Б;
б) формируют связный список, элементами которого являются объекты синхронизации, каждый из которых представляет собой данные, содержащие:
- объект ядра операционной системы, который приостанавливает инициализацию создавшего объект синхронизации драйвера до тех пор, пока драйвер Б не выполнит инициализацию, и
- указатель, содержащий в случае, если связный список содержит более одного элемента, адрес объекта синхронизации, добавленного в связный список ранее;
для чего:
- создают объект синхронизации в адресном пространстве драйвера А1,
- размещают в области глобальных данных драйвера Б адрес, указывающий на созданный объект синхронизации в драйвере А1;
в) дополняют упомянутый связный список, для чего:
- создают объект синхронизации в адресном пространстве драйвера А2,
- устанавливают адрес, размещенный в области глобальных данных Б и указывающий на объект синхронизации, созданный ранее, как указатель в упомянутый объект синхронизации, созданный драйвером А2,
- размещают в области глобальных данных драйвера Б адрес, указывающий на созданный объект синхронизации в драйвере А2;
г) после инициализации драйвера Б объект ядра операционной системы, содержащийся в каждом созданном объекте синхронизации из связного списка, средствами операционной системы разрешает продолжить инициализацию драйвера, создавшего соответствующий объект синхронизации;
д) передают перехваченные на этапе а) запросы драйверу Б.
2. Способ по п. 1, по которому в качестве данных, предоставляемых драйвером Б, выступает по меньшей мере:
- API функции;
- исполняемый код;
- входные параметры для драйверов А1 и А2.
3. Способ по п. 1, в котором на этапе б) определение значения в области глобальных данных драйвера Б производится по заранее заданному адресу области глобальных данных.
4. Способ по п. 1, в котором в качестве объекта ядра операционной системы выступает объект KEVENT.
5. Способ по п. 1, по которому объект ядра операционной системы находится в одном из двух состояний, определяемых тем, в каком этапе инициализации находится драйвер Б, при этом в одном состоянии объект ядра запрещает создавшему указанный объект ядра драйверам А1 и А2 продолжать инициализацию, а в другом состоянии разрешает драйверам А1 и А2 продолжать инициализацию.
6. Способ по п. 5, в котором после инициализации драйвера Б изменяют состояние каждого объекта ядра операционной системы, содержащихся в каждом объекте синхронизации, созданном соответствующими драйвером А1 и А2 на этапе 1.в), причем изменение состояния производится таким образом, что каждый драйвер А1 и А2 продолжит инициализацию, приостановленную после создания объекта ядра операционной системы.
7. Способ по п. 1, по которому в качестве области памяти драйверов А1 и А2, в которой создают объект синхронизации, выступает по меньшей мере:
- стек оперативной памяти драйверов А1 и А2;
- область глобальных данных драйверов А1 и А2.
8. Способ по п. 1, в котором заранее установленное значение в объекте синхронизации указывает на то, что данный объект синхронизации является последним созданным объектом синхронизации.
RU2017115046A 2017-04-28 2017-04-28 Система и способ передачи перехваченных запросов от драйвера к драйверу в процессе инициализации драйверов RU2649293C1 (ru)

Priority Applications (1)

Application Number Priority Date Filing Date Title
RU2017115046A RU2649293C1 (ru) 2017-04-28 2017-04-28 Система и способ передачи перехваченных запросов от драйвера к драйверу в процессе инициализации драйверов

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
RU2017115046A RU2649293C1 (ru) 2017-04-28 2017-04-28 Система и способ передачи перехваченных запросов от драйвера к драйверу в процессе инициализации драйверов

Publications (1)

Publication Number Publication Date
RU2649293C1 true RU2649293C1 (ru) 2018-03-30

Family

ID=61867074

Family Applications (1)

Application Number Title Priority Date Filing Date
RU2017115046A RU2649293C1 (ru) 2017-04-28 2017-04-28 Система и способ передачи перехваченных запросов от драйвера к драйверу в процессе инициализации драйверов

Country Status (1)

Country Link
RU (1) RU2649293C1 (ru)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040268108A1 (en) * 2003-06-30 2004-12-30 Lechong Chen Parallel execution of enhanced EFI based BIOS drivers on a multi-processor or hyper-threading enabled platform
US20060277400A1 (en) * 2005-06-03 2006-12-07 Veen Peter V D System for executing code during operating system initialization
US20070234029A1 (en) * 2006-03-28 2007-10-04 Rothman Michael A Methods and apparatus for context sensitive component dispatch management
US20080010646A1 (en) * 2002-04-23 2008-01-10 Canon Kabushiki Kaisha Extensible device driver
RU2443012C2 (ru) * 2005-10-26 2012-02-20 Майкрософт Корпорейшн Конфигурация изолированных расширений и драйверов устройств

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080010646A1 (en) * 2002-04-23 2008-01-10 Canon Kabushiki Kaisha Extensible device driver
US20040268108A1 (en) * 2003-06-30 2004-12-30 Lechong Chen Parallel execution of enhanced EFI based BIOS drivers on a multi-processor or hyper-threading enabled platform
US20060277400A1 (en) * 2005-06-03 2006-12-07 Veen Peter V D System for executing code during operating system initialization
RU2443012C2 (ru) * 2005-10-26 2012-02-20 Майкрософт Корпорейшн Конфигурация изолированных расширений и драйверов устройств
US20070234029A1 (en) * 2006-03-28 2007-10-04 Rothman Michael A Methods and apparatus for context sensitive component dispatch management

Similar Documents

Publication Publication Date Title
US8671405B2 (en) Virtual machine crash file generation techniques
RU2691187C1 (ru) Система и способы аудита виртуальной машины
CN107690645B (zh) 使用解释器虚拟机的行为恶意软件检测
US9075995B2 (en) Dynamically loaded measured environment for secure code launch
US7434224B2 (en) Plural operating systems having interrupts for all operating systems processed by the highest priority operating system
EP2443553B1 (en) Annotating virtual application processes
JP6063941B2 (ja) システム管理要求のための仮想高特権モード
US9864626B2 (en) Coordinating joint operation of multiple hypervisors in a computer system
US10776524B2 (en) Secure communication channel for system management mode
RU2553056C2 (ru) Система и способ сохранения состояния эмулятора и его последующего восстановления
US11860737B2 (en) System and method for coordinating use of multiple coprocessors
EP3436947B1 (en) Secure driver platform
US7552434B2 (en) Method of performing kernel task upon initial execution of process at user level
US7546600B2 (en) Method of assigning virtual process identifier to process within process domain
US20160170912A1 (en) Safely discovering secure monitors and hypervisor implementations in systems operable at multiple hierarchical privilege levels
EP3926470B1 (en) Emulator and emulation method
US9535772B2 (en) Creating a communication channel between different privilege levels using wait-for-event instruction in systems operable at multiple levels hierarchical privilege levels
RU2649293C1 (ru) Система и способ передачи перехваченных запросов от драйвера к драйверу в процессе инициализации драйверов
US10691471B2 (en) Conflict resolution for strong symbols
US20180341496A1 (en) Dynamic Microsystem Reconfiguration With Collaborative Verification
CN110622164B (zh) 用于驱动程序执行的系统、方法和计算机存储介质
US10394295B2 (en) Streamlined physical restart of servers method and apparatus
RU98613U1 (ru) Система обнаружения скрытых ресурсов в системе
EP2953028A1 (en) Computer device and control method for computer device
RU2817547C1 (ru) Система и способ контроля работоспособности процессов в операционной системе