如何将我的 iSCSIinitiator 连接到 windows 中的 scsi 子系统

How to interface my iSCSIinitiator to scsi subsystem in windows

我正在研究如何在 Windows 中用 C 编写 iSCSI 启动器(如 Open-iSCSI (Linux) 或 Starwind iSCSI 启动器 (Windows))。我以前编写过一个 iSCSI 目标,现在我正在学习它的反面。我已经将大部分发起者编码为目标消息(登录、read/write 等)。我现在的问题是如何将我的 iSCSI 启动器连接到 Windows 中的 SCSI 子系统,它负责将哪个 lba 发送到 read/write、发送查询、modesense 消息。我以前看过其他开源启动器,如 Open-iSCSI,它是一个内核模式驱动程序,我猜它直接与 Linux 中的 SCSI 子系统接口,我不知道如何在windows.

有人建议使用 SCSI 微型端口驱动程序,我正在努力研究。

有人能指出我正确的方向吗?是否有一个 API 挂钩 OS 如何将 SCSI 命令接口到自定义 iSCSI 启动器?

您可能认为我是在重新发明轮子,因为 Windows 上已经有一个内置的 iSCSI 启动器,但是 Windows 的一些精简版本删除了启动器,并且也想学习如何自己创建自定义 iSCSI 启动器。

我建议推动 StarWind 人员将他们的 iSCSI 启动器送给您,以便进行维护/扩展。它是作为单片 SCSI 端口编写的(超快!),并且不受 Microsoft 支持,因此 MSFT 绝不会按原样接受它用于生产。在这里 Ping 他们:

https://forums.starwindsoftware.com/viewforum.php?f=4&sid=a76a36e594767d2d6e8cb0d97a9c2f91

或者您需要查看所谓的 "Virtual StorPort miniport",因为它是 Microsoft 为虚拟存储驱动程序设计的 "blessed"。参见:

https://code.msdn.microsoft.com/windowshardware/WDKStorPortVirtualMiniport-973650f6

这对您来说应该是一个好的开始,从 Open-iSCSI 移植 iSCSI 堆栈并非易事但可行:)

祝你好运!