EVENTLOG:
authorEric Kohl <eric.kohl@reactos.org>
Fri, 31 Oct 2008 22:18:12 +0000 (22:18 +0000)
committerEric Kohl <eric.kohl@reactos.org>
Fri, 31 Oct 2008 22:18:12 +0000 (22:18 +0000)
- 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

reactos/base/services/eventlog/rpc.c
reactos/dll/win32/advapi32/service/eventlog.c
reactos/dll/win32/advapi32/service/rpc.c
reactos/include/reactos/idl/eventlogrpc.idl

index 5a0e7b1..83e0679 100644 (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,
index a842c42..dde455a 100644 (file)
 WINE_DEFAULT_DEBUG_CHANNEL(advapi);
 WINE_DECLARE_DEBUG_CHANNEL(eventlog);
 
-typedef struct _LOG_INFO
+static RPC_UNICODE_STRING EmptyString = { 0, 0, L"" };
+
+
+handle_t __RPC_USER
+EVENTLOG_HANDLE_A_bind(EVENTLOG_HANDLE_A UNCServerName)
 {
-    RPC_BINDING_HANDLE BindingHandle;
-    IELF_HANDLE LogHandle;
-    BOOL bLocal;
-} LOG_INFO, *PLOG_INFO;
+    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);
+    }
+}
 
-static RPC_UNICODE_STRING EmptyString = { 0, 0, L"" };
 
 /******************************************************************************
  * 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,36 +261,17 @@ 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)
-    {
-        if (!EvtUnbindRpc(pLog->BindingHandle))
-        {
-            SetLastError(ERROR_ACCESS_DENIED);
-            return FALSE;
-        }
-    }
-    else
+    Status = ElfrCloseEL(&hEventLog);
+    if (!NT_SUCCESS(Status))
     {
-        Status = ElfrCloseEL(pLog->BindingHandle,
-                             &pLog->LogHandle);
-        if (!NT_SUCCESS(Status))
-        {
-            SetLastError(RtlNtStatusToDosError(Status));
-            return FALSE;
-        }
+        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,
index ad60e40..8f73560 100644 (file)
 
 #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)
index e1abda0..ae78f89 100644 (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,