X-Git-Url: https://git.reactos.org/?p=reactos.git;a=blobdiff_plain;f=reactos%2Fsubsystems%2Fwin32%2Fwin32k%2Fntuser%2Fntstubs.c;h=1f7615debf2ece776900c6b880fa766c20d70044;hp=7fad1fb90811a7c90b76141723657156e2e16b58;hb=1b6ac48af4273d623894193fe5187d828b641b80;hpb=bb296ffa81b611186b12d6ea063afea879c60ff5 diff --git a/reactos/subsystems/win32/win32k/ntuser/ntstubs.c b/reactos/subsystems/win32/win32k/ntuser/ntstubs.c index 7fad1fb9081..1f7615debf2 100644 --- a/reactos/subsystems/win32/win32k/ntuser/ntstubs.c +++ b/reactos/subsystems/win32/win32k/ntuser/ntstubs.c @@ -7,7 +7,7 @@ * REVISION HISTORY: * 04-06-2001 CSH Created */ -#include +#include #define NDEBUG #include @@ -31,9 +31,36 @@ NtUserAttachThreadInput( IN DWORD idAttachTo, IN BOOL fAttach) { - UNIMPLEMENTED + NTSTATUS Status; + PETHREAD Thread, ThreadTo; + PTHREADINFO pti, ptiTo; + BOOL Ret = FALSE; - return 0; + 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; } // @@ -172,39 +199,6 @@ NtUserDrawAnimatedRects( return 0; } -BOOL -APIENTRY -NtUserEnumDisplayDevices ( - PUNICODE_STRING lpDevice, /* device name */ - DWORD iDevNum, /* display device */ - PDISPLAY_DEVICEW lpDisplayDevice, /* device information */ - DWORD dwFlags ) /* reserved */ -{ - DPRINT1("NtUserEnumDisplayDevices() is UNIMPLEMENTED!\n"); - if (lpDevice->Length == 0 && iDevNum > 0) - { - /* Only one display device present */ - return FALSE; - } - else if (lpDevice->Length != 0) - { - /* Can't enumerate monitors :( */ - return FALSE; - } - if (lpDisplayDevice->cb < sizeof(DISPLAY_DEVICE)) - return FALSE; - - wcscpy(lpDisplayDevice->DeviceName, L"\\\\.\\DISPLAY1"); - wcscpy(lpDisplayDevice->DeviceString, L""); - lpDisplayDevice->StateFlags = DISPLAY_DEVICE_ATTACHED_TO_DESKTOP - | DISPLAY_DEVICE_MODESPRUNED - | DISPLAY_DEVICE_PRIMARY_DEVICE - | DISPLAY_DEVICE_VGA_COMPATIBLE; - lpDisplayDevice->DeviceID[0] = L'0'; - lpDisplayDevice->DeviceKey[0] = L'0'; - return TRUE; -} - DWORD APIENTRY NtUserEvent( @@ -298,7 +292,7 @@ NtUserGetMouseMovePointsEx( if ((cbSize != sizeof(MOUSEMOVEPOINT)) || (nBufPoints < 0) || (nBufPoints > 64)) { UserLeave(); - SetLastWin32Error(ERROR_INVALID_PARAMETER); + EngSetLastError(ERROR_INVALID_PARAMETER); return -1; } @@ -310,7 +304,7 @@ NtUserGetMouseMovePointsEx( _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) { SetLastNtError(_SEH2_GetExceptionCode()); - SetLastWin32Error(ERROR_NOACCESS); + EngSetLastError(ERROR_NOACCESS); } _SEH2_END; @@ -322,7 +316,7 @@ NtUserGetMouseMovePointsEx( case GMMP_USE_HIGH_RESOLUTION_POINTS: break; default: - SetLastWin32Error(GMMP_ERR_POINT_NOT_FOUND); + EngSetLastError(GMMP_ERR_POINT_NOT_FOUND); return GMMP_ERR_POINT_NOT_FOUND; } */ @@ -478,7 +472,6 @@ NtUserQueryUserCounters( return 0; } - DWORD APIENTRY NtUserRegisterTasklist( @@ -489,20 +482,6 @@ NtUserRegisterTasklist( return 0; } - -DWORD -APIENTRY -NtUserSBGetParms( - DWORD Unknown0, - DWORD Unknown1, - DWORD Unknown2, - DWORD Unknown3) -{ - UNIMPLEMENTED - - return 0; -} - DWORD APIENTRY NtUserSetConsoleReserveKeys( @@ -585,7 +564,7 @@ NtUserSetSysColors( } if (Ret) { - UserPostMessage(HWND_BROADCAST, WM_SYSCOLORCHANGE, 0, 0); + UserSendNotifyMessage(HWND_BROADCAST, WM_SYSCOLORCHANGE, 0, 0); } UserLeave(); return Ret; @@ -838,8 +817,45 @@ NtUserMinMaximize( UINT cmd, // Wine SW_ commands BOOL Hide) { - UNIMPLEMENTED; - return 0; + RECTL NewPos; + UINT SwFlags; + PWND pWnd; + + DPRINT("Enter NtUserMinMaximize\n"); + UserEnterExclusive(); + + pWnd = UserGetWindowObject(hWnd); + if ( !pWnd || // FIXME: + pWnd == IntGetDesktopWindow() || // pWnd->fnid == FNID_DESKTOP + pWnd == IntGetMessageWindow() ) // pWnd->fnid == FNID_MESSAGEWND + { + goto Exit; + } + + if ( cmd > SW_MAX || pWnd->state2 & WNDS2_INDESTROY) + { + EngSetLastError(ERROR_INVALID_PARAMETER); + goto Exit; + } + + co_WinPosMinMaximize(pWnd, cmd, &NewPos); + + SwFlags = Hide ? SWP_NOACTIVATE|SWP_NOZORDER|SWP_FRAMECHANGED : SWP_NOZORDER|SWP_FRAMECHANGED; + + co_WinPosSetWindowPos( pWnd, + NULL, + NewPos.left, + NewPos.top, + NewPos.right, + NewPos.bottom, + SwFlags); + + co_WinPosShowWindow(pWnd, cmd); + +Exit: + DPRINT("Leave NtUserMinMaximize\n"); + UserLeave(); + return 0; // Always NULL? } DWORD @@ -854,17 +870,6 @@ NtUserNotifyProcessCreate( return 0; } -BOOL -APIENTRY -NtUserPrintWindow( - HWND hwnd, - HDC hdcBlt, - UINT nFlags) -{ - UNIMPLEMENTED; - return 0; -} - NTSTATUS APIENTRY NtUserProcessConnect( @@ -1017,16 +1022,28 @@ NtUserSetInformationProcess( return 0; } -DWORD +NTSTATUS APIENTRY -NtUserSetInformationThread( - DWORD dwUnknown1, - DWORD dwUnknown2, - DWORD dwUnknown3, - DWORD dwUnknown4) +NtUserSetInformationThread(IN HANDLE ThreadHandle, + IN USERTHREADINFOCLASS ThreadInformationClass, + IN PVOID ThreadInformation, + IN ULONG ThreadInformationLength) + { - UNIMPLEMENTED; - return 0; + if (ThreadInformationClass == UserThreadInitiateShutdown) + { + DPRINT1("Shutdown initiated\n"); + } + else if (ThreadInformationClass == UserThreadEndShutdown) + { + DPRINT1("Shutdown ended\n"); + } + else + { + UNIMPLEMENTED; + } + + return STATUS_SUCCESS; } DWORD @@ -1104,18 +1121,6 @@ NtUserGetLayeredWindowAttributes( return 0; } -/* ValidateRect gets redirected to NtUserValidateRect: - http://blog.csdn.net/ntdll/archive/2005/10/19/509299.aspx */ -BOOL -APIENTRY -NtUserValidateRect( - HWND hWnd, - const RECT *lpRect) -{ - UNIMPLEMENTED; - return 0; -} - BOOL APIENTRY NtUserValidateTimerCallback( @@ -1124,20 +1129,11 @@ NtUserValidateTimerCallback( LPARAM lParam) { BOOL Ret = FALSE; - PWINDOW_OBJECT Window = NULL; UserEnterShared(); - if (hWnd) - { - Window = UserGetWindowObject(hWnd); - if (!Window || !Window->Wnd) - goto Exit; - } - - Ret = ValidateTimerCallback(PsGetCurrentThreadWin32Thread(), Window, wParam, lParam); + Ret = ValidateTimerCallback(PsGetCurrentThreadWin32Thread(), lParam); -Exit: UserLeave(); return Ret; } @@ -1192,5 +1188,283 @@ 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 */ + UNIMPLEMENTED + 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) +{ + UNIMPLEMENTED + + return 0; +} + +/* + * @unimplemented + */ +BOOL APIENTRY +NtUserFlashWindowEx(IN PFLASHWINFO pfwi) +{ + UNIMPLEMENTED + + return 1; +} + +/* + * @unimplemented + */ +BOOL APIENTRY +NtUserLockWindowUpdate(HWND hWnd) +{ + UNIMPLEMENTED + + return 0; +} + +/* + * @unimplemented + */ +DWORD APIENTRY +NtUserRealChildWindowFromPoint(DWORD Unknown0, + DWORD Unknown1, + DWORD Unknown2) +{ + UNIMPLEMENTED + + return 0; +} + +/* + * @unimplemented + */ +DWORD APIENTRY +NtUserSetImeOwnerWindow(DWORD Unknown0, + DWORD Unknown1) +{ + UNIMPLEMENTED + + return 0; +} + +/* + * @unimplemented + */ +DWORD APIENTRY +NtUserSetInternalWindowPos( + HWND hwnd, + UINT showCmd, + LPRECT rect, + LPPOINT pt) +{ + UNIMPLEMENTED + + return 0; +} + +/* + * @unimplemented + */ +BOOL APIENTRY +NtUserSetLayeredWindowAttributes(HWND hwnd, + COLORREF crKey, + BYTE bAlpha, + DWORD dwFlags) +{ + UNIMPLEMENTED; + 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) +{ + UNIMPLEMENTED + + return 0; +} + +/* + * @unimplemented + */ +HWND APIENTRY +NtUserWindowFromPhysicalPoint(POINT Point) +{ + UNIMPLEMENTED + + return NULL; +} + +/* + * NtUserResolveDesktopForWOW + * + * Status + * @unimplemented + */ + +DWORD APIENTRY +NtUserResolveDesktopForWOW(DWORD Unknown0) +{ + UNIMPLEMENTED + return 0; +} + +/* + * @unimplemented + */ +BOOL APIENTRY +NtUserEndMenu(VOID) +{ + UNIMPLEMENTED + + return 0; +} + +/* + * @implemented + */ +/* NOTE: unused function */ +BOOL APIENTRY +NtUserTrackPopupMenuEx( + HMENU hMenu, + UINT fuFlags, + int x, + int y, + HWND hWnd, + LPTPMPARAMS lptpm) +{ + UNIMPLEMENTED + + return FALSE; +} + +DWORD APIENTRY +NtUserQuerySendMessage(DWORD Unknown0) +{ + UNIMPLEMENTED; + + return 0; +} + +/* + * @unimplemented + */ +DWORD APIENTRY +NtUserAlterWindowStyle(DWORD Unknown0, + DWORD Unknown1, + DWORD Unknown2) +{ + UNIMPLEMENTED + + return(0); +} + +/* + * NtUserSetWindowStationUser + * + * Status + * @unimplemented + */ + +DWORD APIENTRY +NtUserSetWindowStationUser( + DWORD Unknown0, + DWORD Unknown1, + DWORD Unknown2, + DWORD Unknown3) +{ + UNIMPLEMENTED + + return 0; +} + +BOOL APIENTRY NtUserAddClipboardFormatListener( + HWND hwnd +) +{ + UNIMPLEMENTED; + return FALSE; +} + +BOOL APIENTRY NtUserRemoveClipboardFormatListener( + HWND hwnd +) +{ + UNIMPLEMENTED; + return FALSE; +} + +BOOL APIENTRY NtUserGetUpdatedClipboardFormats( + PUINT lpuiFormats, + UINT cFormats, + PUINT pcFormatsOut +) +{ + UNIMPLEMENTED; + return FALSE; +} + +/* + * @unimplemented + */ +DWORD +APIENTRY +NtUserGetCursorFrameInfo( + DWORD Unknown0, + DWORD Unknown1, + DWORD Unknown2, + DWORD Unknown3) +{ + UNIMPLEMENTED + + return 0; +} + +/* + * @unimplemented + */ +BOOL +APIENTRY +NtUserSetSystemCursor( + HCURSOR hcur, + DWORD id) +{ + return FALSE; +} /* EOF */