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