EVT_WDF_OBJECT_CONTEXT_DESTROY回呼函式 (wdfobject.h)

[適用於 KMDF 和 UMDF]

驅動程式的 EvtDestroyCallback 事件回 呼函式會執行與刪除架構對象相關聯的作業。

語法

EVT_WDF_OBJECT_CONTEXT_DESTROY EvtWdfObjectContextDestroy;

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

參數

[in] Object

架構物件的句柄。

傳回值

備註

驅動程式可以在WDF_OBJECT_ATTRIBUTES結構中指定 EvtDestroyCallback 回呼函式。 此結構會用來做為建立架構物件之所有架構方法的輸入,例如 WdfDeviceCreate

架構會在對象的參考計數遞減為零之後,呼叫 EvtDestroyCallback 回 呼函式。 架構會在 EvtDestroyCallback 回 呼函式傳回之後立即刪除物件。

EvtDestroyCallback 可以存取對象內容,但無法呼叫物件上的任何方法。

如果驅動程式同時提供 EvtCleanupCallback 回 呼函式和物件的 EvtDestroyCallback 回呼函式,架構會先呼叫 EvtCleanupCallback 回 呼函式。

刪除物件時,架構也會刪除物件的子系。 架構會先呼叫子物件的 EvtCleanupCallback 回 呼函式,再呼叫父物件的 EvtCleanupCallback 回 呼函式。 接下來,如果子系的參考計數為零,架構會呼叫子物件的 EvtDestroyCallback 回 呼函式。 最後,如果父系的參考計數為零,架構會呼叫父物件的 EvtDestroyCallback 回 呼函式。

當驅動程式建立物件時,有時會配置物件特定的記憶體緩衝區,並將緩衝區指標儲存在對象 的內容空間中。 驅動程式的 EvtCleanupCallbackEvtDestroyCallback 回 呼函式可以解除分配這些記憶體緩衝區。

如需刪除架構對象的詳細資訊,請參閱 Framework 物件生命週期

一般而言,架構會在 IRQL <= DISPATCH_LEVEL呼叫 EvtDestroyCallback 回呼函式。 不過,在下列情況下,架構會在 IRQL = PASSIVE_LEVEL呼叫回調函式:

  • 物件的句柄類型為 WDFDEVICE、WDFDRIVER、WDFDPC、WDFINTERRUPT、WDFIOTARGET、WDFQUEUE、WDFSTRING、WDFTIMER 或 WDFWORKITEM。
  • 物件的句柄類型是 WDFMEMORY 或 WDFLOPAGESIDE,而且驅動程式已將 PoolType 參數的 PagedPool 指定為 WdfMemoryCreateWdfLopoolsideListCreate
從架構 1.9 版開始, wdfroletypes.h 頭檔包含 EvtDestroyCallback 回 呼函式的一些替代物件類型特定函式類型。 這些替代類型可協助驗證工具判斷驅動程式是否使用回呼函式正確。 使用下表來判斷要使用的函式類型。
物件類型 函數類型
裝置物件 EVT_WDF_DEVICE_CONTEXT_DESTROY
I/O 佇列物件 EVT_WDF_IO_QUEUE_CONTEXT_DESTROY_CALLBACK
File 物件 EVT_WDF_FILE_CONTEXT_DESTROY_CALLBACK
所有其他物件 EVT_WDF_OBJECT_CONTEXT_DESTROY

規格需求

需求
目標平台 Universal
最低 KMDF 版本 1.0
最低UMDF版本 2.0
標頭 wdfobject.h (包含 Wdf.h)
IRQL 請參閱一節。

另請參閱

EvtCleanupCallback

WDF_OBJECT_ATTRIBUTES