Драйверы: пользовательский режим, обратный вызов и другие термины программирования драйверов
User mode
Пользовательский режим. Непривилегированный режим, в котором выполняются обычные приложения, не имеющие возможности получать доступ к системным данным иначе, как обращаясь к вызовам функций подсистем (например, Win32, GDI, Posix), которые, в свою очередь, прибегают к помощи системных вызовов.
В пользовательском режиме все потоки, даже имеющие самый низкий приоритет, рано или поздно получают управления (возможность работы) в отличие от потоков режима ядра повышенных приоритетов, которые могут быть прерваны только потоками, получившими еще более высокий приоритет.
Callback, callback function
Функция обратного вызова, callback функция. Прием программирования, когда один программный поток сообщает адрес известной ему функции другому программному потоку с той целью, чтобы второй выполнил вызов этой указанной функции в определенный момент (например, если поступил некий сигнал от аппаратного обеспечения или истек определенный интервал ожидания). Процесс передачи адреса вызываемой функции часто называется регистрацией.
Context
Контекст. Этот термин употребляется программистами для обозначения двух существенно различающихся явлений.
Когда производится регистрация callback функции, производится определения параметра, который она получит в качестве аргумента при вызове. Как правило, это указатель на буфер с данными, которые callback функции необходимо знать, чтобы ориентироваться, зачем же ее вызвали. В драйверах чаще всего в роли контекста (контекстного указателя) выступает указатель на структуру описания устройства или структуру описания расширения устройства, например при регистрации DpcForISR (см. ниже). Именно так чаще всего и следует трактовать словосочетание "in device context" - в контексте устройства, иными словами: применительно к данному устройству.
Структура, отражающая состояние программного потока на данный момент. Создаваемая операционной системой Windows для каждого потока, служит, например, для запоминания состояния регистров и некоторой другой информации на момент окончания последнего по времени кванта времени, выделенного потоку. Структура контекста потока режима ядра несколько проще, чем контекста потока пользовательского режима. Для драйвера к контексту (по сути этого понятия) следует отнести также состояние объектов, которыми он владеет, IRP пакеты (см. ниже) в очереди, к которым он может получить доступ, и даже состояние обслуживаемого устройства.
Вольное, но все еще допустимое, значение слова "контекст" подразумевает некие признаки потока, вызвавшего одну из процедур драйвера (Driver Routine), которые перешли на вызванный код. С этой точки зрения, код драйвера режима ядра может выполняться в одном из трех контекстов:
в контексте свойств пользовательского потока, который инициировал обращение к драйверу
в контексте системного рабочего потока режима ядра
как результат поступления сигнала прерывания от аппаратуры, то есть ни в каком из контекстов существующих потоков или процессов, которые были текущими в момент прерывания
Приняв это определение, несложно понять, почему становится возможным благополучное разрешение следующей ситуации. Предположим, в некотором драйвере рабочая (dispatch) процедура, предназначенная для обработки IOCTL запросов от пользовательских приложений, получает при методе буферизации METHOD_NEITHER виртуальный адрес буфера с пользовательскими данными (или для пользовательских данных). Этот адрес поступит в драйвер в том самом виде, как он был виден в пользовательском приложении (с адресом меньше 0x80000000, например, 0x00012A0). Однако этот виртуальный пользовательский адрес имеет смысл только в адресном пространстве вызывающего пользовательского приложения (такое же число в качестве адреса в другом приложении пользовательского режима указывало бы на совершенно другую область памяти) - и это одно из неотъемлемых свойств виртуальной адресации. Должен произойти крах системы?
Тем не менее, драйвер, к которому могут обратиться с подобными запросами разные пользовательские приложения (причем, почти одновременно), выполнит свою работу абсолютно корректно - данные попадут по назначению. Почему? Потому что рабочая процедура, обрабатывающая IOCTL запросы от клиентов драйвера, работает в контексте вызвавших ее потоков, вследствие чего трактовка виртуальных адресов в подобных случаях не вызывает у операционной системы никаких затруднений. Драйвер получает доступ к нужной области памяти, и при этом никакой ошибки доступа к, на первый взгляд, "чужой" памяти не возникает.
Популярные драйверы
ATI Catalyst Drivers - cпециализированные драйверы Catalyst, предназначены для видеоадаптеров серии Radeon от производителя ATI.
NET Framework pack - пакет, включающий в себя все самые необходимые драйверы для NET Framework приложений.
Microsoft IntelliPoint - ПО, предназначенное для управления и настройки координатно-указательных контроллеров компании Microsoft.
Microsoft ActiveSync - утилита для соединения различных мобильных устройств с компьютером.
Драйвер — это приложение, расшифровывающее операционной системе алгоритмы работы с необходимым оборудованием. Чтобы установленные устройства стабильно работали необходимо скачивать и инсталлировать драйверы для всех составляющих вашего персонального компьютера. Например для звуковой и сетевой карт, мыши или принтера. Для всего этого и многого другого можно скачать драйверы на нашем сайте. Чаще всего операционная система не вызывает необходимости скачивать драйверы, так как уже включает в себя необходимые приложения для работы.
Тем не менее, есть и оборудование, которое устанавливается с помощью дополнительных приложений, или, что весьма нередко, операционная система произведена раньше чем проблемное оборудование и не может скачать и установить необходимые драйверы автоматически. Для этого в комплект к необходимому оборудованию стали добавлять диски с наборами необходимых утилит и программ.
Если таких дисков нет под рукой появляется вопрос: где же скачать драйверы для необходимого нам устройства и операционной системы, установленной на используемом ПК. Возникает множество проблем с поиском, кроме того такие поиски чреваты потерями внушительного времени, именно поэтому мы создали архив драйверов Hotdrivers.ru с помощью которого скачивать драйверы - одно удовольствие.