[ros-diffs] [ekohl] 54878: [ADVAPI32] Pass an NT path to ElfrOpenBELW.

ekohl at svn.reactos.org ekohl at svn.reactos.org
Sun Jan 8 10:08:35 UTC 2012


Author: ekohl
Date: Sun Jan  8 10:08:33 2012
New Revision: 54878

URL: http://svn.reactos.org/svn/reactos?rev=54878&view=rev
Log:
[ADVAPI32]
Pass an NT path to ElfrOpenBELW.

Modified:
    trunk/reactos/dll/win32/advapi32/service/eventlog.c

Modified: trunk/reactos/dll/win32/advapi32/service/eventlog.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/advapi32/service/eventlog.c?rev=54878&r1=54877&r2=54878&view=diff
==============================================================================
--- trunk/reactos/dll/win32/advapi32/service/eventlog.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/advapi32/service/eventlog.c [iso-8859-1] Sun Jan  8 10:08:33 2012
@@ -551,18 +551,101 @@
 OpenBackupEventLogA(IN LPCSTR lpUNCServerName,
                     IN LPCSTR lpFileName)
 {
-    ANSI_STRING FileName;
+    ANSI_STRING UNCServerNameA;
+    UNICODE_STRING UNCServerNameW;
+    ANSI_STRING FileNameA;
+    UNICODE_STRING FileNameW;
+    HANDLE LogHandle;
+    NTSTATUS Status;
+
+    TRACE("%s, %s\n", lpUNCServerName, lpFileName);
+
+    /* Convert the server name to unicode */
+    if (lpUNCServerName == NULL)
+    {
+        RtlInitUnicodeString(&UNCServerNameW, NULL);
+    }
+    else
+    {
+        RtlInitAnsiString(&UNCServerNameA, lpUNCServerName);
+
+        Status = RtlAnsiStringToUnicodeString(&UNCServerNameW,
+                                              &UNCServerNameA,
+                                              TRUE);
+        if (!NT_SUCCESS(Status))
+        {
+            SetLastError(RtlNtStatusToDosError(Status));
+            return NULL;
+        }
+    }
+
+    /* Convert the file name to unicode */
+    if (lpFileName == NULL)
+    {
+        RtlInitUnicodeString(&FileNameW, NULL);
+    }
+    else
+    {
+        RtlInitAnsiString(&FileNameA, lpFileName);
+
+        Status = RtlAnsiStringToUnicodeString(&FileNameW,
+                                              &FileNameA,
+                                              TRUE);
+        if (!NT_SUCCESS(Status))
+        {
+            RtlFreeUnicodeString(&UNCServerNameW);
+            SetLastError(RtlNtStatusToDosError(Status));
+            return NULL;
+        }
+    }
+
+    /* Call the unicode function */
+    LogHandle = OpenBackupEventLogW(UNCServerNameW.Buffer,
+                                    FileNameW.Buffer);
+
+    /* Free the unicode strings */
+    RtlFreeUnicodeString(&UNCServerNameW);
+    RtlFreeUnicodeString(&FileNameW);
+
+    return LogHandle;
+}
+
+
+/******************************************************************************
+ * OpenBackupEventLogW [ADVAPI32.@]
+ *
+ * PARAMS
+ *   lpUNCServerName []
+ *   lpFileName      []
+ */
+HANDLE WINAPI
+OpenBackupEventLogW(IN LPCWSTR lpUNCServerName,
+                    IN LPCWSTR lpFileName)
+{
+    UNICODE_STRING FileNameW;
     IELF_HANDLE LogHandle;
     NTSTATUS Status;
 
-    TRACE("%s, %s\n", lpUNCServerName, lpFileName);
-
-    RtlInitAnsiString(&FileName, lpFileName);
-
-    RpcTryExcept
-    {
-        Status = ElfrOpenBELA((LPSTR)lpUNCServerName,
-                              (PRPC_STRING)&FileName,
+    TRACE("%s, %s\n", debugstr_w(lpUNCServerName), debugstr_w(lpFileName));
+
+    if (lpFileName == NULL)
+    {
+        RtlInitUnicodeString(&FileNameW, NULL);
+    }
+    else
+    {
+        if (!RtlDosPathNameToNtPathName_U(lpFileName, &FileNameW,
+                                          NULL, NULL))
+        {
+            SetLastError(ERROR_INVALID_PARAMETER);
+            return NULL;
+        }
+    }
+
+    RpcTryExcept
+    {
+        Status = ElfrOpenBELW((LPWSTR)lpUNCServerName,
+                              (PRPC_UNICODE_STRING)&FileNameW,
                               1,
                               1,
                               &LogHandle);
@@ -573,48 +656,8 @@
     }
     RpcEndExcept;
 
-    if (!NT_SUCCESS(Status))
-    {
-        SetLastError(RtlNtStatusToDosError(Status));
-        return NULL;
-    }
-
-    return (HANDLE)LogHandle;
-}
-
-
-/******************************************************************************
- * OpenBackupEventLogW [ADVAPI32.@]
- *
- * PARAMS
- *   lpUNCServerName []
- *   lpFileName      []
- */
-HANDLE WINAPI
-OpenBackupEventLogW(IN LPCWSTR lpUNCServerName,
-                    IN LPCWSTR lpFileName)
-{
-    UNICODE_STRING FileName;
-    IELF_HANDLE LogHandle;
-    NTSTATUS Status;
-
-    TRACE("%s, %s\n", debugstr_w(lpUNCServerName), debugstr_w(lpFileName));
-
-    RtlInitUnicodeString(&FileName, lpFileName);
-
-    RpcTryExcept
-    {
-        Status = ElfrOpenBELW((LPWSTR)lpUNCServerName,
-                              (PRPC_UNICODE_STRING)&FileName,
-                              1,
-                              1,
-                              &LogHandle);
-    }
-    RpcExcept(EXCEPTION_EXECUTE_HANDLER)
-    {
-        Status = I_RpcMapWin32Status(RpcExceptionCode());
-    }
-    RpcEndExcept;
+    if (FileNameW.Buffer != NULL)
+        RtlFreeHeap(RtlGetProcessHeap(), 0, FileNameW.Buffer);
 
     if (!NT_SUCCESS(Status))
     {




More information about the Ros-diffs mailing list