[BASESRV]
authorHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Sat, 1 Nov 2014 17:51:39 +0000 (17:51 +0000)
committerHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Sat, 1 Nov 2014 17:51:39 +0000 (17:51 +0000)
- Correctly set the VdmPower flag when the process being started is a NT VDM
- Return a correct status code if VDM access is forbidden.

svn path=/trunk/; revision=65170

reactos/subsystems/win/basesrv/proc.c
reactos/subsystems/win/basesrv/vdm.c

index 53113f7..707c549 100644 (file)
@@ -71,7 +71,7 @@ CSR_API(BaseSrvCreateProcess)
     HANDLE ProcessHandle, ThreadHandle;
     PCSR_THREAD CsrThread;
     PCSR_PROCESS Process;
-    ULONG Flags = 0, VdmPower = 0, DebugFlags = 0;
+    ULONG Flags = 0, DebugFlags = 0, VdmPower = 0;
 
     /* Get the current client thread */
     CsrThread = CsrGetClientThread();
@@ -83,6 +83,13 @@ CSR_API(BaseSrvCreateProcess)
     Flags = (ULONG_PTR)CreateProcessRequest->ProcessHandle & 3;
     CreateProcessRequest->ProcessHandle = (HANDLE)((ULONG_PTR)CreateProcessRequest->ProcessHandle & ~3);
 
+    /* Some things should be done if this is a VDM process */
+    if (CreateProcessRequest->VdmBinaryType)
+    {
+        /* We need to set the VDM power later on */
+        VdmPower = 1;
+    }
+
     /* Duplicate the process handle */
     Status = NtDuplicateObject(Process->ProcessHandle,
                                CreateProcessRequest->ProcessHandle,
@@ -112,10 +119,9 @@ CSR_API(BaseSrvCreateProcess)
         return Status;
     }
 
-    /* See if this is a VDM process */
+    /* If this is a VDM process, request VDM power */
     if (VdmPower)
     {
-        /* Request VDM powers */
         Status = NtSetInformationProcess(ProcessHandle,
                                          ProcessWx86Information,
                                          &VdmPower,
index 81873a1..09bf071 100644 (file)
@@ -576,7 +576,7 @@ CSR_API(BaseSrvCheckVDM)
     BOOLEAN NewConsoleRecord = FALSE;
 
     /* Don't do anything if the VDM has been disabled in the registry */
-    if (!BaseSrvIsVdmAllowed()) return STATUS_ACCESS_DENIED;
+    if (!BaseSrvIsVdmAllowed()) return STATUS_VDM_DISALLOWED;
 
     /* Validate the message buffers */
     if (!CsrValidateMessageBuffer(ApiMessage,