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