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