突然の取り外しのシーケンス
デバイス マネージャーやハードウェアの安全な取り外しユーティリティを使用せずに、単にプラグを抜くことによって、ユーザーが警告なしにデバイスを取り外した場合、デバイスは「突然取り外された」とみなされます。この場合、フレームワークは通常とは異なる取り外しシーケンスに従います。 また、デバイスがまだ物理的に存在する場合でも、別のドライバーがデバイス上で IoInvalidateDeviceState を呼び出す場合は、突然の取り外しシーケンスに従います。 突然の取り外しシーケンスでは、フレームワークは、取り外しシーケンス内の他のコールバックを呼び出す前に、EvtDeviceSurpriseRemoval コールバックを呼び出します。 シーケンスが完了すると、フレームワークはデバイス オブジェクトを破棄します。 すべてのリムーバブル デバイスのドライバーは、シャットダウン パスとスタートアップ パスの両方のコールバックが、特にハードウェアの取り外しによって引き起こされる障害を処理できることを確認する必要があります。 ハードウェアへのアクセスを試みると、無期限に待機する必要はありませんが、タイムアウトまたはウォッチドッグ タイマーが発生する可能性があります。
次の図は、突然の取り外しに関連するコールバックを示しています。
デバイスが取り外されたときにデバイスが動作状態ではなかった場合、フレームワークは EvtDeviceSurpriseRemoval の直後に EvtDeviceReleaseHardware イベント コールバックを呼び出します。 デバイスが作業状態から終了したときに既に実行された、介在するステップを省略します。