コード例 #1
0
ファイル: Judge.cpp プロジェクト: variantf/vJudgeKernel
//
// Purpose: 
//   Logs messages to the event log
//
// Parameters:
//   szFunction - name of function that failed
// 
// Return value:
//   None
//
// Remarks:
//   The service must have an entry in the Application event log.
//
VOID SvcReportEvent(LPTSTR szFunction) 
{ 
    HANDLE hEventSource;
    LPCWSTR lpszStrings[2];
    WCHAR Buffer[80];

    hEventSource = RegisterEventSourceW(NULL, SVCNAME);

    if( NULL != hEventSource )
    {
        StringCchPrintfW(Buffer, 80, L"%s failed with %d", szFunction, GetLastError());

        lpszStrings[0] = SVCNAME;
        lpszStrings[1] = Buffer;

        ReportEventW(hEventSource,        // event log handle
                    EVENTLOG_ERROR_TYPE, // event type
                    0,                   // event category
                    EVENTLOG_ERROR_TYPE, // event identifier
                    NULL,                // no security identifier
                    2,                   // size of lpszStrings array
                    0,                   // no binary data
                    lpszStrings,         // array of strings
                    NULL);               // no binary data

        DeregisterEventSource(hEventSource);
    }
}
コード例 #2
0
ファイル: eventlog.c プロジェクト: DusteDdk/wine-multimedia
/******************************************************************************
 * ReportEventA [ADVAPI32.@]
 *
 * Writes an entry at the end of an event log.
 *
 * PARAMS
 *  hEventLog   [I] Handle of an event log.
 *  wType       [I] See MSDN doc.
 *  wCategory   [I] Event category.
 *  dwEventID   [I] Event identifier.
 *  lpUserSid   [I] Current user's security identifier.
 *  wNumStrings [I] Number of insert strings in lpStrings.
 *  dwDataSize  [I] Size of event-specific raw data to write.
 *  lpStrings   [I] Buffer containing an array of string to be merged.
 *  lpRawData   [I] Buffer containing the binary data.
 *
 * RETURNS
 *  Success: nonzero. Entry was written to the log.
 *  Failure: zero.
 *
 * NOTES
 *  The ReportEvent function adds the time, the entry's length, and the
 *  offsets before storing the entry in the log. If lpUserSid != NULL, the
 *  username is also logged.
 */
BOOL WINAPI ReportEventA ( HANDLE hEventLog, WORD wType, WORD wCategory, DWORD dwEventID,
    PSID lpUserSid, WORD wNumStrings, DWORD dwDataSize, LPCSTR *lpStrings, LPVOID lpRawData)
{
    LPWSTR *wideStrArray;
    UNICODE_STRING str;
    UINT i;
    BOOL ret;

    FIXME("(%p,0x%04x,0x%04x,0x%08x,%p,0x%04x,0x%08x,%p,%p): stub\n", hEventLog,
          wType, wCategory, dwEventID, lpUserSid, wNumStrings, dwDataSize, lpStrings, lpRawData);

    if (wNumStrings == 0) return TRUE;
    if (!lpStrings) return TRUE;

    wideStrArray = heap_alloc(sizeof(LPWSTR) * wNumStrings);
    for (i = 0; i < wNumStrings; i++)
    {
        RtlCreateUnicodeStringFromAsciiz(&str, lpStrings[i]);
        wideStrArray[i] = str.Buffer;
    }
    ret = ReportEventW(hEventLog, wType, wCategory, dwEventID, lpUserSid,
                       wNumStrings, dwDataSize, (LPCWSTR *)wideStrArray, lpRawData);
    for (i = 0; i < wNumStrings; i++)
        heap_free( wideStrArray[i] );
    heap_free(wideStrArray);
    return ret;
}
コード例 #3
0
/*
 * Class:     org_apache_log4j_nt_NTEventLogAppender
 * Method:    reportEvent
 * Signature: (ILjava/lang/String;I)V
 */
