Функции для работы с загружаемыми драйверами
Перед обращением к загружаемому драйверу его необходимо открыть функцией OpenDriver:
HDRVR OpenDriver( LPCSTR lpDriverName, // имя драйвера LPCSTR lpSectionName, // имя секции ini-файла LPARAM lParam); // адрес дополнительных данных
Займемся параметрами этой функции.
В процессе инсталляции устанавливаемого драйвера в секции [drivers] файла system.ini для каждого драйвера создается отдельная строка:
[drivers] Wave=galaxy.drv MIDI=galaxy.drv AUX=sgaux.drv WAST=wastdrv.dll
Эти строки устанавливают соответствие между именем загружаемого драйвера и именем файла, содержащего загрузочный модуль драйвера. Дополнительно после имени файла могут указываться параметры, отделенные символом пробела. Драйвер записывается в системный каталог Windows.
В качестве параметра lpDriverName для функции OpenDriver следует указывать имя драйвера, как оно определено в секции [drivers], или имя файла, содержащего драйвер.
Параметр lpSectionName позволяет загрузить драйвер, описанный в произвольной секции файла system.ini. Если же используется стандартная секция [drivers], этот параметр нужно указать как NULL.
В процессе открытия драйвера функция DriverProc вызывается несколько раз для обработки инициализирующих сообщений. При этом она через один из своих параметров получает значение, указанное в параметре lParam функции OpenDriver.
При нормальном завершении функция OpenDriver возвращает идентификатор драйвера, который следует сохранить для последующих обращений к драйверу.
После завершения работы с драйвером его необходимо закрыть функцией CloseDriver:
LRESULT CloseDriver( HDRVR hdrvr, // идентификатор драйвера LPARAM lParam1, // дополнительные данные 1 LPARAM lParam2); // дополнительные данные 2
В процессе закрытия драйвера, как и при его открытии, функция DriverProc вызывается несколько раз для обработки завершающих сообщений. При этом она через свои параметры получает значения, указанные в параметрах lParam1 и lParam2 функции CloseDriver.
Для взаимодействия с загружаемым драйвером приложения Windows и DLL-библиотеки используют функцию SendDriverMessage, которая посылает сообщение функции DriverProc. Приведем прототип функции SendDriverMessage:
LRESULT SendDriverMessage( HDRVR hdrvr, // идентификатор драйвера UINT msg, // код сообщения LPARAM lParam1, // первый параметр LPARAM lParam2); // второй параметр