[Win32SS]
[reactos.git] / reactos / win32ss / user / ntuser / ntstubs.c
index 999a36d..9fb372d 100644 (file)
@@ -2,7 +2,7 @@
  * COPYRIGHT:        See COPYING in the top level directory
  * PROJECT:          ReactOS Win32k subsystem
  * PURPOSE:          Native User stubs
- * FILE:             subsystems/win32/win32k/ntuser/ntstubs.c
+ * FILE:             win32ss/user/ntuser/ntstubs.c
  * PROGRAMER:        Casper S. Hornstrup (chorns@users.sourceforge.net)
  */
 
@@ -66,44 +66,6 @@ NtUserBuildHimcList(
     return 0;
 }
 
-BOOL
-APIENTRY
-NtUserDdeGetQualityOfService(
-   IN HWND hwndClient,
-   IN HWND hWndServer,
-   OUT PSECURITY_QUALITY_OF_SERVICE pqosPrev)
-{
-   STUB
-
-   return 0;
-}
-
-DWORD
-APIENTRY
-NtUserDdeInitialize(
-   DWORD Unknown0,
-   DWORD Unknown1,
-   DWORD Unknown2,
-   DWORD Unknown3,
-   DWORD Unknown4)
-{
-   STUB
-
-   return 0;
-}
-
-BOOL
-APIENTRY
-NtUserDdeSetQualityOfService(
-   IN  HWND hwndClient,
-   IN  PSECURITY_QUALITY_OF_SERVICE pqosNew,
-   OUT PSECURITY_QUALITY_OF_SERVICE pqosPrev)
-{
-   STUB
-
-   return 0;
-}
-
 DWORD
 APIENTRY
 NtUserDragObject(
@@ -142,17 +104,6 @@ NtUserEvent(
    return 0;
 }
 
-DWORD
-APIENTRY
-NtUserExcludeUpdateRgn(
-  HDC hDC,
-  HWND hWnd)
-{
-   STUB
-
-   return 0;
-}
-
 BOOL
 APIENTRY
 NtUserGetAltTabInfo(
@@ -168,30 +119,6 @@ NtUserGetAltTabInfo(
    return 0;
 }
 
-DWORD
-APIENTRY
-NtUserGetImeHotKey(
-   DWORD Unknown0,
-   DWORD Unknown1,
-   DWORD Unknown2,
-   DWORD Unknown3)
-{
-   STUB
-
-   return 0;
-}
-
-BOOL
-APIENTRY
-NtUserImpersonateDdeClientWindow(
-   HWND hWndClient,
-   HWND hWndServer)
-{
-   STUB
-
-   return 0;
-}
-
 NTSTATUS
 APIENTRY
 NtUserInitializeClientPfnArrays(
@@ -291,18 +218,6 @@ NtUserModifyUserStartupInfoFlags(
    return 0;
 }
 
-DWORD
-APIENTRY
-NtUserNotifyIMEStatus(
-   DWORD Unknown0,
-   DWORD Unknown1,
-   DWORD Unknown2)
-{
-   STUB
-
-   return 0;
-}
-
 DWORD
 APIENTRY
 NtUserQueryUserCounters(
@@ -344,31 +259,47 @@ NtUserSetDbgTag(
    DWORD Unknown0,
    DWORD Unknown1)
 {
-   STUB
+   STUB;
 
    return 0;
 }
 
 DWORD
 APIENTRY
-NtUserSetImeHotKey(
-   DWORD Unknown0,
-   DWORD Unknown1,
-   DWORD Unknown2,
-   DWORD Unknown3,
-   DWORD Unknown4)
+NtUserSetDbgTagCount(
+    DWORD Unknown0)
 {
-   STUB
+    STUB;
+
+    return 0;
+}
+
+DWORD
+APIENTRY
+NtUserSetRipFlags(
+   DWORD Unknown0)
+{
+   STUB;
 
    return 0;
 }
 
+DWORD
+APIENTRY
+NtUserDbgWin32HeapFail(
+    DWORD Unknown0,
+    DWORD Unknown1)
+{
+   STUB
+
+   return 0;
+}
 
 DWORD
 APIENTRY
-NtUserSetRipFlags(
-   DWORD Unknown0,
-   DWORD Unknown1)
+NtUserDbgWin32HeapStat(
+    DWORD Unknown0,
+    DWORD Unknown1)
 {
    STUB
 
@@ -492,103 +423,6 @@ NtUserYieldTask(VOID)
    return 0;
 }
 
-
-DWORD
-APIENTRY
-NtUserCheckImeHotKey(
-    DWORD dwUnknown1,
-    DWORD dwUnknown2)
-{
-    STUB;
-    return 0;
-}
-
-NTSTATUS
-APIENTRY
-NtUserConsoleControl(
-    IN CONSOLECONTROL ConsoleCtrl,
-    IN PVOID ConsoleCtrlInfo,
-    IN ULONG ConsoleCtrlInfoLength)
-{
-    NTSTATUS Status = STATUS_SUCCESS;
-
-    /* Allow only Console Server to perform this operation (via CSRSS) */
-    if (PsGetCurrentProcess() != gpepCSRSS)
-        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
 APIENTRY
 NtUserCreateInputContext(
@@ -607,34 +441,6 @@ NtUserDestroyInputContext(
     return 0;
 }
 
-DWORD
-APIENTRY
-NtUserDisableThreadIme(
-    DWORD dwUnknown1)
-{
-    STUB;
-    return 0;
-}
-
-DWORD
-APIENTRY
-NtUserGetAppImeLevel(
-    DWORD dwUnknown1)
-{
-    STUB;
-    return 0;
-}
-
-DWORD
-APIENTRY
-NtUserGetImeInfoEx(
-    DWORD dwUnknown1,
-    DWORD dwUnknown2)
-{
-    STUB;
-    return 0;
-}
-
 DWORD
 APIENTRY
 NtUserGetRawInputBuffer(
@@ -713,7 +519,8 @@ NtUserNotifyProcessCreate(
     ULONG  dwUnknown,
     ULONG  CreateFlags)
 {
-    STUB;
+    // STUB;
+    TRACE("NtUserNotifyProcessCreate is UNIMPLEMENTED\n");
     return FALSE;
 }
 
@@ -865,34 +672,10 @@ NtUserRegisterRawInputDevices(
     return 0;
 }
 
-DWORD
-APIENTRY
-NtUserResolveDesktop(
-    DWORD dwUnknown1,
-    DWORD dwUnknown2,
-    DWORD dwUnknown3,
-    DWORD dwUnknown4)
-{
-    STUB;
-    return 0;
-}
-
-DWORD
-APIENTRY
-NtUserSetAppImeLevel(
-    DWORD dwUnknown1,
-    DWORD dwUnknown2)
-{
-    STUB;
-    return 0;
-}
-
-DWORD
-APIENTRY
-NtUserSetImeInfoEx(
-    DWORD dwUnknown1)
+DWORD APIENTRY
+NtUserResolveDesktopForWOW(DWORD Unknown0)
 {
-    STUB;
+    STUB
     return 0;
 }
 
@@ -917,7 +700,6 @@ NtUserSetInformationThread(IN HANDLE ThreadHandle,
 {
     NTSTATUS Status = STATUS_SUCCESS;
     PETHREAD Thread;
-    HANDLE CsrPortHandle;
 
     /* Allow only CSRSS to perform this operation */
     if (PsGetCurrentProcess() != gpepCSRSS)
@@ -938,46 +720,103 @@ NtUserSetInformationThread(IN HANDLE ThreadHandle,
     {
         case UserThreadInitiateShutdown:
         {
+            ULONG CapturedFlags = 0;
+
             ERR("Shutdown initiated\n");
-            STUB;
-            Status = STATUS_NOT_IMPLEMENTED;
+
+            if (ThreadInformationLength != sizeof(ULONG))
+            {
+                Status = STATUS_INFO_LENGTH_MISMATCH;
+                break;
+            }
+
+            /* Capture the caller value */
+            Status = STATUS_SUCCESS;
+            _SEH2_TRY
+            {
+                ProbeForWrite(ThreadInformation, sizeof(CapturedFlags), sizeof(PVOID));
+                CapturedFlags = *(PULONG)ThreadInformation;
+            }
+            _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
+            {
+                Status = _SEH2_GetExceptionCode();
+                _SEH2_YIELD(break);
+            }
+            _SEH2_END;
+
+            Status = UserInitiateShutdown(Thread, &CapturedFlags);
+
+            /* Return the modified value to the caller */
+            _SEH2_TRY
+            {
+                *(PULONG)ThreadInformation = CapturedFlags;
+            }
+            _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
+            {
+                Status = _SEH2_GetExceptionCode();
+            }
+            _SEH2_END;
+
             break;
         }
 
         case UserThreadEndShutdown:
         {
+            NTSTATUS ShutdownStatus;
+
             ERR("Shutdown ended\n");
-            STUB;
-            Status = STATUS_NOT_IMPLEMENTED;
+
+            if (ThreadInformationLength != sizeof(ShutdownStatus))
+            {
+                Status = STATUS_INFO_LENGTH_MISMATCH;
+                break;
+            }
+
+            /* Capture the caller value */
+            Status = STATUS_SUCCESS;
+            _SEH2_TRY
+            {
+                ProbeForRead(ThreadInformation, sizeof(ShutdownStatus), sizeof(PVOID));
+                ShutdownStatus = *(NTSTATUS*)ThreadInformation;
+            }
+            _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
+            {
+                Status = _SEH2_GetExceptionCode();
+                _SEH2_YIELD(break);
+            }
+            _SEH2_END;
+
+            Status = UserEndShutdown(Thread, ShutdownStatus);
             break;
         }
 
         case UserThreadCsrApiPort:
         {
+            HANDLE CsrPortHandle;
+
             ERR("Set CSR API Port for Win32k\n");
 
-            if (ThreadInformationLength != sizeof(HANDLE))
+            if (ThreadInformationLength != sizeof(CsrPortHandle))
             {
                 Status = STATUS_INFO_LENGTH_MISMATCH;
                 break;
             }
 
+            /* Capture the caller value */
             Status = STATUS_SUCCESS;
             _SEH2_TRY
             {
-                ProbeForRead(ThreadInformation, sizeof(HANDLE), sizeof(PVOID));
+                ProbeForRead(ThreadInformation, sizeof(CsrPortHandle), sizeof(PVOID));
                 CsrPortHandle = *(PHANDLE)ThreadInformation;
             }
             _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
             {
                 Status = _SEH2_GetExceptionCode();
+                _SEH2_YIELD(break);
             }
             _SEH2_END;
 
-            if (NT_SUCCESS(Status))
-            {
-                Status = InitCsrApiPort(CsrPortHandle);
-            }
+            Status = InitCsrApiPort(CsrPortHandle);
             break;
         }
 
@@ -1102,40 +941,6 @@ NtUserCtxDisplayIOCtl(
     return 0;
 }
 
-/*
- * @unimplemented
- */
-DWORD
-APIENTRY
-NtUserDrawMenuBarTemp(
-   HWND hWnd,
-   HDC hDC,
-   PRECT hRect,
-   HMENU hMenu,
-   HFONT hFont)
-{
-   /* We'll use this function just for caching the menu bar */
-   STUB
-   return 0;
-}
-
-/*
- * FillWindow: Called from User; Dialog, Edit and ListBox procs during a WM_ERASEBKGND.
- */
-/*
- * @unimplemented
- */
-BOOL APIENTRY
-NtUserFillWindow(HWND hWndPaint,
-                 HWND hWndPaint1,
-                 HDC  hDC,
-                 HBRUSH hBrush)
-{
-   STUB
-
-   return 0;
-}
-
 /*
  * @unimplemented
  */
@@ -1147,108 +952,6 @@ NtUserLockWindowUpdate(HWND hWnd)
    return 0;
 }
 
-/*
- * @unimplemented
- */
-DWORD APIENTRY
-NtUserSetImeOwnerWindow(DWORD Unknown0,
-                        DWORD Unknown1)
-{
-   STUB
-
-   return 0;
-}
-
-BOOL
-APIENTRY
-NtUserGetLayeredWindowAttributes(
-    HWND hwnd,
-    COLORREF *pcrKey,
-    BYTE *pbAlpha,
-    DWORD *pdwFlags)
-{
-    STUB;
-    return 0;
-}
-
-/*
- * @unimplemented
- */
-BOOL APIENTRY
-NtUserSetLayeredWindowAttributes(HWND hwnd,
-                          COLORREF crKey,
-                          BYTE bAlpha,
-                          DWORD dwFlags)
-{
-  STUB;
-  return FALSE;
-}
-
-/*
- * @unimplemented
- */
-BOOL
-APIENTRY
-NtUserUpdateLayeredWindow(
-   HWND hwnd,
-   HDC hdcDst,
-   POINT *pptDst,
-   SIZE *psize,
-   HDC hdcSrc,
-   POINT *pptSrc,
-   COLORREF crKey,
-   BLENDFUNCTION *pblend,
-   DWORD dwFlags,
-   RECT *prcDirty)
-{
-   STUB
-
-   return 0;
-}
-
-/*
- * NtUserResolveDesktopForWOW
- *
- * Status
- *    @unimplemented
- */
-
-DWORD APIENTRY
-NtUserResolveDesktopForWOW(DWORD Unknown0)
-{
-   STUB
-   return 0;
-}
-
-/*
- * @unimplemented
- */
-BOOL APIENTRY
-NtUserEndMenu(VOID)
-{
-   STUB
-
-   return 0;
-}
-
-/*
- * @implemented
- */
-/* NOTE: unused function */
-BOOL APIENTRY
-NtUserTrackPopupMenuEx(
-   HMENU hMenu,
-   UINT fuFlags,
-   int x,
-   int y,
-   HWND hWnd,
-   LPTPMPARAMS lptpm)
-{
-   STUB
-
-   return FALSE;
-}
-
 DWORD APIENTRY
 NtUserQuerySendMessage(DWORD Unknown0)
 {
@@ -1257,38 +960,6 @@ NtUserQuerySendMessage(DWORD Unknown0)
     return 0;
 }
 
-/*
- * @unimplemented
- */
-DWORD APIENTRY
-NtUserAlterWindowStyle(DWORD Unknown0,
-                       DWORD Unknown1,
-                       DWORD Unknown2)
-{
-   STUB
-
-   return(0);
-}
-
-/*
- * NtUserSetWindowStationUser
- *
- * Status
- *    @unimplemented
- */
-
-DWORD APIENTRY
-NtUserSetWindowStationUser(
-   DWORD Unknown0,
-   DWORD Unknown1,
-   DWORD Unknown2,
-   DWORD Unknown3)
-{
-   STUB
-
-   return 0;
-}
-
 BOOL APIENTRY NtUserAddClipboardFormatListener(
     HWND hwnd
 )
@@ -1315,16 +986,25 @@ BOOL APIENTRY NtUserGetUpdatedClipboardFormats(
     return FALSE;
 }
 
-/*
- * @unimplemented
- */
+// Yes, I know, these do not belong here, just tell me where to put them
 BOOL
 APIENTRY
-NtUserSetSystemCursor(
-    HCURSOR hcur,
-    DWORD id)
+NtGdiMakeObjectXferable(
+    _In_ HANDLE hHandle,
+    _In_ DWORD dwProcessId)
 {
-    return FALSE;
+    STUB;
+    return 0;
+}
+
+DWORD
+APIENTRY
+NtDxEngGetRedirectionBitmap(
+    DWORD Unknown0)
+{
+    STUB;
+    return 0;
 }
 
+
 /* EOF */