VirtualBox

Ignore:
Timestamp:
Dec 10, 2010 3:17:31 PM (14 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
68779
Message:

Added RTLdrLoadEx for exposing dlerror info.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/HostDrivers/Support/SUPLib.cpp

    r34241 r34959  
    20832083 * @param   pszFilename     The full file name.
    20842084 * @param   phLdrMod        Where to store the handle to the loaded module.
     2085 * @param   pszError        Where to return the loader error. Optional.
     2086 * @param   cbError         The size of the buffer pointed to by @a pszError.
    20852087 */
    2086 static int supR3HardenedLdrLoadIt(const char *pszFilename, PRTLDRMOD phLdrMod)
     2088static int supR3HardenedLdrLoadIt(const char *pszFilename, PRTLDRMOD phLdrMod, char *pszError, size_t cbError)
    20872089{
    20882090#ifdef VBOX_WITH_HARDENING
     
    21012103     * Try load it.
    21022104     */
    2103     return RTLdrLoad(pszFilename, phLdrMod);
    2104 }
    2105 
    2106 
    2107 SUPR3DECL(int) SUPR3HardenedLdrLoad(const char *pszFilename, PRTLDRMOD phLdrMod)
     2105    return RTLdrLoadEx(pszFilename, phLdrMod, pszError, cbError);
     2106}
     2107
     2108
     2109SUPR3DECL(int) SUPR3HardenedLdrLoad(const char *pszFilename, PRTLDRMOD phLdrMod, char *pszError, size_t cbError)
    21082110{
    21092111    /*
    21102112     * Validate input.
    21112113     */
    2112     AssertPtrReturn(pszFilename, VERR_INVALID_PARAMETER);
    2113     AssertPtrReturn(phLdrMod, VERR_INVALID_PARAMETER);
     2114    if (!pszError)
     2115        AssertReturn(!cbError, VERR_INVALID_PARAMETER);
     2116    else
     2117    {
     2118        AssertPtrReturn(pszError, VERR_INVALID_POINTER);
     2119        if (cbError)
     2120            *pszError = '\0';
     2121        else
     2122            pszError = NULL;
     2123    }
     2124    AssertPtrReturn(pszFilename, VERR_INVALID_POINTER);
     2125    AssertPtrReturn(phLdrMod, VERR_INVALID_POINTER);
    21142126    *phLdrMod = NIL_RTLDRMOD;
    21152127    AssertReturn(RTPathHavePath(pszFilename), VERR_INVALID_PARAMETER);
     
    21332145     * Pass it on to the common library loader.
    21342146     */
    2135     return supR3HardenedLdrLoadIt(pszFilename, phLdrMod);
    2136 }
    2137 
    2138 
    2139 SUPR3DECL(int) SUPR3HardenedLdrLoadAppPriv(const char *pszFilename, PRTLDRMOD phLdrMod)
    2140 {
    2141     LogFlow(("SUPR3HardenedLdrLoadAppPriv: pszFilename=%p:{%s} phLdrMod=%p\n", pszFilename, pszFilename, phLdrMod));
     2147    return supR3HardenedLdrLoadIt(pszFilename, phLdrMod, pszError, cbError);
     2148}
     2149
     2150
     2151SUPR3DECL(int) SUPR3HardenedLdrLoadAppPriv(const char *pszFilename, PRTLDRMOD phLdrMod, char *pszError, size_t cbError)
     2152{
     2153    LogFlow(("SUPR3HardenedLdrLoadAppPriv: pszFilename=%p:{%s} phLdrMod=%p pszError=%p cbError=%zu\n", pszFilename, pszFilename, phLdrMod, pszError, cbError));
    21422154
    21432155    /*
    21442156     * Validate input.
    21452157     */
     2158    if (!pszError)
     2159        AssertReturn(!cbError, VERR_INVALID_PARAMETER);
     2160    else
     2161    {
     2162        AssertPtrReturn(pszError, VERR_INVALID_POINTER);
     2163        if (cbError)
     2164            *pszError = '\0';
     2165        else
     2166            pszError = NULL;
     2167    }
    21462168    AssertPtrReturn(phLdrMod, VERR_INVALID_PARAMETER);
    21472169    *phLdrMod = NIL_RTLDRMOD;
     
    21852207     * Pass it on to SUPR3HardenedLdrLoad.
    21862208     */
    2187     rc = SUPR3HardenedLdrLoad(szPath, phLdrMod);
     2209    rc = SUPR3HardenedLdrLoad(szPath, phLdrMod, pszError, cbError);
    21882210
    21892211    LogFlow(("SUPR3HardenedLdrLoadAppPriv: returns %Rrc\n", rc));
     
    22222244     * Try load it.
    22232245     */
    2224     rc = RTLdrLoad(pszFilename, phLdrMod);
    2225     if (RT_FAILURE(rc))
    2226         RTStrPrintf(pszErr, cbErr, "RTLdrLoad returned %Rrc", rc);
    2227     return rc;
     2246    return RTLdrLoadEx(pszFilename, phLdrMod, pszErr, cbErr);
    22282247}
    22292248
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette