[NTDLL]
authorHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Tue, 20 Nov 2012 22:48:11 +0000 (22:48 +0000)
committerHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Tue, 20 Nov 2012 22:48:11 +0000 (22:48 +0000)
When calling CsrClientConnectToServer with a valid connection info user buffer, after capturing the buffer and calling CsrClientCallServer, do not forget to copy back to the user buffer the updated connection info and to free the capture buffer !

svn path=/branches/ros-csrss/; revision=57743

dll/ntdll/csr/api.c
dll/ntdll/csr/capture.c
dll/ntdll/csr/connect.c

index 76de9c7..37a7b66 100644 (file)
@@ -13,6 +13,7 @@
 #include <debug.h>
 
 /* GLOBALS ********************************************************************/
+
 extern HANDLE CsrApiPort;
 
 /* FUNCTIONS ******************************************************************/
index 71fa441..70a2b18 100644 (file)
@@ -13,6 +13,7 @@
 #include <debug.h>
 
 /* GLOBALS ********************************************************************/
+
 extern HANDLE CsrPortHeap;
 
 /* FUNCTIONS ******************************************************************/
index b142e16..8a12194 100644 (file)
@@ -331,8 +331,9 @@ CsrClientConnectToServer(IN PWSTR ObjectDirectory,
     PCSR_CLIENT_CONNECT ClientConnect = &ApiMessage.Data.CsrClientConnect;
     PCSR_CAPTURE_BUFFER CaptureBuffer;
 
-    /* Validate the Connection Info */
     DPRINT("CsrClientConnectToServer: %lx %p\n", ServerId, ConnectionInfo);
+
+    /* Validate the Connection Info */
     if (ConnectionInfo && (!ConnectionInfoSize || !*ConnectionInfoSize))
     {
         DPRINT1("Connection info given, but no length\n");
@@ -428,6 +429,14 @@ CsrClientConnectToServer(IN PWSTR ObjectDirectory,
                                      CaptureBuffer,
                                      CSR_CREATE_API_NUMBER(CSRSRV_SERVERDLL_INDEX, CsrpClientConnect),
                                      sizeof(CSR_CLIENT_CONNECT));
+
+        /* Copy the updated connection info data back into the user buffer */
+        RtlMoveMemory(ConnectionInfo,
+                      ClientConnect->ConnectionInfo,
+                      *ConnectionInfoSize);
+
+        /* Free the capture buffer */
+        CsrFreeCaptureBuffer(CaptureBuffer);
     }
     else
     {
@@ -438,6 +447,7 @@ CsrClientConnectToServer(IN PWSTR ObjectDirectory,
     /* Let the caller know if this was server to server */
     DPRINT("Status was: 0x%lx. Are we in server: 0x%x\n", Status, InsideCsrProcess);
     if (ServerToServerCall) *ServerToServerCall = InsideCsrProcess;
+
     return Status;
 }