Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Начиная с Windows 8.1 программа ExDeleteTimer удаляет объект таймера, созданный подпрограммой ExAllocateTimer. Этот объект таймера представляет собой структуру типа EX_TIMER, выделенную системой, члены которой являются непрозрачными для драйверов. Перед удалением объекта таймера ExDeleteTimer отключает дальнейшие операции с таймером на объекте и отменяет или завершает любую ожидающую или выполняющуюся операцию на этом объекте.
После вызова драйвера ExDeleteTimerэта подпрограмма выполняет несколько шагов, чтобы обеспечить безопасное удаление объекта таймера. Во-первых, ExDeleteTimer помечает объект таймера как отключенный, чтобы предотвратить запуск драйвера новой операции таймера, которая использует объект. После отключения объекта таймера вызов рутины ExSetTimer или ExCancelTimer немедленно возвращает FALSE и не выполняет никаких операций. Кроме того, второй вызов ExDeleteTimer возвращает FALSE и не производит никаких действий.
Затем ExDeleteTimer проверяет, находится ли таймер в состоянии ожидания после предыдущего вызова ExDeleteTimer. Отключение объекта таймера не отменяет таймер, который был установлен до отключения объекта. В любом из следующих двух случаев таймер, который ранее был задан, может истекть после отключения объекта таймера:
- Таймер является периодическим.
- Таймер является однократным (или неперидичным) и еще не истек.
Периодический таймер не может истечь более одного раза после отключения объекта таймера.
Если драйвер реализует подпрограмму обратного вызова ExTimerCallback, гарантировано, что параметр таймера этой подпрограммы всегда будет допустимым указателем на объект таймера (структура EX_TIMER), даже если таймер заканчивается после его отключения.
Если нет активного таймера, ExDeleteTimer удаляет объект таймера и завершает процесс без ожидания.
Если таймер находится в ожидании при вызове ExDeleteTimer, значения параметров Отмена и Ожидание, которые ваш драйвер предоставляет этой подпрограмме для управления её поведением. Параметр отмены сообщает ExDeleteTimer, следует ли отменить ожидающий таймер. Параметр ожидания сообщает ExDeleteTimer, следует ли ждать возврата до удаления объекта таймера.
Если Отмена равно FALSE, в этом случае Ожидание должно быть FALSE, и если таймер находится в ожидании, ExDeleteTimer позволит таймеру истечь до удаления объекта таймера. В этом случае ExDeleteTimer помечает объект таймера, чтобы указать, что он должен быть удален после истечения срока действия ожидающего таймера и завершения последнего вызова к подпрограмме ExTimerCallback. Затем exDeleteTimer возвращается, не ожидая завершения истечения срока действия таймера или удаления объекта.
Если Cancel установлено в TRUE, ExDeleteTimer пытается отменить ожидающий таймер до его окончания. ExDeleteTimer возвращает TRUE, если таймер успешно отменяется. ExDeleteTimer возвращает FALSE, если он не может отменить таймер, то есть для одноразового таймера, который уже истек или истекает. ExDeleteTimer также возвращает false, если таймер (однократный или периодический) был отменен до вызова ExDeleteTimer или если таймер никогда не был установлен.
Если отменаtrue и ожиданиеfalse, ExDeleteTimer никогда не блокирует вызывающий поток. Если объект таймера не может быть немедленно удален, ExDeleteTimer помечает объект таймера, указывающий, что он должен быть удален после завершения истечения срока действия таймера, и возвращается немедленно, не ожидая истечения срока действия таймера или удаления объекта.
Если Cancel и Wait оба TRUE, ExDeleteTimer блокирует вызывающий поток, если объект таймера не может быть немедленно удален. ExDeleteTimer при необходимости ожидает завершения истечения срока действия таймера и завершения любой рутины обратного вызова ExTimerCallback, реализованной драйвером. Затем ExDeleteTimer удаляет объект таймера и вызывает подпрограмму ExTimerDeleteCallback, если драйвер реализует эту подпрограмму. Наконец, ExDeleteTimer завершает выполнение.
Драйвер может вызывать ExDeleteTimer из подпрограммы ExTimerCallback драйвера, которая выполняется в IRQL = DISPATCH_LEVEL, но драйвер должен задать параметр Wait в этом вызове FALSE.
В качестве параметра драйвер может реализовать ExTimerDeleteCallback подпрограмму обратного вызова, которая выполняется после удаления объекта таймера. Как правило, ExTimerDeleteCallback освобождает все системные ресурсы, выделенные драйвером для использования с объектом таймера.
ExDeleteTimer планирует процедуру ExTimerDeleteCallback, реализованную драйвером, для выполнения после удаления объекта таймера, в этот момент указатель на этот объект уже не действителен. Если параметр WaitTRUE в вызове ExDeleteTimer, обратный вызов ExTimerDeleteCallback завершается прежде чем ExDeleteTimer возвращает. Если ожидание равно FALSE, подпрограмма ExTimerDeleteCallback может выполниться до или после возврата ExDeleteTimer.
Для получения дополнительной информации см. ExXxxТаймер процедур и объектов EX_TIMER.