共用方式為


PFLT_INSTANCE_TEARDOWN_CALLBACK回呼函式 (fltkernel.h)

minifilter 驅動程式可以註冊兩個類型 PFLT_INSTANCE_TEARDOWN_CALLBACK 例程作為迷你篩選驅動程式的 InstanceTeardownStartCallbackInstanceTeardownCompleteCallback 例程。

語法

PFLT_INSTANCE_TEARDOWN_CALLBACK PfltInstanceTeardownCallback;

void PfltInstanceTeardownCallback(
  [in] PCFLT_RELATED_OBJECTS FltObjects,
  [in] FLT_INSTANCE_TEARDOWN_FLAGS Reason
)
{...}

參數

[in] FltObjects

FLT_RELATED_OBJECTS 結構的指標,其中包含與目前 I/O 作業相關的物件不透明指標。

[in] Reason

旗標,指出為什麼小型篩選驅動程序實例正在損毀。 下列其中一項:

意義
FLTFL_INSTANCE_TEARDOWN_MANUAL (0x00000001) 實例正在中斷連結,因為使用者模式應用程式已呼叫 FilterDetach,或核心模式元件已呼叫 FltDetachVolume
FLTFL_INSTANCE_TEARDOWN_FILTER_UNLOAD (0x00000002) 正在卸除迷你篩選驅動程式。
FLTFL_INSTANCE_TEARDOWN_MANDATORY_FILTER_UNLOAD (0x00000004) 正在卸除迷你篩選驅動程式。
FLTFL_INSTANCE_TEARDOWN_VOLUME_DISMOUNT(0x00000008) 如果設定,則會卸除磁碟區。 (或者磁碟區已經卸除。或者磁碟區掛接作業失敗。或小型篩選驅動程序實例或磁碟區正在損毀。或者檔案系統將本身取消註冊為使用中的檔案系統。)
FLTFL_INSTANCE_TEARDOWN_INTERNAL_ERROR (0x00000010) 系統發生非預期的內部錯誤。

傳回值

沒有

言論

當小型篩選驅動程式透過從其 DriverEntry 例程呼叫 FltRegisterFilter 來註冊自己時,它可以將兩個類型為PFLT_INSTANCE_TEARDOWN_CALLBACK類型的例程註冊為迷你篩選驅動程式的 InstanceTeardownStartCallbackInstanceTeardownCompleteCallback 例程。 若要註冊這些回呼例程, minifilter 驅動程式會在 InstanceTeardownStartCallbackInstanceTeardownCompleteCallback minifilter 驅動程式傳遞的 FLT_REGISTRATION 結構成員中儲存兩個類型PFLT_INSTANCE_TEARDOWN_CALLBACK例程的位址,FltRegisterFilter註冊 參數。

InstanceTeardownStartCallbackInstanceTeardownCompleteCallback 例程是選擇性的,而且可以 NULL。 如果 minifilter 驅動程式為 InstanceTeardownStartCallbackInstanceTeardownCompleteCallback 例程指定 NULL,實例仍會中斷。

InstanceTeardownStartCallback 例程會在篩選管理員開始卸除小型篩選驅動程序實例時呼叫,以允許小型篩選驅動程式完成任何畫筆 I/O 作業並儲存狀態資訊。

InstanceTeardownStartCallback 例程必須:

  • 呼叫 FltCompletePendedPreOperation,以取得小型篩選驅動程式預先作回呼例程中每個 I/O 作業,以完成作業或將作業的控制傳回給篩選管理員。
  • 未畫上任何新的 I/O 作業。 如果迷你篩選驅動程式使用回呼數據佇列,則必須呼叫 FltCbdqDisable 加以停用。
  • 針對小型篩選驅動程式後置回呼例程中每個 I/O 作業呼叫 FltCompletePendedPostOperation,以將作業的控制傳回至篩選管理員。

InstanceTeardownStartCallback 例程可以選擇性地執行下列動作,以允許小型篩選驅動程式儘快卸除:

  • 關閉任何開啟的檔案。
  • 請確定背景工作線程只會執行完成未處理工作專案所需的最小值。
  • 呼叫 FltCancelIo,以取消迷你篩選驅動程式所起始的任何 I/O 作業。
  • 停止佇列新的工作專案。

一旦呼叫迷你篩選驅動程式的 InstanceTeardownStartCallback 例程之後,不會針對任何新的 I/O 作業呼叫迷你篩選驅動程式的預先作和後續作回呼例程。 不過,針對啟動實例卸除之前啟動的 I/O 作業,可能會呼叫它們。

當卸除程式完成時,會呼叫 InstanceTeardownCompleteCallback 例程,以允許小型篩選驅動程式關閉開啟的檔案,並執行任何其他必要的清除處理。

InstanceTeardownCompleteCallback 例程必須關閉迷你篩選驅動程式開啟的任何檔案。

篩選管理員只會在所有未完成的 I/O 作業完成或清空之後,才呼叫迷你篩選驅動程式的 InstanceTeardownCompleteCallback 例程。

警告

如果下列任一條件成立,則不會呼叫 InstanceTeardownCompleteCallback 例程:

  • 有未完成的畫筆 I/O 作業。
  • 迷你篩選驅動程式起始的任何未完成 I/O 作業。

如果小型篩選驅動程序實例因為正在卸除小型篩選驅動程式而中斷,卸除作業會顯示為停止回應,直到 InstanceTeardownCompleteCallback 例程傳回為止。 若要對這類問題進行偵錯,您應該在迷你篩選驅動程式上啟用 驅動程式驗證器。 篩選驗證程式 I/O 驗證 選項可協助識別可能的原因,例如未發行的參考,以防止小型篩選驅動程式卸除。 如需詳細資訊,請參閱 Filter Verifier

請注意,參考實例(藉由呼叫 FltObjectReference),並不會防止呼叫 InstanceTeardownCompleteCallback 例程。

篩選管理員會在 IRQL PASSIVE_LEVEL 呼叫 InstanceTeardownStartCallbackInstanceTeardownCompleteCallback 例程。

要求

要求 價值
目標平臺 桌面
標頭 fltkernel.h (包括 Fltkernel.h)
IRQL 請參閱一節。

另請參閱

FLT_REGISTRATION

FLT_RELATED_OBJECTS

FilterDetach

FltCancelIo

FltCbdqDisable

FltCompletePendedPostOperation

FltCompletePendedPreOperation

FltDetachVolume

FltObjectReference

FltRegisterFilter

PFLT_INSTANCE_QUERY_TEARDOWN_CALLBACK

PFLT_INSTANCE_SETUP_CALLBACK