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