mirror of
https://github.com/reactos/reactos.git
synced 2024-09-10 12:54:51 +00:00
![Amine Khaldi](/assets/img/avatar_default.png)
* Create a branch for some evul shell experiments. svn path=/branches/shell-experiments/; revision=61927
154 lines
3.8 KiB
C
154 lines
3.8 KiB
C
/*
|
|
* PROJECT: ReactOS kernel
|
|
* LICENSE: GPL - See COPYING in the top level directory
|
|
* FILE: base/services/eventlog/eventsource.c
|
|
* PURPOSE: Event logging service
|
|
* COPYRIGHT: Copyright 2011 Eric Kohl
|
|
*/
|
|
|
|
/* INCLUDES *****************************************************************/
|
|
|
|
#include "eventlog.h"
|
|
|
|
#define NDEBUG
|
|
#include <debug.h>
|
|
|
|
static LIST_ENTRY EventSourceListHead;
|
|
static CRITICAL_SECTION EventSourceListCs;
|
|
|
|
/* FUNCTIONS ****************************************************************/
|
|
|
|
VOID
|
|
InitEventSourceList(VOID)
|
|
{
|
|
InitializeCriticalSection(&EventSourceListCs);
|
|
InitializeListHead(&EventSourceListHead);
|
|
}
|
|
|
|
|
|
static VOID
|
|
DumpEventSourceList(VOID)
|
|
{
|
|
PLIST_ENTRY CurrentEntry;
|
|
PEVENTSOURCE EventSource;
|
|
|
|
DPRINT("DumpEventSourceList()\n");
|
|
EnterCriticalSection(&EventSourceListCs);
|
|
|
|
CurrentEntry = EventSourceListHead.Flink;
|
|
while (CurrentEntry != &EventSourceListHead)
|
|
{
|
|
EventSource = CONTAINING_RECORD(CurrentEntry,
|
|
EVENTSOURCE,
|
|
EventSourceListEntry);
|
|
|
|
DPRINT("EventSource->szName: %S\n", EventSource->szName);
|
|
|
|
CurrentEntry = CurrentEntry->Flink;
|
|
}
|
|
|
|
LeaveCriticalSection(&EventSourceListCs);
|
|
|
|
DPRINT("Done\n");
|
|
}
|
|
|
|
|
|
BOOL
|
|
LoadEventSources(HKEY hKey,
|
|
PLOGFILE pLogFile)
|
|
{
|
|
PEVENTSOURCE lpEventSource;
|
|
DWORD dwMaxSubKeyLength;
|
|
DWORD dwEventSourceNameLength;
|
|
DWORD dwIndex;
|
|
WCHAR *Buf = NULL;
|
|
|
|
DPRINT("LoadEventSources\n");
|
|
|
|
RegQueryInfoKeyW(hKey, NULL, NULL, NULL, NULL, &dwMaxSubKeyLength, NULL,
|
|
NULL, NULL, NULL, NULL, NULL);
|
|
|
|
DPRINT("dwMaxSubKeyLength: %lu\n", dwMaxSubKeyLength);
|
|
|
|
dwMaxSubKeyLength++;
|
|
|
|
Buf = HeapAlloc(MyHeap, 0, dwMaxSubKeyLength * sizeof(WCHAR));
|
|
if (!Buf)
|
|
{
|
|
DPRINT1("Error: can't allocate heap!\n");
|
|
return FALSE;
|
|
}
|
|
|
|
dwEventSourceNameLength = dwMaxSubKeyLength;
|
|
|
|
dwIndex = 0;
|
|
while (RegEnumKeyExW(hKey,
|
|
dwIndex,
|
|
Buf,
|
|
&dwEventSourceNameLength,
|
|
NULL, NULL, NULL, NULL) == ERROR_SUCCESS)
|
|
{
|
|
DPRINT("Event Source: %S\n", Buf);
|
|
|
|
lpEventSource = HeapAlloc(MyHeap, 0, sizeof(EVENTSOURCE) + wcslen(Buf) * sizeof(WCHAR));
|
|
if (lpEventSource != NULL)
|
|
{
|
|
wcscpy(lpEventSource->szName, Buf);
|
|
lpEventSource->LogFile = pLogFile;
|
|
|
|
DPRINT("Insert event source: %S\n", lpEventSource->szName);
|
|
|
|
|
|
EnterCriticalSection(&EventSourceListCs);
|
|
InsertTailList(&EventSourceListHead,
|
|
&lpEventSource->EventSourceListEntry);
|
|
LeaveCriticalSection(&EventSourceListCs);
|
|
}
|
|
|
|
dwEventSourceNameLength = dwMaxSubKeyLength;
|
|
dwIndex++;
|
|
}
|
|
|
|
HeapFree(MyHeap, 0, Buf);
|
|
|
|
DumpEventSourceList();
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
PEVENTSOURCE
|
|
GetEventSourceByName(LPCWSTR Name)
|
|
{
|
|
PLIST_ENTRY CurrentEntry;
|
|
PEVENTSOURCE Result = NULL;
|
|
|
|
DPRINT("GetEventSourceByName(%S)\n", Name);
|
|
EnterCriticalSection(&EventSourceListCs);
|
|
|
|
CurrentEntry = EventSourceListHead.Flink;
|
|
while (CurrentEntry != &EventSourceListHead)
|
|
{
|
|
PEVENTSOURCE Item = CONTAINING_RECORD(CurrentEntry,
|
|
EVENTSOURCE,
|
|
EventSourceListEntry);
|
|
|
|
DPRINT("Item->szName: %S\n", Item->szName);
|
|
// if ((*(Item->szName) != 0) && !_wcsicmp(Item->szName, Name))
|
|
if (_wcsicmp(Item->szName, Name) == 0)
|
|
{
|
|
DPRINT("Found it\n");
|
|
Result = Item;
|
|
break;
|
|
}
|
|
|
|
CurrentEntry = CurrentEntry->Flink;
|
|
}
|
|
|
|
LeaveCriticalSection(&EventSourceListCs);
|
|
|
|
DPRINT("Done (Result: %p)\n", Result);
|
|
|
|
return Result;
|
|
}
|