EVT_SERCX_FILECLEANUP コールバック関数 (sercx.h)
EvtSerCxFileCleanup イベント コールバック関数は、クライアントがシリアル コントローラー デバイスを表すファイル オブジェクトへの最後のハンドルを閉じたことをシリアル コントローラー ドライバーに通知します。
構文
EVT_SERCX_FILECLEANUP EvtSercxFilecleanup;
void EvtSercxFilecleanup(
[in] WDFDEVICE Device
)
{...}
パラメーター
[in] Device
シリアル コントローラーを表すフレームワーク デバイス オブジェクトへの WDFDEVICE ハンドル。
戻り値
なし
解説
この関数は、ドライバーがファイル オブジェクトの有効期間中に以前に割り当てた特定のシステム リソースの割り当てを解除できます。 EvtSerCxFileClose 関数と組み合わせて、EvtSerCxFileCleanup 関数は、シリアル コントローラー デバイスをデータの受信と送信の準備ができている状態から削除する必要があります。 EvtSerCxFileCleanup 関数は、メモリの割り当て解除などのクリーンタスクに特に焦点を当てる必要があります。
シリアル コントローラー ドライバーが以前に、現在閉じているファイル オブジェクトの有効期間中のみメモリを割り当てた場合、ドライバーは EvtSerCxFileCleanup 関数または EvtSerCxFileClose 関数のいずれかでこのメモリの割り当てを解除する必要があります。
通常、割り込みは、ファイル オブジェクトが解放された後にのみ無効にする必要があります。 したがって、 EvtSerCxFileCleanup 関数ではなく、 EvtSerCxFileClose 関数は割り込みを無効にする必要があります。
SerCx は、ファイル オブジェクトへの最後のハンドルが閉じられた後、ドライバーの EvtSerCxFileCleanup 関数を呼び出します。 未処理の I/O 要求のため、このオブジェクトはまだ解放されていない可能性があります。 この呼び出しの後、ドライバーは I/O 操作に対する新しい要求を受信しません。
SerCx は、ドライバーの EvtSerCxFileCleanup 関数を呼び出した後、ドライバーの EvtSerCxFileClose 関数を 呼び出します。 SerCx は、ファイル オブジェクトが解放された後に EvtSerCxFileClose 関数を呼び出します。これは、未処理のすべての I/O 要求が完了または取り消された場合にのみ発生します。
EvtSerCxFileCleanup 関数は省略可能です。 シリアル コントローラー ドライバーがこの関数を実装していない場合、ドライバーの EvtSerCxFileClose 関数は、最後のファイル ハンドルを閉じた後に必要なすべてのクリーンアップ タスクを処理する必要があります。
EvtSerCxFileCleanup コールバック関数を登録するには、ドライバーで SerCxInitialize メソッドを呼び出す必要があります。
詳細については、「 フレームワーク ファイル オブジェクト」を参照してください。
例
このコールバックの関数型は、次のように 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 以降で使用できます。 |
対象プラットフォーム | デスクトップ |
Header | sercx.h |
IRQL | IRQL <= DISPATCH_LEVEL で呼び出されます |