Author: mjmartin Date: Fri Nov 21 09:40:47 2008 New Revision: 37519
URL: http://svn.reactos.org/svn/reactos?rev=37519&view=rev Log: - Added EventSource structure for keeping track of EventLog Source name and associated Log File. - Added and Implemented ElfCreateEventLogHandle and ElfDeleteEventLogHandle.
Modified: trunk/reactos/base/services/eventlog/eventlog.h trunk/reactos/base/services/eventlog/rpc.c
Modified: trunk/reactos/base/services/eventlog/eventlog.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/services/eventlog/even... ============================================================================== --- trunk/reactos/base/services/eventlog/eventlog.h [iso-8859-1] (original) +++ trunk/reactos/base/services/eventlog/eventlog.h [iso-8859-1] Fri Nov 21 09:40:47 2008 @@ -94,6 +94,11 @@ LIST_ENTRY ListEntry; } LOGFILE, *PLOGFILE;
+typedef struct +{ + PLOGFILE LogFile; + WCHAR *Name; +} EVENTSOURCE, *PEVENTSOURCE;
/* file.c */ VOID LogfListInitialize(VOID);
Modified: trunk/reactos/base/services/eventlog/rpc.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/services/eventlog/rpc.... ============================================================================== --- trunk/reactos/base/services/eventlog/rpc.c [iso-8859-1] (original) +++ trunk/reactos/base/services/eventlog/rpc.c [iso-8859-1] Fri Nov 21 09:40:47 2008 @@ -41,6 +41,101 @@ return 0; }
+IELF_HANDLE ElfCreateEventLogHandle(WCHAR *Name) +{ + PEVENTSOURCE EventSourceHandle; + PLOGFILE currentLogFile = NULL; + HKEY hLogSourceNameKey = NULL; + WCHAR *SourceNameRegKey = NULL; + DWORD dwError, dwSize; + INT i, LogsActive; + + EventSourceHandle = HeapAlloc(GetProcessHeap(), 0, sizeof(EVENTSOURCE)); + if (!EventSourceHandle) + { + DPRINT1("Failed to allocate Heap!\n"); + return NULL; + } + + EventSourceHandle->Name = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY ,(wcslen(Name) + 1) * sizeof(WCHAR)); + if (!EventSourceHandle->Name) + { + HeapFree(GetProcessHeap(),0, EventSourceHandle); + DPRINT1("Failed to allocate Heap!\n"); + return NULL; + } + + wcscpy(EventSourceHandle->Name, Name); + + /* Get the number of Log Files the EventLog service found */ + LogsActive = LogfListItemCount(); + if (LogsActive == 0) + { + DPRINT1("EventLog service reports no log files!\n"); + goto Cleanup; + } + + /* Default to the Application Log, as documented on MSDN */ + EventSourceHandle->LogFile = LogfListItemByName(L"Application"); + + for (i = 1; i <= LogsActive; i++) + { + currentLogFile = LogfListItemByIndex(i); + //DPRINT1("LogFile = %S\n",currentLogFile->LogName); + + dwSize = 90; + dwSize += (wcslen(currentLogFile->LogName) + 3) * sizeof(WCHAR); + dwSize += (wcslen(Name) + 1) * sizeof(WCHAR); + + SourceNameRegKey = HeapAlloc(GetProcessHeap(), 0, dwSize); + + wcscpy(SourceNameRegKey, L"SYSTEM\CurrentControlSet\Services\EventLog\"); + wcsncat(SourceNameRegKey, currentLogFile->LogName, wcslen(currentLogFile->LogName)); + wcsncat(SourceNameRegKey, L"\",2); + wcsncat(SourceNameRegKey, Name, wcslen(Name)); + + dwError = RegOpenKeyExW(HKEY_LOCAL_MACHINE, + SourceNameRegKey, + 0, + KEY_READ, + &hLogSourceNameKey); + + HeapFree(GetProcessHeap(), 0, SourceNameRegKey); + + if (dwError == ERROR_SUCCESS) + { + EventSourceHandle->LogFile = currentLogFile; + break; + } + } + + /* If hLogSourceRegKey is NULL */ + if (!hLogSourceNameKey) + { + DPRINT1("Could not find subkey %S under any of the eventlog logfiles in registry. Using default of Application.\n",Name); + } + + if (hLogSourceNameKey) RegCloseKey(hLogSourceNameKey); + + return EventSourceHandle; + +Cleanup: + HeapFree(GetProcessHeap(), 0, EventSourceHandle->Name); + HeapFree(GetProcessHeap(), 0, EventSourceHandle); + return NULL; +} + +BOOL ElfDeleteEventLogHandle(IELF_HANDLE EventLogHandle) +{ + PEVENTSOURCE pHandle = (PEVENTSOURCE) EventLogHandle; + + if (pHandle->LogFile->Header.Signature != LOGFILE_SIGNATURE) + return FALSE; + + HeapFree(GetProcessHeap(),0,pHandle->Name); + HeapFree(GetProcessHeap(),0,pHandle); + return TRUE; +}
/* Function 0 */ NTSTATUS ElfrClearELFW(