![]() ![]() It took me a long time to figure all this out and to put it to use (read: more than just a year or two), because 99%+ of web searches for topics on "CD burning" either yield results for applications like Nero or Operating System features like the Windows Image Mastering API (IMAPI), and for that 1% that talks about SCSI, I probably ignored them, thinking they were irrelevant. (How exactly this occurs, I still don't know.) ![]() Although it is true that most computers nowadays use the Advanced Technology Attachment (ATA) standard for peripheral devices, it happens that we can also use SCSI commands to communicate with them. In fact, it also turns out that these specifications are useful for communicating with non-multimedia devices (as CD/DVD drives are called) as well, including block devices (e.g., hard disks) and stream devices (e.g., tapes). Notice the word SCSI? It turns out that CD burning is related to the Small Computer System Interface specifications published by the T10 Committee. It turns out, however, that in the NT family of Windows (including Windows NT, 2000, XP, Vista, 7, etc.), there is a nice generic function that exists precisely for bypassing the OS: DeviceIoControl(), using the IOCTL_SCSI_PASS_THROUGH_DIRECT control code. Over time, companies have used different methods to achieve this, in most cases by writing their own kernel-mode drivers and communicating with the device directly. Because of this fact, the only way they can do so is to send commands directly to the drive, bypassing most drivers between the application and the device. Have you ever wondered how CD/DVD burning programs like Nero and Roxio work? They can't just treat CDs as hard disks and write to them Windows, at least, doesn't support using file writing functions to write to optical drives. Download latest version of source code and binary. ![]()
0 Comments
Leave a Reply. |