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 //// FIXME! HAX! Temporary until server side is finished.
372 //// Copy the client side procs for now.
373 RtlCopyMemory(&gpsi
->aStoCidPfn
, pfnClientW
, sizeof(gpsi
->aStoCidPfn
));
375 hModClient
= hmodUser
;
376 ClientPfnInit
= TRUE
;
378 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER
)
380 Status
=_SEH2_GetExceptionCode();
384 if (!NT_SUCCESS(Status
))
386 DPRINT1("Failed reading Client Pfns from user space.\n");
387 SetLastNtError(Status
);
417 NtUserLockWorkStation(VOID
)
426 NtUserMNDragLeave(VOID
)
446 NtUserModifyUserStartupInfoFlags(
457 NtUserNotifyIMEStatus(
469 NtUserQueryUserCounters(
484 NtUserRegisterTasklist(
508 NtUserSetConsoleReserveKeys(
558 IN CONST INT
*lpaElements
,
559 IN CONST COLORREF
*lpaRgbValues
,
563 NTSTATUS Status
= STATUS_SUCCESS
;
564 UserEnterExclusive();
567 ProbeForRead(lpaElements
,
570 ProbeForRead(lpaRgbValues
,
573 // Developers: We are thread locked and calling gdi.
574 Ret
= IntSetSysColors(cElements
, (INT
*)lpaElements
, (COLORREF
*)lpaRgbValues
);
576 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER
)
578 Status
= _SEH2_GetExceptionCode();
581 if (!NT_SUCCESS(Status
))
583 SetLastNtError(Status
);
588 UserPostMessage(HWND_BROADCAST
, WM_SYSCOLORCHANGE
, 0, 0);
596 NtUserSetThreadState(
607 NtUserTrackMouseEvent(
608 LPTRACKMOUSEEVENT lpEventTrack
)
618 NtUserUpdateInputContext(
630 NtUserUpdateInstance(
642 NtUserUserHandleGrantAccess(
643 IN HANDLE hUserHandle
,
654 NtUserWaitForMsgAndEvent(
664 NtUserWin32PoolAllocationStats(
679 NtUserYieldTask(VOID
)
689 NtUserCheckImeHotKey(
699 NtUserConsoleControl(
710 NtUserCreateInputContext(
719 NtUserDestroyInputContext(
728 NtUserDisableThreadIme(
737 NtUserGetAppImeLevel(
766 NtUserGetRawInputBuffer(
777 NtUserGetRawInputData(
790 NtUserGetRawInputDeviceInfo(
803 NtUserGetRawInputDeviceList(
804 PRAWINPUTDEVICELIST pRawInputDeviceList
,
814 NtUserGetRegisteredRawInputDevices(
815 PRAWINPUTDEVICE pRawInputDevices
,
825 NtUserHardErrorControl(
838 UINT cmd
, // Wine SW_ commands
847 NtUserNotifyProcessCreate(
870 NtUserProcessConnect(
872 PUSERCONNECT pUserConnect
,
875 NTSTATUS Status
= STATUS_SUCCESS
;
876 DPRINT("NtUserProcessConnect\n");
877 if (pUserConnect
&& ( Size
== sizeof(USERCONNECT
) ))
879 PPROCESSINFO W32Process
;
882 W32Process
= PsGetCurrentProcessWin32Process();
885 pUserConnect
->siClient
.psi
= gpsi
;
886 pUserConnect
->siClient
.aheList
= gHandleTable
;
887 pUserConnect
->siClient
.ulSharedDelta
= (ULONG_PTR
)W32Process
->HeapMappings
.KernelMapping
-
888 (ULONG_PTR
)W32Process
->HeapMappings
.UserMapping
;
890 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER
)
892 Status
= _SEH2_GetExceptionCode();
895 if (!NT_SUCCESS(Status
))
897 SetLastNtError(Status
);
902 return STATUS_UNSUCCESSFUL
;
907 NtUserQueryInformationThread(
920 NtUserQueryInputContext(
930 NtUserRealInternalGetMessage(
944 NtUserRealWaitMessageEx(
954 NtUserRegisterUserApiHook(
955 PUNICODE_STRING m_dllname1
,
956 PUNICODE_STRING m_funname1
,
960 UserEnterExclusive();
968 NtUserRegisterRawInputDevices(
969 IN PCRAWINPUTDEVICE pRawInputDevices
,
970 IN UINT uiNumDevices
,
979 NtUserResolveDesktop(
991 NtUserSetAppImeLevel(
1010 NtUserSetInformationProcess(
1022 NtUserSetInformationThread(
1034 NtUserSetThreadLayoutHandles(
1044 NtUserSoundSentry(VOID
)
1052 NtUserTestForInteractiveUser(
1059 /* http://www.cyber-ta.org/releases/malware-analysis/public/SOURCES/b47155634ccb2c30630da7e3666d3d07/b47155634ccb2c30630da7e3666d3d07.trace.html#NtUserGetIconSize */
1089 NtUserUnregisterUserApiHook(VOID
)
1097 NtUserGetLayeredWindowAttributes(
1107 /* ValidateRect gets redirected to NtUserValidateRect:
1108 http://blog.csdn.net/ntdll/archive/2005/10/19/509299.aspx */
1121 NtUserValidateTimerCallback(
1127 PWINDOW_OBJECT Window
= NULL
;
1133 Window
= UserGetWindowObject(hWnd
);
1134 if (!Window
|| !Window
->Wnd
)
1138 Ret
= ValidateTimerCallback(PsGetCurrentThreadWin32Thread(), Window
, wParam
, lParam
);
1147 NtUserRemoteConnect(
1158 NtUserRemoteRedrawRectangle(
1170 NtUserRemoteRedrawScreen(VOID
)
1178 NtUserRemoteStopScreenUpdates(VOID
)
1186 NtUserCtxDisplayIOCtl(