Fix major device check when locking partitions
The change introduced in commit b2867a6
contains a faulty check for
the major device number in fhandler_dev_floppy::lock_partition.
Fix this. Also fix comments.
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
parent
9aab8eb5b6
commit
166d3ddf5a
|
@ -159,9 +159,9 @@ fhandler_dev_floppy::lock_partition (DWORD to_write)
|
||||||
/* The simple case. We have only a single partition open anyway.
|
/* The simple case. We have only a single partition open anyway.
|
||||||
Try to lock the partition so that a subsequent write succeeds.
|
Try to lock the partition so that a subsequent write succeeds.
|
||||||
If there's some file handle open on one of the affected partitions,
|
If there's some file handle open on one of the affected partitions,
|
||||||
this fails, but that's how it works on Vista and later...
|
this fails, but that's how it works...
|
||||||
Only DEV_SD7_MAJOR and less can point to partition 0. */
|
The high partition major numbers don't have a partition 0. */
|
||||||
if (get_major () <= DEV_SD7_MAJOR && get_minor () % 16 != 0)
|
if (get_major () >= DEV_SD_HIGHPART_START || get_minor () % 16 != 0)
|
||||||
{
|
{
|
||||||
if (!DeviceIoControl (get_handle (), FSCTL_LOCK_VOLUME,
|
if (!DeviceIoControl (get_handle (), FSCTL_LOCK_VOLUME,
|
||||||
NULL, 0, NULL, 0, &bytes_read, NULL))
|
NULL, 0, NULL, 0, &bytes_read, NULL))
|
||||||
|
@ -297,13 +297,10 @@ fhandler_dev_floppy::write_file (const void *buf, DWORD to_write,
|
||||||
*err = 0;
|
*err = 0;
|
||||||
if (!(ret = WriteFile (get_handle (), buf, to_write, written, 0)))
|
if (!(ret = WriteFile (get_handle (), buf, to_write, written, 0)))
|
||||||
*err = GetLastError ();
|
*err = GetLastError ();
|
||||||
/* When writing to a disk or partition on Vista, an "Access denied" error
|
/* When writing to a disk or partition an "Access denied" error may
|
||||||
is potentially a result of the raw disk write restriction. See
|
occur due to the raw disk write restriction.
|
||||||
http://support.microsoft.com/kb/942448 for details. What we have to
|
See http://support.microsoft.com/kb/942448 for details.
|
||||||
do here is to lock the partition and retry. The previous solution
|
What we do here is to lock the affected partition(s) and retry. */
|
||||||
locked one or all partitions immediately in open. Which is overly
|
|
||||||
wasteful, given that the user might only want to change, say, the boot
|
|
||||||
sector. */
|
|
||||||
if (*err == ERROR_ACCESS_DENIED
|
if (*err == ERROR_ACCESS_DENIED
|
||||||
&& wincap.has_restricted_raw_disk_access ()
|
&& wincap.has_restricted_raw_disk_access ()
|
||||||
&& get_major () != DEV_FLOPPY_MAJOR
|
&& get_major () != DEV_FLOPPY_MAJOR
|
||||||
|
|
Loading…
Reference in New Issue