Share via


Reading Informational, Warning, and Error Messages

The following code fragment shows you how to query for user-defined status messages that were generated using the informational, warning, and error methods.

  [C/C++]
    IWbemClassObject      *pinstMessage;
    IEnumWbemClassObject  *penumMessages= NULL;
    unsigned long          ulReturned;

    //Query reads the message created by the example in Reporting Informational,
    //Warning, and Error Status Messages.
    _bstr_t bstrQuery = L"SELECT b.Component, b.MachineName, "
                        L"       b.MessageType, b.MessageID, "
                        L"       c.insstrvalue, d.attributevalue "
                        L"FROM SMS_StatusMessage b "
                        L"     JOIN SMS_StatMsgInsStrings c ON b.RecordID = c.RecordID "
                        L"     JOIN SMS_StatMsgAttributes d ON c.RecordID = d.RecordID "
                        L"WHERE b.Component = \"<componentname>\" "
                        L"AND   d.AttributeID = 400 "
                        L"AND   d.AttributeValue = \"<packageid>\" ";


    hr = pServices->ExecQuery(_bstr_t(L"WQL"), bstrQuery,
                              WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
                              NULL, &penumMessages);

    hr = CoSetProxyBlanket(penumMessages,
                           RPC_C_AUTHN_WINNT, RPC_C_AUTHZ_NONE, NULL,
                           RPC_C_AUTHN_LEVEL_CONNECT, RPC_C_IMP_LEVEL_IMPERSONATE,
                           NULL, EOAC_NONE);

    hr = penumMessages->Next(WBEM_INFINITE, 1, &pinstMessage, &ulReturned);
    while (ulReturned)
    {
        BSTR   bstrObjText = NULL;

        pinstMessage->GetObjectText(0, &bstrObjText);
        MessageBox(HWND_DESKTOP,
                  (const char *)_bstr_t(bstrObjText),
                  "Message Query", MB_OK);
        pinstMessage->Release();
        SysFreeString(bstrObjText);

        hr = penumMessages->Next(WBEM_INFINITE, 1, &pinstMessage, &ulReturned);
    }

    penumMessages->Release();

[Visual Basic]
    Dim Services As SWbemServices
    Dim Message As SWbemObject
    Dim MessageSet As SWbemObjectSet
    Dim Query As String

    Set Services = GetObject("winmgmts:root/sms/site_<sitecode>")

    'Query reads the message created by the example in Reporting Informational,
    'Warning, and Error Status Messages.
    Query = "SELECT b.Component, b.MachineName, b.MessageType, b.MessageID, " & _
            "       c.InsStrValue, d.AttributeValue " & _
            "FROM SMS_StatusMessage b " & _
            "     JOIN SMS_StatMsgInsStrings c ON b.RecordID = c.RecordID " & _
            "     JOIN SMS_StatMsgAttributes d ON c.RecordID = d.RecordID " & _
            "WHERE b.Component = '<componentname>' " & _
            "AND   d.AttributeID = 400 " & _
            "AND   d.AttributeValue = '<packageid>' "

    Set MessageSet = Services.ExecQuery(Query, , wbemFlagForwardOnly Or wbemFlagReturnImmediately)

    For Each Message In MessageSet
        MsgBox Message.GetObjectText_
    Next