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(
24 // Works like BitBlt, http://msdn.microsoft.com/en-us/library/ms532278(VS.85).aspx
41 Ret
= NtGdiBitBlt( hdc
,
71 NtUserDdeGetQualityOfService(
74 OUT PSECURITY_QUALITY_OF_SERVICE pqosPrev
)
97 NtUserDdeSetQualityOfService(
99 IN PSECURITY_QUALITY_OF_SERVICE pqosNew
,
100 OUT PSECURITY_QUALITY_OF_SERVICE pqosPrev
)
124 NtUserDrawAnimatedRects(
147 NtUserExcludeUpdateRgn(
186 NtUserImpersonateDdeClientWindow(
197 NtUserInitializeClientPfnArrays(
198 PPFNCLIENT pfnClientA
,
199 PPFNCLIENT pfnClientW
,
200 PPFNCLIENTWORKER pfnClientWorker
,
203 NTSTATUS Status
= STATUS_SUCCESS
;
204 TRACE("Enter NtUserInitializeClientPfnArrays User32 0x%p\n", hmodUser
);
206 if (ClientPfnInit
) return Status
;
208 UserEnterExclusive();
212 ProbeForRead( pfnClientA
, sizeof(PFNCLIENT
), 1);
213 ProbeForRead( pfnClientW
, sizeof(PFNCLIENT
), 1);
214 ProbeForRead( pfnClientWorker
, sizeof(PFNCLIENTWORKER
), 1);
215 RtlCopyMemory(&gpsi
->apfnClientA
, pfnClientA
, sizeof(PFNCLIENT
));
216 RtlCopyMemory(&gpsi
->apfnClientW
, pfnClientW
, sizeof(PFNCLIENT
));
217 RtlCopyMemory(&gpsi
->apfnClientWorker
, pfnClientWorker
, sizeof(PFNCLIENTWORKER
));
219 //// FIXME: HAX! Temporary until server side is finished.
220 //// Copy the client side procs for now.
221 RtlCopyMemory(&gpsi
->aStoCidPfn
, pfnClientW
, sizeof(gpsi
->aStoCidPfn
));
223 hModClient
= hmodUser
;
224 ClientPfnInit
= TRUE
;
226 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER
)
228 Status
=_SEH2_GetExceptionCode();
232 if (!NT_SUCCESS(Status
))
234 ERR("Failed reading Client Pfns from user space.\n");
235 SetLastNtError(Status
);
265 NtUserMNDragLeave(VOID
)
285 NtUserModifyUserStartupInfoFlags(
296 NtUserNotifyIMEStatus(
308 NtUserQueryUserCounters(
322 NtUserRegisterTasklist(
332 NtUserSetConsoleReserveKeys(
382 IN CONST INT
*lpaElements
,
383 IN CONST COLORREF
*lpaRgbValues
,
391 /* We need this check to prevent overflow later */
392 if ((ULONG
)cElements
>= 0x40000000)
394 EngSetLastError(ERROR_NOACCESS
);
398 UserEnterExclusive();
402 ProbeForRead(lpaElements
, cElements
* sizeof(INT
), 1);
403 ProbeForRead(lpaRgbValues
, cElements
* sizeof(COLORREF
), 1);
405 IntSetSysColors(cElements
, lpaElements
, lpaRgbValues
);
407 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER
)
409 SetLastNtError(_SEH2_GetExceptionCode());
416 UserSendNotifyMessage(HWND_BROADCAST
, WM_SYSCOLORCHANGE
, 0, 0);
427 NtUserUpdateInputContext(
439 NtUserUpdateInstance(
451 NtUserUserHandleGrantAccess(
452 IN HANDLE hUserHandle
,
463 NtUserWaitForMsgAndEvent(
473 NtUserWin32PoolAllocationStats(
488 NtUserYieldTask(VOID
)
498 NtUserCheckImeHotKey(
508 NtUserConsoleControl(
509 IN CONSOLECONTROL ConsoleCtrl
,
510 IN PVOID ConsoleCtrlInfo
,
511 IN ULONG ConsoleCtrlInfoLength
)
513 NTSTATUS Status
= STATUS_SUCCESS
;
515 /* Allow only Console Server to perform this operation (via CSRSS) */
516 if (gpepCSRSS
!= PsGetCurrentProcess())
517 return STATUS_ACCESS_DENIED
;
519 UserEnterExclusive();
523 case GuiConsoleWndClassAtom
:
525 if (ConsoleCtrlInfoLength
!= sizeof(ATOM
))
527 Status
= STATUS_INFO_LENGTH_MISMATCH
;
533 ProbeForRead(ConsoleCtrlInfo
, ConsoleCtrlInfoLength
, 1);
534 gaGuiConsoleWndClass
= *(ATOM
*)ConsoleCtrlInfo
;
536 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER
)
538 Status
= _SEH2_GetExceptionCode();
545 case ConsoleMakePalettePublic
:
549 if (ConsoleCtrlInfoLength
!= sizeof(HPALETTE
))
551 Status
= STATUS_INFO_LENGTH_MISMATCH
;
557 ProbeForRead(ConsoleCtrlInfo
, ConsoleCtrlInfoLength
, 1);
558 hPalette
= *(HPALETTE
*)ConsoleCtrlInfo
;
560 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER
)
562 Status
= _SEH2_GetExceptionCode();
566 /* Make the palette handle public */
567 GreSetObjectOwnerEx(hPalette
,
569 GDIOBJFLAG_IGNOREPID
);
574 case ConsoleAcquireDisplayOwnership
:
576 ERR("NtUserConsoleControl - ConsoleAcquireDisplayOwnership is UNIMPLEMENTED\n");
577 Status
= STATUS_NOT_IMPLEMENTED
;
582 ERR("Calling invalid control %lu in NtUserConsoleControl\n", ConsoleCtrl
);
583 Status
= STATUS_INVALID_INFO_CLASS
;
594 NtUserCreateInputContext(
603 NtUserDestroyInputContext(
612 NtUserDisableThreadIme(
621 NtUserGetAppImeLevel(
640 NtUserGetRawInputBuffer(
651 NtUserGetRawInputData(
664 NtUserGetRawInputDeviceInfo(
677 NtUserGetRawInputDeviceList(
678 PRAWINPUTDEVICELIST pRawInputDeviceList
,
688 NtUserGetRegisteredRawInputDevices(
689 PRAWINPUTDEVICE pRawInputDevices
,
699 NtUserHardErrorControl(
710 NtUserNotifyProcessCreate(
712 HANDLE SourceThreadId
,
722 NtUserProcessConnect(
724 PUSERCONNECT pUserConnect
,
727 NTSTATUS Status
= STATUS_SUCCESS
;
728 TRACE("NtUserProcessConnect\n");
729 if (pUserConnect
&& ( Size
== sizeof(USERCONNECT
) ))
731 PPROCESSINFO W32Process
;
734 W32Process
= PsGetCurrentProcessWin32Process();
737 pUserConnect
->siClient
.psi
= gpsi
;
738 pUserConnect
->siClient
.aheList
= gHandleTable
;
739 pUserConnect
->siClient
.ulSharedDelta
= (ULONG_PTR
)W32Process
->HeapMappings
.KernelMapping
-
740 (ULONG_PTR
)W32Process
->HeapMappings
.UserMapping
;
742 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER
)
744 Status
= _SEH2_GetExceptionCode();
747 if (!NT_SUCCESS(Status
))
749 SetLastNtError(Status
);
754 return STATUS_UNSUCCESSFUL
;
759 NtUserQueryInformationThread(
772 NtUserQueryInputContext(
782 NtUserRealInternalGetMessage(
796 NtUserRealWaitMessageEx(
806 NtUserRegisterRawInputDevices(
807 IN PCRAWINPUTDEVICE pRawInputDevices
,
808 IN UINT uiNumDevices
,
817 NtUserResolveDesktop(
829 NtUserSetAppImeLevel(
848 NtUserSetInformationProcess(
860 NtUserSetInformationThread(IN HANDLE ThreadHandle
,
861 IN USERTHREADINFOCLASS ThreadInformationClass
,
862 IN PVOID ThreadInformation
,
863 IN ULONG ThreadInformationLength
)
866 if (ThreadInformationClass
== UserThreadInitiateShutdown
)
868 ERR("Shutdown initiated\n");
870 else if (ThreadInformationClass
== UserThreadEndShutdown
)
872 ERR("Shutdown ended\n");
879 return STATUS_SUCCESS
;
884 NtUserSetThreadLayoutHandles(
894 NtUserSoundSentry(VOID
)
902 NtUserTestForInteractiveUser(
909 /* http://www.cyber-ta.org/releases/malware-analysis/public/SOURCES/b47155634ccb2c30630da7e3666d3d07/b47155634ccb2c30630da7e3666d3d07.trace.html#NtUserGetIconSize */
951 NtUserRemoteRedrawRectangle(
963 NtUserRemoteRedrawScreen(VOID
)
971 NtUserRemoteStopScreenUpdates(VOID
)
979 NtUserCtxDisplayIOCtl(
993 NtUserDrawMenuBarTemp(
1000 /* We'll use this function just for caching the menu bar */
1006 * FillWindow: Called from User; Dialog, Edit and ListBox procs during a WM_ERASEBKGND.
1012 NtUserFillWindow(HWND hWndPaint
,
1026 NtUserLockWindowUpdate(HWND hWnd
)
1037 NtUserSetImeOwnerWindow(DWORD Unknown0
,
1047 NtUserGetLayeredWindowAttributes(
1061 NtUserSetLayeredWindowAttributes(HWND hwnd
,
1075 NtUserUpdateLayeredWindow(
1083 BLENDFUNCTION
*pblend
,
1096 NtUserWindowFromPhysicalPoint(POINT Point
)
1104 * NtUserResolveDesktopForWOW
1111 NtUserResolveDesktopForWOW(DWORD Unknown0
)
1131 /* NOTE: unused function */
1133 NtUserTrackPopupMenuEx(
1147 NtUserQuerySendMessage(DWORD Unknown0
)
1158 NtUserAlterWindowStyle(DWORD Unknown0
,
1168 * NtUserSetWindowStationUser
1175 NtUserSetWindowStationUser(
1186 BOOL APIENTRY
NtUserAddClipboardFormatListener(
1194 BOOL APIENTRY
NtUserRemoveClipboardFormatListener(
1202 BOOL APIENTRY
NtUserGetUpdatedClipboardFormats(
1217 NtUserSetSystemCursor(