Sync to trunk head (35333)
[reactos.git] / reactos / dll / win32 / kernel32 / misc / handle.c
index 99a550d..3bef56a 100644 (file)
@@ -26,6 +26,21 @@ DuplicateConsoleHandle (HANDLE       hConsole,
 
 /* FUNCTIONS *****************************************************************/
 
+HANDLE FASTCALL
+TranslateStdHandle(HANDLE hHandle)
+{
+  PRTL_USER_PROCESS_PARAMETERS Ppb = NtCurrentPeb()->ProcessParameters;
+
+  switch ((ULONG_PTR)hHandle)
+    {
+      case STD_INPUT_HANDLE:  return Ppb->StandardInput;
+      case STD_OUTPUT_HANDLE: return Ppb->StandardOutput;
+      case STD_ERROR_HANDLE:  return Ppb->StandardError;
+    }
+
+  return hHandle;
+}
+
 /*
  * @implemented
  */
@@ -33,25 +48,12 @@ BOOL WINAPI
 GetHandleInformation (HANDLE hObject,
                      LPDWORD lpdwFlags)
 {
-  PRTL_USER_PROCESS_PARAMETERS Ppb;
   OBJECT_HANDLE_ATTRIBUTE_INFORMATION HandleInfo;
   ULONG BytesWritten;
   NTSTATUS Status;
   DWORD Flags;
 
-  Ppb = NtCurrentPeb()->ProcessParameters;
-  switch ((ULONG_PTR)hObject)
-  {
-    case STD_INPUT_HANDLE:
-      hObject = Ppb->StandardInput;
-      break;
-    case STD_OUTPUT_HANDLE:
-      hObject = Ppb->StandardOutput;
-      break;
-    case STD_ERROR_HANDLE:
-      hObject = Ppb->StandardError;
-      break;
-  }
+  hObject = TranslateStdHandle(hObject);
 
   Status = NtQueryObject (hObject,
                          ObjectHandleFlagInformation,
@@ -86,24 +88,11 @@ SetHandleInformation (HANDLE hObject,
                      DWORD dwMask,
                      DWORD dwFlags)
 {
-  PRTL_USER_PROCESS_PARAMETERS Ppb;
   OBJECT_HANDLE_ATTRIBUTE_INFORMATION HandleInfo;
   ULONG BytesWritten;
   NTSTATUS Status;
 
-  Ppb = NtCurrentPeb()->ProcessParameters;
-  switch ((ULONG)hObject)
-  {
-    case STD_INPUT_HANDLE:
-      hObject = Ppb->StandardInput;
-      break;
-    case STD_OUTPUT_HANDLE:
-      hObject = Ppb->StandardOutput;
-      break;
-    case STD_ERROR_HANDLE:
-      hObject = Ppb->StandardError;
-      break;
-  }
+  hObject = TranslateStdHandle(hObject);
 
   Status = NtQueryObject (hObject,
                          ObjectHandleFlagInformation,
@@ -149,22 +138,9 @@ BOOL STDCALL CloseHandle(HANDLE  hObject)
  *          If the function fails, the return value is zero
  */
 {
-   PRTL_USER_PROCESS_PARAMETERS Ppb;
    NTSTATUS Status;
 
-   Ppb = NtCurrentPeb()->ProcessParameters;
-   switch ((ULONG)hObject)
-   {
-     case STD_INPUT_HANDLE:
-       hObject = Ppb->StandardInput;
-       break;
-     case STD_OUTPUT_HANDLE:
-       hObject = Ppb->StandardOutput;
-       break;
-     case STD_ERROR_HANDLE:
-       hObject = Ppb->StandardError;
-       break;
-   }
+   hObject = TranslateStdHandle(hObject);
 
    if (IsConsoleHandle(hObject))
      {
@@ -193,23 +169,10 @@ BOOL STDCALL DuplicateHandle(HANDLE hSourceProcessHandle,
                                BOOL bInheritHandle,
                                DWORD dwOptions)
 {
-   PRTL_USER_PROCESS_PARAMETERS Ppb;
    DWORD SourceProcessId, TargetProcessId;
    NTSTATUS Status;
 
-   Ppb = NtCurrentPeb()->ProcessParameters;
-   switch ((ULONG)hSourceHandle)
-   {
-     case STD_INPUT_HANDLE:
-       hSourceHandle = Ppb->StandardInput;
-       break;
-     case STD_OUTPUT_HANDLE:
-       hSourceHandle = Ppb->StandardOutput;
-       break;
-     case STD_ERROR_HANDLE:
-       hSourceHandle = Ppb->StandardError;
-       break;
-   }
+   hSourceHandle = TranslateStdHandle(hSourceHandle);
 
    if (IsConsoleHandle(hSourceHandle))
    {