On Mac OS X we might need the device string again and search in the registry with that. In that case we do need a different mechanisms anyways.

So maybe a struct with an int (file descriptor) and HANDLE (handle) is the choice here. We only assign what we need on the platform and add a string pointer for Mac OS X later.
That would be the argument for isrc_raw and for scsi_cmd. isrc_raw is used in the platform implementation (setting what we need in the struct), and then scsi_cmd is implemented for the platform, using the value set for isrc_raw.
Similar for all scsi functions then (non-raw isrc).