Christian Franke via Cygwin wrote:
Ilya Basin via Cygwin wrote:
Hi.
I was trying to write an .img file to a VeraCrypt drive.
VeraCrypt doesn't create a virtual PhysicalDrive so tools like Rufus don't see it. I hoped that with cygwin I would be able to do that, but Cygwin only creates /dev/sd?? nodes for PhysicalDrive partitions. I tried `dd` with '\\.\X:', but it can't open for writing because it treats it as a directory (reading succeeds).

$ dd count=1 if='\\.\E:' | xxd
1+0 records in
1+0 records out
512 bytes copied, 0.0213007 s, 24.0 kB/s
00000000: eb52 904e 5446 5320 2020 2000 0208 0000  .R.NTFS .....
...

$ dd if=/dev/null count=0 of='\\.\E:'
dd: failed to open '\\.\E:': Is a directory

Could reproduce this. The inconsistency between open for reading vs. writing of '\\.\E:' is actually interesting. Subtle bug in Cygwin?



'\\.\X:' is mapped to NT path '\??\X:' internally. It is (mis-?)detected as a directory. Open for write then fails intentionally:

int
fhandler_base::open_fs (int flags, mode_t mode)
{
  /* Unfortunately NT allows to open directories for writing, but that's
     disallowed according to SUSv3. */
  if (pc.isdir () && (flags & O_ACCMODE) != O_RDONLY)
    {
      set_errno (EISDIR);
      return 0;
    }
  ...
}

stat() apparently returns garbage (X: is a mount point of a 1MiB VeraCrypt file with FAT FS):

$ stat '\\.\X:'
  File: \\.\X:
  Size: 140720951294304 Blocks: 1          IO Block: 65536  regular file
Device: 0,195   Inode: 264012044753263394  Links: 0
Access: (0644/-rw-r--r--)  Uid: ( 1000/  franke)   Gid: (  513/ none)
Access: 1601-01-01 01:22:04.,'-((0,00 +0053
Modify: 1601-01-01 01:22:04.+0/+'-,00 +0053
Change: 1601-01-01 00:53:29.'''''--00 +0053
 Birth: -

$ ls -l /proc/sys/DosDevices/X:
lr--r--r-- 1 ... /proc/sys/DosDevices/X: -> /proc/sys/Device/VeraCryptVolumeX

--
Regards,
Christian


--
Problem reports:      https://cygwin.com/problems.html
FAQ:                  https://cygwin.com/faq/
Documentation:        https://cygwin.com/docs.html
Unsubscribe info:     https://cygwin.com/ml/#unsubscribe-simple

Reply via email to