mirror of
https://github.com/reactos/reactos.git
synced 2025-07-31 12:02:02 +00:00
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:
parent
599b63ad89
commit
5de1f53be7
4 changed files with 153 additions and 409 deletions
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue