Duplicates in /proc/partitions
Corinna Vinschen
corinna-cygwin@cygwin.com
Thu Aug 19 09:37:44 GMT 2021
On Aug 18 18:18, Lavrentiev, Anton (NIH/NLM/NCBI) [C] via Cygwin wrote:
> > printf ("%5d %5d %9llu sd%c (%lu, %ls)\n",
> > 8, (dev_name - 'a') * 16, size >> 10, dev_name,
> > (unsigned long) context, dbi->ObjectName.Buffer);
>
> I replaced with this instead (read_bytes added):
>
> printf ("%5d %5d %9llu sd%c (%lu, %ls, %u)\n",
> 8, (dev_name - 'a') * 16, size >> 10, dev_name,
> (unsigned long) context, dbi->ObjectName.Buffer, bytes_read);
>
> and here's the output:
>
> $ ./proc_partition
> major minor #blocks name win-mounts
>
> 8 0 500107608 sda (282, Harddisk0, 144)
> 8 1 102400 sda1
> 8 2 488280064 sda2 C:\
> 8 16 1000204632 sdb (299, Harddisk1, 144)
> 8 17 1000202240 sdb1 D:\
> 8 32 1000204632 sdc (300, Harddisk1, 144)
> 8 33 1000202240 sdc1 D:\
> 8 48 1000204632 sdd (313, Harddisk2, 144)
> 8 49 1000202240 sdd1 G:\
> 8 64 1000204632 sde (314, Harddisk2, 144)
> 8 65 1000202240 sde1 G:\
> 8 80 1000204632 sdf (329, Harddisk3, 144)
> 8 81 1000202240 sdf1 I:\
> 8 96 1000204632 sdg (330, Harddisk3, 144)
> 8 97 1000202240 sdg1 I:\
> 8 112 234431064 sdh (339, Harddisk4, 144)
> 8 113 234428416 sdh1 F:\
> 8 128 234431064 sdi (340, Harddisk4, 144)
> 8 129 234428416 sdi1 F:\
> DeviceIoControl (Harddisk5\Partition0, IOCTL_DISK_GET_PARTITION_INFO{_EX}) 5 8 144 0 sdj (352, Harddisk5, 624)
>
> It prints the correct Harddisk names (corresponding to the
> duplicates), so it's consistent.
>
> I was thinking that the "context" value seems to change just by 1 when
> there's a duplicate coming out; otherwise, it jumps by more than 10,
> when it is really a new drive...
No, that just indicates the offset between entries, remember the "continue"
in line 77, skipping non-Harddisk entries. NtQueryDirectoryObject returns
context values starting at 1, incrementing by 1.
> The directory handle is used (indirectly) in NtOpenFile() through the
> attributes, and I wonder if that call somehow distorts the internal
> position within the handle, and so it restarts from the wrong internal
> position in the outer loop.
Unlikely. That's core functionality which *must* work.
Corinna
More information about the Cygwin
mailing list