gpt4 book ai didi

windows - 如何模拟SCSI设备

转载 作者:行者123 更新时间:2023-12-03 11:12:55 34 4
gpt4 key购买 nike

让我们勾勒一下图片。

Windows提供了SCSI端口(总线)驱动程序。驱动程序为总线创建FDO(FILE_DEVICE_BUS_EXTENDER),并为每个连接到总线的设备创建PDO(FILE_DEVICE_MASS_STORAGE)。我们将大容量存储设备“连接”到PnP请求处理程序内的总线设备。

Windows还提供了类驱动程序(针对每个设备类),该类驱动程序位于端口驱动程序之上。它为每个子设备在FDO的顶部加上PDO形成设备堆栈。

类驱动程序将内部ioctl发送到端口驱动程序;主要功能代码为IRP_MJ_SCSI,次要功能代码为IRP_MN_SCSI_CLASSSCSI_REQUEST_BLOCK结构填充有特定于请求的信息。

端口驱动程序处理与设备的通信(将数据从SRB移至设备/将数据从设备移至SRB)并完成请求。

现在想象我们要模拟scsi设备。我们需要开发“虚拟SCSI端口(总线)”驱动程序。该驱动程序将为总线创建FDO(FILE_DEVICE_BUS_EXTENDER),并为我们将创建的每个设备创建PDO(FILE_DEVICE_MASS_STORAGE)。我们将处理内部ioctl,执行irp队列管理,将数据移入或移出SRB等。

我想了解必须满足什么“条件”才能使Windows“认为” SCSI设备是真实的(以便它会出现在资源管理器等内部)。创 build 备后,类驱动程序会自动发送内部ioctl还是需要模拟这些请求?

我的问题可能很愚蠢,但我需要掌握最新情况以了解更多信息。谢谢您的帮助。

最佳答案

这样看来很简单。
IRP_MN_QUERY_DEVICE_RELATIONS请求(发送到bus FDO)处理程序将子PDO连接到bus FDO
IRP_MN_QUERY_ID请求(发送给子PDO)处理程序报告设备标识符,包括设备类型。参见https://docs.microsoft.com/en-us/windows-hardware/drivers/install/identifiers-for-scsi-devices

现在,Windows可以选择适当的类驱动程序以将其放在顶部。所以堆栈看起来像这样:

{User App}

[File System Driver]

[Class Driver]

[Bus Driver]

{Physical/Virtual Device}

然后,类驱动程序会将内部ioctl发送给我们的总线驱动程序。我们仍然可以自行发送此ioctl,例如绕过类驱动程序。参见 IOCTL_SCSI_PASS_THROUGHIOCTL_SCSI_PASS_THROUGH_DIRECT控制代码文档;很明显,我们可以绕过类驱动程序。

关于windows - 如何模拟SCSI设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45016769/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com