Don't create files when booting from CD

Implement EventLogOpenA (wrapper over unimplemented EventLogOpenW)

svn path=/trunk/; revision=21224
This commit is contained in:
Saveliy Tretiakov 2006-03-04 17:04:42 +00:00
parent 8f1b7df719
commit 3f4ded7db8
5 changed files with 159 additions and 58 deletions

View file

@ -1,10 +1,10 @@
/* /*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel * PROJECT: ReactOS kernel
* LICENSE: GPL - See COPYING in the top level directory
* FILE: services/eventlog/eventlog.c * FILE: services/eventlog/eventlog.c
* PURPOSE: Event logging service * PURPOSE: Event logging service
* PROGRAMMERS: Saveliy Tretiakov (saveliyt@mail.ru) * COPYRIGHT: Copyright 2002 Eric Kohl
* Eric Kohl * Copyright 2005 Saveliy Tretiakov
*/ */
@ -18,8 +18,11 @@ SERVICE_TABLE_ENTRY ServiceTable[2] =
{NULL, NULL} {NULL, NULL}
}; };
/* GLOBAL VARIABLES */
HANDLE MyHeap = NULL; HANDLE MyHeap = NULL;
PLOGFILE SystemLog = NULL; PLOGFILE SystemLog = NULL;
PLOGFILE ApplicationLog = NULL;
BOOL onLiveCD = FALSE; // On livecd events will go to debug output only
VOID CALLBACK ServiceMain(DWORD argc, LPTSTR *argv) VOID CALLBACK ServiceMain(DWORD argc, LPTSTR *argv)
{ {
@ -51,7 +54,7 @@ VOID CALLBACK ServiceMain(DWORD argc, LPTSTR *argv)
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
WCHAR SysLogPath[MAX_PATH]; WCHAR LogPath[MAX_PATH];
MyHeap = HeapCreate(0, 1024*256, 0); MyHeap = HeapCreate(0, 1024*256, 0);
if(MyHeap==NULL) if(MyHeap==NULL)
@ -64,18 +67,38 @@ int main(int argc, char *argv[])
This will be fixed in near future This will be fixed in near future
*/ */
GetWindowsDirectory(SysLogPath, MAX_PATH); GetWindowsDirectory(LogPath, MAX_PATH);
lstrcat(SysLogPath, L"\\system32\\config\\SysEvent.evt"); if(GetDriveType(LogPath) == DRIVE_CDROM)
{
DPRINT("LiveCD detected\n");
onLiveCD = TRUE;
}
else
{
lstrcat(LogPath, L"\\system32\\config\\SysEvent.evt");
SystemLog = LogfCreate(L"System", SysLogPath); SystemLog = LogfCreate(L"System", LogPath);
if(SystemLog == NULL) if(SystemLog == NULL)
{ {
DbgPrint("EventLog: FATAL ERROR, can't create %S\n", SysLogPath); DbgPrint("EventLog: FATAL ERROR, can't create %S\n", LogPath);
HeapDestroy(MyHeap); HeapDestroy(MyHeap);
return 1; return 1;
} }
GetWindowsDirectory(LogPath, MAX_PATH);
lstrcat(LogPath, L"\\system32\\config\\AppEvent.evt");
ApplicationLog = LogfCreate(L"Application", LogPath);
if(ApplicationLog == NULL)
{
DbgPrint("EventLog: FATAL ERROR, can't create %S\n", LogPath);
HeapDestroy(MyHeap);
return 1;
}
}
StartServiceCtrlDispatcher(ServiceTable); StartServiceCtrlDispatcher(ServiceTable);
LogfClose(SystemLog); LogfClose(SystemLog);

View file

@ -1,11 +1,12 @@
/* /*
* COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel
* PROJECT: ReactOS * LICENSE: GPL - See COPYING in the top level directory
* FILE: eventlog.h * FILE: services/eventlog/eventlog.h
* PURPOSE: Event logging service * PURPOSE: Event logging service
* PROGRAMMER: Saveliy Tretiakov (saveliyt@mail.ru) * COPYRIGHT: Copyright 2005 Saveliy Tretiakov
*/ */
#ifndef __EVENTLOG_H__ #ifndef __EVENTLOG_H__
#define __EVENTLOG_H__ #define __EVENTLOG_H__
@ -17,16 +18,18 @@
#include <obfuncs.h> #include <obfuncs.h>
#include <iotypes.h> #include <iotypes.h>
#include <debug.h> #include <debug.h>
#include <pseh/pseh.h>
#include "eventlogrpc_s.h" #include "eventlogrpc_s.h"
typedef struct _IO_ERROR_LPC typedef struct _IO_ERROR_LPC
{ {
PORT_MESSAGE Header; PORT_MESSAGE Header;
IO_ERROR_LOG_MESSAGE Message; IO_ERROR_LOG_MESSAGE Message;
} IO_ERROR_LPC, *PIO_ERROR_LPC; } IO_ERROR_LPC, *PIO_ERROR_LPC;
#define LOGHANDLE unsigned char* #define LOGHANDLE unsigned int
#define PLOGHANDLE int* #define PLOGHANDLE unsigned int*
#define MAJORVER 1 #define MAJORVER 1
#define MINORVER 1 #define MINORVER 1
@ -102,6 +105,8 @@ PLOGFILE LogfListItemByIndex(INT Index);
PLOGFILE LogfListItemByName(WCHAR *Name); PLOGFILE LogfListItemByName(WCHAR *Name);
INT LogfListItemIndexByName(WCHAR *Name);
VOID LogfListAddItem(PLOGFILE Item); VOID LogfListAddItem(PLOGFILE Item);
VOID LogfListRemoveItem(PLOGFILE Item); VOID LogfListRemoveItem(PLOGFILE Item);
@ -199,7 +204,8 @@ NTSTATUS EventLogGetOldestRec(
LOGHANDLE Handle, LOGHANDLE Handle,
unsigned long *OldestRecNumber); unsigned long *OldestRecNumber);
NTSTATUS Unknown6(handle_t BindingHandle); NTSTATUS EventLogChangeNotify(
handle_t BindingHandle);
NTSTATUS EventLogOpenW( NTSTATUS EventLogOpenW(
handle_t BindingHandle, handle_t BindingHandle,
@ -250,7 +256,9 @@ NTSTATUS EventLogReportEventW(
unsigned char *SID, unsigned char *SID,
wchar_t *Strings, wchar_t *Strings,
unsigned char *Data, unsigned char *Data,
unsigned short Flags); unsigned short Flags,
unsigned long * unknown1,
unsigned long * unknown2);
NTSTATUS EventLogClearA( NTSTATUS EventLogClearA(
handle_t BindingHandle, handle_t BindingHandle,
@ -311,13 +319,18 @@ NTSTATUS EventLogReportEventA(
unsigned char *SID, unsigned char *SID,
char* Strings, char* Strings,
unsigned char *Data, unsigned char *Data,
unsigned short Flags); unsigned short Flags,
unsigned long * unknown1,
unsigned long * unknown2);
NTSTATUS Unknown19(handle_t BindingHandle); NTSTATUS EventLogRegisterClusterSvc(
handle_t BindingHandle);
NTSTATUS Unknown20(handle_t BindingHandle); NTSTATUS EventLogDeregisterClusterSvc(
handle_t BindingHandle);
NTSTATUS Unknown21(handle_t BindingHandle); NTSTATUS EventLogWriteClusterEvents(
handle_t BindingHandle);
NTSTATUS EventLogGetInfo( NTSTATUS EventLogGetInfo(
handle_t BindingHandle, handle_t BindingHandle,
@ -327,6 +340,8 @@ NTSTATUS EventLogGetInfo(
unsigned long BufSize, unsigned long BufSize,
unsigned long *BytesNeeded); unsigned long *BytesNeeded);
NTSTATUS EventLogFlush(
handle_t BindingHandle);
#endif /* __EVENTLOG_H__ */ #endif /* __EVENTLOG_H__ */

View file

@ -1,9 +1,9 @@
/* /*
* COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel
* PROJECT: ReactOS * LICENSE: GPL - See COPYING in the top level directory
* FILE: services/eventlog/file.c * FILE: services/eventlog/file.c
* PURPOSE: Event logging service * PURPOSE: Event logging service
* PROGRAMMER: Saveliy Tretiakov (saveliyt@mail.ru) * COPYRIGHT: Copyright 2005 Saveliy Tretiakov
*/ */
#include "eventlog.h" #include "eventlog.h"
@ -204,7 +204,7 @@ PLOGFILE LogfCreate(WCHAR *LogName,
if(LogFile->hFile == INVALID_HANDLE_VALUE) if(LogFile->hFile == INVALID_HANDLE_VALUE)
{ {
DbgPrint("EventLog: Can't open file %S.\n", FileName); DPRINT("Can't create file %S.\n", FileName);
HeapFree(MyHeap, 0, LogFile); HeapFree(MyHeap, 0, LogFile);
return NULL; return NULL;
} }
@ -310,9 +310,29 @@ PLOGFILE LogfListItemByName(WCHAR *Name)
return NULL; return NULL;
} }
/* index starting from 1 */
INT LogfListItemIndexByName(WCHAR *Name)
{
PLOGFILE Item;
INT i = 1;
Item = LogfListHead();
while(Item)
{
if(Item->LogName && lstrcmpW(Item->LogName, Name)==0)
return i;
Item = (PLOGFILE)Item->Next;
i++;
}
return 0;
}
/* index starting from 1 */
PLOGFILE LogfListItemByIndex(INT Index) PLOGFILE LogfListItemByIndex(INT Index)
{ {
INT i = 0; INT i = 1;
PLOGFILE Item; PLOGFILE Item;
Item = LogfListHead(); Item = LogfListHead();
while(Item) while(Item)

View file

@ -1,10 +1,10 @@
/* /*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel * PROJECT: ReactOS kernel
* LICENSE: GPL - See COPYING in the top level directory
* FILE: services/eventlog/logport.c * FILE: services/eventlog/logport.c
* PURPOSE: Event logging service * PURPOSE: Event logging service
* PROGRAMMER: Eric Kohl * COPYRIGHT: Copyright 2002 Eric Kohl
* Saveliy Tretiakov (saveliyt@mail.ru) * Copyright 2005 Saveliy Tretiakov
*/ */
/* INCLUDES *****************************************************************/ /* INCLUDES *****************************************************************/
@ -17,7 +17,7 @@ HANDLE ConnectPortHandle = NULL;
HANDLE MessagePortHandle = NULL; HANDLE MessagePortHandle = NULL;
extern PLOGFILE SystemLog; extern PLOGFILE SystemLog;
extern HANDLE MyHeap; extern HANDLE MyHeap;
extern BOOL onLiveCD;
/* FUNCTIONS ****************************************************************/ /* FUNCTIONS ****************************************************************/
@ -205,7 +205,7 @@ NTSTATUS ProcessPortMessage(VOID)
PRINT_RECORD(pRec); PRINT_RECORD(pRec);
DPRINT("\n"); DPRINT("\n");
if(SystemLog) if(!onLiveCD && SystemLog)
{ {
if(!LogfWriteData(SystemLog, ulRecSize, (PBYTE)pRec)) if(!LogfWriteData(SystemLog, ulRecSize, (PBYTE)pRec))
DPRINT("LogfWriteData failed!\n"); DPRINT("LogfWriteData failed!\n");

View file

@ -1,9 +1,9 @@
/* /*
* COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel
* PROJECT: ReactOS * LICENSE: GPL - See COPYING in the top level directory
* FILE: services/eventlog/rpc.c * FILE: services/eventlog/rpc.c
* PURPOSE: Event logging service * PURPOSE: Event logging service
* PROGRAMMER: Saveliy Tretiakov (savelity@mail.ru) * COPYRIGHT: Copyright 2005 Saveliy Tretiakov
*/ */
#include "eventlog.h" #include "eventlog.h"
@ -104,10 +104,11 @@ NTSTATUS EventLogGetOldestRec(
} }
/* FIXME */ /* Function 6 */
NTSTATUS Unknown6(handle_t BindingHandle) NTSTATUS EventLogChangeNotify(
handle_t BindingHandle)
{ {
DPRINT("Unknown6() called\n"); DPRINT("EventLogChangeNotify UNIMPLEMENTED\n");
return STATUS_NOT_IMPLEMENTED; return STATUS_NOT_IMPLEMENTED;
} }
@ -116,7 +117,7 @@ NTSTATUS Unknown6(handle_t BindingHandle)
NTSTATUS EventLogOpenW( NTSTATUS EventLogOpenW(
handle_t BindingHandle, handle_t BindingHandle,
LPWSTR ServerName, LPWSTR ServerName,
wchar_t *FileName, wchar_t *LogName,
wchar_t *NullStr, wchar_t *NullStr,
unsigned long MajorVer, unsigned long MajorVer,
unsigned long MinorVer, unsigned long MinorVer,
@ -186,7 +187,9 @@ NTSTATUS EventLogReportEventW(
unsigned char *SID, unsigned char *SID,
wchar_t *Strings, wchar_t *Strings,
unsigned char *Data, unsigned char *Data,
unsigned short Flags) unsigned short Flags,
unsigned long * unknown1,
unsigned long * unknown2)
{ {
DPRINT("EventLogReportEventW UNIMPLEMENTED\n"); DPRINT("EventLogReportEventW UNIMPLEMENTED\n");
return STATUS_NOT_IMPLEMENTED; return STATUS_NOT_IMPLEMENTED;
@ -225,8 +228,33 @@ NTSTATUS EventLogOpenA(
unsigned long MinorVer, unsigned long MinorVer,
PLOGHANDLE Handle) PLOGHANDLE Handle)
{ {
DPRINT("EventLogOpenA UNIMPLEMENTED\n"); UNICODE_STRING logname = {0}, servername={0};
return STATUS_NOT_IMPLEMENTED; NTSTATUS status;
if(LogName && !RtlCreateUnicodeStringFromAsciiz(&logname, LogName))
{
return STATUS_NO_MEMORY;
}
if(ServerName &&
!RtlCreateUnicodeStringFromAsciiz(&servername, ServerName))
{
RtlFreeUnicodeString(&servername);
return STATUS_NO_MEMORY;
}
status = EventLogOpenW(BindingHandle,
servername.Buffer,
logname.Buffer,
L"",
MajorVer,
MinorVer,
Handle);
RtlFreeUnicodeString(&servername);
RtlFreeUnicodeString(&logname);
return status;
} }
@ -289,33 +317,38 @@ NTSTATUS EventLogReportEventA(
unsigned char *SID, unsigned char *SID,
char* Strings, char* Strings,
unsigned char *Data, unsigned char *Data,
unsigned short Flags) unsigned short Flags,
unsigned long * unknown1,
unsigned long * unknown2)
{ {
DPRINT("EventLogReportEventA UNIMPLEMENTED\n"); DPRINT("EventLogReportEventA UNIMPLEMENTED\n");
return STATUS_NOT_IMPLEMENTED; return STATUS_NOT_IMPLEMENTED;
} }
/* FIXME */ /* Function 19 */
NTSTATUS Unknown19(handle_t BindingHandle) NTSTATUS EventLogRegisterClusterSvc(
handle_t BindingHandle)
{ {
DPRINT("Unknown19 called\n"); DPRINT("EventLogRegisterClusterSvc UNIMPLEMENTED\n");
return STATUS_NOT_IMPLEMENTED; return STATUS_NOT_IMPLEMENTED;
} }
/* FIXME */ /* Function 20 */
NTSTATUS Unknown20(handle_t BindingHandle) NTSTATUS EventLogDeregisterClusterSvc(
handle_t BindingHandle)
{ {
DPRINT("Unknown20 called\n"); DPRINT("EventLogDeregisterClusterSvc UNIMPLEMENTED\n");
return STATUS_NOT_IMPLEMENTED; return STATUS_NOT_IMPLEMENTED;
} }
/* FIXME */ /* Function 21 */
NTSTATUS Unknown21(handle_t BindingHandle) NTSTATUS EventLogWriteClusterEvents(
handle_t BindingHandle)
{ {
DPRINT("Unknown21 called\n"); DPRINT("EventLogWriteClusterEvents UNIMPLEMENTED\n");
return STATUS_NOT_IMPLEMENTED; return STATUS_NOT_IMPLEMENTED;
} }
@ -334,6 +367,16 @@ NTSTATUS EventLogGetInfo(
} }
/* Function 23 */
NTSTATUS EventLogFlush(
handle_t BindingHandle)
{
DbgPrint("EventLogFlush UNIMPLEMENTED\n");
return STATUS_NOT_IMPLEMENTED;
}
void __RPC_FAR * __RPC_USER midl_user_allocate(size_t len) void __RPC_FAR * __RPC_USER midl_user_allocate(size_t len)
{ {
return HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, len); return HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, len);