fixed calls to NtDuplicateObject
[reactos.git] / reactos / lib / kernel32 / misc / handle.c
index c13ebca..3ee219c 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: handle.c,v 1.20 2004/11/06 10:10:02 weiden Exp $
+/* $Id$
  *
  * COPYRIGHT:       See COPYING in the top level directory
  * PROJECT:         ReactOS system libraries
@@ -38,18 +38,18 @@ GetHandleInformation (HANDLE hObject,
   ULONG BytesWritten;
   NTSTATUS Status;
   DWORD Flags;
-  
+
   Ppb = NtCurrentPeb()->ProcessParameters;
   switch ((ULONG)hObject)
   {
     case STD_INPUT_HANDLE:
-      hObject = Ppb->hStdInput;
+      hObject = Ppb->StandardInput;
       break;
     case STD_OUTPUT_HANDLE:
-      hObject = Ppb->hStdOutput;
+      hObject = Ppb->StandardOutput;
       break;
     case STD_ERROR_HANDLE:
-      hObject = Ppb->hStdError;
+      hObject = Ppb->StandardError;
       break;
   }
 
@@ -95,13 +95,13 @@ SetHandleInformation (HANDLE hObject,
   switch ((ULONG)hObject)
   {
     case STD_INPUT_HANDLE:
-      hObject = Ppb->hStdInput;
+      hObject = Ppb->StandardInput;
       break;
     case STD_OUTPUT_HANDLE:
-      hObject = Ppb->hStdOutput;
+      hObject = Ppb->StandardOutput;
       break;
     case STD_ERROR_HANDLE:
-      hObject = Ppb->hStdError;
+      hObject = Ppb->StandardError;
       break;
   }
 
@@ -112,8 +112,11 @@ SetHandleInformation (HANDLE hObject,
                          &BytesWritten);
   if (NT_SUCCESS(Status))
   {
-    HandleInfo.Inherit = (dwFlags & HANDLE_FLAG_INHERIT) != 0;
-    HandleInfo.ProtectFromClose = (dwFlags & HANDLE_FLAG_PROTECT_FROM_CLOSE) != 0;
+    if (dwMask & HANDLE_FLAG_INHERIT)
+      HandleInfo.Inherit = (dwFlags & HANDLE_FLAG_INHERIT) != 0;
+    if (dwMask & HANDLE_FLAG_PROTECT_FROM_CLOSE)
+      HandleInfo.ProtectFromClose = (dwFlags & HANDLE_FLAG_PROTECT_FROM_CLOSE) != 0;
+
     Status = NtSetInformationObject (hObject,
                                     ObjectHandleInformation,
                                     &HandleInfo,
@@ -123,7 +126,7 @@ SetHandleInformation (HANDLE hObject,
       SetLastErrorByStatus (Status);
       return FALSE;
     }
-    
+
     return TRUE;
   }
   else
@@ -148,33 +151,33 @@ BOOL STDCALL CloseHandle(HANDLE  hObject)
 {
    PRTL_USER_PROCESS_PARAMETERS Ppb;
    NTSTATUS Status;
-   
+
    Ppb = NtCurrentPeb()->ProcessParameters;
    switch ((ULONG)hObject)
    {
      case STD_INPUT_HANDLE:
-       hObject = Ppb->hStdInput;
+       hObject = Ppb->StandardInput;
        break;
      case STD_OUTPUT_HANDLE:
-       hObject = Ppb->hStdOutput;
+       hObject = Ppb->StandardOutput;
        break;
      case STD_ERROR_HANDLE:
-       hObject = Ppb->hStdError;
+       hObject = Ppb->StandardError;
        break;
    }
-   
+
    if (IsConsoleHandle(hObject))
      {
        return(CloseConsoleHandle(hObject));
      }
-   
+
    Status = NtClose(hObject);
    if (!NT_SUCCESS(Status))
-     {     
+     {
        SetLastErrorByStatus (Status);
        return FALSE;
      }
-   
+
    return TRUE;
 }
 
@@ -193,21 +196,21 @@ BOOL STDCALL DuplicateHandle(HANDLE hSourceProcessHandle,
    PRTL_USER_PROCESS_PARAMETERS Ppb;
    DWORD SourceProcessId, TargetProcessId;
    NTSTATUS Status;
-   
+
    Ppb = NtCurrentPeb()->ProcessParameters;
    switch ((ULONG)hSourceHandle)
    {
      case STD_INPUT_HANDLE:
-       hSourceHandle = Ppb->hStdInput;
+       hSourceHandle = Ppb->StandardInput;
        break;
      case STD_OUTPUT_HANDLE:
-       hSourceHandle = Ppb->hStdOutput;
+       hSourceHandle = Ppb->StandardOutput;
        break;
      case STD_ERROR_HANDLE:
-       hSourceHandle = Ppb->hStdError;
+       hSourceHandle = Ppb->StandardError;
        break;
    }
-   
+
    if (IsConsoleHandle(hSourceHandle))
    {
       SourceProcessId = GetProcessId(hSourceProcessHandle);
@@ -223,20 +226,20 @@ BOOL STDCALL DuplicateHandle(HANDLE hSourceProcessHandle,
       *lpTargetHandle = DuplicateConsoleHandle(hSourceHandle, dwDesiredAccess, bInheritHandle, dwOptions);
       return *lpTargetHandle != INVALID_HANDLE_VALUE;
    }
-      
+
    Status = NtDuplicateObject(hSourceProcessHandle,
                              hSourceHandle,
                              hTargetProcessHandle,
                              lpTargetHandle,
                              dwDesiredAccess,
-                             (BOOLEAN)bInheritHandle,
+                             bInheritHandle ? OBJ_INHERIT : 0,
                              dwOptions);
    if (!NT_SUCCESS(Status))
      {
        SetLastErrorByStatus (Status);
        return FALSE;
      }
-   
+
    return TRUE;
 }