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
+36 -13
View File
@@ -1,10 +1,10 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
* LICENSE: GPL - See COPYING in the top level directory
* FILE: services/eventlog/eventlog.c
* PURPOSE: Event logging service
* PROGRAMMERS: Saveliy Tretiakov ([email protected])
* Eric Kohl
* COPYRIGHT: Copyright 2002 Eric Kohl
* Copyright 2005 Saveliy Tretiakov
*/
@@ -18,8 +18,11 @@ SERVICE_TABLE_ENTRY ServiceTable[2] =
{NULL, NULL}
};
/* GLOBAL VARIABLES */
HANDLE MyHeap = 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)
{
@@ -51,7 +54,7 @@ VOID CALLBACK ServiceMain(DWORD argc, LPTSTR *argv)
int main(int argc, char *argv[])
{
WCHAR SysLogPath[MAX_PATH];
WCHAR LogPath[MAX_PATH];
MyHeap = HeapCreate(0, 1024*256, 0);
if(MyHeap==NULL)
@@ -64,16 +67,36 @@ int main(int argc, char *argv[])
This will be fixed in near future
*/
GetWindowsDirectory(SysLogPath, MAX_PATH);
lstrcat(SysLogPath, L"\\system32\\config\\SysEvent.evt");
SystemLog = LogfCreate(L"System", SysLogPath);
if(SystemLog == NULL)
GetWindowsDirectory(LogPath, MAX_PATH);
if(GetDriveType(LogPath) == DRIVE_CDROM)
{
DbgPrint("EventLog: FATAL ERROR, can't create %S\n", SysLogPath);
HeapDestroy(MyHeap);
return 1;
DPRINT("LiveCD detected\n");
onLiveCD = TRUE;
}
else
{
lstrcat(LogPath, L"\\system32\\config\\SysEvent.evt");
SystemLog = LogfCreate(L"System", LogPath);
if(SystemLog == NULL)
{
DbgPrint("EventLog: FATAL ERROR, can't create %S\n", LogPath);
HeapDestroy(MyHeap);
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);
+29 -14
View File
@@ -1,11 +1,12 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS
* FILE: eventlog.h
* PURPOSE: Event logging service
* PROGRAMMER: Saveliy Tretiakov ([email protected])
* PROJECT: ReactOS kernel
* LICENSE: GPL - See COPYING in the top level directory
* FILE: services/eventlog/eventlog.h
* PURPOSE: Event logging service
* COPYRIGHT: Copyright 2005 Saveliy Tretiakov
*/
#ifndef __EVENTLOG_H__
#define __EVENTLOG_H__
@@ -17,16 +18,18 @@
#include <obfuncs.h>
#include <iotypes.h>
#include <debug.h>
#include <pseh/pseh.h>
#include "eventlogrpc_s.h"
typedef struct _IO_ERROR_LPC
{
PORT_MESSAGE Header;
IO_ERROR_LOG_MESSAGE Message;
} IO_ERROR_LPC, *PIO_ERROR_LPC;
#define LOGHANDLE unsigned char*
#define PLOGHANDLE int*
#define LOGHANDLE unsigned int
#define PLOGHANDLE unsigned int*
#define MAJORVER 1
#define MINORVER 1
@@ -102,6 +105,8 @@ PLOGFILE LogfListItemByIndex(INT Index);
PLOGFILE LogfListItemByName(WCHAR *Name);
INT LogfListItemIndexByName(WCHAR *Name);
VOID LogfListAddItem(PLOGFILE Item);
VOID LogfListRemoveItem(PLOGFILE Item);
@@ -199,7 +204,8 @@ NTSTATUS EventLogGetOldestRec(
LOGHANDLE Handle,
unsigned long *OldestRecNumber);
NTSTATUS Unknown6(handle_t BindingHandle);
NTSTATUS EventLogChangeNotify(
handle_t BindingHandle);
NTSTATUS EventLogOpenW(
handle_t BindingHandle,
@@ -250,7 +256,9 @@ NTSTATUS EventLogReportEventW(
unsigned char *SID,
wchar_t *Strings,
unsigned char *Data,
unsigned short Flags);
unsigned short Flags,
unsigned long * unknown1,
unsigned long * unknown2);
NTSTATUS EventLogClearA(
handle_t BindingHandle,
@@ -311,13 +319,18 @@ NTSTATUS EventLogReportEventA(
unsigned char *SID,
char* Strings,
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 EventLogDeregisterClusterSvc(
handle_t BindingHandle);
NTSTATUS Unknown20(handle_t BindingHandle);
NTSTATUS Unknown21(handle_t BindingHandle);
NTSTATUS EventLogWriteClusterEvents(
handle_t BindingHandle);
NTSTATUS EventLogGetInfo(
handle_t BindingHandle,
@@ -327,6 +340,8 @@ NTSTATUS EventLogGetInfo(
unsigned long BufSize,
unsigned long *BytesNeeded);
NTSTATUS EventLogFlush(
handle_t BindingHandle);
#endif /* __EVENTLOG_H__ */
+25 -5
View File
@@ -1,9 +1,9 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS
* PROJECT: ReactOS kernel
* LICENSE: GPL - See COPYING in the top level directory
* FILE: services/eventlog/file.c
* PURPOSE: Event logging service
* PROGRAMMER: Saveliy Tretiakov ([email protected])
* COPYRIGHT: Copyright 2005 Saveliy Tretiakov
*/
#include "eventlog.h"
@@ -204,7 +204,7 @@ PLOGFILE LogfCreate(WCHAR *LogName,
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);
return NULL;
}
@@ -310,9 +310,29 @@ PLOGFILE LogfListItemByName(WCHAR *Name)
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)
{
INT i = 0;
INT i = 1;
PLOGFILE Item;
Item = LogfListHead();
while(Item)
+5 -5
View File
@@ -1,10 +1,10 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
* LICENSE: GPL - See COPYING in the top level directory
* FILE: services/eventlog/logport.c
* PURPOSE: Event logging service
* PROGRAMMER: Eric Kohl
* Saveliy Tretiakov ([email protected])
* COPYRIGHT: Copyright 2002 Eric Kohl
* Copyright 2005 Saveliy Tretiakov
*/
/* INCLUDES *****************************************************************/
@@ -17,7 +17,7 @@ HANDLE ConnectPortHandle = NULL;
HANDLE MessagePortHandle = NULL;
extern PLOGFILE SystemLog;
extern HANDLE MyHeap;
extern BOOL onLiveCD;
/* FUNCTIONS ****************************************************************/
@@ -205,7 +205,7 @@ NTSTATUS ProcessPortMessage(VOID)
PRINT_RECORD(pRec);
DPRINT("\n");
if(SystemLog)
if(!onLiveCD && SystemLog)
{
if(!LogfWriteData(SystemLog, ulRecSize, (PBYTE)pRec))
DPRINT("LogfWriteData failed!\n");
+64 -21
View File
@@ -1,9 +1,9 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS
* PROJECT: ReactOS kernel
* LICENSE: GPL - See COPYING in the top level directory
* FILE: services/eventlog/rpc.c
* PURPOSE: Event logging service
* PROGRAMMER: Saveliy Tretiakov ([email protected])
* COPYRIGHT: Copyright 2005 Saveliy Tretiakov
*/
#include "eventlog.h"
@@ -104,10 +104,11 @@ NTSTATUS EventLogGetOldestRec(
}
/* FIXME */
NTSTATUS Unknown6(handle_t BindingHandle)
/* Function 6 */
NTSTATUS EventLogChangeNotify(
handle_t BindingHandle)
{
DPRINT("Unknown6() called\n");
DPRINT("EventLogChangeNotify UNIMPLEMENTED\n");
return STATUS_NOT_IMPLEMENTED;
}
@@ -116,7 +117,7 @@ NTSTATUS Unknown6(handle_t BindingHandle)
NTSTATUS EventLogOpenW(
handle_t BindingHandle,
LPWSTR ServerName,
wchar_t *FileName,
wchar_t *LogName,
wchar_t *NullStr,
unsigned long MajorVer,
unsigned long MinorVer,
@@ -186,7 +187,9 @@ NTSTATUS EventLogReportEventW(
unsigned char *SID,
wchar_t *Strings,
unsigned char *Data,
unsigned short Flags)
unsigned short Flags,
unsigned long * unknown1,
unsigned long * unknown2)
{
DPRINT("EventLogReportEventW UNIMPLEMENTED\n");
return STATUS_NOT_IMPLEMENTED;
@@ -225,8 +228,33 @@ NTSTATUS EventLogOpenA(
unsigned long MinorVer,
PLOGHANDLE Handle)
{
DPRINT("EventLogOpenA UNIMPLEMENTED\n");
return STATUS_NOT_IMPLEMENTED;
UNICODE_STRING logname = {0}, servername={0};
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,
char* Strings,
unsigned char *Data,
unsigned short Flags)
unsigned short Flags,
unsigned long * unknown1,
unsigned long * unknown2)
{
DPRINT("EventLogReportEventA UNIMPLEMENTED\n");
return STATUS_NOT_IMPLEMENTED;
}
/* FIXME */
NTSTATUS Unknown19(handle_t BindingHandle)
/* Function 19 */
NTSTATUS EventLogRegisterClusterSvc(
handle_t BindingHandle)
{
DPRINT("Unknown19 called\n");
DPRINT("EventLogRegisterClusterSvc UNIMPLEMENTED\n");
return STATUS_NOT_IMPLEMENTED;
}
/* FIXME */
NTSTATUS Unknown20(handle_t BindingHandle)
/* Function 20 */
NTSTATUS EventLogDeregisterClusterSvc(
handle_t BindingHandle)
{
DPRINT("Unknown20 called\n");
DPRINT("EventLogDeregisterClusterSvc UNIMPLEMENTED\n");
return STATUS_NOT_IMPLEMENTED;
}
/* FIXME */
NTSTATUS Unknown21(handle_t BindingHandle)
/* Function 21 */
NTSTATUS EventLogWriteClusterEvents(
handle_t BindingHandle)
{
DPRINT("Unknown21 called\n");
DPRINT("EventLogWriteClusterEvents UNIMPLEMENTED\n");
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)
{
return HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, len);