Программирование драйверов Windows


Мьютексы - часть 4


Перед использованием функций ExAcquireFastMutex и ExReleaseFastMutex

следует выполнить инициализацию объекта быстрого мьютекса вызовом ExInitializeFastMutex, см. таблицу 10.38. И хотя память под структуру объекта выделяет инициатор этого вызова, как и в ранее описанных случаях для других объектов синхронизации, непосредственно обращаться к полям этого объекта не следует &#8212 необходимо пользоваться только вызовами, предлагаемыми в DDK.

Таблица 10.38. Прототип вызова ExInitializeFastMutex

VOID ExInitializeFastMutex IRQL &#60= DISPATCH_LEVEL
Параметры Инициализирует объект быстрого мьютекса
IN PFAST_MUTEX pFastMutex Указатель на место в нестраничной памяти, подготовленное инициатором данного вызова для объекта быстрого мьютекса
Возвращаемое значение void

В случае если запрос на владение вызовом ExAcquireFastMutex

удовлетворен быть не может (у объекта быстрого мьютекса уже есть владельцы), поток блокируется до наступления сигнального состояния. Блокируется также и процедура APC, адресованная данному программному потоку. При успешном завершении вызова поток инициатора вызова выполняется на уровне IRQL равном APC_LEVEL, а прежнее значение сохраняется в объекте быстрого мьютекса (оно будет восстановлено при освобождении объекта быстрого мьютекса вызовом ExReleaseFastMutex).

Таблица 10.39. Прототип вызова ExAcquireFastMutex

VOID ExAcquireFastMutex IRQL &#60 DISPATCH_LEVEL
Параметры Запрашивает владение объектом быстрого мьютекса
IN PFAST_MUTEX pFastMutex Указатель на объект быстрого мьютекса
Возвращаемое значение void

Таблица 10.40. Прототип вызова ExAcquireFastMutexUnsafe

VOID ExAcquireFastMutexUnsafe IRQL == APC_LEVEL
Параметры Запрашивает владение объектом быстрого мьютекса
IN PFAST_MUTEX pFastMutex Указатель на объект быстрого мьютекса
Возвращаемое значение void

В случае если запрос на владение вызовом ExAcquireFastMutexUnsafe

удовлетворен быть не может, поток блокируется до наступления сигнального состояния, однако, процедура APC, адресованная данному программному потоку, не блокируется.


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