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