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