Поделиться через


Функция EngDeleteDriverObj (winddi.h)

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

Синтаксис

ENGAPI BOOL EngDeleteDriverObj(
  HDRVOBJ hdo,
  BOOL    bCallBack,
  BOOL    bLocked
);

Параметры

hdo

Дескриптор для удаляемого объекта драйвера. Этот дескриптор GDI был получен из EngCreateDriverObj.

bCallBack

Указывает, следует ли вызывать обратный вызов очистки. Если задано значение TRUE, GDI вызывает обратный вызов очистки перед удалением DRIVEROBJ из диспетчера дескрипторов. Если значение FALSE, GDI не делает этого. Если функция обратного вызова возвращает ошибку, EngDeleteDriverObj завершится ошибкой.

bLocked

Указывает, был ли объект заблокирован драйвером (путем вызова EngLockDriverObj) до вызова EngDeleteDriverObj . Если задано значение TRUE, объект был заблокирован; Значение false, объект не заблокирован.

Возвращаемое значение

Возвращаемое значение равно TRUE , если функция выполнена успешно и дескриптор освобожден; Если дескриптор не был освобожден, имеет значение FALSE . Если функция драйвера pFreeObjProc , указанная в EngCreateDriverObj , возвращает значение FALSE, то EngDeleteDriverObj завершится ошибкой и дескриптор не будет освобожден. Это может произойти, если обратный вызов очистки должен заблокировать другую структуру DRIVEROBJ (чтобы освободить текущую структуру DRIVEROBJ) и завершается сбоем, так как другая структура DRIVEROBJ используется другим потоком.

Комментарии

После освобождения дескриптора связанный ресурс драйвера больше не отслеживается GDI, а функция, на которую указывает параметр pFreeObjProcEngCreateDriverObj , не будет вызываться при завершении процесса. Ответственность за освобождение ресурса лежит на драйвере.

Большинство драйверов должны быть последовательными в способе очистки объектов во время завершения. Следовательно, они передают значение TRUE для bCallback, указывая GDI, что он должен вызвать функцию очистки драйвера, чтобы освободить этот ресурс драйвера.

Параметр bCallBack указывает GDI, нужно ли вызывать функцию обратного вызова. Передача true для bCallBack указывает GDI вызвать функцию очистки драйвера, чтобы освободить этот ресурс драйвера. Если передать значение FALSE , GDI не будет вызывать функцию очистки. Если pFreeObjProc возвращает значение FALSE, EngDeleteDriverObj завершается ошибкой, и дескриптор не будет освобожден. Например, это может произойти, если pFreeObjProc необходимо заблокировать другую структуру DRIVEROBJ, чтобы освободить текущую структуру DRIVEROBJ, и произошел сбой, так как структура использовалась другим потоком. PFreeObjProc никогда не должен завершать ошибку во время очистки, так как ни один поток, кроме потока очистки, не выполняется, поэтому блокировки других объектов не завершаются ошибкой.

Параметр bLocked указывает GDI, что объект уже был заблокирован драйвером один раз. Часто перед удалением объекта драйвер может заблокировать его для использования в первую очередь. Это позволяет драйверу вызывать GDI без предварительной разблокировки объекта, что исключает возможность того, что другой поток может войти в драйвер и заблокировать его до освобождения дескриптора.

Требования

   
Минимальная версия клиента Доступно в Windows 2000 и более поздних версиях операционных систем Windows.
Целевая платформа Универсальное
Верхняя часть winddi.h (включая Winddi.h)
Библиотека Win32k.lib
DLL Win32k.sys

См. также раздел

DRIVEROBJ

EngCreateDriverObj