Merge from amd64-branch:
[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 <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 BOOL
203 APIENTRY
204 NtUserEnumDisplayDevices (
205 PUNICODE_STRING lpDevice, /* device name */
206 DWORD iDevNum, /* display device */
207 PDISPLAY_DEVICEW lpDisplayDevice, /* device information */
208 DWORD dwFlags ) /* reserved */
209 {
210 DPRINT1("NtUserEnumDisplayDevices() is UNIMPLEMENTED!\n");
211 if (lpDevice->Length == 0 && iDevNum > 0)
212 {
213 /* Only one display device present */
214 return FALSE;
215 }
216 else if (lpDevice->Length != 0)
217 {
218 /* Can't enumerate monitors :( */
219 return FALSE;
220 }
221 if (lpDisplayDevice->cb < sizeof(DISPLAY_DEVICE))
222 return FALSE;
223
224 wcscpy(lpDisplayDevice->DeviceName, L"\\\\.\\DISPLAY1");
225 wcscpy(lpDisplayDevice->DeviceString, L"<Unknown>");
226 lpDisplayDevice->StateFlags = DISPLAY_DEVICE_ATTACHED_TO_DESKTOP
227 | DISPLAY_DEVICE_MODESPRUNED
228 | DISPLAY_DEVICE_PRIMARY_DEVICE
229 | DISPLAY_DEVICE_VGA_COMPATIBLE;
230 lpDisplayDevice->DeviceID[0] = L'0';
231 lpDisplayDevice->DeviceKey[0] = L'0';
232 return TRUE;
233 }
234
235 DWORD
236 APIENTRY
237 NtUserEvent(
238 DWORD Unknown0)
239 {
240 UNIMPLEMENTED
241
242 return 0;
243 }
244
245 DWORD
246 APIENTRY
247 NtUserExcludeUpdateRgn(
248 HDC hDC,
249 HWND hWnd)
250 {
251 UNIMPLEMENTED
252
253 return 0;
254 }
255
256 BOOL
257 APIENTRY
258 NtUserGetAltTabInfo(
259 HWND hwnd,
260 INT iItem,
261 PALTTABINFO pati,
262 LPWSTR pszItemText,
263 UINT cchItemText,
264 BOOL Ansi)
265 {
266 UNIMPLEMENTED
267
268 return 0;
269 }
270
271 HBRUSH
272 APIENTRY
273 NtUserGetControlBrush(
274 HWND hwnd,
275 HDC hdc,
276 UINT ctlType)
277 {
278 UNIMPLEMENTED
279
280 return 0;
281 }
282
283
284 /*
285 * Called from PaintRect, works almost like wine PaintRect16 but returns hBrush.
286 */
287 HBRUSH
288 APIENTRY
289 NtUserGetControlColor(
290 HWND hwndParent,
291 HWND hwnd,
292 HDC hdc,
293 UINT CtlMsg) // Wine PaintRect: WM_CTLCOLORMSGBOX + hbrush
294 {
295 UNIMPLEMENTED
296
297 return 0;
298 }
299
300 DWORD
301 APIENTRY
302 NtUserGetImeHotKey(
303 DWORD Unknown0,
304 DWORD Unknown1,
305 DWORD Unknown2,
306 DWORD Unknown3)
307 {
308 UNIMPLEMENTED
309
310 return 0;
311 }
312
313
314 DWORD
315 APIENTRY
316 NtUserGetMouseMovePointsEx(
317 UINT cbSize,
318 LPMOUSEMOVEPOINT lppt,
319 LPMOUSEMOVEPOINT lpptBuf,
320 int nBufPoints,
321 DWORD resolution)
322 {
323 UserEnterExclusive();
324
325 if ((cbSize != sizeof(MOUSEMOVEPOINT)) || (nBufPoints < 0) || (nBufPoints > 64))
326 {
327 UserLeave();
328 SetLastWin32Error(ERROR_INVALID_PARAMETER);
329 return -1;
330 }
331
332 _SEH2_TRY
333 {
334 ProbeForRead(lppt, cbSize, 1);
335 ProbeForWrite(lpptBuf, cbSize, 1);
336 }
337 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
338 {
339 SetLastNtError(_SEH2_GetExceptionCode());
340 SetLastWin32Error(ERROR_NOACCESS);
341 }
342 _SEH2_END;
343
344 /*
345 Call a subfunction of GetMouseMovePointsEx!
346 switch(resolution)
347 {
348 case GMMP_USE_DISPLAY_POINTS:
349 case GMMP_USE_HIGH_RESOLUTION_POINTS:
350 break;
351 default:
352 SetLastWin32Error(GMMP_ERR_POINT_NOT_FOUND);
353 return GMMP_ERR_POINT_NOT_FOUND;
354 }
355 */
356 UNIMPLEMENTED
357 UserLeave();
358 return -1;
359 }
360
361
362
363 BOOL
364 APIENTRY
365 NtUserImpersonateDdeClientWindow(
366 HWND hWndClient,
367 HWND hWndServer)
368 {
369 UNIMPLEMENTED
370
371 return 0;
372 }
373
374 NTSTATUS
375 APIENTRY
376 NtUserInitializeClientPfnArrays(
377 PPFNCLIENT pfnClientA,
378 PPFNCLIENT pfnClientW,
379 PPFNCLIENTWORKER pfnClientWorker,
380 HINSTANCE hmodUser)
381 {
382 NTSTATUS Status = STATUS_SUCCESS;
383 DPRINT("Enter NtUserInitializeClientPfnArrays User32 0x%x\n",hmodUser);
384
385 if (ClientPfnInit) return Status;
386
387 UserEnterExclusive();
388
389 _SEH2_TRY
390 {
391 ProbeForRead( pfnClientA, sizeof(PFNCLIENT), 1);
392 ProbeForRead( pfnClientW, sizeof(PFNCLIENT), 1);
393 ProbeForRead( pfnClientWorker, sizeof(PFNCLIENTWORKER), 1);
394 RtlCopyMemory(&gpsi->apfnClientA, pfnClientA, sizeof(PFNCLIENT));
395 RtlCopyMemory(&gpsi->apfnClientW, pfnClientW, sizeof(PFNCLIENT));
396 RtlCopyMemory(&gpsi->apfnClientWorker, pfnClientWorker, sizeof(PFNCLIENTWORKER));
397
398 //// FIXME! HAX! Temporary until server side is finished.
399 //// Copy the client side procs for now.
400 RtlCopyMemory(&gpsi->aStoCidPfn, pfnClientW, sizeof(gpsi->aStoCidPfn));
401
402 hModClient = hmodUser;
403 ClientPfnInit = TRUE;
404 }
405 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
406 {
407 Status =_SEH2_GetExceptionCode();
408 }
409 _SEH2_END
410
411 if (!NT_SUCCESS(Status))
412 {
413 DPRINT1("Failed reading Client Pfns from user space.\n");
414 SetLastNtError(Status);
415 }
416
417 UserLeave();
418 return Status;
419 }
420
421 DWORD
422 APIENTRY
423 NtUserInitTask(
424 DWORD Unknown0,
425 DWORD Unknown1,
426 DWORD Unknown2,
427 DWORD Unknown3,
428 DWORD Unknown4,
429 DWORD Unknown5,
430 DWORD Unknown6,
431 DWORD Unknown7,
432 DWORD Unknown8,
433 DWORD Unknown9,
434 DWORD Unknown10,
435 DWORD Unknown11)
436 {
437 UNIMPLEMENTED
438
439 return 0;
440 }
441
442 BOOL
443 APIENTRY
444 NtUserLockWorkStation(VOID)
445 {
446 UNIMPLEMENTED
447
448 return 0;
449 }
450
451 DWORD
452 APIENTRY
453 NtUserMNDragLeave(VOID)
454 {
455 UNIMPLEMENTED
456
457 return 0;
458 }
459
460 DWORD
461 APIENTRY
462 NtUserMNDragOver(
463 DWORD Unknown0,
464 DWORD Unknown1)
465 {
466 UNIMPLEMENTED
467
468 return 0;
469 }
470
471 DWORD
472 APIENTRY
473 NtUserModifyUserStartupInfoFlags(
474 DWORD Unknown0,
475 DWORD Unknown1)
476 {
477 UNIMPLEMENTED
478
479 return 0;
480 }
481
482 DWORD
483 APIENTRY
484 NtUserNotifyIMEStatus(
485 DWORD Unknown0,
486 DWORD Unknown1,
487 DWORD Unknown2)
488 {
489 UNIMPLEMENTED
490
491 return 0;
492 }
493
494 DWORD
495 APIENTRY
496 NtUserQueryUserCounters(
497 DWORD Unknown0,
498 DWORD Unknown1,
499 DWORD Unknown2,
500 DWORD Unknown3,
501 DWORD Unknown4)
502 {
503 UNIMPLEMENTED
504
505 return 0;
506 }
507
508 DWORD
509 APIENTRY
510 NtUserRegisterTasklist(
511 DWORD Unknown0)
512 {
513 UNIMPLEMENTED
514
515 return 0;
516 }
517
518 DWORD
519 APIENTRY
520 NtUserSetConsoleReserveKeys(
521 DWORD Unknown0,
522 DWORD Unknown1)
523 {
524 UNIMPLEMENTED
525
526 return 0;
527 }
528
529 DWORD
530 APIENTRY
531 NtUserSetDbgTag(
532 DWORD Unknown0,
533 DWORD Unknown1)
534 {
535 UNIMPLEMENTED
536
537 return 0;
538 }
539
540 DWORD
541 APIENTRY
542 NtUserSetImeHotKey(
543 DWORD Unknown0,
544 DWORD Unknown1,
545 DWORD Unknown2,
546 DWORD Unknown3,
547 DWORD Unknown4)
548 {
549 UNIMPLEMENTED
550
551 return 0;
552 }
553
554
555 DWORD
556 APIENTRY
557 NtUserSetRipFlags(
558 DWORD Unknown0,
559 DWORD Unknown1)
560 {
561 UNIMPLEMENTED
562
563 return 0;
564 }
565
566 BOOL
567 APIENTRY
568 NtUserSetSysColors(
569 int cElements,
570 IN CONST INT *lpaElements,
571 IN CONST COLORREF *lpaRgbValues,
572 FLONG Flags)
573 {
574 DWORD Ret = FALSE;
575 NTSTATUS Status = STATUS_SUCCESS;
576 UserEnterExclusive();
577 _SEH2_TRY
578 {
579 ProbeForRead(lpaElements,
580 sizeof(INT),
581 1);
582 ProbeForRead(lpaRgbValues,
583 sizeof(INT),
584 1);
585 // Developers: We are thread locked and calling gdi.
586 Ret = IntSetSysColors(cElements, (INT*)lpaElements, (COLORREF*)lpaRgbValues);
587 }
588 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
589 {
590 Status = _SEH2_GetExceptionCode();
591 }
592 _SEH2_END;
593 if (!NT_SUCCESS(Status))
594 {
595 SetLastNtError(Status);
596 Ret = FALSE;
597 }
598 if (Ret)
599 {
600 UserPostMessage(HWND_BROADCAST, WM_SYSCOLORCHANGE, 0, 0);
601 }
602 UserLeave();
603 return Ret;
604 }
605
606 DWORD
607 APIENTRY
608 NtUserSetThreadState(
609 DWORD Unknown0,
610 DWORD Unknown1)
611 {
612 UNIMPLEMENTED
613
614 return 0;
615 }
616
617 BOOL
618 APIENTRY
619 NtUserTrackMouseEvent(
620 LPTRACKMOUSEEVENT lpEventTrack)
621 {
622 UNIMPLEMENTED
623
624 return 0;
625 }
626
627
628 DWORD
629 APIENTRY
630 NtUserUpdateInputContext(
631 DWORD Unknown0,
632 DWORD Unknown1,
633 DWORD Unknown2)
634 {
635 UNIMPLEMENTED
636
637 return 0;
638 }
639
640 DWORD
641 APIENTRY
642 NtUserUpdateInstance(
643 DWORD Unknown0,
644 DWORD Unknown1,
645 DWORD Unknown2)
646 {
647 UNIMPLEMENTED
648
649 return 0;
650 }
651
652 BOOL
653 APIENTRY
654 NtUserUserHandleGrantAccess(
655 IN HANDLE hUserHandle,
656 IN HANDLE hJob,
657 IN BOOL bGrant)
658 {
659 UNIMPLEMENTED
660
661 return 0;
662 }
663
664 DWORD
665 APIENTRY
666 NtUserWaitForMsgAndEvent(
667 DWORD Unknown0)
668 {
669 UNIMPLEMENTED
670
671 return 0;
672 }
673
674 DWORD
675 APIENTRY
676 NtUserWin32PoolAllocationStats(
677 DWORD Unknown0,
678 DWORD Unknown1,
679 DWORD Unknown2,
680 DWORD Unknown3,
681 DWORD Unknown4,
682 DWORD Unknown5)
683 {
684 UNIMPLEMENTED
685
686 return 0;
687 }
688
689 DWORD
690 APIENTRY
691 NtUserYieldTask(VOID)
692 {
693 UNIMPLEMENTED
694
695 return 0;
696 }
697
698
699 DWORD
700 APIENTRY
701 NtUserCheckImeHotKey(
702 DWORD dwUnknown1,
703 DWORD dwUnknown2)
704 {
705 UNIMPLEMENTED;
706 return 0;
707 }
708
709 DWORD
710 APIENTRY
711 NtUserConsoleControl(
712 DWORD dwUnknown1,
713 DWORD dwUnknown2,
714 DWORD dwUnknown3)
715 {
716 UNIMPLEMENTED;
717 return 0;
718 }
719
720 DWORD
721 APIENTRY
722 NtUserCreateInputContext(
723 DWORD dwUnknown1)
724 {
725 UNIMPLEMENTED;
726 return 0;
727 }
728
729 DWORD
730 APIENTRY
731 NtUserDestroyInputContext(
732 DWORD dwUnknown1)
733 {
734 UNIMPLEMENTED;
735 return 0;
736 }
737
738 DWORD
739 APIENTRY
740 NtUserDisableThreadIme(
741 DWORD dwUnknown1)
742 {
743 UNIMPLEMENTED;
744 return 0;
745 }
746
747 DWORD
748 APIENTRY
749 NtUserGetAppImeLevel(
750 DWORD dwUnknown1)
751 {
752 UNIMPLEMENTED;
753 return 0;
754 }
755
756 DWORD
757 APIENTRY
758 NtUserGetAtomName(
759 ATOM nAtom,
760 LPWSTR lpBuffer)
761 {
762 UNIMPLEMENTED;
763 return 0;
764 }
765
766 DWORD
767 APIENTRY
768 NtUserGetImeInfoEx(
769 DWORD dwUnknown1,
770 DWORD dwUnknown2)
771 {
772 UNIMPLEMENTED;
773 return 0;
774 }
775
776 DWORD
777 APIENTRY
778 NtUserGetRawInputBuffer(
779 PRAWINPUT pData,
780 PUINT pcbSize,
781 UINT cbSizeHeader)
782 {
783 UNIMPLEMENTED;
784 return 0;
785 }
786
787 DWORD
788 APIENTRY
789 NtUserGetRawInputData(
790 HRAWINPUT hRawInput,
791 UINT uiCommand,
792 LPVOID pData,
793 PUINT pcbSize,
794 UINT cbSizeHeader)
795 {
796 UNIMPLEMENTED;
797 return 0;
798 }
799
800 DWORD
801 APIENTRY
802 NtUserGetRawInputDeviceInfo(
803 HANDLE hDevice,
804 UINT uiCommand,
805 LPVOID pData,
806 PUINT pcbSize
807 )
808 {
809 UNIMPLEMENTED;
810 return 0;
811 }
812
813 DWORD
814 APIENTRY
815 NtUserGetRawInputDeviceList(
816 PRAWINPUTDEVICELIST pRawInputDeviceList,
817 PUINT puiNumDevices,
818 UINT cbSize)
819 {
820 UNIMPLEMENTED;
821 return 0;
822 }
823
824 DWORD
825 APIENTRY
826 NtUserGetRegisteredRawInputDevices(
827 PRAWINPUTDEVICE pRawInputDevices,
828 PUINT puiNumDevices,
829 UINT cbSize)
830 {
831 UNIMPLEMENTED;
832 return 0;
833 }
834
835 DWORD
836 APIENTRY
837 NtUserHardErrorControl(
838 DWORD dwUnknown1,
839 DWORD dwUnknown2,
840 DWORD dwUnknown3)
841 {
842 UNIMPLEMENTED;
843 return 0;
844 }
845
846 DWORD
847 APIENTRY
848 NtUserMinMaximize(
849 HWND hWnd,
850 UINT cmd, // Wine SW_ commands
851 BOOL Hide)
852 {
853 UNIMPLEMENTED;
854 return 0;
855 }
856
857 DWORD
858 APIENTRY
859 NtUserNotifyProcessCreate(
860 DWORD dwUnknown1,
861 DWORD dwUnknown2,
862 DWORD dwUnknown3,
863 DWORD dwUnknown4)
864 {
865 UNIMPLEMENTED;
866 return 0;
867 }
868
869 BOOL
870 APIENTRY
871 NtUserPrintWindow(
872 HWND hwnd,
873 HDC hdcBlt,
874 UINT nFlags)
875 {
876 UNIMPLEMENTED;
877 return 0;
878 }
879
880 NTSTATUS
881 APIENTRY
882 NtUserProcessConnect(
883 HANDLE Process,
884 PUSERCONNECT pUserConnect,
885 DWORD Size)
886 {
887 NTSTATUS Status = STATUS_SUCCESS;
888 DPRINT("NtUserProcessConnect\n");
889 if (pUserConnect && ( Size == sizeof(USERCONNECT) ))
890 {
891 PPROCESSINFO W32Process;
892 UserEnterShared();
893 GetW32ThreadInfo();
894 W32Process = PsGetCurrentProcessWin32Process();
895 _SEH2_TRY
896 {
897 pUserConnect->siClient.psi = gpsi;
898 pUserConnect->siClient.aheList = gHandleTable;
899 pUserConnect->siClient.ulSharedDelta = (ULONG_PTR)W32Process->HeapMappings.KernelMapping -
900 (ULONG_PTR)W32Process->HeapMappings.UserMapping;
901 }
902 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
903 {
904 Status = _SEH2_GetExceptionCode();
905 }
906 _SEH2_END
907 if (!NT_SUCCESS(Status))
908 {
909 SetLastNtError(Status);
910 }
911 UserLeave();
912 return Status;
913 }
914 return STATUS_UNSUCCESSFUL;
915 }
916
917 DWORD
918 APIENTRY
919 NtUserQueryInformationThread(
920 DWORD dwUnknown1,
921 DWORD dwUnknown2,
922 DWORD dwUnknown3,
923 DWORD dwUnknown4,
924 DWORD dwUnknown5)
925 {
926 UNIMPLEMENTED;
927 return 0;
928 }
929
930 DWORD
931 APIENTRY
932 NtUserQueryInputContext(
933 DWORD dwUnknown1,
934 DWORD dwUnknown2)
935 {
936 UNIMPLEMENTED;
937 return 0;
938 }
939
940 DWORD
941 APIENTRY
942 NtUserRealInternalGetMessage(
943 DWORD dwUnknown1,
944 DWORD dwUnknown2,
945 DWORD dwUnknown3,
946 DWORD dwUnknown4,
947 DWORD dwUnknown5,
948 DWORD dwUnknown6)
949 {
950 UNIMPLEMENTED;
951 return 0;
952 }
953
954 DWORD
955 APIENTRY
956 NtUserRealWaitMessageEx(
957 DWORD dwUnknown1,
958 DWORD dwUnknown2)
959 {
960 UNIMPLEMENTED;
961 return 0;
962 }
963
964 BOOL
965 APIENTRY
966 NtUserRegisterUserApiHook(
967 PUNICODE_STRING m_dllname1,
968 PUNICODE_STRING m_funname1,
969 DWORD dwUnknown3,
970 DWORD dwUnknown4)
971 {
972 UserEnterExclusive();
973 UNIMPLEMENTED;
974 UserLeave();
975 return 0;
976 }
977
978 BOOL
979 APIENTRY
980 NtUserRegisterRawInputDevices(
981 IN PCRAWINPUTDEVICE pRawInputDevices,
982 IN UINT uiNumDevices,
983 IN UINT cbSize)
984 {
985 UNIMPLEMENTED;
986 return 0;
987 }
988
989 DWORD
990 APIENTRY
991 NtUserResolveDesktop(
992 DWORD dwUnknown1,
993 DWORD dwUnknown2,
994 DWORD dwUnknown3,
995 DWORD dwUnknown4)
996 {
997 UNIMPLEMENTED;
998 return 0;
999 }
1000
1001 DWORD
1002 APIENTRY
1003 NtUserSetAppImeLevel(
1004 DWORD dwUnknown1,
1005 DWORD dwUnknown2)
1006 {
1007 UNIMPLEMENTED;
1008 return 0;
1009 }
1010
1011 DWORD
1012 APIENTRY
1013 NtUserSetImeInfoEx(
1014 DWORD dwUnknown1)
1015 {
1016 UNIMPLEMENTED;
1017 return 0;
1018 }
1019
1020 DWORD
1021 APIENTRY
1022 NtUserSetInformationProcess(
1023 DWORD dwUnknown1,
1024 DWORD dwUnknown2,
1025 DWORD dwUnknown3,
1026 DWORD dwUnknown4)
1027 {
1028 UNIMPLEMENTED;
1029 return 0;
1030 }
1031
1032 NTSTATUS
1033 APIENTRY
1034 NtUserSetInformationThread(IN HANDLE ThreadHandle,
1035 IN USERTHREADINFOCLASS ThreadInformationClass,
1036 IN PVOID ThreadInformation,
1037 IN ULONG ThreadInformationLength)
1038
1039 {
1040 if (ThreadInformationClass == UserThreadInitiateShutdown)
1041 {
1042 DPRINT1("Shutdown initiated\n");
1043 }
1044 else if (ThreadInformationClass == UserThreadEndShutdown)
1045 {
1046 DPRINT1("Shutdown ended\n");
1047 }
1048 else
1049 {
1050 UNIMPLEMENTED;
1051 }
1052
1053 return STATUS_SUCCESS;
1054 }
1055
1056 DWORD
1057 APIENTRY
1058 NtUserSetThreadLayoutHandles(
1059 DWORD dwUnknown1,
1060 DWORD dwUnknown2)
1061 {
1062 UNIMPLEMENTED;
1063 return 0;
1064 }
1065
1066 BOOL
1067 APIENTRY
1068 NtUserSoundSentry(VOID)
1069 {
1070 UNIMPLEMENTED;
1071 return 0;
1072 }
1073
1074 DWORD
1075 APIENTRY
1076 NtUserTestForInteractiveUser(
1077 DWORD dwUnknown1)
1078 {
1079 UNIMPLEMENTED;
1080 return 0;
1081 }
1082
1083 /* http://www.cyber-ta.org/releases/malware-analysis/public/SOURCES/b47155634ccb2c30630da7e3666d3d07/b47155634ccb2c30630da7e3666d3d07.trace.html#NtUserGetIconSize */
1084 DWORD
1085 APIENTRY
1086 NtUserCalcMenuBar(
1087 DWORD dwUnknown1,
1088 DWORD dwUnknown2,
1089 DWORD dwUnknown3,
1090 DWORD dwUnknown4,
1091 DWORD dwUnknown5)
1092 {
1093 UNIMPLEMENTED;
1094 return 0;
1095 }
1096
1097 DWORD
1098 APIENTRY
1099 NtUserPaintMenuBar(
1100 DWORD dwUnknown1,
1101 DWORD dwUnknown2,
1102 DWORD dwUnknown3,
1103 DWORD dwUnknown4,
1104 DWORD dwUnknown5,
1105 DWORD dwUnknown6)
1106 {
1107 UNIMPLEMENTED;
1108 return 0;
1109 }
1110
1111 BOOL
1112 APIENTRY
1113 NtUserUnregisterUserApiHook(VOID)
1114 {
1115 UNIMPLEMENTED;
1116 return 0;
1117 }
1118
1119 BOOL
1120 APIENTRY
1121 NtUserGetLayeredWindowAttributes(
1122 HWND hwnd,
1123 COLORREF *pcrKey,
1124 BYTE *pbAlpha,
1125 DWORD *pdwFlags)
1126 {
1127 UNIMPLEMENTED;
1128 return 0;
1129 }
1130
1131 BOOL
1132 APIENTRY
1133 NtUserValidateTimerCallback(
1134 HWND hWnd,
1135 WPARAM wParam,
1136 LPARAM lParam)
1137 {
1138 BOOL Ret = FALSE;
1139 PWINDOW_OBJECT Window = NULL;
1140
1141 UserEnterShared();
1142
1143 if (hWnd)
1144 {
1145 Window = UserGetWindowObject(hWnd);
1146 if (!Window || !Window->Wnd)
1147 goto Exit;
1148 }
1149
1150 Ret = ValidateTimerCallback(PsGetCurrentThreadWin32Thread(), Window, wParam, lParam);
1151
1152 Exit:
1153 UserLeave();
1154 return Ret;
1155 }
1156
1157 DWORD
1158 APIENTRY
1159 NtUserRemoteConnect(
1160 DWORD dwUnknown1,
1161 DWORD dwUnknown2,
1162 DWORD dwUnknown3)
1163 {
1164 UNIMPLEMENTED;
1165 return 0;
1166 }
1167
1168 DWORD
1169 APIENTRY
1170 NtUserRemoteRedrawRectangle(
1171 DWORD dwUnknown1,
1172 DWORD dwUnknown2,
1173 DWORD dwUnknown3,
1174 DWORD dwUnknown4)
1175 {
1176 UNIMPLEMENTED;
1177 return 0;
1178 }
1179
1180 DWORD
1181 APIENTRY
1182 NtUserRemoteRedrawScreen(VOID)
1183 {
1184 UNIMPLEMENTED;
1185 return 0;
1186 }
1187
1188 DWORD
1189 APIENTRY
1190 NtUserRemoteStopScreenUpdates(VOID)
1191 {
1192 UNIMPLEMENTED;
1193 return 0;
1194 }
1195
1196 DWORD
1197 APIENTRY
1198 NtUserCtxDisplayIOCtl(
1199 DWORD dwUnknown1,
1200 DWORD dwUnknown2,
1201 DWORD dwUnknown3)
1202 {
1203 UNIMPLEMENTED;
1204 return 0;
1205 }
1206
1207
1208 /* EOF */