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(
40 // Works like BitBlt, http://msdn.microsoft.com/en-us/library/ms532278(VS.85).aspx
57 Ret
= NtGdiBitBlt( hdc
,
87 NtUserConvertMemHandle(
98 NtUserCreateLocalMemHandle(
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(
177 NtUserEnumDisplayDevices (
178 PUNICODE_STRING lpDevice
, /* device name */
179 DWORD iDevNum
, /* display device */
180 PDISPLAY_DEVICEW lpDisplayDevice
, /* device information */
181 DWORD dwFlags
) /* reserved */
183 DPRINT1("NtUserEnumDisplayDevices() is UNIMPLEMENTED!\n");
184 if (lpDevice
->Length
== 0 && iDevNum
> 0)
186 /* Only one display device present */
189 else if (lpDevice
->Length
!= 0)
191 /* Can't enumerate monitors :( */
194 if (lpDisplayDevice
->cb
< sizeof(DISPLAY_DEVICE
))
197 wcscpy(lpDisplayDevice
->DeviceName
, L
"\\\\.\\DISPLAY1");
198 wcscpy(lpDisplayDevice
->DeviceString
, L
"<Unknown>");
199 lpDisplayDevice
->StateFlags
= DISPLAY_DEVICE_ATTACHED_TO_DESKTOP
200 | DISPLAY_DEVICE_MODESPRUNED
201 | DISPLAY_DEVICE_PRIMARY_DEVICE
202 | DISPLAY_DEVICE_VGA_COMPATIBLE
;
203 lpDisplayDevice
->DeviceID
[0] = L
'0';
204 lpDisplayDevice
->DeviceKey
[0] = L
'0';
220 NtUserExcludeUpdateRgn(
246 NtUserGetControlBrush(
258 * Called from PaintRect, works almost like wine PaintRect16 but returns hBrush.
262 NtUserGetControlColor(
266 UINT CtlMsg
) // Wine PaintRect: WM_CTLCOLORMSGBOX + hbrush
289 NtUserGetMouseMovePointsEx(
291 LPMOUSEMOVEPOINT lppt
,
292 LPMOUSEMOVEPOINT lpptBuf
,
296 UserEnterExclusive();
298 if ((cbSize
!= sizeof(MOUSEMOVEPOINT
)) || (nBufPoints
< 0) || (nBufPoints
> 64))
301 SetLastWin32Error(ERROR_INVALID_PARAMETER
);
307 ProbeForRead(lppt
, cbSize
, 1);
308 ProbeForWrite(lpptBuf
, cbSize
, 1);
310 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER
)
312 SetLastNtError(_SEH2_GetExceptionCode());
313 SetLastWin32Error(ERROR_NOACCESS
);
318 Call a subfunction of GetMouseMovePointsEx!
321 case GMMP_USE_DISPLAY_POINTS:
322 case GMMP_USE_HIGH_RESOLUTION_POINTS:
325 SetLastWin32Error(GMMP_ERR_POINT_NOT_FOUND);
326 return GMMP_ERR_POINT_NOT_FOUND;
338 NtUserImpersonateDdeClientWindow(
349 NtUserInitializeClientPfnArrays(
350 PPFNCLIENT pfnClientA
,
351 PPFNCLIENT pfnClientW
,
352 PPFNCLIENTWORKER pfnClientWorker
,
355 NTSTATUS Status
= STATUS_SUCCESS
;
356 DPRINT("Enter NtUserInitializeClientPfnArrays User32 0x%x\n",hmodUser
);
358 if (ClientPfnInit
) return Status
;
360 UserEnterExclusive();
364 ProbeForRead( pfnClientA
, sizeof(PFNCLIENT
), 1);
365 ProbeForRead( pfnClientW
, sizeof(PFNCLIENT
), 1);
366 ProbeForRead( pfnClientWorker
, sizeof(PFNCLIENTWORKER
), 1);
367 RtlCopyMemory(&gpsi
->apfnClientA
, pfnClientA
, sizeof(PFNCLIENT
));
368 RtlCopyMemory(&gpsi
->apfnClientW
, pfnClientW
, sizeof(PFNCLIENT
));
369 RtlCopyMemory(&gpsi
->apfnClientWorker
, pfnClientWorker
, sizeof(PFNCLIENTWORKER
));
371 hModClient
= hmodUser
;
372 ClientPfnInit
= TRUE
;
374 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER
)
376 Status
=_SEH2_GetExceptionCode();
380 if (!NT_SUCCESS(Status
))
382 DPRINT1("Failed reading Client Pfns from user space.\n");
383 SetLastNtError(Status
);
413 NtUserLockWorkStation(VOID
)
422 NtUserMNDragLeave(VOID
)
442 NtUserModifyUserStartupInfoFlags(
453 NtUserNotifyIMEStatus(
465 NtUserQueryUserCounters(
480 NtUserRegisterTasklist(
504 NtUserSetConsoleReserveKeys(
554 IN CONST INT
*lpaElements
,
555 IN CONST COLORREF
*lpaRgbValues
,
559 NTSTATUS Status
= STATUS_SUCCESS
;
560 UserEnterExclusive();
563 ProbeForRead(lpaElements
,
566 ProbeForRead(lpaRgbValues
,
569 // Developers: We are thread locked and calling gdi.
570 Ret
= IntSetSysColors(cElements
, (INT
*)lpaElements
, (COLORREF
*)lpaRgbValues
);
572 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER
)
574 Status
= _SEH2_GetExceptionCode();
577 if (!NT_SUCCESS(Status
))
579 SetLastNtError(Status
);
584 UserPostMessage(HWND_BROADCAST
, WM_SYSCOLORCHANGE
, 0, 0);
592 NtUserSetThreadState(
603 NtUserTrackMouseEvent(
604 LPTRACKMOUSEEVENT lpEventTrack
)
614 NtUserUpdateInputContext(
626 NtUserUpdateInstance(
638 NtUserUserHandleGrantAccess(
639 IN HANDLE hUserHandle
,
650 NtUserWaitForMsgAndEvent(
660 NtUserWin32PoolAllocationStats(
675 NtUserYieldTask(VOID
)
685 NtUserCheckImeHotKey(
695 NtUserConsoleControl(
706 NtUserCreateInputContext(
715 NtUserDestroyInputContext(
724 NtUserDisableThreadIme(
733 NtUserGetAppImeLevel(
762 NtUserGetRawInputBuffer(
773 NtUserGetRawInputData(
786 NtUserGetRawInputDeviceInfo(
799 NtUserGetRawInputDeviceList(
800 PRAWINPUTDEVICELIST pRawInputDeviceList
,
810 NtUserGetRegisteredRawInputDevices(
811 PRAWINPUTDEVICE pRawInputDevices
,
821 NtUserHardErrorControl(
834 UINT cmd
, // Wine SW_ commands
843 NtUserNotifyProcessCreate(
866 NtUserProcessConnect(
868 PUSERCONNECT pUserConnect
,
871 NTSTATUS Status
= STATUS_SUCCESS
;
872 DPRINT("NtUserProcessConnect\n");
873 if (pUserConnect
&& ( Size
== sizeof(USERCONNECT
) ))
877 PPROCESSINFO W32Process
= PsGetCurrentProcessWin32Process();
880 pUserConnect
->siClient
.psi
= gpsi
;
881 pUserConnect
->siClient
.aheList
= gHandleTable
;
882 pUserConnect
->siClient
.ulSharedDelta
= (ULONG_PTR
)W32Process
->HeapMappings
.KernelMapping
-
883 (ULONG_PTR
)W32Process
->HeapMappings
.UserMapping
;
885 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER
)
887 Status
= _SEH2_GetExceptionCode();
890 if (!NT_SUCCESS(Status
))
892 SetLastNtError(Status
);
897 return STATUS_UNSUCCESSFUL
;
902 NtUserQueryInformationThread(
915 NtUserQueryInputContext(
925 NtUserRealInternalGetMessage(
939 NtUserRealWaitMessageEx(
949 NtUserRegisterUserApiHook(
959 NtUserRegisterRawInputDevices(
960 IN PCRAWINPUTDEVICE pRawInputDevices
,
961 IN UINT uiNumDevices
,
970 NtUserResolveDesktop(
982 NtUserSetAppImeLevel(
1001 NtUserSetInformationProcess(
1013 NtUserSetInformationThread(
1025 NtUserSetThreadLayoutHandles(
1035 NtUserSoundSentry(VOID
)
1043 NtUserTestForInteractiveUser(
1050 /* http://www.cyber-ta.org/releases/malware-analysis/public/SOURCES/b47155634ccb2c30630da7e3666d3d07/b47155634ccb2c30630da7e3666d3d07.trace.html#NtUserGetIconSize */
1080 NtUserUnregisterUserApiHook(VOID
)
1088 NtUserGetLayeredWindowAttributes(
1098 /* ValidateRect gets redirected to NtUserValidateRect:
1099 http://blog.csdn.net/ntdll/archive/2005/10/19/509299.aspx */
1112 NtUserValidateTimerCallback(
1118 PWINDOW_OBJECT Window
= NULL
;
1124 Window
= UserGetWindowObject(hWnd
);
1125 if (!Window
|| !Window
->Wnd
)
1129 Ret
= ValidateTimerCallback(PsGetCurrentThreadWin32Thread(), Window
, wParam
, lParam
);
1138 NtUserRemoteConnect(
1149 NtUserRemoteRedrawRectangle(
1161 NtUserRemoteRedrawScreen(VOID
)
1169 NtUserRemoteStopScreenUpdates(VOID
)
1177 NtUserCtxDisplayIOCtl(