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 ULONG 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
:
563 if (ConsoleCtrlInfoLength
!= sizeof(ATOM
))
565 Status
= STATUS_INFO_LENGTH_MISMATCH
;
571 ProbeForRead(ConsoleCtrlInfo
, ConsoleCtrlInfoLength
, 1);
572 gaGuiConsoleWndClass
= *(ATOM
*)ConsoleCtrlInfo
;
574 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER
)
576 Status
= _SEH2_GetExceptionCode();
583 case ConsoleMakePalettePublic
:
587 if (ConsoleCtrlInfoLength
!= sizeof(HPALETTE
))
589 Status
= STATUS_INFO_LENGTH_MISMATCH
;
595 ProbeForRead(ConsoleCtrlInfo
, ConsoleCtrlInfoLength
, 1);
596 hPalette
= *(HPALETTE
*)ConsoleCtrlInfo
;
598 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER
)
600 Status
= _SEH2_GetExceptionCode();
604 /* Make the palette handle public */
605 GreSetObjectOwnerEx(hPalette
,
607 GDIOBJFLAG_IGNOREPID
);
612 case ConsoleAcquireDisplayOwnership
:
614 ERR("NtUserConsoleControl - ConsoleAcquireDisplayOwnership is UNIMPLEMENTED\n");
615 Status
= STATUS_NOT_IMPLEMENTED
;
620 ERR("Calling invalid control %lu in NtUserConsoleControl\n", ConsoleCtrl
);
621 Status
= STATUS_INVALID_INFO_CLASS
;
632 NtUserCreateInputContext(
641 NtUserDestroyInputContext(
650 NtUserDisableThreadIme(
659 NtUserGetAppImeLevel(
678 NtUserGetRawInputBuffer(
689 NtUserGetRawInputData(
702 NtUserGetRawInputDeviceInfo(
715 NtUserGetRawInputDeviceList(
716 PRAWINPUTDEVICELIST pRawInputDeviceList
,
726 NtUserGetRegisteredRawInputDevices(
727 PRAWINPUTDEVICE pRawInputDevices
,
737 NtUserHardErrorControl(
748 NtUserNotifyProcessCreate(
750 HANDLE SourceThreadId
,
760 NtUserProcessConnect(
762 PUSERCONNECT pUserConnect
,
765 NTSTATUS Status
= STATUS_SUCCESS
;
766 TRACE("NtUserProcessConnect\n");
767 if (pUserConnect
&& ( Size
== sizeof(USERCONNECT
) ))
769 PPROCESSINFO W32Process
;
772 W32Process
= PsGetCurrentProcessWin32Process();
775 pUserConnect
->siClient
.psi
= gpsi
;
776 pUserConnect
->siClient
.aheList
= gHandleTable
;
777 pUserConnect
->siClient
.ulSharedDelta
= (ULONG_PTR
)W32Process
->HeapMappings
.KernelMapping
-
778 (ULONG_PTR
)W32Process
->HeapMappings
.UserMapping
;
780 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER
)
782 Status
= _SEH2_GetExceptionCode();
785 if (!NT_SUCCESS(Status
))
787 SetLastNtError(Status
);
792 return STATUS_UNSUCCESSFUL
;
797 NtUserQueryInformationThread(
810 NtUserQueryInputContext(
820 NtUserRealInternalGetMessage(
834 NtUserRealWaitMessageEx(
844 NtUserRegisterRawInputDevices(
845 IN PCRAWINPUTDEVICE pRawInputDevices
,
846 IN UINT uiNumDevices
,
855 NtUserResolveDesktop(
867 NtUserSetAppImeLevel(
886 NtUserSetInformationProcess(
898 NtUserSetInformationThread(IN HANDLE ThreadHandle
,
899 IN USERTHREADINFOCLASS ThreadInformationClass
,
900 IN PVOID ThreadInformation
,
901 IN ULONG ThreadInformationLength
)
904 if (ThreadInformationClass
== UserThreadInitiateShutdown
)
906 ERR("Shutdown initiated\n");
908 else if (ThreadInformationClass
== UserThreadEndShutdown
)
910 ERR("Shutdown ended\n");
917 return STATUS_SUCCESS
;
922 NtUserSetThreadLayoutHandles(
932 NtUserSoundSentry(VOID
)
940 NtUserTestForInteractiveUser(
947 /* http://www.cyber-ta.org/releases/malware-analysis/public/SOURCES/b47155634ccb2c30630da7e3666d3d07/b47155634ccb2c30630da7e3666d3d07.trace.html#NtUserGetIconSize */
989 NtUserRemoteRedrawRectangle(
1001 NtUserRemoteRedrawScreen(VOID
)
1009 NtUserRemoteStopScreenUpdates(VOID
)
1017 NtUserCtxDisplayIOCtl(
1031 NtUserDrawMenuBarTemp(
1038 /* We'll use this function just for caching the menu bar */
1044 * FillWindow: Called from User; Dialog, Edit and ListBox procs during a WM_ERASEBKGND.
1050 NtUserFillWindow(HWND hWndPaint
,
1064 NtUserLockWindowUpdate(HWND hWnd
)
1075 NtUserSetImeOwnerWindow(DWORD Unknown0
,
1085 NtUserGetLayeredWindowAttributes(
1099 NtUserSetLayeredWindowAttributes(HWND hwnd
,
1113 NtUserUpdateLayeredWindow(
1121 BLENDFUNCTION
*pblend
,
1134 NtUserWindowFromPhysicalPoint(POINT Point
)
1142 * NtUserResolveDesktopForWOW
1149 NtUserResolveDesktopForWOW(DWORD Unknown0
)
1169 /* NOTE: unused function */
1171 NtUserTrackPopupMenuEx(
1185 NtUserQuerySendMessage(DWORD Unknown0
)
1196 NtUserAlterWindowStyle(DWORD Unknown0
,
1206 * NtUserSetWindowStationUser
1213 NtUserSetWindowStationUser(
1224 BOOL APIENTRY
NtUserAddClipboardFormatListener(
1232 BOOL APIENTRY
NtUserRemoveClipboardFormatListener(
1240 BOOL APIENTRY
NtUserGetUpdatedClipboardFormats(
1255 NtUserGetCursorFrameInfo(
1258 PDWORD rate_jiffies
,
1271 NtUserSetSystemCursor(