Функция DispatchWrite

Кроме того, функция DispatchWrite Обрабатывает ВЫЗОВ Функции API WriteFile, А функция DispatchioControl Обрабатывает вызов функции API DeviceioControi. Об­ратите внимание, что каждый указатель на функцию, являющийся членом массива MajorFunction, Вызывается из пользовательского режима Windows API. В свою очередь, Windows API обращается к диспетчеру ввода-вывода. Диспетчер ввода-вывода генерирует пакет IRP, инструктируя драйвер выполнить соответствующую функцию и обслужить приложение пользовательского режима. Процесс вызова функций, на кото рые указывают члены массива MajorFunction Чтобы приложение пользовательского режима могло открыть устройства, оно должно «видеть» драйвер. В Windows 2000/ХР приложен пользовательского режима видит драйвер посредством менеджера объектов. Менеджер объектов — это компонент Windows 2000/ХР, который управляет объектами в операционной системе. Драйвер Все объекты, экспортированные в пространство имен менеджера объектов, видимы приложению пользовательского режима и могут быть открыты по­средством функции API CreateFile. Чтобы экспортировать имя драйвера В пространство имен менеджера объектов, с помощью функции ядра Rtiinitunicodestring Для драйвера создается Unicode-имя. Эта операция осуществляется следующим образом: После этого указатель на созданное Unicode-имя передается в третьем пара­метре функции IoCreateDevice, Вызываемой при создании объекта устройст — ва для драйвера. Таким образом, код приложения пользовательского режима сможет видеть драйвер. Но для того, чтобы добраться до драйвера, необхо­димо обойти пространство имен менеджера объектов, т. е. передать значение В этом фрагменте кода создается символьная ссылка. Таким Образом, функция CreateFile Может открыть дескриптор устройства, Пере­Давая лишь WunicodeDosDeviceName. Тем не менее, вопрос о Том, Создавать ссылку или нет, является просто делом личных предпочтений вызове этих функций, диспетчер ввода-вывода передает им два парамет — Первый параметр — это указатель на Объект устройства, сопоставлен­ий драйверу, а второй — указатель на структуру данных IRP в резидентном пуле пространства памяти ядра помнить, что Объект устройства — это не то же самое, что и Объект драйвера. Для каждого драйвера может существовать лишь один объект драйвера, но несколько объектов устройства, т. е. драйвер может иметь более Одного Устройства.



Рубрика: Женский интерес