I'm studying on how to program a iSCSI initiator in Windows in C (like Open-iSCSI (Linux) or Starwind iSCSI initiator (Windows)). I've previously coded an iSCSI target and now I'm learning the opposite of it. I've already coded mostly initiator to target messages (login, read/write, etc.). My problem now is how to interface my iSCSI initiator to the SCSI subsystem in Windows, which takes care of sending which lba to read/write, send inquiry, modesense msgs. I've previously looked at other open source initiators like Open-iSCSI, and it is a kernel mode driver, which I'm guessing directly interfaces with SCSI subsystem in Linux, which I don't know how to do in windows.
Someone suggested SCSI Miniport driver, and I'm trying to look into that.
Can someone point me in the right direction? is there an API which hooks how the OS interfaces SCSI commands to a custom iSCSI initiator?
You might think I'm reinventing the wheel as there is already a built in iSCSI initiator on Windows, but there are some stripped down version of Windows which has the initiator removed, and also would like to learn how to create a custom iSCSI initiator on my own.