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
)
764 NTSTATUS Status
= STATUS_SUCCESS
;
767 /* Allow only CSRSS to perform this operation */
768 if (PsGetCurrentProcess() != gpepCSRSS
)
769 return STATUS_ACCESS_DENIED
;
771 UserEnterExclusive();
774 Status
= ObReferenceObjectByHandle(ThreadHandle
,
775 THREAD_QUERY_INFORMATION
,
780 if (!NT_SUCCESS(Status
)) goto Quit
;
782 switch (ThreadInformationClass
)
787 Status
= STATUS_NOT_IMPLEMENTED
;
792 ObDereferenceObject(Thread
);
801 NtUserQueryInputContext(
811 NtUserRealInternalGetMessage(
825 NtUserRealWaitMessageEx(
835 NtUserRegisterRawInputDevices(
836 IN PCRAWINPUTDEVICE pRawInputDevices
,
837 IN UINT uiNumDevices
,
846 NtUserResolveDesktop(
858 NtUserSetAppImeLevel(
877 NtUserSetInformationProcess(
889 NtUserSetInformationThread(IN HANDLE ThreadHandle
,
890 IN USERTHREADINFOCLASS ThreadInformationClass
,
891 IN PVOID ThreadInformation
,
892 IN ULONG ThreadInformationLength
)
894 NTSTATUS Status
= STATUS_SUCCESS
;
897 /* Allow only CSRSS to perform this operation */
898 if (PsGetCurrentProcess() != gpepCSRSS
)
899 return STATUS_ACCESS_DENIED
;
901 UserEnterExclusive();
904 Status
= ObReferenceObjectByHandle(ThreadHandle
,
905 THREAD_SET_INFORMATION
,
910 if (!NT_SUCCESS(Status
)) goto Quit
;
912 switch (ThreadInformationClass
)
914 case UserThreadInitiateShutdown
:
916 ERR("Shutdown initiated\n");
918 Status
= STATUS_NOT_IMPLEMENTED
;
922 case UserThreadEndShutdown
:
924 ERR("Shutdown ended\n");
926 Status
= STATUS_NOT_IMPLEMENTED
;
930 case UserThreadCsrApiPort
:
932 ERR("Set CSR API Port for Win32k\n");
934 Status
= STATUS_NOT_IMPLEMENTED
;
941 Status
= STATUS_NOT_IMPLEMENTED
;
946 ObDereferenceObject(Thread
);
955 NtUserSetThreadLayoutHandles(
965 NtUserSoundSentry(VOID
)
973 NtUserTestForInteractiveUser(
980 /* http://www.cyber-ta.org/releases/malware-analysis/public/SOURCES/b47155634ccb2c30630da7e3666d3d07/b47155634ccb2c30630da7e3666d3d07.trace.html#NtUserGetIconSize */
1011 NtUserRemoteConnect(
1022 NtUserRemoteRedrawRectangle(
1034 NtUserRemoteRedrawScreen(VOID
)
1042 NtUserRemoteStopScreenUpdates(VOID
)
1050 NtUserCtxDisplayIOCtl(
1064 NtUserDrawMenuBarTemp(
1071 /* We'll use this function just for caching the menu bar */
1077 * FillWindow: Called from User; Dialog, Edit and ListBox procs during a WM_ERASEBKGND.
1083 NtUserFillWindow(HWND hWndPaint
,
1097 NtUserLockWindowUpdate(HWND hWnd
)
1108 NtUserSetImeOwnerWindow(DWORD Unknown0
,
1118 NtUserGetLayeredWindowAttributes(
1132 NtUserSetLayeredWindowAttributes(HWND hwnd
,
1146 NtUserUpdateLayeredWindow(
1154 BLENDFUNCTION
*pblend
,
1164 * NtUserResolveDesktopForWOW
1171 NtUserResolveDesktopForWOW(DWORD Unknown0
)
1191 /* NOTE: unused function */
1193 NtUserTrackPopupMenuEx(
1207 NtUserQuerySendMessage(DWORD Unknown0
)
1218 NtUserAlterWindowStyle(DWORD Unknown0
,
1228 * NtUserSetWindowStationUser
1235 NtUserSetWindowStationUser(
1246 BOOL APIENTRY
NtUserAddClipboardFormatListener(
1254 BOOL APIENTRY
NtUserRemoveClipboardFormatListener(
1262 BOOL APIENTRY
NtUserGetUpdatedClipboardFormats(
1277 NtUserSetSystemCursor(