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