[CMAKE]
[reactos.git] / subsystems / win32 / win32k / ntuser / ntstubs.c
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS kernel
4 * PURPOSE: Native User stubs
5 * FILE: subsys/win32k/ntuser/stubs.c
6 * PROGRAMER: Casper S. Hornstrup (chorns@users.sourceforge.net)
7 * REVISION HISTORY:
8 * 04-06-2001 CSH Created
9 */
10 #include <win32k.h>
11
12 #define NDEBUG
13 #include <debug.h>
14
15 DWORD
16 APIENTRY
17 NtUserAssociateInputContext(
18 DWORD dwUnknown1,
19 DWORD dwUnknown2,
20 DWORD dwUnknown3)
21 {
22 UNIMPLEMENTED
23 return 0;
24 }
25
26
27 BOOL
28 APIENTRY
29 NtUserAttachThreadInput(
30 IN DWORD idAttach,
31 IN DWORD idAttachTo,
32 IN BOOL fAttach)
33 {
34 NTSTATUS Status;
35 PETHREAD Thread, ThreadTo;
36 PTHREADINFO pti, ptiTo;
37 BOOL Ret = FALSE;
38
39 UserEnterExclusive();
40 Status = PsLookupThreadByThreadId((HANDLE)idAttach, &Thread);
41 if (!NT_SUCCESS(Status))
42 {
43 EngSetLastError(ERROR_INVALID_PARAMETER);
44 goto Exit;
45 }
46 Status = PsLookupThreadByThreadId((HANDLE)idAttachTo, &ThreadTo);
47 if (!NT_SUCCESS(Status))
48 {
49 EngSetLastError(ERROR_INVALID_PARAMETER);
50 ObDereferenceObject(Thread);
51 goto Exit;
52 }
53
54 pti = PsGetThreadWin32Thread(Thread);
55 ptiTo = PsGetThreadWin32Thread(ThreadTo);
56 ObDereferenceObject(Thread);
57 ObDereferenceObject(ThreadTo);
58
59 Ret = UserAttachThreadInput( pti, ptiTo, fAttach);
60
61 Exit:
62 UserLeave();
63 return Ret;
64 }
65
66 //
67 // Works like BitBlt, http://msdn.microsoft.com/en-us/library/ms532278(VS.85).aspx
68 //
69 BOOL
70 APIENTRY
71 NtUserBitBltSysBmp(
72 HDC hdc,
73 INT nXDest,
74 INT nYDest,
75 INT nWidth,
76 INT nHeight,
77 INT nXSrc,
78 INT nYSrc,
79 DWORD dwRop )
80 {
81 BOOL Ret = FALSE;
82 UserEnterExclusive();
83
84 Ret = NtGdiBitBlt( hdc,
85 nXDest,
86 nYDest,
87 nWidth,
88 nHeight,
89 hSystemBM,
90 nXSrc,
91 nYSrc,
92 dwRop,
93 0,
94 0);
95
96 UserLeave();
97 return Ret;
98 }
99
100 DWORD
101 APIENTRY
102 NtUserBuildHimcList(
103 DWORD dwUnknown1,
104 DWORD dwUnknown2,
105 DWORD dwUnknown3,
106 DWORD dwUnknown4)
107 {
108 UNIMPLEMENTED;
109 return 0;
110 }
111
112 DWORD
113 APIENTRY
114 NtUserConvertMemHandle(
115 DWORD Unknown0,
116 DWORD Unknown1)
117 {
118 UNIMPLEMENTED
119
120 return 0;
121 }
122
123 DWORD
124 APIENTRY
125 NtUserCreateLocalMemHandle(
126 DWORD Unknown0,
127 DWORD Unknown1,
128 DWORD Unknown2,
129 DWORD Unknown3)
130 {
131 UNIMPLEMENTED
132
133 return 0;
134 }
135
136 BOOL
137 APIENTRY
138 NtUserDdeGetQualityOfService(
139 IN HWND hwndClient,
140 IN HWND hWndServer,
141 OUT PSECURITY_QUALITY_OF_SERVICE pqosPrev)
142 {
143 UNIMPLEMENTED
144
145 return 0;
146 }
147
148 DWORD
149 APIENTRY
150 NtUserDdeInitialize(
151 DWORD Unknown0,
152 DWORD Unknown1,
153 DWORD Unknown2,
154 DWORD Unknown3,
155 DWORD Unknown4)
156 {
157 UNIMPLEMENTED
158
159 return 0;
160 }
161
162 BOOL
163 APIENTRY
164 NtUserDdeSetQualityOfService(
165 IN HWND hwndClient,
166 IN PSECURITY_QUALITY_OF_SERVICE pqosNew,
167 OUT PSECURITY_QUALITY_OF_SERVICE pqosPrev)
168 {
169 UNIMPLEMENTED
170
171 return 0;
172 }
173
174 DWORD
175 APIENTRY
176 NtUserDragObject(
177 HWND hwnd1,
178 HWND hwnd2,
179 UINT u1,
180 DWORD dw1,
181 HCURSOR hc1
182 )
183 {
184 UNIMPLEMENTED
185
186 return 0;
187 }
188
189 BOOL
190 APIENTRY
191 NtUserDrawAnimatedRects(
192 HWND hwnd,
193 INT idAni,
194 RECT *lprcFrom,
195 RECT *lprcTo)
196 {
197 UNIMPLEMENTED
198
199 return 0;
200 }
201
202 DWORD
203 APIENTRY
204 NtUserEvent(
205 DWORD Unknown0)
206 {
207 UNIMPLEMENTED
208
209 return 0;
210 }
211
212 DWORD
213 APIENTRY
214 NtUserExcludeUpdateRgn(
215 HDC hDC,
216 HWND hWnd)
217 {
218 UNIMPLEMENTED
219
220 return 0;
221 }
222
223 BOOL
224 APIENTRY
225 NtUserGetAltTabInfo(
226 HWND hwnd,
227 INT iItem,
228 PALTTABINFO pati,
229 LPWSTR pszItemText,
230 UINT cchItemText,
231 BOOL Ansi)
232 {
233 UNIMPLEMENTED
234
235 return 0;
236 }
237
238 HBRUSH
239 APIENTRY
240 NtUserGetControlBrush(
241 HWND hwnd,
242 HDC hdc,
243 UINT ctlType)
244 {
245 UNIMPLEMENTED
246
247 return 0;
248 }
249
250
251 /*
252 * Called from PaintRect, works almost like wine PaintRect16 but returns hBrush.
253 */
254 HBRUSH
255 APIENTRY
256 NtUserGetControlColor(
257 HWND hwndParent,
258 HWND hwnd,
259 HDC hdc,
260 UINT CtlMsg) // Wine PaintRect: WM_CTLCOLORMSGBOX + hbrush
261 {
262 UNIMPLEMENTED
263
264 return 0;
265 }
266
267 DWORD
268 APIENTRY
269 NtUserGetImeHotKey(
270 DWORD Unknown0,
271 DWORD Unknown1,
272 DWORD Unknown2,
273 DWORD Unknown3)
274 {
275 UNIMPLEMENTED
276
277 return 0;
278 }
279
280
281 DWORD
282 APIENTRY
283 NtUserGetMouseMovePointsEx(
284 UINT cbSize,
285 LPMOUSEMOVEPOINT lppt,
286 LPMOUSEMOVEPOINT lpptBuf,
287 int nBufPoints,
288 DWORD resolution)
289 {
290 UserEnterExclusive();
291
292 if ((cbSize != sizeof(MOUSEMOVEPOINT)) || (nBufPoints < 0) || (nBufPoints > 64))
293 {
294 UserLeave();
295 EngSetLastError(ERROR_INVALID_PARAMETER);
296 return -1;
297 }
298
299 _SEH2_TRY
300 {
301 ProbeForRead(lppt, cbSize, 1);
302 ProbeForWrite(lpptBuf, cbSize, 1);
303 }
304 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
305 {
306 SetLastNtError(_SEH2_GetExceptionCode());
307 EngSetLastError(ERROR_NOACCESS);
308 }
309 _SEH2_END;
310
311 /*
312 Call a subfunction of GetMouseMovePointsEx!
313 switch(resolution)
314 {
315 case GMMP_USE_DISPLAY_POINTS:
316 case GMMP_USE_HIGH_RESOLUTION_POINTS:
317 break;
318 default:
319 EngSetLastError(GMMP_ERR_POINT_NOT_FOUND);
320 return GMMP_ERR_POINT_NOT_FOUND;
321 }
322 */
323 UNIMPLEMENTED
324 UserLeave();
325 return -1;
326 }
327
328
329
330 BOOL
331 APIENTRY
332 NtUserImpersonateDdeClientWindow(
333 HWND hWndClient,
334 HWND hWndServer)
335 {
336 UNIMPLEMENTED
337
338 return 0;
339 }
340
341 NTSTATUS
342 APIENTRY
343 NtUserInitializeClientPfnArrays(
344 PPFNCLIENT pfnClientA,
345 PPFNCLIENT pfnClientW,
346 PPFNCLIENTWORKER pfnClientWorker,
347 HINSTANCE hmodUser)
348 {
349 NTSTATUS Status = STATUS_SUCCESS;
350 DPRINT("Enter NtUserInitializeClientPfnArrays User32 0x%x\n",hmodUser);
351
352 if (ClientPfnInit) return Status;
353
354 UserEnterExclusive();
355
356 _SEH2_TRY
357 {
358 ProbeForRead( pfnClientA, sizeof(PFNCLIENT), 1);
359 ProbeForRead( pfnClientW, sizeof(PFNCLIENT), 1);
360 ProbeForRead( pfnClientWorker, sizeof(PFNCLIENTWORKER), 1);
361 RtlCopyMemory(&gpsi->apfnClientA, pfnClientA, sizeof(PFNCLIENT));
362 RtlCopyMemory(&gpsi->apfnClientW, pfnClientW, sizeof(PFNCLIENT));
363 RtlCopyMemory(&gpsi->apfnClientWorker, pfnClientWorker, sizeof(PFNCLIENTWORKER));
364
365 //// FIXME! HAX! Temporary until server side is finished.
366 //// Copy the client side procs for now.
367 RtlCopyMemory(&gpsi->aStoCidPfn, pfnClientW, sizeof(gpsi->aStoCidPfn));
368
369 hModClient = hmodUser;
370 ClientPfnInit = TRUE;
371 }
372 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
373 {
374 Status =_SEH2_GetExceptionCode();
375 }
376 _SEH2_END
377
378 if (!NT_SUCCESS(Status))
379 {
380 DPRINT1("Failed reading Client Pfns from user space.\n");
381 SetLastNtError(Status);
382 }
383
384 UserLeave();
385 return Status;
386 }
387
388 DWORD
389 APIENTRY
390 NtUserInitTask(
391 DWORD Unknown0,
392 DWORD Unknown1,
393 DWORD Unknown2,
394 DWORD Unknown3,
395 DWORD Unknown4,
396 DWORD Unknown5,
397 DWORD Unknown6,
398 DWORD Unknown7,
399 DWORD Unknown8,
400 DWORD Unknown9,
401 DWORD Unknown10,
402 DWORD Unknown11)
403 {
404 UNIMPLEMENTED
405
406 return 0;
407 }
408
409 BOOL
410 APIENTRY
411 NtUserLockWorkStation(VOID)
412 {
413 UNIMPLEMENTED
414
415 return 0;
416 }
417
418 DWORD
419 APIENTRY
420 NtUserMNDragLeave(VOID)
421 {
422 UNIMPLEMENTED
423
424 return 0;
425 }
426
427 DWORD
428 APIENTRY
429 NtUserMNDragOver(
430 DWORD Unknown0,
431 DWORD Unknown1)
432 {
433 UNIMPLEMENTED
434
435 return 0;
436 }
437
438 DWORD
439 APIENTRY
440 NtUserModifyUserStartupInfoFlags(
441 DWORD Unknown0,
442 DWORD Unknown1)
443 {
444 UNIMPLEMENTED
445
446 return 0;
447 }
448
449 DWORD
450 APIENTRY
451 NtUserNotifyIMEStatus(
452 DWORD Unknown0,
453 DWORD Unknown1,
454 DWORD Unknown2)
455 {
456 UNIMPLEMENTED
457
458 return 0;
459 }
460
461 DWORD
462 APIENTRY
463 NtUserQueryUserCounters(
464 DWORD Unknown0,
465 DWORD Unknown1,
466 DWORD Unknown2,
467 DWORD Unknown3,
468 DWORD Unknown4)
469 {
470 UNIMPLEMENTED
471
472 return 0;
473 }
474
475 DWORD
476 APIENTRY
477 NtUserRegisterTasklist(
478 DWORD Unknown0)
479 {
480 UNIMPLEMENTED
481
482 return 0;
483 }
484
485 DWORD
486 APIENTRY
487 NtUserSetConsoleReserveKeys(
488 DWORD Unknown0,
489 DWORD Unknown1)
490 {
491 UNIMPLEMENTED
492
493 return 0;
494 }
495
496 DWORD
497 APIENTRY
498 NtUserSetDbgTag(
499 DWORD Unknown0,
500 DWORD Unknown1)
501 {
502 UNIMPLEMENTED
503
504 return 0;
505 }
506
507 DWORD
508 APIENTRY
509 NtUserSetImeHotKey(
510 DWORD Unknown0,
511 DWORD Unknown1,
512 DWORD Unknown2,
513 DWORD Unknown3,
514 DWORD Unknown4)
515 {
516 UNIMPLEMENTED
517
518 return 0;
519 }
520
521
522 DWORD
523 APIENTRY
524 NtUserSetRipFlags(
525 DWORD Unknown0,
526 DWORD Unknown1)
527 {
528 UNIMPLEMENTED
529
530 return 0;
531 }
532
533 BOOL
534 APIENTRY
535 NtUserSetSysColors(
536 int cElements,
537 IN CONST INT *lpaElements,
538 IN CONST COLORREF *lpaRgbValues,
539 FLONG Flags)
540 {
541 DWORD Ret = TRUE;
542
543 if (cElements == 0)
544 return TRUE;
545
546 /* We need this check to prevent overflow later */
547 if ((ULONG)cElements >= 0x40000000)
548 {
549 EngSetLastError(ERROR_NOACCESS);
550 return FALSE;
551 }
552
553 UserEnterExclusive();
554
555 _SEH2_TRY
556 {
557 ProbeForRead(lpaElements, cElements * sizeof(INT), 1);
558 ProbeForRead(lpaRgbValues, cElements * sizeof(COLORREF), 1);
559
560 IntSetSysColors(cElements, lpaElements, lpaRgbValues);
561 }
562 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
563 {
564 SetLastNtError(_SEH2_GetExceptionCode());
565 Ret = FALSE;
566 }
567 _SEH2_END;
568
569 if (Ret)
570 {
571 UserSendNotifyMessage(HWND_BROADCAST, WM_SYSCOLORCHANGE, 0, 0);
572 }
573
574 UserLeave();
575 return Ret;
576 }
577
578 DWORD
579 APIENTRY
580 NtUserSetThreadState(
581 DWORD Unknown0,
582 DWORD Unknown1)
583 {
584 UNIMPLEMENTED
585
586 return 0;
587 }
588
589 BOOL
590 APIENTRY
591 NtUserTrackMouseEvent(
592 LPTRACKMOUSEEVENT lpEventTrack)
593 {
594 UNIMPLEMENTED
595
596 return 0;
597 }
598
599
600 DWORD
601 APIENTRY
602 NtUserUpdateInputContext(
603 DWORD Unknown0,
604 DWORD Unknown1,
605 DWORD Unknown2)
606 {
607 UNIMPLEMENTED
608
609 return 0;
610 }
611
612 DWORD
613 APIENTRY
614 NtUserUpdateInstance(
615 DWORD Unknown0,
616 DWORD Unknown1,
617 DWORD Unknown2)
618 {
619 UNIMPLEMENTED
620
621 return 0;
622 }
623
624 BOOL
625 APIENTRY
626 NtUserUserHandleGrantAccess(
627 IN HANDLE hUserHandle,
628 IN HANDLE hJob,
629 IN BOOL bGrant)
630 {
631 UNIMPLEMENTED
632
633 return 0;
634 }
635
636 DWORD
637 APIENTRY
638 NtUserWaitForMsgAndEvent(
639 DWORD Unknown0)
640 {
641 UNIMPLEMENTED
642
643 return 0;
644 }
645
646 DWORD
647 APIENTRY
648 NtUserWin32PoolAllocationStats(
649 DWORD Unknown0,
650 DWORD Unknown1,
651 DWORD Unknown2,
652 DWORD Unknown3,
653 DWORD Unknown4,
654 DWORD Unknown5)
655 {
656 UNIMPLEMENTED
657
658 return 0;
659 }
660
661 DWORD
662 APIENTRY
663 NtUserYieldTask(VOID)
664 {
665 UNIMPLEMENTED
666
667 return 0;
668 }
669
670
671 DWORD
672 APIENTRY
673 NtUserCheckImeHotKey(
674 DWORD dwUnknown1,
675 DWORD dwUnknown2)
676 {
677 UNIMPLEMENTED;
678 return 0;
679 }
680
681 DWORD
682 APIENTRY
683 NtUserConsoleControl(
684 DWORD dwUnknown1,
685 DWORD dwUnknown2,
686 DWORD dwUnknown3)
687 {
688 UNIMPLEMENTED;
689 return 0;
690 }
691
692 DWORD
693 APIENTRY
694 NtUserCreateInputContext(
695 DWORD dwUnknown1)
696 {
697 UNIMPLEMENTED;
698 return 0;
699 }
700
701 DWORD
702 APIENTRY
703 NtUserDestroyInputContext(
704 DWORD dwUnknown1)
705 {
706 UNIMPLEMENTED;
707 return 0;
708 }
709
710 DWORD
711 APIENTRY
712 NtUserDisableThreadIme(
713 DWORD dwUnknown1)
714 {
715 UNIMPLEMENTED;
716 return 0;
717 }
718
719 DWORD
720 APIENTRY
721 NtUserGetAppImeLevel(
722 DWORD dwUnknown1)
723 {
724 UNIMPLEMENTED;
725 return 0;
726 }
727
728 DWORD
729 APIENTRY
730 NtUserGetAtomName(
731 ATOM nAtom,
732 LPWSTR lpBuffer)
733 {
734 UNIMPLEMENTED;
735 return 0;
736 }
737
738 DWORD
739 APIENTRY
740 NtUserGetImeInfoEx(
741 DWORD dwUnknown1,
742 DWORD dwUnknown2)
743 {
744 UNIMPLEMENTED;
745 return 0;
746 }
747
748 DWORD
749 APIENTRY
750 NtUserGetRawInputBuffer(
751 PRAWINPUT pData,
752 PUINT pcbSize,
753 UINT cbSizeHeader)
754 {
755 UNIMPLEMENTED;
756 return 0;
757 }
758
759 DWORD
760 APIENTRY
761 NtUserGetRawInputData(
762 HRAWINPUT hRawInput,
763 UINT uiCommand,
764 LPVOID pData,
765 PUINT pcbSize,
766 UINT cbSizeHeader)
767 {
768 UNIMPLEMENTED;
769 return 0;
770 }
771
772 DWORD
773 APIENTRY
774 NtUserGetRawInputDeviceInfo(
775 HANDLE hDevice,
776 UINT uiCommand,
777 LPVOID pData,
778 PUINT pcbSize
779 )
780 {
781 UNIMPLEMENTED;
782 return 0;
783 }
784
785 DWORD
786 APIENTRY
787 NtUserGetRawInputDeviceList(
788 PRAWINPUTDEVICELIST pRawInputDeviceList,
789 PUINT puiNumDevices,
790 UINT cbSize)
791 {
792 UNIMPLEMENTED;
793 return 0;
794 }
795
796 DWORD
797 APIENTRY
798 NtUserGetRegisteredRawInputDevices(
799 PRAWINPUTDEVICE pRawInputDevices,
800 PUINT puiNumDevices,
801 UINT cbSize)
802 {
803 UNIMPLEMENTED;
804 return 0;
805 }
806
807 DWORD
808 APIENTRY
809 NtUserHardErrorControl(
810 DWORD dwUnknown1,
811 DWORD dwUnknown2,
812 DWORD dwUnknown3)
813 {
814 UNIMPLEMENTED;
815 return 0;
816 }
817
818 DWORD
819 APIENTRY
820 NtUserMinMaximize(
821 HWND hWnd,
822 UINT cmd, // Wine SW_ commands
823 BOOL Hide)
824 {
825 RECTL NewPos;
826 UINT SwFlags;
827 PWND pWnd;
828
829 DPRINT("Enter NtUserMinMaximize\n");
830 UserEnterExclusive();
831
832 pWnd = UserGetWindowObject(hWnd);
833 if ( !pWnd || // FIXME:
834 pWnd == IntGetDesktopWindow() || // pWnd->fnid == FNID_DESKTOP
835 pWnd == IntGetMessageWindow() ) // pWnd->fnid == FNID_MESSAGEWND
836 {
837 goto Exit;
838 }
839
840 if ( cmd > SW_MAX || pWnd->state2 & WNDS2_INDESTROY)
841 {
842 EngSetLastError(ERROR_INVALID_PARAMETER);
843 goto Exit;
844 }
845
846 co_WinPosMinMaximize(pWnd, cmd, &NewPos);
847
848 SwFlags = Hide ? SWP_NOACTIVATE|SWP_NOZORDER|SWP_FRAMECHANGED : SWP_NOZORDER|SWP_FRAMECHANGED;
849
850 co_WinPosSetWindowPos( pWnd,
851 NULL,
852 NewPos.left,
853 NewPos.top,
854 NewPos.right,
855 NewPos.bottom,
856 SwFlags);
857
858 co_WinPosShowWindow(pWnd, cmd);
859
860 Exit:
861 DPRINT("Leave NtUserMinMaximize\n");
862 UserLeave();
863 return 0; // Always NULL?
864 }
865
866 DWORD
867 APIENTRY
868 NtUserNotifyProcessCreate(
869 DWORD dwUnknown1,
870 DWORD dwUnknown2,
871 DWORD dwUnknown3,
872 DWORD dwUnknown4)
873 {
874 UNIMPLEMENTED;
875 return 0;
876 }
877
878 NTSTATUS
879 APIENTRY
880 NtUserProcessConnect(
881 HANDLE Process,
882 PUSERCONNECT pUserConnect,
883 DWORD Size)
884 {
885 NTSTATUS Status = STATUS_SUCCESS;
886 DPRINT("NtUserProcessConnect\n");
887 if (pUserConnect && ( Size == sizeof(USERCONNECT) ))
888 {
889 PPROCESSINFO W32Process;
890 UserEnterShared();
891 GetW32ThreadInfo();
892 W32Process = PsGetCurrentProcessWin32Process();
893 _SEH2_TRY
894 {
895 pUserConnect->siClient.psi = gpsi;
896 pUserConnect->siClient.aheList = gHandleTable;
897 pUserConnect->siClient.ulSharedDelta = (ULONG_PTR)W32Process->HeapMappings.KernelMapping -
898 (ULONG_PTR)W32Process->HeapMappings.UserMapping;
899 }
900 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
901 {
902 Status = _SEH2_GetExceptionCode();
903 }
904 _SEH2_END
905 if (!NT_SUCCESS(Status))
906 {
907 SetLastNtError(Status);
908 }
909 UserLeave();
910 return Status;
911 }
912 return STATUS_UNSUCCESSFUL;
913 }
914
915 DWORD
916 APIENTRY
917 NtUserQueryInformationThread(
918 DWORD dwUnknown1,
919 DWORD dwUnknown2,
920 DWORD dwUnknown3,
921 DWORD dwUnknown4,
922 DWORD dwUnknown5)
923 {
924 UNIMPLEMENTED;
925 return 0;
926 }
927
928 DWORD
929 APIENTRY
930 NtUserQueryInputContext(
931 DWORD dwUnknown1,
932 DWORD dwUnknown2)
933 {
934 UNIMPLEMENTED;
935 return 0;
936 }
937
938 BOOL
939 APIENTRY
940 NtUserRealInternalGetMessage(
941 LPMSG lpMsg,
942 HWND hWnd,
943 UINT wMsgFilterMin,
944 UINT wMsgFilterMax,
945 UINT wRemoveMsg,
946 BOOL bGMSG)
947 {
948 UNIMPLEMENTED;
949 return 0;
950 }
951
952 BOOL
953 APIENTRY
954 NtUserRealWaitMessageEx(
955 DWORD dwWakeMask,
956 UINT uTimeout)
957 {
958 UNIMPLEMENTED;
959 return 0;
960 }
961
962 BOOL
963 APIENTRY
964 NtUserRegisterUserApiHook(
965 PUNICODE_STRING m_dllname1,
966 PUNICODE_STRING m_funname1,
967 DWORD dwUnknown3,
968 DWORD dwUnknown4)
969 {
970 UserEnterExclusive();
971 UNIMPLEMENTED;
972 UserLeave();
973 return 0;
974 }
975
976 BOOL
977 APIENTRY
978 NtUserRegisterRawInputDevices(
979 IN PCRAWINPUTDEVICE pRawInputDevices,
980 IN UINT uiNumDevices,
981 IN UINT cbSize)
982 {
983 UNIMPLEMENTED;
984 return 0;
985 }
986
987 DWORD
988 APIENTRY
989 NtUserResolveDesktop(
990 DWORD dwUnknown1,
991 DWORD dwUnknown2,
992 DWORD dwUnknown3,
993 DWORD dwUnknown4)
994 {
995 UNIMPLEMENTED;
996 return 0;
997 }
998
999 DWORD
1000 APIENTRY
1001 NtUserSetAppImeLevel(
1002 DWORD dwUnknown1,
1003 DWORD dwUnknown2)
1004 {
1005 UNIMPLEMENTED;
1006 return 0;
1007 }
1008
1009 DWORD
1010 APIENTRY
1011 NtUserSetImeInfoEx(
1012 DWORD dwUnknown1)
1013 {
1014 UNIMPLEMENTED;
1015 return 0;
1016 }
1017
1018 DWORD
1019 APIENTRY
1020 NtUserSetInformationProcess(
1021 DWORD dwUnknown1,
1022 DWORD dwUnknown2,
1023 DWORD dwUnknown3,
1024 DWORD dwUnknown4)
1025 {
1026 UNIMPLEMENTED;
1027 return 0;
1028 }
1029
1030 NTSTATUS
1031 APIENTRY
1032 NtUserSetInformationThread(IN HANDLE ThreadHandle,
1033 IN USERTHREADINFOCLASS ThreadInformationClass,
1034 IN PVOID ThreadInformation,
1035 IN ULONG ThreadInformationLength)
1036
1037 {
1038 if (ThreadInformationClass == UserThreadInitiateShutdown)
1039 {
1040 DPRINT1("Shutdown initiated\n");
1041 }
1042 else if (ThreadInformationClass == UserThreadEndShutdown)
1043 {
1044 DPRINT1("Shutdown ended\n");
1045 }
1046 else
1047 {
1048 UNIMPLEMENTED;
1049 }
1050
1051 return STATUS_SUCCESS;
1052 }
1053
1054 DWORD
1055 APIENTRY
1056 NtUserSetThreadLayoutHandles(
1057 DWORD dwUnknown1,
1058 DWORD dwUnknown2)
1059 {
1060 UNIMPLEMENTED;
1061 return 0;
1062 }
1063
1064 BOOL
1065 APIENTRY
1066 NtUserSoundSentry(VOID)
1067 {
1068 UNIMPLEMENTED;
1069 return 0;
1070 }
1071
1072 DWORD
1073 APIENTRY
1074 NtUserTestForInteractiveUser(
1075 DWORD dwUnknown1)
1076 {
1077 UNIMPLEMENTED;
1078 return 0;
1079 }
1080
1081 /* http://www.cyber-ta.org/releases/malware-analysis/public/SOURCES/b47155634ccb2c30630da7e3666d3d07/b47155634ccb2c30630da7e3666d3d07.trace.html#NtUserGetIconSize */
1082 DWORD
1083 APIENTRY
1084 NtUserCalcMenuBar(
1085 DWORD dwUnknown1,
1086 DWORD dwUnknown2,
1087 DWORD dwUnknown3,
1088 DWORD dwUnknown4,
1089 DWORD dwUnknown5)
1090 {
1091 UNIMPLEMENTED;
1092 return 0;
1093 }
1094
1095 DWORD
1096 APIENTRY
1097 NtUserPaintMenuBar(
1098 DWORD dwUnknown1,
1099 DWORD dwUnknown2,
1100 DWORD dwUnknown3,
1101 DWORD dwUnknown4,
1102 DWORD dwUnknown5,
1103 DWORD dwUnknown6)
1104 {
1105 UNIMPLEMENTED;
1106 return 0;
1107 }
1108
1109 BOOL
1110 APIENTRY
1111 NtUserUnregisterUserApiHook(VOID)
1112 {
1113 UNIMPLEMENTED;
1114 return 0;
1115 }
1116
1117 BOOL
1118 APIENTRY
1119 NtUserGetLayeredWindowAttributes(
1120 HWND hwnd,
1121 COLORREF *pcrKey,
1122 BYTE *pbAlpha,
1123 DWORD *pdwFlags)
1124 {
1125 UNIMPLEMENTED;
1126 return 0;
1127 }
1128
1129 BOOL
1130 APIENTRY
1131 NtUserValidateTimerCallback(
1132 HWND hWnd,
1133 WPARAM wParam,
1134 LPARAM lParam)
1135 {
1136 BOOL Ret = FALSE;
1137
1138 UserEnterShared();
1139
1140 Ret = ValidateTimerCallback(PsGetCurrentThreadWin32Thread(), lParam);
1141
1142 UserLeave();
1143 return Ret;
1144 }
1145
1146 DWORD
1147 APIENTRY
1148 NtUserRemoteConnect(
1149 DWORD dwUnknown1,
1150 DWORD dwUnknown2,
1151 DWORD dwUnknown3)
1152 {
1153 UNIMPLEMENTED;
1154 return 0;
1155 }
1156
1157 DWORD
1158 APIENTRY
1159 NtUserRemoteRedrawRectangle(
1160 DWORD dwUnknown1,
1161 DWORD dwUnknown2,
1162 DWORD dwUnknown3,
1163 DWORD dwUnknown4)
1164 {
1165 UNIMPLEMENTED;
1166 return 0;
1167 }
1168
1169 DWORD
1170 APIENTRY
1171 NtUserRemoteRedrawScreen(VOID)
1172 {
1173 UNIMPLEMENTED;
1174 return 0;
1175 }
1176
1177 DWORD
1178 APIENTRY
1179 NtUserRemoteStopScreenUpdates(VOID)
1180 {
1181 UNIMPLEMENTED;
1182 return 0;
1183 }
1184
1185 DWORD
1186 APIENTRY
1187 NtUserCtxDisplayIOCtl(
1188 DWORD dwUnknown1,
1189 DWORD dwUnknown2,
1190 DWORD dwUnknown3)
1191 {
1192 UNIMPLEMENTED;
1193 return 0;
1194 }
1195
1196 /*
1197 * @unimplemented
1198 */
1199 DWORD
1200 APIENTRY
1201 NtUserDrawMenuBarTemp(
1202 HWND hWnd,
1203 HDC hDC,
1204 PRECT hRect,
1205 HMENU hMenu,
1206 HFONT hFont)
1207 {
1208 /* we'll use this function just for caching the menu bar */
1209 UNIMPLEMENTED
1210 return 0;
1211 }
1212
1213 /*
1214 * FillWindow: Called from User; Dialog, Edit and ListBox procs during a WM_ERASEBKGND.
1215 */
1216 /*
1217 * @unimplemented
1218 */
1219 BOOL APIENTRY
1220 NtUserFillWindow(HWND hWndPaint,
1221 HWND hWndPaint1,
1222 HDC hDC,
1223 HBRUSH hBrush)
1224 {
1225 UNIMPLEMENTED
1226
1227 return 0;
1228 }
1229
1230 /*
1231 * @unimplemented
1232 */
1233 BOOL APIENTRY
1234 NtUserFlashWindowEx(IN PFLASHWINFO pfwi)
1235 {
1236 UNIMPLEMENTED
1237
1238 return 1;
1239 }
1240
1241 /*
1242 * @unimplemented
1243 */
1244 BOOL APIENTRY
1245 NtUserLockWindowUpdate(HWND hWnd)
1246 {
1247 UNIMPLEMENTED
1248
1249 return 0;
1250 }
1251
1252 /*
1253 * @unimplemented
1254 */
1255 HWND APIENTRY
1256 NtUserRealChildWindowFromPoint(HWND Parent,
1257 LONG x,
1258 LONG y)
1259 {
1260 UNIMPLEMENTED
1261
1262 return 0;
1263 }
1264
1265 /*
1266 * @unimplemented
1267 */
1268 DWORD APIENTRY
1269 NtUserSetImeOwnerWindow(DWORD Unknown0,
1270 DWORD Unknown1)
1271 {
1272 UNIMPLEMENTED
1273
1274 return 0;
1275 }
1276
1277 /*
1278 * @unimplemented
1279 */
1280 DWORD APIENTRY
1281 NtUserSetInternalWindowPos(
1282 HWND hwnd,
1283 UINT showCmd,
1284 LPRECT rect,
1285 LPPOINT pt)
1286 {
1287 UNIMPLEMENTED
1288
1289 return 0;
1290 }
1291
1292 /*
1293 * @unimplemented
1294 */
1295 BOOL APIENTRY
1296 NtUserSetLayeredWindowAttributes(HWND hwnd,
1297 COLORREF crKey,
1298 BYTE bAlpha,
1299 DWORD dwFlags)
1300 {
1301 UNIMPLEMENTED;
1302 return FALSE;
1303 }
1304
1305 /*
1306 * @unimplemented
1307 */
1308 BOOL
1309 APIENTRY
1310 NtUserUpdateLayeredWindow(
1311 HWND hwnd,
1312 HDC hdcDst,
1313 POINT *pptDst,
1314 SIZE *psize,
1315 HDC hdcSrc,
1316 POINT *pptSrc,
1317 COLORREF crKey,
1318 BLENDFUNCTION *pblend,
1319 DWORD dwFlags,
1320 RECT *prcDirty)
1321 {
1322 UNIMPLEMENTED
1323
1324 return 0;
1325 }
1326
1327 /*
1328 * @unimplemented
1329 */
1330 HWND APIENTRY
1331 NtUserWindowFromPhysicalPoint(POINT Point)
1332 {
1333 UNIMPLEMENTED
1334
1335 return NULL;
1336 }
1337
1338 /*
1339 * NtUserResolveDesktopForWOW
1340 *
1341 * Status
1342 * @unimplemented
1343 */
1344
1345 DWORD APIENTRY
1346 NtUserResolveDesktopForWOW(DWORD Unknown0)
1347 {
1348 UNIMPLEMENTED
1349 return 0;
1350 }
1351
1352 /*
1353 * @unimplemented
1354 */
1355 BOOL APIENTRY
1356 NtUserEndMenu(VOID)
1357 {
1358 UNIMPLEMENTED
1359
1360 return 0;
1361 }
1362
1363 /*
1364 * @implemented
1365 */
1366 /* NOTE: unused function */
1367 BOOL APIENTRY
1368 NtUserTrackPopupMenuEx(
1369 HMENU hMenu,
1370 UINT fuFlags,
1371 int x,
1372 int y,
1373 HWND hWnd,
1374 LPTPMPARAMS lptpm)
1375 {
1376 UNIMPLEMENTED
1377
1378 return FALSE;
1379 }
1380
1381 DWORD APIENTRY
1382 NtUserQuerySendMessage(DWORD Unknown0)
1383 {
1384 UNIMPLEMENTED;
1385
1386 return 0;
1387 }
1388
1389 /*
1390 * @unimplemented
1391 */
1392 DWORD APIENTRY
1393 NtUserAlterWindowStyle(DWORD Unknown0,
1394 DWORD Unknown1,
1395 DWORD Unknown2)
1396 {
1397 UNIMPLEMENTED
1398
1399 return(0);
1400 }
1401
1402 /*
1403 * NtUserSetWindowStationUser
1404 *
1405 * Status
1406 * @unimplemented
1407 */
1408
1409 DWORD APIENTRY
1410 NtUserSetWindowStationUser(
1411 DWORD Unknown0,
1412 DWORD Unknown1,
1413 DWORD Unknown2,
1414 DWORD Unknown3)
1415 {
1416 UNIMPLEMENTED
1417
1418 return 0;
1419 }
1420
1421 BOOL APIENTRY NtUserAddClipboardFormatListener(
1422 HWND hwnd
1423 )
1424 {
1425 UNIMPLEMENTED;
1426 return FALSE;
1427 }
1428
1429 BOOL APIENTRY NtUserRemoveClipboardFormatListener(
1430 HWND hwnd
1431 )
1432 {
1433 UNIMPLEMENTED;
1434 return FALSE;
1435 }
1436
1437 BOOL APIENTRY NtUserGetUpdatedClipboardFormats(
1438 PUINT lpuiFormats,
1439 UINT cFormats,
1440 PUINT pcFormatsOut
1441 )
1442 {
1443 UNIMPLEMENTED;
1444 return FALSE;
1445 }
1446
1447 /*
1448 * @unimplemented
1449 */
1450 DWORD
1451 APIENTRY
1452 NtUserGetCursorFrameInfo(
1453 DWORD Unknown0,
1454 DWORD Unknown1,
1455 DWORD Unknown2,
1456 DWORD Unknown3)
1457 {
1458 UNIMPLEMENTED
1459
1460 return 0;
1461 }
1462
1463 /*
1464 * @unimplemented
1465 */
1466 BOOL
1467 APIENTRY
1468 NtUserSetSystemCursor(
1469 HCURSOR hcur,
1470 DWORD id)
1471 {
1472 return FALSE;
1473 }
1474
1475 /* EOF */