2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS Win32k subsystem
4 * PURPOSE: Native User stubs
5 * FILE: subsystems/win32/win32k/ntuser/ntstubs.c
6 * PROGRAMER: Casper S. Hornstrup (chorns@users.sourceforge.net)
10 DBG_DEFAULT_CHANNEL(UserMisc
);
14 NtUserAssociateInputContext(
26 NtUserAttachThreadInput(
32 PETHREAD Thread
, ThreadTo
;
33 PTHREADINFO pti
, ptiTo
;
37 ERR("Enter NtUserAttachThreadInput %s\n",(fAttach
? "TRUE" : "FALSE" ));
38 Status
= PsLookupThreadByThreadId((HANDLE
)idAttach
, &Thread
);
39 if (!NT_SUCCESS(Status
))
41 EngSetLastError(ERROR_INVALID_PARAMETER
);
44 Status
= PsLookupThreadByThreadId((HANDLE
)idAttachTo
, &ThreadTo
);
45 if (!NT_SUCCESS(Status
))
47 EngSetLastError(ERROR_INVALID_PARAMETER
);
48 ObDereferenceObject(Thread
);
52 pti
= PsGetThreadWin32Thread(Thread
);
53 ptiTo
= PsGetThreadWin32Thread(ThreadTo
);
54 ObDereferenceObject(Thread
);
55 ObDereferenceObject(ThreadTo
);
57 Status
= UserAttachThreadInput( pti
, ptiTo
, fAttach
);
58 if (!NT_SUCCESS(Status
))
60 EngSetLastError(RtlNtStatusToDosError(Status
));
65 ERR("Leave NtUserAttachThreadInput, ret=%d\n",Ret
);
71 // Works like BitBlt, http://msdn.microsoft.com/en-us/library/ms532278(VS.85).aspx
88 Ret
= NtGdiBitBlt( hdc
,
118 NtUserDdeGetQualityOfService(
121 OUT PSECURITY_QUALITY_OF_SERVICE pqosPrev
)
144 NtUserDdeSetQualityOfService(
146 IN PSECURITY_QUALITY_OF_SERVICE pqosNew
,
147 OUT PSECURITY_QUALITY_OF_SERVICE pqosPrev
)
171 NtUserDrawAnimatedRects(
194 NtUserExcludeUpdateRgn(
233 NtUserImpersonateDdeClientWindow(
244 NtUserInitializeClientPfnArrays(
245 PPFNCLIENT pfnClientA
,
246 PPFNCLIENT pfnClientW
,
247 PPFNCLIENTWORKER pfnClientWorker
,
250 NTSTATUS Status
= STATUS_SUCCESS
;
251 TRACE("Enter NtUserInitializeClientPfnArrays User32 0x%p\n", hmodUser
);
253 if (ClientPfnInit
) return Status
;
255 UserEnterExclusive();
259 ProbeForRead( pfnClientA
, sizeof(PFNCLIENT
), 1);
260 ProbeForRead( pfnClientW
, sizeof(PFNCLIENT
), 1);
261 ProbeForRead( pfnClientWorker
, sizeof(PFNCLIENTWORKER
), 1);
262 RtlCopyMemory(&gpsi
->apfnClientA
, pfnClientA
, sizeof(PFNCLIENT
));
263 RtlCopyMemory(&gpsi
->apfnClientW
, pfnClientW
, sizeof(PFNCLIENT
));
264 RtlCopyMemory(&gpsi
->apfnClientWorker
, pfnClientWorker
, sizeof(PFNCLIENTWORKER
));
266 //// FIXME: HAX! Temporary until server side is finished.
267 //// Copy the client side procs for now.
268 RtlCopyMemory(&gpsi
->aStoCidPfn
, pfnClientW
, sizeof(gpsi
->aStoCidPfn
));
270 hModClient
= hmodUser
;
271 ClientPfnInit
= TRUE
;
273 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER
)
275 Status
=_SEH2_GetExceptionCode();
279 if (!NT_SUCCESS(Status
))
281 ERR("Failed reading Client Pfns from user space.\n");
282 SetLastNtError(Status
);
312 NtUserMNDragLeave(VOID
)
332 NtUserModifyUserStartupInfoFlags(
343 NtUserNotifyIMEStatus(
355 NtUserQueryUserCounters(
369 NtUserRegisterTasklist(
379 NtUserSetConsoleReserveKeys(
429 IN CONST INT
*lpaElements
,
430 IN CONST COLORREF
*lpaRgbValues
,
438 /* We need this check to prevent overflow later */
439 if ((ULONG
)cElements
>= 0x40000000)
441 EngSetLastError(ERROR_NOACCESS
);
445 UserEnterExclusive();
449 ProbeForRead(lpaElements
, cElements
* sizeof(INT
), 1);
450 ProbeForRead(lpaRgbValues
, cElements
* sizeof(COLORREF
), 1);
452 IntSetSysColors(cElements
, lpaElements
, lpaRgbValues
);
454 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER
)
456 SetLastNtError(_SEH2_GetExceptionCode());
463 UserSendNotifyMessage(HWND_BROADCAST
, WM_SYSCOLORCHANGE
, 0, 0);
474 NtUserUpdateInputContext(
486 NtUserUpdateInstance(
498 NtUserUserHandleGrantAccess(
499 IN HANDLE hUserHandle
,
510 NtUserWaitForMsgAndEvent(
520 NtUserWin32PoolAllocationStats(
535 NtUserYieldTask(VOID
)
545 NtUserCheckImeHotKey(
555 NtUserConsoleControl(
556 IN CONSOLECONTROL ConsoleCtrl
,
557 IN PVOID ConsoleCtrlInfo
,
558 IN DWORD ConsoleCtrlInfoLength
)
560 NTSTATUS Status
= STATUS_SUCCESS
;
562 /* Allow only Console Server to perform this operation (via CSRSS) */
563 if (gpepCSRSS
!= PsGetCurrentProcess())
564 return STATUS_ACCESS_DENIED
;
566 UserEnterExclusive();
570 case GuiConsoleWndClassAtom
:
574 ProbeForRead(ConsoleCtrlInfo
, ConsoleCtrlInfoLength
, 1);
575 ASSERT(ConsoleCtrlInfoLength
== sizeof(ATOM
));
576 gaGuiConsoleWndClass
= *(ATOM
*)ConsoleCtrlInfo
;
578 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER
)
580 Status
= _SEH2_GetExceptionCode();
587 case ConsoleAcquireDisplayOwnership
:
593 ERR("Calling invalid control %lu in NtUserConsoleControl\n", ConsoleCtrl
);
594 Status
= STATUS_INVALID_INFO_CLASS
;
605 NtUserCreateInputContext(
614 NtUserDestroyInputContext(
623 NtUserDisableThreadIme(
632 NtUserGetAppImeLevel(
651 NtUserGetRawInputBuffer(
662 NtUserGetRawInputData(
675 NtUserGetRawInputDeviceInfo(
688 NtUserGetRawInputDeviceList(
689 PRAWINPUTDEVICELIST pRawInputDeviceList
,
699 NtUserGetRegisteredRawInputDevices(
700 PRAWINPUTDEVICE pRawInputDevices
,
710 NtUserHardErrorControl(
721 NtUserNotifyProcessCreate(
733 NtUserProcessConnect(
735 PUSERCONNECT pUserConnect
,
738 NTSTATUS Status
= STATUS_SUCCESS
;
739 TRACE("NtUserProcessConnect\n");
740 if (pUserConnect
&& ( Size
== sizeof(USERCONNECT
) ))
742 PPROCESSINFO W32Process
;
745 W32Process
= PsGetCurrentProcessWin32Process();
748 pUserConnect
->siClient
.psi
= gpsi
;
749 pUserConnect
->siClient
.aheList
= gHandleTable
;
750 pUserConnect
->siClient
.ulSharedDelta
= (ULONG_PTR
)W32Process
->HeapMappings
.KernelMapping
-
751 (ULONG_PTR
)W32Process
->HeapMappings
.UserMapping
;
753 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER
)
755 Status
= _SEH2_GetExceptionCode();
758 if (!NT_SUCCESS(Status
))
760 SetLastNtError(Status
);
765 return STATUS_UNSUCCESSFUL
;
770 NtUserQueryInformationThread(
783 NtUserQueryInputContext(
793 NtUserRealInternalGetMessage(
807 NtUserRealWaitMessageEx(
817 NtUserRegisterRawInputDevices(
818 IN PCRAWINPUTDEVICE pRawInputDevices
,
819 IN UINT uiNumDevices
,
828 NtUserResolveDesktop(
840 NtUserSetAppImeLevel(
859 NtUserSetInformationProcess(
871 NtUserSetInformationThread(IN HANDLE ThreadHandle
,
872 IN USERTHREADINFOCLASS ThreadInformationClass
,
873 IN PVOID ThreadInformation
,
874 IN ULONG ThreadInformationLength
)
877 if (ThreadInformationClass
== UserThreadInitiateShutdown
)
879 ERR("Shutdown initiated\n");
881 else if (ThreadInformationClass
== UserThreadEndShutdown
)
883 ERR("Shutdown ended\n");
890 return STATUS_SUCCESS
;
895 NtUserSetThreadLayoutHandles(
905 NtUserSoundSentry(VOID
)
913 NtUserTestForInteractiveUser(
920 /* http://www.cyber-ta.org/releases/malware-analysis/public/SOURCES/b47155634ccb2c30630da7e3666d3d07/b47155634ccb2c30630da7e3666d3d07.trace.html#NtUserGetIconSize */
962 NtUserRemoteRedrawRectangle(
974 NtUserRemoteRedrawScreen(VOID
)
982 NtUserRemoteStopScreenUpdates(VOID
)
990 NtUserCtxDisplayIOCtl(
1004 NtUserDrawMenuBarTemp(
1011 /* We'll use this function just for caching the menu bar */
1017 * FillWindow: Called from User; Dialog, Edit and ListBox procs during a WM_ERASEBKGND.
1023 NtUserFillWindow(HWND hWndPaint
,
1037 NtUserLockWindowUpdate(HWND hWnd
)
1048 NtUserSetImeOwnerWindow(DWORD Unknown0
,
1058 NtUserGetLayeredWindowAttributes(
1072 NtUserSetLayeredWindowAttributes(HWND hwnd
,
1086 NtUserUpdateLayeredWindow(
1094 BLENDFUNCTION
*pblend
,
1107 NtUserWindowFromPhysicalPoint(POINT Point
)
1115 * NtUserResolveDesktopForWOW
1122 NtUserResolveDesktopForWOW(DWORD Unknown0
)
1142 /* NOTE: unused function */
1144 NtUserTrackPopupMenuEx(
1158 NtUserQuerySendMessage(DWORD Unknown0
)
1169 NtUserAlterWindowStyle(DWORD Unknown0
,
1179 * NtUserSetWindowStationUser
1186 NtUserSetWindowStationUser(
1197 BOOL APIENTRY
NtUserAddClipboardFormatListener(
1205 BOOL APIENTRY
NtUserRemoveClipboardFormatListener(
1213 BOOL APIENTRY
NtUserGetUpdatedClipboardFormats(
1228 NtUserGetCursorFrameInfo(
1231 PDWORD rate_jiffies
,
1244 NtUserSetSystemCursor(