EVT_SERCX_FILECLEANUP回呼函式 (sercx.h)
EvtSerCxFileCleanup 事件回呼函式會通知序列控制器驅動程式用戶端已關閉代表序列控制器裝置之檔案對象的最後一個句柄。
語法
EVT_SERCX_FILECLEANUP EvtSercxFilecleanup;
void EvtSercxFilecleanup(
[in] WDFDEVICE Device
)
{...}
參數
[in] Device
代表序列控制器之架構裝置物件的WDFDEVICE句柄。
傳回值
沒有
言論
此函式可以解除分配驅動程式先前配置給檔案物件存留期的特定系統資源。 與 EvtSerCxFileClose 函式一起使用,EvtSerCxFileCleanup 函式應該會從已準備好接收和傳輸數據的狀態中移除序列控制器裝置。 EvtSerCxFileCleanup 函式應該特別著重於清除工作,例如解除分配記憶體。
如果序列控制器驅動程式先前只配置記憶體給現在關閉之檔案物件的存留期,驅動程式應該會在 EvtSerCxFileCleanup 或 EvtSerCxFileClose 函式中解除分配此記憶體。
一般而言,只有在釋放檔案對象之後,才應該停用中斷。 因此,EvtSerCxFileClose 函式,而不是 EvtSerCxFileCleanup 函式,應該停用中斷。
SerCx 會在關閉檔案對象的最後一個句柄之後,呼叫驅動程式的 EvtSerCxFileCleanup 函式。 由於未處理的 I/O 要求,因此可能尚未釋放此物件。 在此呼叫之後,驅動程式不會收到I/O作業的新要求。
SerCx 會在呼叫驅動程式的 EvtSerCxFileCleanup 函式之後,呼叫驅動程式的 EvtSerCxFileClose 函式。 SerCx 會在釋放檔案對象之後呼叫 EvtSerCerCxFileClose 函式,只有在完成或取消所有未完成的 I/O 要求時才會發生。
EvtSerCxFileCleanup 函式是選擇性的。 如果序列控制器驅動程式未實作此函式,驅動程式的 EvtSerCxFileClose 函式必須處理最後一個檔句柄關閉之後所需的所有清除工作。
若要註冊 EvtSerCxFileCleanup 回呼函式,驅動程式必須呼叫 SerCxInitialize 方法。
如需詳細資訊,請參閱 Framework File Objects。
例子
此回呼的函式類型會在 Sercx.h 中宣告,如下所示。
typedef VOID
EVT_SERCX_FILECLEANUP(
__in WDFDEVICE Device
);
若要定義名為 MyEvtSerCxFileCleanup
EvtSerCxFileCleanup 回呼函式,您必須先提供函式宣告,靜態驅動程序驗證器 (SDV) 和其他驗證工具需要,如下所示。
EVT_SERCX_FILECLEANUP MyEvtSerCxFileCleanup;
然後,如下所示實作您的回呼函式。
VOID
MyEvtSerCxFileCleanup(
__in WDFDEVICE Device
)
{ ... }
如需函數宣告之 SDV 需求的詳細資訊,請參閱 使用 KMDF 驅動程式的函式角色類型來宣告函式。
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | 從 Windows 8 開始提供。 |
目標平臺 | 桌面 |
標頭 | sercx.h |
IRQL | 在 IRQL <= DISPATCH_LEVEL 呼叫 |