• Event log c++ sample.


    1. Init regedit.
    bool InitLog( TCHAR *logName, TCHAR *sourceName, TCHAR *MessageDllName )
        {
            // This number of categories for the event source.
            DWORD dwCategoryNum = 1;
    
            HKEY hk; 
            DWORD dwData, dwDisp; 
            TCHAR szBuf[MAX_PATH]; 
            size_t cchSize = MAX_PATH;
    
            // Create the event source as a subkey of the log.
    
            HRESULT hr = _stprintf_s(szBuf,  //
                _T("SYSTEM\CurrentControlSet\Services\EventLog\%s\%s"),
                logName, sourceName); 
    
            if (RegCreateKeyEx(HKEY_LOCAL_MACHINE, szBuf, 
                0, NULL, REG_OPTION_NON_VOLATILE,
                KEY_WRITE, NULL, &hk, &dwDisp)) 
            {
                return false ;
            }
    
            // Set the name of the message file. 
    
            if (RegSetValueEx(hk,             // subkey handle 
                _T("EventMessageFile"),        // value name 
                0,                         // must be zero 
                REG_EXPAND_SZ,             // value type 
                (LPBYTE) MessageDllName,          // pointer to value data 
                (DWORD) (lstrlen(MessageDllName)+1)*sizeof(TCHAR))) // data size
            {
                RegCloseKey(hk); 
                return false ;
            }
    
            // Set the supported event types. 
    
            dwData = EVENTLOG_ERROR_TYPE | EVENTLOG_WARNING_TYPE | 
                EVENTLOG_INFORMATION_TYPE; 
    
            if (RegSetValueEx(hk,      // subkey handle 
                _T("TypesSupported"),  // value name 
                0,                 // must be zero 
                REG_DWORD,         // value type 
                (LPBYTE) &dwData,  // pointer to value data 
                sizeof(DWORD)))    // length of value data 
            {
                RegCloseKey(hk); 
                return false ;
            }
    
            // Set the category message file and number of categories.
    
            if (RegSetValueEx(hk,              // subkey handle 
                _T("CategoryMessageFile"),     // value name 
                0,                         // must be zero 
                REG_EXPAND_SZ,             // value type 
                (LPBYTE) MessageDllName,          // pointer to value data 
                (DWORD) (lstrlen(MessageDllName)+1)*sizeof(TCHAR))) // data size
            {
                RegCloseKey(hk); 
                return false ;
            }
    
            if (RegSetValueEx(hk,            // subkey handle 
                _T("CategoryCount"),         // value name 
                0,                       // must be zero 
                REG_DWORD,               // value type 
                (LPBYTE) &dwCategoryNum, // pointer to value data 
                sizeof(DWORD)))          // length of value data 
            {
                RegCloseKey(hk);
                return false ;
            }
    
            RegCloseKey(hk);
    
    
            //设置按需要覆盖重写日志
            HKEY hKey;  
    
            hr = _stprintf_s(szBuf,  //
                _T("SYSTEM\CurrentControlSet\Services\EventLog\%s"),
                logName); 
    
            if(::RegOpenKeyEx(HKEY_LOCAL_MACHINE, szBuf, NULL, KEY_ALL_ACCESS, &hKey) == ERROR_SUCCESS)
            {
                DWORD dwRetentionNum = 0;
                if (RegSetValueEx(hKey,            // subkey handle 
                    _T("Retention"),         // value name 
                    0,                       // must be zero 
                    REG_DWORD,               // value type 
                    (LPBYTE) &dwRetentionNum, // pointer to value data 
                    sizeof(DWORD)))          // length of value data 
                {
                    RegCloseKey(hKey);
                    return false ;
                }
            }
            RegCloseKey(hKey);
    
    
            _tcscpy_s ( m_SourceName, sourceName ) ;
    
    
            return true ;
        }

      2. Insert log

        void Log_Event ( DWORD dwEventId, WORD wType, TCHAR *pStr )
        {
            TCHAR* pBuf[1] ;
            pBuf[0] = pStr ;
                    
            if ( !m_bInit )
            {
                _tcscpy_s ( m_SourceName, _T("FAIL") ) ;
                dwEventId = 0 ;
            }
    
            HANDLE hEventSource = RegisterEventSource ( NULL, m_SourceName ) ;
            if ( hEventSource != NULL )
            {
                ReportEvent ( hEventSource, // handle of event source
                    wType,  // event type
                    0,                    // event category
                    dwEventId,                    // event ID
                    NULL,                 // current user's SID
                    1,                    // strings in lpszStrings
                    0,                    // no bytes of raw data
                    (LPCTSTR*)pBuf,  // array of error strings
                    NULL ) ;              // no raw data
    
                DeregisterEventSource ( hEventSource ) ;
            }
        }

    http://msdn.microsoft.com/en-us/library/aa363680(v=vs.85).aspx
  • 相关阅读:
    [ 随手记 4 ]C/C++ 模板(Template)使用/重载区别
    [ 随手记 3 ] 堆区/栈区/堆栈/队列
    [ 随手记 2 ] C/C++ 数组/指针/传数组到函数/指针数组/数组指针
    柯西方程的另外一种解法
    十分强大的CC抛物线定理(数学)
    模板_BIT
    模板_SEG_TREE
    模板_SPLAY
    模板_LCA
    NOIP游(GUNCU)记
  • 原文地址:https://www.cnblogs.com/iclk/p/3544552.html
Copyright © 2020-2023  润新知