Диспетчерские объекты
Таблица 8. Диспетчерские объекты
| Тип Объекта | Переход в сигнальное состояние | Результат для ожидающих потоков | |||
| Мьютекс (Mutex) | Освобождение мьютекса | Освобождается один из ожидающих потоков
| |||
| Семафор (Semaphore) | Счетчик захватов становится ненулевым | Освобождается некоторое число ожидающих потоков | |||
| Событие синхрониза ции (Synchronization events) | Установка события в сигнальное состояние | Освобождается один из ожидающих потоков | |||
| Событие оповещения (Notification event) | Установка события в сигнальное состояние | Освобождаются все ожидающие потоки | |||
| Таймер синхронизации (Synchronization timer) | Наступило время или истек интервал | Освобождается один из ожидающих потоков | |||
| Таймер оповещения (Notification timer) | Наступило время или истек интервал | Освобождаются все ожидающие потоки | |||
| Процесс | Завершился последний поток процесса | Освобождаются все ожидающие потоки | |||
| Поток | Поток завершился | Освобождаются все ожи дающие потоки | |||
| Файл | Завершена операция ввода/вывода | Освобождаются все ожидающие потоки |
Диспетчерские объекты управляются Диспетчером объектов. Как и все объекты Диспетчера объектов, они могут иметь имена в пространстве имен Диспетчера объектов. С помощью этого имени различные драйвера и прикладные программы могут обращаться к соответствующему объекту. Кроме того, каждый процесс имеет таблицу описателей, связанных с конкретным объектом. Как уже говорилось, описатель в таблице описателей уникален и имеет смысл только в контексте конкретного процесса. Однако Диспетчер объектов предоставляет функцию ObReferenceObjectByHandle(), которая дает возможность получения указателя на объект по его описателю. Эту функцию, как следует из вышесказанного, можно использовать только в контексте известного процесса (для которого создавался описатель), а полученный указатель на объект уже можно использовать в случайном контексте. Чтобы такой объект впоследствии мог быть удален, по окончании его использования должна быть вызвана функция ObDereference Object().