Курсовая работа: Профилировщик приложений
Использует буферизацию (системный буфер)
Адрес буфера в системном адресном пространстве указан в pIrp->AssociatedIrp.SystemBuffer
Output
Буфер для данных
Использует буферизацию (системный буфер)
Адрес буфера в системном адресном пространстве указан в pIrp-> AssociatedIrp. SystemBuffer
2.4.4 ISR – процедура обработки прерываний
Эту функцию драйвер регистрирует, чтобы она получала управление в момент, когда аппаратура, обслуживаемая драйвером, передала сигнал прерывания. Задача этой функции выполнить минимальную работу и зарегистрировать процедуру отложенного вызова (DPC) для обслуживания прерывания. Вызов диспетчером прерываний ядра может произойти в любом контексте: как ядра, так и пользовательского процесса.
2.4.5 DPC – процедура отложенного вызова
Такие процедуры выполняются при более низком уровне запроса прерывания (IRQL), чем ISR, что позволяет не блокировать другие прерывания. В них может выполняться вся или завершаться начатая в ISR работа по обслуживанию прерываний.
3. Конструкторский раздел
Так выглядит схема взаимодействия пользовательского приложения с драйвером через компоненты системы:
3.1 Legacy-драйвер
В Legacy-драйвере данного курсового проекта реализованы следующие процедуры:
DriverEntry;
DriverUnload;
DispatchCreate (обработка IRP_MJ_CREATE-пакета);
DispatchClose (обработка IRP_MJ_CLOSE-пакета);
DispatchDeviceControl (обработка IRP_MJ_DEVICE_CONTROL-пакета).
3.1.1 Процедура DriverEntry
Здесь выполняются типичные для инициализации драйвера драйвера действия.
Регистрируются точки входа в драйвер:
pDriverObject->DriverUnload = SpectatorDriverUnload;
PDRIVER_DISPATCH * majorFunction = pDriverObject->MajorFunction;
majorFunction[ IRP_MJ_CREATE ] = SpectatorDispatchCreate;
majorFunction[ IRP_MJ_CLOSE ] = SpectatorDispatchClose;
majorFunction[ IRP_MJ_DEVICE_CONTROL ] = SpectatorDispatchDeviceControl;
Создаётся объект устройства с именем DEVICE_NAME:
#define DEVICE_NAME L"\\Device\\Spectator"
RtlInitUnicodeString( &deviceName, DEVICE_NAME );
status = IoCreateDevice
(pDriverObject,
sizeof( DEVICE_EXTENSION ),