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(IN HANDLE ThreadHandle
,
760 IN USERTHREADINFOCLASS ThreadInformationClass
,
761 OUT PVOID ThreadInformation
,
762 IN ULONG ThreadInformationLength
)
765 return STATUS_SUCCESS
;
770 NtUserQueryInputContext(
780 NtUserRealInternalGetMessage(
794 NtUserRealWaitMessageEx(
804 NtUserRegisterRawInputDevices(
805 IN PCRAWINPUTDEVICE pRawInputDevices
,
806 IN UINT uiNumDevices
,
815 NtUserResolveDesktop(
827 NtUserSetAppImeLevel(
846 NtUserSetInformationProcess(
858 NtUserSetInformationThread(IN HANDLE ThreadHandle
,
859 IN USERTHREADINFOCLASS ThreadInformationClass
,
860 IN PVOID ThreadInformation
,
861 IN ULONG ThreadInformationLength
)
864 if (ThreadInformationClass
== UserThreadInitiateShutdown
)
866 ERR("Shutdown initiated\n");
868 else if (ThreadInformationClass
== UserThreadEndShutdown
)
870 ERR("Shutdown ended\n");
877 return STATUS_SUCCESS
;
882 NtUserSetThreadLayoutHandles(
892 NtUserSoundSentry(VOID
)
900 NtUserTestForInteractiveUser(
907 /* http://www.cyber-ta.org/releases/malware-analysis/public/SOURCES/b47155634ccb2c30630da7e3666d3d07/b47155634ccb2c30630da7e3666d3d07.trace.html#NtUserGetIconSize */
949 NtUserRemoteRedrawRectangle(
961 NtUserRemoteRedrawScreen(VOID
)
969 NtUserRemoteStopScreenUpdates(VOID
)
977 NtUserCtxDisplayIOCtl(
991 NtUserDrawMenuBarTemp(
998 /* We'll use this function just for caching the menu bar */
1004 * FillWindow: Called from User; Dialog, Edit and ListBox procs during a WM_ERASEBKGND.
1010 NtUserFillWindow(HWND hWndPaint
,
1024 NtUserLockWindowUpdate(HWND hWnd
)
1035 NtUserSetImeOwnerWindow(DWORD Unknown0
,
1045 NtUserGetLayeredWindowAttributes(
1059 NtUserSetLayeredWindowAttributes(HWND hwnd
,
1073 NtUserUpdateLayeredWindow(
1081 BLENDFUNCTION
*pblend
,
1091 * NtUserResolveDesktopForWOW
1098 NtUserResolveDesktopForWOW(DWORD Unknown0
)
1118 /* NOTE: unused function */
1120 NtUserTrackPopupMenuEx(
1134 NtUserQuerySendMessage(DWORD Unknown0
)
1145 NtUserAlterWindowStyle(DWORD Unknown0
,
1155 * NtUserSetWindowStationUser
1162 NtUserSetWindowStationUser(
1173 BOOL APIENTRY
NtUserAddClipboardFormatListener(
1181 BOOL APIENTRY
NtUserRemoveClipboardFormatListener(
1189 BOOL APIENTRY
NtUserGetUpdatedClipboardFormats(
1204 NtUserSetSystemCursor(