* REVISION HISTORY:
* 04-06-2001 CSH Created
*/
-#include <w32k.h>
+#include <win32k.h>
#define NDEBUG
#include <debug.h>
IN DWORD idAttachTo,
IN BOOL fAttach)
{
- UNIMPLEMENTED
+ NTSTATUS Status;
+ PETHREAD Thread, ThreadTo;
+ PTHREADINFO pti, ptiTo;
+ BOOL Ret = FALSE;
- return 0;
+ 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;
}
//
return 0;
}
-BOOL
-APIENTRY
-NtUserEnumDisplayDevices (
- PUNICODE_STRING lpDevice, /* device name */
- DWORD iDevNum, /* display device */
- PDISPLAY_DEVICEW lpDisplayDevice, /* device information */
- DWORD dwFlags ) /* reserved */
-{
- DPRINT1("NtUserEnumDisplayDevices() is UNIMPLEMENTED!\n");
- if (lpDevice->Length == 0 && iDevNum > 0)
- {
- /* Only one display device present */
- return FALSE;
- }
- else if (lpDevice->Length != 0)
- {
- /* Can't enumerate monitors :( */
- return FALSE;
- }
- if (lpDisplayDevice->cb < sizeof(DISPLAY_DEVICE))
- return FALSE;
-
- wcscpy(lpDisplayDevice->DeviceName, L"\\\\.\\DISPLAY1");
- wcscpy(lpDisplayDevice->DeviceString, L"<Unknown>");
- lpDisplayDevice->StateFlags = DISPLAY_DEVICE_ATTACHED_TO_DESKTOP
- | DISPLAY_DEVICE_MODESPRUNED
- | DISPLAY_DEVICE_PRIMARY_DEVICE
- | DISPLAY_DEVICE_VGA_COMPATIBLE;
- lpDisplayDevice->DeviceID[0] = L'0';
- lpDisplayDevice->DeviceKey[0] = L'0';
- return TRUE;
-}
-
DWORD
APIENTRY
NtUserEvent(
if ((cbSize != sizeof(MOUSEMOVEPOINT)) || (nBufPoints < 0) || (nBufPoints > 64))
{
UserLeave();
- SetLastWin32Error(ERROR_INVALID_PARAMETER);
+ EngSetLastError(ERROR_INVALID_PARAMETER);
return -1;
}
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{
SetLastNtError(_SEH2_GetExceptionCode());
- SetLastWin32Error(ERROR_NOACCESS);
+ EngSetLastError(ERROR_NOACCESS);
}
_SEH2_END;
case GMMP_USE_HIGH_RESOLUTION_POINTS:
break;
default:
- SetLastWin32Error(GMMP_ERR_POINT_NOT_FOUND);
+ EngSetLastError(GMMP_ERR_POINT_NOT_FOUND);
return GMMP_ERR_POINT_NOT_FOUND;
}
*/
RtlCopyMemory(&gpsi->apfnClientW, pfnClientW, sizeof(PFNCLIENT));
RtlCopyMemory(&gpsi->apfnClientWorker, pfnClientWorker, sizeof(PFNCLIENTWORKER));
+ //// FIXME! HAX! Temporary until server side is finished.
+ //// Copy the client side procs for now.
+ RtlCopyMemory(&gpsi->aStoCidPfn, pfnClientW, sizeof(gpsi->aStoCidPfn));
+
hModClient = hmodUser;
ClientPfnInit = TRUE;
}
return 0;
}
-
DWORD
APIENTRY
NtUserRegisterTasklist(
return 0;
}
-
-DWORD
-APIENTRY
-NtUserSBGetParms(
- DWORD Unknown0,
- DWORD Unknown1,
- DWORD Unknown2,
- DWORD Unknown3)
-{
- UNIMPLEMENTED
-
- return 0;
-}
-
DWORD
APIENTRY
NtUserSetConsoleReserveKeys(
}
if (Ret)
{
- UserPostMessage(HWND_BROADCAST, WM_SYSCOLORCHANGE, 0, 0);
+ UserSendNotifyMessage(HWND_BROADCAST, WM_SYSCOLORCHANGE, 0, 0);
}
UserLeave();
return Ret;
return 0;
}
-BOOL
-APIENTRY
-NtUserPrintWindow(
- HWND hwnd,
- HDC hdcBlt,
- UINT nFlags)
-{
- UNIMPLEMENTED;
- return 0;
-}
-
NTSTATUS
APIENTRY
NtUserProcessConnect(
DPRINT("NtUserProcessConnect\n");
if (pUserConnect && ( Size == sizeof(USERCONNECT) ))
{
+ PPROCESSINFO W32Process;
UserEnterShared();
GetW32ThreadInfo();
- PPROCESSINFO W32Process = PsGetCurrentProcessWin32Process();
+ W32Process = PsGetCurrentProcessWin32Process();
_SEH2_TRY
{
pUserConnect->siClient.psi = gpsi;
return 0;
}
-DWORD
+BOOL
APIENTRY
NtUserRegisterUserApiHook(
- DWORD dwUnknown1,
- DWORD dwUnknown2)
+ PUNICODE_STRING m_dllname1,
+ PUNICODE_STRING m_funname1,
+ DWORD dwUnknown3,
+ DWORD dwUnknown4)
{
+ UserEnterExclusive();
UNIMPLEMENTED;
+ UserLeave();
return 0;
}
return 0;
}
-DWORD
+NTSTATUS
APIENTRY
-NtUserSetInformationThread(
- DWORD dwUnknown1,
- DWORD dwUnknown2,
- DWORD dwUnknown3,
- DWORD dwUnknown4)
+NtUserSetInformationThread(IN HANDLE ThreadHandle,
+ IN USERTHREADINFOCLASS ThreadInformationClass,
+ IN PVOID ThreadInformation,
+ IN ULONG ThreadInformationLength)
+
{
- UNIMPLEMENTED;
- return 0;
+ if (ThreadInformationClass == UserThreadInitiateShutdown)
+ {
+ DPRINT1("Shutdown initiated\n");
+ }
+ else if (ThreadInformationClass == UserThreadEndShutdown)
+ {
+ DPRINT1("Shutdown ended\n");
+ }
+ else
+ {
+ UNIMPLEMENTED;
+ }
+
+ return STATUS_SUCCESS;
}
DWORD
return 0;
}
-DWORD
+BOOL
APIENTRY
NtUserUnregisterUserApiHook(VOID)
{
return 0;
}
-/* ValidateRect gets redirected to NtUserValidateRect:
- http://blog.csdn.net/ntdll/archive/2005/10/19/509299.aspx */
-BOOL
-APIENTRY
-NtUserValidateRect(
- HWND hWnd,
- const RECT *lpRect)
-{
- UNIMPLEMENTED;
- return 0;
-}
-
BOOL
APIENTRY
NtUserValidateTimerCallback(
LPARAM lParam)
{
BOOL Ret = FALSE;
- PWINDOW_OBJECT Window = NULL;
UserEnterShared();
- if (hWnd)
- {
- Window = UserGetWindowObject(hWnd);
- if (!Window || !Window->Wnd)
- goto Exit;
- }
-
- Ret = ValidateTimerCallback(PsGetCurrentThreadWin32Thread(), Window, wParam, lParam);
+ Ret = ValidateTimerCallback(PsGetCurrentThreadWin32Thread(), lParam);
-Exit:
UserLeave();
return Ret;
}
return 0;
}
+/*
+ * @unimplemented
+ */
+DWORD
+APIENTRY
+NtUserDrawMenuBarTemp(
+ HWND hWnd,
+ HDC hDC,
+ PRECT hRect,
+ HMENU hMenu,
+ HFONT hFont)
+{
+ /* we'll use this function just for caching the menu bar */
+ UNIMPLEMENTED
+ return 0;
+}
+
+/*
+ * @unimplemented
+ */
+DWORD APIENTRY
+NtUserEndDeferWindowPosEx(DWORD Unknown0,
+ DWORD Unknown1)
+{
+ UNIMPLEMENTED
+
+ return 0;
+}
+
+/*
+ * FillWindow: Called from User; Dialog, Edit and ListBox procs during a WM_ERASEBKGND.
+ */
+/*
+ * @unimplemented
+ */
+BOOL APIENTRY
+NtUserFillWindow(HWND hWndPaint,
+ HWND hWndPaint1,
+ HDC hDC,
+ HBRUSH hBrush)
+{
+ UNIMPLEMENTED
+
+ return 0;
+}
+
+/*
+ * @unimplemented
+ */
+BOOL APIENTRY
+NtUserFlashWindowEx(IN PFLASHWINFO pfwi)
+{
+ UNIMPLEMENTED
+
+ return 0;
+}
+
+/*
+ * @unimplemented
+ */
+BOOL APIENTRY
+NtUserLockWindowUpdate(HWND hWnd)
+{
+ UNIMPLEMENTED
+
+ return 0;
+}
+
+/*
+ * @unimplemented
+ */
+DWORD APIENTRY
+NtUserRealChildWindowFromPoint(DWORD Unknown0,
+ DWORD Unknown1,
+ DWORD Unknown2)
+{
+ UNIMPLEMENTED
+
+ return 0;
+}
+
+/*
+ * @unimplemented
+ */
+DWORD APIENTRY
+NtUserSetImeOwnerWindow(DWORD Unknown0,
+ DWORD Unknown1)
+{
+ UNIMPLEMENTED
+
+ return 0;
+}
+
+/*
+ * @unimplemented
+ */
+DWORD APIENTRY
+NtUserSetInternalWindowPos(
+ HWND hwnd,
+ UINT showCmd,
+ LPRECT rect,
+ LPPOINT pt)
+{
+ UNIMPLEMENTED
+
+ return 0;
+}
+
+/*
+ * @unimplemented
+ */
+BOOL APIENTRY
+NtUserSetLayeredWindowAttributes(HWND hwnd,
+ COLORREF crKey,
+ BYTE bAlpha,
+ DWORD dwFlags)
+{
+ UNIMPLEMENTED;
+ return FALSE;
+}
+
+/*
+ * @unimplemented
+ */
+BOOL
+APIENTRY
+NtUserUpdateLayeredWindow(
+ HWND hwnd,
+ HDC hdcDst,
+ POINT *pptDst,
+ SIZE *psize,
+ HDC hdcSrc,
+ POINT *pptSrc,
+ COLORREF crKey,
+ BLENDFUNCTION *pblend,
+ DWORD dwFlags,
+ RECT *prcDirty)
+{
+ UNIMPLEMENTED
+
+ return 0;
+}
+
+/*
+ * @unimplemented
+ */
+HWND APIENTRY
+NtUserWindowFromPhysicalPoint(POINT Point)
+{
+ UNIMPLEMENTED
+
+ return NULL;
+}
+
+/*
+ * @unimplemented
+ */
+HDWP APIENTRY
+NtUserDeferWindowPos(HDWP WinPosInfo,
+ HWND Wnd,
+ HWND WndInsertAfter,
+ int x,
+ int y,
+ int cx,
+ int cy,
+ UINT Flags)
+{
+ UNIMPLEMENTED
+
+ return 0;
+}
+
+
+/*
+ * NtUserResolveDesktopForWOW
+ *
+ * Status
+ * @unimplemented
+ */
+
+DWORD APIENTRY
+NtUserResolveDesktopForWOW(DWORD Unknown0)
+{
+ UNIMPLEMENTED
+ return 0;
+}
+
+/*
+ * @unimplemented
+ */
+BOOL APIENTRY
+NtUserEndMenu(VOID)
+{
+ UNIMPLEMENTED
+
+ return 0;
+}
+
+/*
+ * @implemented
+ */
+/* NOTE: unused function */
+BOOL APIENTRY
+NtUserTrackPopupMenuEx(
+ HMENU hMenu,
+ UINT fuFlags,
+ int x,
+ int y,
+ HWND hWnd,
+ LPTPMPARAMS lptpm)
+{
+ UNIMPLEMENTED
+
+ return FALSE;
+}
+
+DWORD APIENTRY
+NtUserQuerySendMessage(DWORD Unknown0)
+{
+ UNIMPLEMENTED;
+
+ return 0;
+}
+
+/*
+ * @unimplemented
+ */
+DWORD APIENTRY
+NtUserAlterWindowStyle(DWORD Unknown0,
+ DWORD Unknown1,
+ DWORD Unknown2)
+{
+ UNIMPLEMENTED
+
+ return(0);
+}
+
+/*
+ * NtUserSetWindowStationUser
+ *
+ * Status
+ * @unimplemented
+ */
+
+DWORD APIENTRY
+NtUserSetWindowStationUser(
+ DWORD Unknown0,
+ DWORD Unknown1,
+ DWORD Unknown2,
+ DWORD Unknown3)
+{
+ UNIMPLEMENTED
+
+ return 0;
+}
+
+BOOL APIENTRY NtUserAddClipboardFormatListener(
+ HWND hwnd
+)
+{
+ UNIMPLEMENTED;
+ return FALSE;
+}
+
+BOOL APIENTRY NtUserRemoveClipboardFormatListener(
+ HWND hwnd
+)
+{
+ UNIMPLEMENTED;
+ return FALSE;
+}
+
+BOOL APIENTRY NtUserGetUpdatedClipboardFormats(
+ PUINT lpuiFormats,
+ UINT cFormats,
+ PUINT pcFormatsOut
+)
+{
+ UNIMPLEMENTED;
+ return FALSE;
+}
+
+/*
+ * @unimplemented
+ */
+DWORD
+APIENTRY
+NtUserGetCursorFrameInfo(
+ DWORD Unknown0,
+ DWORD Unknown1,
+ DWORD Unknown2,
+ DWORD Unknown3)
+{
+ UNIMPLEMENTED
+
+ return 0;
+}
+
+/*
+ * @unimplemented
+ */
+BOOL
+APIENTRY
+NtUserSetSystemCursor(
+ HCURSOR hcur,
+ DWORD id)
+{
+ return FALSE;
+}
/* EOF */