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