VirtualBox

Changeset 26159 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Feb 2, 2010 6:12:40 PM (15 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
57173
Message:

PDMDevHlpR3: Added LdrGetR[C0]InterfaceSymbols.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/PDMDevHlp.cpp

    r26158 r26159  
    17811781    AssertBreakpoint();
    17821782    return false;
     1783}
     1784
     1785
     1786/** @interface_method_impl{PDMDEVHLP,pfnLdrGetRCInterfaceSymbols} */
     1787static DECLCALLBACK(int) pdmR3DevHlp_LdrGetRCInterfaceSymbols(PPDMDEVINS pDevIns, void *pvInterface, size_t cbInterface,
     1788                                                              const char *pszSymPrefix, const char *pszSymList)
     1789{
     1790    PDMDEV_ASSERT_DEVINS(pDevIns);
     1791    VM_ASSERT_EMT(pDevIns->Internal.s.pVMR3);
     1792    LogFlow(("pdmR3DevHlp_PDMLdrGetRCInterfaceSymbols: caller='%s'/%d: pvInterface=%p cbInterface=%zu pszSymPrefix=%p:{%s} pszSymList=%p:{%s}\n",
     1793             pDevIns->pDevReg->szDeviceName, pDevIns->iInstance, pvInterface, cbInterface, pszSymPrefix, pszSymPrefix, pszSymList, pszSymList));
     1794
     1795    int rc;
     1796    if (   strncmp(pszSymPrefix, "dev", 3) == 0
     1797        && RTStrIStr(pszSymPrefix + 3, pDevIns->pDevReg->szDeviceName) != NULL)
     1798    {
     1799        if (pDevIns->pDevReg->fFlags & PDM_DEVREG_FLAGS_RC)
     1800            rc = PDMR3LdrGetInterfaceSymbols(pDevIns->Internal.s.pVMR3, pvInterface, cbInterface,
     1801                                             pDevIns->pDevReg->szDeviceName, pszSymPrefix, pszSymList,
     1802                                             false /*fRing0OrRC*/);
     1803        else
     1804        {
     1805            AssertMsgFailed(("Not a raw-mode enabled driver\n"));
     1806            rc = VERR_PERMISSION_DENIED;
     1807        }
     1808    }
     1809    else
     1810    {
     1811        AssertMsgFailed(("Invalid prefix '%s' for '%s'; must start with 'dev' and contain the driver name!\n",
     1812                         pszSymPrefix, pDevIns->pDevReg->szDeviceName));
     1813        rc = VERR_INVALID_NAME;
     1814    }
     1815
     1816    LogFlow(("pdmR3DevHlp_PDMLdrGetRCInterfaceSymbols: caller='%s'/%d: returns %Rrc\n", pDevIns->pDevReg->szDeviceName,
     1817             pDevIns->iInstance, rc));
     1818    return rc;
     1819}
     1820
     1821
     1822/** @interface_method_impl{PDMDEVHLP,pfnLdrGetR0InterfaceSymbols} */
     1823static DECLCALLBACK(int) pdmR3DevHlp_LdrGetR0InterfaceSymbols(PPDMDEVINS pDevIns, void *pvInterface, size_t cbInterface,
     1824                                                              const char *pszSymPrefix, const char *pszSymList)
     1825{
     1826    PDMDEV_ASSERT_DEVINS(pDevIns);
     1827    VM_ASSERT_EMT(pDevIns->Internal.s.pVMR3);
     1828    LogFlow(("pdmR3DevHlp_PDMLdrGetR0InterfaceSymbols: caller='%s'/%d: pvInterface=%p cbInterface=%zu pszSymPrefix=%p:{%s} pszSymList=%p:{%s}\n",
     1829             pDevIns->pDevReg->szDeviceName, pDevIns->iInstance, pvInterface, cbInterface, pszSymPrefix, pszSymPrefix, pszSymList, pszSymList));
     1830
     1831    int rc;
     1832    if (   strncmp(pszSymPrefix, "dev", 3) == 0
     1833        && RTStrIStr(pszSymPrefix + 3, pDevIns->pDevReg->szDeviceName) != NULL)
     1834    {
     1835        if (pDevIns->pDevReg->fFlags & PDM_DEVREG_FLAGS_R0)
     1836            rc = PDMR3LdrGetInterfaceSymbols(pDevIns->Internal.s.pVMR3, pvInterface, cbInterface,
     1837                                             pDevIns->pDevReg->szDeviceName, pszSymPrefix, pszSymList,
     1838                                             true /*fRing0OrRC*/);
     1839        else
     1840        {
     1841            AssertMsgFailed(("Not a ring-0 enabled driver\n"));
     1842            rc = VERR_PERMISSION_DENIED;
     1843        }
     1844    }
     1845    else
     1846    {
     1847        AssertMsgFailed(("Invalid prefix '%s' for '%s'; must start with 'dev' and contain the driver name!\n",
     1848                         pszSymPrefix, pDevIns->pDevReg->szDeviceName));
     1849        rc = VERR_INVALID_NAME;
     1850    }
     1851
     1852    LogFlow(("pdmR3DevHlp_PDMLdrGetR0InterfaceSymbols: caller='%s'/%d: returns %Rrc\n", pDevIns->pDevReg->szDeviceName,
     1853             pDevIns->iInstance, rc));
     1854    return rc;
    17831855}
    17841856
     
    28582930    pdmR3DevHlp_AssertEMT,
    28592931    pdmR3DevHlp_AssertOther,
     2932    pdmR3DevHlp_LdrGetRCInterfaceSymbols,
     2933    pdmR3DevHlp_LdrGetR0InterfaceSymbols,
    28602934    0,
    28612935    0,
     
    30513125    pdmR3DevHlp_AssertEMT,
    30523126    pdmR3DevHlp_AssertOther,
     3127    pdmR3DevHlp_LdrGetRCInterfaceSymbols,
     3128    pdmR3DevHlp_LdrGetR0InterfaceSymbols,
    30533129    0,
    30543130    0,
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