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




Семафоры - часть 2


таблицу 10.32), но и область памяти под будущий объект, выделенную, например, вызовом ExAllocatePool.

Таблица 10.32. Прототип вызова KeInitializeSemaphore

VOID KeInitializeSemaphore IRQL == PASSIVE_LEVEL
Параметры Инициализирует объект семафора и устанавливает текущее значение его счетчика и предельное значение, которого этот счетчик может достигать
IN PKSEMAPHORE pSemaphore Указатель на область, подготовленную для объекта семафора
IN LONG CountValue Текущее (начальное) значение счетчика
IN LONG CountLimit Предел для значений счетчика (должно быть положительным)
Возвращаемое значение void

Вызов KeReadStateSemaphore получает указатель на объект семафора и возвращает значение типа LONG, равное текущему значению счетчика семафора. Соответственно, нулевое возвращенное значение указывает на то, что семафор пребывает в несигнальном состоянии. Вызов KeReadStateSemaphore может выполняться на любом уровне IRQL, что однозначно указывает на то, какие правила применяет система к объекту семафора: он непременно должен размещаться в области нестраничной памяти.

Параметры вызова KeReleaseSemaphore описаны в таблице 10.33.

Таблица 10.33. Прототип вызова KeReleaseSemaphore

VOID KeReleaseSemaphore IRQL == PASSIVE_LEVEL
Параметры Инициализирует объект семафора и устанавливает текущее значение его счетчика и предельное значение, которого этот счетчик может достигать
IN PKSEMAPHORE pSemaphore Указатель на область, подготовленную для объекта семафора
IN LONG CountValue Текущее (начальное) значение счетчика
IN LONG CountLimit Предел для значений счетчика (должно быть положительным)
Возвращаемое значение void




Содержание  Назад  Вперед