[CONSRV]: Use NtDuplicateObject with DUPLICATE_CLOSE_SOURCE to close a duplicated...
authorHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Sat, 14 Nov 2015 16:20:00 +0000 (16:20 +0000)
committerHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Sat, 14 Nov 2015 16:20:00 +0000 (16:20 +0000)
svn path=/trunk/; revision=69889

reactos/win32ss/user/winsrv/consrv/condrv/graphics.c
reactos/win32ss/user/winsrv/consrv/handle.c

index c2a0a82..a71bb3c 100644 (file)
@@ -163,7 +163,8 @@ GRAPHICS_BUFFER_Initialize(OUT PCONSOLE_SCREEN_BUFFER* Buffer,
     if (!NT_SUCCESS(Status))
     {
         DPRINT1("Error: Impossible to create a shared section, Status = 0x%08lx\n", Status);
-        NtClose(NewBuffer->ClientMutex);
+        NtDuplicateObject(ProcessHandle, NewBuffer->ClientMutex,
+                          NULL, NULL, 0, 0, DUPLICATE_CLOSE_SOURCE);
         NtClose(NewBuffer->Mutex);
         ConsoleFreeHeap(NewBuffer->BitMapInfo);
         CONSOLE_SCREEN_BUFFER_Destroy((PCONSOLE_SCREEN_BUFFER)NewBuffer);
@@ -189,7 +190,8 @@ GRAPHICS_BUFFER_Initialize(OUT PCONSOLE_SCREEN_BUFFER* Buffer,
     {
         DPRINT1("Error: Impossible to map the shared section, Status = 0x%08lx\n", Status);
         NtClose(NewBuffer->hSection);
-        NtClose(NewBuffer->ClientMutex);
+        NtDuplicateObject(ProcessHandle, NewBuffer->ClientMutex,
+                          NULL, NULL, 0, 0, DUPLICATE_CLOSE_SOURCE);
         NtClose(NewBuffer->Mutex);
         ConsoleFreeHeap(NewBuffer->BitMapInfo);
         CONSOLE_SCREEN_BUFFER_Destroy((PCONSOLE_SCREEN_BUFFER)NewBuffer);
@@ -217,7 +219,8 @@ GRAPHICS_BUFFER_Initialize(OUT PCONSOLE_SCREEN_BUFFER* Buffer,
         DPRINT1("Error: Impossible to map the shared section, Status = 0x%08lx\n", Status);
         NtUnmapViewOfSection(NtCurrentProcess(), NewBuffer->BitMap);
         NtClose(NewBuffer->hSection);
-        NtClose(NewBuffer->ClientMutex);
+        NtDuplicateObject(ProcessHandle, NewBuffer->ClientMutex,
+                          NULL, NULL, 0, 0, DUPLICATE_CLOSE_SOURCE);
         NtClose(NewBuffer->Mutex);
         ConsoleFreeHeap(NewBuffer->BitMapInfo);
         CONSOLE_SCREEN_BUFFER_Destroy((PCONSOLE_SCREEN_BUFFER)NewBuffer);
@@ -260,7 +263,8 @@ GRAPHICS_BUFFER_Destroy(IN OUT PCONSOLE_SCREEN_BUFFER Buffer)
     NtUnmapViewOfSection(Buff->ClientProcess, Buff->ClientBitMap);
     NtUnmapViewOfSection(NtCurrentProcess(), Buff->BitMap);
     NtClose(Buff->hSection);
-    NtClose(Buff->ClientMutex);
+    NtDuplicateObject(Buff->ClientProcess, Buff->ClientMutex,
+                      NULL, NULL, 0, 0, DUPLICATE_CLOSE_SOURCE);
     NtClose(Buff->Mutex);
     ConsoleFreeHeap(Buff->BitMapInfo);
 
index 9a3285f..125dfab 100644 (file)
@@ -548,7 +548,9 @@ ConSrvAllocateConsole(PCONSOLE_PROCESS_DATA ProcessData,
     if (!NT_SUCCESS(Status))
     {
         DPRINT1("NtDuplicateObject(InitEvents[INIT_FAILURE]) failed: %lu\n", Status);
-        NtClose(ConsoleInitInfo->ConsoleStartInfo->InitEvents[INIT_SUCCESS]);
+        NtDuplicateObject(ProcessData->Process->ProcessHandle,
+                          ConsoleInitInfo->ConsoleStartInfo->InitEvents[INIT_SUCCESS],
+                          NULL, NULL, 0, 0, DUPLICATE_CLOSE_SOURCE);
         ConSrvFreeHandlesTable(ProcessData);
         ConSrvDeleteConsole(Console);
         ProcessData->ConsoleHandle = NULL;
@@ -564,8 +566,12 @@ ConSrvAllocateConsole(PCONSOLE_PROCESS_DATA ProcessData,
     if (!NT_SUCCESS(Status))
     {
         DPRINT1("NtDuplicateObject(InputWaitHandle) failed: %lu\n", Status);
-        NtClose(ConsoleInitInfo->ConsoleStartInfo->InitEvents[INIT_FAILURE]);
-        NtClose(ConsoleInitInfo->ConsoleStartInfo->InitEvents[INIT_SUCCESS]);
+        NtDuplicateObject(ProcessData->Process->ProcessHandle,
+                          ConsoleInitInfo->ConsoleStartInfo->InitEvents[INIT_FAILURE],
+                          NULL, NULL, 0, 0, DUPLICATE_CLOSE_SOURCE);
+        NtDuplicateObject(ProcessData->Process->ProcessHandle,
+                          ConsoleInitInfo->ConsoleStartInfo->InitEvents[INIT_SUCCESS],
+                          NULL, NULL, 0, 0, DUPLICATE_CLOSE_SOURCE);
         ConSrvFreeHandlesTable(ProcessData);
         ConSrvDeleteConsole(Console);
         ProcessData->ConsoleHandle = NULL;
@@ -669,7 +675,9 @@ ConSrvInheritConsole(PCONSOLE_PROCESS_DATA ProcessData,
     if (!NT_SUCCESS(Status))
     {
         DPRINT1("NtDuplicateObject(InitEvents[INIT_FAILURE]) failed: %lu\n", Status);
-        NtClose(ConsoleStartInfo->InitEvents[INIT_SUCCESS]);
+        NtDuplicateObject(ProcessData->Process->ProcessHandle,
+                          ConsoleStartInfo->InitEvents[INIT_SUCCESS],
+                          NULL, NULL, 0, 0, DUPLICATE_CLOSE_SOURCE);
         ConSrvFreeHandlesTable(ProcessData);
         ProcessData->ConsoleHandle = NULL;
         goto Quit;
@@ -684,8 +692,12 @@ ConSrvInheritConsole(PCONSOLE_PROCESS_DATA ProcessData,
     if (!NT_SUCCESS(Status))
     {
         DPRINT1("NtDuplicateObject(InputWaitHandle) failed: %lu\n", Status);
-        NtClose(ConsoleStartInfo->InitEvents[INIT_FAILURE]);
-        NtClose(ConsoleStartInfo->InitEvents[INIT_SUCCESS]);
+        NtDuplicateObject(ProcessData->Process->ProcessHandle,
+                          ConsoleStartInfo->InitEvents[INIT_FAILURE],
+                          NULL, NULL, 0, 0, DUPLICATE_CLOSE_SOURCE);
+        NtDuplicateObject(ProcessData->Process->ProcessHandle,
+                          ConsoleStartInfo->InitEvents[INIT_SUCCESS],
+                          NULL, NULL, 0, 0, DUPLICATE_CLOSE_SOURCE);
         ConSrvFreeHandlesTable(ProcessData); // NOTE: Always free the handles table.
         ProcessData->ConsoleHandle = NULL;
         goto Quit;