sync with trunk (r46275)
[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 <w32k.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 SetLastWin32Error(ERROR_INVALID_PARAMETER);
44 goto Exit;
45 }
46 Status = PsLookupThreadByThreadId((HANDLE)idAttachTo, &ThreadTo);
47 if (!NT_SUCCESS(Status))
48 {
49 SetLastWin32Error(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 SetLastWin32Error(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 SetLastWin32Error(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 SetLastWin32Error(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 UserPostMessage(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 UNIMPLEMENTED;
821 return 0;
822 }
823
824 DWORD
825 APIENTRY
826 NtUserNotifyProcessCreate(
827 DWORD dwUnknown1,
828 DWORD dwUnknown2,
829 DWORD dwUnknown3,
830 DWORD dwUnknown4)
831 {
832 UNIMPLEMENTED;
833 return 0;
834 }
835
836 BOOL
837 APIENTRY
838 NtUserPrintWindow(
839 HWND hwnd,
840 HDC hdcBlt,
841 UINT nFlags)
842 {
843 UNIMPLEMENTED;
844 return 0;
845 }
846
847 NTSTATUS
848 APIENTRY
849 NtUserProcessConnect(
850 HANDLE Process,
851 PUSERCONNECT pUserConnect,
852 DWORD Size)
853 {
854 NTSTATUS Status = STATUS_SUCCESS;
855 DPRINT("NtUserProcessConnect\n");
856 if (pUserConnect && ( Size == sizeof(USERCONNECT) ))
857 {
858 PPROCESSINFO W32Process;
859 UserEnterShared();
860 GetW32ThreadInfo();
861 W32Process = PsGetCurrentProcessWin32Process();
862 _SEH2_TRY
863 {
864 pUserConnect->siClient.psi = gpsi;
865 pUserConnect->siClient.aheList = gHandleTable;
866 pUserConnect->siClient.ulSharedDelta = (ULONG_PTR)W32Process->HeapMappings.KernelMapping -
867 (ULONG_PTR)W32Process->HeapMappings.UserMapping;
868 }
869 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
870 {
871 Status = _SEH2_GetExceptionCode();
872 }
873 _SEH2_END
874 if (!NT_SUCCESS(Status))
875 {
876 SetLastNtError(Status);
877 }
878 UserLeave();
879 return Status;
880 }
881 return STATUS_UNSUCCESSFUL;
882 }
883
884 DWORD
885 APIENTRY
886 NtUserQueryInformationThread(
887 DWORD dwUnknown1,
888 DWORD dwUnknown2,
889 DWORD dwUnknown3,
890 DWORD dwUnknown4,
891 DWORD dwUnknown5)
892 {
893 UNIMPLEMENTED;
894 return 0;
895 }
896
897 DWORD
898 APIENTRY
899 NtUserQueryInputContext(
900 DWORD dwUnknown1,
901 DWORD dwUnknown2)
902 {
903 UNIMPLEMENTED;
904 return 0;
905 }
906
907 DWORD
908 APIENTRY
909 NtUserRealInternalGetMessage(
910 DWORD dwUnknown1,
911 DWORD dwUnknown2,
912 DWORD dwUnknown3,
913 DWORD dwUnknown4,
914 DWORD dwUnknown5,
915 DWORD dwUnknown6)
916 {
917 UNIMPLEMENTED;
918 return 0;
919 }
920
921 DWORD
922 APIENTRY
923 NtUserRealWaitMessageEx(
924 DWORD dwUnknown1,
925 DWORD dwUnknown2)
926 {
927 UNIMPLEMENTED;
928 return 0;
929 }
930
931 BOOL
932 APIENTRY
933 NtUserRegisterUserApiHook(
934 PUNICODE_STRING m_dllname1,
935 PUNICODE_STRING m_funname1,
936 DWORD dwUnknown3,
937 DWORD dwUnknown4)
938 {
939 UserEnterExclusive();
940 UNIMPLEMENTED;
941 UserLeave();
942 return 0;
943 }
944
945 BOOL
946 APIENTRY
947 NtUserRegisterRawInputDevices(
948 IN PCRAWINPUTDEVICE pRawInputDevices,
949 IN UINT uiNumDevices,
950 IN UINT cbSize)
951 {
952 UNIMPLEMENTED;
953 return 0;
954 }
955
956 DWORD
957 APIENTRY
958 NtUserResolveDesktop(
959 DWORD dwUnknown1,
960 DWORD dwUnknown2,
961 DWORD dwUnknown3,
962 DWORD dwUnknown4)
963 {
964 UNIMPLEMENTED;
965 return 0;
966 }
967
968 DWORD
969 APIENTRY
970 NtUserSetAppImeLevel(
971 DWORD dwUnknown1,
972 DWORD dwUnknown2)
973 {
974 UNIMPLEMENTED;
975 return 0;
976 }
977
978 DWORD
979 APIENTRY
980 NtUserSetImeInfoEx(
981 DWORD dwUnknown1)
982 {
983 UNIMPLEMENTED;
984 return 0;
985 }
986
987 DWORD
988 APIENTRY
989 NtUserSetInformationProcess(
990 DWORD dwUnknown1,
991 DWORD dwUnknown2,
992 DWORD dwUnknown3,
993 DWORD dwUnknown4)
994 {
995 UNIMPLEMENTED;
996 return 0;
997 }
998
999 NTSTATUS
1000 APIENTRY
1001 NtUserSetInformationThread(IN HANDLE ThreadHandle,
1002 IN USERTHREADINFOCLASS ThreadInformationClass,
1003 IN PVOID ThreadInformation,
1004 IN ULONG ThreadInformationLength)
1005
1006 {
1007 if (ThreadInformationClass == UserThreadInitiateShutdown)
1008 {
1009 DPRINT1("Shutdown initiated\n");
1010 }
1011 else if (ThreadInformationClass == UserThreadEndShutdown)
1012 {
1013 DPRINT1("Shutdown ended\n");
1014 }
1015 else
1016 {
1017 UNIMPLEMENTED;
1018 }
1019
1020 return STATUS_SUCCESS;
1021 }
1022
1023 DWORD
1024 APIENTRY
1025 NtUserSetThreadLayoutHandles(
1026 DWORD dwUnknown1,
1027 DWORD dwUnknown2)
1028 {
1029 UNIMPLEMENTED;
1030 return 0;
1031 }
1032
1033 BOOL
1034 APIENTRY
1035 NtUserSoundSentry(VOID)
1036 {
1037 UNIMPLEMENTED;
1038 return 0;
1039 }
1040
1041 DWORD
1042 APIENTRY
1043 NtUserTestForInteractiveUser(
1044 DWORD dwUnknown1)
1045 {
1046 UNIMPLEMENTED;
1047 return 0;
1048 }
1049
1050 /* http://www.cyber-ta.org/releases/malware-analysis/public/SOURCES/b47155634ccb2c30630da7e3666d3d07/b47155634ccb2c30630da7e3666d3d07.trace.html#NtUserGetIconSize */
1051 DWORD
1052 APIENTRY
1053 NtUserCalcMenuBar(
1054 DWORD dwUnknown1,
1055 DWORD dwUnknown2,
1056 DWORD dwUnknown3,
1057 DWORD dwUnknown4,
1058 DWORD dwUnknown5)
1059 {
1060 UNIMPLEMENTED;
1061 return 0;
1062 }
1063
1064 DWORD
1065 APIENTRY
1066 NtUserPaintMenuBar(
1067 DWORD dwUnknown1,
1068 DWORD dwUnknown2,
1069 DWORD dwUnknown3,
1070 DWORD dwUnknown4,
1071 DWORD dwUnknown5,
1072 DWORD dwUnknown6)
1073 {
1074 UNIMPLEMENTED;
1075 return 0;
1076 }
1077
1078 BOOL
1079 APIENTRY
1080 NtUserUnregisterUserApiHook(VOID)
1081 {
1082 UNIMPLEMENTED;
1083 return 0;
1084 }
1085
1086 BOOL
1087 APIENTRY
1088 NtUserGetLayeredWindowAttributes(
1089 HWND hwnd,
1090 COLORREF *pcrKey,
1091 BYTE *pbAlpha,
1092 DWORD *pdwFlags)
1093 {
1094 UNIMPLEMENTED;
1095 return 0;
1096 }
1097
1098 BOOL
1099 APIENTRY
1100 NtUserValidateTimerCallback(
1101 HWND hWnd,
1102 WPARAM wParam,
1103 LPARAM lParam)
1104 {
1105 BOOL Ret = FALSE;
1106 PWINDOW_OBJECT Window = NULL;
1107
1108 UserEnterShared();
1109
1110 if (hWnd)
1111 {
1112 Window = UserGetWindowObject(hWnd);
1113 if (!Window || !Window->Wnd)
1114 goto Exit;
1115 }
1116
1117 Ret = ValidateTimerCallback(PsGetCurrentThreadWin32Thread(), Window, wParam, lParam);
1118
1119 Exit:
1120 UserLeave();
1121 return Ret;
1122 }
1123
1124 DWORD
1125 APIENTRY
1126 NtUserRemoteConnect(
1127 DWORD dwUnknown1,
1128 DWORD dwUnknown2,
1129 DWORD dwUnknown3)
1130 {
1131 UNIMPLEMENTED;
1132 return 0;
1133 }
1134
1135 DWORD
1136 APIENTRY
1137 NtUserRemoteRedrawRectangle(
1138 DWORD dwUnknown1,
1139 DWORD dwUnknown2,
1140 DWORD dwUnknown3,
1141 DWORD dwUnknown4)
1142 {
1143 UNIMPLEMENTED;
1144 return 0;
1145 }
1146
1147 DWORD
1148 APIENTRY
1149 NtUserRemoteRedrawScreen(VOID)
1150 {
1151 UNIMPLEMENTED;
1152 return 0;
1153 }
1154
1155 DWORD
1156 APIENTRY
1157 NtUserRemoteStopScreenUpdates(VOID)
1158 {
1159 UNIMPLEMENTED;
1160 return 0;
1161 }
1162
1163 DWORD
1164 APIENTRY
1165 NtUserCtxDisplayIOCtl(
1166 DWORD dwUnknown1,
1167 DWORD dwUnknown2,
1168 DWORD dwUnknown3)
1169 {
1170 UNIMPLEMENTED;
1171 return 0;
1172 }
1173
1174
1175 /* EOF */