Author: ion
Date: Sat Jul 23 09:40:34 2011
New Revision: 52790
URL:
http://svn.reactos.org/svn/reactos?rev=52790&view=rev
Log:
[KERNEL32]: Create OpenNtObjectFromWin32Api macro (last one).
[KERNEL32]: Make OpenJobObjectW use this macro (nothing fixed, it was already doing the
right thing).
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/…
==============================================================================
--- 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:40:34 2011
@@ -51,35 +51,8 @@
BOOL bInheritHandle,
LPCWSTR lpName)
{
- OBJECT_ATTRIBUTES ObjectAttributes;
- UNICODE_STRING JobName;
- HANDLE hJob;
- NTSTATUS Status;
-
- if (lpName == NULL)
- {
- SetLastError(ERROR_INVALID_PARAMETER);
- return NULL;
- }
-
- RtlInitUnicodeString(&JobName, lpName);
-
- InitializeObjectAttributes(&ObjectAttributes,
- &JobName,
- (bInheritHandle ? OBJ_INHERIT : 0),
- NULL,
- NULL);
-
- Status = NtOpenJobObject(&hJob,
- dwDesiredAccess,
- &ObjectAttributes);
- if (!NT_SUCCESS(Status))
- {
- SetLastErrorByStatus(Status);
- return NULL;
- }
-
- return hJob;
+ /* Open the NT object */
+ OpenNtObjectFromWin32Api(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…
==============================================================================
--- 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:40:34
2011
@@ -87,18 +87,18 @@
// It makes use of BasepConvertObjectAttributes and allows for a custom access
// mode to be used, and also sets the correct error codes in case of a collision
//
-#define CreateNtObjectFromWin32ApiPrologue(sec, name) \
+#define CreateNtObjectFromWin32ApiPrologue \
{ \
NTSTATUS Status; \
- OBJECT_ATTRIBUTES LocalAttributes; \
POBJECT_ATTRIBUTES ObjectAttributes; \
HANDLE Handle; \
UNICODE_STRING ObjectName; \
+ OBJECT_ATTRIBUTES LocalAttributes;
+#define CreateNtObjectFromWin32ApiBody(ntobj, sec, name, access, ...) \
if (name) RtlInitUnicodeString(&ObjectName, name); \
ObjectAttributes = BasepConvertObjectAttributes(&LocalAttributes, \
sec, \
- name ? &ObjectName : NULL);
-#define CreateNtObjectFromWin32ApiBody(ntobj, access, ...) \
+ name ? &ObjectName : NULL); \
Status = NtCreate##ntobj(&Handle, access, ObjectAttributes, ##__VA_ARGS__);
#define CreateNtObjectFromWin32ApiEpilogue \
if (NT_SUCCESS(Status)) \
@@ -123,7 +123,25 @@
// above does support this.
//
#define CreateNtObjectFromWin32Api(obj, ntobj, capsobj, sec, name, ...) \
- CreateNtObjectFromWin32ApiPrologue(sec, name); \
- CreateNtObjectFromWin32ApiBody(ntobj, capsobj##_ALL_ACCESS, ##__VA_ARGS__); \
+ CreateNtObjectFromWin32ApiPrologue \
+ CreateNtObjectFromWin32ApiBody(ntobj, sec, name, capsobj##_ALL_ACCESS,
##__VA_ARGS__); \
CreateNtObjectFromWin32ApiEpilogue
+//
+// This macro opens an NT object based on the Win32 API settings.
+//
+#define OpenNtObjectFromWin32Api(ntobj, acc, inh, name) \
+ CreateNtObjectFromWin32ApiPrologue \
+ UNREFERENCED_PARAMETER(ObjectAttributes) \
+ if (!name) SetLastErrorByStatus(STATUS_INVALID_PARAMETER); return NULL; \
+ RtlInitUnicodeString(&ObjectName, name); \
+ InitializeObjectAttributes(&LocalAttributes, \
+ &ObjectName, \
+ inh ? OBJ_INHERIT : 0, \
+ hBaseDir, \
+ NULL); \
+ Status = NtOpen##ntobj(&Handle, acc, &LocalAttributes);
\
+ if (!NT_SUCCESS(Status)) SetLastErrorByStatus(Status); return NULL; \
+ return Handle; \
+}
+