diff --git a/DokanTesting/App.config b/DokanTesting/App.config
new file mode 100644
index 0000000..f29c2a0
--- /dev/null
+++ b/DokanTesting/App.config
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/DokanTesting/CommonFuncs.cs b/DokanTesting/CommonFuncs.cs
new file mode 100644
index 0000000..8a1e0ae
--- /dev/null
+++ b/DokanTesting/CommonFuncs.cs
@@ -0,0 +1,37 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading;
+using NLog;
+
+namespace DokanTesting
+{
+ static public class CommonFuncs
+ {
+ static private readonly Logger Log = LogManager.GetCurrentClassLogger();
+
+ public static bool CheckExistenceOfMount(string mountPoint)
+ {
+ if (mountPoint.Length == 1)
+ {
+ string path = string.Format("{0}:{1}", mountPoint, Path.DirectorySeparatorChar);
+ if (!Directory.Exists(path))
+ {
+ return false;
+ }
+ // 2nd phase as the above is supposed to be cheap but can return false +ves
+ {
+ string[] drives = Environment.GetLogicalDrives();
+ return (Array.Exists(drives, dr => dr.Remove(1) == mountPoint));
+ }
+ }
+ else
+ {
+ DirectoryInfo di = new DirectoryInfo(mountPoint);
+ return ((di.Attributes & FileAttributes.ReparsePoint) == FileAttributes.ReparsePoint);
+ }
+ }
+ }
+}
diff --git a/DokanTesting/DokanTesting.csproj b/DokanTesting/DokanTesting.csproj
new file mode 100644
index 0000000..3e32101
--- /dev/null
+++ b/DokanTesting/DokanTesting.csproj
@@ -0,0 +1,85 @@
+
+
+
+ Debug
+ AnyCPU
+ 8.0.30703
+ 2.0
+ {73EC480E-46DD-4D3B-9E9E-3BF2EC1213BD}
+ Library
+ Properties
+ DokanTesting
+ DokanTesting
+ v4.0
+ 512
+ SAK
+ SAK
+ SAK
+ SAK
+
+
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+ ..\ThirdParty\NLog.dll
+
+
+ ..\ThirdParty\NUnit\nunit.core.dll
+
+
+ ..\ThirdParty\NUnit\nunit.framework.dll
+
+
+
+
+
+
+
+
+
+
+
+
+ Utils.cs
+
+
+
+
+
+
+
+
+ {A09B408A-26A0-4FF8-83D5-6E1B1DA5F63C}
+ DokanNet
+
+
+
+
+
+
+
+ copy "$(ProjectDir)..\Thirdparty\Dokan_x64\x64\$(ConfigurationName)\Dokan.dll" "$(TargetDir)"
+
+
+
\ No newline at end of file
diff --git a/DokanTesting/DokanTesting.csproj.vspscc b/DokanTesting/DokanTesting.csproj.vspscc
new file mode 100644
index 0000000..feffdec
--- /dev/null
+++ b/DokanTesting/DokanTesting.csproj.vspscc
@@ -0,0 +1,10 @@
+""
+{
+"FILE_VERSION" = "9237"
+"ENLISTMENT_CHOICE" = "NEVER"
+"PROJECT_FILE_RELATIVE_PATH" = ""
+"NUMBER_OF_EXCLUDED_FILES" = "0"
+"ORIGINAL_PROJECT_FILE_PATH" = ""
+"NUMBER_OF_NESTED_PROJECTS" = "0"
+"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER"
+}
diff --git a/DokanTesting/MountTests.cs b/DokanTesting/MountTests.cs
new file mode 100644
index 0000000..68a27b5
--- /dev/null
+++ b/DokanTesting/MountTests.cs
@@ -0,0 +1,116 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading;
+using DokanNet;
+using NLog;
+using NUnit.Framework;
+
+namespace DokanTesting
+{
+ [TestFixture]
+ [Description("These tests excercise the mount### API's.")]
+ [Category("Mount")]
+ public class MountTests
+ {
+ static private readonly Logger Log = LogManager.GetCurrentClassLogger();
+ private List mountedPoints = new List();
+
+ [TestFixtureSetUp]
+ public void Init()
+ {
+ Log.Warn("Test @ [{0}]", "Warn");
+ Log.Debug("Test @ [{0}]", "Debug");
+ Log.Trace("Test @ [{0}]", "Trace");
+ Log.Info("DokanVersion:[{0}], DokanDriverVersion[{1}]", Dokan.DokanVersion(), Dokan.DokanDriverVersion());
+ Dokan.DokanSetDebugMode(true);
+
+ }
+
+ [TestFixtureTearDown]
+ public void Dispose()
+ {
+ foreach (string point in mountedPoints)
+ {
+ if (point.Length == 1)
+ Dokan.DokanUnmount(point[0]);
+ else
+ Dokan.DokanRemoveMountPoint(point);
+ }
+ }
+
+
+ [SetUp]
+ public void SetUp()
+ {
+ }
+
+ [TearDown]
+ public void TearDown()
+ {
+ }
+
+
+
+ [Test]
+ [Description("Check that it is possible to perform a simple mount.")]
+ public void A010SimpleLetterMount()
+ {
+ mountedPoints.Add("M");
+ DokanOptions options = new DokanOptions
+ {
+ MountPoint = "M",
+ ThreadCount = 1,
+ DebugMode = true
+ };
+ TestLayer testLayer = new TestLayer();
+ ThreadPool.QueueUserWorkItem(testLayer.Start, options);
+
+
+ Assert.That(() => CommonFuncs.CheckExistenceOfMount(options.MountPoint), Is.True.After(50000, 100), "CheckExistenceOfMount");
+
+ //Assert.That(() => testLayer.RetVal, Is.EqualTo(Dokan.DOKAN_SUCCESS).After(500, 50),
+ // "Expected result after 500ms");
+
+
+ }
+
+ [Test]
+ [Description("Check that it is possible to perform a simple mount.")]
+ public void A020SimpleDirMount()
+ {
+ mountedPoints.Add("C:\\blam\\test");
+ DokanOptions options = new DokanOptions
+ {
+ MountPoint = "C:\\blam\\test",
+ ThreadCount = 1,
+ DebugMode = true
+ };
+ TestLayer testLayer = new TestLayer();
+ ThreadPool.QueueUserWorkItem(testLayer.Start, options);
+ Thread.Sleep(20*1000);
+
+ //Assert.That(() => CommonFuncs.CheckExistenceOfMount(options.MountPoint), Is.True.After(50000, 100), "CheckExistenceOfMount");
+
+ }
+
+ }
+
+ public class TestLayer
+ {
+ public TestLayer()
+ {
+ RetVal = Dokan.DOKAN_MOUNT_ERROR;
+ }
+
+ public void Start(object state)
+ {
+ DokanOptions options = state as DokanOptions;
+ IDokanOperations proxy = new TestDokanOperations();
+ RetVal = Dokan.DokanMain(options, proxy);
+ }
+
+ public int RetVal { get; set; }
+ }
+}
diff --git a/DokanTesting/Properties/AssemblyInfo.cs b/DokanTesting/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..48d65fe
--- /dev/null
+++ b/DokanTesting/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("DokanTesting")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("DokanTesting")]
+[assembly: AssemblyCopyright("Copyright © 2012")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("08a70825-c0ae-467d-9dfd-d8e32c3b183c")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/DokanTesting/TestDokanOperations.cs b/DokanTesting/TestDokanOperations.cs
new file mode 100644
index 0000000..7695161
--- /dev/null
+++ b/DokanTesting/TestDokanOperations.cs
@@ -0,0 +1,241 @@
+using System;
+using System.IO;
+using System.Runtime.InteropServices;
+using System.Text;
+using DokanNet;
+using LiquesceFacade;
+using NLog;
+
+namespace DokanTesting
+{
+ public class TestDokanOperations : IDokanOperations
+ {
+ static private readonly Logger Log = LogManager.GetCurrentClassLogger();
+
+ public int CreateFile(string filename, uint rawAccessMode, uint rawShare, uint rawCreationDisposition,
+ uint rawFlagsAndAttributes, DokanFileInfo info)
+ {
+ Log.Debug("CreateFile IN filename [{0}], rawAccessMode[0x{1:X8}], rawShare[{2}], rawCreationDisposition[{3}], rawFlagsAndAttributes[{4}|{5}], ProcessId[{6}]",
+ filename, rawAccessMode, (FileShare)rawShare, (FileMode)rawCreationDisposition, (rawFlagsAndAttributes & 0xFFFE0000), (FileAttributes)(rawFlagsAndAttributes & 0x0001FFFF), info.ProcessId);
+ info.IsDirectory = (filename == "\\");
+ info.refFileHandleContext = 1;
+ return Dokan.DOKAN_SUCCESS;
+ }
+
+ public int OpenDirectory(string filename, DokanFileInfo info)
+ {
+ Log.Debug("OpenDirectory [{0}] IN DokanProcessId[{1}]", filename, info.ProcessId);
+ info.IsDirectory = true;
+ return Dokan.DOKAN_SUCCESS;
+ }
+
+ public int CreateDirectory(string filename, DokanFileInfo info)
+ {
+ Log.Debug("CreateDirectory [{0}] IN DokanProcessId[{1}]", filename, info.ProcessId);
+ return Dokan.ERROR_CALL_NOT_IMPLEMENTED;
+ }
+
+ public int Cleanup(string filename, DokanFileInfo info)
+ {
+ Log.Trace("Cleanup IN DokanProcessId[{0}] with filename [{1}] handle[{2}] isDir[{3}]", info.ProcessId, filename, info.refFileHandleContext, info.IsDirectory);
+ return Dokan.DOKAN_SUCCESS;
+ }
+
+ public int CloseFile(string filename, DokanFileInfo info)
+ {
+ Log.Trace("CloseFile [{0}] IN DokanProcessId[{1}]", filename, info.ProcessId);
+ return Dokan.DOKAN_SUCCESS;
+ }
+
+ public int ReadFileNative(string file, IntPtr rawBuffer, uint rawBufferLength, ref uint rawReadLength, long rawOffset,
+ DokanFileInfo convertFileInfo)
+ {
+ Log.Debug("ReadFile [{0}] IN offset=[{2}] DokanProcessId[{1}]", file, convertFileInfo.ProcessId, rawOffset);
+ return Dokan.ERROR_CALL_NOT_IMPLEMENTED;
+ }
+
+ public int WriteFileNative(string filename, IntPtr rawBuffer, uint rawNumberOfBytesToWrite, ref uint rawNumberOfBytesWritten,
+ long rawOffset, DokanFileInfo info)
+ {
+ Log.Debug("WriteFile [{0}] IN DokanProcessId[{1}]", filename, info.ProcessId);
+ return Dokan.ERROR_CALL_NOT_IMPLEMENTED;
+ }
+
+ public int FlushFileBuffersNative(string filename, DokanFileInfo info)
+ {
+ Log.Debug("FlushFileBuffers IN [{0}] DokanProcessId[{1}]", filename, info.ProcessId);
+ return Dokan.ERROR_CALL_NOT_IMPLEMENTED;
+ }
+
+ public int GetFileInformationNative(string filename, ref BY_HANDLE_FILE_INFORMATION rawHandleFileInformation,
+ DokanFileInfo info)
+ {
+ Log.Debug("GetFileInformationNative [{0}] IN DokanProcessId[{1}]", filename, info.ProcessId);
+ rawHandleFileInformation.dwFileAttributes = info.IsDirectory ?FileAttributes.Directory: FileAttributes.Temporary;
+ rawHandleFileInformation.nFileSizeHigh = 0;
+ rawHandleFileInformation.nFileSizeLow = 0;
+ return Dokan.DOKAN_SUCCESS;
+ }
+
+ public int FindFiles(string filename, out WIN32_FIND_DATA[] files, DokanFileInfo info)
+ {
+ return FindFiles(filename, info.ProcessId, out files);
+ }
+
+ public int FindFilesWithPattern(string filename, string pattern, out WIN32_FIND_DATA[] files, DokanFileInfo info)
+ {
+ return FindFiles(filename, info.ProcessId, out files, pattern);
+ }
+
+ private int FindFiles(string filename, uint processId, out WIN32_FIND_DATA[] files, string pattern = "*")
+ {
+ Log.Debug("FindFiles IN [{0}], pattern[{1}]", filename, pattern);
+ files = null;
+ return Dokan.ERROR_CALL_NOT_IMPLEMENTED;
+ }
+
+
+ public int SetFileAttributes(string filename, FileAttributes attr, DokanFileInfo info)
+ {
+ Log.Debug("SetFileAttributes [{0}] IN DokanProcessId[{1}]", filename, info.ProcessId);
+ return Dokan.ERROR_CALL_NOT_IMPLEMENTED;
+ }
+
+ public int SetFileTimeNative(string filename, ref WIN32_FIND_FILETIME rawCreationTime,
+ ref WIN32_FIND_FILETIME rawLastAccessTime, ref WIN32_FIND_FILETIME rawLastWriteTime,
+ DokanFileInfo info)
+ {
+ Log.Debug("SetFileTime [{0}] IN DokanProcessId[{1}]", filename, info.ProcessId);
+ return Dokan.ERROR_CALL_NOT_IMPLEMENTED;
+ }
+
+ public int DeleteFile(string filename, DokanFileInfo info)
+ {
+ Log.Debug("DeleteFile [{0}] IN DokanProcessId[{1}], refFileHandleContext[{2}]", filename, info.ProcessId, info.refFileHandleContext);
+ return Dokan.ERROR_CALL_NOT_IMPLEMENTED;
+ }
+
+ public int DeleteDirectory(string filename, DokanFileInfo info)
+ {
+ Log.Debug("DeleteDirectory [{0}] IN DokanProcessId[{1}]", filename, info.ProcessId);
+ return Dokan.ERROR_CALL_NOT_IMPLEMENTED;
+ }
+
+ public int MoveFile(string filename, string newname, bool replace, DokanFileInfo info)
+ {
+ Log.Debug("MoveFile [{0}] to [{1}] IN DokanProcessId[{2}] context[{2}]", filename, newname, info.ProcessId, info.refFileHandleContext);
+ return Dokan.ERROR_CALL_NOT_IMPLEMENTED;
+ }
+
+ public int SetEndOfFile(string filename, long length, DokanFileInfo info)
+ {
+ Log.Debug("SetEndOfFile [{0}] IN DokanProcessId[{1}]", filename, info.ProcessId);
+ return Dokan.ERROR_CALL_NOT_IMPLEMENTED;
+ }
+
+ public int SetAllocationSize(string filename, long length, DokanFileInfo info)
+ {
+ Log.Debug("SetAllocationSize [{0}] IN DokanProcessId[{0}]", filename, info.ProcessId);
+ return Dokan.ERROR_CALL_NOT_IMPLEMENTED;
+ }
+
+ public int LockFile(string filename, long offset, long length, DokanFileInfo info)
+ {
+ Log.Debug("LockFile [{0}] IN DokanProcessId[{1}]", filename, info.ProcessId);
+ return Dokan.ERROR_CALL_NOT_IMPLEMENTED;
+ }
+
+ public int UnlockFile(string filename, long offset, long length, DokanFileInfo info)
+ {
+ Log.Debug("UnlockFile [{0}] IN DokanProcessId[{1}]", filename, info.ProcessId);
+ return Dokan.ERROR_CALL_NOT_IMPLEMENTED;
+ }
+
+ public int GetDiskFreeSpace(ref ulong freeBytesAvailable, ref ulong totalBytes, ref ulong totalFreeBytes, DokanFileInfo info)
+ {
+ Log.Trace("GetDiskFreeSpace IN DokanProcessId[{0}]", info.ProcessId);
+ freeBytesAvailable = totalBytes = totalFreeBytes = 1;
+ return Dokan.DOKAN_SUCCESS;
+ }
+
+ public int GetVolumeInformation(IntPtr rawVolumeNameBuffer, uint rawVolumeNameSize, ref uint rawVolumeSerialNumber,
+ ref uint rawMaximumComponentLength, ref uint rawFileSystemFlags, IntPtr rawFileSystemNameBuffer,
+ uint rawFileSystemNameSize, DokanFileInfo info)
+ {
+ int dokanReturn = Dokan.DOKAN_ERROR;
+ try
+ {
+ Log.Trace("GetVolumeInformation IN DokanProcessId[{0}]", info.ProcessId);
+
+
+ byte[] volume = Encoding.Unicode.GetBytes("UnitTesting");
+ int length = volume.Length;
+ byte[] volumeNull = new byte[length + 2];
+ Array.Copy(volume, volumeNull, length);
+ Marshal.Copy(volumeNull, 0, rawVolumeNameBuffer, Math.Min((int)rawVolumeNameSize, length + 2));
+ rawVolumeSerialNumber = 123456789;
+ rawMaximumComponentLength = 256;
+
+ // FILE_FILE_COMPRESSION 0x00000010 // Don't do this.. It causes lot's of problems later on
+ // And the Dokan code does not support it
+ //case FileStreamInformation:
+ // //DbgPrint("FileStreamInformation\n");
+ // status = STATUS_NOT_IMPLEMENTED;
+ // break;
+
+ rawFileSystemFlags = (uint)(FILE_SYSTEM_FLAGS.FILE_CASE_PRESERVED_NAMES
+ // | FILE_SYSTEM_FLAGS.FILE_CASE_SENSITIVE_SEARCH // NTFS is case-preserving but case-insensitive in the Win32 namespace
+ //| FILE_SYSTEM_FLAGS.FILE_NAMED_STREAMS
+ //| FILE_SYSTEM_FLAGS.FILE_SEQUENTIAL_WRITE_ONCE
+ | FILE_SYSTEM_FLAGS.FILE_SUPPORTS_EXTENDED_ATTRIBUTES
+ //| FILE_SYSTEM_FLAGS.FILE_SUPPORTS_HARD_LINKS
+ | FILE_SYSTEM_FLAGS.FILE_UNICODE_ON_DISK
+ | FILE_SYSTEM_FLAGS.FILE_PERSISTENT_ACLS
+ //| FILE_SYSTEM_FLAGS.FILE_VOLUME_QUOTAS
+ );
+
+ // rawFileSystemFlags |= (uint) FILE_SYSTEM_FLAGS.FILE_READ_ONLY_VOLUME;
+
+ byte[] sys = Encoding.Unicode.GetBytes("DokanTesting");
+ length = sys.Length;
+ byte[] sysNull = new byte[length + 2];
+ Array.Copy(sys, sysNull, length);
+
+ Marshal.Copy(sysNull, 0, rawFileSystemNameBuffer, Math.Min((int)rawFileSystemNameSize, length + 2));
+
+ dokanReturn = Dokan.DOKAN_SUCCESS;
+ }
+ catch (Exception ex)
+ {
+ Log.ErrorException("GetVolumeInformation threw: ", ex);
+ dokanReturn = Utils.BestAttemptToWin32(ex);
+ }
+ finally
+ {
+ Log.Trace("GetVolumeInformation OUT dokanReturn[{0}]", dokanReturn);
+ }
+ return dokanReturn;
+ }
+
+ public int Unmount(DokanFileInfo info)
+ {
+ Log.Warn("Unmount IN DokanProcessId[{0}]", info.ProcessId);
+ return Dokan.DOKAN_SUCCESS;
+ }
+
+ public int GetFileSecurityNative(string file, ref SECURITY_INFORMATION rawRequestedInformation, IntPtr rawSecurityDescriptor,
+ uint rawSecurityDescriptorLength, ref uint rawSecurityDescriptorLengthNeeded,
+ DokanFileInfo info)
+ {
+ Log.Debug("GetFileSecurityNative [{0}] IN GetFileSecurity[{1}][{2}]", file, info.ProcessId, rawRequestedInformation);
+ return Dokan.ERROR_CALL_NOT_IMPLEMENTED;
+ }
+
+ public int SetFileSecurityNative(string file, ref SECURITY_INFORMATION rawSecurityInformation, IntPtr rawSecurityDescriptor,
+ uint rawSecurityDescriptorLength, DokanFileInfo info)
+ {
+ Log.Debug("SetFileSecurityNative IN [{0}] SetFileSecurity[{1}][{2}]", file, info.ProcessId, rawSecurityInformation);
+ return Dokan.ERROR_CALL_NOT_IMPLEMENTED;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Liquesce.sln b/Liquesce.sln
index f180926..aa459d4 100644
--- a/Liquesce.sln
+++ b/Liquesce.sln
@@ -35,9 +35,24 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Dokan_x64", "ThirdParty\Dok
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Dokan", "ThirdParty\Dokan\Dokan.vcxproj", "{FDC2E78C-71AE-4E49-8BB4-CB839C97A13D}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DokanTesting", "DokanTesting\DokanTesting.csproj", "{73EC480E-46DD-4D3B-9E9E-3BF2EC1213BD}"
+ ProjectSection(ProjectDependencies) = postProject
+ {4680A690-91A5-443D-A96F-13EB87F673A0} = {4680A690-91A5-443D-A96F-13EB87F673A0}
+ EndProjectSection
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LiquesceTesting", "LiquesceTesting\LiquesceTesting.csproj", "{ED38D91E-FA2E-4BCD-9B39-6B3E81D2119B}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "NUnit", "NUnit", "{36B01897-FED0-4E14-B4E0-2160FDF29E94}"
+ ProjectSection(SolutionItems) = preProject
+ ThirdParty\NUnit\nunit.core.dll = ThirdParty\NUnit\nunit.core.dll
+ ThirdParty\NUnit\nunit.core.interfaces.dll = ThirdParty\NUnit\nunit.core.interfaces.dll
+ ThirdParty\NUnit\nunit.framework.dll = ThirdParty\NUnit\nunit.framework.dll
+ ThirdParty\NUnit\nunit.util.dll = ThirdParty\NUnit\nunit.util.dll
+ EndProjectSection
+EndProject
Global
GlobalSection(TeamFoundationVersionControl) = preSolution
- SccNumberOfProjects = 10
+ SccNumberOfProjects = 12
SccEnterpriseProvider = {4CA58AB2-18FA-4F8D-95D4-32DDF27D184C}
SccTeamFoundationServer = https://tfs.codeplex.com/tfs/tfs08
SccLocalPath0 = .
@@ -71,6 +86,12 @@ Global
SccProjectTopLevelParentUniqueName9 = Liquesce.sln
SccProjectName9 = ThirdParty/Dokan_x64
SccLocalPath9 = ThirdParty\\Dokan_x64
+ SccProjectUniqueName10 = DokanTesting\\DokanTesting.csproj
+ SccProjectName10 = DokanTesting
+ SccLocalPath10 = DokanTesting
+ SccProjectUniqueName11 = LiquesceTesting\\LiquesceTesting.csproj
+ SccProjectName11 = LiquesceTesting
+ SccLocalPath11 = LiquesceTesting
EndGlobalSection
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -112,6 +133,14 @@ Global
{FDC2E78C-71AE-4E49-8BB4-CB839C97A13D}.Debug|Any CPU.Build.0 = Debug|Win32
{FDC2E78C-71AE-4E49-8BB4-CB839C97A13D}.Release|Any CPU.ActiveCfg = Release|Win32
{FDC2E78C-71AE-4E49-8BB4-CB839C97A13D}.Release|Any CPU.Build.0 = Release|Win32
+ {73EC480E-46DD-4D3B-9E9E-3BF2EC1213BD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {73EC480E-46DD-4D3B-9E9E-3BF2EC1213BD}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {73EC480E-46DD-4D3B-9E9E-3BF2EC1213BD}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {73EC480E-46DD-4D3B-9E9E-3BF2EC1213BD}.Release|Any CPU.Build.0 = Release|Any CPU
+ {ED38D91E-FA2E-4BCD-9B39-6B3E81D2119B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {ED38D91E-FA2E-4BCD-9B39-6B3E81D2119B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {ED38D91E-FA2E-4BCD-9B39-6B3E81D2119B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {ED38D91E-FA2E-4BCD-9B39-6B3E81D2119B}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -120,10 +149,11 @@ Global
{A09B408A-26A0-4FF8-83D5-6E1B1DA5F63C} = {C1ADA293-B55A-4B33-AE5A-6FC40323FC39}
{4680A690-91A5-443D-A96F-13EB87F673A0} = {C1ADA293-B55A-4B33-AE5A-6FC40323FC39}
{FDC2E78C-71AE-4E49-8BB4-CB839C97A13D} = {C1ADA293-B55A-4B33-AE5A-6FC40323FC39}
+ {36B01897-FED0-4E14-B4E0-2160FDF29E94} = {C1ADA293-B55A-4B33-AE5A-6FC40323FC39}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
- BuildVersion_UseGlobalSettings = True
- BuildVersion_AssemblyInfoFilename = LiquesceSvc\Properties\AssemblyInfo.cs
BuildVersion_BuildVersioningStyle = YearStamp.MonthStamp.DayStamp.Increment
+ BuildVersion_AssemblyInfoFilename = LiquesceSvc\Properties\AssemblyInfo.cs
+ BuildVersion_UseGlobalSettings = True
EndGlobalSection
EndGlobal
diff --git "a/LiquesceFa\303\247ade/Utils.cs" "b/LiquesceFa\303\247ade/Utils.cs"
index c0e8c9f..6b9c272 100644
--- "a/LiquesceFa\303\247ade/Utils.cs"
+++ "b/LiquesceFa\303\247ade/Utils.cs"
@@ -24,10 +24,10 @@
// --------------------------------------------------------------------------------------------------------------------
#endregion
using System;
-using System.IO;
using System.Net.Sockets;
using System.Runtime.InteropServices;
using System.Windows.Forms;
+
using DokanNet;
namespace LiquesceFacade
diff --git a/LiquesceSvc/Properties/AssemblyInfo.cs b/LiquesceSvc/Properties/AssemblyInfo.cs
index de28a7b..d182530 100644
--- a/LiquesceSvc/Properties/AssemblyInfo.cs
+++ b/LiquesceSvc/Properties/AssemblyInfo.cs
@@ -56,5 +56,5 @@
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("12.11.973.5")]
-[assembly: AssemblyFileVersion("12.11.973.5")]
+[assembly: AssemblyVersion("12.11.974.6")]
+[assembly: AssemblyFileVersion("12.11.974.6")]
diff --git a/LiquesceTesting/LiquesceTesting.csproj b/LiquesceTesting/LiquesceTesting.csproj
new file mode 100644
index 0000000..821f10b
--- /dev/null
+++ b/LiquesceTesting/LiquesceTesting.csproj
@@ -0,0 +1,76 @@
+
+
+
+ Debug
+ AnyCPU
+ 8.0.30703
+ 2.0
+ {ED38D91E-FA2E-4BCD-9B39-6B3E81D2119B}
+ Library
+ Properties
+ LiquesceTesting
+ LiquesceTesting
+ v4.0
+ 512
+ SAK
+ SAK
+ SAK
+ SAK
+
+
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+ ..\ThirdParty\NLog.dll
+
+
+ ..\ThirdParty\NUnit\nunit.core.dll
+
+
+ ..\ThirdParty\NUnit\nunit.framework.dll
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {CFE5DC7B-25FB-45C4-AF18-1963853375E1}
+ LiquesceFacade
+
+
+ {A09B408A-26A0-4FF8-83D5-6E1B1DA5F63C}
+ DokanNet
+
+
+
+
+
\ No newline at end of file
diff --git a/LiquesceTesting/LiquesceTesting.csproj.vspscc b/LiquesceTesting/LiquesceTesting.csproj.vspscc
new file mode 100644
index 0000000..feffdec
--- /dev/null
+++ b/LiquesceTesting/LiquesceTesting.csproj.vspscc
@@ -0,0 +1,10 @@
+""
+{
+"FILE_VERSION" = "9237"
+"ENLISTMENT_CHOICE" = "NEVER"
+"PROJECT_FILE_RELATIVE_PATH" = ""
+"NUMBER_OF_EXCLUDED_FILES" = "0"
+"ORIGINAL_PROJECT_FILE_PATH" = ""
+"NUMBER_OF_NESTED_PROJECTS" = "0"
+"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER"
+}
diff --git a/LiquesceTesting/Properties/AssemblyInfo.cs b/LiquesceTesting/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..8e532af
--- /dev/null
+++ b/LiquesceTesting/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("LiquesceTesting")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("LiquesceTesting")]
+[assembly: AssemblyCopyright("Copyright © 2012")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("02f5e7f3-920e-48e2-a7ed-c66b2736a7b3")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/ThirdParty/Dokan/dokan.h b/ThirdParty/Dokan/dokan.h
index 9831291..87cb9d9 100644
--- a/ThirdParty/Dokan/dokan.h
+++ b/ThirdParty/Dokan/dokan.h
@@ -46,7 +46,7 @@ extern "C" {
#endif
// The current Dokan version (ver 0.6.0). Please set this constant on DokanOptions->Version.
-#define DOKAN_VERSION 600
+#define DOKAN_VERSION 601
#define DOKAN_OPTION_DEBUG 1 // ouput debug message
#define DOKAN_OPTION_STDERR 2 // ouput debug message to stderr
diff --git a/ThirdParty/DokanNet/Dokan.cs b/ThirdParty/DokanNet/Dokan.cs
index 89be1f0..8ba4a14 100644
--- a/ThirdParty/DokanNet/Dokan.cs
+++ b/ThirdParty/DokanNet/Dokan.cs
@@ -50,7 +50,7 @@ public static class Dokan
public const int DOKAN_MOUNT_ERROR = -5; // Can't assign drive letter
#endregion
- private const ushort DOKAN_VERSION = 600; // ver 0.6.0
+ private const ushort DOKAN_VERSION = 601; // ver 0.6.0
#region Dokan Driver Options
private const uint DOKAN_OPTION_DEBUG = 1;
@@ -67,8 +67,11 @@ public static class Dokan
public static int DokanMain(DokanOptions options, IDokanOperations operations)
{
+ if (operations == null)
+ throw new ArgumentNullException("operations");
+
Log.Info("Start DokanMain");
- if (String.IsNullOrEmpty(options.VolumeLabel))
+ if (string.IsNullOrEmpty(options.VolumeLabel))
{
options.VolumeLabel = "DOKAN";
}
@@ -130,7 +133,7 @@ public static int DokanUnmount(char driveLetter)
public static int DokanRemoveMountPoint(string mountPoint)
{
- return Dokan.DokanRemoveMountPoint(mountPoint);
+ return DokanDll.DokanRemoveMountPoint(mountPoint);
}
public static uint DokanVersion()
diff --git a/ThirdParty/DokanNet/Properties/AssemblyInfo.cs b/ThirdParty/DokanNet/Properties/AssemblyInfo.cs
index c46147c..30d3999 100644
--- a/ThirdParty/DokanNet/Properties/AssemblyInfo.cs
+++ b/ThirdParty/DokanNet/Properties/AssemblyInfo.cs
@@ -37,5 +37,5 @@
//
// You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below:
-[assembly: AssemblyVersion("12.6.940.7")]
-[assembly: AssemblyFileVersion("12.6.940.7")]
+[assembly: AssemblyVersion("12.11.957.7")]
+[assembly: AssemblyFileVersion("12.11.957.7")]
diff --git a/ThirdParty/NUnit/nunit.core.dll b/ThirdParty/NUnit/nunit.core.dll
new file mode 100644
index 0000000..8e6d956
Binary files /dev/null and b/ThirdParty/NUnit/nunit.core.dll differ
diff --git a/ThirdParty/NUnit/nunit.core.interfaces.dll b/ThirdParty/NUnit/nunit.core.interfaces.dll
new file mode 100644
index 0000000..a966ad5
Binary files /dev/null and b/ThirdParty/NUnit/nunit.core.interfaces.dll differ
diff --git a/ThirdParty/NUnit/nunit.framework.dll b/ThirdParty/NUnit/nunit.framework.dll
new file mode 100644
index 0000000..215767d
Binary files /dev/null and b/ThirdParty/NUnit/nunit.framework.dll differ
diff --git a/ThirdParty/NUnit/nunit.util.dll b/ThirdParty/NUnit/nunit.util.dll
new file mode 100644
index 0000000..88aee95
Binary files /dev/null and b/ThirdParty/NUnit/nunit.util.dll differ