1f7615debf2ece776900c6b880fa766c20d70044
[reactos.git] / reactos / 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 = FALSE;
542 NTSTATUS Status = STATUS_SUCCESS;
543 UserEnterExclusive();
544 _SEH2_TRY
545 {
546 ProbeForRead(lpaElements,
547 sizeof(INT),
548 1);
549 ProbeForRead(lpaRgbValues,
550 sizeof(INT),
551 1);
552 // Developers: We are thread locked and calling gdi.
553 Ret = IntSetSysColors(cElements, (INT*)lpaElements, (COLORREF*)lpaRgbValues);
554 }
555 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
556 {
557 Status = _SEH2_GetExceptionCode();
558 }
559 _SEH2_END;
560 if (!NT_SUCCESS(Status))
561 {
562 SetLastNtError(Status);
563 Ret = FALSE;
564 }
565 if (Ret)
566 {
567 UserSendNotifyMessage(HWND_BROADCAST, WM_SYSCOLORCHANGE, 0, 0);
568 }
569 UserLeave();
570 return Ret;
571 }
572
573 DWORD
574 APIENTRY
575 NtUserSetThreadState(
576 DWORD Unknown0,
577 DWORD Unknown1)
578 {
579 UNIMPLEMENTED
580
581 return 0;
582 }
583
584 BOOL
585 APIENTRY
586 NtUserTrackMouseEvent(
587 LPTRACKMOUSEEVENT lpEventTrack)
588 {
589 UNIMPLEMENTED
590
591 return 0;
592 }
593
594
595 DWORD
596 APIENTRY
597 NtUserUpdateInputContext(
598 DWORD Unknown0,
599 DWORD Unknown1,
600 DWORD Unknown2)
601 {
602 UNIMPLEMENTED
603
604 return 0;
605 }
606
607 DWORD
608 APIENTRY
609 NtUserUpdateInstance(
610 DWORD Unknown0,
611 DWORD Unknown1,
612 DWORD Unknown2)
613 {
614 UNIMPLEMENTED
615
616 return 0;
617 }
618
619 BOOL
620 APIENTRY
621 NtUserUserHandleGrantAccess(
622 IN HANDLE hUserHandle,
623 IN HANDLE hJob,
624 IN BOOL bGrant)
625 {
626 UNIMPLEMENTED
627
628 return 0;
629 }
630
631 DWORD
632 APIENTRY
633 NtUserWaitForMsgAndEvent(
634 DWORD Unknown0)
635 {
636 UNIMPLEMENTED
637
638 return 0;
639 }
640
641 DWORD
642 APIENTRY
643 NtUserWin32PoolAllocationStats(
644 DWORD Unknown0,
645 DWORD Unknown1,
646 DWORD Unknown2,
647 DWORD Unknown3,
648 DWORD Unknown4,
649 DWORD Unknown5)
650 {
651 UNIMPLEMENTED
652
653 return 0;
654 }
655
656 DWORD
657 APIENTRY
658 NtUserYieldTask(VOID)
659 {
660 UNIMPLEMENTED
661
662 return 0;
663 }
664
665
666 DWORD
667 APIENTRY
668 NtUserCheckImeHotKey(
669 DWORD dwUnknown1,
670 DWORD dwUnknown2)
671 {
672 UNIMPLEMENTED;
673 return 0;
674 }
675
676 DWORD
677 APIENTRY
678 NtUserConsoleControl(
679 DWORD dwUnknown1,
680 DWORD dwUnknown2,
681 DWORD dwUnknown3)
682 {
683 UNIMPLEMENTED;
684 return 0;
685 }
686
687 DWORD
688 APIENTRY
689 NtUserCreateInputContext(
690 DWORD dwUnknown1)
691 {
692 UNIMPLEMENTED;
693 return 0;
694 }
695
696 DWORD
697 APIENTRY
698 NtUserDestroyInputContext(
699 DWORD dwUnknown1)
700 {
701 UNIMPLEMENTED;
702 return 0;
703 }
704
705 DWORD
706 APIENTRY
707 NtUserDisableThreadIme(
708 DWORD dwUnknown1)
709 {
710 UNIMPLEMENTED;
711 return 0;
712 }
713
714 DWORD
715 APIENTRY
716 NtUserGetAppImeLevel(
717 DWORD dwUnknown1)
718 {
719 UNIMPLEMENTED;
720 return 0;
721 }
722
723 DWORD
724 APIENTRY
725 NtUserGetAtomName(
726 ATOM nAtom,
727 LPWSTR lpBuffer)
728 {
729 UNIMPLEMENTED;
730 return 0;
731 }
732
733 DWORD
734 APIENTRY
735 NtUserGetImeInfoEx(
736 DWORD dwUnknown1,
737 DWORD dwUnknown2)
738 {
739 UNIMPLEMENTED;
740 return 0;
741 }
742
743 DWORD
744 APIENTRY
745 NtUserGetRawInputBuffer(
746 PRAWINPUT pData,
747 PUINT pcbSize,
748 UINT cbSizeHeader)
749 {
750 UNIMPLEMENTED;
751 return 0;
752 }
753
754 DWORD
755 APIENTRY
756 NtUserGetRawInputData(
757 HRAWINPUT hRawInput,
758 UINT uiCommand,
759 LPVOID pData,
760 PUINT pcbSize,
761 UINT cbSizeHeader)
762 {
763 UNIMPLEMENTED;
764 return 0;
765 }
766
767 DWORD
768 APIENTRY
769 NtUserGetRawInputDeviceInfo(
770 HANDLE hDevice,
771 UINT uiCommand,
772 LPVOID pData,
773 PUINT pcbSize
774 )
775 {
776 UNIMPLEMENTED;
777 return 0;
778 }
779
780 DWORD
781 APIENTRY
782 NtUserGetRawInputDeviceList(
783 PRAWINPUTDEVICELIST pRawInputDeviceList,
784 PUINT puiNumDevices,
785 UINT cbSize)
786 {
787 UNIMPLEMENTED;
788 return 0;
789 }
790
791 DWORD
792 APIENTRY
793 NtUserGetRegisteredRawInputDevices(
794 PRAWINPUTDEVICE pRawInputDevices,
795 PUINT puiNumDevices,
796 UINT cbSize)
797 {
798 UNIMPLEMENTED;
799 return 0;
800 }
801
802 DWORD
803 APIENTRY
804 NtUserHardErrorControl(
805 DWORD dwUnknown1,
806 DWORD dwUnknown2,
807 DWORD dwUnknown3)
808 {
809 UNIMPLEMENTED;
810 return 0;
811 }
812
813 DWORD
814 APIENTRY
815 NtUserMinMaximize(
816 HWND hWnd,
817 UINT cmd, // Wine SW_ commands
818 BOOL Hide)
819 {
820 RECTL NewPos;
821 UINT SwFlags;
822 PWND pWnd;
823
824 DPRINT("Enter NtUserMinMaximize\n");
825 UserEnterExclusive();
826
827 pWnd = UserGetWindowObject(hWnd);
828 if ( !pWnd || // FIXME:
829 pWnd == IntGetDesktopWindow() || // pWnd->fnid == FNID_DESKTOP
830 pWnd == IntGetMessageWindow() ) // pWnd->fnid == FNID_MESSAGEWND
831 {
832 goto Exit;
833 }
834
835 if ( cmd > SW_MAX || pWnd->state2 & WNDS2_INDESTROY)
836 {
837 EngSetLastError(ERROR_INVALID_PARAMETER);
838 goto Exit;
839 }
840
841 co_WinPosMinMaximize(pWnd, cmd, &NewPos);
842
843 SwFlags = Hide ? SWP_NOACTIVATE|SWP_NOZORDER|SWP_FRAMECHANGED : SWP_NOZORDER|SWP_FRAMECHANGED;
844
845 co_WinPosSetWindowPos( pWnd,
846 NULL,
847 NewPos.left,
848 NewPos.top,
849 NewPos.right,
850 NewPos.bottom,
851 SwFlags);
852
853 co_WinPosShowWindow(pWnd, cmd);
854
855 Exit:
856 DPRINT("Leave NtUserMinMaximize\n");
857 UserLeave();
858 return 0; // Always NULL?
859 }
860
861 DWORD
862 APIENTRY
863 NtUserNotifyProcessCreate(
864 DWORD dwUnknown1,
865 DWORD dwUnknown2,
866 DWORD dwUnknown3,
867 DWORD dwUnknown4)
868 {
869 UNIMPLEMENTED;
870 return 0;
871 }
872
873 NTSTATUS
874 APIENTRY
875 NtUserProcessConnect(
876 HANDLE Process,
877 PUSERCONNECT pUserConnect,
878 DWORD Size)
879 {
880 NTSTATUS Status = STATUS_SUCCESS;
881 DPRINT("NtUserProcessConnect\n");
882 if (pUserConnect && ( Size == sizeof(USERCONNECT) ))
883 {
884 PPROCESSINFO W32Process;
885 UserEnterShared();
886 GetW32ThreadInfo();
887 W32Process = PsGetCurrentProcessWin32Process();
888 _SEH2_TRY
889 {
890 pUserConnect->siClient.psi = gpsi;
891 pUserConnect->siClient.aheList = gHandleTable;
892 pUserConnect->siClient.ulSharedDelta = (ULONG_PTR)W32Process->HeapMappings.KernelMapping -
893 (ULONG_PTR)W32Process->HeapMappings.UserMapping;
894 }
895 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
896 {
897 Status = _SEH2_GetExceptionCode();
898 }
899 _SEH2_END
900 if (!NT_SUCCESS(Status))
901 {
902 SetLastNtError(Status);
903 }
904 UserLeave();
905 return Status;
906 }
907 return STATUS_UNSUCCESSFUL;
908 }
909
910 DWORD
911 APIENTRY
912 NtUserQueryInformationThread(
913 DWORD dwUnknown1,
914 DWORD dwUnknown2,
915 DWORD dwUnknown3,
916 DWORD dwUnknown4,
917 DWORD dwUnknown5)
918 {
919 UNIMPLEMENTED;
920 return 0;
921 }
922
923 DWORD
924 APIENTRY
925 NtUserQueryInputContext(
926 DWORD dwUnknown1,
927 DWORD dwUnknown2)
928 {
929 UNIMPLEMENTED;
930 return 0;
931 }
932
933 DWORD
934 APIENTRY
935 NtUserRealInternalGetMessage(
936 DWORD dwUnknown1,
937 DWORD dwUnknown2,
938 DWORD dwUnknown3,
939 DWORD dwUnknown4,
940 DWORD dwUnknown5,
941 DWORD dwUnknown6)
942 {
943 UNIMPLEMENTED;
944 return 0;
945 }
946
947 DWORD
948 APIENTRY
949 NtUserRealWaitMessageEx(
950 DWORD dwUnknown1,
951 DWORD dwUnknown2)
952 {
953 UNIMPLEMENTED;
954 return 0;
955 }
956
957 BOOL
958 APIENTRY
959 NtUserRegisterUserApiHook(
960 PUNICODE_STRING m_dllname1,
961 PUNICODE_STRING m_funname1,
962 DWORD dwUnknown3,
963 DWORD dwUnknown4)
964 {
965 UserEnterExclusive();
966 UNIMPLEMENTED;
967 UserLeave();
968 return 0;
969 }
970
971 BOOL
972 APIENTRY
973 NtUserRegisterRawInputDevices(
974 IN PCRAWINPUTDEVICE pRawInputDevices,
975 IN UINT uiNumDevices,
976 IN UINT cbSize)
977 {
978 UNIMPLEMENTED;
979 return 0;
980 }
981
982 DWORD
983 APIENTRY
984 NtUserResolveDesktop(
985 DWORD dwUnknown1,
986 DWORD dwUnknown2,
987 DWORD dwUnknown3,
988 DWORD dwUnknown4)
989 {
990 UNIMPLEMENTED;
991 return 0;
992 }
993
994 DWORD
995 APIENTRY
996 NtUserSetAppImeLevel(
997 DWORD dwUnknown1,
998 DWORD dwUnknown2)
999 {
1000 UNIMPLEMENTED;
1001 return 0;
1002 }
1003
1004 DWORD
1005 APIENTRY
1006 NtUserSetImeInfoEx(
1007 DWORD dwUnknown1)
1008 {
1009 UNIMPLEMENTED;
1010 return 0;
1011 }
1012
1013 DWORD
1014 APIENTRY
1015 NtUserSetInformationProcess(
1016 DWORD dwUnknown1,
1017 DWORD dwUnknown2,
1018 DWORD dwUnknown3,
1019 DWORD dwUnknown4)
1020 {
1021 UNIMPLEMENTED;
1022 return 0;
1023 }
1024
1025 NTSTATUS
1026 APIENTRY
1027 NtUserSetInformationThread(IN HANDLE ThreadHandle,
1028 IN USERTHREADINFOCLASS ThreadInformationClass,
1029 IN PVOID ThreadInformation,
1030 IN ULONG ThreadInformationLength)
1031
1032 {
1033 if (ThreadInformationClass == UserThreadInitiateShutdown)
1034 {
1035 DPRINT1("Shutdown initiated\n");
1036 }
1037 else if (ThreadInformationClass == UserThreadEndShutdown)
1038 {
1039 DPRINT1("Shutdown ended\n");
1040 }
1041 else
1042 {
1043 UNIMPLEMENTED;
1044 }
1045
1046 return STATUS_SUCCESS;
1047 }
1048
1049 DWORD
1050 APIENTRY
1051 NtUserSetThreadLayoutHandles(
1052 DWORD dwUnknown1,
1053 DWORD dwUnknown2)
1054 {
1055 UNIMPLEMENTED;
1056 return 0;
1057 }
1058
1059 BOOL
1060 APIENTRY
1061 NtUserSoundSentry(VOID)
1062 {
1063 UNIMPLEMENTED;
1064 return 0;
1065 }
1066
1067 DWORD
1068 APIENTRY
1069 NtUserTestForInteractiveUser(
1070 DWORD dwUnknown1)
1071 {
1072 UNIMPLEMENTED;
1073 return 0;
1074 }
1075
1076 /* http://www.cyber-ta.org/releases/malware-analysis/public/SOURCES/b47155634ccb2c30630da7e3666d3d07/b47155634ccb2c30630da7e3666d3d07.trace.html#NtUserGetIconSize */
1077 DWORD
1078 APIENTRY
1079 NtUserCalcMenuBar(
1080 DWORD dwUnknown1,
1081 DWORD dwUnknown2,
1082 DWORD dwUnknown3,
1083 DWORD dwUnknown4,
1084 DWORD dwUnknown5)
1085 {
1086 UNIMPLEMENTED;
1087 return 0;
1088 }
1089
1090 DWORD
1091 APIENTRY
1092 NtUserPaintMenuBar(
1093 DWORD dwUnknown1,
1094 DWORD dwUnknown2,
1095 DWORD dwUnknown3,
1096 DWORD dwUnknown4,
1097 DWORD dwUnknown5,
1098 DWORD dwUnknown6)
1099 {
1100 UNIMPLEMENTED;
1101 return 0;
1102 }
1103
1104 BOOL
1105 APIENTRY
1106 NtUserUnregisterUserApiHook(VOID)
1107 {
1108 UNIMPLEMENTED;
1109 return 0;
1110 }
1111
1112 BOOL
1113 APIENTRY
1114 NtUserGetLayeredWindowAttributes(
1115 HWND hwnd,
1116 COLORREF *pcrKey,
1117 BYTE *pbAlpha,
1118 DWORD *pdwFlags)
1119 {
1120 UNIMPLEMENTED;
1121 return 0;
1122 }
1123
1124 BOOL
1125 APIENTRY
1126 NtUserValidateTimerCallback(
1127 HWND hWnd,
1128 WPARAM wParam,
1129 LPARAM lParam)
1130 {
1131 BOOL Ret = FALSE;
1132
1133 UserEnterShared();
1134
1135 Ret = ValidateTimerCallback(PsGetCurrentThreadWin32Thread(), lParam);
1136
1137 UserLeave();
1138 return Ret;
1139 }
1140
1141 DWORD
1142 APIENTRY
1143 NtUserRemoteConnect(
1144 DWORD dwUnknown1,
1145 DWORD dwUnknown2,
1146 DWORD dwUnknown3)
1147 {
1148 UNIMPLEMENTED;
1149 return 0;
1150 }
1151
1152 DWORD
1153 APIENTRY
1154 NtUserRemoteRedrawRectangle(
1155 DWORD dwUnknown1,
1156 DWORD dwUnknown2,
1157 DWORD dwUnknown3,
1158 DWORD dwUnknown4)
1159 {
1160 UNIMPLEMENTED;
1161 return 0;
1162 }
1163
1164 DWORD
1165 APIENTRY
1166 NtUserRemoteRedrawScreen(VOID)
1167 {
1168 UNIMPLEMENTED;
1169 return 0;
1170 }
1171
1172 DWORD
1173 APIENTRY
1174 NtUserRemoteStopScreenUpdates(VOID)
1175 {
1176 UNIMPLEMENTED;
1177 return 0;
1178 }
1179
1180 DWORD
1181 APIENTRY
1182 NtUserCtxDisplayIOCtl(
1183 DWORD dwUnknown1,
1184 DWORD dwUnknown2,
1185 DWORD dwUnknown3)
1186 {
1187 UNIMPLEMENTED;
1188 return 0;
1189 }
1190
1191 /*
1192 * @unimplemented
1193 */
1194 DWORD
1195 APIENTRY
1196 NtUserDrawMenuBarTemp(
1197 HWND hWnd,
1198 HDC hDC,
1199 PRECT hRect,
1200 HMENU hMenu,
1201 HFONT hFont)
1202 {
1203 /* we'll use this function just for caching the menu bar */
1204 UNIMPLEMENTED
1205 return 0;
1206 }
1207
1208 /*
1209 * FillWindow: Called from User; Dialog, Edit and ListBox procs during a WM_ERASEBKGND.
1210 */
1211 /*
1212 * @unimplemented
1213 */
1214 BOOL APIENTRY
1215 NtUserFillWindow(HWND hWndPaint,
1216 HWND hWndPaint1,
1217 HDC hDC,
1218 HBRUSH hBrush)
1219 {
1220 UNIMPLEMENTED
1221
1222 return 0;
1223 }
1224
1225 /*
1226 * @unimplemented
1227 */
1228 BOOL APIENTRY
1229 NtUserFlashWindowEx(IN PFLASHWINFO pfwi)
1230 {
1231 UNIMPLEMENTED
1232
1233 return 1;
1234 }
1235
1236 /*
1237 * @unimplemented
1238 */
1239 BOOL APIENTRY
1240 NtUserLockWindowUpdate(HWND hWnd)
1241 {
1242 UNIMPLEMENTED
1243
1244 return 0;
1245 }
1246
1247 /*
1248 * @unimplemented
1249 */
1250 DWORD APIENTRY
1251 NtUserRealChildWindowFromPoint(DWORD Unknown0,
1252 DWORD Unknown1,
1253 DWORD Unknown2)
1254 {
1255 UNIMPLEMENTED
1256
1257 return 0;
1258 }
1259
1260 /*
1261 * @unimplemented
1262 */
1263 DWORD APIENTRY
1264 NtUserSetImeOwnerWindow(DWORD Unknown0,
1265 DWORD Unknown1)
1266 {
1267 UNIMPLEMENTED
1268
1269 return 0;
1270 }
1271
1272 /*
1273 * @unimplemented
1274 */
1275 DWORD APIENTRY
1276 NtUserSetInternalWindowPos(
1277 HWND hwnd,
1278 UINT showCmd,
1279 LPRECT rect,
1280 LPPOINT pt)
1281 {
1282 UNIMPLEMENTED
1283
1284 return 0;
1285 }
1286
1287 /*
1288 * @unimplemented
1289 */
1290 BOOL APIENTRY
1291 NtUserSetLayeredWindowAttributes(HWND hwnd,
1292 COLORREF crKey,
1293 BYTE bAlpha,
1294 DWORD dwFlags)
1295 {
1296 UNIMPLEMENTED;
1297 return FALSE;
1298 }
1299
1300 /*
1301 * @unimplemented
1302 */
1303 BOOL
1304 APIENTRY
1305 NtUserUpdateLayeredWindow(
1306 HWND hwnd,
1307 HDC hdcDst,
1308 POINT *pptDst,
1309 SIZE *psize,
1310 HDC hdcSrc,
1311 POINT *pptSrc,
1312 COLORREF crKey,
1313 BLENDFUNCTION *pblend,
1314 DWORD dwFlags,
1315 RECT *prcDirty)
1316 {
1317 UNIMPLEMENTED
1318
1319 return 0;
1320 }
1321
1322 /*
1323 * @unimplemented
1324 */
1325 HWND APIENTRY
1326 NtUserWindowFromPhysicalPoint(POINT Point)
1327 {
1328 UNIMPLEMENTED
1329
1330 return NULL;
1331 }
1332
1333 /*
1334 * NtUserResolveDesktopForWOW
1335 *
1336 * Status
1337 * @unimplemented
1338 */
1339
1340 DWORD APIENTRY
1341 NtUserResolveDesktopForWOW(DWORD Unknown0)
1342 {
1343 UNIMPLEMENTED
1344 return 0;
1345 }
1346
1347 /*
1348 * @unimplemented
1349 */
1350 BOOL APIENTRY
1351 NtUserEndMenu(VOID)
1352 {
1353 UNIMPLEMENTED
1354
1355 return 0;
1356 }
1357
1358 /*
1359 * @implemented
1360 */
1361 /* NOTE: unused function */
1362 BOOL APIENTRY
1363 NtUserTrackPopupMenuEx(
1364 HMENU hMenu,
1365 UINT fuFlags,
1366 int x,
1367 int y,
1368 HWND hWnd,
1369 LPTPMPARAMS lptpm)
1370 {
1371 UNIMPLEMENTED
1372
1373 return FALSE;
1374 }
1375
1376 DWORD APIENTRY
1377 NtUserQuerySendMessage(DWORD Unknown0)
1378 {
1379 UNIMPLEMENTED;
1380
1381 return 0;
1382 }
1383
1384 /*
1385 * @unimplemented
1386 */
1387 DWORD APIENTRY
1388 NtUserAlterWindowStyle(DWORD Unknown0,
1389 DWORD Unknown1,
1390 DWORD Unknown2)
1391 {
1392 UNIMPLEMENTED
1393
1394 return(0);
1395 }
1396
1397 /*
1398 * NtUserSetWindowStationUser
1399 *
1400 * Status
1401 * @unimplemented
1402 */
1403
1404 DWORD APIENTRY
1405 NtUserSetWindowStationUser(
1406 DWORD Unknown0,
1407 DWORD Unknown1,
1408 DWORD Unknown2,
1409 DWORD Unknown3)
1410 {
1411 UNIMPLEMENTED
1412
1413 return 0;
1414 }
1415
1416 BOOL APIENTRY NtUserAddClipboardFormatListener(
1417 HWND hwnd
1418 )
1419 {
1420 UNIMPLEMENTED;
1421 return FALSE;
1422 }
1423
1424 BOOL APIENTRY NtUserRemoveClipboardFormatListener(
1425 HWND hwnd
1426 )
1427 {
1428 UNIMPLEMENTED;
1429 return FALSE;
1430 }
1431
1432 BOOL APIENTRY NtUserGetUpdatedClipboardFormats(
1433 PUINT lpuiFormats,
1434 UINT cFormats,
1435 PUINT pcFormatsOut
1436 )
1437 {
1438 UNIMPLEMENTED;
1439 return FALSE;
1440 }
1441
1442 /*
1443 * @unimplemented
1444 */
1445 DWORD
1446 APIENTRY
1447 NtUserGetCursorFrameInfo(
1448 DWORD Unknown0,
1449 DWORD Unknown1,
1450 DWORD Unknown2,
1451 DWORD Unknown3)
1452 {
1453 UNIMPLEMENTED
1454
1455 return 0;
1456 }
1457
1458 /*
1459 * @unimplemented
1460 */
1461 BOOL
1462 APIENTRY
1463 NtUserSetSystemCursor(
1464 HCURSOR hcur,
1465 DWORD id)
1466 {
1467 return FALSE;
1468 }
1469
1470 /* EOF */