+
+bool
+Drive::unmount ()
+{
+ LOG_DISK("Unmounting %1 with %2 mount points XXX! MMMYEAH!", _device, _mount_points.size());
+ DCPOMATIC_ASSERT (_mount_points.size() == 1);
+ string const device_name = String::compose ("\\\\.\\%1", _mount_points.front());
+ string const truncated = device_name.substr (0, device_name.length() - 1);
+ //LOG_DISK("Actually opening %1", _device);
+ //HANDLE device = CreateFileA (_device.c_str(), (GENERIC_READ | GENERIC_WRITE), FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0);
+ LOG_DISK("Actually opening %1", truncated);
+ HANDLE device = CreateFileA (truncated.c_str(), (GENERIC_READ | GENERIC_WRITE), FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0);
+ if (device == INVALID_HANDLE_VALUE) {
+ LOG_DISK("Could not open %1 for unmount (%2)", truncated, GetLastError());
+ return false;
+ }
+ DWORD returned;
+ BOOL r = DeviceIoControl (device, FSCTL_LOCK_VOLUME, 0, 0, 0, 0, &returned, 0);
+ if (!r) {
+ LOG_DISK("Unmount of %1 failed (%2)", truncated, GetLastError());
+ return false;
+ }
+
+ LOG_DISK("Unmount of %1 succeeded", _device);
+ locked_volumes.push_back (make_pair(device, _device));
+
+ return true;
+}
+
+