IN LPCWSTR lpLibFileName);
PALIMPORT
-HMODULE
-PALAPI
-PAL_RegisterLibraryDirect(
- IN NATIVE_LIBRARY_HANDLE dl_handle,
- IN LPCWSTR lpLibFileName);
-
-PALIMPORT
BOOL
PALAPI
PAL_FreeLibraryDirect(
/*
Function:
- PAL_RegisterLibraryDirect
-
- Registers a system handle to a loaded library with the module list.
-
- Returns a PAL handle to the loaded library, or nullptr upon failure (error is set via SetLastError()).
-*/
-HMODULE
-PALAPI
-PAL_RegisterLibraryDirect(
- IN NATIVE_LIBRARY_HANDLE dl_handle,
- IN LPCWSTR lpLibFileName)
-{
- PathCharString pathstr;
- CHAR * lpstr = nullptr;
- INT name_length;
- HMODULE hModule = nullptr;
-
- PERF_ENTRY(RegisterLibraryDirect);
- ENTRY("RegisterLibraryDirect (lpLibFileName=%p (%S)) \n",
- lpLibFileName ? lpLibFileName : W16_NULLSTRING,
- lpLibFileName ? lpLibFileName : W16_NULLSTRING);
-
- if (!LOADVerifyLibraryPath(lpLibFileName))
- {
- goto done;
- }
-
- lpstr = pathstr.OpenStringBuffer((PAL_wcslen(lpLibFileName)+1) * MaxWCharToAcpLength);
- if (nullptr == lpstr)
- {
- goto done;
- }
- if (!LOADConvertLibraryPathWideStringToMultibyteString(lpLibFileName, lpstr, &name_length))
- {
- goto done;
- }
-
- /* do the Dos/Unix conversion on our own copy of the name */
- FILEDosToUnixPathA(lpstr);
- pathstr.CloseBuffer(name_length);
-
- /* let LOADRegisterLibraryDirect call SetLastError in case of failure */
- LockModuleList();
- hModule = LOADRegisterLibraryDirect(dl_handle, lpstr, true /* fDynamic */);
- UnlockModuleList();
-
-done:
- LOGEXIT("RegisterLibraryDirect returns HMODULE %p\n", hModule);
- PERF_EXIT(RegisterLibraryDirect);
- return hModule;
-}
-
-/*
-Function:
PAL_FreeLibraryDirect
Free a loaded library
m_pRefClassFactHash = NULL;
- m_ReversePInvokeCanEnter=TRUE;
m_ForceTrivialWaitOperations = false;
m_Stage=STAGE_CREATING;
return m_AssemblyCache.StoreException(pSpec, ex);
}
-void AppDomain::AddUnmanagedImageToCache(LPCWSTR libraryName, HMODULE hMod)
+void AppDomain::AddUnmanagedImageToCache(LPCWSTR libraryName, NATIVE_LIBRARY_HANDLE hMod)
{
CONTRACTL
{
}
-HMODULE AppDomain::FindUnmanagedImageInCache(LPCWSTR libraryName)
+NATIVE_LIBRARY_HANDLE AppDomain::FindUnmanagedImageInCache(LPCWSTR libraryName)
{
- CONTRACT(HMODULE)
+ CONTRACT(NATIVE_LIBRARY_HANDLE)
{
THROWS;
GC_TRIGGERS;
AssemblySpec spec;
spec.SetCodeBase(libraryName);
- RETURN (HMODULE) m_UnmanagedCache.LookupEntry(&spec, 0);
+ RETURN (NATIVE_LIBRARY_HANDLE) m_UnmanagedCache.LookupEntry(&spec, 0);
}
BOOL AppDomain::RemoveFileFromCache(PEAssembly *pFile)
BOOL RemoveAssemblyFromCache(DomainAssembly* pAssembly);
BOOL AddExceptionToCache(AssemblySpec* pSpec, Exception *ex);
- void AddUnmanagedImageToCache(LPCWSTR libraryName, HMODULE hMod);
- HMODULE FindUnmanagedImageInCache(LPCWSTR libraryName);
+ void AddUnmanagedImageToCache(LPCWSTR libraryName, NATIVE_LIBRARY_HANDLE hMod);
+ NATIVE_LIBRARY_HANDLE FindUnmanagedImageInCache(LPCWSTR libraryName);
//****************************************************************************************
//
// Adds or removes an assembly to the domain.
size_t m_MemoryPressure;
ArrayList m_NativeDllSearchDirectories;
- BOOL m_ReversePInvokeCanEnter;
bool m_ForceTrivialWaitOperations;
public:
#endif // FEATURE_COMINTEROP
/*static*/
-LPVOID NDirect::NDirectGetEntryPoint(NDirectMethodDesc *pMD, HINSTANCE hMod)
+LPVOID NDirect::NDirectGetEntryPoint(NDirectMethodDesc *pMD, NATIVE_LIBRARY_HANDLE hMod)
{
// GetProcAddress cannot be called while preemptive GC is disabled.
// It requires the OS to take the loader lock.
if ((address == NULL) && throwOnError)
COMPlusThrow(kEntryPointNotFoundException, IDS_EE_NDIRECT_GETPROCADDR_WIN_DLL, symbolName);
#else // !FEATURE_PAL
- INT_PTR address = reinterpret_cast<INT_PTR>(PAL_GetProcAddressDirect((NATIVE_LIBRARY_HANDLE)handle, lpstr));
+ INT_PTR address = reinterpret_cast<INT_PTR>(PAL_GetProcAddressDirect(handle, lpstr));
if ((address == NULL) && throwOnError)
COMPlusThrow(kEntryPointNotFoundException, IDS_EE_NDIRECT_GETPROCADDR_UNIX_SO, symbolName);
#endif // !FEATURE_PAL
}
// This Method returns an instance of the PAL-Registered handle
-HINSTANCE NDirect::LoadLibraryModule(NDirectMethodDesc * pMD, LoadLibErrorTracker * pErrorTracker)
+NATIVE_LIBRARY_HANDLE NDirect::LoadLibraryModule(NDirectMethodDesc * pMD, LoadLibErrorTracker * pErrorTracker)
{
CONTRACTL
{
PREFIX_ASSUME( name != NULL );
MAKE_WIDEPTR_FROMUTF8( wszLibName, name );
- ModuleHandleHolder hmod = LoadLibraryModuleViaCallback(pMD, wszLibName);
+ NativeLibraryHandleHolder hmod = LoadLibraryModuleViaCallback(pMD, wszLibName);
if (hmod != NULL)
{
-#ifdef FEATURE_PAL
- hmod = PAL_RegisterLibraryDirect(hmod, wszLibName);
-#endif // FEATURE_PAL
return hmod.Extract();
}
hmod = LoadLibraryModuleViaHost(pMD, wszLibName);
if (hmod != NULL)
{
-#ifdef FEATURE_PAL
- hmod = PAL_RegisterLibraryDirect(hmod, wszLibName);
-#endif // FEATURE_PAL
return hmod.Extract();
}
}
hmod = LoadLibraryModuleBySearch(pMD, pErrorTracker, wszLibName);
if (hmod != NULL)
{
-#ifdef FEATURE_PAL
- hmod = PAL_RegisterLibraryDirect(hmod, wszLibName);
-#endif // FEATURE_PAL
-
// If we have a handle add it to the cache.
pDomain->AddUnmanagedImageToCache(wszLibName, hmod);
return hmod.Extract();
hmod = LoadLibraryModuleViaEvent(pMD, wszLibName);
if (hmod != NULL)
{
-#ifdef FEATURE_PAL
- hmod = PAL_RegisterLibraryDirect(hmod, wszLibName);
-#endif // FEATURE_PAL
return hmod.Extract();
}
}
LoadLibErrorTracker errorTracker;
BOOL fSuccess = FALSE;
- HINSTANCE hmod = LoadLibraryModule( pMD, &errorTracker );
+ NATIVE_LIBRARY_HANDLE hmod = LoadLibraryModule( pMD, &errorTracker );
if ( hmod )
{
LPVOID pvTarget = NDirectGetEntryPoint(pMD, hmod);
//---------------------------------------------------------
static HRESULT HasNAT_LAttribute(IMDInternalImport *pInternalImport, mdToken token, DWORD dwMemberAttrs);
- static LPVOID NDirectGetEntryPoint(NDirectMethodDesc *pMD, HINSTANCE hMod);
+ static LPVOID NDirectGetEntryPoint(NDirectMethodDesc *pMD, NATIVE_LIBRARY_HANDLE hMod);
static NATIVE_LIBRARY_HANDLE LoadLibraryFromPath(LPCWSTR libraryPath, BOOL throwOnError);
static NATIVE_LIBRARY_HANDLE LoadLibraryByName(LPCWSTR name, Assembly *callingAssembly,
BOOL hasDllImportSearchPathFlags, DWORD dllImportSearchPathFlags,
BOOL throwOnError);
- static HINSTANCE LoadLibraryModule(NDirectMethodDesc * pMD, LoadLibErrorTracker *pErrorTracker);
+ static NATIVE_LIBRARY_HANDLE LoadLibraryModule(NDirectMethodDesc * pMD, LoadLibErrorTracker *pErrorTracker);
static void FreeNativeLibrary(NATIVE_LIBRARY_HANDLE handle);
static INT_PTR GetNativeLibraryExport(NATIVE_LIBRARY_HANDLE handle, LPCWSTR symbolName, BOOL throwOnError);
}
#ifndef CROSSGEN_COMPILE
-FARPROC NDirectMethodDesc::FindEntryPointWithMangling(HINSTANCE hMod, PTR_CUTF8 entryPointName) const
+FARPROC NDirectMethodDesc::FindEntryPointWithMangling(NATIVE_LIBRARY_HANDLE hMod, PTR_CUTF8 entryPointName) const
{
CONTRACTL
{
}
CONTRACTL_END;
+#ifndef FEATURE_PAL
FARPROC pFunc = GetProcAddress(hMod, entryPointName);
+#else
+ FARPROC pFunc = PAL_GetProcAddressDirect(hMod, entryPointName);
+#endif
#if defined(_TARGET_X86_)
}
//*******************************************************************************
-LPVOID NDirectMethodDesc::FindEntryPoint(HINSTANCE hMod) const
+LPVOID NDirectMethodDesc::FindEntryPoint(NATIVE_LIBRARY_HANDLE hMod) const
{
CONTRACTL
{
// Find the entry point name and function address
// based on the module and data from NDirectMethodDesc
//
- LPVOID FindEntryPoint(HINSTANCE hMod) const;
+ LPVOID FindEntryPoint(NATIVE_LIBRARY_HANDLE hMod) const;
private:
- FARPROC FindEntryPointWithMangling(HINSTANCE mod, PTR_CUTF8 entryPointName) const;
+ FARPROC FindEntryPointWithMangling(NATIVE_LIBRARY_HANDLE mod, PTR_CUTF8 entryPointName) const;
public:
typedef Holder<DWORD*, DoNothing<DWORD*>, UnsafeTlsFreeForHolder> TlsHolder;
// A holder for HMODULE.
-FORCEINLINE void VoidFreeLibrary(HMODULE h) { WRAPPER_NO_CONTRACT; CLRFreeLibrary(h); }
+FORCEINLINE void VoidFreeNativeLibrary(NATIVE_LIBRARY_HANDLE h)
+{
+ WRAPPER_NO_CONTRACT;
+
+#ifdef FEATURE_PAL
+ PAL_FreeLibraryDirect(h);
+#else
+ FreeLibrary(h);
+#endif
+}
-typedef Wrapper<HMODULE, DoNothing<HMODULE>, VoidFreeLibrary, NULL> ModuleHandleHolder;
+typedef Wrapper<NATIVE_LIBRARY_HANDLE, DoNothing<NATIVE_LIBRARY_HANDLE>, VoidFreeNativeLibrary, NULL> NativeLibraryHandleHolder;
#ifndef FEATURE_PAL