[USER32]
[reactos.git] / reactos / win32ss / user / ntuser / ntstubs.c
index 9e7460e..bc9705e 100644 (file)
@@ -20,46 +20,6 @@ NtUserAssociateInputContext(
     return 0;
 }
 
-
-BOOL
-APIENTRY
-NtUserAttachThreadInput(
-    IN DWORD idAttach,
-    IN DWORD idAttachTo,
-    IN BOOL fAttach)
-{
-  NTSTATUS Status;
-  PETHREAD Thread, ThreadTo;
-  PTHREADINFO pti, ptiTo;
-  BOOL Ret = FALSE;
-
-  UserEnterExclusive();
-  Status = PsLookupThreadByThreadId((HANDLE)idAttach, &Thread);
-  if (!NT_SUCCESS(Status))
-  {
-     EngSetLastError(ERROR_INVALID_PARAMETER);
-     goto Exit;
-  }
-  Status = PsLookupThreadByThreadId((HANDLE)idAttachTo, &ThreadTo);
-  if (!NT_SUCCESS(Status))
-  {
-     EngSetLastError(ERROR_INVALID_PARAMETER);
-     ObDereferenceObject(Thread);
-     goto Exit;
-  }
-
-  pti = PsGetThreadWin32Thread(Thread);
-  ptiTo = PsGetThreadWin32Thread(ThreadTo);
-  ObDereferenceObject(Thread);
-  ObDereferenceObject(ThreadTo);
-
-  Ret = UserAttachThreadInput( pti, ptiTo, fAttach);
-
-Exit:
-  UserLeave();
-  return Ret;
-}
-
 //
 // Works like BitBlt, http://msdn.microsoft.com/en-us/library/ms532278(VS.85).aspx
 //
@@ -241,7 +201,7 @@ NtUserInitializeClientPfnArrays(
   HINSTANCE hmodUser)
 {
    NTSTATUS Status = STATUS_SUCCESS;
-   TRACE("Enter NtUserInitializeClientPfnArrays User32 0x%x\n",hmodUser);
+   TRACE("Enter NtUserInitializeClientPfnArrays User32 0x%p\n", hmodUser);
 
    if (ClientPfnInit) return Status;
 
@@ -300,15 +260,6 @@ NtUserInitTask(
    return 0;
 }
 
-BOOL
-APIENTRY
-NtUserLockWorkStation(VOID)
-{
-   STUB
-
-   return 0;
-}
-
 DWORD
 APIENTRY
 NtUserMNDragLeave(VOID)
@@ -552,15 +503,90 @@ NtUserCheckImeHotKey(
     return 0;
 }
 
-DWORD
+NTSTATUS
 APIENTRY
 NtUserConsoleControl(
-    DWORD dwUnknown1,
-    DWORD dwUnknown2,
-    DWORD dwUnknown3)
+    IN CONSOLECONTROL ConsoleCtrl,
+    IN PVOID ConsoleCtrlInfo,
+    IN ULONG ConsoleCtrlInfoLength)
 {
-    STUB;
-    return 0;
+    NTSTATUS Status = STATUS_SUCCESS;
+
+    /* Allow only Console Server to perform this operation (via CSRSS) */
+    if (gpepCSRSS != PsGetCurrentProcess())
+        return STATUS_ACCESS_DENIED;
+
+    UserEnterExclusive();
+
+    switch (ConsoleCtrl)
+    {
+        case GuiConsoleWndClassAtom:
+        {
+            if (ConsoleCtrlInfoLength != sizeof(ATOM))
+            {
+                Status = STATUS_INFO_LENGTH_MISMATCH;
+                break;
+            }
+
+            _SEH2_TRY
+            {
+                ProbeForRead(ConsoleCtrlInfo, ConsoleCtrlInfoLength, 1);
+                gaGuiConsoleWndClass = *(ATOM*)ConsoleCtrlInfo;
+            }
+            _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
+            {
+                Status = _SEH2_GetExceptionCode();
+            }
+            _SEH2_END;
+
+            break;
+        }
+
+        case ConsoleMakePalettePublic:
+        {
+            HPALETTE hPalette;
+
+            if (ConsoleCtrlInfoLength != sizeof(HPALETTE))
+            {
+                Status = STATUS_INFO_LENGTH_MISMATCH;
+                break;
+            }
+
+            _SEH2_TRY
+            {
+                ProbeForRead(ConsoleCtrlInfo, ConsoleCtrlInfoLength, 1);
+                hPalette = *(HPALETTE*)ConsoleCtrlInfo;
+            }
+            _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
+            {
+                Status = _SEH2_GetExceptionCode();
+            }
+            _SEH2_END;
+
+            /* Make the palette handle public */
+            GreSetObjectOwnerEx(hPalette,
+                                GDI_OBJ_HMGR_PUBLIC,
+                                GDIOBJFLAG_IGNOREPID);
+
+            break;
+        }
+
+        case ConsoleAcquireDisplayOwnership:
+        {
+            ERR("NtUserConsoleControl - ConsoleAcquireDisplayOwnership is UNIMPLEMENTED\n");
+            Status = STATUS_NOT_IMPLEMENTED;
+            break;
+        }
+
+        default:
+            ERR("Calling invalid control %lu in NtUserConsoleControl\n", ConsoleCtrl);
+            Status = STATUS_INVALID_INFO_CLASS;
+            break;
+    }
+
+    UserLeave();
+
+    return Status;
 }
 
 DWORD
@@ -679,16 +705,16 @@ NtUserHardErrorControl(
     return 0;
 }
 
-DWORD
-APIENTRY
+BOOL
+NTAPI
 NtUserNotifyProcessCreate(
-    DWORD dwUnknown1,
-    DWORD dwUnknown2,
-    DWORD dwUnknown3,
-    DWORD dwUnknown4)
+    HANDLE NewProcessId,
+    HANDLE SourceThreadId,
+    DWORD dwUnknown,
+    ULONG CreateFlags)
 {
     STUB;
-    return 0;
+    return FALSE;
 }
 
 NTSTATUS
@@ -1063,17 +1089,6 @@ NtUserUpdateLayeredWindow(
    return 0;
 }
 
-/*
- *    @unimplemented
- */
-HWND APIENTRY
-NtUserWindowFromPhysicalPoint(POINT Point)
-{
-   STUB
-
-   return NULL;
-}
-
 /*
  * NtUserResolveDesktopForWOW
  *
@@ -1183,22 +1198,6 @@ BOOL APIENTRY NtUserGetUpdatedClipboardFormats(
     return FALSE;
 }
 
-/*
- * @unimplemented
- */
-HCURSOR
-NTAPI
-NtUserGetCursorFrameInfo(
-    HCURSOR hCursor,
-    DWORD istep,
-    PDWORD rate_jiffies,
-    INT *num_steps)
-{
-    STUB
-
-    return 0;
-}
-
 /*
  * @unimplemented
  */