讓我們來畫一下這個圖。如何模擬SCSI設備
Windows提供SCSI端口(總線)驅動程序。對於連接到總線(FILE_DEVICE_MASS_STORAGE
)的每個設備,驅動程序爲總線(FILE_DEVICE_BUS_EXTENDER
)和PDO
創建FDO
。我們將大容量存儲設備「連接」到PnP請求處理程序中的總線設備上。
Windows還提供了分層驅動程序(對於每個設備類)的類驅動程序。它爲每個子設備在PDO
之上形成設備堆棧FDO
。
類驅動程序發送內部ioctl到端口驅動程序;主功能碼爲IRP_MJ_SCSI
,次功能碼爲IRP_MN_SCSI_CLASS
,SCSI_REQUEST_BLOCK
結構中填寫請求專用信息。
端口驅動程序處理與設備的通信(將數據從SRB移動到設備/將數據從設備移動到SRB)並完成請求。
現在想象我們想要模擬scsi設備。我們需要開發「虛擬SCSI端口(總線)」驅動程序。對於我們將創建的每個設備(FILE_DEVICE_MASS_STORAGE
),此驅動程序將爲總線(FILE_DEVICE_BUS_EXTENDER
)和PDO
創建FDO
。我們將處理內部ioctls,執行irp隊列管理,將數據移入/移出SRB等。
我想了解爲了使Windows「認爲」SCSI設備是真實的(「so」它會出現在瀏覽器內等)。當我們創建設備時,類驅動程序會自動發送內部ioctl,還是需要模擬這些請求?
我的問題可能很愚蠢,但我需要掌握進一步瞭解的內容。感謝您的幫助。