Самоучитель по программированию систем защиты


Многоуровневая модель драйверов - часть 4


Отличие между функциями в том, что KeResetEventQ возвращает состояние события до сброса. Функции могут быть вызваны на уровне IRQL меньшем или равном DISPATCHJLEVEL.

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

В случае событий оповещения сброс события в несигнальное состояние должен быть сделан вручную. Обычно это делает тот же код, который перевел событие в сигнальное состояние.

Следующий код корректно уведомляет все блокированные потоки о наступлении ожидаемого ими события:

KeSetEvent(&DeviceExt->Event, О, NULL);

KeClearEvent(&DeviceExt->Event);

2.4.5.2.5. Быстрые мыотексы

Быстрый мьютекс являются урезанным вариантом мьютекса, который не может быть рекурсивно захвачен. Поскольку быстрый мьютекс не является диспетчерским объектом, он не может использоваться функцией KeWaitForSingleObjectQ или KeWaitForMultipleObjectsQ. Вместо этого нужно использовать функцию ExAcquireFast MutexQ. Эквивалента быстрым мьютексам на пользовательском уровне нет, поэтому они могут использоваться только для синхронизации кода режима ядра.

Функции работы с быстрыми мьютексами:

1) VOID ExInitializeFastMutex(IN PFAST_MUTEX FastMutex);

2) VOID ExAcquireFastMutex(IN PFAST_MUTEX FastMutex);

3) BOOLEAN ExTryToAcquireFastMutex(IN PFAST_MUTEX FastMutex);

4) VOID ExReleaseFastMutex(IN PFAST_MUTEX FastMutex);

5) VOID ExAcquireFastMutexUnsafe(IN PFAST_MUTEX FastMutex);

6) VOID ExReleaseFastMutexUnsafe (IN PFAST_MUTEX FastMutex).

2.4.5.3. Ресурсы Исполнительной системы

Ресурсы являются вариантом быстрого мьютекса. Ресурсы не являются диспетчерскими объектами, поэтому они не могут иметь имя и использоваться в функции

KeWaitForSingleObject() или KeWaitForMultipleObjectsQ. Ресурсы предоставляют две формы захвата:



Начало  Назад  Вперед



Книжный магазин