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 PETHREAD Thread
, ThreadTo
;
33 PTHREADINFO pti
, ptiTo
;
37 Status
= PsLookupThreadByThreadId((HANDLE
)idAttach
, &Thread
);
38 if (!NT_SUCCESS(Status
))
40 EngSetLastError(ERROR_INVALID_PARAMETER
);
43 Status
= PsLookupThreadByThreadId((HANDLE
)idAttachTo
, &ThreadTo
);
44 if (!NT_SUCCESS(Status
))
46 EngSetLastError(ERROR_INVALID_PARAMETER
);
47 ObDereferenceObject(Thread
);
51 pti
= PsGetThreadWin32Thread(Thread
);
52 ptiTo
= PsGetThreadWin32Thread(ThreadTo
);
53 ObDereferenceObject(Thread
);
54 ObDereferenceObject(ThreadTo
);
56 Ret
= UserAttachThreadInput( pti
, ptiTo
, fAttach
);
64 // Works like BitBlt, http://msdn.microsoft.com/en-us/library/ms532278(VS.85).aspx
81 Ret
= NtGdiBitBlt( hdc
,
111 NtUserDdeGetQualityOfService(
114 OUT PSECURITY_QUALITY_OF_SERVICE pqosPrev
)
137 NtUserDdeSetQualityOfService(
139 IN PSECURITY_QUALITY_OF_SERVICE pqosNew
,
140 OUT PSECURITY_QUALITY_OF_SERVICE pqosPrev
)
164 NtUserDrawAnimatedRects(
187 NtUserExcludeUpdateRgn(
226 NtUserImpersonateDdeClientWindow(
237 NtUserInitializeClientPfnArrays(
238 PPFNCLIENT pfnClientA
,
239 PPFNCLIENT pfnClientW
,
240 PPFNCLIENTWORKER pfnClientWorker
,
243 NTSTATUS Status
= STATUS_SUCCESS
;
244 TRACE("Enter NtUserInitializeClientPfnArrays User32 0x%x\n",hmodUser
);
246 if (ClientPfnInit
) return Status
;
248 UserEnterExclusive();
252 ProbeForRead( pfnClientA
, sizeof(PFNCLIENT
), 1);
253 ProbeForRead( pfnClientW
, sizeof(PFNCLIENT
), 1);
254 ProbeForRead( pfnClientWorker
, sizeof(PFNCLIENTWORKER
), 1);
255 RtlCopyMemory(&gpsi
->apfnClientA
, pfnClientA
, sizeof(PFNCLIENT
));
256 RtlCopyMemory(&gpsi
->apfnClientW
, pfnClientW
, sizeof(PFNCLIENT
));
257 RtlCopyMemory(&gpsi
->apfnClientWorker
, pfnClientWorker
, sizeof(PFNCLIENTWORKER
));
259 //// FIXME: HAX! Temporary until server side is finished.
260 //// Copy the client side procs for now.
261 RtlCopyMemory(&gpsi
->aStoCidPfn
, pfnClientW
, sizeof(gpsi
->aStoCidPfn
));
263 hModClient
= hmodUser
;
264 ClientPfnInit
= TRUE
;
266 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER
)
268 Status
=_SEH2_GetExceptionCode();
272 if (!NT_SUCCESS(Status
))
274 ERR("Failed reading Client Pfns from user space.\n");
275 SetLastNtError(Status
);
305 NtUserLockWorkStation(VOID
)
314 NtUserMNDragLeave(VOID
)
334 NtUserModifyUserStartupInfoFlags(
345 NtUserNotifyIMEStatus(
357 NtUserQueryUserCounters(
371 NtUserRegisterTasklist(
381 NtUserSetConsoleReserveKeys(
431 IN CONST INT
*lpaElements
,
432 IN CONST COLORREF
*lpaRgbValues
,
440 /* We need this check to prevent overflow later */
441 if ((ULONG
)cElements
>= 0x40000000)
443 EngSetLastError(ERROR_NOACCESS
);
447 UserEnterExclusive();
451 ProbeForRead(lpaElements
, cElements
* sizeof(INT
), 1);
452 ProbeForRead(lpaRgbValues
, cElements
* sizeof(COLORREF
), 1);
454 IntSetSysColors(cElements
, lpaElements
, lpaRgbValues
);
456 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER
)
458 SetLastNtError(_SEH2_GetExceptionCode());
465 UserSendNotifyMessage(HWND_BROADCAST
, WM_SYSCOLORCHANGE
, 0, 0);
476 NtUserUpdateInputContext(
488 NtUserUpdateInstance(
500 NtUserUserHandleGrantAccess(
501 IN HANDLE hUserHandle
,
512 NtUserWaitForMsgAndEvent(
522 NtUserWin32PoolAllocationStats(
537 NtUserYieldTask(VOID
)
547 NtUserCheckImeHotKey(
557 NtUserConsoleControl(
568 NtUserCreateInputContext(
577 NtUserDestroyInputContext(
586 NtUserDisableThreadIme(
595 NtUserGetAppImeLevel(
614 NtUserGetRawInputBuffer(
625 NtUserGetRawInputData(
638 NtUserGetRawInputDeviceInfo(
651 NtUserGetRawInputDeviceList(
652 PRAWINPUTDEVICELIST pRawInputDeviceList
,
662 NtUserGetRegisteredRawInputDevices(
663 PRAWINPUTDEVICE pRawInputDevices
,
673 NtUserHardErrorControl(
684 NtUserNotifyProcessCreate(
696 NtUserProcessConnect(
698 PUSERCONNECT pUserConnect
,
701 NTSTATUS Status
= STATUS_SUCCESS
;
702 TRACE("NtUserProcessConnect\n");
703 if (pUserConnect
&& ( Size
== sizeof(USERCONNECT
) ))
705 PPROCESSINFO W32Process
;
708 W32Process
= PsGetCurrentProcessWin32Process();
711 pUserConnect
->siClient
.psi
= gpsi
;
712 pUserConnect
->siClient
.aheList
= gHandleTable
;
713 pUserConnect
->siClient
.ulSharedDelta
= (ULONG_PTR
)W32Process
->HeapMappings
.KernelMapping
-
714 (ULONG_PTR
)W32Process
->HeapMappings
.UserMapping
;
716 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER
)
718 Status
= _SEH2_GetExceptionCode();
721 if (!NT_SUCCESS(Status
))
723 SetLastNtError(Status
);
728 return STATUS_UNSUCCESSFUL
;
733 NtUserQueryInformationThread(
746 NtUserQueryInputContext(
756 NtUserRealInternalGetMessage(
770 NtUserRealWaitMessageEx(
780 NtUserRegisterRawInputDevices(
781 IN PCRAWINPUTDEVICE pRawInputDevices
,
782 IN UINT uiNumDevices
,
791 NtUserResolveDesktop(
803 NtUserSetAppImeLevel(
822 NtUserSetInformationProcess(
834 NtUserSetInformationThread(IN HANDLE ThreadHandle
,
835 IN USERTHREADINFOCLASS ThreadInformationClass
,
836 IN PVOID ThreadInformation
,
837 IN ULONG ThreadInformationLength
)
840 if (ThreadInformationClass
== UserThreadInitiateShutdown
)
842 ERR("Shutdown initiated\n");
844 else if (ThreadInformationClass
== UserThreadEndShutdown
)
846 ERR("Shutdown ended\n");
853 return STATUS_SUCCESS
;
858 NtUserSetThreadLayoutHandles(
868 NtUserSoundSentry(VOID
)
876 NtUserTestForInteractiveUser(
883 /* http://www.cyber-ta.org/releases/malware-analysis/public/SOURCES/b47155634ccb2c30630da7e3666d3d07/b47155634ccb2c30630da7e3666d3d07.trace.html#NtUserGetIconSize */
913 NtUserGetLayeredWindowAttributes(
936 NtUserRemoteRedrawRectangle(
948 NtUserRemoteRedrawScreen(VOID
)
956 NtUserRemoteStopScreenUpdates(VOID
)
964 NtUserCtxDisplayIOCtl(
978 NtUserDrawMenuBarTemp(
985 /* We'll use this function just for caching the menu bar */
991 * FillWindow: Called from User; Dialog, Edit and ListBox procs during a WM_ERASEBKGND.
997 NtUserFillWindow(HWND hWndPaint
,
1011 NtUserLockWindowUpdate(HWND hWnd
)
1022 NtUserRealChildWindowFromPoint(HWND Parent
,
1035 NtUserSetImeOwnerWindow(DWORD Unknown0
,
1047 NtUserSetLayeredWindowAttributes(HWND hwnd
,
1061 NtUserUpdateLayeredWindow(
1069 BLENDFUNCTION
*pblend
,
1082 NtUserWindowFromPhysicalPoint(POINT Point
)
1090 * NtUserResolveDesktopForWOW
1097 NtUserResolveDesktopForWOW(DWORD Unknown0
)
1117 /* NOTE: unused function */
1119 NtUserTrackPopupMenuEx(
1133 NtUserQuerySendMessage(DWORD Unknown0
)
1144 NtUserAlterWindowStyle(DWORD Unknown0
,
1154 * NtUserSetWindowStationUser
1161 NtUserSetWindowStationUser(
1172 BOOL APIENTRY
NtUserAddClipboardFormatListener(
1180 BOOL APIENTRY
NtUserRemoveClipboardFormatListener(
1188 BOOL APIENTRY
NtUserGetUpdatedClipboardFormats(
1203 NtUserGetCursorFrameInfo(
1206 PDWORD rate_jiffies
,
1219 NtUserSetSystemCursor(