EVENTLOG:

- Get rid of the globally created binding handle and use the WIDL-generated custom binding handles and context handles instead.
- Add workarounds to eventlogrpc.idl because WIDL is not yet able to handle attributes in typedefs correctly.

svn path=/trunk/; revision=37116
This commit is contained in:
Eric Kohl 2008-10-31 22:18:12 +00:00
parent 599b63ad89
commit 5de1f53be7
4 changed files with 153 additions and 409 deletions

View file

@ -44,7 +44,6 @@ DWORD STDCALL RpcThreadRoutine(LPVOID lpParameter)
/* Function 0 */
NTSTATUS ElfrClearELFW(
handle_t BindingHandle,
IELF_HANDLE LogHandle,
PRPC_UNICODE_STRING BackupFileName)
{
@ -55,7 +54,6 @@ NTSTATUS ElfrClearELFW(
/* Function 1 */
NTSTATUS ElfrBackupELFW(
handle_t BindingHandle,
IELF_HANDLE LogHandle,
PRPC_UNICODE_STRING BackupFileName)
{
@ -66,7 +64,6 @@ NTSTATUS ElfrBackupELFW(
/* Function 2 */
NTSTATUS ElfrCloseEL(
handle_t BindingHandle,
IELF_HANDLE *LogHandle)
{
UNIMPLEMENTED;
@ -76,7 +73,6 @@ NTSTATUS ElfrCloseEL(
/* Function 3 */
NTSTATUS ElfrDeregisterEventSource(
handle_t BindingHandle,
IELF_HANDLE *LogHandle)
{
UNIMPLEMENTED;
@ -86,7 +82,6 @@ NTSTATUS ElfrDeregisterEventSource(
/* Function 4 */
NTSTATUS ElfrNumberOfRecords(
handle_t BindingHandle,
IELF_HANDLE LogHandle,
DWORD *NumberOfRecords)
{
@ -97,7 +92,6 @@ NTSTATUS ElfrNumberOfRecords(
/* Function 5 */
NTSTATUS ElfrOldestRecord(
handle_t BindingHandle,
IELF_HANDLE LogHandle,
DWORD *OldestRecordNumber)
{
@ -108,7 +102,6 @@ NTSTATUS ElfrOldestRecord(
/* Function 6 */
NTSTATUS ElfrChangeNotify(
handle_t BindingHandle,
IELF_HANDLE *LogHandle,
RPC_CLIENT_ID ClientId,
DWORD Event)
@ -120,7 +113,6 @@ NTSTATUS ElfrChangeNotify(
/* Function 7 */
NTSTATUS ElfrOpenELW(
handle_t BindingHandle,
EVENTLOG_HANDLE_W UNCServerName,
PRPC_UNICODE_STRING ModuleName,
PRPC_UNICODE_STRING RegModuleName,
@ -136,7 +128,6 @@ NTSTATUS ElfrOpenELW(
/* Function 8 */
NTSTATUS ElfrRegisterEventSourceW(
handle_t BindingHandle,
EVENTLOG_HANDLE_W UNCServerName,
PRPC_UNICODE_STRING ModuleName,
PRPC_UNICODE_STRING RegModuleName,
@ -152,7 +143,6 @@ NTSTATUS ElfrRegisterEventSourceW(
/* Function 9 */
NTSTATUS ElfrOpenBELW(
handle_t BindingHandle,
EVENTLOG_HANDLE_W UNCServerName,
PRPC_UNICODE_STRING BackupFileName,
DWORD MajorVersion,
@ -166,7 +156,6 @@ NTSTATUS ElfrOpenBELW(
/* Function 10 */
NTSTATUS ElfrReadELW(
handle_t BindingHandle,
IELF_HANDLE LogHandle,
DWORD ReadFlags,
DWORD RecordOffset,
@ -182,7 +171,6 @@ NTSTATUS ElfrReadELW(
/* Function 11 */
NTSTATUS ElfrReportEventW(
handle_t BindingHandle,
IELF_HANDLE LogHandle,
DWORD Time,
USHORT EventType,
@ -233,7 +221,6 @@ NTSTATUS ElfrReportEventW(
/* Function 12 */
NTSTATUS ElfrClearELFA(
handle_t BindingHandle,
IELF_HANDLE LogHandle,
PRPC_STRING BackupFileName)
{
@ -244,7 +231,6 @@ NTSTATUS ElfrClearELFA(
/* Function 13 */
NTSTATUS ElfrBackupELFA(
handle_t BindingHandle,
IELF_HANDLE LogHandle,
PRPC_STRING BackupFileName)
{
@ -255,7 +241,6 @@ NTSTATUS ElfrBackupELFA(
/* Function 14 */
NTSTATUS ElfrOpenELA(
handle_t BindingHandle,
EVENTLOG_HANDLE_A UNCServerName,
PRPC_STRING ModuleName,
PRPC_STRING RegModuleName,
@ -290,7 +275,6 @@ NTSTATUS ElfrOpenELA(
}
Status = ElfrOpenELW(
BindingHandle,
UNCServerName ? UNCServerNameW.Buffer : NULL,
ModuleName ? (PRPC_UNICODE_STRING)&ModuleNameW : NULL,
RegModuleName ? (PRPC_UNICODE_STRING)&RegModuleNameW : NULL,
@ -308,7 +292,6 @@ NTSTATUS ElfrOpenELA(
/* Function 15 */
NTSTATUS ElfrRegisterEventSourceA(
handle_t BindingHandle,
EVENTLOG_HANDLE_A UNCServerName,
PRPC_STRING ModuleName,
PRPC_STRING RegModuleName,
@ -323,7 +306,6 @@ NTSTATUS ElfrRegisterEventSourceA(
/* Function 16 */
NTSTATUS ElfrOpenBELA(
handle_t BindingHandle,
EVENTLOG_HANDLE_A UNCServerName,
PRPC_STRING BackupFileName,
DWORD MajorVersion,
@ -337,7 +319,6 @@ NTSTATUS ElfrOpenBELA(
/* Function 17 */
NTSTATUS ElfrReadELA(
handle_t BindingHandle,
IELF_HANDLE LogHandle,
DWORD ReadFlags,
DWORD RecordOffset,
@ -353,7 +334,6 @@ NTSTATUS ElfrReadELA(
/* Function 18 */
NTSTATUS ElfrReportEventA(
handle_t BindingHandle,
IELF_HANDLE LogHandle,
DWORD Time,
USHORT EventType,
@ -403,7 +383,6 @@ NTSTATUS ElfrWriteClusterEvents(
/* Function 22 */
NTSTATUS ElfrGetLogInformation(
handle_t BindingHandle,
IELF_HANDLE LogHandle,
DWORD InfoLevel,
BYTE *Buffer,
@ -417,7 +396,6 @@ NTSTATUS ElfrGetLogInformation(
/* Function 23 */
NTSTATUS ElfrFlushEL(
handle_t BindingHandle,
IELF_HANDLE LogHandle)
{
UNIMPLEMENTED;
@ -427,7 +405,6 @@ NTSTATUS ElfrFlushEL(
/* Function 24 */
NTSTATUS ElfrReportEventAndSourceW(
handle_t BindingHandle,
IELF_HANDLE LogHandle,
DWORD Time,
USHORT EventType,

View file

@ -27,15 +27,119 @@
WINE_DEFAULT_DEBUG_CHANNEL(advapi);
WINE_DECLARE_DEBUG_CHANNEL(eventlog);
typedef struct _LOG_INFO
{
RPC_BINDING_HANDLE BindingHandle;
IELF_HANDLE LogHandle;
BOOL bLocal;
} LOG_INFO, *PLOG_INFO;
static RPC_UNICODE_STRING EmptyString = { 0, 0, L"" };
handle_t __RPC_USER
EVENTLOG_HANDLE_A_bind(EVENTLOG_HANDLE_A UNCServerName)
{
handle_t hBinding = NULL;
UCHAR *pszStringBinding;
RPC_STATUS status;
TRACE("EVENTLOG_HANDLE_A_bind() called\n");
status = RpcStringBindingComposeA(NULL,
(UCHAR *)"ncacn_np",
(UCHAR *)UNCServerName,
(UCHAR *)"\\pipe\\ntsvcs",
NULL,
(UCHAR **)&pszStringBinding);
if (status)
{
ERR("RpcStringBindingCompose returned 0x%x\n", status);
return NULL;
}
/* Set the binding handle that will be used to bind to the server. */
status = RpcBindingFromStringBindingA(pszStringBinding,
&hBinding);
if (status)
{
ERR("RpcBindingFromStringBinding returned 0x%x\n", status);
}
status = RpcStringFreeA(&pszStringBinding);
if (status)
{
ERR("RpcStringFree returned 0x%x\n", status);
}
return hBinding;
}
void __RPC_USER
EVENTLOG_HANDLE_A_unbind(EVENTLOG_HANDLE_A UNCServerName,
handle_t hBinding)
{
RPC_STATUS status;
TRACE("EVENTLOG_HANDLE_A_unbind() called\n");
status = RpcBindingFree(&hBinding);
if (status)
{
ERR("RpcBindingFree returned 0x%x\n", status);
}
}
handle_t __RPC_USER
EVENTLOG_HANDLE_W_bind(EVENTLOG_HANDLE_W UNCServerName)
{
handle_t hBinding = NULL;
LPWSTR pszStringBinding;
RPC_STATUS status;
TRACE("EVENTLOG_HANDLE_W_bind() called\n");
status = RpcStringBindingComposeW(NULL,
L"ncacn_np",
(LPWSTR)UNCServerName,
L"\\pipe\\EventLog",
NULL,
&pszStringBinding);
if (status)
{
ERR("RpcStringBindingCompose returned 0x%x\n", status);
return NULL;
}
/* Set the binding handle that will be used to bind to the server. */
status = RpcBindingFromStringBindingW(pszStringBinding,
&hBinding);
if (status)
{
ERR("RpcBindingFromStringBinding returned 0x%x\n", status);
}
status = RpcStringFreeW(&pszStringBinding);
if (status)
{
ERR("RpcStringFree returned 0x%x\n", status);
}
return hBinding;
}
void __RPC_USER
EVENTLOG_HANDLE_W_unbind(EVENTLOG_HANDLE_W UNCServerName,
handle_t hBinding)
{
RPC_STATUS status;
TRACE("EVENTLOG_HANDLE_W_unbind() called\n");
status = RpcBindingFree(&hBinding);
if (status)
{
ERR("RpcBindingFree returned 0x%x\n", status);
}
}
/******************************************************************************
* BackupEventLogA [ADVAPI32.@]
*/
@ -43,9 +147,8 @@ BOOL WINAPI
BackupEventLogA(IN HANDLE hEventLog,
IN LPCSTR lpBackupFileName)
{
PLOG_INFO pLog;
NTSTATUS Status;
RPC_STRING BackupFileName;
NTSTATUS Status;
TRACE("%p, %s\n", hEventLog, lpBackupFileName);
@ -53,15 +156,7 @@ BackupEventLogA(IN HANDLE hEventLog,
BackupFileName.Length = BackupFileName.MaximumLength =
lpBackupFileName ? strlen(lpBackupFileName) : 0;
pLog = (PLOG_INFO)hEventLog;
if (!pLog)
{
SetLastError(ERROR_INVALID_HANDLE);
return FALSE;
}
Status = ElfrBackupELFA(pLog->BindingHandle,
pLog->LogHandle,
Status = ElfrBackupELFA(hEventLog,
&BackupFileName);
if (!NT_SUCCESS(Status))
{
@ -83,9 +178,8 @@ BOOL WINAPI
BackupEventLogW(IN HANDLE hEventLog,
IN LPCWSTR lpBackupFileName)
{
PLOG_INFO pLog;
NTSTATUS Status;
RPC_UNICODE_STRING BackupFileName;
NTSTATUS Status;
TRACE("%p, %s\n", hEventLog, debugstr_w(lpBackupFileName));
@ -93,15 +187,7 @@ BackupEventLogW(IN HANDLE hEventLog,
BackupFileName.Length = BackupFileName.MaximumLength =
lpBackupFileName ? wcslen(lpBackupFileName) * sizeof(WCHAR) : 0;
pLog = (PLOG_INFO)hEventLog;
if (!pLog)
{
SetLastError(ERROR_INVALID_HANDLE);
return FALSE;
}
Status = ElfrBackupELFW(pLog->BindingHandle,
pLog->LogHandle,
Status = ElfrBackupELFW(hEventLog,
&BackupFileName);
if (!NT_SUCCESS(Status))
{
@ -120,9 +206,8 @@ BOOL WINAPI
ClearEventLogA(IN HANDLE hEventLog,
IN LPCSTR lpBackupFileName)
{
PLOG_INFO pLog;
NTSTATUS Status;
RPC_STRING BackupFileName;
NTSTATUS Status;
TRACE("%p, %s\n", hEventLog, lpBackupFileName);
@ -130,15 +215,7 @@ ClearEventLogA(IN HANDLE hEventLog,
BackupFileName.Length = BackupFileName.MaximumLength =
lpBackupFileName ? strlen(lpBackupFileName) : 0;
pLog = (PLOG_INFO)hEventLog;
if (!pLog)
{
SetLastError(ERROR_INVALID_HANDLE);
return FALSE;
}
Status = ElfrClearELFA(pLog->BindingHandle,
pLog->LogHandle,
Status = ElfrClearELFA(hEventLog,
&BackupFileName);
if (!NT_SUCCESS(Status))
{
@ -157,9 +234,8 @@ BOOL WINAPI
ClearEventLogW(IN HANDLE hEventLog,
IN LPCWSTR lpBackupFileName)
{
PLOG_INFO pLog;
NTSTATUS Status;
RPC_UNICODE_STRING BackupFileName;
NTSTATUS Status;
TRACE("%p, %s\n", hEventLog, debugstr_w(lpBackupFileName));
@ -167,15 +243,7 @@ ClearEventLogW(IN HANDLE hEventLog,
BackupFileName.Length = BackupFileName.MaximumLength =
lpBackupFileName ? wcslen(lpBackupFileName) * sizeof(WCHAR) : 0;
pLog = (PLOG_INFO)hEventLog;
if (!pLog)
{
SetLastError(ERROR_INVALID_HANDLE);
return FALSE;
}
Status = ElfrClearELFW(pLog->BindingHandle,
pLog->LogHandle,
Status = ElfrClearELFW(hEventLog,
&BackupFileName);
if (!NT_SUCCESS(Status))
{
@ -193,35 +261,16 @@ ClearEventLogW(IN HANDLE hEventLog,
BOOL WINAPI
CloseEventLog(IN HANDLE hEventLog)
{
PLOG_INFO pLog;
NTSTATUS Status;
TRACE("%p\n", hEventLog);
pLog = (PLOG_INFO)hEventLog;
if (!pLog)
return TRUE;
if (pLog->bLocal == FALSE)
Status = ElfrCloseEL(&hEventLog);
if (!NT_SUCCESS(Status))
{
if (!EvtUnbindRpc(pLog->BindingHandle))
{
SetLastError(ERROR_ACCESS_DENIED);
return FALSE;
}
SetLastError(RtlNtStatusToDosError(Status));
return FALSE;
}
else
{
Status = ElfrCloseEL(pLog->BindingHandle,
&pLog->LogHandle);
if (!NT_SUCCESS(Status))
{
SetLastError(RtlNtStatusToDosError(Status));
return FALSE;
}
}
HeapFree(GetProcessHeap(), 0, pLog);
return TRUE;
}
@ -239,17 +288,11 @@ CloseEventLog(IN HANDLE hEventLog)
BOOL WINAPI
DeregisterEventSource(IN HANDLE hEventLog)
{
PLOG_INFO pLog;
NTSTATUS Status;
TRACE("%p\n", hEventLog);
pLog = (PLOG_INFO)hEventLog;
if (!pLog)
return TRUE;
Status = ElfrDeregisterEventSource(pLog->BindingHandle,
&pLog->LogHandle);
Status = ElfrDeregisterEventSource(&hEventLog);
if (!NT_SUCCESS(Status))
{
SetLastError(RtlNtStatusToDosError(Status));
@ -271,21 +314,12 @@ BOOL WINAPI
GetNumberOfEventLogRecords(IN HANDLE hEventLog,
OUT PDWORD NumberOfRecords)
{
PLOG_INFO pLog;
NTSTATUS Status;
DWORD Records;
TRACE("%p, %p\n", hEventLog, NumberOfRecords);
pLog = (PLOG_INFO)hEventLog;
if (!pLog)
{
SetLastError(ERROR_INVALID_HANDLE);
return FALSE;
}
Status = ElfrNumberOfRecords(pLog->BindingHandle,
pLog->LogHandle,
Status = ElfrNumberOfRecords(hEventLog,
&Records);
if (!NT_SUCCESS(Status))
{
@ -310,21 +344,12 @@ BOOL WINAPI
GetOldestEventLogRecord(IN HANDLE hEventLog,
OUT PDWORD OldestRecord)
{
PLOG_INFO pLog;
NTSTATUS Status;
DWORD Oldest;
TRACE("%p, %p\n", hEventLog, OldestRecord);
pLog = (PLOG_INFO)hEventLog;
if (!pLog)
{
SetLastError(ERROR_INVALID_HANDLE);
return FALSE;
}
Status = ElfrOldestRecord(pLog->BindingHandle,
pLog->LogHandle,
Status = ElfrOldestRecord(hEventLog,
&Oldest);
if (!NT_SUCCESS(Status))
{
@ -403,9 +428,9 @@ HANDLE WINAPI
OpenBackupEventLogW(IN LPCWSTR lpUNCServerName,
IN LPCWSTR lpFileName)
{
PLOG_INFO pLog;
NTSTATUS Status;
RPC_UNICODE_STRING FileName;
IELF_HANDLE LogHandle;
NTSTATUS Status;
TRACE("%s, %s\n", debugstr_w(lpUNCServerName), debugstr_w(lpFileName));
@ -413,52 +438,18 @@ OpenBackupEventLogW(IN LPCWSTR lpUNCServerName,
FileName.Length = FileName.MaximumLength =
lpFileName ? wcslen(lpFileName) * sizeof(WCHAR) : 0;
pLog = HeapAlloc(GetProcessHeap(), 0, sizeof(LOG_INFO));
if (!pLog)
{
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
return NULL;
}
ZeroMemory(pLog, sizeof(LOG_INFO));
if (lpUNCServerName == NULL || *lpUNCServerName == 0)
{
pLog->bLocal = TRUE;
if (!EvtGetLocalHandle(&pLog->BindingHandle))
{
HeapFree(GetProcessHeap(), 0, pLog);
SetLastError(ERROR_GEN_FAILURE);
return NULL;
}
}
else
{
pLog->bLocal = FALSE;
if (!EvtBindRpc(lpUNCServerName, &pLog->BindingHandle))
{
HeapFree(GetProcessHeap(), 0, pLog);
SetLastError(ERROR_INVALID_COMPUTERNAME);
return NULL;
}
}
Status = ElfrOpenBELW(pLog->BindingHandle,
(LPWSTR)lpUNCServerName,
Status = ElfrOpenBELW((LPWSTR)lpUNCServerName,
&FileName,
0,
0,
&pLog->LogHandle);
&LogHandle);
if (!NT_SUCCESS(Status))
{
SetLastError(RtlNtStatusToDosError(Status));
HeapFree(GetProcessHeap(), 0, pLog);
return NULL;
}
return pLog;
return (HANDLE)LogHandle;
}
@ -507,9 +498,9 @@ HANDLE WINAPI
OpenEventLogW(IN LPCWSTR lpUNCServerName,
IN LPCWSTR lpSourceName)
{
PLOG_INFO pLog;
NTSTATUS Status;
RPC_UNICODE_STRING SourceName;
IELF_HANDLE LogHandle;
NTSTATUS Status;
TRACE("%s, %s\n", debugstr_w(lpUNCServerName), debugstr_w(lpSourceName));
@ -517,53 +508,19 @@ OpenEventLogW(IN LPCWSTR lpUNCServerName,
SourceName.Length = SourceName.MaximumLength =
lpSourceName ? wcslen(lpSourceName) * sizeof(WCHAR) : 0;
pLog = HeapAlloc(GetProcessHeap(), 0, sizeof(LOG_INFO));
if (!pLog)
{
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
return NULL;
}
ZeroMemory(pLog, sizeof(LOG_INFO));
if (lpUNCServerName == NULL || *lpUNCServerName == 0)
{
pLog->bLocal = TRUE;
if (!EvtGetLocalHandle(&pLog->BindingHandle))
{
HeapFree(GetProcessHeap(), 0, pLog);
SetLastError(ERROR_GEN_FAILURE);
return NULL;
}
}
else
{
pLog->bLocal = FALSE;
if (!EvtBindRpc(lpUNCServerName, &pLog->BindingHandle))
{
HeapFree(GetProcessHeap(), 0, pLog);
SetLastError(ERROR_INVALID_COMPUTERNAME);
return NULL;
}
}
Status = ElfrOpenELW(pLog->BindingHandle,
(LPWSTR)lpUNCServerName,
Status = ElfrOpenELW((LPWSTR)lpUNCServerName,
&SourceName,
&EmptyString,
0,
0,
&pLog->LogHandle);
&LogHandle);
if (!NT_SUCCESS(Status))
{
SetLastError(RtlNtStatusToDosError(Status));
HeapFree(GetProcessHeap(), 0, pLog);
return NULL;
}
return pLog;
return (HANDLE)LogHandle;
}
@ -579,7 +536,6 @@ ReadEventLogA(IN HANDLE hEventLog,
OUT DWORD *pnBytesRead,
OUT DWORD *pnMinNumberOfBytesNeeded)
{
PLOG_INFO pLog;
NTSTATUS Status;
DWORD bytesRead, minNumberOfBytesNeeded;
@ -587,15 +543,7 @@ ReadEventLogA(IN HANDLE hEventLog,
hEventLog, dwReadFlags, dwRecordOffset, lpBuffer,
nNumberOfBytesToRead, pnBytesRead, pnMinNumberOfBytesNeeded);
pLog = (PLOG_INFO)hEventLog;
if (!pLog)
{
SetLastError(ERROR_INVALID_HANDLE);
return FALSE;
}
Status = ElfrReadELA(pLog->BindingHandle,
pLog->LogHandle,
Status = ElfrReadELA(hEventLog,
dwReadFlags,
dwRecordOffset,
nNumberOfBytesToRead,
@ -636,7 +584,6 @@ ReadEventLogW(IN HANDLE hEventLog,
OUT DWORD *pnBytesRead,
OUT DWORD *pnMinNumberOfBytesNeeded)
{
PLOG_INFO pLog;
NTSTATUS Status;
DWORD bytesRead, minNumberOfBytesNeeded;
@ -644,15 +591,7 @@ ReadEventLogW(IN HANDLE hEventLog,
hEventLog, dwReadFlags, dwRecordOffset, lpBuffer,
nNumberOfBytesToRead, pnBytesRead, pnMinNumberOfBytesNeeded);
pLog = (PLOG_INFO)hEventLog;
if (!pLog)
{
SetLastError(ERROR_INVALID_HANDLE);
return FALSE;
}
Status = ElfrReadELW(pLog->BindingHandle,
pLog->LogHandle,
Status = ElfrReadELW(hEventLog,
dwReadFlags,
dwRecordOffset,
nNumberOfBytesToRead,
@ -724,9 +663,9 @@ HANDLE WINAPI
RegisterEventSourceW(IN LPCWSTR lpUNCServerName,
IN LPCWSTR lpSourceName)
{
PLOG_INFO pLog;
NTSTATUS Status;
RPC_UNICODE_STRING SourceName;
IELF_HANDLE LogHandle;
NTSTATUS Status;
TRACE("%s, %s\n", debugstr_w(lpUNCServerName), debugstr_w(lpSourceName));
@ -734,53 +673,19 @@ RegisterEventSourceW(IN LPCWSTR lpUNCServerName,
SourceName.Length = SourceName.MaximumLength =
lpSourceName ? wcslen(lpSourceName) * sizeof(WCHAR) : 0;
pLog = HeapAlloc(GetProcessHeap(), 0, sizeof(LOG_INFO));
if (!pLog)
{
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
return NULL;
}
ZeroMemory(pLog, sizeof(LOG_INFO));
if (lpUNCServerName == NULL || *lpUNCServerName == 0)
{
pLog->bLocal = TRUE;
if (!EvtGetLocalHandle(&pLog->BindingHandle))
{
HeapFree(GetProcessHeap(), 0, pLog);
SetLastError(ERROR_GEN_FAILURE);
return NULL;
}
}
else
{
pLog->bLocal = FALSE;
if (!EvtBindRpc(lpUNCServerName, &pLog->BindingHandle))
{
HeapFree(GetProcessHeap(), 0, pLog);
SetLastError(ERROR_INVALID_COMPUTERNAME);
return NULL;
}
}
Status = ElfrRegisterEventSourceW(pLog->BindingHandle,
(LPWSTR)lpUNCServerName,
Status = ElfrRegisterEventSourceW((LPWSTR)lpUNCServerName,
&SourceName,
&EmptyString,
0,
0,
&pLog->LogHandle);
&LogHandle);
if (!NT_SUCCESS(Status))
{
SetLastError(RtlNtStatusToDosError(Status));
HeapFree(GetProcessHeap(), 0, pLog);
return NULL;
}
return pLog;
return (HANDLE)LogHandle;
}
@ -882,7 +787,6 @@ ReportEventW(IN HANDLE hEventLog,
IN LPVOID lpRawData)
{
#if 0
PLOG_INFO pLog;
NTSTATUS Status;
UNICODE_STRING *Strings;
WORD i;
@ -891,13 +795,6 @@ ReportEventW(IN HANDLE hEventLog,
hEventLog, wType, wCategory, dwEventID, lpUserSid,
wNumStrings, dwDataSize, lpStrings, lpRawData);
pLog = (PLOG_INFO)hEventLog;
if (!pLog)
{
SetLastError(ERROR_INVALID_HANDLE);
return FALSE;
}
Strings = HeapAlloc(GetProcessHeap(),
0,
wNumStrings * sizeof(UNICODE_STRING));
@ -910,8 +807,7 @@ ReportEventW(IN HANDLE hEventLog,
for (i = 0; i < wNumStrings; i++)
RtlInitUnicodeString(&Strings[i], lpStrings[i]);
Status = ElfrReportEventW(pLog->BindingHandle,
pLog->LogHandle,
Status = ElfrReportEventW(hEventLog,
0, /* FIXME: Time */
wType,
wCategory,

View file

@ -10,69 +10,6 @@
#include <advapi32.h>
static RPC_BINDING_HANDLE LocalBindingHandle = NULL;
RPC_STATUS
EvtBindRpc(LPCWSTR pszMachine,
RPC_BINDING_HANDLE* BindingHandle)
{
PWSTR pszStringBinding = NULL;
RPC_STATUS Status;
Status = RpcStringBindingComposeW(NULL,
L"ncacn_np",
(LPWSTR)pszMachine,
L"\\pipe\\EventLog",
NULL,
&pszStringBinding);
if (Status != RPC_S_OK)
return Status;
Status = RpcBindingFromStringBindingW(pszStringBinding,
BindingHandle);
RpcStringFreeW(&pszStringBinding);
return Status;
}
RPC_STATUS
EvtUnbindRpc(RPC_BINDING_HANDLE *BindingHandle)
{
if (BindingHandle != NULL)
{
RpcBindingFree(*BindingHandle);
*BindingHandle = NULL;
}
return RPC_S_OK;
}
BOOL
EvtGetLocalHandle(RPC_BINDING_HANDLE *BindingHandle)
{
if (LocalBindingHandle != NULL)
{
if (BindingHandle != NULL)
*BindingHandle = LocalBindingHandle;
return TRUE;
}
if (EvtBindRpc(NULL, &LocalBindingHandle) != RPC_S_OK)
return FALSE;
if (BindingHandle != NULL)
*BindingHandle = LocalBindingHandle;
return TRUE;
}
RPC_STATUS
EvtUnbindLocalHandle(VOID)
{
return EvtUnbindRpc(&LocalBindingHandle);
}
void __RPC_FAR * __RPC_USER
midl_user_allocate(size_t len)

View file

@ -17,10 +17,10 @@ typedef struct _RPC_STRING {
[size_is(MaximumLength), length_is(Length)] LPSTR Buffer;
} RPC_STRING, *PRPC_STRING;
typedef /*[context_handle]*/ unsigned long IELF_HANDLE;
typedef [context_handle] PVOID IELF_HANDLE;
typedef IELF_HANDLE *PIELF_HANDLE;
typedef /*[handle, unique]*/ LPWSTR EVENTLOG_HANDLE_W;
typedef /*[handle, unique]*/ LPSTR EVENTLOG_HANDLE_A;
typedef [handle, unique] LPWSTR EVENTLOG_HANDLE_W;
typedef [handle, unique] LPSTR EVENTLOG_HANDLE_A;
typedef struct _RPC_CLIENT_ID {
DWORD UniqueProcess;
@ -40,65 +40,41 @@ interface eventlog
{
/* Function 0 */
NTSTATUS ElfrClearELFW(
#ifndef __midl
[in] handle_t BindingHandle,
#endif
[in] IELF_HANDLE LogHandle,
[in, unique] PRPC_UNICODE_STRING BackupFileName);
/* Function 1 */
NTSTATUS ElfrBackupELFW(
#ifndef __midl
[in] handle_t BindingHandle,
#endif
[in] IELF_HANDLE LogHandle,
[in, unique] PRPC_UNICODE_STRING BackupFileName);
/* Function 2 */
NTSTATUS ElfrCloseEL(
#ifndef __midl
[in] handle_t BindingHandle,
#endif
[in, out] IELF_HANDLE *LogHandle);
/* Function 3 */
NTSTATUS ElfrDeregisterEventSource(
#ifndef __midl
[in] handle_t BindingHandle,
#endif
[in, out] IELF_HANDLE *LogHandle);
/* Function 4 */
NTSTATUS ElfrNumberOfRecords(
#ifndef __midl
[in] handle_t BindingHandle,
#endif
[in] IELF_HANDLE LogHandle,
[out] DWORD *NumberOfRecords);
/* Function 5 */
NTSTATUS ElfrOldestRecord(
#ifndef __midl
handle_t BindingHandle,
#endif
[in] IELF_HANDLE LogHandle,
[out] DWORD *OldestRecordNumber);
/* Function 6 */
NTSTATUS ElfrChangeNotify(
#ifndef __midl
[in] handle_t BindingHandle,
#endif
[in] IELF_HANDLE *LogHandle,
[in] RPC_CLIENT_ID ClientId,
[in] DWORD Event);
/* Function 7 */
NTSTATUS ElfrOpenELW(
#ifndef __midl
[in] handle_t BindingHandle,
#endif
[in] EVENTLOG_HANDLE_W UNCServerName,
[in, unique] EVENTLOG_HANDLE_W UNCServerName, /* FIXME */
[in] PRPC_UNICODE_STRING ModuleName,
[in] PRPC_UNICODE_STRING RegModuleName,
[in] DWORD MajorVersion,
@ -107,10 +83,7 @@ interface eventlog
/* Function 8 */
NTSTATUS ElfrRegisterEventSourceW(
#ifndef __midl
[in] handle_t BindingHandle,
#endif
[in] EVENTLOG_HANDLE_W UNCServerName,
[in, unique] EVENTLOG_HANDLE_W UNCServerName, /* FIXME */
[in] PRPC_UNICODE_STRING ModuleName,
[in] PRPC_UNICODE_STRING RegModuleName,
[in] DWORD MajorVersion,
@ -119,10 +92,7 @@ interface eventlog
/* Function 9 */
NTSTATUS ElfrOpenBELW(
#ifndef __midl
[in] handle_t BindingHandle,
#endif
[in] EVENTLOG_HANDLE_W UNCServerName,
[in, unique] EVENTLOG_HANDLE_W UNCServerName, /* FIXME */
[in] PRPC_UNICODE_STRING BackupFileName,
[in] DWORD MajorVersion,
[in] DWORD MinorVersion,
@ -130,9 +100,6 @@ interface eventlog
/* Function 10 */
NTSTATUS ElfrReadELW(
#ifndef __midl
[in] handle_t BindingHandle,
#endif
[in] IELF_HANDLE LogHandle,
[in] DWORD ReadFlags,
[in] DWORD RecordOffset,
@ -143,9 +110,6 @@ interface eventlog
/* Function 11 */
NTSTATUS ElfrReportEventW(
#ifndef __midl
[in] handle_t BindingHandle,
#endif
[in] IELF_HANDLE LogHandle,
[in] DWORD Time,
[in] USHORT EventType,
@ -163,26 +127,17 @@ interface eventlog
/* Function 12 */
NTSTATUS ElfrClearELFA(
#ifndef __midl
[in] handle_t BindingHandle,
#endif
[in] IELF_HANDLE LogHandle,
[in, unique] PRPC_STRING BackupFileName);
/* Function 13 */
NTSTATUS ElfrBackupELFA(
#ifndef __midl
[in] handle_t BindingHandle,
#endif
[in] IELF_HANDLE LogHandle,
[in, unique] PRPC_STRING BackupFileName);
/* Function 14 */
NTSTATUS ElfrOpenELA(
#ifndef __midl
[in] handle_t BindingHandle,
#endif
[in] EVENTLOG_HANDLE_A UNCServerName,
[in, unique] EVENTLOG_HANDLE_A UNCServerName, /* FIXME */
[in] PRPC_STRING ModuleName,
[in] PRPC_STRING RegModuleName,
[in] DWORD MajorVersion,
@ -191,10 +146,7 @@ interface eventlog
/* Function 15 */
NTSTATUS ElfrRegisterEventSourceA(
#ifndef __midl
[in] handle_t BindingHandle,
#endif
[in] EVENTLOG_HANDLE_A UNCServerName,
[in, unique] EVENTLOG_HANDLE_A UNCServerName, /* FIXME */
[in] PRPC_STRING ModuleName,
[in] PRPC_STRING RegModuleName,
[in] DWORD MajorVersion,
@ -203,10 +155,7 @@ interface eventlog
/* Function 16 */
NTSTATUS ElfrOpenBELA(
#ifndef __midl
[in] handle_t BindingHandle,
#endif
[in] EVENTLOG_HANDLE_A UNCServerName,
[in, unique] EVENTLOG_HANDLE_A UNCServerName, /* FIXME */
[in] PRPC_STRING BackupFileName,
[in] DWORD MajorVersion,
[in] DWORD MinorVersion,
@ -214,9 +163,6 @@ interface eventlog
/* Function 17 */
NTSTATUS ElfrReadELA(
#ifndef __midl
[in] handle_t BindingHandle,
#endif
[in] IELF_HANDLE LogHandle,
[in] DWORD ReadFlags,
[in] DWORD RecordOffset,
@ -227,9 +173,6 @@ interface eventlog
/* Function 18 */
NTSTATUS ElfrReportEventA(
#ifndef __midl
[in] handle_t BindingHandle,
#endif
[in] IELF_HANDLE LogHandle,
[in] DWORD Time,
[in] USHORT EventType,
@ -268,9 +211,6 @@ interface eventlog
/* Function 22 */
NTSTATUS ElfrGetLogInformation(
#ifndef __midl
[in] handle_t BindingHandle,
#endif
[in] IELF_HANDLE LogHandle,
[in] DWORD InfoLevel,
[out, size_is(cbBufSize)] BYTE *Buffer,
@ -279,16 +219,10 @@ interface eventlog
/* Function 23 */
NTSTATUS ElfrFlushEL(
#ifndef __midl
[in] handle_t BindingHandle,
#endif
[in] IELF_HANDLE LogHandle);
/* Function 24 */
NTSTATUS ElfrReportEventAndSourceW(
#ifndef __midl
[in] handle_t BindingHandle,
#endif
[in] IELF_HANDLE LogHandle,
[in] DWORD Time,
[in] USHORT EventType,