Exemple #1
0
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;
}
Exemple #2
0
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;
}