コード例 #1
0
 public void LoadAsBinary()
 {
     using (var handle = ModuleDesktopMethods.LoadLibrary(GetNativeTestLibraryLocation(), 0))
     {
         handle.IsInvalid.Should().BeFalse();
     }
 }
コード例 #2
0
 public void LoadAsResource()
 {
     using (var handle = ModuleDesktopMethods.LoadLibrary(GetNativeTestLibraryLocation(),
                                                          LoadLibraryFlags.LOAD_LIBRARY_AS_IMAGE_RESOURCE | LoadLibraryFlags.LOAD_LIBRARY_AS_DATAFILE))
     {
         handle.IsInvalid.Should().BeFalse();
     }
 }
コード例 #3
0
 public void LoadFunction()
 {
     using (var handle = ModuleDesktopMethods.LoadLibrary(GetNativeTestLibraryLocation(), LoadLibraryFlags.LOAD_WITH_ALTERED_SEARCH_PATH))
     {
         var doubler = ModuleDesktopMethods.GetFunctionDelegate <DoubleDelegate>(handle, "Double");
         doubler(2).Should().Be(4);
     }
 }
コード例 #4
0
        public void GetProcessModulePaths()
        {
            var modules     = ModuleDesktopMethods.GetProcessModules();
            var moduleNames = (from module in modules select ModuleDesktopMethods.GetModuleFileName(module)).ToArray();

            moduleNames.Should().NotBeEmpty();
            moduleNames.Length.Should().Be(modules.Count());
        }
コード例 #5
0
 public void LoadString()
 {
     using (var handle = ModuleDesktopMethods.LoadLibrary(GetNativeTestLibraryLocation(),
                                                          LoadLibraryFlags.LOAD_LIBRARY_AS_IMAGE_RESOURCE | LoadLibraryFlags.LOAD_LIBRARY_AS_DATAFILE))
     {
         string resource = ResourceDesktopMethods.LoadString(handle, 101);
         resource.Should().Be("Test");
     }
 }
コード例 #6
0
        public void GetEntryModuleInfo()
        {
            var module = ModuleDesktopMethods.GetModuleHandle(null);

            module.Should().NotBe(ModuleTypes.ModuleHandle.NullModuleHandle);
            var info = ModuleDesktopMethods.GetModuleInfo(module);

            info.lpBaseOfDll.Should().Be(module.HMODULE);
        }
コード例 #7
0
        public void GetEntryModuleHandleAndFileName()
        {
            var module = ModuleDesktopMethods.GetModuleHandle(null);

            module.Should().NotBe(ModuleTypes.ModuleHandle.NullModuleHandle);
            string pathByHandle = ModuleDesktopMethods.GetModuleFileName(module);

            pathByHandle.Should().NotBeNullOrWhiteSpace();
            string pathByDefault = ModuleDesktopMethods.GetModuleFileName(ModuleTypes.ModuleHandle.NullModuleHandle);

            // Strangely the path is cased differently when getting the module file name through GetModuleFileNameEx, but not GetModuleFileName.
            pathByHandle.Should().BeEquivalentTo(pathByDefault);
        }
コード例 #8
0
        public void LoadAsBinaryFromLongPath()
        {
            using (var cleaner = new TestFileCleaner())
            {
                string longPath = @"\\?\" + PathGenerator.CreatePathOfLength(cleaner.TempFolder, 500);
                FileHelper.CreateDirectoryRecursive(longPath);
                string longPathLibrary = Paths.Combine(longPath, "LoadAsBinaryFromLongPath.dll");
                FileMethods.CopyFile(GetNativeTestLibraryLocation(), longPathLibrary);

                using (var handle = ModuleDesktopMethods.LoadLibrary(longPathLibrary, LoadLibraryFlags.LOAD_WITH_ALTERED_SEARCH_PATH))
                {
                    handle.IsInvalid.Should().BeFalse();
                }
            }
        }
コード例 #9
0
        public void LoadFunctionFromLongPath()
        {
            using (var cleaner = new TestFileCleaner())
            {
                string longPath = @"\\?\" + PathGenerator.CreatePathOfLength(cleaner.TempFolder, 500);
                FileHelper.CreateDirectoryRecursive(longPath);
                string longPathLibrary = Paths.Combine(longPath, "LoadFunctionFromLongPath.dll");
                FileMethods.CopyFile(GetNativeTestLibraryLocation(), longPathLibrary);

                using (var handle = ModuleDesktopMethods.LoadLibrary(longPathLibrary, 0))
                {
                    var doubler = ModuleDesktopMethods.GetFunctionDelegate <DoubleDelegate>(handle, "Double");
                    doubler(2).Should().Be(4);
                }
            }
        }
コード例 #10
0
        public void LoadStringFromLongPath()
        {
            using (var cleaner = new TestFileCleaner())
            {
                string longPath = @"\\?\" + PathGenerator.CreatePathOfLength(cleaner.TempFolder, 500);
                FileHelper.CreateDirectoryRecursive(longPath);
                string longPathLibrary = Paths.Combine(longPath, "LoadStringFromLongPath.dll");
                FileMethods.CopyFile(GetNativeTestLibraryLocation(), longPathLibrary);

                using (var handle = ModuleDesktopMethods.LoadLibrary(longPathLibrary,
                                                                     LoadLibraryFlags.LOAD_LIBRARY_AS_IMAGE_RESOURCE | LoadLibraryFlags.LOAD_LIBRARY_AS_DATAFILE))
                {
                    string resource = ResourceDesktopMethods.LoadString(handle, 101);
                    resource.Should().Be("Test");
                }
            }
        }
コード例 #11
0
        public void GetProcessModules()
        {
            var modules = ModuleDesktopMethods.GetProcessModules();

            modules.Should().NotBeEmpty();
        }
コード例 #12
0
        public void GetEntryModuleFileName()
        {
            string path = ModuleDesktopMethods.GetModuleFileName(ModuleTypes.ModuleHandle.NullModuleHandle);

            path.Should().NotBeNullOrWhiteSpace();
        }
コード例 #13
0
 protected override bool ReleaseHandle()
 {
     ModuleDesktopMethods.FreeLibrary(handle);
     handle = IntPtr.Zero;
     return(true);
 }