Таблица 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 |