You use the same API to read and write to To read raw data from a Volume in Windows that you use for ordinary file io. The difference is in the open call.
CreateFile("\.\M:", GENERIC_READ | GENERIC_WRITE, ...)
Will open drive M: for raw read and write. I've never tried it, but you might be able to get away with passing "\.\M:" as the filename to one of the stream open functions in C#, it might work. But you would be wiser to write at least the file io part of the project in unmanaged code.
See the CreateFile documentation for more information. look for the section
Physical Disks and Volumes
Direct access to the disk or to a volume is restricted. For more information, see "Changes to the file system and to the storage stack to restrict direct disk access and direct volume access in Windows Vista and in Windows Server 2008" in the Help and Support Knowledge Base at