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 PTHREADINFO pti
, ptiTo
;
36 ERR("Enter NtUserAttachThreadInput %s\n",(fAttach
? "TRUE" : "FALSE" ));
38 pti
= IntTID2PTI((HANDLE
)idAttach
);
39 ptiTo
= IntTID2PTI((HANDLE
)idAttachTo
);
43 ERR("AttachThreadInput pti or ptiTo NULL.\n");
44 EngSetLastError(ERROR_INVALID_PARAMETER
);
48 Status
= UserAttachThreadInput( pti
, ptiTo
, fAttach
);
49 if (!NT_SUCCESS(Status
))
51 EngSetLastError(RtlNtStatusToDosError(Status
));
56 ERR("Leave NtUserAttachThreadInput, ret=%d\n",Ret
);
62 // Works like BitBlt, http://msdn.microsoft.com/en-us/library/ms532278(VS.85).aspx
79 Ret
= NtGdiBitBlt( hdc
,
109 NtUserDdeGetQualityOfService(
112 OUT PSECURITY_QUALITY_OF_SERVICE pqosPrev
)
135 NtUserDdeSetQualityOfService(
137 IN PSECURITY_QUALITY_OF_SERVICE pqosNew
,
138 OUT PSECURITY_QUALITY_OF_SERVICE pqosPrev
)
162 NtUserDrawAnimatedRects(
185 NtUserExcludeUpdateRgn(
224 NtUserImpersonateDdeClientWindow(
235 NtUserInitializeClientPfnArrays(
236 PPFNCLIENT pfnClientA
,
237 PPFNCLIENT pfnClientW
,
238 PPFNCLIENTWORKER pfnClientWorker
,
241 NTSTATUS Status
= STATUS_SUCCESS
;
242 TRACE("Enter NtUserInitializeClientPfnArrays User32 0x%p\n", hmodUser
);
244 if (ClientPfnInit
) return Status
;
246 UserEnterExclusive();
250 ProbeForRead( pfnClientA
, sizeof(PFNCLIENT
), 1);
251 ProbeForRead( pfnClientW
, sizeof(PFNCLIENT
), 1);
252 ProbeForRead( pfnClientWorker
, sizeof(PFNCLIENTWORKER
), 1);
253 RtlCopyMemory(&gpsi
->apfnClientA
, pfnClientA
, sizeof(PFNCLIENT
));
254 RtlCopyMemory(&gpsi
->apfnClientW
, pfnClientW
, sizeof(PFNCLIENT
));
255 RtlCopyMemory(&gpsi
->apfnClientWorker
, pfnClientWorker
, sizeof(PFNCLIENTWORKER
));
257 //// FIXME: HAX! Temporary until server side is finished.
258 //// Copy the client side procs for now.
259 RtlCopyMemory(&gpsi
->aStoCidPfn
, pfnClientW
, sizeof(gpsi
->aStoCidPfn
));
261 hModClient
= hmodUser
;
262 ClientPfnInit
= TRUE
;
264 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER
)
266 Status
=_SEH2_GetExceptionCode();
270 if (!NT_SUCCESS(Status
))
272 ERR("Failed reading Client Pfns from user space.\n");
273 SetLastNtError(Status
);
303 NtUserMNDragLeave(VOID
)
323 NtUserModifyUserStartupInfoFlags(
334 NtUserNotifyIMEStatus(
346 NtUserQueryUserCounters(
360 NtUserRegisterTasklist(
370 NtUserSetConsoleReserveKeys(
420 IN CONST INT
*lpaElements
,
421 IN CONST COLORREF
*lpaRgbValues
,
429 /* We need this check to prevent overflow later */
430 if ((ULONG
)cElements
>= 0x40000000)
432 EngSetLastError(ERROR_NOACCESS
);
436 UserEnterExclusive();
440 ProbeForRead(lpaElements
, cElements
* sizeof(INT
), 1);
441 ProbeForRead(lpaRgbValues
, cElements
* sizeof(COLORREF
), 1);
443 IntSetSysColors(cElements
, lpaElements
, lpaRgbValues
);
445 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER
)
447 SetLastNtError(_SEH2_GetExceptionCode());
454 UserSendNotifyMessage(HWND_BROADCAST
, WM_SYSCOLORCHANGE
, 0, 0);
465 NtUserUpdateInputContext(
477 NtUserUpdateInstance(
489 NtUserUserHandleGrantAccess(
490 IN HANDLE hUserHandle
,
501 NtUserWaitForMsgAndEvent(
511 NtUserWin32PoolAllocationStats(
526 NtUserYieldTask(VOID
)
536 NtUserCheckImeHotKey(
546 NtUserConsoleControl(
547 IN CONSOLECONTROL ConsoleCtrl
,
548 IN PVOID ConsoleCtrlInfo
,
549 IN DWORD ConsoleCtrlInfoLength
)
551 NTSTATUS Status
= STATUS_SUCCESS
;
553 /* Allow only Console Server to perform this operation (via CSRSS) */
554 if (gpepCSRSS
!= PsGetCurrentProcess())
555 return STATUS_ACCESS_DENIED
;
557 UserEnterExclusive();
561 case GuiConsoleWndClassAtom
:
565 ProbeForRead(ConsoleCtrlInfo
, ConsoleCtrlInfoLength
, 1);
566 ASSERT(ConsoleCtrlInfoLength
== sizeof(ATOM
));
567 gaGuiConsoleWndClass
= *(ATOM
*)ConsoleCtrlInfo
;
569 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER
)
571 Status
= _SEH2_GetExceptionCode();
578 case ConsoleAcquireDisplayOwnership
:
584 ERR("Calling invalid control %lu in NtUserConsoleControl\n", ConsoleCtrl
);
585 Status
= STATUS_INVALID_INFO_CLASS
;
596 NtUserCreateInputContext(
605 NtUserDestroyInputContext(
614 NtUserDisableThreadIme(
623 NtUserGetAppImeLevel(
642 NtUserGetRawInputBuffer(
653 NtUserGetRawInputData(
666 NtUserGetRawInputDeviceInfo(
679 NtUserGetRawInputDeviceList(
680 PRAWINPUTDEVICELIST pRawInputDeviceList
,
690 NtUserGetRegisteredRawInputDevices(
691 PRAWINPUTDEVICE pRawInputDevices
,
701 NtUserHardErrorControl(
712 NtUserNotifyProcessCreate(
714 HANDLE SourceThreadId
,
724 NtUserProcessConnect(
726 PUSERCONNECT pUserConnect
,
729 NTSTATUS Status
= STATUS_SUCCESS
;
730 TRACE("NtUserProcessConnect\n");
731 if (pUserConnect
&& ( Size
== sizeof(USERCONNECT
) ))
733 PPROCESSINFO W32Process
;
736 W32Process
= PsGetCurrentProcessWin32Process();
739 pUserConnect
->siClient
.psi
= gpsi
;
740 pUserConnect
->siClient
.aheList
= gHandleTable
;
741 pUserConnect
->siClient
.ulSharedDelta
= (ULONG_PTR
)W32Process
->HeapMappings
.KernelMapping
-
742 (ULONG_PTR
)W32Process
->HeapMappings
.UserMapping
;
744 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER
)
746 Status
= _SEH2_GetExceptionCode();
749 if (!NT_SUCCESS(Status
))
751 SetLastNtError(Status
);
756 return STATUS_UNSUCCESSFUL
;
761 NtUserQueryInformationThread(
774 NtUserQueryInputContext(
784 NtUserRealInternalGetMessage(
798 NtUserRealWaitMessageEx(
808 NtUserRegisterRawInputDevices(
809 IN PCRAWINPUTDEVICE pRawInputDevices
,
810 IN UINT uiNumDevices
,
819 NtUserResolveDesktop(
831 NtUserSetAppImeLevel(
850 NtUserSetInformationProcess(
862 NtUserSetInformationThread(IN HANDLE ThreadHandle
,
863 IN USERTHREADINFOCLASS ThreadInformationClass
,
864 IN PVOID ThreadInformation
,
865 IN ULONG ThreadInformationLength
)
868 if (ThreadInformationClass
== UserThreadInitiateShutdown
)
870 ERR("Shutdown initiated\n");
872 else if (ThreadInformationClass
== UserThreadEndShutdown
)
874 ERR("Shutdown ended\n");
881 return STATUS_SUCCESS
;
886 NtUserSetThreadLayoutHandles(
896 NtUserSoundSentry(VOID
)
904 NtUserTestForInteractiveUser(
911 /* http://www.cyber-ta.org/releases/malware-analysis/public/SOURCES/b47155634ccb2c30630da7e3666d3d07/b47155634ccb2c30630da7e3666d3d07.trace.html#NtUserGetIconSize */
953 NtUserRemoteRedrawRectangle(
965 NtUserRemoteRedrawScreen(VOID
)
973 NtUserRemoteStopScreenUpdates(VOID
)
981 NtUserCtxDisplayIOCtl(
995 NtUserDrawMenuBarTemp(
1002 /* We'll use this function just for caching the menu bar */
1008 * FillWindow: Called from User; Dialog, Edit and ListBox procs during a WM_ERASEBKGND.
1014 NtUserFillWindow(HWND hWndPaint
,
1028 NtUserLockWindowUpdate(HWND hWnd
)
1039 NtUserSetImeOwnerWindow(DWORD Unknown0
,
1049 NtUserGetLayeredWindowAttributes(
1063 NtUserSetLayeredWindowAttributes(HWND hwnd
,
1077 NtUserUpdateLayeredWindow(
1085 BLENDFUNCTION
*pblend
,
1098 NtUserWindowFromPhysicalPoint(POINT Point
)
1106 * NtUserResolveDesktopForWOW
1113 NtUserResolveDesktopForWOW(DWORD Unknown0
)
1133 /* NOTE: unused function */
1135 NtUserTrackPopupMenuEx(
1149 NtUserQuerySendMessage(DWORD Unknown0
)
1160 NtUserAlterWindowStyle(DWORD Unknown0
,
1170 * NtUserSetWindowStationUser
1177 NtUserSetWindowStationUser(
1188 BOOL APIENTRY
NtUserAddClipboardFormatListener(
1196 BOOL APIENTRY
NtUserRemoveClipboardFormatListener(
1204 BOOL APIENTRY
NtUserGetUpdatedClipboardFormats(
1219 NtUserGetCursorFrameInfo(
1222 PDWORD rate_jiffies
,
1235 NtUserSetSystemCursor(