驅動程式對 PnP 的支援

Driver 實作 PnP dispatch routine、power management routine 及 add-device routine 來支援 PnP 操作。當相對應 device 被新增進系統時,PnP manager 會呼叫 driver 的 add-device routine。但 function 或 filter driver 並不在 add-device routine 與 device 溝通。Driver 會等待 PnP manager 送一個 start-device 命令至 PnP dispatch routine 中,這個命令中包括 resource 要如何分配等的資訊。start-device 命令之後,device 才為 started 狀態。

如果 device 被使用者移除,PnP manager 會送一個 query-remove 命令給應用程式及相對應的 driver。Driver 可以根據目前是否有 pending I/O operation,來決定是要接受或拒絕這個 query-remove 命令。如果 driver 接受這個命令(代表可以安全地移除裝置),PnP manager 接著送一個 remove 命令,代表裝置進入 removed 狀態。

如果 device resource 需要重新 assign。PnP manager 會送 query-stop 命令,詢問裝置是否能暫時停止對裝置的存取。同樣的,driver 也可以拒絕這個命令。如果接受了,那麼代表沒有任何的 pending request 存在。Driver 通常會 queue 住後來的 request,這樣對正在存取裝置的應用程式才是透明的。之後,PnP manager 送出 stop 命令,並可以請 driver 使用不同的 resource。接著,PnP manager 再送出 start-device 命令。

如果使用者突然拔出裝置,PnP manager 會送出 surprise-remove 命令,通知 driver 必需停止任何對裝置的存取。

留言

熱門文章