Поделиться через


Диспетчер драйверов

Диспетчер драйверов — это библиотека, которая управляет взаимодействием между приложениями и драйверами. Например, на платформах Microsoft Windows диспетчер драйверов представляет собой библиотеку динамической компоновки (DLL), написанную корпорацией Майкрософт, и может распространяться пользователями распространяемого пакета SDK MDAC 2.8 с пакетом обновления 1 (SP1).

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

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

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

В большинстве случаев диспетчер драйверов просто передает вызовы функций из приложения в правильный драйвер. Однако она также реализует некоторые функции (SQLDataSources, SQLDrivers и SQLGetFunctions) и выполняет базовые проверка ошибок. Например, диспетчер драйверов проверка, которые обрабатываются, не являются пустыми указателями, которые вызываются в правильном порядке, и что некоторые аргументы функций допустимы. Полное описание ошибок, проверка проверка диспетчера драйверов, см. в разделе справочника по каждой функции и приложению B: таблицы перехода состояния ODBC.

Последняя основная роль диспетчера драйверов — загрузка и выгрузка драйверов. Приложение загружает и выгружает только диспетчер драйверов. Если он хочет использовать конкретный драйвер, он вызывает функцию подключения (SQL Подключение, SQLDriver Подключение или SQLBrowse Подключение) в диспетчере драйверов и указывает имя определенного источника данных или драйвера, например "Учет" или "SQL Server". Используя это имя, диспетчер драйверов ищет сведения о источнике данных для имени файла драйвера, например Sqlsrvr.dll. Затем он загружает драйвер (если он еще не загружен), сохраняет адрес каждой функции в драйвере и вызывает функцию подключения в драйвере, которая затем инициализирует себя и подключается к источнику данных.

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