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