Sync with trunk r58740.
[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 ConsoleAcquireDisplayOwnership:
588 {
589 break;
590 }
591
592 default:
593 ERR("Calling invalid control %lu in NtUserConsoleControl\n", ConsoleCtrl);
594 Status = STATUS_INVALID_INFO_CLASS;
595 break;
596 }
597
598 UserLeave();
599
600 return Status;
601 }
602
603 DWORD
604 APIENTRY
605 NtUserCreateInputContext(
606 DWORD dwUnknown1)
607 {
608 STUB;
609 return 0;
610 }
611
612 DWORD
613 APIENTRY
614 NtUserDestroyInputContext(
615 DWORD dwUnknown1)
616 {
617 STUB;
618 return 0;
619 }
620
621 DWORD
622 APIENTRY
623 NtUserDisableThreadIme(
624 DWORD dwUnknown1)
625 {
626 STUB;
627 return 0;
628 }
629
630 DWORD
631 APIENTRY
632 NtUserGetAppImeLevel(
633 DWORD dwUnknown1)
634 {
635 STUB;
636 return 0;
637 }
638
639 DWORD
640 APIENTRY
641 NtUserGetImeInfoEx(
642 DWORD dwUnknown1,
643 DWORD dwUnknown2)
644 {
645 STUB;
646 return 0;
647 }
648
649 DWORD
650 APIENTRY
651 NtUserGetRawInputBuffer(
652 PRAWINPUT pData,
653 PUINT pcbSize,
654 UINT cbSizeHeader)
655 {
656 STUB;
657 return 0;
658 }
659
660 DWORD
661 APIENTRY
662 NtUserGetRawInputData(
663 HRAWINPUT hRawInput,
664 UINT uiCommand,
665 LPVOID pData,
666 PUINT pcbSize,
667 UINT cbSizeHeader)
668 {
669 STUB;
670 return 0;
671 }
672
673 DWORD
674 APIENTRY
675 NtUserGetRawInputDeviceInfo(
676 HANDLE hDevice,
677 UINT uiCommand,
678 LPVOID pData,
679 PUINT pcbSize
680 )
681 {
682 STUB;
683 return 0;
684 }
685
686 DWORD
687 APIENTRY
688 NtUserGetRawInputDeviceList(
689 PRAWINPUTDEVICELIST pRawInputDeviceList,
690 PUINT puiNumDevices,
691 UINT cbSize)
692 {
693 STUB;
694 return 0;
695 }
696
697 DWORD
698 APIENTRY
699 NtUserGetRegisteredRawInputDevices(
700 PRAWINPUTDEVICE pRawInputDevices,
701 PUINT puiNumDevices,
702 UINT cbSize)
703 {
704 STUB;
705 return 0;
706 }
707
708 DWORD
709 APIENTRY
710 NtUserHardErrorControl(
711 DWORD dwUnknown1,
712 DWORD dwUnknown2,
713 DWORD dwUnknown3)
714 {
715 STUB;
716 return 0;
717 }
718
719 DWORD
720 APIENTRY
721 NtUserNotifyProcessCreate(
722 DWORD dwUnknown1,
723 DWORD dwUnknown2,
724 DWORD dwUnknown3,
725 DWORD dwUnknown4)
726 {
727 STUB;
728 return 0;
729 }
730
731 NTSTATUS
732 APIENTRY
733 NtUserProcessConnect(
734 HANDLE Process,
735 PUSERCONNECT pUserConnect,
736 DWORD Size)
737 {
738 NTSTATUS Status = STATUS_SUCCESS;
739 TRACE("NtUserProcessConnect\n");
740 if (pUserConnect && ( Size == sizeof(USERCONNECT) ))
741 {
742 PPROCESSINFO W32Process;
743 UserEnterShared();
744 GetW32ThreadInfo();
745 W32Process = PsGetCurrentProcessWin32Process();
746 _SEH2_TRY
747 {
748 pUserConnect->siClient.psi = gpsi;
749 pUserConnect->siClient.aheList = gHandleTable;
750 pUserConnect->siClient.ulSharedDelta = (ULONG_PTR)W32Process->HeapMappings.KernelMapping -
751 (ULONG_PTR)W32Process->HeapMappings.UserMapping;
752 }
753 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
754 {
755 Status = _SEH2_GetExceptionCode();
756 }
757 _SEH2_END
758 if (!NT_SUCCESS(Status))
759 {
760 SetLastNtError(Status);
761 }
762 UserLeave();
763 return Status;
764 }
765 return STATUS_UNSUCCESSFUL;
766 }
767
768 DWORD
769 APIENTRY
770 NtUserQueryInformationThread(
771 DWORD dwUnknown1,
772 DWORD dwUnknown2,
773 DWORD dwUnknown3,
774 DWORD dwUnknown4,
775 DWORD dwUnknown5)
776 {
777 STUB;
778 return 0;
779 }
780
781 DWORD
782 APIENTRY
783 NtUserQueryInputContext(
784 DWORD dwUnknown1,
785 DWORD dwUnknown2)
786 {
787 STUB;
788 return 0;
789 }
790
791 BOOL
792 APIENTRY
793 NtUserRealInternalGetMessage(
794 LPMSG lpMsg,
795 HWND hWnd,
796 UINT wMsgFilterMin,
797 UINT wMsgFilterMax,
798 UINT wRemoveMsg,
799 BOOL bGMSG)
800 {
801 STUB;
802 return 0;
803 }
804
805 BOOL
806 APIENTRY
807 NtUserRealWaitMessageEx(
808 DWORD dwWakeMask,
809 UINT uTimeout)
810 {
811 STUB;
812 return 0;
813 }
814
815 BOOL
816 APIENTRY
817 NtUserRegisterRawInputDevices(
818 IN PCRAWINPUTDEVICE pRawInputDevices,
819 IN UINT uiNumDevices,
820 IN UINT cbSize)
821 {
822 STUB;
823 return 0;
824 }
825
826 DWORD
827 APIENTRY
828 NtUserResolveDesktop(
829 DWORD dwUnknown1,
830 DWORD dwUnknown2,
831 DWORD dwUnknown3,
832 DWORD dwUnknown4)
833 {
834 STUB;
835 return 0;
836 }
837
838 DWORD
839 APIENTRY
840 NtUserSetAppImeLevel(
841 DWORD dwUnknown1,
842 DWORD dwUnknown2)
843 {
844 STUB;
845 return 0;
846 }
847
848 DWORD
849 APIENTRY
850 NtUserSetImeInfoEx(
851 DWORD dwUnknown1)
852 {
853 STUB;
854 return 0;
855 }
856
857 DWORD
858 APIENTRY
859 NtUserSetInformationProcess(
860 DWORD dwUnknown1,
861 DWORD dwUnknown2,
862 DWORD dwUnknown3,
863 DWORD dwUnknown4)
864 {
865 STUB;
866 return 0;
867 }
868
869 NTSTATUS
870 APIENTRY
871 NtUserSetInformationThread(IN HANDLE ThreadHandle,
872 IN USERTHREADINFOCLASS ThreadInformationClass,
873 IN PVOID ThreadInformation,
874 IN ULONG ThreadInformationLength)
875
876 {
877 if (ThreadInformationClass == UserThreadInitiateShutdown)
878 {
879 ERR("Shutdown initiated\n");
880 }
881 else if (ThreadInformationClass == UserThreadEndShutdown)
882 {
883 ERR("Shutdown ended\n");
884 }
885 else
886 {
887 STUB;
888 }
889
890 return STATUS_SUCCESS;
891 }
892
893 DWORD
894 APIENTRY
895 NtUserSetThreadLayoutHandles(
896 DWORD dwUnknown1,
897 DWORD dwUnknown2)
898 {
899 STUB;
900 return 0;
901 }
902
903 BOOL
904 APIENTRY
905 NtUserSoundSentry(VOID)
906 {
907 STUB;
908 return 0;
909 }
910
911 DWORD
912 APIENTRY
913 NtUserTestForInteractiveUser(
914 DWORD dwUnknown1)
915 {
916 STUB;
917 return 0;
918 }
919
920 /* http://www.cyber-ta.org/releases/malware-analysis/public/SOURCES/b47155634ccb2c30630da7e3666d3d07/b47155634ccb2c30630da7e3666d3d07.trace.html#NtUserGetIconSize */
921 DWORD
922 APIENTRY
923 NtUserCalcMenuBar(
924 DWORD dwUnknown1,
925 DWORD dwUnknown2,
926 DWORD dwUnknown3,
927 DWORD dwUnknown4,
928 DWORD dwUnknown5)
929 {
930 STUB;
931 return 0;
932 }
933
934 DWORD
935 APIENTRY
936 NtUserPaintMenuBar(
937 DWORD dwUnknown1,
938 DWORD dwUnknown2,
939 DWORD dwUnknown3,
940 DWORD dwUnknown4,
941 DWORD dwUnknown5,
942 DWORD dwUnknown6)
943 {
944 STUB;
945 return 0;
946 }
947
948
949 DWORD
950 APIENTRY
951 NtUserRemoteConnect(
952 DWORD dwUnknown1,
953 DWORD dwUnknown2,
954 DWORD dwUnknown3)
955 {
956 STUB;
957 return 0;
958 }
959
960 DWORD
961 APIENTRY
962 NtUserRemoteRedrawRectangle(
963 DWORD dwUnknown1,
964 DWORD dwUnknown2,
965 DWORD dwUnknown3,
966 DWORD dwUnknown4)
967 {
968 STUB;
969 return 0;
970 }
971
972 DWORD
973 APIENTRY
974 NtUserRemoteRedrawScreen(VOID)
975 {
976 STUB;
977 return 0;
978 }
979
980 DWORD
981 APIENTRY
982 NtUserRemoteStopScreenUpdates(VOID)
983 {
984 STUB;
985 return 0;
986 }
987
988 DWORD
989 APIENTRY
990 NtUserCtxDisplayIOCtl(
991 DWORD dwUnknown1,
992 DWORD dwUnknown2,
993 DWORD dwUnknown3)
994 {
995 STUB;
996 return 0;
997 }
998
999 /*
1000 * @unimplemented
1001 */
1002 DWORD
1003 APIENTRY
1004 NtUserDrawMenuBarTemp(
1005 HWND hWnd,
1006 HDC hDC,
1007 PRECT hRect,
1008 HMENU hMenu,
1009 HFONT hFont)
1010 {
1011 /* We'll use this function just for caching the menu bar */
1012 STUB
1013 return 0;
1014 }
1015
1016 /*
1017 * FillWindow: Called from User; Dialog, Edit and ListBox procs during a WM_ERASEBKGND.
1018 */
1019 /*
1020 * @unimplemented
1021 */
1022 BOOL APIENTRY
1023 NtUserFillWindow(HWND hWndPaint,
1024 HWND hWndPaint1,
1025 HDC hDC,
1026 HBRUSH hBrush)
1027 {
1028 STUB
1029
1030 return 0;
1031 }
1032
1033 /*
1034 * @unimplemented
1035 */
1036 BOOL APIENTRY
1037 NtUserLockWindowUpdate(HWND hWnd)
1038 {
1039 STUB
1040
1041 return 0;
1042 }
1043
1044 /*
1045 * @unimplemented
1046 */
1047 DWORD APIENTRY
1048 NtUserSetImeOwnerWindow(DWORD Unknown0,
1049 DWORD Unknown1)
1050 {
1051 STUB
1052
1053 return 0;
1054 }
1055
1056 BOOL
1057 APIENTRY
1058 NtUserGetLayeredWindowAttributes(
1059 HWND hwnd,
1060 COLORREF *pcrKey,
1061 BYTE *pbAlpha,
1062 DWORD *pdwFlags)
1063 {
1064 STUB;
1065 return 0;
1066 }
1067
1068 /*
1069 * @unimplemented
1070 */
1071 BOOL APIENTRY
1072 NtUserSetLayeredWindowAttributes(HWND hwnd,
1073 COLORREF crKey,
1074 BYTE bAlpha,
1075 DWORD dwFlags)
1076 {
1077 STUB;
1078 return FALSE;
1079 }
1080
1081 /*
1082 * @unimplemented
1083 */
1084 BOOL
1085 APIENTRY
1086 NtUserUpdateLayeredWindow(
1087 HWND hwnd,
1088 HDC hdcDst,
1089 POINT *pptDst,
1090 SIZE *psize,
1091 HDC hdcSrc,
1092 POINT *pptSrc,
1093 COLORREF crKey,
1094 BLENDFUNCTION *pblend,
1095 DWORD dwFlags,
1096 RECT *prcDirty)
1097 {
1098 STUB
1099
1100 return 0;
1101 }
1102
1103 /*
1104 * @unimplemented
1105 */
1106 HWND APIENTRY
1107 NtUserWindowFromPhysicalPoint(POINT Point)
1108 {
1109 STUB
1110
1111 return NULL;
1112 }
1113
1114 /*
1115 * NtUserResolveDesktopForWOW
1116 *
1117 * Status
1118 * @unimplemented
1119 */
1120
1121 DWORD APIENTRY
1122 NtUserResolveDesktopForWOW(DWORD Unknown0)
1123 {
1124 STUB
1125 return 0;
1126 }
1127
1128 /*
1129 * @unimplemented
1130 */
1131 BOOL APIENTRY
1132 NtUserEndMenu(VOID)
1133 {
1134 STUB
1135
1136 return 0;
1137 }
1138
1139 /*
1140 * @implemented
1141 */
1142 /* NOTE: unused function */
1143 BOOL APIENTRY
1144 NtUserTrackPopupMenuEx(
1145 HMENU hMenu,
1146 UINT fuFlags,
1147 int x,
1148 int y,
1149 HWND hWnd,
1150 LPTPMPARAMS lptpm)
1151 {
1152 STUB
1153
1154 return FALSE;
1155 }
1156
1157 DWORD APIENTRY
1158 NtUserQuerySendMessage(DWORD Unknown0)
1159 {
1160 STUB;
1161
1162 return 0;
1163 }
1164
1165 /*
1166 * @unimplemented
1167 */
1168 DWORD APIENTRY
1169 NtUserAlterWindowStyle(DWORD Unknown0,
1170 DWORD Unknown1,
1171 DWORD Unknown2)
1172 {
1173 STUB
1174
1175 return(0);
1176 }
1177
1178 /*
1179 * NtUserSetWindowStationUser
1180 *
1181 * Status
1182 * @unimplemented
1183 */
1184
1185 DWORD APIENTRY
1186 NtUserSetWindowStationUser(
1187 DWORD Unknown0,
1188 DWORD Unknown1,
1189 DWORD Unknown2,
1190 DWORD Unknown3)
1191 {
1192 STUB
1193
1194 return 0;
1195 }
1196
1197 BOOL APIENTRY NtUserAddClipboardFormatListener(
1198 HWND hwnd
1199 )
1200 {
1201 STUB;
1202 return FALSE;
1203 }
1204
1205 BOOL APIENTRY NtUserRemoveClipboardFormatListener(
1206 HWND hwnd
1207 )
1208 {
1209 STUB;
1210 return FALSE;
1211 }
1212
1213 BOOL APIENTRY NtUserGetUpdatedClipboardFormats(
1214 PUINT lpuiFormats,
1215 UINT cFormats,
1216 PUINT pcFormatsOut
1217 )
1218 {
1219 STUB;
1220 return FALSE;
1221 }
1222
1223 /*
1224 * @unimplemented
1225 */
1226 HCURSOR
1227 NTAPI
1228 NtUserGetCursorFrameInfo(
1229 HCURSOR hCursor,
1230 DWORD istep,
1231 PDWORD rate_jiffies,
1232 INT *num_steps)
1233 {
1234 STUB
1235
1236 return 0;
1237 }
1238
1239 /*
1240 * @unimplemented
1241 */
1242 BOOL
1243 APIENTRY
1244 NtUserSetSystemCursor(
1245 HCURSOR hcur,
1246 DWORD id)
1247 {
1248 return FALSE;
1249 }
1250
1251 /* EOF */