BOOL DokanControlUnmount( LPCWSTR MountPoint) { ULONG length = wcslen(MountPoint); if (length == 1 || (length == 2 && MountPoint[1] == L':') || (length == 3 && MountPoint[1] == L':' && MountPoint[2] == L'\\')) { WCHAR drive[] = L"C:"; drive[0] = MountPoint[0]; if (!DefineDosDevice(DDD_REMOVE_DEFINITION, drive, NULL)) { Logger::logWinError(GetLastError(), "DokanControl DefineDosDevice failed"); //Logger::log(0,"DriveLetter %wc\n", MountPoint[0]); return FALSE; } else { Logger::log(0,"DokanControl DD_REMOVE_DEFINITION success\n"); return TRUE; } } else if (length > 3 ) { return DeleteMountPoint(MountPoint); } return FALSE; }
BOOL DokanControlUnmount( WCHAR DriveLetter) { WCHAR volumeName[] = L"\\\\.\\ :"; HANDLE device; volumeName[4] = DriveLetter; /* device = CreateFile( volumeName, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_FLAG_NO_BUFFERING, NULL ); if (device == INVALID_HANDLE_VALUE) { DbgPrintW(L"DriveLetter %wc\n", DriveLetter); DbgPrintW(L"DokanControl Unmount failed\n"); return FALSE; } CloseHandle(device); */ if (!DefineDosDevice(DDD_REMOVE_DEFINITION, &volumeName[4], NULL)) { DbgPrintW(L"DriveLetter %wc\n", DriveLetter); DbgPrintW(L"DokanControl DefineDosDevice failed\n"); return FALSE; } else { DbgPrintW(L"DokanControl DD_REMOVE_DEFINITION success\n"); } DeleteMountPoint(L"C:\\mount\\dokan"); return TRUE; }