Yesterday I mentioned having Windows permission issues with a blood glucose meter that mounts as a mass storage device. After reading that someone else experienced the exact same issue while building a disk image write for Windows using Node.js/Electron, I don't feel so alone anymore.
I think I finally figured out what's going on. To make a long story short, Windows allows you to open a physical drive (e.g.
\\.\PhysicalDrive1) with an exclusive lock even if there's a mounted volume, but then doesn't permit you to write to it. If you try to open using the logical name or mounted volume (e.g.
\\.\E:) with an exclusive lock flag (
O_EXLOCK), it fails with the error "Resource busy or locked", but if you use
FSCTL_LOCK_VOLUME to lock the volume after you opened it, it works!
It looks like one reason for this confusion is because of how Windows handles removable media differently, based on this comment from Jonas Hermsmeier:
Just remembered that the
\\.\PhysicalDriveNonly works for (things that act like) hard drives, not removable media. If something acts like a removable disk (or floppy, CD-ROM, etc.),
\\.\X:opens the raw drive. This is due to the SD Card reader (for example) being the actual physical device, I believe. So it depends heavily on the device type.