[WIN32K]
[reactos.git] / win32ss / user / ntuser / ntstubs.c
1 /*
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)
7 */
8
9 #include <win32k.h>
10 DBG_DEFAULT_CHANNEL(UserMisc);
11
12 DWORD
13 APIENTRY
14 NtUserAssociateInputContext(
15 DWORD dwUnknown1,
16 DWORD dwUnknown2,
17 DWORD dwUnknown3)
18 {
19 STUB
20 return 0;
21 }
22
23
24 BOOL
25 APIENTRY
26 NtUserAttachThreadInput(
27 IN DWORD idAttach,
28 IN DWORD idAttachTo,
29 IN BOOL fAttach)
30 {
31 NTSTATUS Status;
32 PETHREAD Thread, ThreadTo;
33 PTHREADINFO pti, ptiTo;
34 BOOL Ret = FALSE;
35
36 UserEnterExclusive();
37 ERR("Enter NtUserAttachThreadInput %s\n",(fAttach ? "TRUE" : "FALSE" ));
38 Status = PsLookupThreadByThreadId((HANDLE)idAttach, &Thread);
39 if (!NT_SUCCESS(Status))
40 {
41 EngSetLastError(ERROR_INVALID_PARAMETER);
42 goto Exit;
43 }
44 Status = PsLookupThreadByThreadId((HANDLE)idAttachTo, &ThreadTo);
45 if (!NT_SUCCESS(Status))
46 {
47 EngSetLastError(ERROR_INVALID_PARAMETER);
48 ObDereferenceObject(Thread);
49 goto Exit;
50 }
51
52 pti = PsGetThreadWin32Thread(Thread);
53 ptiTo = PsGetThreadWin32Thread(ThreadTo);
54 ObDereferenceObject(Thread);
55 ObDereferenceObject(ThreadTo);
56
57 Status = UserAttachThreadInput( pti, ptiTo, fAttach);
58 if (!NT_SUCCESS(Status))
59 {
60 EngSetLastError(RtlNtStatusToDosError(Status));
61 }
62 else Ret = TRUE;
63
64 Exit:
65 ERR("Leave NtUserAttachThreadInput, ret=%d\n",Ret);
66 UserLeave();
67 return Ret;
68 }
69
70 //
71 // Works like BitBlt, http://msdn.microsoft.com/en-us/library/ms532278(VS.85).aspx
72 //
73 BOOL
74 APIENTRY
75 NtUserBitBltSysBmp(
76 HDC hdc,
77 INT nXDest,
78 INT nYDest,
79 INT nWidth,
80 INT nHeight,
81 INT nXSrc,
82 INT nYSrc,
83 DWORD dwRop )
84 {
85 BOOL Ret = FALSE;
86 UserEnterExclusive();
87
88 Ret = NtGdiBitBlt( hdc,
89 nXDest,
90 nYDest,
91 nWidth,
92 nHeight,
93 hSystemBM,
94 nXSrc,
95 nYSrc,
96 dwRop,
97 0,
98 0);
99
100 UserLeave();
101 return Ret;
102 }
103
104 DWORD
105 APIENTRY
106 NtUserBuildHimcList(
107 DWORD dwUnknown1,
108 DWORD dwUnknown2,
109 DWORD dwUnknown3,
110 DWORD dwUnknown4)
111 {
112 STUB;
113 return 0;
114 }
115
116 BOOL
117 APIENTRY
118 NtUserDdeGetQualityOfService(
119 IN HWND hwndClient,
120 IN HWND hWndServer,
121 OUT PSECURITY_QUALITY_OF_SERVICE pqosPrev)
122 {
123 STUB
124
125 return 0;
126 }
127
128 DWORD
129 APIENTRY
130 NtUserDdeInitialize(
131 DWORD Unknown0,
132 DWORD Unknown1,
133 DWORD Unknown2,
134 DWORD Unknown3,
135 DWORD Unknown4)
136 {
137 STUB
138
139 return 0;
140 }
141
142 BOOL
143 APIENTRY
144 NtUserDdeSetQualityOfService(
145 IN HWND hwndClient,
146 IN PSECURITY_QUALITY_OF_SERVICE pqosNew,
147 OUT PSECURITY_QUALITY_OF_SERVICE pqosPrev)
148 {
149 STUB
150
151 return 0;
152 }
153
154 DWORD
155 APIENTRY
156 NtUserDragObject(
157 HWND hwnd1,
158 HWND hwnd2,
159 UINT u1,
160 DWORD dw1,
161 HCURSOR hc1
162 )
163 {
164 STUB
165
166 return 0;
167 }
168
169 BOOL
170 APIENTRY
171 NtUserDrawAnimatedRects(
172 HWND hwnd,
173 INT idAni,
174 RECT *lprcFrom,
175 RECT *lprcTo)
176 {
177 STUB
178
179 return 0;
180 }
181
182 DWORD
183 APIENTRY
184 NtUserEvent(
185 DWORD Unknown0)
186 {
187 STUB
188
189 return 0;
190 }
191
192 DWORD
193 APIENTRY
194 NtUserExcludeUpdateRgn(
195 HDC hDC,
196 HWND hWnd)
197 {
198 STUB
199
200 return 0;
201 }
202
203 BOOL
204 APIENTRY
205 NtUserGetAltTabInfo(
206 HWND hwnd,
207 INT iItem,
208 PALTTABINFO pati,
209 LPWSTR pszItemText,
210 UINT cchItemText,
211 BOOL Ansi)
212 {
213 STUB
214
215 return 0;
216 }
217
218 DWORD
219 APIENTRY
220 NtUserGetImeHotKey(
221 DWORD Unknown0,
222 DWORD Unknown1,
223 DWORD Unknown2,
224 DWORD Unknown3)
225 {
226 STUB
227
228 return 0;
229 }
230
231 BOOL
232 APIENTRY
233 NtUserImpersonateDdeClientWindow(
234 HWND hWndClient,
235 HWND hWndServer)
236 {
237 STUB
238
239 return 0;
240 }
241
242 NTSTATUS
243 APIENTRY
244 NtUserInitializeClientPfnArrays(
245 PPFNCLIENT pfnClientA,
246 PPFNCLIENT pfnClientW,
247 PPFNCLIENTWORKER pfnClientWorker,
248 HINSTANCE hmodUser)
249 {
250 NTSTATUS Status = STATUS_SUCCESS;
251 TRACE("Enter NtUserInitializeClientPfnArrays User32 0x%p\n", hmodUser);
252
253 if (ClientPfnInit) return Status;
254
255 UserEnterExclusive();
256
257 _SEH2_TRY
258 {
259 ProbeForRead( pfnClientA, sizeof(PFNCLIENT), 1);
260 ProbeForRead( pfnClientW, sizeof(PFNCLIENT), 1);
261 ProbeForRead( pfnClientWorker, sizeof(PFNCLIENTWORKER), 1);
262 RtlCopyMemory(&gpsi->apfnClientA, pfnClientA, sizeof(PFNCLIENT));
263 RtlCopyMemory(&gpsi->apfnClientW, pfnClientW, sizeof(PFNCLIENT));
264 RtlCopyMemory(&gpsi->apfnClientWorker, pfnClientWorker, sizeof(PFNCLIENTWORKER));
265
266 //// FIXME: HAX! Temporary until server side is finished.
267 //// Copy the client side procs for now.
268 RtlCopyMemory(&gpsi->aStoCidPfn, pfnClientW, sizeof(gpsi->aStoCidPfn));
269
270 hModClient = hmodUser;
271 ClientPfnInit = TRUE;
272 }
273 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
274 {
275 Status =_SEH2_GetExceptionCode();
276 }
277 _SEH2_END
278
279 if (!NT_SUCCESS(Status))
280 {
281 ERR("Failed reading Client Pfns from user space.\n");
282 SetLastNtError(Status);
283 }
284
285 UserLeave();
286 return Status;
287 }
288
289 DWORD
290 APIENTRY
291 NtUserInitTask(
292 DWORD Unknown0,
293 DWORD Unknown1,
294 DWORD Unknown2,
295 DWORD Unknown3,
296 DWORD Unknown4,
297 DWORD Unknown5,
298 DWORD Unknown6,
299 DWORD Unknown7,
300 DWORD Unknown8,
301 DWORD Unknown9,
302 DWORD Unknown10,
303 DWORD Unknown11)
304 {
305 STUB
306
307 return 0;
308 }
309
310 BOOL
311 APIENTRY
312 NtUserLockWorkStation(VOID)
313 {
314 STUB
315
316 return 0;
317 }
318
319 DWORD
320 APIENTRY
321 NtUserMNDragLeave(VOID)
322 {
323 STUB
324
325 return 0;
326 }
327
328 DWORD
329 APIENTRY
330 NtUserMNDragOver(
331 DWORD Unknown0,
332 DWORD Unknown1)
333 {
334 STUB
335
336 return 0;
337 }
338
339 DWORD
340 APIENTRY
341 NtUserModifyUserStartupInfoFlags(
342 DWORD Unknown0,
343 DWORD Unknown1)
344 {
345 STUB
346
347 return 0;
348 }
349
350 DWORD
351 APIENTRY
352 NtUserNotifyIMEStatus(
353 DWORD Unknown0,
354 DWORD Unknown1,
355 DWORD Unknown2)
356 {
357 STUB
358
359 return 0;
360 }
361
362 DWORD
363 APIENTRY
364 NtUserQueryUserCounters(
365 DWORD Unknown0,
366 DWORD Unknown1,
367 DWORD Unknown2,
368 DWORD Unknown3,
369 DWORD Unknown4)
370 {
371 STUB
372
373 return 0;
374 }
375
376 DWORD
377 APIENTRY
378 NtUserRegisterTasklist(
379 DWORD Unknown0)
380 {
381 STUB
382
383 return 0;
384 }
385
386 DWORD
387 APIENTRY
388 NtUserSetConsoleReserveKeys(
389 DWORD Unknown0,
390 DWORD Unknown1)
391 {
392 STUB
393
394 return 0;
395 }
396
397 DWORD
398 APIENTRY
399 NtUserSetDbgTag(
400 DWORD Unknown0,
401 DWORD Unknown1)
402 {
403 STUB
404
405 return 0;
406 }
407
408 DWORD
409 APIENTRY
410 NtUserSetImeHotKey(
411 DWORD Unknown0,
412 DWORD Unknown1,
413 DWORD Unknown2,
414 DWORD Unknown3,
415 DWORD Unknown4)
416 {
417 STUB
418
419 return 0;
420 }
421
422
423 DWORD
424 APIENTRY
425 NtUserSetRipFlags(
426 DWORD Unknown0,
427 DWORD Unknown1)
428 {
429 STUB
430
431 return 0;
432 }
433
434 BOOL
435 APIENTRY
436 NtUserSetSysColors(
437 int cElements,
438 IN CONST INT *lpaElements,
439 IN CONST COLORREF *lpaRgbValues,
440 FLONG Flags)
441 {
442 DWORD Ret = TRUE;
443
444 if (cElements == 0)
445 return TRUE;
446
447 /* We need this check to prevent overflow later */
448 if ((ULONG)cElements >= 0x40000000)
449 {
450 EngSetLastError(ERROR_NOACCESS);
451 return FALSE;
452 }
453
454 UserEnterExclusive();
455
456 _SEH2_TRY
457 {
458 ProbeForRead(lpaElements, cElements * sizeof(INT), 1);
459 ProbeForRead(lpaRgbValues, cElements * sizeof(COLORREF), 1);
460
461 IntSetSysColors(cElements, lpaElements, lpaRgbValues);
462 }
463 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
464 {
465 SetLastNtError(_SEH2_GetExceptionCode());
466 Ret = FALSE;
467 }
468 _SEH2_END;
469
470 if (Ret)
471 {
472 UserSendNotifyMessage(HWND_BROADCAST, WM_SYSCOLORCHANGE, 0, 0);
473
474 UserRedrawDesktop();
475 }
476
477 UserLeave();
478 return Ret;
479 }
480
481 DWORD
482 APIENTRY
483 NtUserUpdateInputContext(
484 DWORD Unknown0,
485 DWORD Unknown1,
486 DWORD Unknown2)
487 {
488 STUB
489
490 return 0;
491 }
492
493 DWORD
494 APIENTRY
495 NtUserUpdateInstance(
496 DWORD Unknown0,
497 DWORD Unknown1,
498 DWORD Unknown2)
499 {
500 STUB
501
502 return 0;
503 }
504
505 BOOL
506 APIENTRY
507 NtUserUserHandleGrantAccess(
508 IN HANDLE hUserHandle,
509 IN HANDLE hJob,
510 IN BOOL bGrant)
511 {
512 STUB
513
514 return 0;
515 }
516
517 DWORD
518 APIENTRY
519 NtUserWaitForMsgAndEvent(
520 DWORD Unknown0)
521 {
522 STUB
523
524 return 0;
525 }
526
527 DWORD
528 APIENTRY
529 NtUserWin32PoolAllocationStats(
530 DWORD Unknown0,
531 DWORD Unknown1,
532 DWORD Unknown2,
533 DWORD Unknown3,
534 DWORD Unknown4,
535 DWORD Unknown5)
536 {
537 STUB
538
539 return 0;
540 }
541
542 DWORD
543 APIENTRY
544 NtUserYieldTask(VOID)
545 {
546 STUB
547
548 return 0;
549 }
550
551
552 DWORD
553 APIENTRY
554 NtUserCheckImeHotKey(
555 DWORD dwUnknown1,
556 DWORD dwUnknown2)
557 {
558 STUB;
559 return 0;
560 }
561
562 NTSTATUS
563 APIENTRY
564 NtUserConsoleControl(
565 IN CONSOLECONTROL ConsoleCtrl,
566 IN PVOID ConsoleCtrlInfo,
567 IN DWORD ConsoleCtrlInfoLength)
568 {
569 NTSTATUS Status = STATUS_SUCCESS;
570
571 /* Allow only Console Server to perform this operation (via CSRSS) */
572 if (gpepCSRSS != PsGetCurrentProcess())
573 return STATUS_ACCESS_DENIED;
574
575 UserEnterExclusive();
576
577 switch (ConsoleCtrl)
578 {
579 case GuiConsoleWndClassAtom:
580 {
581 _SEH2_TRY
582 {
583 ProbeForRead(ConsoleCtrlInfo, ConsoleCtrlInfoLength, 1);
584 ASSERT(ConsoleCtrlInfoLength == sizeof(ATOM));
585 gaGuiConsoleWndClass = *(ATOM*)ConsoleCtrlInfo;
586 }
587 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
588 {
589 Status = _SEH2_GetExceptionCode();
590 }
591 _SEH2_END;
592
593 break;
594 }
595
596 case TuiConsoleWndClassAtom:
597 {
598 _SEH2_TRY
599 {
600 ProbeForRead(ConsoleCtrlInfo, ConsoleCtrlInfoLength, 1);
601 ASSERT(ConsoleCtrlInfoLength == sizeof(ATOM));
602 gaTuiConsoleWndClass = *(ATOM*)ConsoleCtrlInfo;
603 }
604 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
605 {
606 Status = _SEH2_GetExceptionCode();
607 }
608 _SEH2_END;
609
610 break;
611 }
612
613 default:
614 ERR("Calling invalid control %lu in NtUserConsoleControl\n", ConsoleCtrl);
615 Status = STATUS_INVALID_INFO_CLASS;
616 break;
617 }
618
619 UserLeave();
620
621 return Status;
622 }
623
624 DWORD
625 APIENTRY
626 NtUserCreateInputContext(
627 DWORD dwUnknown1)
628 {
629 STUB;
630 return 0;
631 }
632
633 DWORD
634 APIENTRY
635 NtUserDestroyInputContext(
636 DWORD dwUnknown1)
637 {
638 STUB;
639 return 0;
640 }
641
642 DWORD
643 APIENTRY
644 NtUserDisableThreadIme(
645 DWORD dwUnknown1)
646 {
647 STUB;
648 return 0;
649 }
650
651 DWORD
652 APIENTRY
653 NtUserGetAppImeLevel(
654 DWORD dwUnknown1)
655 {
656 STUB;
657 return 0;
658 }
659
660 DWORD
661 APIENTRY
662 NtUserGetImeInfoEx(
663 DWORD dwUnknown1,
664 DWORD dwUnknown2)
665 {
666 STUB;
667 return 0;
668 }
669
670 DWORD
671 APIENTRY
672 NtUserGetRawInputBuffer(
673 PRAWINPUT pData,
674 PUINT pcbSize,
675 UINT cbSizeHeader)
676 {
677 STUB;
678 return 0;
679 }
680
681 DWORD
682 APIENTRY
683 NtUserGetRawInputData(
684 HRAWINPUT hRawInput,
685 UINT uiCommand,
686 LPVOID pData,
687 PUINT pcbSize,
688 UINT cbSizeHeader)
689 {
690 STUB;
691 return 0;
692 }
693
694 DWORD
695 APIENTRY
696 NtUserGetRawInputDeviceInfo(
697 HANDLE hDevice,
698 UINT uiCommand,
699 LPVOID pData,
700 PUINT pcbSize
701 )
702 {
703 STUB;
704 return 0;
705 }
706
707 DWORD
708 APIENTRY
709 NtUserGetRawInputDeviceList(
710 PRAWINPUTDEVICELIST pRawInputDeviceList,
711 PUINT puiNumDevices,
712 UINT cbSize)
713 {
714 STUB;
715 return 0;
716 }
717
718 DWORD
719 APIENTRY
720 NtUserGetRegisteredRawInputDevices(
721 PRAWINPUTDEVICE pRawInputDevices,
722 PUINT puiNumDevices,
723 UINT cbSize)
724 {
725 STUB;
726 return 0;
727 }
728
729 DWORD
730 APIENTRY
731 NtUserHardErrorControl(
732 DWORD dwUnknown1,
733 DWORD dwUnknown2,
734 DWORD dwUnknown3)
735 {
736 STUB;
737 return 0;
738 }
739
740 DWORD
741 APIENTRY
742 NtUserNotifyProcessCreate(
743 DWORD dwUnknown1,
744 DWORD dwUnknown2,
745 DWORD dwUnknown3,
746 DWORD dwUnknown4)
747 {
748 STUB;
749 return 0;
750 }
751
752 NTSTATUS
753 APIENTRY
754 NtUserProcessConnect(
755 HANDLE Process,
756 PUSERCONNECT pUserConnect,
757 DWORD Size)
758 {
759 NTSTATUS Status = STATUS_SUCCESS;
760 TRACE("NtUserProcessConnect\n");
761 if (pUserConnect && ( Size == sizeof(USERCONNECT) ))
762 {
763 PPROCESSINFO W32Process;
764 UserEnterShared();
765 GetW32ThreadInfo();
766 W32Process = PsGetCurrentProcessWin32Process();
767 _SEH2_TRY
768 {
769 pUserConnect->siClient.psi = gpsi;
770 pUserConnect->siClient.aheList = gHandleTable;
771 pUserConnect->siClient.ulSharedDelta = (ULONG_PTR)W32Process->HeapMappings.KernelMapping -
772 (ULONG_PTR)W32Process->HeapMappings.UserMapping;
773 }
774 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
775 {
776 Status = _SEH2_GetExceptionCode();
777 }
778 _SEH2_END
779 if (!NT_SUCCESS(Status))
780 {
781 SetLastNtError(Status);
782 }
783 UserLeave();
784 return Status;
785 }
786 return STATUS_UNSUCCESSFUL;
787 }
788
789 DWORD
790 APIENTRY
791 NtUserQueryInformationThread(
792 DWORD dwUnknown1,
793 DWORD dwUnknown2,
794 DWORD dwUnknown3,
795 DWORD dwUnknown4,
796 DWORD dwUnknown5)
797 {
798 STUB;
799 return 0;
800 }
801
802 DWORD
803 APIENTRY
804 NtUserQueryInputContext(
805 DWORD dwUnknown1,
806 DWORD dwUnknown2)
807 {
808 STUB;
809 return 0;
810 }
811
812 BOOL
813 APIENTRY
814 NtUserRealInternalGetMessage(
815 LPMSG lpMsg,
816 HWND hWnd,
817 UINT wMsgFilterMin,
818 UINT wMsgFilterMax,
819 UINT wRemoveMsg,
820 BOOL bGMSG)
821 {
822 STUB;
823 return 0;
824 }
825
826 BOOL
827 APIENTRY
828 NtUserRealWaitMessageEx(
829 DWORD dwWakeMask,
830 UINT uTimeout)
831 {
832 STUB;
833 return 0;
834 }
835
836 BOOL
837 APIENTRY
838 NtUserRegisterRawInputDevices(
839 IN PCRAWINPUTDEVICE pRawInputDevices,
840 IN UINT uiNumDevices,
841 IN UINT cbSize)
842 {
843 STUB;
844 return 0;
845 }
846
847 DWORD
848 APIENTRY
849 NtUserResolveDesktop(
850 DWORD dwUnknown1,
851 DWORD dwUnknown2,
852 DWORD dwUnknown3,
853 DWORD dwUnknown4)
854 {
855 STUB;
856 return 0;
857 }
858
859 DWORD
860 APIENTRY
861 NtUserSetAppImeLevel(
862 DWORD dwUnknown1,
863 DWORD dwUnknown2)
864 {
865 STUB;
866 return 0;
867 }
868
869 DWORD
870 APIENTRY
871 NtUserSetImeInfoEx(
872 DWORD dwUnknown1)
873 {
874 STUB;
875 return 0;
876 }
877
878 DWORD
879 APIENTRY
880 NtUserSetInformationProcess(
881 DWORD dwUnknown1,
882 DWORD dwUnknown2,
883 DWORD dwUnknown3,
884 DWORD dwUnknown4)
885 {
886 STUB;
887 return 0;
888 }
889
890 NTSTATUS
891 APIENTRY
892 NtUserSetInformationThread(IN HANDLE ThreadHandle,
893 IN USERTHREADINFOCLASS ThreadInformationClass,
894 IN PVOID ThreadInformation,
895 IN ULONG ThreadInformationLength)
896
897 {
898 if (ThreadInformationClass == UserThreadInitiateShutdown)
899 {
900 ERR("Shutdown initiated\n");
901 }
902 else if (ThreadInformationClass == UserThreadEndShutdown)
903 {
904 ERR("Shutdown ended\n");
905 }
906 else
907 {
908 STUB;
909 }
910
911 return STATUS_SUCCESS;
912 }
913
914 DWORD
915 APIENTRY
916 NtUserSetThreadLayoutHandles(
917 DWORD dwUnknown1,
918 DWORD dwUnknown2)
919 {
920 STUB;
921 return 0;
922 }
923
924 BOOL
925 APIENTRY
926 NtUserSoundSentry(VOID)
927 {
928 STUB;
929 return 0;
930 }
931
932 DWORD
933 APIENTRY
934 NtUserTestForInteractiveUser(
935 DWORD dwUnknown1)
936 {
937 STUB;
938 return 0;
939 }
940
941 /* http://www.cyber-ta.org/releases/malware-analysis/public/SOURCES/b47155634ccb2c30630da7e3666d3d07/b47155634ccb2c30630da7e3666d3d07.trace.html#NtUserGetIconSize */
942 DWORD
943 APIENTRY
944 NtUserCalcMenuBar(
945 DWORD dwUnknown1,
946 DWORD dwUnknown2,
947 DWORD dwUnknown3,
948 DWORD dwUnknown4,
949 DWORD dwUnknown5)
950 {
951 STUB;
952 return 0;
953 }
954
955 DWORD
956 APIENTRY
957 NtUserPaintMenuBar(
958 DWORD dwUnknown1,
959 DWORD dwUnknown2,
960 DWORD dwUnknown3,
961 DWORD dwUnknown4,
962 DWORD dwUnknown5,
963 DWORD dwUnknown6)
964 {
965 STUB;
966 return 0;
967 }
968
969
970 DWORD
971 APIENTRY
972 NtUserRemoteConnect(
973 DWORD dwUnknown1,
974 DWORD dwUnknown2,
975 DWORD dwUnknown3)
976 {
977 STUB;
978 return 0;
979 }
980
981 DWORD
982 APIENTRY
983 NtUserRemoteRedrawRectangle(
984 DWORD dwUnknown1,
985 DWORD dwUnknown2,
986 DWORD dwUnknown3,
987 DWORD dwUnknown4)
988 {
989 STUB;
990 return 0;
991 }
992
993 DWORD
994 APIENTRY
995 NtUserRemoteRedrawScreen(VOID)
996 {
997 STUB;
998 return 0;
999 }
1000
1001 DWORD
1002 APIENTRY
1003 NtUserRemoteStopScreenUpdates(VOID)
1004 {
1005 STUB;
1006 return 0;
1007 }
1008
1009 DWORD
1010 APIENTRY
1011 NtUserCtxDisplayIOCtl(
1012 DWORD dwUnknown1,
1013 DWORD dwUnknown2,
1014 DWORD dwUnknown3)
1015 {
1016 STUB;
1017 return 0;
1018 }
1019
1020 /*
1021 * @unimplemented
1022 */
1023 DWORD
1024 APIENTRY
1025 NtUserDrawMenuBarTemp(
1026 HWND hWnd,
1027 HDC hDC,
1028 PRECT hRect,
1029 HMENU hMenu,
1030 HFONT hFont)
1031 {
1032 /* We'll use this function just for caching the menu bar */
1033 STUB
1034 return 0;
1035 }
1036
1037 /*
1038 * FillWindow: Called from User; Dialog, Edit and ListBox procs during a WM_ERASEBKGND.
1039 */
1040 /*
1041 * @unimplemented
1042 */
1043 BOOL APIENTRY
1044 NtUserFillWindow(HWND hWndPaint,
1045 HWND hWndPaint1,
1046 HDC hDC,
1047 HBRUSH hBrush)
1048 {
1049 STUB
1050
1051 return 0;
1052 }
1053
1054 /*
1055 * @unimplemented
1056 */
1057 BOOL APIENTRY
1058 NtUserLockWindowUpdate(HWND hWnd)
1059 {
1060 STUB
1061
1062 return 0;
1063 }
1064
1065 /*
1066 * @unimplemented
1067 */
1068 DWORD APIENTRY
1069 NtUserSetImeOwnerWindow(DWORD Unknown0,
1070 DWORD Unknown1)
1071 {
1072 STUB
1073
1074 return 0;
1075 }
1076
1077 BOOL
1078 APIENTRY
1079 NtUserGetLayeredWindowAttributes(
1080 HWND hwnd,
1081 COLORREF *pcrKey,
1082 BYTE *pbAlpha,
1083 DWORD *pdwFlags)
1084 {
1085 STUB;
1086 return 0;
1087 }
1088
1089 /*
1090 * @unimplemented
1091 */
1092 BOOL APIENTRY
1093 NtUserSetLayeredWindowAttributes(HWND hwnd,
1094 COLORREF crKey,
1095 BYTE bAlpha,
1096 DWORD dwFlags)
1097 {
1098 STUB;
1099 return FALSE;
1100 }
1101
1102 /*
1103 * @unimplemented
1104 */
1105 BOOL
1106 APIENTRY
1107 NtUserUpdateLayeredWindow(
1108 HWND hwnd,
1109 HDC hdcDst,
1110 POINT *pptDst,
1111 SIZE *psize,
1112 HDC hdcSrc,
1113 POINT *pptSrc,
1114 COLORREF crKey,
1115 BLENDFUNCTION *pblend,
1116 DWORD dwFlags,
1117 RECT *prcDirty)
1118 {
1119 STUB
1120
1121 return 0;
1122 }
1123
1124 /*
1125 * @unimplemented
1126 */
1127 HWND APIENTRY
1128 NtUserWindowFromPhysicalPoint(POINT Point)
1129 {
1130 STUB
1131
1132 return NULL;
1133 }
1134
1135 /*
1136 * NtUserResolveDesktopForWOW
1137 *
1138 * Status
1139 * @unimplemented
1140 */
1141
1142 DWORD APIENTRY
1143 NtUserResolveDesktopForWOW(DWORD Unknown0)
1144 {
1145 STUB
1146 return 0;
1147 }
1148
1149 /*
1150 * @unimplemented
1151 */
1152 BOOL APIENTRY
1153 NtUserEndMenu(VOID)
1154 {
1155 STUB
1156
1157 return 0;
1158 }
1159
1160 /*
1161 * @implemented
1162 */
1163 /* NOTE: unused function */
1164 BOOL APIENTRY
1165 NtUserTrackPopupMenuEx(
1166 HMENU hMenu,
1167 UINT fuFlags,
1168 int x,
1169 int y,
1170 HWND hWnd,
1171 LPTPMPARAMS lptpm)
1172 {
1173 STUB
1174
1175 return FALSE;
1176 }
1177
1178 DWORD APIENTRY
1179 NtUserQuerySendMessage(DWORD Unknown0)
1180 {
1181 STUB;
1182
1183 return 0;
1184 }
1185
1186 /*
1187 * @unimplemented
1188 */
1189 DWORD APIENTRY
1190 NtUserAlterWindowStyle(DWORD Unknown0,
1191 DWORD Unknown1,
1192 DWORD Unknown2)
1193 {
1194 STUB
1195
1196 return(0);
1197 }
1198
1199 /*
1200 * NtUserSetWindowStationUser
1201 *
1202 * Status
1203 * @unimplemented
1204 */
1205
1206 DWORD APIENTRY
1207 NtUserSetWindowStationUser(
1208 DWORD Unknown0,
1209 DWORD Unknown1,
1210 DWORD Unknown2,
1211 DWORD Unknown3)
1212 {
1213 STUB
1214
1215 return 0;
1216 }
1217
1218 BOOL APIENTRY NtUserAddClipboardFormatListener(
1219 HWND hwnd
1220 )
1221 {
1222 STUB;
1223 return FALSE;
1224 }
1225
1226 BOOL APIENTRY NtUserRemoveClipboardFormatListener(
1227 HWND hwnd
1228 )
1229 {
1230 STUB;
1231 return FALSE;
1232 }
1233
1234 BOOL APIENTRY NtUserGetUpdatedClipboardFormats(
1235 PUINT lpuiFormats,
1236 UINT cFormats,
1237 PUINT pcFormatsOut
1238 )
1239 {
1240 STUB;
1241 return FALSE;
1242 }
1243
1244 /*
1245 * @unimplemented
1246 */
1247 HCURSOR
1248 NTAPI
1249 NtUserGetCursorFrameInfo(
1250 HCURSOR hCursor,
1251 DWORD istep,
1252 PDWORD rate_jiffies,
1253 INT *num_steps)
1254 {
1255 STUB
1256
1257 return 0;
1258 }
1259
1260 /*
1261 * @unimplemented
1262 */
1263 BOOL
1264 APIENTRY
1265 NtUserSetSystemCursor(
1266 HCURSOR hcur,
1267 DWORD id)
1268 {
1269 return FALSE;
1270 }
1271
1272 /* EOF */