JNIEXPORT void JNICALL Java_org_apache_log4j_nt_NTEventLogAppender_reportEvent(
   JNIEnv *env, jobject java_this, jint jhandle, jstring jstr, jint priority) {
  jboolean localHandle = JNI_FALSE;
  HANDLE handle = gEventSources.getHandle(jhandle);
  if (handle == 0) {
    // Client didn't give us a handle so make a local one.
    handle = RegisterEventSourceW(NULL, L"Log4j");
    localHandle = JNI_TRUE;
  }
  
  // convert Java String to character array
  jsize msgLen = env->GetStringLength(jstr);
  jchar* msg = (jchar*) malloc((msgLen + 1) * sizeof(jchar));
  env->GetStringRegion(jstr, 0, msgLen, msg);
  msg[msgLen] = 0;
  
  // This is the only message supported by the package. It is backed by
  // a message resource which consists of just '%1' which is replaced
  // by the string we just created.
  const DWORD messageID = 0x1000;
  ReportEventW(handle, getType(priority), 
	      getCategory(priority), 
	      messageID, NULL, 1, 0, (const wchar_t**) &msg, NULL);
  
  free((void *)msg);
  if (localHandle == JNI_TRUE) {
    // Created the handle here so free it here too.
    DeregisterEventSource(handle);
  }
  return;
}
コード例 #4
0
// 
//   FUNCTION: CServiceBase::WriteEventLogEntry(PWSTR, WORD) 
// 
//   PURPOSE: Log a message to the Application event log. 
// 
//   PARAMETERS: 
//   * pszMessage - string message to be logged. 
//   * wType - the type of event to be logged. The parameter can be one of  
//     the following values. 
// 
//     EVENTLOG_SUCCESS 
//     EVENTLOG_AUDIT_FAILURE 
//     EVENTLOG_AUDIT_SUCCESS 
//     EVENTLOG_ERROR_TYPE 
//     EVENTLOG_INFORMATION_TYPE 
//     EVENTLOG_WARNING_TYPE 
// 
void CServiceBase::WriteEventLogEntry(const wchar_t* pszMessage, WORD wType) 
{ 
    HANDLE hEventSource = NULL; 
    LPCWSTR lpszStrings[2] = { NULL, NULL }; 
 
    hEventSource = RegisterEventSourceW(NULL, m_name); 
    if (hEventSource) 
    { 
        lpszStrings[0] = m_name; 
        lpszStrings[1] = pszMessage; 
 
        ReportEventW(hEventSource,  // Event log handle 
            wType,                 // Event type 
            0,                     // Event category 
            0,                     // Event identifier 
            NULL,                  // No security identifier 
            2,                     // Size of lpszStrings array 
            0,                     // No binary data 
            lpszStrings,           // Array of strings 
            NULL                   // No binary data 
            ); 
 
        DeregisterEventSource(hEventSource); 
    } 
} 
コード例 #5
0
ファイル: Logger.cpp プロジェクト: Atarity/Lightpack
void Logger::reportLog(DWORD type, DWORD msgId, LPCWSTR message, va_list ap) {
    if (m_hEventSrc && m_reportLogBuf) {
        ZeroMemory(m_reportLogBuf, REPORT_LOG_BUF_SIZE);
        int sprintfResult = wvsprintfW(m_reportLogBuf, message, ap);
        if (sprintfResult > -1)
            ReportEventW(m_hEventSrc, type & 0xFFFF, 0, msgId, NULL, 1, 0, const_cast<const WCHAR **>(&m_reportLogBuf), NULL);
    }
}
コード例 #6
0
ファイル: erlsrv_util.c プロジェクト: 0x00evil/otp
void log_info(wchar_t *mess){
  HANDLE logh;
  wchar_t *strings[] = {service_name, mess , NULL};

  if(!(logh = RegisterEventSourceW(NULL,APP_NAME)))
    return;
  ReportEventW(logh, EVENTLOG_INFORMATION_TYPE, 0, MSG_INFO,
	       NULL, 2, 0, strings, NULL);
  DeregisterEventSource(logh);
}
コード例 #7
0
static void log_event(unsigned int event_id, const char *format, ...) {
  va_list ap;
  va_start(ap, format);
  if (event_log != NULL) {
    char message[MESSAGE_SIZE];
    int n = vsnprintf_s(message, MESSAGE_SIZE, _TRUNCATE, format, ap);
    if (n > 0) {
      int severity = event_id >> 30;
      WORD type = (WORD)(severity == 3 ? EVENTLOG_ERROR_TYPE : severity == 2 ? EVENTLOG_WARNING_TYPE : EVENTLOG_INFORMATION_TYPE);
      ReportEventW(event_log, type, 0, event_id, NULL, 0, (DWORD)n, NULL, message);
    }
コード例 #8
0
void EventLogChannel::log(const Message& msg)
{
	if (!_h) open();
#if defined(POCO_WIN32_UTF8)
	std::wstring utext;
	UnicodeConverter::toUTF16(msg.getText(), utext);
	const wchar_t* pMsg = utext.c_str();
	ReportEventW(_h, getType(msg), getCategory(msg), POCO_MSG_LOG, NULL, 1, 0, &pMsg, NULL); 
#else
	const char* pMsg = msg.getText().c_str();
	ReportEvent(_h, getType(msg), getCategory(msg), POCO_MSG_LOG, NULL, 1, 0, &pMsg, NULL); 
#endif
}
コード例 #9
0
void writeLogW(const wchar_t* const infoStr) {
#if TARGET_OS_MAC
	printf("%ls\n", infoStr);
#endif
#if TARGET_OS_WIN
	HANDLE hSource;
	wchar_t* szList[1];
	szList[0] = const_cast<wchar_t*>(infoStr);
	hSource = RegisterEventSource(NULL, VizKit::VisualConfiguration::kVisualPluginName);
	if (hSource != NULL)  {
		ReportEventW(hSource, EVENTLOG_INFORMATION_TYPE, 0, 0, NULL, 1, 0, (LPCWSTR*)szList, NULL);
		DeregisterEventSource(hSource);
	}
#endif
}
コード例 #10
0
ファイル: wpkg_common.cpp プロジェクト: cleitet/wpkg-gp
DWORD logMessage(WORD wType, LPCWSTR message)
{
	debug(L"Starting RegisterEventSourceW\n");
	HANDLE hEventLog = RegisterEventSourceW(NULL, PROVIDER_NAME);
	LPCWSTR pInsertStrings[1] = {message};
	DWORD dwEventDataSize = 0;

	if (hEventLog == NULL)
		return FALSE;

	debug(L"Starting ReportEventW\n");
	if (!ReportEventW(hEventLog, wType, NULL, EVMSG_STDMSG, NULL, 1, 0, pInsertStrings, NULL)) {
		DeregisterEventSource(hEventLog);
		return FALSE;
	}
	DeregisterEventSource(hEventLog);
	return TRUE;
}
コード例 #11
0
ファイル: misc.c プロジェクト: RareHare/reactos
BOOL
WriteLogMessage(WORD wType, DWORD dwEventID, LPWSTR lpMsg)
{
    if (!SettingsInfo.bLogEnabled) return TRUE;

    if (!ReportEventW(hLog,
                      wType,
                      0,
                      dwEventID,
                      NULL,
                      1,
                      0,
                      (LPCWSTR*)&lpMsg,
                      NULL))
    {
        return FALSE;
    }

    return TRUE;
}
コード例 #12
0
ファイル: logging_srv_win.cpp プロジェクト: Klaim/falcon
void LogChannelSyslog::writeLogEntry( const String& entry, LogChannel::LogMessage* pOrigMsg )
{
   WORD wType;
   DWORD dwEventID;

   if ( pOrigMsg->m_level <= LOGLEVEL_ERROR )
   {  
      wType = EVENTLOG_ERROR_TYPE;
	  dwEventID = 3 << 30;
   }
   else if ( pOrigMsg->m_level == LOGLEVEL_WARN )
   {
      wType = EVENTLOG_WARNING_TYPE;
	  dwEventID = 2 << 30;
   }
   else {
      wType = EVENTLOG_INFORMATION_TYPE;
	  dwEventID = 1 << 30;
   }

   // From MS docs; event ID  = gravity | custom | facility | code;
   dwEventID |= (1 << 29) | ((m_facility&0x1FF) << 16) | (pOrigMsg->m_code & 0xFFFF);

   AutoWString w_msg( entry );
   
   const wchar_t* strings[] = { w_msg.w_str() };
   ReportEventW(
	   (HANDLE)m_sysdata,	// __in  HANDLE hEventLog,
	   wType,				// __in  WORD wType,
	   m_facility,			// __in  WORD wCategory,
	   dwEventID,			// __in  DWORD dwEventID,
	   NULL,				// __in  PSID lpUserSid,
	   1,					// __in  WORD wNumStrings,
	   0,					// __in  DWORD dwDataSize,
	   strings,				// __in  LPCTSTR *lpStrings,
	   NULL					// __in  LPVOID lpRawData
	   );

}
コード例 #13
0
static void
windows_event_logger_log(grn_ctx *ctx, grn_log_level level,
                         const char *timestamp, const char *title,
                         const char *message, const char *location,
                         void *user_data)
{
    grn_windows_event_logger_data *data = user_data;
    WORD type;
    WORD category = 0;
    DWORD event_id = 0;
    PSID user_sid = NULL;
    WORD n_strings = 1;
    DWORD event_data_size = 0;
    const WCHAR *strings[1];
    LPVOID event_data = NULL;
    const char level_marks[] = " EACewnid-";
    grn_obj formatted_buffer;
    UINT code_page;
    DWORD convert_flags = 0;
    int n_converted_chars;

    switch (level) {
    case GRN_LOG_NONE :
        return;
        break;
    case GRN_LOG_EMERG :
    case GRN_LOG_ALERT :
    case GRN_LOG_CRIT :
    case GRN_LOG_ERROR :
        type = EVENTLOG_ERROR_TYPE;
        break;
    case GRN_LOG_WARNING :
        type = EVENTLOG_WARNING_TYPE;
        break;
    case GRN_LOG_NOTICE :
    case GRN_LOG_INFO :
    case GRN_LOG_DEBUG :
    case GRN_LOG_DUMP :
        type = EVENTLOG_INFORMATION_TYPE;
        break;
    default :
        type = EVENTLOG_ERROR_TYPE;
        break;
    }

    if (data->event_source == INVALID_HANDLE_VALUE) {
        data->event_source = RegisterEventSourceA(NULL, data->event_source_name);
        if (data->event_source == INVALID_HANDLE_VALUE) {
            return;
        }
    }

    GRN_TEXT_INIT(&formatted_buffer, 0);
    if (location && location[0]) {
        grn_text_printf(ctx, &formatted_buffer, "%s|%c|%s %s %s",
                        timestamp, level_marks[level], title, message, location);
    } else {
        grn_text_printf(ctx, &formatted_buffer, "%s|%c|%s %s",
                        timestamp, level_marks[level], title, message);
    }

    code_page = grn_windows_encoding_to_code_page(ctx->encoding);

    n_converted_chars = MultiByteToWideChar(code_page,
                                            convert_flags,
                                            GRN_TEXT_VALUE(&formatted_buffer),
                                            GRN_TEXT_LEN(&formatted_buffer),
                                            NULL,
                                            0);
#define CONVERTED_BUFFER_SIZE 512
    if (n_converted_chars < CONVERTED_BUFFER_SIZE) {
        WCHAR converted_buffer[CONVERTED_BUFFER_SIZE];
        n_converted_chars = MultiByteToWideChar(code_page,
                                                convert_flags,
                                                GRN_TEXT_VALUE(&formatted_buffer),
                                                GRN_TEXT_LEN(&formatted_buffer),
                                                converted_buffer,
                                                CONVERTED_BUFFER_SIZE);
        converted_buffer[n_converted_chars] = L'\0';
        strings[0] = converted_buffer;
        ReportEventW(data->event_source, type, category, event_id, user_sid,
                     n_strings, event_data_size,
                     strings, event_data);
#undef CONVERTED_BUFFER_SIZE
    } else {
        WCHAR *converted;
        converted = GRN_MALLOCN(WCHAR, n_converted_chars);
        n_converted_chars = MultiByteToWideChar(code_page,
                                                convert_flags,
                                                GRN_TEXT_VALUE(&formatted_buffer),
                                                GRN_TEXT_LEN(&formatted_buffer),
                                                converted,
                                                n_converted_chars);
        converted[n_converted_chars] = L'\0';
        strings[0] = converted;
        ReportEventW(data->event_source, type, category, event_id, user_sid,
                     n_strings, event_data_size,
                     strings, event_data);
        GRN_FREE(converted);
    }
    GRN_OBJ_FIN(ctx, &formatted_buffer);
}
コード例 #14
0
void CAGCEventLogger::LogEvent(IAGCEvent* pEvent, bool bSynchronous)
{
  PRIVATE_ASSERTE(pEvent);
  XLock lock(this);

  // Determine if we can log to either event log type
  bool bLogToNT = m_bLoggingToNTEnabled && !m_shEventLog.IsNull();
  bool bLogToDB = m_bLoggingToDBEnabled && m_ds.m_spInit != NULL;

  // Get the event ID
  AGCEventID idEvent;
  PRIVATE_VERIFYE(SUCCEEDED(pEvent->get_ID(&idEvent)));

  // Determine if the event is enabled for each event log type
  VARIANT_BOOL bEnabled;
  if (bLogToNT && NULL != m_spRangesNT
    && SUCCEEDED(m_spRangesNT->get_IntersectsWithValue(idEvent, &bEnabled)))
      bLogToNT = !!bEnabled;
  if (bLogToDB && NULL != m_spRangesDB
    && SUCCEEDED(m_spRangesDB->get_IntersectsWithValue(idEvent, &bEnabled)))
      bLogToDB = !!bEnabled;

  // Unlock the CritSec
  lock.Unlock();

  // Do nothing if we're not logging this event anywhere
  if (!bLogToNT && !bLogToDB)
    return;

  // Find the event definition
  const CAGCEventDef::XEventDef* pEventDef = CAGCEventDef::find(idEvent);
  PRIVATE_ASSERTE(pEventDef);

  // Output the event to the debug monitor
  #if 0 && defined(_DEBUG)
  {
    CComBSTR bstrDescription, bstrSubjectName;
    PRIVATE_VERIFYE(SUCCEEDED(pEvent->get_Description(&bstrDescription)));
    PRIVATE_VERIFYE(SUCCEEDED(pEvent->get_SubjectName (&bstrSubjectName)));
    int cchDbg = bstrSubjectName.Length() + bstrDescription.Length() + 16;
    _TRACE_BEGIN_SIZE(cchDbg)
      if (bstrSubjectName.Length())
        _TRACE_PART1("%ls:\n", (BSTR)bstrSubjectName);
      if (bstrDescription.Length())
        _TRACE_PART1("%ls\n" , (BSTR)bstrDescription);
    _TRACE_END
  }
  #endif // defined(_DEBUG)

  // Log the event to the NT Event Log, if specified
  if (bLogToNT)
  {
    PRIVATE_ASSERTE(IsWinNT());

    IAGCEventLoggerHookPtr spHook;
    get_HookForNTLogging(&spHook);
    if (NULL == spHook || S_FALSE == spHook->LogEvent(pEvent, VARBOOL(bSynchronous)))
    {
      XLock lockNT(this);
      if (m_bLoggingToNTEnabled && !m_shEventLog.IsNull())
      {
        // Get the event severity
        WORD wSeverity = pEventDef->m_wSeverity;

        // Create the full event id (regarding the MC-generated id's)
        UINT nBits;
        switch (wSeverity)
        {
          case EVENTLOG_INFORMATION_TYPE: nBits = 0x01 << 30; break;
          case EVENTLOG_WARNING_TYPE    : nBits = 0x02 << 30; break;
          case EVENTLOG_ERROR_TYPE      : nBits = 0x03 << 30; break;
          case EVENTLOG_SUCCESS         : nBits = 0x00 << 30; break;
          default                       : PRIVATE_ASSERTE(!"Bad severity code.");
        }
        DWORD dwEventID = nBits | idEvent;

        // Get the event replacement parameters
        CAGCEventDef::XParamStrings vecParamStrings;
        PRIVATE_VERIFYE(SUCCEEDED(CAGCEventDef::GetEventParameters(pEvent,
          vecParamStrings, pEventDef)));
	
		// mdvalley: prevent crashes when no %Parameter% in strings.
		// That took so long to figure out.
		WORD NumStrings = vecParamStrings.size();
		LPCWSTR* lpStrings = NULL;
		if(NumStrings)
			lpStrings = (LPCWSTR*)(&(*vecParamStrings.begin()));

        // Report the event to the NT Event log
        ReportEventW(m_shEventLog, wSeverity, 0, dwEventID, NULL,
          vecParamStrings.size(), 0,
// VS.Net 2003 port
#if _MSC_VER >= 1310
        lpStrings, NULL);
//		(LPCWSTR*)(&(*vecParamStrings.begin())), NULL);
#else
		(LPCWSTR*)(vecParamStrings.begin()), NULL);
#endif

        // Free the replacement parameters BSTR's
        for (CAGCEventDef::XParamStrings::iterator it = vecParamStrings.begin();
          it != vecParamStrings.end(); ++it)
            SysFreeString(*it);
      }
    }