mirror of
https://github.com/veracrypt/VeraCrypt.git
synced 2026-06-09 22:36:59 -05:00
When dismounting via CLI (/d /q /s), SHChangeNotify is called without SHCNF_FLUSH flag, making it asynchronous. The process exits before Explorer processes the notification, leaving a phantom drive letter visible in Explorer as an inaccessible Local Disk until reboot. Add SHCNF_FLUSH in Silent (CLI) mode to force synchronous shell notification processing in both single-volume (UnmountVolumeBase) and dismount-all (DismountAll) code paths. The flush is only added in CLI mode to avoid adding latency to interactive GUI operations. Co-authored-by: Contributor <contributor@example.com>
This commit is contained in:
@@ -5763,6 +5763,22 @@ retry:
|
||||
|
||||
BroadcastDeviceChange (DBT_DEVICEREMOVECOMPLETE, 0, prevMountList.ulMountedDrives & ~mountList.ulMountedDrives);
|
||||
|
||||
/* GH #337, GH #1426: Flush shell notifications synchronously in
|
||||
silent/CLI mode to prevent ghost drive letters when the process
|
||||
exits immediately after dismount. */
|
||||
if (Silent)
|
||||
{
|
||||
DWORD removedDrives = prevMountList.ulMountedDrives & ~mountList.ulMountedDrives;
|
||||
for (i = 0; i < 26; i++)
|
||||
{
|
||||
if (removedDrives & (1 << i))
|
||||
{
|
||||
wchar_t root[] = { (wchar_t) (i + L'A'), L':', L'\\', 0 };
|
||||
SHChangeNotify (SHCNE_DRIVEREMOVED, SHCNF_PATH | SHCNF_FLUSH, root, NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
RefreshMainDlg (hwndDlg);
|
||||
|
||||
NormalCursor();
|
||||
|
||||
Reference in New Issue
Block a user