Skip to content

Commit

Permalink
Fixes with loading libraries and paths.
Browse files Browse the repository at this point in the history
  • Loading branch information
3F committed Aug 3, 2016
1 parent a77c443 commit 06dfc30
Show file tree
Hide file tree
Showing 4 changed files with 65 additions and 1 deletion.
1 change: 1 addition & 0 deletions Conari/Conari.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@
<Compile Include="Types\uint_t.cs" />
<Compile Include="Types\size_t.cs" />
<Compile Include="Types\float_t.cs" />
<Compile Include="WinAPI\LoadLibraryFlags.cs" />
<Compile Include="WinAPI\NativeMethods.cs" />
</ItemGroup>
<ItemGroup>
Expand Down
2 changes: 1 addition & 1 deletion Conari/Core/Loader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ protected bool load()

protected Link loadLibrary(string lib)
{
IntPtr hModule = NativeMethods.LoadLibrary(lib);
IntPtr hModule = NativeMethods.LoadLibraryEx(lib, IntPtr.Zero, LoadLibraryFlags.LOAD_WITH_ALTERED_SEARCH_PATH);
return new Link(hModule, lib);
}

Expand Down
47 changes: 47 additions & 0 deletions Conari/WinAPI/LoadLibraryFlags.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
/*
* The MIT License (MIT)
*
* Copyright (c) 2016 Denis Kuzmin <[email protected]>
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/

namespace net.r_eg.Conari.WinAPI
{
/// <summary>
/// Possible actions for loading the module with LoadLibraryEx function.
/// https://msdn.microsoft.com/en-us/library/windows/desktop/ms684179.aspx
/// </summary>
internal struct LoadLibraryFlags
{
/// <summary>
/// If this value is used and lpFileName specifies an absolute path,
/// the system uses the alternate file search strategy discussed in the Remarks section to find
/// associated executable modules that the specified module causes to be loaded.
/// If this value is used and lpFileName specifies a relative path, the behavior is undefined.
///
/// If this value is not used, or if lpFileName does not specify a path,
/// the system uses the standard search strategy discussed in the Remarks section to find
/// associated executable modules that the specified module causes to be loaded.
///
/// This value cannot be combined with any LOAD_LIBRARY_SEARCH flag.
/// </summary>
public const uint LOAD_WITH_ALTERED_SEARCH_PATH = 0x00000008;
}
}
16 changes: 16 additions & 0 deletions Conari/WinAPI/NativeMethods.cs
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,22 @@ internal static class NativeMethods
[DllImport("kernel32", SetLastError = true, CharSet = CharSet.Unicode)]
public static extern IntPtr LoadLibrary([MarshalAs(UnmanagedType.LPWStr)] string lpFileName);

/// <summary>
/// Loads the specified module into the address space of the calling process. The specified module may cause other modules to be loaded.
/// https://msdn.microsoft.com/en-us/library/windows/desktop/ms684179.aspx
///
/// The behavior of this function is identical to the LoadLibrary function without flags.
/// </summary>
/// <param name="lpFileName">
/// A string that specifies the file name of the module to load.
/// The module can be a library module (a .dll file) or an executable module (an .exe file).
/// </param>
/// <param name="hFile">This parameter is reserved for future use. It must be NULL.</param>
/// <param name="dwFlags">The action to be taken when loading the module. Use from LoadLibraryFlags.</param>
/// <returns></returns>
[DllImport("kernel32", SetLastError = true, CharSet = CharSet.Unicode)]
public static extern IntPtr LoadLibraryEx([MarshalAs(UnmanagedType.LPWStr)]string lpFileName, IntPtr hFile, uint dwFlags);

/// <summary>
/// Retrieves the address of an exported function or variable from the specified dynamic-link library (DLL).
/// https://msdn.microsoft.com/en-us/library/windows/desktop/ms683212.aspx
Expand Down

0 comments on commit 06dfc30

Please sign in to comment.