d014a00cfd79f11af23de54393784185993f95b1
[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
509 DWORD
510 APIENTRY
511 NtUserRegisterTasklist(
512 DWORD Unknown0)
513 {
514 UNIMPLEMENTED
515
516 return 0;
517 }
518
519
520 DWORD
521 APIENTRY
522 NtUserSBGetParms(
523 DWORD Unknown0,
524 DWORD Unknown1,
525 DWORD Unknown2,
526 DWORD Unknown3)
527 {
528 UNIMPLEMENTED
529
530 return 0;
531 }
532
533 DWORD
534 APIENTRY
535 NtUserSetConsoleReserveKeys(
536 DWORD Unknown0,
537 DWORD Unknown1)
538 {
539 UNIMPLEMENTED
540
541 return 0;
542 }
543
544 DWORD
545 APIENTRY
546 NtUserSetDbgTag(
547 DWORD Unknown0,
548 DWORD Unknown1)
549 {
550 UNIMPLEMENTED
551
552 return 0;
553 }
554
555 DWORD
556 APIENTRY
557 NtUserSetImeHotKey(
558 DWORD Unknown0,
559 DWORD Unknown1,
560 DWORD Unknown2,
561 DWORD Unknown3,
562 DWORD Unknown4)
563 {
564 UNIMPLEMENTED
565
566 return 0;
567 }
568
569
570 DWORD
571 APIENTRY
572 NtUserSetRipFlags(
573 DWORD Unknown0,
574 DWORD Unknown1)
575 {
576 UNIMPLEMENTED
577
578 return 0;
579 }
580
581 BOOL
582 APIENTRY
583 NtUserSetSysColors(
584 int cElements,
585 IN CONST INT *lpaElements,
586 IN CONST COLORREF *lpaRgbValues,
587 FLONG Flags)
588 {
589 DWORD Ret = FALSE;
590 NTSTATUS Status = STATUS_SUCCESS;
591 UserEnterExclusive();
592 _SEH2_TRY
593 {
594 ProbeForRead(lpaElements,
595 sizeof(INT),
596 1);
597 ProbeForRead(lpaRgbValues,
598 sizeof(INT),
599 1);
600 // Developers: We are thread locked and calling gdi.
601 Ret = IntSetSysColors(cElements, (INT*)lpaElements, (COLORREF*)lpaRgbValues);
602 }
603 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
604 {
605 Status = _SEH2_GetExceptionCode();
606 }
607 _SEH2_END;
608 if (!NT_SUCCESS(Status))
609 {
610 SetLastNtError(Status);
611 Ret = FALSE;
612 }
613 if (Ret)
614 {
615 UserPostMessage(HWND_BROADCAST, WM_SYSCOLORCHANGE, 0, 0);
616 }
617 UserLeave();
618 return Ret;
619 }
620
621 DWORD
622 APIENTRY
623 NtUserSetThreadState(
624 DWORD Unknown0,
625 DWORD Unknown1)
626 {
627 UNIMPLEMENTED
628
629 return 0;
630 }
631
632 BOOL
633 APIENTRY
634 NtUserTrackMouseEvent(
635 LPTRACKMOUSEEVENT lpEventTrack)
636 {
637 UNIMPLEMENTED
638
639 return 0;
640 }
641
642
643 DWORD
644 APIENTRY
645 NtUserUpdateInputContext(
646 DWORD Unknown0,
647 DWORD Unknown1,
648 DWORD Unknown2)
649 {
650 UNIMPLEMENTED
651
652 return 0;
653 }
654
655 DWORD
656 APIENTRY
657 NtUserUpdateInstance(
658 DWORD Unknown0,
659 DWORD Unknown1,
660 DWORD Unknown2)
661 {
662 UNIMPLEMENTED
663
664 return 0;
665 }
666
667 BOOL
668 APIENTRY
669 NtUserUserHandleGrantAccess(
670 IN HANDLE hUserHandle,
671 IN HANDLE hJob,
672 IN BOOL bGrant)
673 {
674 UNIMPLEMENTED
675
676 return 0;
677 }
678
679 DWORD
680 APIENTRY
681 NtUserWaitForMsgAndEvent(
682 DWORD Unknown0)
683 {
684 UNIMPLEMENTED
685
686 return 0;
687 }
688
689 DWORD
690 APIENTRY
691 NtUserWin32PoolAllocationStats(
692 DWORD Unknown0,
693 DWORD Unknown1,
694 DWORD Unknown2,
695 DWORD Unknown3,
696 DWORD Unknown4,
697 DWORD Unknown5)
698 {
699 UNIMPLEMENTED
700
701 return 0;
702 }
703
704 DWORD
705 APIENTRY
706 NtUserYieldTask(VOID)
707 {
708 UNIMPLEMENTED
709
710 return 0;
711 }
712
713
714 DWORD
715 APIENTRY
716 NtUserCheckImeHotKey(
717 DWORD dwUnknown1,
718 DWORD dwUnknown2)
719 {
720 UNIMPLEMENTED;
721 return 0;
722 }
723
724 DWORD
725 APIENTRY
726 NtUserConsoleControl(
727 DWORD dwUnknown1,
728 DWORD dwUnknown2,
729 DWORD dwUnknown3)
730 {
731 UNIMPLEMENTED;
732 return 0;
733 }
734
735 DWORD
736 APIENTRY
737 NtUserCreateInputContext(
738 DWORD dwUnknown1)
739 {
740 UNIMPLEMENTED;
741 return 0;
742 }
743
744 DWORD
745 APIENTRY
746 NtUserDestroyInputContext(
747 DWORD dwUnknown1)
748 {
749 UNIMPLEMENTED;
750 return 0;
751 }
752
753 DWORD
754 APIENTRY
755 NtUserDisableThreadIme(
756 DWORD dwUnknown1)
757 {
758 UNIMPLEMENTED;
759 return 0;
760 }
761
762 DWORD
763 APIENTRY
764 NtUserGetAppImeLevel(
765 DWORD dwUnknown1)
766 {
767 UNIMPLEMENTED;
768 return 0;
769 }
770
771 DWORD
772 APIENTRY
773 NtUserGetAtomName(
774 ATOM nAtom,
775 LPWSTR lpBuffer)
776 {
777 UNIMPLEMENTED;
778 return 0;
779 }
780
781 DWORD
782 APIENTRY
783 NtUserGetImeInfoEx(
784 DWORD dwUnknown1,
785 DWORD dwUnknown2)
786 {
787 UNIMPLEMENTED;
788 return 0;
789 }
790
791 DWORD
792 APIENTRY
793 NtUserGetRawInputBuffer(
794 PRAWINPUT pData,
795 PUINT pcbSize,
796 UINT cbSizeHeader)
797 {
798 UNIMPLEMENTED;
799 return 0;
800 }
801
802 DWORD
803 APIENTRY
804 NtUserGetRawInputData(
805 HRAWINPUT hRawInput,
806 UINT uiCommand,
807 LPVOID pData,
808 PUINT pcbSize,
809 UINT cbSizeHeader)
810 {
811 UNIMPLEMENTED;
812 return 0;
813 }
814
815 DWORD
816 APIENTRY
817 NtUserGetRawInputDeviceInfo(
818 HANDLE hDevice,
819 UINT uiCommand,
820 LPVOID pData,
821 PUINT pcbSize
822 )
823 {
824 UNIMPLEMENTED;
825 return 0;
826 }
827
828 DWORD
829 APIENTRY
830 NtUserGetRawInputDeviceList(
831 PRAWINPUTDEVICELIST pRawInputDeviceList,
832 PUINT puiNumDevices,
833 UINT cbSize)
834 {
835 UNIMPLEMENTED;
836 return 0;
837 }
838
839 DWORD
840 APIENTRY
841 NtUserGetRegisteredRawInputDevices(
842 PRAWINPUTDEVICE pRawInputDevices,
843 PUINT puiNumDevices,
844 UINT cbSize)
845 {
846 UNIMPLEMENTED;
847 return 0;
848 }
849
850 DWORD
851 APIENTRY
852 NtUserHardErrorControl(
853 DWORD dwUnknown1,
854 DWORD dwUnknown2,
855 DWORD dwUnknown3)
856 {
857 UNIMPLEMENTED;
858 return 0;
859 }
860
861 DWORD
862 APIENTRY
863 NtUserMinMaximize(
864 HWND hWnd,
865 UINT cmd, // Wine SW_ commands
866 BOOL Hide)
867 {
868 UNIMPLEMENTED;
869 return 0;
870 }
871
872 DWORD
873 APIENTRY
874 NtUserNotifyProcessCreate(
875 DWORD dwUnknown1,
876 DWORD dwUnknown2,
877 DWORD dwUnknown3,
878 DWORD dwUnknown4)
879 {
880 UNIMPLEMENTED;
881 return 0;
882 }
883
884 BOOL
885 APIENTRY
886 NtUserPrintWindow(
887 HWND hwnd,
888 HDC hdcBlt,
889 UINT nFlags)
890 {
891 UNIMPLEMENTED;
892 return 0;
893 }
894
895 NTSTATUS
896 APIENTRY
897 NtUserProcessConnect(
898 HANDLE Process,
899 PUSERCONNECT pUserConnect,
900 DWORD Size)
901 {
902 NTSTATUS Status = STATUS_SUCCESS;
903 DPRINT("NtUserProcessConnect\n");
904 if (pUserConnect && ( Size == sizeof(USERCONNECT) ))
905 {
906 PPROCESSINFO W32Process;
907 UserEnterShared();
908 GetW32ThreadInfo();
909 W32Process = PsGetCurrentProcessWin32Process();
910 _SEH2_TRY
911 {
912 pUserConnect->siClient.psi = gpsi;
913 pUserConnect->siClient.aheList = gHandleTable;
914 pUserConnect->siClient.ulSharedDelta = (ULONG_PTR)W32Process->HeapMappings.KernelMapping -
915 (ULONG_PTR)W32Process->HeapMappings.UserMapping;
916 }
917 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
918 {
919 Status = _SEH2_GetExceptionCode();
920 }
921 _SEH2_END
922 if (!NT_SUCCESS(Status))
923 {
924 SetLastNtError(Status);
925 }
926 UserLeave();
927 return Status;
928 }
929 return STATUS_UNSUCCESSFUL;
930 }
931
932 DWORD
933 APIENTRY
934 NtUserQueryInformationThread(
935 DWORD dwUnknown1,
936 DWORD dwUnknown2,
937 DWORD dwUnknown3,
938 DWORD dwUnknown4,
939 DWORD dwUnknown5)
940 {
941 UNIMPLEMENTED;
942 return 0;
943 }
944
945 DWORD
946 APIENTRY
947 NtUserQueryInputContext(
948 DWORD dwUnknown1,
949 DWORD dwUnknown2)
950 {
951 UNIMPLEMENTED;
952 return 0;
953 }
954
955 DWORD
956 APIENTRY
957 NtUserRealInternalGetMessage(
958 DWORD dwUnknown1,
959 DWORD dwUnknown2,
960 DWORD dwUnknown3,
961 DWORD dwUnknown4,
962 DWORD dwUnknown5,
963 DWORD dwUnknown6)
964 {
965 UNIMPLEMENTED;
966 return 0;
967 }
968
969 DWORD
970 APIENTRY
971 NtUserRealWaitMessageEx(
972 DWORD dwUnknown1,
973 DWORD dwUnknown2)
974 {
975 UNIMPLEMENTED;
976 return 0;
977 }
978
979 BOOL
980 APIENTRY
981 NtUserRegisterUserApiHook(
982 PUNICODE_STRING m_dllname1,
983 PUNICODE_STRING m_funname1,
984 DWORD dwUnknown3,
985 DWORD dwUnknown4)
986 {
987 UserEnterExclusive();
988 UNIMPLEMENTED;
989 UserLeave();
990 return 0;
991 }
992
993 BOOL
994 APIENTRY
995 NtUserRegisterRawInputDevices(
996 IN PCRAWINPUTDEVICE pRawInputDevices,
997 IN UINT uiNumDevices,
998 IN UINT cbSize)
999 {
1000 UNIMPLEMENTED;
1001 return 0;
1002 }
1003
1004 DWORD
1005 APIENTRY
1006 NtUserResolveDesktop(
1007 DWORD dwUnknown1,
1008 DWORD dwUnknown2,
1009 DWORD dwUnknown3,
1010 DWORD dwUnknown4)
1011 {
1012 UNIMPLEMENTED;
1013 return 0;
1014 }
1015
1016 DWORD
1017 APIENTRY
1018 NtUserSetAppImeLevel(
1019 DWORD dwUnknown1,
1020 DWORD dwUnknown2)
1021 {
1022 UNIMPLEMENTED;
1023 return 0;
1024 }
1025
1026 DWORD
1027 APIENTRY
1028 NtUserSetImeInfoEx(
1029 DWORD dwUnknown1)
1030 {
1031 UNIMPLEMENTED;
1032 return 0;
1033 }
1034
1035 DWORD
1036 APIENTRY
1037 NtUserSetInformationProcess(
1038 DWORD dwUnknown1,
1039 DWORD dwUnknown2,
1040 DWORD dwUnknown3,
1041 DWORD dwUnknown4)
1042 {
1043 UNIMPLEMENTED;
1044 return 0;
1045 }
1046
1047 DWORD
1048 APIENTRY
1049 NtUserSetInformationThread(
1050 DWORD dwUnknown1,
1051 DWORD dwUnknown2,
1052 DWORD dwUnknown3,
1053 DWORD dwUnknown4)
1054 {
1055 UNIMPLEMENTED;
1056 return 0;
1057 }
1058
1059 DWORD
1060 APIENTRY
1061 NtUserSetThreadLayoutHandles(
1062 DWORD dwUnknown1,
1063 DWORD dwUnknown2)
1064 {
1065 UNIMPLEMENTED;
1066 return 0;
1067 }
1068
1069 BOOL
1070 APIENTRY
1071 NtUserSoundSentry(VOID)
1072 {
1073 UNIMPLEMENTED;
1074 return 0;
1075 }
1076
1077 DWORD
1078 APIENTRY
1079 NtUserTestForInteractiveUser(
1080 DWORD dwUnknown1)
1081 {
1082 UNIMPLEMENTED;
1083 return 0;
1084 }
1085
1086 /* http://www.cyber-ta.org/releases/malware-analysis/public/SOURCES/b47155634ccb2c30630da7e3666d3d07/b47155634ccb2c30630da7e3666d3d07.trace.html#NtUserGetIconSize */
1087 DWORD
1088 APIENTRY
1089 NtUserCalcMenuBar(
1090 DWORD dwUnknown1,
1091 DWORD dwUnknown2,
1092 DWORD dwUnknown3,
1093 DWORD dwUnknown4,
1094 DWORD dwUnknown5)
1095 {
1096 UNIMPLEMENTED;
1097 return 0;
1098 }
1099
1100 DWORD
1101 APIENTRY
1102 NtUserPaintMenuBar(
1103 DWORD dwUnknown1,
1104 DWORD dwUnknown2,
1105 DWORD dwUnknown3,
1106 DWORD dwUnknown4,
1107 DWORD dwUnknown5,
1108 DWORD dwUnknown6)
1109 {
1110 UNIMPLEMENTED;
1111 return 0;
1112 }
1113
1114 BOOL
1115 APIENTRY
1116 NtUserUnregisterUserApiHook(VOID)
1117 {
1118 UNIMPLEMENTED;
1119 return 0;
1120 }
1121
1122 BOOL
1123 APIENTRY
1124 NtUserGetLayeredWindowAttributes(
1125 HWND hwnd,
1126 COLORREF *pcrKey,
1127 BYTE *pbAlpha,
1128 DWORD *pdwFlags)
1129 {
1130 UNIMPLEMENTED;
1131 return 0;
1132 }
1133
1134 /* ValidateRect gets redirected to NtUserValidateRect:
1135 http://blog.csdn.net/ntdll/archive/2005/10/19/509299.aspx */
1136 BOOL
1137 APIENTRY
1138 NtUserValidateRect(
1139 HWND hWnd,
1140 const RECT *lpRect)
1141 {
1142 UNIMPLEMENTED;
1143 return 0;
1144 }
1145
1146 BOOL
1147 APIENTRY
1148 NtUserValidateTimerCallback(
1149 HWND hWnd,
1150 WPARAM wParam,
1151 LPARAM lParam)
1152 {
1153 BOOL Ret = FALSE;
1154 PWINDOW_OBJECT Window = NULL;
1155
1156 UserEnterShared();
1157
1158 if (hWnd)
1159 {
1160 Window = UserGetWindowObject(hWnd);
1161 if (!Window || !Window->Wnd)
1162 goto Exit;
1163 }
1164
1165 Ret = ValidateTimerCallback(PsGetCurrentThreadWin32Thread(), Window, wParam, lParam);
1166
1167 Exit:
1168 UserLeave();
1169 return Ret;
1170 }
1171
1172 DWORD
1173 APIENTRY
1174 NtUserRemoteConnect(
1175 DWORD dwUnknown1,
1176 DWORD dwUnknown2,
1177 DWORD dwUnknown3)
1178 {
1179 UNIMPLEMENTED;
1180 return 0;
1181 }
1182
1183 DWORD
1184 APIENTRY
1185 NtUserRemoteRedrawRectangle(
1186 DWORD dwUnknown1,
1187 DWORD dwUnknown2,
1188 DWORD dwUnknown3,
1189 DWORD dwUnknown4)
1190 {
1191 UNIMPLEMENTED;
1192 return 0;
1193 }
1194
1195 DWORD
1196 APIENTRY
1197 NtUserRemoteRedrawScreen(VOID)
1198 {
1199 UNIMPLEMENTED;
1200 return 0;
1201 }
1202
1203 DWORD
1204 APIENTRY
1205 NtUserRemoteStopScreenUpdates(VOID)
1206 {
1207 UNIMPLEMENTED;
1208 return 0;
1209 }
1210
1211 DWORD
1212 APIENTRY
1213 NtUserCtxDisplayIOCtl(
1214 DWORD dwUnknown1,
1215 DWORD dwUnknown2,
1216 DWORD dwUnknown3)
1217 {
1218 UNIMPLEMENTED;
1219 return 0;
1220 }
1221
1222
1223 /* EOF */