VirtualBox

Ignore:
Timestamp:
Mar 24, 2009 2:39:36 PM (16 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
44907
Message:

SUPLoggerCtl: program for controlling the ring-0 logging.

File:
1 edited

Legend:

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

    r18169 r18191  
    734734
    735735
     736/**
     737 * Worker for the SUPR3Logger* APIs.
     738 *
     739 * @returns VBox status code.
     740 * @param   enmWhich    Which logger.
     741 * @param   fWhat       What to do with the logger.
     742 * @param   pszFlags    The flags settings.
     743 * @param   pszGroups   The groups settings.
     744 * @param   pszDest     The destionation specificier.
     745 */
     746static int supR3LoggerSettings(SUPLOGGER enmWhich, uint32_t fWhat, const char *pszFlags, const char *pszGroups, const char *pszDest)
     747{
     748    size_t const cchFlags  = pszFlags  ? strlen(pszFlags)  : 0;
     749    size_t const cchGroups = pszGroups ? strlen(pszGroups) : 0;
     750    size_t const cchDest   = pszDest   ? strlen(pszDest)   : 0;
     751    size_t const cbStrTab  = cchFlags  + !!cchFlags
     752                           + cchGroups + !!cchGroups
     753                           + cchDest   + !!cchDest
     754                           + (!cchFlags && !cchGroups && !cchDest);
     755
     756    PSUPLOGGERSETTINGS pReq  = (PSUPLOGGERSETTINGS)alloca(SUP_IOCTL_LOGGER_SETTINGS_SIZE(cbStrTab));
     757    pReq->Hdr.u32Cookie = g_u32Cookie;
     758    pReq->Hdr.u32SessionCookie = g_u32SessionCookie;
     759    pReq->Hdr.cbIn  = SUP_IOCTL_LOGGER_SETTINGS_SIZE_IN(cbStrTab);
     760    pReq->Hdr.cbOut = SUP_IOCTL_LOGGER_SETTINGS_SIZE_OUT;
     761    pReq->Hdr.fFlags= SUPREQHDR_FLAGS_DEFAULT;
     762    pReq->Hdr.rc    = VERR_INTERNAL_ERROR;
     763    switch (enmWhich)
     764    {
     765        case SUPLOGGER_DEBUG:   pReq->u.In.fWhich = SUPLOGGERSETTINGS_WHICH_DEBUG; break;
     766        case SUPLOGGER_RELEASE: pReq->u.In.fWhich = SUPLOGGERSETTINGS_WHICH_RELEASE; break;
     767        default:
     768            return VERR_INVALID_PARAMETER;
     769    }
     770    pReq->u.In.fWhat = fWhat;
     771
     772    uint32_t off = 0;
     773    if (cchFlags)
     774    {
     775        pReq->u.In.offFlags = off;
     776        memcpy(&pReq->u.In.szStrings[off], pszFlags, cchFlags + 1);
     777        off += cchFlags + 1;
     778    }
     779    else
     780        pReq->u.In.offFlags = cbStrTab - 1;
     781
     782    if (cchGroups)
     783    {
     784        pReq->u.In.offGroups = off;
     785        memcpy(&pReq->u.In.szStrings[off], pszGroups, cchGroups + 1);
     786        off += cchGroups + 1;
     787    }
     788    else
     789        pReq->u.In.offGroups = cbStrTab - 1;
     790
     791    if (cchDest)
     792    {
     793        pReq->u.In.offDestination = off;
     794        memcpy(&pReq->u.In.szStrings[off], pszDest, cchDest + 1);
     795        off += cchDest + 1;
     796    }
     797    else
     798        pReq->u.In.offDestination = cbStrTab - 1;
     799
     800    if (!off)
     801    {
     802        pReq->u.In.szStrings[0] = '\0';
     803        off++;
     804    }
     805    Assert(off == cbStrTab);
     806    Assert(pReq->u.In.szStrings[cbStrTab - 1] == '\0');
     807
     808
     809    int rc = suplibOsIOCtl(&g_supLibData, SUP_IOCTL_LOGGER_SETTINGS(cbStrTab), pReq, SUP_IOCTL_LOGGER_SETTINGS_SIZE(cbStrTab));
     810    if (RT_SUCCESS(rc))
     811        rc = pReq->Hdr.rc;
     812    return rc;
     813}
     814
     815
     816SUPR3DECL(int) SUPR3LoggerSettings(SUPLOGGER enmWhich, const char *pszFlags, const char *pszGroups, const char *pszDest)
     817{
     818    return supR3LoggerSettings(enmWhich, SUPLOGGERSETTINGS_WHAT_SETTINGS, pszFlags, pszGroups, pszDest);
     819}
     820
     821
     822SUPR3DECL(int) SUPR3LoggerCreate(SUPLOGGER enmWhich, const char *pszFlags, const char *pszGroups, const char *pszDest)
     823{
     824    return supR3LoggerSettings(enmWhich, SUPLOGGERSETTINGS_WHAT_CREATE, pszFlags, pszGroups, pszDest);
     825}
     826
     827
     828SUPR3DECL(int) SUPR3LoggerDestroy(SUPLOGGER enmWhich)
     829{
     830    return supR3LoggerSettings(enmWhich, SUPLOGGERSETTINGS_WHAT_DESTROY, NULL, NULL, NULL);
     831}
     832
     833
    736834SUPR3DECL(int) SUPPageAlloc(size_t cPages, void **ppvPages)
    737835{
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