[ros-diffs] [ekohl] 54642: [ADVAPI32] ReportEventA/W: Strings must be passed to ElfrReportEventA/W as a pointer to an array of PANSI_STRINGs instead of a pointer to an array of ANSI_STRINGs. Now, strings appea...

ekohl at svn.reactos.org ekohl at svn.reactos.org
Mon Dec 12 21:54:22 UTC 2011


Author: ekohl
Date: Mon Dec 12 21:54:20 2011
New Revision: 54642

URL: http://svn.reactos.org/svn/reactos?rev=54642&view=rev
Log:
[ADVAPI32]
ReportEventA/W: Strings must be passed to ElfrReportEventA/W as a pointer to an array of PANSI_STRINGs instead of a pointer to an array of ANSI_STRINGs. Now, strings appear in the event viewer.

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=54642&r1=54641&r2=54642&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] Mon Dec 12 21:54:20 2011
@@ -940,7 +940,7 @@
              IN LPVOID lpRawData)
 {
     NTSTATUS Status;
-    ANSI_STRING *Strings;
+    PANSI_STRING *Strings;
     ANSI_STRING ComputerName;
     WORD i;
     CHAR szComputerName[MAX_COMPUTERNAME_LENGTH + 1];
@@ -951,8 +951,8 @@
           wNumStrings, dwDataSize, lpStrings, lpRawData);
 
     Strings = HeapAlloc(GetProcessHeap(),
-                        0,
-                        wNumStrings * sizeof(ANSI_STRING));
+                        HEAP_ZERO_MEMORY,
+                        wNumStrings * sizeof(PANSI_STRING));
     if (!Strings)
     {
         SetLastError(ERROR_NOT_ENOUGH_MEMORY);
@@ -960,7 +960,15 @@
     }
 
     for (i = 0; i < wNumStrings; i++)
-        RtlInitAnsiString(&Strings[i], lpStrings[i]);
+    {
+        Strings[i] = HeapAlloc(GetProcessHeap(),
+                               HEAP_ZERO_MEMORY,
+                               sizeof(ANSI_STRING));
+        if (Strings[i])
+        {
+            RtlInitAnsiString(Strings[i], lpStrings[i]);
+        }
+    }
 
     dwSize = MAX_COMPUTERNAME_LENGTH + 1;
     GetComputerNameA(szComputerName, &dwSize);
@@ -975,9 +983,9 @@
                                   dwEventID,
                                   wNumStrings,
                                   dwDataSize,
-                                  (PRPC_STRING) &ComputerName,
+                                  (PRPC_STRING)&ComputerName,
                                   lpUserSid,
-                                  (PRPC_STRING*) &Strings,
+                                  (PRPC_STRING*)Strings,
                                   lpRawData,
                                   0,
                                   NULL,
@@ -988,6 +996,12 @@
         Status = I_RpcMapWin32Status(RpcExceptionCode());
     }
     RpcEndExcept;
+
+    for (i = 0; i < wNumStrings; i++)
+    {
+        if (Strings[i] != NULL)
+            HeapFree(GetProcessHeap(), 0, Strings[i]);
+    }
 
     HeapFree(GetProcessHeap(), 0, Strings);
 
@@ -1027,7 +1041,7 @@
              IN LPVOID lpRawData)
 {
     NTSTATUS Status;
-    UNICODE_STRING *Strings;
+    PUNICODE_STRING *Strings;
     UNICODE_STRING ComputerName;
     WORD i;
     WCHAR szComputerName[MAX_COMPUTERNAME_LENGTH + 1];
@@ -1039,7 +1053,7 @@
 
     Strings = HeapAlloc(GetProcessHeap(),
                         0,
-                        wNumStrings * sizeof(UNICODE_STRING));
+                        wNumStrings * sizeof(PUNICODE_STRING));
     if (!Strings)
     {
         SetLastError(ERROR_NOT_ENOUGH_MEMORY);
@@ -1047,7 +1061,15 @@
     }
 
     for (i = 0; i < wNumStrings; i++)
-        RtlInitUnicodeString(&Strings[i], lpStrings[i]);
+    {
+        Strings[i] = HeapAlloc(GetProcessHeap(),
+                               HEAP_ZERO_MEMORY,
+                               sizeof(ANSI_STRING));
+        if (Strings[i])
+        {
+            RtlInitUnicodeString(Strings[i], lpStrings[i]);
+        }
+    }
 
     dwSize = MAX_COMPUTERNAME_LENGTH + 1;
     GetComputerNameW(szComputerName, &dwSize);
@@ -1062,9 +1084,9 @@
                                   dwEventID,
                                   wNumStrings,
                                   dwDataSize,
-                                  (PRPC_UNICODE_STRING) &ComputerName,
+                                  (PRPC_UNICODE_STRING)&ComputerName,
                                   lpUserSid,
-                                  (PRPC_UNICODE_STRING*) &Strings,
+                                  (PRPC_UNICODE_STRING*)Strings,
                                   lpRawData,
                                   0,
                                   NULL,
@@ -1076,6 +1098,12 @@
     }
     RpcEndExcept;
 
+    for (i = 0; i < wNumStrings; i++)
+    {
+        if (Strings[i] != NULL)
+            HeapFree(GetProcessHeap(), 0, Strings[i]);
+    }
+
     HeapFree(GetProcessHeap(), 0, Strings);
 
     if (!NT_SUCCESS(Status))




More information about the Ros-diffs mailing list