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
* LICENSE: GPL - See COPYING in the top level directory
* FILE: services/eventlog/eventlog.c
* PURPOSE: Event logging service
* PROGRAMMERS: Saveliy Tretiakov (saveliyt@mail.ru)
* 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);

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 (saveliyt@mail.ru)
* 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__ */

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 (saveliyt@mail.ru)
* 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)

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 (saveliyt@mail.ru)
* 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");

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 (savelity@mail.ru)
* 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);