Author: ion
Date: Sat Jul 23 09:28:15 2011
New Revision: 52789

URL: http://svn.reactos.org/svn/reactos?rev=52789&view=rev
Log:
[KERNEL32]: Add ConvertOpenWin32AnsiObjectApiToUnicodeApi macro.
[KERNEL32]: Fix bugs #11, #12, #13: OpenJobObjectA did not correctly set the 
error code in case the string was too long, nor did it use the TEB's static 
unicode cache, nor did it enforce a 260 character object name limit. Fixed by 
using the new macro.

Modified:
    trunk/reactos/dll/win32/kernel32/client/job.c
    trunk/reactos/dll/win32/kernel32/include/base_x.h

Modified: trunk/reactos/dll/win32/kernel32/client/job.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/kernel32/client/job.c?rev=52789&r1=52788&r2=52789&view=diff
==============================================================================
--- trunk/reactos/dll/win32/kernel32/client/job.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/kernel32/client/job.c [iso-8859-1] Sat Jul 23 
09:28:15 2011
@@ -92,31 +92,8 @@
                BOOL bInheritHandle,
                LPCSTR lpName)
 {
-    ANSI_STRING AnsiName;
-    UNICODE_STRING UnicodeName;
-    HANDLE hJob;
-    NTSTATUS Status;
-
-    if (lpName == NULL)
-    {
-        SetLastError(ERROR_INVALID_PARAMETER);
-        return NULL;
-    }
-
-    RtlInitAnsiString(&AnsiName, lpName);
-    Status = RtlAnsiStringToUnicodeString(&UnicodeName, &AnsiName, TRUE);
-    if (!NT_SUCCESS(Status))
-    {
-        SetLastErrorByStatus(Status);
-        return FALSE;
-    }
-
-    hJob = OpenJobObjectW(dwDesiredAccess,
-                          bInheritHandle,
-                          UnicodeName.Buffer);
-
-    RtlFreeUnicodeString(&UnicodeName);
-    return hJob;
+    /* Call the W(ide) function */
+    ConvertOpenWin32AnsiObjectApiToUnicodeApi(JobObject, dwDesiredAccess, 
bInheritHandle, lpName);
 }
 
 

Modified: trunk/reactos/dll/win32/kernel32/include/base_x.h
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/kernel32/include/base_x.h?rev=52789&r1=52788&r2=52789&view=diff
==============================================================================
--- trunk/reactos/dll/win32/kernel32/include/base_x.h [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/kernel32/include/base_x.h [iso-8859-1] Sat Jul 23 
09:28:15 2011
@@ -69,6 +69,17 @@
     ConvertAnsiToUnicodeEpilogue
 
 //
+// This macro uses the ConvertAnsiToUnicode macros above to convert a OpenXxxA
+// Win32 API into its equivalent OpenXxxW API.
+//
+#define ConvertOpenWin32AnsiObjectApiToUnicodeApi(obj, acc, inh, name)         
 \
+    ConvertAnsiToUnicodePrologue                                               
 \
+    if (!name) SetLastError(ERROR_INVALID_PARAMETER); return NULL;             
 \
+    ConvertAnsiToUnicodeBody(name)                                             
 \
+    if (NT_SUCCESS(Status)) return Open##obj##W(acc, inh, 
UnicodeCache->Buffer);\
+    ConvertAnsiToUnicodeEpilogue
+
+//
 // This macro (split it up in 3 pieces to allow for intermediary code in 
between)
 // wraps the usual code path required to create an NT object based on a Unicode
 // (Wide) Win32 object creation API.


Reply via email to