2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS kernel
4 * PURPOSE: Native User stubs
5 * FILE: subsys/win32k/ntuser/stubs.c
6 * PROGRAMER: Casper S. Hornstrup (chorns@users.sourceforge.net)
8 * 04-06-2001 CSH Created
17 NtUserAssociateInputContext(
29 NtUserAttachThreadInput(
35 PETHREAD Thread
, ThreadTo
;
36 PTHREADINFO pti
, ptiTo
;
40 Status
= PsLookupThreadByThreadId((HANDLE
)idAttach
, &Thread
);
41 if (!NT_SUCCESS(Status
))
43 EngSetLastError(ERROR_INVALID_PARAMETER
);
46 Status
= PsLookupThreadByThreadId((HANDLE
)idAttachTo
, &ThreadTo
);
47 if (!NT_SUCCESS(Status
))
49 EngSetLastError(ERROR_INVALID_PARAMETER
);
50 ObDereferenceObject(Thread
);
54 pti
= PsGetThreadWin32Thread(Thread
);
55 ptiTo
= PsGetThreadWin32Thread(ThreadTo
);
56 ObDereferenceObject(Thread
);
57 ObDereferenceObject(ThreadTo
);
59 Ret
= UserAttachThreadInput( pti
, ptiTo
, fAttach
);
67 // Works like BitBlt, http://msdn.microsoft.com/en-us/library/ms532278(VS.85).aspx
84 Ret
= NtGdiBitBlt( hdc
,
114 NtUserConvertMemHandle(
125 NtUserCreateLocalMemHandle(
138 NtUserDdeGetQualityOfService(
141 OUT PSECURITY_QUALITY_OF_SERVICE pqosPrev
)
164 NtUserDdeSetQualityOfService(
166 IN PSECURITY_QUALITY_OF_SERVICE pqosNew
,
167 OUT PSECURITY_QUALITY_OF_SERVICE pqosPrev
)
191 NtUserDrawAnimatedRects(
214 NtUserExcludeUpdateRgn(
240 NtUserGetControlBrush(
252 * Called from PaintRect, works almost like wine PaintRect16 but returns hBrush.
256 NtUserGetControlColor(
260 UINT CtlMsg
) // Wine PaintRect: WM_CTLCOLORMSGBOX + hbrush
283 NtUserGetMouseMovePointsEx(
285 LPMOUSEMOVEPOINT lppt
,
286 LPMOUSEMOVEPOINT lpptBuf
,
290 UserEnterExclusive();
292 if ((cbSize
!= sizeof(MOUSEMOVEPOINT
)) || (nBufPoints
< 0) || (nBufPoints
> 64))
295 EngSetLastError(ERROR_INVALID_PARAMETER
);
301 ProbeForRead(lppt
, cbSize
, 1);
302 ProbeForWrite(lpptBuf
, cbSize
, 1);
304 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER
)
306 SetLastNtError(_SEH2_GetExceptionCode());
307 EngSetLastError(ERROR_NOACCESS
);
312 Call a subfunction of GetMouseMovePointsEx!
315 case GMMP_USE_DISPLAY_POINTS:
316 case GMMP_USE_HIGH_RESOLUTION_POINTS:
319 EngSetLastError(GMMP_ERR_POINT_NOT_FOUND);
320 return GMMP_ERR_POINT_NOT_FOUND;
332 NtUserImpersonateDdeClientWindow(
343 NtUserInitializeClientPfnArrays(
344 PPFNCLIENT pfnClientA
,
345 PPFNCLIENT pfnClientW
,
346 PPFNCLIENTWORKER pfnClientWorker
,
349 NTSTATUS Status
= STATUS_SUCCESS
;
350 DPRINT("Enter NtUserInitializeClientPfnArrays User32 0x%x\n",hmodUser
);
352 if (ClientPfnInit
) return Status
;
354 UserEnterExclusive();
358 ProbeForRead( pfnClientA
, sizeof(PFNCLIENT
), 1);
359 ProbeForRead( pfnClientW
, sizeof(PFNCLIENT
), 1);
360 ProbeForRead( pfnClientWorker
, sizeof(PFNCLIENTWORKER
), 1);
361 RtlCopyMemory(&gpsi
->apfnClientA
, pfnClientA
, sizeof(PFNCLIENT
));
362 RtlCopyMemory(&gpsi
->apfnClientW
, pfnClientW
, sizeof(PFNCLIENT
));
363 RtlCopyMemory(&gpsi
->apfnClientWorker
, pfnClientWorker
, sizeof(PFNCLIENTWORKER
));
365 //// FIXME! HAX! Temporary until server side is finished.
366 //// Copy the client side procs for now.
367 RtlCopyMemory(&gpsi
->aStoCidPfn
, pfnClientW
, sizeof(gpsi
->aStoCidPfn
));
369 hModClient
= hmodUser
;
370 ClientPfnInit
= TRUE
;
372 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER
)
374 Status
=_SEH2_GetExceptionCode();
378 if (!NT_SUCCESS(Status
))
380 DPRINT1("Failed reading Client Pfns from user space.\n");
381 SetLastNtError(Status
);
411 NtUserLockWorkStation(VOID
)
420 NtUserMNDragLeave(VOID
)
440 NtUserModifyUserStartupInfoFlags(
451 NtUserNotifyIMEStatus(
463 NtUserQueryUserCounters(
477 NtUserRegisterTasklist(
487 NtUserSetConsoleReserveKeys(
537 IN CONST INT
*lpaElements
,
538 IN CONST COLORREF
*lpaRgbValues
,
546 /* We need this check to prevent overflow later */
547 if ((ULONG
)cElements
>= 0x40000000)
549 EngSetLastError(ERROR_NOACCESS
);
553 UserEnterExclusive();
557 ProbeForRead(lpaElements
, cElements
* sizeof(INT
), 1);
558 ProbeForRead(lpaRgbValues
, cElements
* sizeof(COLORREF
), 1);
560 IntSetSysColors(cElements
, lpaElements
, lpaRgbValues
);
562 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER
)
564 SetLastNtError(_SEH2_GetExceptionCode());
571 UserSendNotifyMessage(HWND_BROADCAST
, WM_SYSCOLORCHANGE
, 0, 0);
580 NtUserSetThreadState(
591 NtUserTrackMouseEvent(
592 LPTRACKMOUSEEVENT lpEventTrack
)
602 NtUserUpdateInputContext(
614 NtUserUpdateInstance(
626 NtUserUserHandleGrantAccess(
627 IN HANDLE hUserHandle
,
638 NtUserWaitForMsgAndEvent(
648 NtUserWin32PoolAllocationStats(
663 NtUserYieldTask(VOID
)
673 NtUserCheckImeHotKey(
683 NtUserConsoleControl(
694 NtUserCreateInputContext(
703 NtUserDestroyInputContext(
712 NtUserDisableThreadIme(
721 NtUserGetAppImeLevel(
750 NtUserGetRawInputBuffer(
761 NtUserGetRawInputData(
774 NtUserGetRawInputDeviceInfo(
787 NtUserGetRawInputDeviceList(
788 PRAWINPUTDEVICELIST pRawInputDeviceList
,
798 NtUserGetRegisteredRawInputDevices(
799 PRAWINPUTDEVICE pRawInputDevices
,
809 NtUserHardErrorControl(
822 UINT cmd
, // Wine SW_ commands
829 DPRINT("Enter NtUserMinMaximize\n");
830 UserEnterExclusive();
832 pWnd
= UserGetWindowObject(hWnd
);
833 if ( !pWnd
|| // FIXME:
834 pWnd
== IntGetDesktopWindow() || // pWnd->fnid == FNID_DESKTOP
835 pWnd
== IntGetMessageWindow() ) // pWnd->fnid == FNID_MESSAGEWND
840 if ( cmd
> SW_MAX
|| pWnd
->state2
& WNDS2_INDESTROY
)
842 EngSetLastError(ERROR_INVALID_PARAMETER
);
846 co_WinPosMinMaximize(pWnd
, cmd
, &NewPos
);
848 SwFlags
= Hide
? SWP_NOACTIVATE
|SWP_NOZORDER
|SWP_FRAMECHANGED
: SWP_NOZORDER
|SWP_FRAMECHANGED
;
850 co_WinPosSetWindowPos( pWnd
,
858 co_WinPosShowWindow(pWnd
, cmd
);
861 DPRINT("Leave NtUserMinMaximize\n");
863 return 0; // Always NULL?
868 NtUserNotifyProcessCreate(
880 NtUserProcessConnect(
882 PUSERCONNECT pUserConnect
,
885 NTSTATUS Status
= STATUS_SUCCESS
;
886 DPRINT("NtUserProcessConnect\n");
887 if (pUserConnect
&& ( Size
== sizeof(USERCONNECT
) ))
889 PPROCESSINFO W32Process
;
892 W32Process
= PsGetCurrentProcessWin32Process();
895 pUserConnect
->siClient
.psi
= gpsi
;
896 pUserConnect
->siClient
.aheList
= gHandleTable
;
897 pUserConnect
->siClient
.ulSharedDelta
= (ULONG_PTR
)W32Process
->HeapMappings
.KernelMapping
-
898 (ULONG_PTR
)W32Process
->HeapMappings
.UserMapping
;
900 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER
)
902 Status
= _SEH2_GetExceptionCode();
905 if (!NT_SUCCESS(Status
))
907 SetLastNtError(Status
);
912 return STATUS_UNSUCCESSFUL
;
917 NtUserQueryInformationThread(
930 NtUserQueryInputContext(
940 NtUserRealInternalGetMessage(
954 NtUserRealWaitMessageEx(
964 NtUserRegisterUserApiHook(
965 PUNICODE_STRING m_dllname1
,
966 PUNICODE_STRING m_funname1
,
970 UserEnterExclusive();
978 NtUserRegisterRawInputDevices(
979 IN PCRAWINPUTDEVICE pRawInputDevices
,
980 IN UINT uiNumDevices
,
989 NtUserResolveDesktop(
1001 NtUserSetAppImeLevel(
1020 NtUserSetInformationProcess(
1032 NtUserSetInformationThread(IN HANDLE ThreadHandle
,
1033 IN USERTHREADINFOCLASS ThreadInformationClass
,
1034 IN PVOID ThreadInformation
,
1035 IN ULONG ThreadInformationLength
)
1038 if (ThreadInformationClass
== UserThreadInitiateShutdown
)
1040 DPRINT1("Shutdown initiated\n");
1042 else if (ThreadInformationClass
== UserThreadEndShutdown
)
1044 DPRINT1("Shutdown ended\n");
1051 return STATUS_SUCCESS
;
1056 NtUserSetThreadLayoutHandles(
1066 NtUserSoundSentry(VOID
)
1074 NtUserTestForInteractiveUser(
1081 /* http://www.cyber-ta.org/releases/malware-analysis/public/SOURCES/b47155634ccb2c30630da7e3666d3d07/b47155634ccb2c30630da7e3666d3d07.trace.html#NtUserGetIconSize */
1111 NtUserUnregisterUserApiHook(VOID
)
1119 NtUserGetLayeredWindowAttributes(
1131 NtUserValidateTimerCallback(
1140 Ret
= ValidateTimerCallback(PsGetCurrentThreadWin32Thread(), lParam
);
1148 NtUserRemoteConnect(
1159 NtUserRemoteRedrawRectangle(
1171 NtUserRemoteRedrawScreen(VOID
)
1179 NtUserRemoteStopScreenUpdates(VOID
)
1187 NtUserCtxDisplayIOCtl(
1201 NtUserDrawMenuBarTemp(
1208 /* we'll use this function just for caching the menu bar */
1214 * FillWindow: Called from User; Dialog, Edit and ListBox procs during a WM_ERASEBKGND.
1220 NtUserFillWindow(HWND hWndPaint
,
1234 NtUserFlashWindowEx(IN PFLASHWINFO pfwi
)
1245 NtUserLockWindowUpdate(HWND hWnd
)
1256 NtUserRealChildWindowFromPoint(HWND Parent
,
1269 NtUserSetImeOwnerWindow(DWORD Unknown0
,
1281 NtUserSetInternalWindowPos(
1296 NtUserSetLayeredWindowAttributes(HWND hwnd
,
1310 NtUserUpdateLayeredWindow(
1318 BLENDFUNCTION
*pblend
,
1331 NtUserWindowFromPhysicalPoint(POINT Point
)
1339 * NtUserResolveDesktopForWOW
1346 NtUserResolveDesktopForWOW(DWORD Unknown0
)
1366 /* NOTE: unused function */
1368 NtUserTrackPopupMenuEx(
1382 NtUserQuerySendMessage(DWORD Unknown0
)
1393 NtUserAlterWindowStyle(DWORD Unknown0
,
1403 * NtUserSetWindowStationUser
1410 NtUserSetWindowStationUser(
1421 BOOL APIENTRY
NtUserAddClipboardFormatListener(
1429 BOOL APIENTRY
NtUserRemoveClipboardFormatListener(
1437 BOOL APIENTRY
NtUserGetUpdatedClipboardFormats(
1452 NtUserGetCursorFrameInfo(
1468 NtUserSetSystemCursor(