共用方式為


停止裝置以停用它 (Windows 98/Me)

在 Windows 98/Me 上,當 裝置管理員 停用裝置時,PnP 管理員會停止 IRP。 (Windows 2000 和更新版本的 Windows 問題,在此情況下) 移除 IRP

PnP 管理員會以下列順序傳送停止 IRP:

  1. PnP 管理員發出 IRP_MN_QUERY_STOP_DEVICE ,詢問裝置的驅動程式是否可以停止裝置。

    如果裝置堆疊中的所有驅動程式都會傳回STATUS_SUCCESS,則驅動程式已讓裝置進入狀態 (停止擱置中) ,以便快速停止裝置。

    PnP 管理員會視需要查詢許多裝置堆疊來停用裝置。

  2. 如果 IRP_MN_QUERY_STOP_DEVICE 成功,PnP 管理員會發出 IRP_MN_STOP_DEVICE 來停止裝置。

    只有在裝置先前的查詢停止 IRP 成功完成時,PnP 管理員才會傳送停止 IRP。 為了回應停止 IRP,驅動程式會釋出裝置的硬體資源 (,例如其 I/O 連接埠) ,並失敗需要存取裝置的任何 IRP。

  3. 如果 IRP_MN_QUERY_STOP_DEVICE 失敗,PnP 管理員會傳送 IRP_MN_CANCEL_STOP_DEVICE 來取消查詢。

    為了回應 IRP_MN_CANCEL_STOP_DEVICE,裝置的驅動程式會將裝置傳回啟動狀態,並繼續處理裝置的 I/O 要求。

    如果堆疊中有一個驅動程序失敗,PnP 管理員就會取消裝置堆疊的查詢停止。 當 PnP 管理員只取消一個裝置堆疊上的查詢停止時,它會傳送 IRP_MN_CANCEL_STOP_DEVICE 要求,因為查詢失敗的驅動程式上方的任何驅動程式都處於停止擱置狀態。 當 IRP_MN_CANCEL_STOP_DEVICE 成功時,驅動程式已將裝置傳回已啟動狀態。

當裝置停用時,其驅動程式無法將傳入的 IRP 排入佇列,因為無法保證裝置可能重新啟用。 因此,數據可能會遺失。