2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS kernel
4 * PURPOSE: Native User stubs
5 * FILE: subsys/win32k/ntuser/stubs.c
6 * PROGRAMER: Casper S. Hornstrup (chorns@users.sourceforge.net)
8 * 04-06-2001 CSH Created
17 NtUserAssociateInputContext(
29 NtUserAttachThreadInput(
35 PETHREAD Thread
, ThreadTo
;
36 PTHREADINFO pti
, ptiTo
;
40 Status
= PsLookupThreadByThreadId((HANDLE
)idAttach
, &Thread
);
41 if (!NT_SUCCESS(Status
))
43 SetLastWin32Error(ERROR_INVALID_PARAMETER
);
46 Status
= PsLookupThreadByThreadId((HANDLE
)idAttachTo
, &ThreadTo
);
47 if (!NT_SUCCESS(Status
))
49 SetLastWin32Error(ERROR_INVALID_PARAMETER
);
50 ObDereferenceObject(Thread
);
54 pti
= PsGetThreadWin32Thread(Thread
);
55 ptiTo
= PsGetThreadWin32Thread(ThreadTo
);
56 ObDereferenceObject(Thread
);
57 ObDereferenceObject(ThreadTo
);
59 Ret
= UserAttachThreadInput( pti
, ptiTo
, fAttach
);
67 // Works like BitBlt, http://msdn.microsoft.com/en-us/library/ms532278(VS.85).aspx
84 Ret
= NtGdiBitBlt( hdc
,
114 NtUserConvertMemHandle(
125 NtUserCreateLocalMemHandle(
138 NtUserDdeGetQualityOfService(
141 OUT PSECURITY_QUALITY_OF_SERVICE pqosPrev
)
164 NtUserDdeSetQualityOfService(
166 IN PSECURITY_QUALITY_OF_SERVICE pqosNew
,
167 OUT PSECURITY_QUALITY_OF_SERVICE pqosPrev
)
191 NtUserDrawAnimatedRects(
204 NtUserEnumDisplayDevices (
205 PUNICODE_STRING lpDevice
, /* device name */
206 DWORD iDevNum
, /* display device */
207 PDISPLAY_DEVICEW lpDisplayDevice
, /* device information */
208 DWORD dwFlags
) /* reserved */
210 DPRINT1("NtUserEnumDisplayDevices() is UNIMPLEMENTED!\n");
211 if (lpDevice
->Length
== 0 && iDevNum
> 0)
213 /* Only one display device present */
216 else if (lpDevice
->Length
!= 0)
218 /* Can't enumerate monitors :( */
221 if (lpDisplayDevice
->cb
< sizeof(DISPLAY_DEVICE
))
224 wcscpy(lpDisplayDevice
->DeviceName
, L
"\\\\.\\DISPLAY1");
225 wcscpy(lpDisplayDevice
->DeviceString
, L
"<Unknown>");
226 lpDisplayDevice
->StateFlags
= DISPLAY_DEVICE_ATTACHED_TO_DESKTOP
227 | DISPLAY_DEVICE_MODESPRUNED
228 | DISPLAY_DEVICE_PRIMARY_DEVICE
229 | DISPLAY_DEVICE_VGA_COMPATIBLE
;
230 lpDisplayDevice
->DeviceID
[0] = L
'0';
231 lpDisplayDevice
->DeviceKey
[0] = L
'0';
247 NtUserExcludeUpdateRgn(
273 NtUserGetControlBrush(
285 * Called from PaintRect, works almost like wine PaintRect16 but returns hBrush.
289 NtUserGetControlColor(
293 UINT CtlMsg
) // Wine PaintRect: WM_CTLCOLORMSGBOX + hbrush
316 NtUserGetMouseMovePointsEx(
318 LPMOUSEMOVEPOINT lppt
,
319 LPMOUSEMOVEPOINT lpptBuf
,
323 UserEnterExclusive();
325 if ((cbSize
!= sizeof(MOUSEMOVEPOINT
)) || (nBufPoints
< 0) || (nBufPoints
> 64))
328 SetLastWin32Error(ERROR_INVALID_PARAMETER
);
334 ProbeForRead(lppt
, cbSize
, 1);
335 ProbeForWrite(lpptBuf
, cbSize
, 1);
337 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER
)
339 SetLastNtError(_SEH2_GetExceptionCode());
340 SetLastWin32Error(ERROR_NOACCESS
);
345 Call a subfunction of GetMouseMovePointsEx!
348 case GMMP_USE_DISPLAY_POINTS:
349 case GMMP_USE_HIGH_RESOLUTION_POINTS:
352 SetLastWin32Error(GMMP_ERR_POINT_NOT_FOUND);
353 return GMMP_ERR_POINT_NOT_FOUND;
365 NtUserImpersonateDdeClientWindow(
376 NtUserInitializeClientPfnArrays(
377 PPFNCLIENT pfnClientA
,
378 PPFNCLIENT pfnClientW
,
379 PPFNCLIENTWORKER pfnClientWorker
,
382 NTSTATUS Status
= STATUS_SUCCESS
;
383 DPRINT("Enter NtUserInitializeClientPfnArrays User32 0x%x\n",hmodUser
);
385 if (ClientPfnInit
) return Status
;
387 UserEnterExclusive();
391 ProbeForRead( pfnClientA
, sizeof(PFNCLIENT
), 1);
392 ProbeForRead( pfnClientW
, sizeof(PFNCLIENT
), 1);
393 ProbeForRead( pfnClientWorker
, sizeof(PFNCLIENTWORKER
), 1);
394 RtlCopyMemory(&gpsi
->apfnClientA
, pfnClientA
, sizeof(PFNCLIENT
));
395 RtlCopyMemory(&gpsi
->apfnClientW
, pfnClientW
, sizeof(PFNCLIENT
));
396 RtlCopyMemory(&gpsi
->apfnClientWorker
, pfnClientWorker
, sizeof(PFNCLIENTWORKER
));
398 //// FIXME! HAX! Temporary until server side is finished.
399 //// Copy the client side procs for now.
400 RtlCopyMemory(&gpsi
->aStoCidPfn
, pfnClientW
, sizeof(gpsi
->aStoCidPfn
));
402 hModClient
= hmodUser
;
403 ClientPfnInit
= TRUE
;
405 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER
)
407 Status
=_SEH2_GetExceptionCode();
411 if (!NT_SUCCESS(Status
))
413 DPRINT1("Failed reading Client Pfns from user space.\n");
414 SetLastNtError(Status
);
444 NtUserLockWorkStation(VOID
)
453 NtUserMNDragLeave(VOID
)
473 NtUserModifyUserStartupInfoFlags(
484 NtUserNotifyIMEStatus(
496 NtUserQueryUserCounters(
511 NtUserRegisterTasklist(
535 NtUserSetConsoleReserveKeys(
585 IN CONST INT
*lpaElements
,
586 IN CONST COLORREF
*lpaRgbValues
,
590 NTSTATUS Status
= STATUS_SUCCESS
;
591 UserEnterExclusive();
594 ProbeForRead(lpaElements
,
597 ProbeForRead(lpaRgbValues
,
600 // Developers: We are thread locked and calling gdi.
601 Ret
= IntSetSysColors(cElements
, (INT
*)lpaElements
, (COLORREF
*)lpaRgbValues
);
603 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER
)
605 Status
= _SEH2_GetExceptionCode();
608 if (!NT_SUCCESS(Status
))
610 SetLastNtError(Status
);
615 UserPostMessage(HWND_BROADCAST
, WM_SYSCOLORCHANGE
, 0, 0);
623 NtUserSetThreadState(
634 NtUserTrackMouseEvent(
635 LPTRACKMOUSEEVENT lpEventTrack
)
645 NtUserUpdateInputContext(
657 NtUserUpdateInstance(
669 NtUserUserHandleGrantAccess(
670 IN HANDLE hUserHandle
,
681 NtUserWaitForMsgAndEvent(
691 NtUserWin32PoolAllocationStats(
706 NtUserYieldTask(VOID
)
716 NtUserCheckImeHotKey(
726 NtUserConsoleControl(
737 NtUserCreateInputContext(
746 NtUserDestroyInputContext(
755 NtUserDisableThreadIme(
764 NtUserGetAppImeLevel(
793 NtUserGetRawInputBuffer(
804 NtUserGetRawInputData(
817 NtUserGetRawInputDeviceInfo(
830 NtUserGetRawInputDeviceList(
831 PRAWINPUTDEVICELIST pRawInputDeviceList
,
841 NtUserGetRegisteredRawInputDevices(
842 PRAWINPUTDEVICE pRawInputDevices
,
852 NtUserHardErrorControl(
865 UINT cmd
, // Wine SW_ commands
874 NtUserNotifyProcessCreate(
897 NtUserProcessConnect(
899 PUSERCONNECT pUserConnect
,
902 NTSTATUS Status
= STATUS_SUCCESS
;
903 DPRINT("NtUserProcessConnect\n");
904 if (pUserConnect
&& ( Size
== sizeof(USERCONNECT
) ))
906 PPROCESSINFO W32Process
;
909 W32Process
= PsGetCurrentProcessWin32Process();
912 pUserConnect
->siClient
.psi
= gpsi
;
913 pUserConnect
->siClient
.aheList
= gHandleTable
;
914 pUserConnect
->siClient
.ulSharedDelta
= (ULONG_PTR
)W32Process
->HeapMappings
.KernelMapping
-
915 (ULONG_PTR
)W32Process
->HeapMappings
.UserMapping
;
917 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER
)
919 Status
= _SEH2_GetExceptionCode();
922 if (!NT_SUCCESS(Status
))
924 SetLastNtError(Status
);
929 return STATUS_UNSUCCESSFUL
;
934 NtUserQueryInformationThread(
947 NtUserQueryInputContext(
957 NtUserRealInternalGetMessage(
971 NtUserRealWaitMessageEx(
981 NtUserRegisterUserApiHook(
982 PUNICODE_STRING m_dllname1
,
983 PUNICODE_STRING m_funname1
,
987 UserEnterExclusive();
995 NtUserRegisterRawInputDevices(
996 IN PCRAWINPUTDEVICE pRawInputDevices
,
997 IN UINT uiNumDevices
,
1006 NtUserResolveDesktop(
1018 NtUserSetAppImeLevel(
1037 NtUserSetInformationProcess(
1049 NtUserSetInformationThread(
1061 NtUserSetThreadLayoutHandles(
1071 NtUserSoundSentry(VOID
)
1079 NtUserTestForInteractiveUser(
1086 /* http://www.cyber-ta.org/releases/malware-analysis/public/SOURCES/b47155634ccb2c30630da7e3666d3d07/b47155634ccb2c30630da7e3666d3d07.trace.html#NtUserGetIconSize */
1116 NtUserUnregisterUserApiHook(VOID
)
1124 NtUserGetLayeredWindowAttributes(
1134 /* ValidateRect gets redirected to NtUserValidateRect:
1135 http://blog.csdn.net/ntdll/archive/2005/10/19/509299.aspx */
1148 NtUserValidateTimerCallback(
1154 PWINDOW_OBJECT Window
= NULL
;
1160 Window
= UserGetWindowObject(hWnd
);
1161 if (!Window
|| !Window
->Wnd
)
1165 Ret
= ValidateTimerCallback(PsGetCurrentThreadWin32Thread(), Window
, wParam
, lParam
);
1174 NtUserRemoteConnect(
1185 NtUserRemoteRedrawRectangle(
1197 NtUserRemoteRedrawScreen(VOID
)
1205 NtUserRemoteStopScreenUpdates(VOID
)
1213 NtUserCtxDisplayIOCtl(