Sync with trunk r58687.
[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 DWORD
311 APIENTRY
312 NtUserMNDragLeave(VOID)
313 {
314 STUB
315
316 return 0;
317 }
318
319 DWORD
320 APIENTRY
321 NtUserMNDragOver(
322 DWORD Unknown0,
323 DWORD Unknown1)
324 {
325 STUB
326
327 return 0;
328 }
329
330 DWORD
331 APIENTRY
332 NtUserModifyUserStartupInfoFlags(
333 DWORD Unknown0,
334 DWORD Unknown1)
335 {
336 STUB
337
338 return 0;
339 }
340
341 DWORD
342 APIENTRY
343 NtUserNotifyIMEStatus(
344 DWORD Unknown0,
345 DWORD Unknown1,
346 DWORD Unknown2)
347 {
348 STUB
349
350 return 0;
351 }
352
353 DWORD
354 APIENTRY
355 NtUserQueryUserCounters(
356 DWORD Unknown0,
357 DWORD Unknown1,
358 DWORD Unknown2,
359 DWORD Unknown3,
360 DWORD Unknown4)
361 {
362 STUB
363
364 return 0;
365 }
366
367 DWORD
368 APIENTRY
369 NtUserRegisterTasklist(
370 DWORD Unknown0)
371 {
372 STUB
373
374 return 0;
375 }
376
377 DWORD
378 APIENTRY
379 NtUserSetConsoleReserveKeys(
380 DWORD Unknown0,
381 DWORD Unknown1)
382 {
383 STUB
384
385 return 0;
386 }
387
388 DWORD
389 APIENTRY
390 NtUserSetDbgTag(
391 DWORD Unknown0,
392 DWORD Unknown1)
393 {
394 STUB
395
396 return 0;
397 }
398
399 DWORD
400 APIENTRY
401 NtUserSetImeHotKey(
402 DWORD Unknown0,
403 DWORD Unknown1,
404 DWORD Unknown2,
405 DWORD Unknown3,
406 DWORD Unknown4)
407 {
408 STUB
409
410 return 0;
411 }
412
413
414 DWORD
415 APIENTRY
416 NtUserSetRipFlags(
417 DWORD Unknown0,
418 DWORD Unknown1)
419 {
420 STUB
421
422 return 0;
423 }
424
425 BOOL
426 APIENTRY
427 NtUserSetSysColors(
428 int cElements,
429 IN CONST INT *lpaElements,
430 IN CONST COLORREF *lpaRgbValues,
431 FLONG Flags)
432 {
433 DWORD Ret = TRUE;
434
435 if (cElements == 0)
436 return TRUE;
437
438 /* We need this check to prevent overflow later */
439 if ((ULONG)cElements >= 0x40000000)
440 {
441 EngSetLastError(ERROR_NOACCESS);
442 return FALSE;
443 }
444
445 UserEnterExclusive();
446
447 _SEH2_TRY
448 {
449 ProbeForRead(lpaElements, cElements * sizeof(INT), 1);
450 ProbeForRead(lpaRgbValues, cElements * sizeof(COLORREF), 1);
451
452 IntSetSysColors(cElements, lpaElements, lpaRgbValues);
453 }
454 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
455 {
456 SetLastNtError(_SEH2_GetExceptionCode());
457 Ret = FALSE;
458 }
459 _SEH2_END;
460
461 if (Ret)
462 {
463 UserSendNotifyMessage(HWND_BROADCAST, WM_SYSCOLORCHANGE, 0, 0);
464
465 UserRedrawDesktop();
466 }
467
468 UserLeave();
469 return Ret;
470 }
471
472 DWORD
473 APIENTRY
474 NtUserUpdateInputContext(
475 DWORD Unknown0,
476 DWORD Unknown1,
477 DWORD Unknown2)
478 {
479 STUB
480
481 return 0;
482 }
483
484 DWORD
485 APIENTRY
486 NtUserUpdateInstance(
487 DWORD Unknown0,
488 DWORD Unknown1,
489 DWORD Unknown2)
490 {
491 STUB
492
493 return 0;
494 }
495
496 BOOL
497 APIENTRY
498 NtUserUserHandleGrantAccess(
499 IN HANDLE hUserHandle,
500 IN HANDLE hJob,
501 IN BOOL bGrant)
502 {
503 STUB
504
505 return 0;
506 }
507
508 DWORD
509 APIENTRY
510 NtUserWaitForMsgAndEvent(
511 DWORD Unknown0)
512 {
513 STUB
514
515 return 0;
516 }
517
518 DWORD
519 APIENTRY
520 NtUserWin32PoolAllocationStats(
521 DWORD Unknown0,
522 DWORD Unknown1,
523 DWORD Unknown2,
524 DWORD Unknown3,
525 DWORD Unknown4,
526 DWORD Unknown5)
527 {
528 STUB
529
530 return 0;
531 }
532
533 DWORD
534 APIENTRY
535 NtUserYieldTask(VOID)
536 {
537 STUB
538
539 return 0;
540 }
541
542
543 DWORD
544 APIENTRY
545 NtUserCheckImeHotKey(
546 DWORD dwUnknown1,
547 DWORD dwUnknown2)
548 {
549 STUB;
550 return 0;
551 }
552
553 NTSTATUS
554 APIENTRY
555 NtUserConsoleControl(
556 IN CONSOLECONTROL ConsoleCtrl,
557 IN PVOID ConsoleCtrlInfo,
558 IN DWORD ConsoleCtrlInfoLength)
559 {
560 NTSTATUS Status = STATUS_SUCCESS;
561
562 /* Allow only Console Server to perform this operation (via CSRSS) */
563 if (gpepCSRSS != PsGetCurrentProcess())
564 return STATUS_ACCESS_DENIED;
565
566 UserEnterExclusive();
567
568 switch (ConsoleCtrl)
569 {
570 case GuiConsoleWndClassAtom:
571 {
572 _SEH2_TRY
573 {
574 ProbeForRead(ConsoleCtrlInfo, ConsoleCtrlInfoLength, 1);
575 ASSERT(ConsoleCtrlInfoLength == sizeof(ATOM));
576 gaGuiConsoleWndClass = *(ATOM*)ConsoleCtrlInfo;
577 }
578 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
579 {
580 Status = _SEH2_GetExceptionCode();
581 }
582 _SEH2_END;
583
584 break;
585 }
586
587 case TuiConsoleWndClassAtom:
588 {
589 _SEH2_TRY
590 {
591 ProbeForRead(ConsoleCtrlInfo, ConsoleCtrlInfoLength, 1);
592 ASSERT(ConsoleCtrlInfoLength == sizeof(ATOM));
593 gaTuiConsoleWndClass = *(ATOM*)ConsoleCtrlInfo;
594 }
595 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
596 {
597 Status = _SEH2_GetExceptionCode();
598 }
599 _SEH2_END;
600
601 break;
602 }
603
604 default:
605 ERR("Calling invalid control %lu in NtUserConsoleControl\n", ConsoleCtrl);
606 Status = STATUS_INVALID_INFO_CLASS;
607 break;
608 }
609
610 UserLeave();
611
612 return Status;
613 }
614
615 DWORD
616 APIENTRY
617 NtUserCreateInputContext(
618 DWORD dwUnknown1)
619 {
620 STUB;
621 return 0;
622 }
623
624 DWORD
625 APIENTRY
626 NtUserDestroyInputContext(
627 DWORD dwUnknown1)
628 {
629 STUB;
630 return 0;
631 }
632
633 DWORD
634 APIENTRY
635 NtUserDisableThreadIme(
636 DWORD dwUnknown1)
637 {
638 STUB;
639 return 0;
640 }
641
642 DWORD
643 APIENTRY
644 NtUserGetAppImeLevel(
645 DWORD dwUnknown1)
646 {
647 STUB;
648 return 0;
649 }
650
651 DWORD
652 APIENTRY
653 NtUserGetImeInfoEx(
654 DWORD dwUnknown1,
655 DWORD dwUnknown2)
656 {
657 STUB;
658 return 0;
659 }
660
661 DWORD
662 APIENTRY
663 NtUserGetRawInputBuffer(
664 PRAWINPUT pData,
665 PUINT pcbSize,
666 UINT cbSizeHeader)
667 {
668 STUB;
669 return 0;
670 }
671
672 DWORD
673 APIENTRY
674 NtUserGetRawInputData(
675 HRAWINPUT hRawInput,
676 UINT uiCommand,
677 LPVOID pData,
678 PUINT pcbSize,
679 UINT cbSizeHeader)
680 {
681 STUB;
682 return 0;
683 }
684
685 DWORD
686 APIENTRY
687 NtUserGetRawInputDeviceInfo(
688 HANDLE hDevice,
689 UINT uiCommand,
690 LPVOID pData,
691 PUINT pcbSize
692 )
693 {
694 STUB;
695 return 0;
696 }
697
698 DWORD
699 APIENTRY
700 NtUserGetRawInputDeviceList(
701 PRAWINPUTDEVICELIST pRawInputDeviceList,
702 PUINT puiNumDevices,
703 UINT cbSize)
704 {
705 STUB;
706 return 0;
707 }
708
709 DWORD
710 APIENTRY
711 NtUserGetRegisteredRawInputDevices(
712 PRAWINPUTDEVICE pRawInputDevices,
713 PUINT puiNumDevices,
714 UINT cbSize)
715 {
716 STUB;
717 return 0;
718 }
719
720 DWORD
721 APIENTRY
722 NtUserHardErrorControl(
723 DWORD dwUnknown1,
724 DWORD dwUnknown2,
725 DWORD dwUnknown3)
726 {
727 STUB;
728 return 0;
729 }
730
731 DWORD
732 APIENTRY
733 NtUserNotifyProcessCreate(
734 DWORD dwUnknown1,
735 DWORD dwUnknown2,
736 DWORD dwUnknown3,
737 DWORD dwUnknown4)
738 {
739 STUB;
740 return 0;
741 }
742
743 NTSTATUS
744 APIENTRY
745 NtUserProcessConnect(
746 HANDLE Process,
747 PUSERCONNECT pUserConnect,
748 DWORD Size)
749 {
750 NTSTATUS Status = STATUS_SUCCESS;
751 TRACE("NtUserProcessConnect\n");
752 if (pUserConnect && ( Size == sizeof(USERCONNECT) ))
753 {
754 PPROCESSINFO W32Process;
755 UserEnterShared();
756 GetW32ThreadInfo();
757 W32Process = PsGetCurrentProcessWin32Process();
758 _SEH2_TRY
759 {
760 pUserConnect->siClient.psi = gpsi;
761 pUserConnect->siClient.aheList = gHandleTable;
762 pUserConnect->siClient.ulSharedDelta = (ULONG_PTR)W32Process->HeapMappings.KernelMapping -
763 (ULONG_PTR)W32Process->HeapMappings.UserMapping;
764 }
765 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
766 {
767 Status = _SEH2_GetExceptionCode();
768 }
769 _SEH2_END
770 if (!NT_SUCCESS(Status))
771 {
772 SetLastNtError(Status);
773 }
774 UserLeave();
775 return Status;
776 }
777 return STATUS_UNSUCCESSFUL;
778 }
779
780 DWORD
781 APIENTRY
782 NtUserQueryInformationThread(
783 DWORD dwUnknown1,
784 DWORD dwUnknown2,
785 DWORD dwUnknown3,
786 DWORD dwUnknown4,
787 DWORD dwUnknown5)
788 {
789 STUB;
790 return 0;
791 }
792
793 DWORD
794 APIENTRY
795 NtUserQueryInputContext(
796 DWORD dwUnknown1,
797 DWORD dwUnknown2)
798 {
799 STUB;
800 return 0;
801 }
802
803 BOOL
804 APIENTRY
805 NtUserRealInternalGetMessage(
806 LPMSG lpMsg,
807 HWND hWnd,
808 UINT wMsgFilterMin,
809 UINT wMsgFilterMax,
810 UINT wRemoveMsg,
811 BOOL bGMSG)
812 {
813 STUB;
814 return 0;
815 }
816
817 BOOL
818 APIENTRY
819 NtUserRealWaitMessageEx(
820 DWORD dwWakeMask,
821 UINT uTimeout)
822 {
823 STUB;
824 return 0;
825 }
826
827 BOOL
828 APIENTRY
829 NtUserRegisterRawInputDevices(
830 IN PCRAWINPUTDEVICE pRawInputDevices,
831 IN UINT uiNumDevices,
832 IN UINT cbSize)
833 {
834 STUB;
835 return 0;
836 }
837
838 DWORD
839 APIENTRY
840 NtUserResolveDesktop(
841 DWORD dwUnknown1,
842 DWORD dwUnknown2,
843 DWORD dwUnknown3,
844 DWORD dwUnknown4)
845 {
846 STUB;
847 return 0;
848 }
849
850 DWORD
851 APIENTRY
852 NtUserSetAppImeLevel(
853 DWORD dwUnknown1,
854 DWORD dwUnknown2)
855 {
856 STUB;
857 return 0;
858 }
859
860 DWORD
861 APIENTRY
862 NtUserSetImeInfoEx(
863 DWORD dwUnknown1)
864 {
865 STUB;
866 return 0;
867 }
868
869 DWORD
870 APIENTRY
871 NtUserSetInformationProcess(
872 DWORD dwUnknown1,
873 DWORD dwUnknown2,
874 DWORD dwUnknown3,
875 DWORD dwUnknown4)
876 {
877 STUB;
878 return 0;
879 }
880
881 NTSTATUS
882 APIENTRY
883 NtUserSetInformationThread(IN HANDLE ThreadHandle,
884 IN USERTHREADINFOCLASS ThreadInformationClass,
885 IN PVOID ThreadInformation,
886 IN ULONG ThreadInformationLength)
887
888 {
889 if (ThreadInformationClass == UserThreadInitiateShutdown)
890 {
891 ERR("Shutdown initiated\n");
892 }
893 else if (ThreadInformationClass == UserThreadEndShutdown)
894 {
895 ERR("Shutdown ended\n");
896 }
897 else
898 {
899 STUB;
900 }
901
902 return STATUS_SUCCESS;
903 }
904
905 DWORD
906 APIENTRY
907 NtUserSetThreadLayoutHandles(
908 DWORD dwUnknown1,
909 DWORD dwUnknown2)
910 {
911 STUB;
912 return 0;
913 }
914
915 BOOL
916 APIENTRY
917 NtUserSoundSentry(VOID)
918 {
919 STUB;
920 return 0;
921 }
922
923 DWORD
924 APIENTRY
925 NtUserTestForInteractiveUser(
926 DWORD dwUnknown1)
927 {
928 STUB;
929 return 0;
930 }
931
932 /* http://www.cyber-ta.org/releases/malware-analysis/public/SOURCES/b47155634ccb2c30630da7e3666d3d07/b47155634ccb2c30630da7e3666d3d07.trace.html#NtUserGetIconSize */
933 DWORD
934 APIENTRY
935 NtUserCalcMenuBar(
936 DWORD dwUnknown1,
937 DWORD dwUnknown2,
938 DWORD dwUnknown3,
939 DWORD dwUnknown4,
940 DWORD dwUnknown5)
941 {
942 STUB;
943 return 0;
944 }
945
946 DWORD
947 APIENTRY
948 NtUserPaintMenuBar(
949 DWORD dwUnknown1,
950 DWORD dwUnknown2,
951 DWORD dwUnknown3,
952 DWORD dwUnknown4,
953 DWORD dwUnknown5,
954 DWORD dwUnknown6)
955 {
956 STUB;
957 return 0;
958 }
959
960
961 DWORD
962 APIENTRY
963 NtUserRemoteConnect(
964 DWORD dwUnknown1,
965 DWORD dwUnknown2,
966 DWORD dwUnknown3)
967 {
968 STUB;
969 return 0;
970 }
971
972 DWORD
973 APIENTRY
974 NtUserRemoteRedrawRectangle(
975 DWORD dwUnknown1,
976 DWORD dwUnknown2,
977 DWORD dwUnknown3,
978 DWORD dwUnknown4)
979 {
980 STUB;
981 return 0;
982 }
983
984 DWORD
985 APIENTRY
986 NtUserRemoteRedrawScreen(VOID)
987 {
988 STUB;
989 return 0;
990 }
991
992 DWORD
993 APIENTRY
994 NtUserRemoteStopScreenUpdates(VOID)
995 {
996 STUB;
997 return 0;
998 }
999
1000 DWORD
1001 APIENTRY
1002 NtUserCtxDisplayIOCtl(
1003 DWORD dwUnknown1,
1004 DWORD dwUnknown2,
1005 DWORD dwUnknown3)
1006 {
1007 STUB;
1008 return 0;
1009 }
1010
1011 /*
1012 * @unimplemented
1013 */
1014 DWORD
1015 APIENTRY
1016 NtUserDrawMenuBarTemp(
1017 HWND hWnd,
1018 HDC hDC,
1019 PRECT hRect,
1020 HMENU hMenu,
1021 HFONT hFont)
1022 {
1023 /* We'll use this function just for caching the menu bar */
1024 STUB
1025 return 0;
1026 }
1027
1028 /*
1029 * FillWindow: Called from User; Dialog, Edit and ListBox procs during a WM_ERASEBKGND.
1030 */
1031 /*
1032 * @unimplemented
1033 */
1034 BOOL APIENTRY
1035 NtUserFillWindow(HWND hWndPaint,
1036 HWND hWndPaint1,
1037 HDC hDC,
1038 HBRUSH hBrush)
1039 {
1040 STUB
1041
1042 return 0;
1043 }
1044
1045 /*
1046 * @unimplemented
1047 */
1048 BOOL APIENTRY
1049 NtUserLockWindowUpdate(HWND hWnd)
1050 {
1051 STUB
1052
1053 return 0;
1054 }
1055
1056 /*
1057 * @unimplemented
1058 */
1059 DWORD APIENTRY
1060 NtUserSetImeOwnerWindow(DWORD Unknown0,
1061 DWORD Unknown1)
1062 {
1063 STUB
1064
1065 return 0;
1066 }
1067
1068 BOOL
1069 APIENTRY
1070 NtUserGetLayeredWindowAttributes(
1071 HWND hwnd,
1072 COLORREF *pcrKey,
1073 BYTE *pbAlpha,
1074 DWORD *pdwFlags)
1075 {
1076 STUB;
1077 return 0;
1078 }
1079
1080 /*
1081 * @unimplemented
1082 */
1083 BOOL APIENTRY
1084 NtUserSetLayeredWindowAttributes(HWND hwnd,
1085 COLORREF crKey,
1086 BYTE bAlpha,
1087 DWORD dwFlags)
1088 {
1089 STUB;
1090 return FALSE;
1091 }
1092
1093 /*
1094 * @unimplemented
1095 */
1096 BOOL
1097 APIENTRY
1098 NtUserUpdateLayeredWindow(
1099 HWND hwnd,
1100 HDC hdcDst,
1101 POINT *pptDst,
1102 SIZE *psize,
1103 HDC hdcSrc,
1104 POINT *pptSrc,
1105 COLORREF crKey,
1106 BLENDFUNCTION *pblend,
1107 DWORD dwFlags,
1108 RECT *prcDirty)
1109 {
1110 STUB
1111
1112 return 0;
1113 }
1114
1115 /*
1116 * @unimplemented
1117 */
1118 HWND APIENTRY
1119 NtUserWindowFromPhysicalPoint(POINT Point)
1120 {
1121 STUB
1122
1123 return NULL;
1124 }
1125
1126 /*
1127 * NtUserResolveDesktopForWOW
1128 *
1129 * Status
1130 * @unimplemented
1131 */
1132
1133 DWORD APIENTRY
1134 NtUserResolveDesktopForWOW(DWORD Unknown0)
1135 {
1136 STUB
1137 return 0;
1138 }
1139
1140 /*
1141 * @unimplemented
1142 */
1143 BOOL APIENTRY
1144 NtUserEndMenu(VOID)
1145 {
1146 STUB
1147
1148 return 0;
1149 }
1150
1151 /*
1152 * @implemented
1153 */
1154 /* NOTE: unused function */
1155 BOOL APIENTRY
1156 NtUserTrackPopupMenuEx(
1157 HMENU hMenu,
1158 UINT fuFlags,
1159 int x,
1160 int y,
1161 HWND hWnd,
1162 LPTPMPARAMS lptpm)
1163 {
1164 STUB
1165
1166 return FALSE;
1167 }
1168
1169 DWORD APIENTRY
1170 NtUserQuerySendMessage(DWORD Unknown0)
1171 {
1172 STUB;
1173
1174 return 0;
1175 }
1176
1177 /*
1178 * @unimplemented
1179 */
1180 DWORD APIENTRY
1181 NtUserAlterWindowStyle(DWORD Unknown0,
1182 DWORD Unknown1,
1183 DWORD Unknown2)
1184 {
1185 STUB
1186
1187 return(0);
1188 }
1189
1190 /*
1191 * NtUserSetWindowStationUser
1192 *
1193 * Status
1194 * @unimplemented
1195 */
1196
1197 DWORD APIENTRY
1198 NtUserSetWindowStationUser(
1199 DWORD Unknown0,
1200 DWORD Unknown1,
1201 DWORD Unknown2,
1202 DWORD Unknown3)
1203 {
1204 STUB
1205
1206 return 0;
1207 }
1208
1209 BOOL APIENTRY NtUserAddClipboardFormatListener(
1210 HWND hwnd
1211 )
1212 {
1213 STUB;
1214 return FALSE;
1215 }
1216
1217 BOOL APIENTRY NtUserRemoveClipboardFormatListener(
1218 HWND hwnd
1219 )
1220 {
1221 STUB;
1222 return FALSE;
1223 }
1224
1225 BOOL APIENTRY NtUserGetUpdatedClipboardFormats(
1226 PUINT lpuiFormats,
1227 UINT cFormats,
1228 PUINT pcFormatsOut
1229 )
1230 {
1231 STUB;
1232 return FALSE;
1233 }
1234
1235 /*
1236 * @unimplemented
1237 */
1238 HCURSOR
1239 NTAPI
1240 NtUserGetCursorFrameInfo(
1241 HCURSOR hCursor,
1242 DWORD istep,
1243 PDWORD rate_jiffies,
1244 INT *num_steps)
1245 {
1246 STUB
1247
1248 return 0;
1249 }
1250
1251 /*
1252 * @unimplemented
1253 */
1254 BOOL
1255 APIENTRY
1256 NtUserSetSystemCursor(
1257 HCURSOR hcur,
1258 DWORD id)
1259 {
1260 return FALSE;
1261 }
1262
1263 /* EOF */