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


функция обратного вызова EVT_WDF_OBJECT_CONTEXT_DESTROY (wdfobject.h)

[Относится к KMDF и UMDF]

Функция обратного вызова события EvtDe составнойCallback драйвера выполняет операции, связанные с удалением объекта платформы.

Синтаксис

EVT_WDF_OBJECT_CONTEXT_DESTROY EvtWdfObjectContextDestroy;

void EvtWdfObjectContextDestroy(
  [in] WDFOBJECT Object
)
{...}

Параметры

[in] Object

Дескриптор объекта платформы.

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

None

Remarks

Драйвер может указать функцию обратного вызова EvtDetraitsCallback в WDF_OBJECT_ATTRIBUTES структуре. Эта структура используется в качестве входных данных для всех методов платформы, создающих объекты платформы, таких как WdfDeviceCreate.

Платформа вызывает функцию обратного вызова EvtDeкистрацияCallback после того, как количество ссылок объекта было уменьшено до нуля. Платформа удаляет объект сразу после возврата функции обратного вызова EvtDeкистяCallback .

EvtDetextCallback может получить доступ к контексту объекта, но не может вызывать никакие методы для объекта .

Если драйвер предоставляет функцию обратного вызова EvtCleanupCallback и функцию обратного вызова EvtDegradCallback для объекта, платформа сначала вызывает функцию обратного вызова EvtCleanupCallback .

При удалении объекта платформа также удаляет дочерние элементы объекта. Платформа вызывает функции обратного вызова EvtCleanupCallback дочерних объектов перед вызовом функции обратного вызова EvtCleanupCallback родительского объекта. Затем, если количество ссылок дочернего элемента равно нулю, платформа вызывает функцию обратного вызова EvtDebackCallback дочернего объекта. Наконец, если число ссылок родительского объекта равно нулю, платформа вызывает функцию обратного вызова EvtDehoodCallback родительского объекта.

Когда драйвер создает объект, он иногда выделяет буферы памяти для конкретного объекта и сохраняет указатели буфера в пространстве контекста объекта. Функция обратного вызова EvtCleanupCallback или EvtDegradCallback драйвера может освободить эти буферы памяти.

Дополнительные сведения об удалении объектов платформы см. в разделе Жизненный цикл объектов платформы.

Как правило, платформа вызывает функцию обратного вызова EvtDeqlCallback в IRQL <= DISPATCH_LEVEL. Однако платформа вызывает функцию обратного вызова в IRQL = PASSIVE_LEVEL в следующих ситуациях:

  • Тип дескриптора объекта — WDFDEVICE, WDFDRIVER, WDFDPC, WDFINTERRUPT, WDFIOTARGET, WDFQUEUE, WDFSTRING, WDFTIMER или WDFWORKITEM.
  • Тип дескриптора объекта — WDFMEMORY или WDFLOOKASIDE, а драйвер указал PagedPool для параметра PoolTypeв значение WdfMemoryCreate или WdfLookasideListCreate.
Начиная с версии 1.9 платформы, файл заголовка wdfroletypes.h содержит некоторые альтернативные типы функций, зависящие от типа объекта, для функции обратного вызова EvtDe документCallback . Эти альтернативные типы помогают средствам проверки определить, правильно ли драйвер использует функцию обратного вызова. Используйте следующую таблицу, чтобы определить, какой тип функции использовать.
Тип объекта Тип функции
Объект устройства EVT_WDF_DEVICE_CONTEXT_DESTROY
Объект очереди ввода-вывода EVT_WDF_IO_QUEUE_CONTEXT_DESTROY_CALLBACK
File - объект EVT_WDF_FILE_CONTEXT_DESTROY_CALLBACK
Все прочие объекты EVT_WDF_OBJECT_CONTEXT_DESTROY

Требования

Требование Значение
Целевая платформа Универсальное
Минимальная версия KMDF 1,0
Минимальная версия UMDF 2,0
Верхняя часть wdfobject.h (включая Wdf.h)
IRQL См. раздел "Примечания".

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

EvtCleanupCallback

WDF_OBJECT_ATTRIBUTES