* Sync the recent cmake branch changes.
[reactos.git] / 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 EngSetLastError(ERROR_INVALID_PARAMETER);
44 goto Exit;
45 }
46 Status = PsLookupThreadByThreadId((HANDLE)idAttachTo, &ThreadTo);
47 if (!NT_SUCCESS(Status))
48 {
49 EngSetLastError(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 DWORD
203 APIENTRY
204 NtUserEvent(
205 DWORD Unknown0)
206 {
207 UNIMPLEMENTED
208
209 return 0;
210 }
211
212 DWORD
213 APIENTRY
214 NtUserExcludeUpdateRgn(
215 HDC hDC,
216 HWND hWnd)
217 {
218 UNIMPLEMENTED
219
220 return 0;
221 }
222
223 BOOL
224 APIENTRY
225 NtUserGetAltTabInfo(
226 HWND hwnd,
227 INT iItem,
228 PALTTABINFO pati,
229 LPWSTR pszItemText,
230 UINT cchItemText,
231 BOOL Ansi)
232 {
233 UNIMPLEMENTED
234
235 return 0;
236 }
237
238 HBRUSH
239 APIENTRY
240 NtUserGetControlBrush(
241 HWND hwnd,
242 HDC hdc,
243 UINT ctlType)
244 {
245 UNIMPLEMENTED
246
247 return 0;
248 }
249
250
251 /*
252 * Called from PaintRect, works almost like wine PaintRect16 but returns hBrush.
253 */
254 HBRUSH
255 APIENTRY
256 NtUserGetControlColor(
257 HWND hwndParent,
258 HWND hwnd,
259 HDC hdc,
260 UINT CtlMsg) // Wine PaintRect: WM_CTLCOLORMSGBOX + hbrush
261 {
262 UNIMPLEMENTED
263
264 return 0;
265 }
266
267 DWORD
268 APIENTRY
269 NtUserGetImeHotKey(
270 DWORD Unknown0,
271 DWORD Unknown1,
272 DWORD Unknown2,
273 DWORD Unknown3)
274 {
275 UNIMPLEMENTED
276
277 return 0;
278 }
279
280 BOOL
281 APIENTRY
282 NtUserImpersonateDdeClientWindow(
283 HWND hWndClient,
284 HWND hWndServer)
285 {
286 UNIMPLEMENTED
287
288 return 0;
289 }
290
291 NTSTATUS
292 APIENTRY
293 NtUserInitializeClientPfnArrays(
294 PPFNCLIENT pfnClientA,
295 PPFNCLIENT pfnClientW,
296 PPFNCLIENTWORKER pfnClientWorker,
297 HINSTANCE hmodUser)
298 {
299 NTSTATUS Status = STATUS_SUCCESS;
300 DPRINT("Enter NtUserInitializeClientPfnArrays User32 0x%x\n",hmodUser);
301
302 if (ClientPfnInit) return Status;
303
304 UserEnterExclusive();
305
306 _SEH2_TRY
307 {
308 ProbeForRead( pfnClientA, sizeof(PFNCLIENT), 1);
309 ProbeForRead( pfnClientW, sizeof(PFNCLIENT), 1);
310 ProbeForRead( pfnClientWorker, sizeof(PFNCLIENTWORKER), 1);
311 RtlCopyMemory(&gpsi->apfnClientA, pfnClientA, sizeof(PFNCLIENT));
312 RtlCopyMemory(&gpsi->apfnClientW, pfnClientW, sizeof(PFNCLIENT));
313 RtlCopyMemory(&gpsi->apfnClientWorker, pfnClientWorker, sizeof(PFNCLIENTWORKER));
314
315 //// FIXME! HAX! Temporary until server side is finished.
316 //// Copy the client side procs for now.
317 RtlCopyMemory(&gpsi->aStoCidPfn, pfnClientW, sizeof(gpsi->aStoCidPfn));
318
319 hModClient = hmodUser;
320 ClientPfnInit = TRUE;
321 }
322 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
323 {
324 Status =_SEH2_GetExceptionCode();
325 }
326 _SEH2_END
327
328 if (!NT_SUCCESS(Status))
329 {
330 DPRINT1("Failed reading Client Pfns from user space.\n");
331 SetLastNtError(Status);
332 }
333
334 UserLeave();
335 return Status;
336 }
337
338 DWORD
339 APIENTRY
340 NtUserInitTask(
341 DWORD Unknown0,
342 DWORD Unknown1,
343 DWORD Unknown2,
344 DWORD Unknown3,
345 DWORD Unknown4,
346 DWORD Unknown5,
347 DWORD Unknown6,
348 DWORD Unknown7,
349 DWORD Unknown8,
350 DWORD Unknown9,
351 DWORD Unknown10,
352 DWORD Unknown11)
353 {
354 UNIMPLEMENTED
355
356 return 0;
357 }
358
359 BOOL
360 APIENTRY
361 NtUserLockWorkStation(VOID)
362 {
363 UNIMPLEMENTED
364
365 return 0;
366 }
367
368 DWORD
369 APIENTRY
370 NtUserMNDragLeave(VOID)
371 {
372 UNIMPLEMENTED
373
374 return 0;
375 }
376
377 DWORD
378 APIENTRY
379 NtUserMNDragOver(
380 DWORD Unknown0,
381 DWORD Unknown1)
382 {
383 UNIMPLEMENTED
384
385 return 0;
386 }
387
388 DWORD
389 APIENTRY
390 NtUserModifyUserStartupInfoFlags(
391 DWORD Unknown0,
392 DWORD Unknown1)
393 {
394 UNIMPLEMENTED
395
396 return 0;
397 }
398
399 DWORD
400 APIENTRY
401 NtUserNotifyIMEStatus(
402 DWORD Unknown0,
403 DWORD Unknown1,
404 DWORD Unknown2)
405 {
406 UNIMPLEMENTED
407
408 return 0;
409 }
410
411 DWORD
412 APIENTRY
413 NtUserQueryUserCounters(
414 DWORD Unknown0,
415 DWORD Unknown1,
416 DWORD Unknown2,
417 DWORD Unknown3,
418 DWORD Unknown4)
419 {
420 UNIMPLEMENTED
421
422 return 0;
423 }
424
425 DWORD
426 APIENTRY
427 NtUserRegisterTasklist(
428 DWORD Unknown0)
429 {
430 UNIMPLEMENTED
431
432 return 0;
433 }
434
435 DWORD
436 APIENTRY
437 NtUserSetConsoleReserveKeys(
438 DWORD Unknown0,
439 DWORD Unknown1)
440 {
441 UNIMPLEMENTED
442
443 return 0;
444 }
445
446 DWORD
447 APIENTRY
448 NtUserSetDbgTag(
449 DWORD Unknown0,
450 DWORD Unknown1)
451 {
452 UNIMPLEMENTED
453
454 return 0;
455 }
456
457 DWORD
458 APIENTRY
459 NtUserSetImeHotKey(
460 DWORD Unknown0,
461 DWORD Unknown1,
462 DWORD Unknown2,
463 DWORD Unknown3,
464 DWORD Unknown4)
465 {
466 UNIMPLEMENTED
467
468 return 0;
469 }
470
471
472 DWORD
473 APIENTRY
474 NtUserSetRipFlags(
475 DWORD Unknown0,
476 DWORD Unknown1)
477 {
478 UNIMPLEMENTED
479
480 return 0;
481 }
482
483 BOOL
484 APIENTRY
485 NtUserSetSysColors(
486 int cElements,
487 IN CONST INT *lpaElements,
488 IN CONST COLORREF *lpaRgbValues,
489 FLONG Flags)
490 {
491 DWORD Ret = TRUE;
492
493 if (cElements == 0)
494 return TRUE;
495
496 /* We need this check to prevent overflow later */
497 if ((ULONG)cElements >= 0x40000000)
498 {
499 EngSetLastError(ERROR_NOACCESS);
500 return FALSE;
501 }
502
503 UserEnterExclusive();
504
505 _SEH2_TRY
506 {
507 ProbeForRead(lpaElements, cElements * sizeof(INT), 1);
508 ProbeForRead(lpaRgbValues, cElements * sizeof(COLORREF), 1);
509
510 IntSetSysColors(cElements, lpaElements, lpaRgbValues);
511 }
512 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
513 {
514 SetLastNtError(_SEH2_GetExceptionCode());
515 Ret = FALSE;
516 }
517 _SEH2_END;
518
519 if (Ret)
520 {
521 UserSendNotifyMessage(HWND_BROADCAST, WM_SYSCOLORCHANGE, 0, 0);
522
523 UserRedrawDesktop();
524 }
525
526 UserLeave();
527 return Ret;
528 }
529
530 DWORD
531 APIENTRY
532 NtUserSetThreadState(
533 DWORD Unknown0,
534 DWORD Unknown1)
535 {
536 UNIMPLEMENTED
537
538 return 0;
539 }
540
541 DWORD
542 APIENTRY
543 NtUserUpdateInputContext(
544 DWORD Unknown0,
545 DWORD Unknown1,
546 DWORD Unknown2)
547 {
548 UNIMPLEMENTED
549
550 return 0;
551 }
552
553 DWORD
554 APIENTRY
555 NtUserUpdateInstance(
556 DWORD Unknown0,
557 DWORD Unknown1,
558 DWORD Unknown2)
559 {
560 UNIMPLEMENTED
561
562 return 0;
563 }
564
565 BOOL
566 APIENTRY
567 NtUserUserHandleGrantAccess(
568 IN HANDLE hUserHandle,
569 IN HANDLE hJob,
570 IN BOOL bGrant)
571 {
572 UNIMPLEMENTED
573
574 return 0;
575 }
576
577 DWORD
578 APIENTRY
579 NtUserWaitForMsgAndEvent(
580 DWORD Unknown0)
581 {
582 UNIMPLEMENTED
583
584 return 0;
585 }
586
587 DWORD
588 APIENTRY
589 NtUserWin32PoolAllocationStats(
590 DWORD Unknown0,
591 DWORD Unknown1,
592 DWORD Unknown2,
593 DWORD Unknown3,
594 DWORD Unknown4,
595 DWORD Unknown5)
596 {
597 UNIMPLEMENTED
598
599 return 0;
600 }
601
602 DWORD
603 APIENTRY
604 NtUserYieldTask(VOID)
605 {
606 UNIMPLEMENTED
607
608 return 0;
609 }
610
611
612 DWORD
613 APIENTRY
614 NtUserCheckImeHotKey(
615 DWORD dwUnknown1,
616 DWORD dwUnknown2)
617 {
618 UNIMPLEMENTED;
619 return 0;
620 }
621
622 DWORD
623 APIENTRY
624 NtUserConsoleControl(
625 DWORD dwUnknown1,
626 DWORD dwUnknown2,
627 DWORD dwUnknown3)
628 {
629 UNIMPLEMENTED;
630 return 0;
631 }
632
633 DWORD
634 APIENTRY
635 NtUserCreateInputContext(
636 DWORD dwUnknown1)
637 {
638 UNIMPLEMENTED;
639 return 0;
640 }
641
642 DWORD
643 APIENTRY
644 NtUserDestroyInputContext(
645 DWORD dwUnknown1)
646 {
647 UNIMPLEMENTED;
648 return 0;
649 }
650
651 DWORD
652 APIENTRY
653 NtUserDisableThreadIme(
654 DWORD dwUnknown1)
655 {
656 UNIMPLEMENTED;
657 return 0;
658 }
659
660 DWORD
661 APIENTRY
662 NtUserGetAppImeLevel(
663 DWORD dwUnknown1)
664 {
665 UNIMPLEMENTED;
666 return 0;
667 }
668
669 DWORD
670 APIENTRY
671 NtUserGetAtomName(
672 ATOM nAtom,
673 LPWSTR lpBuffer)
674 {
675 UNIMPLEMENTED;
676 return 0;
677 }
678
679 DWORD
680 APIENTRY
681 NtUserGetImeInfoEx(
682 DWORD dwUnknown1,
683 DWORD dwUnknown2)
684 {
685 UNIMPLEMENTED;
686 return 0;
687 }
688
689 DWORD
690 APIENTRY
691 NtUserGetRawInputBuffer(
692 PRAWINPUT pData,
693 PUINT pcbSize,
694 UINT cbSizeHeader)
695 {
696 UNIMPLEMENTED;
697 return 0;
698 }
699
700 DWORD
701 APIENTRY
702 NtUserGetRawInputData(
703 HRAWINPUT hRawInput,
704 UINT uiCommand,
705 LPVOID pData,
706 PUINT pcbSize,
707 UINT cbSizeHeader)
708 {
709 UNIMPLEMENTED;
710 return 0;
711 }
712
713 DWORD
714 APIENTRY
715 NtUserGetRawInputDeviceInfo(
716 HANDLE hDevice,
717 UINT uiCommand,
718 LPVOID pData,
719 PUINT pcbSize
720 )
721 {
722 UNIMPLEMENTED;
723 return 0;
724 }
725
726 DWORD
727 APIENTRY
728 NtUserGetRawInputDeviceList(
729 PRAWINPUTDEVICELIST pRawInputDeviceList,
730 PUINT puiNumDevices,
731 UINT cbSize)
732 {
733 UNIMPLEMENTED;
734 return 0;
735 }
736
737 DWORD
738 APIENTRY
739 NtUserGetRegisteredRawInputDevices(
740 PRAWINPUTDEVICE pRawInputDevices,
741 PUINT puiNumDevices,
742 UINT cbSize)
743 {
744 UNIMPLEMENTED;
745 return 0;
746 }
747
748 DWORD
749 APIENTRY
750 NtUserHardErrorControl(
751 DWORD dwUnknown1,
752 DWORD dwUnknown2,
753 DWORD dwUnknown3)
754 {
755 UNIMPLEMENTED;
756 return 0;
757 }
758
759 DWORD
760 APIENTRY
761 NtUserMinMaximize(
762 HWND hWnd,
763 UINT cmd, // Wine SW_ commands
764 BOOL Hide)
765 {
766 RECTL NewPos;
767 UINT SwFlags;
768 PWND pWnd;
769
770 DPRINT("Enter NtUserMinMaximize\n");
771 UserEnterExclusive();
772
773 pWnd = UserGetWindowObject(hWnd);
774 if ( !pWnd || // FIXME:
775 pWnd == IntGetDesktopWindow() || // pWnd->fnid == FNID_DESKTOP
776 pWnd == IntGetMessageWindow() ) // pWnd->fnid == FNID_MESSAGEWND
777 {
778 goto Exit;
779 }
780
781 if ( cmd > SW_MAX || pWnd->state2 & WNDS2_INDESTROY)
782 {
783 EngSetLastError(ERROR_INVALID_PARAMETER);
784 goto Exit;
785 }
786
787 co_WinPosMinMaximize(pWnd, cmd, &NewPos);
788
789 SwFlags = Hide ? SWP_NOACTIVATE|SWP_NOZORDER|SWP_FRAMECHANGED : SWP_NOZORDER|SWP_FRAMECHANGED;
790
791 co_WinPosSetWindowPos( pWnd,
792 NULL,
793 NewPos.left,
794 NewPos.top,
795 NewPos.right,
796 NewPos.bottom,
797 SwFlags);
798
799 co_WinPosShowWindow(pWnd, cmd);
800
801 Exit:
802 DPRINT("Leave NtUserMinMaximize\n");
803 UserLeave();
804 return 0; // Always NULL?
805 }
806
807 DWORD
808 APIENTRY
809 NtUserNotifyProcessCreate(
810 DWORD dwUnknown1,
811 DWORD dwUnknown2,
812 DWORD dwUnknown3,
813 DWORD dwUnknown4)
814 {
815 UNIMPLEMENTED;
816 return 0;
817 }
818
819 NTSTATUS
820 APIENTRY
821 NtUserProcessConnect(
822 HANDLE Process,
823 PUSERCONNECT pUserConnect,
824 DWORD Size)
825 {
826 NTSTATUS Status = STATUS_SUCCESS;
827 DPRINT("NtUserProcessConnect\n");
828 if (pUserConnect && ( Size == sizeof(USERCONNECT) ))
829 {
830 PPROCESSINFO W32Process;
831 UserEnterShared();
832 GetW32ThreadInfo();
833 W32Process = PsGetCurrentProcessWin32Process();
834 _SEH2_TRY
835 {
836 pUserConnect->siClient.psi = gpsi;
837 pUserConnect->siClient.aheList = gHandleTable;
838 pUserConnect->siClient.ulSharedDelta = (ULONG_PTR)W32Process->HeapMappings.KernelMapping -
839 (ULONG_PTR)W32Process->HeapMappings.UserMapping;
840 }
841 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
842 {
843 Status = _SEH2_GetExceptionCode();
844 }
845 _SEH2_END
846 if (!NT_SUCCESS(Status))
847 {
848 SetLastNtError(Status);
849 }
850 UserLeave();
851 return Status;
852 }
853 return STATUS_UNSUCCESSFUL;
854 }
855
856 DWORD
857 APIENTRY
858 NtUserQueryInformationThread(
859 DWORD dwUnknown1,
860 DWORD dwUnknown2,
861 DWORD dwUnknown3,
862 DWORD dwUnknown4,
863 DWORD dwUnknown5)
864 {
865 UNIMPLEMENTED;
866 return 0;
867 }
868
869 DWORD
870 APIENTRY
871 NtUserQueryInputContext(
872 DWORD dwUnknown1,
873 DWORD dwUnknown2)
874 {
875 UNIMPLEMENTED;
876 return 0;
877 }
878
879 BOOL
880 APIENTRY
881 NtUserRealInternalGetMessage(
882 LPMSG lpMsg,
883 HWND hWnd,
884 UINT wMsgFilterMin,
885 UINT wMsgFilterMax,
886 UINT wRemoveMsg,
887 BOOL bGMSG)
888 {
889 UNIMPLEMENTED;
890 return 0;
891 }
892
893 BOOL
894 APIENTRY
895 NtUserRealWaitMessageEx(
896 DWORD dwWakeMask,
897 UINT uTimeout)
898 {
899 UNIMPLEMENTED;
900 return 0;
901 }
902
903 BOOL
904 APIENTRY
905 NtUserRegisterUserApiHook(
906 PUNICODE_STRING m_dllname1,
907 PUNICODE_STRING m_funname1,
908 DWORD dwUnknown3,
909 DWORD dwUnknown4)
910 {
911 UserEnterExclusive();
912 UNIMPLEMENTED;
913 UserLeave();
914 return 0;
915 }
916
917 BOOL
918 APIENTRY
919 NtUserRegisterRawInputDevices(
920 IN PCRAWINPUTDEVICE pRawInputDevices,
921 IN UINT uiNumDevices,
922 IN UINT cbSize)
923 {
924 UNIMPLEMENTED;
925 return 0;
926 }
927
928 DWORD
929 APIENTRY
930 NtUserResolveDesktop(
931 DWORD dwUnknown1,
932 DWORD dwUnknown2,
933 DWORD dwUnknown3,
934 DWORD dwUnknown4)
935 {
936 UNIMPLEMENTED;
937 return 0;
938 }
939
940 DWORD
941 APIENTRY
942 NtUserSetAppImeLevel(
943 DWORD dwUnknown1,
944 DWORD dwUnknown2)
945 {
946 UNIMPLEMENTED;
947 return 0;
948 }
949
950 DWORD
951 APIENTRY
952 NtUserSetImeInfoEx(
953 DWORD dwUnknown1)
954 {
955 UNIMPLEMENTED;
956 return 0;
957 }
958
959 DWORD
960 APIENTRY
961 NtUserSetInformationProcess(
962 DWORD dwUnknown1,
963 DWORD dwUnknown2,
964 DWORD dwUnknown3,
965 DWORD dwUnknown4)
966 {
967 UNIMPLEMENTED;
968 return 0;
969 }
970
971 NTSTATUS
972 APIENTRY
973 NtUserSetInformationThread(IN HANDLE ThreadHandle,
974 IN USERTHREADINFOCLASS ThreadInformationClass,
975 IN PVOID ThreadInformation,
976 IN ULONG ThreadInformationLength)
977
978 {
979 if (ThreadInformationClass == UserThreadInitiateShutdown)
980 {
981 DPRINT1("Shutdown initiated\n");
982 }
983 else if (ThreadInformationClass == UserThreadEndShutdown)
984 {
985 DPRINT1("Shutdown ended\n");
986 }
987 else
988 {
989 UNIMPLEMENTED;
990 }
991
992 return STATUS_SUCCESS;
993 }
994
995 DWORD
996 APIENTRY
997 NtUserSetThreadLayoutHandles(
998 DWORD dwUnknown1,
999 DWORD dwUnknown2)
1000 {
1001 UNIMPLEMENTED;
1002 return 0;
1003 }
1004
1005 BOOL
1006 APIENTRY
1007 NtUserSoundSentry(VOID)
1008 {
1009 UNIMPLEMENTED;
1010 return 0;
1011 }
1012
1013 DWORD
1014 APIENTRY
1015 NtUserTestForInteractiveUser(
1016 DWORD dwUnknown1)
1017 {
1018 UNIMPLEMENTED;
1019 return 0;
1020 }
1021
1022 /* http://www.cyber-ta.org/releases/malware-analysis/public/SOURCES/b47155634ccb2c30630da7e3666d3d07/b47155634ccb2c30630da7e3666d3d07.trace.html#NtUserGetIconSize */
1023 DWORD
1024 APIENTRY
1025 NtUserCalcMenuBar(
1026 DWORD dwUnknown1,
1027 DWORD dwUnknown2,
1028 DWORD dwUnknown3,
1029 DWORD dwUnknown4,
1030 DWORD dwUnknown5)
1031 {
1032 UNIMPLEMENTED;
1033 return 0;
1034 }
1035
1036 DWORD
1037 APIENTRY
1038 NtUserPaintMenuBar(
1039 DWORD dwUnknown1,
1040 DWORD dwUnknown2,
1041 DWORD dwUnknown3,
1042 DWORD dwUnknown4,
1043 DWORD dwUnknown5,
1044 DWORD dwUnknown6)
1045 {
1046 UNIMPLEMENTED;
1047 return 0;
1048 }
1049
1050 BOOL
1051 APIENTRY
1052 NtUserUnregisterUserApiHook(VOID)
1053 {
1054 UNIMPLEMENTED;
1055 return 0;
1056 }
1057
1058 BOOL
1059 APIENTRY
1060 NtUserGetLayeredWindowAttributes(
1061 HWND hwnd,
1062 COLORREF *pcrKey,
1063 BYTE *pbAlpha,
1064 DWORD *pdwFlags)
1065 {
1066 UNIMPLEMENTED;
1067 return 0;
1068 }
1069
1070 BOOL
1071 APIENTRY
1072 NtUserValidateTimerCallback(
1073 HWND hWnd,
1074 WPARAM wParam,
1075 LPARAM lParam)
1076 {
1077 BOOL Ret = FALSE;
1078
1079 UserEnterShared();
1080
1081 Ret = ValidateTimerCallback(PsGetCurrentThreadWin32Thread(), lParam);
1082
1083 UserLeave();
1084 return Ret;
1085 }
1086
1087 DWORD
1088 APIENTRY
1089 NtUserRemoteConnect(
1090 DWORD dwUnknown1,
1091 DWORD dwUnknown2,
1092 DWORD dwUnknown3)
1093 {
1094 UNIMPLEMENTED;
1095 return 0;
1096 }
1097
1098 DWORD
1099 APIENTRY
1100 NtUserRemoteRedrawRectangle(
1101 DWORD dwUnknown1,
1102 DWORD dwUnknown2,
1103 DWORD dwUnknown3,
1104 DWORD dwUnknown4)
1105 {
1106 UNIMPLEMENTED;
1107 return 0;
1108 }
1109
1110 DWORD
1111 APIENTRY
1112 NtUserRemoteRedrawScreen(VOID)
1113 {
1114 UNIMPLEMENTED;
1115 return 0;
1116 }
1117
1118 DWORD
1119 APIENTRY
1120 NtUserRemoteStopScreenUpdates(VOID)
1121 {
1122 UNIMPLEMENTED;
1123 return 0;
1124 }
1125
1126 DWORD
1127 APIENTRY
1128 NtUserCtxDisplayIOCtl(
1129 DWORD dwUnknown1,
1130 DWORD dwUnknown2,
1131 DWORD dwUnknown3)
1132 {
1133 UNIMPLEMENTED;
1134 return 0;
1135 }
1136
1137 /*
1138 * @unimplemented
1139 */
1140 DWORD
1141 APIENTRY
1142 NtUserDrawMenuBarTemp(
1143 HWND hWnd,
1144 HDC hDC,
1145 PRECT hRect,
1146 HMENU hMenu,
1147 HFONT hFont)
1148 {
1149 /* we'll use this function just for caching the menu bar */
1150 UNIMPLEMENTED
1151 return 0;
1152 }
1153
1154 /*
1155 * FillWindow: Called from User; Dialog, Edit and ListBox procs during a WM_ERASEBKGND.
1156 */
1157 /*
1158 * @unimplemented
1159 */
1160 BOOL APIENTRY
1161 NtUserFillWindow(HWND hWndPaint,
1162 HWND hWndPaint1,
1163 HDC hDC,
1164 HBRUSH hBrush)
1165 {
1166 UNIMPLEMENTED
1167
1168 return 0;
1169 }
1170
1171 /*
1172 * @unimplemented
1173 */
1174 BOOL APIENTRY
1175 NtUserFlashWindowEx(IN PFLASHWINFO pfwi)
1176 {
1177 UNIMPLEMENTED
1178
1179 return 1;
1180 }
1181
1182 /*
1183 * @unimplemented
1184 */
1185 BOOL APIENTRY
1186 NtUserLockWindowUpdate(HWND hWnd)
1187 {
1188 UNIMPLEMENTED
1189
1190 return 0;
1191 }
1192
1193 /*
1194 * @unimplemented
1195 */
1196 HWND APIENTRY
1197 NtUserRealChildWindowFromPoint(HWND Parent,
1198 LONG x,
1199 LONG y)
1200 {
1201 UNIMPLEMENTED
1202
1203 return 0;
1204 }
1205
1206 /*
1207 * @unimplemented
1208 */
1209 DWORD APIENTRY
1210 NtUserSetImeOwnerWindow(DWORD Unknown0,
1211 DWORD Unknown1)
1212 {
1213 UNIMPLEMENTED
1214
1215 return 0;
1216 }
1217
1218 /*
1219 * @unimplemented
1220 */
1221 DWORD APIENTRY
1222 NtUserSetInternalWindowPos(
1223 HWND hwnd,
1224 UINT showCmd,
1225 LPRECT rect,
1226 LPPOINT pt)
1227 {
1228 UNIMPLEMENTED
1229
1230 return 0;
1231 }
1232
1233 /*
1234 * @unimplemented
1235 */
1236 BOOL APIENTRY
1237 NtUserSetLayeredWindowAttributes(HWND hwnd,
1238 COLORREF crKey,
1239 BYTE bAlpha,
1240 DWORD dwFlags)
1241 {
1242 UNIMPLEMENTED;
1243 return FALSE;
1244 }
1245
1246 /*
1247 * @unimplemented
1248 */
1249 BOOL
1250 APIENTRY
1251 NtUserUpdateLayeredWindow(
1252 HWND hwnd,
1253 HDC hdcDst,
1254 POINT *pptDst,
1255 SIZE *psize,
1256 HDC hdcSrc,
1257 POINT *pptSrc,
1258 COLORREF crKey,
1259 BLENDFUNCTION *pblend,
1260 DWORD dwFlags,
1261 RECT *prcDirty)
1262 {
1263 UNIMPLEMENTED
1264
1265 return 0;
1266 }
1267
1268 /*
1269 * @unimplemented
1270 */
1271 HWND APIENTRY
1272 NtUserWindowFromPhysicalPoint(POINT Point)
1273 {
1274 UNIMPLEMENTED
1275
1276 return NULL;
1277 }
1278
1279 /*
1280 * NtUserResolveDesktopForWOW
1281 *
1282 * Status
1283 * @unimplemented
1284 */
1285
1286 DWORD APIENTRY
1287 NtUserResolveDesktopForWOW(DWORD Unknown0)
1288 {
1289 UNIMPLEMENTED
1290 return 0;
1291 }
1292
1293 /*
1294 * @unimplemented
1295 */
1296 BOOL APIENTRY
1297 NtUserEndMenu(VOID)
1298 {
1299 UNIMPLEMENTED
1300
1301 return 0;
1302 }
1303
1304 /*
1305 * @implemented
1306 */
1307 /* NOTE: unused function */
1308 BOOL APIENTRY
1309 NtUserTrackPopupMenuEx(
1310 HMENU hMenu,
1311 UINT fuFlags,
1312 int x,
1313 int y,
1314 HWND hWnd,
1315 LPTPMPARAMS lptpm)
1316 {
1317 UNIMPLEMENTED
1318
1319 return FALSE;
1320 }
1321
1322 DWORD APIENTRY
1323 NtUserQuerySendMessage(DWORD Unknown0)
1324 {
1325 UNIMPLEMENTED;
1326
1327 return 0;
1328 }
1329
1330 /*
1331 * @unimplemented
1332 */
1333 DWORD APIENTRY
1334 NtUserAlterWindowStyle(DWORD Unknown0,
1335 DWORD Unknown1,
1336 DWORD Unknown2)
1337 {
1338 UNIMPLEMENTED
1339
1340 return(0);
1341 }
1342
1343 /*
1344 * NtUserSetWindowStationUser
1345 *
1346 * Status
1347 * @unimplemented
1348 */
1349
1350 DWORD APIENTRY
1351 NtUserSetWindowStationUser(
1352 DWORD Unknown0,
1353 DWORD Unknown1,
1354 DWORD Unknown2,
1355 DWORD Unknown3)
1356 {
1357 UNIMPLEMENTED
1358
1359 return 0;
1360 }
1361
1362 BOOL APIENTRY NtUserAddClipboardFormatListener(
1363 HWND hwnd
1364 )
1365 {
1366 UNIMPLEMENTED;
1367 return FALSE;
1368 }
1369
1370 BOOL APIENTRY NtUserRemoveClipboardFormatListener(
1371 HWND hwnd
1372 )
1373 {
1374 UNIMPLEMENTED;
1375 return FALSE;
1376 }
1377
1378 BOOL APIENTRY NtUserGetUpdatedClipboardFormats(
1379 PUINT lpuiFormats,
1380 UINT cFormats,
1381 PUINT pcFormatsOut
1382 )
1383 {
1384 UNIMPLEMENTED;
1385 return FALSE;
1386 }
1387
1388 /*
1389 * @unimplemented
1390 */
1391 DWORD
1392 APIENTRY
1393 NtUserGetCursorFrameInfo(
1394 DWORD Unknown0,
1395 DWORD Unknown1,
1396 DWORD Unknown2,
1397 DWORD Unknown3)
1398 {
1399 UNIMPLEMENTED
1400
1401 return 0;
1402 }
1403
1404 /*
1405 * @unimplemented
1406 */
1407 BOOL
1408 APIENTRY
1409 NtUserSetSystemCursor(
1410 HCURSOR hcur,
1411 DWORD id)
1412 {
1413 return FALSE;
1414 }
1415
1416 /* EOF */