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(
510 NtUserRegisterTasklist(
520 NtUserSetConsoleReserveKeys(
570 IN CONST INT
*lpaElements
,
571 IN CONST COLORREF
*lpaRgbValues
,
575 NTSTATUS Status
= STATUS_SUCCESS
;
576 UserEnterExclusive();
579 ProbeForRead(lpaElements
,
582 ProbeForRead(lpaRgbValues
,
585 // Developers: We are thread locked and calling gdi.
586 Ret
= IntSetSysColors(cElements
, (INT
*)lpaElements
, (COLORREF
*)lpaRgbValues
);
588 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER
)
590 Status
= _SEH2_GetExceptionCode();
593 if (!NT_SUCCESS(Status
))
595 SetLastNtError(Status
);
600 UserPostMessage(HWND_BROADCAST
, WM_SYSCOLORCHANGE
, 0, 0);
608 NtUserSetThreadState(
619 NtUserTrackMouseEvent(
620 LPTRACKMOUSEEVENT lpEventTrack
)
630 NtUserUpdateInputContext(
642 NtUserUpdateInstance(
654 NtUserUserHandleGrantAccess(
655 IN HANDLE hUserHandle
,
666 NtUserWaitForMsgAndEvent(
676 NtUserWin32PoolAllocationStats(
691 NtUserYieldTask(VOID
)
701 NtUserCheckImeHotKey(
711 NtUserConsoleControl(
722 NtUserCreateInputContext(
731 NtUserDestroyInputContext(
740 NtUserDisableThreadIme(
749 NtUserGetAppImeLevel(
778 NtUserGetRawInputBuffer(
789 NtUserGetRawInputData(
802 NtUserGetRawInputDeviceInfo(
815 NtUserGetRawInputDeviceList(
816 PRAWINPUTDEVICELIST pRawInputDeviceList
,
826 NtUserGetRegisteredRawInputDevices(
827 PRAWINPUTDEVICE pRawInputDevices
,
837 NtUserHardErrorControl(
850 UINT cmd
, // Wine SW_ commands
859 NtUserNotifyProcessCreate(
871 NtUserProcessConnect(
873 PUSERCONNECT pUserConnect
,
876 NTSTATUS Status
= STATUS_SUCCESS
;
877 DPRINT("NtUserProcessConnect\n");
878 if (pUserConnect
&& ( Size
== sizeof(USERCONNECT
) ))
880 PPROCESSINFO W32Process
;
883 W32Process
= PsGetCurrentProcessWin32Process();
886 pUserConnect
->siClient
.psi
= gpsi
;
887 pUserConnect
->siClient
.aheList
= gHandleTable
;
888 pUserConnect
->siClient
.ulSharedDelta
= (ULONG_PTR
)W32Process
->HeapMappings
.KernelMapping
-
889 (ULONG_PTR
)W32Process
->HeapMappings
.UserMapping
;
891 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER
)
893 Status
= _SEH2_GetExceptionCode();
896 if (!NT_SUCCESS(Status
))
898 SetLastNtError(Status
);
903 return STATUS_UNSUCCESSFUL
;
908 NtUserQueryInformationThread(
921 NtUserQueryInputContext(
931 NtUserRealInternalGetMessage(
945 NtUserRealWaitMessageEx(
955 NtUserRegisterUserApiHook(
956 PUNICODE_STRING m_dllname1
,
957 PUNICODE_STRING m_funname1
,
961 UserEnterExclusive();
969 NtUserRegisterRawInputDevices(
970 IN PCRAWINPUTDEVICE pRawInputDevices
,
971 IN UINT uiNumDevices
,
980 NtUserResolveDesktop(
992 NtUserSetAppImeLevel(
1011 NtUserSetInformationProcess(
1023 NtUserSetInformationThread(IN HANDLE ThreadHandle
,
1024 IN USERTHREADINFOCLASS ThreadInformationClass
,
1025 IN PVOID ThreadInformation
,
1026 IN ULONG ThreadInformationLength
)
1029 if (ThreadInformationClass
== UserThreadInitiateShutdown
)
1031 DPRINT1("Shutdown initiated\n");
1033 else if (ThreadInformationClass
== UserThreadEndShutdown
)
1035 DPRINT1("Shutdown ended\n");
1042 return STATUS_SUCCESS
;
1047 NtUserSetThreadLayoutHandles(
1057 NtUserSoundSentry(VOID
)
1065 NtUserTestForInteractiveUser(
1072 /* http://www.cyber-ta.org/releases/malware-analysis/public/SOURCES/b47155634ccb2c30630da7e3666d3d07/b47155634ccb2c30630da7e3666d3d07.trace.html#NtUserGetIconSize */
1102 NtUserUnregisterUserApiHook(VOID
)
1110 NtUserGetLayeredWindowAttributes(
1122 NtUserValidateTimerCallback(
1131 Ret
= ValidateTimerCallback(PsGetCurrentThreadWin32Thread(), lParam
);
1139 NtUserRemoteConnect(
1150 NtUserRemoteRedrawRectangle(
1162 NtUserRemoteRedrawScreen(VOID
)
1170 NtUserRemoteStopScreenUpdates(VOID
)
1178 NtUserCtxDisplayIOCtl(