return 0;
}
-
-BOOL
-APIENTRY
-NtUserAttachThreadInput(
- IN DWORD idAttach,
- IN DWORD idAttachTo,
- IN BOOL fAttach)
-{
- NTSTATUS Status;
- PETHREAD Thread, ThreadTo;
- PTHREADINFO pti, ptiTo;
- BOOL Ret = FALSE;
-
- UserEnterExclusive();
- Status = PsLookupThreadByThreadId((HANDLE)idAttach, &Thread);
- if (!NT_SUCCESS(Status))
- {
- EngSetLastError(ERROR_INVALID_PARAMETER);
- goto Exit;
- }
- Status = PsLookupThreadByThreadId((HANDLE)idAttachTo, &ThreadTo);
- if (!NT_SUCCESS(Status))
- {
- EngSetLastError(ERROR_INVALID_PARAMETER);
- ObDereferenceObject(Thread);
- goto Exit;
- }
-
- pti = PsGetThreadWin32Thread(Thread);
- ptiTo = PsGetThreadWin32Thread(ThreadTo);
- ObDereferenceObject(Thread);
- ObDereferenceObject(ThreadTo);
-
- Ret = UserAttachThreadInput( pti, ptiTo, fAttach);
-
-Exit:
- UserLeave();
- return Ret;
-}
-
//
// Works like BitBlt, http://msdn.microsoft.com/en-us/library/ms532278(VS.85).aspx
//
HINSTANCE hmodUser)
{
NTSTATUS Status = STATUS_SUCCESS;
- TRACE("Enter NtUserInitializeClientPfnArrays User32 0x%x\n",hmodUser);
+ TRACE("Enter NtUserInitializeClientPfnArrays User32 0x%p\n", hmodUser);
if (ClientPfnInit) return Status;
return 0;
}
-BOOL
-APIENTRY
-NtUserLockWorkStation(VOID)
-{
- STUB
-
- return 0;
-}
-
DWORD
APIENTRY
NtUserMNDragLeave(VOID)
return 0;
}
-DWORD
+NTSTATUS
APIENTRY
NtUserConsoleControl(
- DWORD dwUnknown1,
- DWORD dwUnknown2,
- DWORD dwUnknown3)
+ IN CONSOLECONTROL ConsoleCtrl,
+ IN PVOID ConsoleCtrlInfo,
+ IN ULONG ConsoleCtrlInfoLength)
{
- STUB;
- return 0;
+ NTSTATUS Status = STATUS_SUCCESS;
+
+ /* Allow only Console Server to perform this operation (via CSRSS) */
+ if (gpepCSRSS != PsGetCurrentProcess())
+ return STATUS_ACCESS_DENIED;
+
+ UserEnterExclusive();
+
+ switch (ConsoleCtrl)
+ {
+ case GuiConsoleWndClassAtom:
+ {
+ if (ConsoleCtrlInfoLength != sizeof(ATOM))
+ {
+ Status = STATUS_INFO_LENGTH_MISMATCH;
+ break;
+ }
+
+ _SEH2_TRY
+ {
+ ProbeForRead(ConsoleCtrlInfo, ConsoleCtrlInfoLength, 1);
+ gaGuiConsoleWndClass = *(ATOM*)ConsoleCtrlInfo;
+ }
+ _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
+ {
+ Status = _SEH2_GetExceptionCode();
+ }
+ _SEH2_END;
+
+ break;
+ }
+
+ case ConsoleMakePalettePublic:
+ {
+ HPALETTE hPalette;
+
+ if (ConsoleCtrlInfoLength != sizeof(HPALETTE))
+ {
+ Status = STATUS_INFO_LENGTH_MISMATCH;
+ break;
+ }
+
+ _SEH2_TRY
+ {
+ ProbeForRead(ConsoleCtrlInfo, ConsoleCtrlInfoLength, 1);
+ hPalette = *(HPALETTE*)ConsoleCtrlInfo;
+ }
+ _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
+ {
+ Status = _SEH2_GetExceptionCode();
+ }
+ _SEH2_END;
+
+ /* Make the palette handle public */
+ GreSetObjectOwnerEx(hPalette,
+ GDI_OBJ_HMGR_PUBLIC,
+ GDIOBJFLAG_IGNOREPID);
+
+ break;
+ }
+
+ case ConsoleAcquireDisplayOwnership:
+ {
+ ERR("NtUserConsoleControl - ConsoleAcquireDisplayOwnership is UNIMPLEMENTED\n");
+ Status = STATUS_NOT_IMPLEMENTED;
+ break;
+ }
+
+ default:
+ ERR("Calling invalid control %lu in NtUserConsoleControl\n", ConsoleCtrl);
+ Status = STATUS_INVALID_INFO_CLASS;
+ break;
+ }
+
+ UserLeave();
+
+ return Status;
}
DWORD
return 0;
}
-DWORD
-APIENTRY
+BOOL
+NTAPI
NtUserNotifyProcessCreate(
- DWORD dwUnknown1,
- DWORD dwUnknown2,
- DWORD dwUnknown3,
- DWORD dwUnknown4)
+ HANDLE NewProcessId,
+ HANDLE SourceThreadId,
+ DWORD dwUnknown,
+ ULONG CreateFlags)
{
STUB;
- return 0;
+ return FALSE;
}
NTSTATUS
return 0;
}
-/*
- * @unimplemented
- */
-HWND APIENTRY
-NtUserWindowFromPhysicalPoint(POINT Point)
-{
- STUB
-
- return NULL;
-}
-
/*
* NtUserResolveDesktopForWOW
*
return FALSE;
}
-/*
- * @unimplemented
- */
-HCURSOR
-NTAPI
-NtUserGetCursorFrameInfo(
- HCURSOR hCursor,
- DWORD istep,
- PDWORD rate_jiffies,
- INT *num_steps)
-{
- STUB
-
- return 0;
-}
-
/*
* @unimplemented
*/