"Пишем драйвер Windows на ассемблере" - читать интересную книгу автора3.2. Процедура инициализацииКаждый драйвер имеет У нас такая процедура называется DriverEntry. Объявим её как
DriverObject – это указатель на служебную структуру, сопоставленную драйверу. Она используется системой для вызова процедур драйвера. Её-то и следует инициализировать – записать в эту структуру адреса соответствующих процедур нашего драйвера. Наш драйвер довольно прост. Он будет отрабатывать только 4 стандартных запроса: IRP_MJ_CREATE – Вызов CreateFile() в приложении пользователя для установления связи с драйвером; IRP_MJ_CLOSE – Вызов CloseHandle() в приложении пользователя для разрыва связи с драйвером; IRP_MJ_DEVICE_CONTROL – Вызов DeviceIoControl() в приложении пользователя для запроса выполнения какой-либо функции в драйвере. Все эти три запроса мы адресуем некоей диспетчерской функции OnDispatch. Мы узнаем о ней позже. Четвёртый запрос – на выгрузку. Об этом пойдёт речь ниже. А пока необходимо сделать ещё 2 важные вещи – создать логический объект устройства при помощи функции IoCreateDevice() и символическую связь, имя которой пользовательские приложения будут использовать для связи с драйвером при помощи функции CreateFile(). Символическая связь создаётся при помощи вызова IoCreateSymbolicLink():
Итак, только что мы завершили разбор процедуры инициализации. |
|
|