* REVISION HISTORY:
* 04-06-2001 CSH Created
*/
-#include <w32k.h>
+#include <win32k.h>
#define NDEBUG
#include <debug.h>
DWORD
-NTAPI
+APIENTRY
NtUserAssociateInputContext(
DWORD dwUnknown1,
DWORD dwUnknown2,
BOOL
-NTAPI
+APIENTRY
NtUserAttachThreadInput(
IN DWORD idAttach,
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;
}
//
// Works like BitBlt, http://msdn.microsoft.com/en-us/library/ms532278(VS.85).aspx
//
BOOL
-NTAPI
+APIENTRY
NtUserBitBltSysBmp(
HDC hdc,
INT nXDest,
Ret = NtGdiBitBlt( hdc,
nXDest,
nYDest,
- nWidth,
- nHeight,
+ nWidth,
+ nHeight,
hSystemBM,
- nXSrc,
- nYSrc,
+ nXSrc,
+ nYSrc,
dwRop,
0,
0);
}
DWORD
-NTAPI
+APIENTRY
NtUserBuildHimcList(
DWORD dwUnknown1,
DWORD dwUnknown2,
}
DWORD
-STDCALL
+APIENTRY
NtUserConvertMemHandle(
DWORD Unknown0,
DWORD Unknown1)
}
DWORD
-STDCALL
+APIENTRY
NtUserCreateLocalMemHandle(
DWORD Unknown0,
DWORD Unknown1,
}
BOOL
-NTAPI
+APIENTRY
NtUserDdeGetQualityOfService(
IN HWND hwndClient,
IN HWND hWndServer,
}
DWORD
-STDCALL
+APIENTRY
NtUserDdeInitialize(
DWORD Unknown0,
DWORD Unknown1,
}
BOOL
-NTAPI
+APIENTRY
NtUserDdeSetQualityOfService(
IN HWND hwndClient,
IN PSECURITY_QUALITY_OF_SERVICE pqosNew,
}
DWORD
-NTAPI
+APIENTRY
NtUserDragObject(
HWND hwnd1,
HWND hwnd2,
}
BOOL
-NTAPI
+APIENTRY
NtUserDrawAnimatedRects(
HWND hwnd,
INT idAni,
return 0;
}
-BOOL
-STDCALL
-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
-STDCALL
+APIENTRY
NtUserEvent(
DWORD Unknown0)
{
}
DWORD
-NTAPI
+APIENTRY
NtUserExcludeUpdateRgn(
HDC hDC,
HWND hWnd)
}
BOOL
-NTAPI
+APIENTRY
NtUserGetAltTabInfo(
HWND hwnd,
INT iItem,
PALTTABINFO pati,
- LPTSTR pszItemText,
+ LPWSTR pszItemText,
UINT cchItemText,
BOOL Ansi)
{
}
HBRUSH
-NTAPI
+APIENTRY
NtUserGetControlBrush(
HWND hwnd,
HDC hdc,
* Called from PaintRect, works almost like wine PaintRect16 but returns hBrush.
*/
HBRUSH
-STDCALL
+APIENTRY
NtUserGetControlColor(
HWND hwndParent,
- HWND hwnd,
+ HWND hwnd,
HDC hdc,
UINT CtlMsg) // Wine PaintRect: WM_CTLCOLORMSGBOX + hbrush
{
}
DWORD
-STDCALL
-NtUserGetCPD(
- DWORD Unknown0,
- DWORD Unknown1,
- DWORD Unknown2)
-{
- UNIMPLEMENTED
-
- return 0;
-}
-
-DWORD
-STDCALL
+APIENTRY
NtUserGetImeHotKey(
DWORD Unknown0,
DWORD Unknown1,
return 0;
}
-
-DWORD
-STDCALL
-NtUserGetMouseMovePointsEx(
- UINT cbSize,
- LPMOUSEMOVEPOINT lppt,
- LPMOUSEMOVEPOINT lpptBuf,
- int nBufPoints,
- DWORD resolution)
-{
-/*
- if (cbSize != sizeof (MOUSEMOVEPOINT)
- {
- SetLastWin32Error(GMMP_ERR_POINT_NOT_FOUND);
- return GMMP_ERR_POINT_NOT_FOUND;
- }
-
- if (!lppt)
- {
- SetLastWin32Error(GMMP_ERR_POINT_NOT_FOUND);
- return GMMP_ERR_POINT_NOT_FOUND;
- }
-
- if (!lpptBuf)
- {
- SetLastWin32Error(GMMP_ERR_POINT_NOT_FOUND);
- return GMMP_ERR_POINT_NOT_FOUND;
- }
-
- switch(resolution)
- {
- case GMMP_USE_DISPLAY_POINTS:
- case GMMP_USE_HIGH_RESOLUTION_POINTS:
- break;
- default:
- SetLastWin32Error(GMMP_ERR_POINT_NOT_FOUND);
- return GMMP_ERR_POINT_NOT_FOUND;
- }
- */
- UNIMPLEMENTED
-
- return 0;
-}
-
-
-
BOOL
-NTAPI
+APIENTRY
NtUserImpersonateDdeClientWindow(
HWND hWndClient,
HWND hWndServer)
}
NTSTATUS
-STDCALL
+APIENTRY
NtUserInitializeClientPfnArrays(
PPFNCLIENT pfnClientA,
PPFNCLIENT pfnClientW,
PPFNCLIENTWORKER pfnClientWorker,
HINSTANCE hmodUser)
{
- UNIMPLEMENTED
+ NTSTATUS Status = STATUS_SUCCESS;
+ DPRINT("Enter NtUserInitializeClientPfnArrays User32 0x%x\n",hmodUser);
+
+ if (ClientPfnInit) return Status;
+
+ UserEnterExclusive();
+
+ _SEH2_TRY
+ {
+ ProbeForRead( pfnClientA, sizeof(PFNCLIENT), 1);
+ ProbeForRead( pfnClientW, sizeof(PFNCLIENT), 1);
+ ProbeForRead( pfnClientWorker, sizeof(PFNCLIENTWORKER), 1);
+ RtlCopyMemory(&gpsi->apfnClientA, pfnClientA, sizeof(PFNCLIENT));
+ 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;
+ }
+ _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
+ {
+ Status =_SEH2_GetExceptionCode();
+ }
+ _SEH2_END
+
+ if (!NT_SUCCESS(Status))
+ {
+ DPRINT1("Failed reading Client Pfns from user space.\n");
+ SetLastNtError(Status);
+ }
- return STATUS_UNSUCCESSFUL;
+ UserLeave();
+ return Status;
}
DWORD
-STDCALL
+APIENTRY
NtUserInitTask(
DWORD Unknown0,
DWORD Unknown1,
}
BOOL
-NTAPI
+APIENTRY
NtUserLockWorkStation(VOID)
{
UNIMPLEMENTED
}
DWORD
-STDCALL
+APIENTRY
NtUserMNDragLeave(VOID)
{
UNIMPLEMENTED
}
DWORD
-STDCALL
+APIENTRY
NtUserMNDragOver(
DWORD Unknown0,
DWORD Unknown1)
}
DWORD
-STDCALL
+APIENTRY
NtUserModifyUserStartupInfoFlags(
DWORD Unknown0,
DWORD Unknown1)
}
DWORD
-STDCALL
+APIENTRY
NtUserNotifyIMEStatus(
DWORD Unknown0,
DWORD Unknown1,
}
DWORD
-STDCALL
+APIENTRY
NtUserQueryUserCounters(
DWORD Unknown0,
DWORD Unknown1,
return 0;
}
-
DWORD
-STDCALL
+APIENTRY
NtUserRegisterTasklist(
DWORD Unknown0)
{
return 0;
}
-
DWORD
-STDCALL
-NtUserSBGetParms(
- DWORD Unknown0,
- DWORD Unknown1,
- DWORD Unknown2,
- DWORD Unknown3)
-{
- UNIMPLEMENTED
-
- return 0;
-}
-
-DWORD
-STDCALL
+APIENTRY
NtUserSetConsoleReserveKeys(
DWORD Unknown0,
DWORD Unknown1)
}
DWORD
-STDCALL
+APIENTRY
NtUserSetDbgTag(
DWORD Unknown0,
DWORD Unknown1)
}
DWORD
-STDCALL
+APIENTRY
NtUserSetImeHotKey(
DWORD Unknown0,
DWORD Unknown1,
DWORD
-STDCALL
+APIENTRY
NtUserSetRipFlags(
DWORD Unknown0,
DWORD Unknown1)
}
BOOL
-STDCALL
+APIENTRY
NtUserSetSysColors(
int cElements,
IN CONST INT *lpaElements,
IN CONST COLORREF *lpaRgbValues,
FLONG Flags)
{
- DWORD Ret = FALSE;
- NTSTATUS Status = STATUS_SUCCESS;
- UserEnterExclusive();
- _SEH_TRY
- {
- ProbeForRead(lpaElements,
- sizeof(INT),
- 1);
- ProbeForRead(lpaRgbValues,
- sizeof(INT),
- 1);
-// Developers: We are thread locked and calling gdi.
- Ret = IntSetSysColors(cElements, (INT*)lpaElements, (COLORREF*)lpaRgbValues);
- }
- _SEH_HANDLE
- {
- Status = _SEH_GetExceptionCode();
- }
- _SEH_END;
- if (!NT_SUCCESS(Status))
- {
- SetLastNtError(Status);
+ DWORD Ret = TRUE;
+
+ if (cElements == 0)
+ return TRUE;
+
+ /* We need this check to prevent overflow later */
+ if ((ULONG)cElements >= 0x40000000)
+ {
+ EngSetLastError(ERROR_NOACCESS);
+ return FALSE;
+ }
+
+ UserEnterExclusive();
+
+ _SEH2_TRY
+ {
+ ProbeForRead(lpaElements, cElements * sizeof(INT), 1);
+ ProbeForRead(lpaRgbValues, cElements * sizeof(COLORREF), 1);
+
+ IntSetSysColors(cElements, lpaElements, lpaRgbValues);
+ }
+ _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
+ {
+ SetLastNtError(_SEH2_GetExceptionCode());
Ret = FALSE;
- }
- if (Ret)
- {
- UserPostMessage(HWND_BROADCAST, WM_SYSCOLORCHANGE, 0, 0);
- }
- UserLeave();
- return Ret;
+ }
+ _SEH2_END;
+
+ if (Ret)
+ {
+ UserSendNotifyMessage(HWND_BROADCAST, WM_SYSCOLORCHANGE, 0, 0);
+
+ UserRedrawDesktop();
+ }
+
+ UserLeave();
+ return Ret;
}
DWORD
-STDCALL
+APIENTRY
NtUserSetThreadState(
DWORD Unknown0,
DWORD Unknown1)
return 0;
}
-BOOL
-NTAPI
-NtUserTrackMouseEvent(
- LPTRACKMOUSEEVENT lpEventTrack)
-{
- UNIMPLEMENTED
-
- return 0;
-}
-
-
DWORD
-STDCALL
+APIENTRY
NtUserUpdateInputContext(
DWORD Unknown0,
DWORD Unknown1,
}
DWORD
-STDCALL
+APIENTRY
NtUserUpdateInstance(
DWORD Unknown0,
DWORD Unknown1,
}
BOOL
-NTAPI
+APIENTRY
NtUserUserHandleGrantAccess(
IN HANDLE hUserHandle,
IN HANDLE hJob,
}
DWORD
-STDCALL
+APIENTRY
NtUserWaitForMsgAndEvent(
DWORD Unknown0)
{
}
DWORD
-STDCALL
+APIENTRY
NtUserWin32PoolAllocationStats(
DWORD Unknown0,
DWORD Unknown1,
}
DWORD
-STDCALL
+APIENTRY
NtUserYieldTask(VOID)
{
UNIMPLEMENTED
DWORD
-STDCALL
+APIENTRY
NtUserCheckImeHotKey(
DWORD dwUnknown1,
DWORD dwUnknown2)
}
DWORD
-NTAPI
+APIENTRY
NtUserConsoleControl(
DWORD dwUnknown1,
DWORD dwUnknown2,
}
DWORD
-NTAPI
+APIENTRY
NtUserCreateInputContext(
DWORD dwUnknown1)
{
}
DWORD
-NTAPI
+APIENTRY
NtUserDestroyInputContext(
DWORD dwUnknown1)
{
}
DWORD
-NTAPI
+APIENTRY
NtUserDisableThreadIme(
DWORD dwUnknown1)
{
}
DWORD
-NTAPI
+APIENTRY
NtUserGetAppImeLevel(
DWORD dwUnknown1)
{
}
DWORD
-NTAPI
+APIENTRY
NtUserGetAtomName(
ATOM nAtom,
LPWSTR lpBuffer)
}
DWORD
-NTAPI
+APIENTRY
NtUserGetImeInfoEx(
DWORD dwUnknown1,
DWORD dwUnknown2)
}
DWORD
-NTAPI
+APIENTRY
NtUserGetRawInputBuffer(
PRAWINPUT pData,
PUINT pcbSize,
}
DWORD
-NTAPI
+APIENTRY
NtUserGetRawInputData(
HRAWINPUT hRawInput,
UINT uiCommand,
}
DWORD
-NTAPI
+APIENTRY
NtUserGetRawInputDeviceInfo(
HANDLE hDevice,
UINT uiCommand,
}
DWORD
-NTAPI
+APIENTRY
NtUserGetRawInputDeviceList(
PRAWINPUTDEVICELIST pRawInputDeviceList,
PUINT puiNumDevices,
}
DWORD
-NTAPI
+APIENTRY
NtUserGetRegisteredRawInputDevices(
PRAWINPUTDEVICE pRawInputDevices,
PUINT puiNumDevices,
}
DWORD
-NTAPI
+APIENTRY
NtUserHardErrorControl(
DWORD dwUnknown1,
DWORD dwUnknown2,
}
DWORD
-NTAPI
-NtUserInitialize(
- DWORD dwUnknown1,
- DWORD dwUnknown2,
- DWORD dwUnknown3)
-{
- UNIMPLEMENTED;
- return 0;
-}
-
-DWORD
-NTAPI
+APIENTRY
NtUserMinMaximize(
HWND hWnd,
UINT cmd, // Wine SW_ commands
BOOL Hide)
{
- UNIMPLEMENTED;
- return 0;
+ RECTL NewPos;
+ UINT SwFlags;
+ PWND pWnd;
+
+ DPRINT("Enter NtUserMinMaximize\n");
+ UserEnterExclusive();
+
+ pWnd = UserGetWindowObject(hWnd);
+ if ( !pWnd || // FIXME:
+ pWnd == IntGetDesktopWindow() || // pWnd->fnid == FNID_DESKTOP
+ pWnd == IntGetMessageWindow() ) // pWnd->fnid == FNID_MESSAGEWND
+ {
+ goto Exit;
+ }
+
+ if ( cmd > SW_MAX || pWnd->state2 & WNDS2_INDESTROY)
+ {
+ EngSetLastError(ERROR_INVALID_PARAMETER);
+ goto Exit;
+ }
+
+ co_WinPosMinMaximize(pWnd, cmd, &NewPos);
+
+ SwFlags = Hide ? SWP_NOACTIVATE|SWP_NOZORDER|SWP_FRAMECHANGED : SWP_NOZORDER|SWP_FRAMECHANGED;
+
+ co_WinPosSetWindowPos( pWnd,
+ NULL,
+ NewPos.left,
+ NewPos.top,
+ NewPos.right,
+ NewPos.bottom,
+ SwFlags);
+
+ co_WinPosShowWindow(pWnd, cmd);
+
+Exit:
+ DPRINT("Leave NtUserMinMaximize\n");
+ UserLeave();
+ return 0; // Always NULL?
}
DWORD
-NTAPI
+APIENTRY
NtUserNotifyProcessCreate(
DWORD dwUnknown1,
DWORD dwUnknown2,
return 0;
}
-BOOL
-NTAPI
-NtUserPrintWindow(
- HWND hwnd,
- HDC hdcBlt,
- UINT nFlags)
-{
- UNIMPLEMENTED;
- return 0;
-}
-
NTSTATUS
-NTAPI
+APIENTRY
NtUserProcessConnect(
HANDLE Process,
PUSERCONNECT pUserConnect,
DWORD Size)
{
- UNIMPLEMENTED;
- return 0;
+ NTSTATUS Status = STATUS_SUCCESS;
+ DPRINT("NtUserProcessConnect\n");
+ if (pUserConnect && ( Size == sizeof(USERCONNECT) ))
+ {
+ PPROCESSINFO W32Process;
+ UserEnterShared();
+ GetW32ThreadInfo();
+ W32Process = PsGetCurrentProcessWin32Process();
+ _SEH2_TRY
+ {
+ pUserConnect->siClient.psi = gpsi;
+ pUserConnect->siClient.aheList = gHandleTable;
+ pUserConnect->siClient.ulSharedDelta = (ULONG_PTR)W32Process->HeapMappings.KernelMapping -
+ (ULONG_PTR)W32Process->HeapMappings.UserMapping;
+ }
+ _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
+ {
+ Status = _SEH2_GetExceptionCode();
+ }
+ _SEH2_END
+ if (!NT_SUCCESS(Status))
+ {
+ SetLastNtError(Status);
+ }
+ UserLeave();
+ return Status;
+ }
+ return STATUS_UNSUCCESSFUL;
}
DWORD
-NTAPI
+APIENTRY
NtUserQueryInformationThread(
DWORD dwUnknown1,
DWORD dwUnknown2,
}
DWORD
-NTAPI
+APIENTRY
NtUserQueryInputContext(
DWORD dwUnknown1,
DWORD dwUnknown2)
return 0;
}
-DWORD
-NTAPI
+BOOL
+APIENTRY
NtUserRealInternalGetMessage(
- DWORD dwUnknown1,
- DWORD dwUnknown2,
- DWORD dwUnknown3,
- DWORD dwUnknown4,
- DWORD dwUnknown5,
- DWORD dwUnknown6)
+ LPMSG lpMsg,
+ HWND hWnd,
+ UINT wMsgFilterMin,
+ UINT wMsgFilterMax,
+ UINT wRemoveMsg,
+ BOOL bGMSG)
{
UNIMPLEMENTED;
return 0;
}
-DWORD
-NTAPI
+BOOL
+APIENTRY
NtUserRealWaitMessageEx(
- DWORD dwUnknown1,
- DWORD dwUnknown2)
+ DWORD dwWakeMask,
+ UINT uTimeout)
{
UNIMPLEMENTED;
return 0;
}
-DWORD
-NTAPI
+BOOL
+APIENTRY
NtUserRegisterUserApiHook(
- DWORD dwUnknown1,
- DWORD dwUnknown2)
+ PUNICODE_STRING m_dllname1,
+ PUNICODE_STRING m_funname1,
+ DWORD dwUnknown3,
+ DWORD dwUnknown4)
{
+ UserEnterExclusive();
UNIMPLEMENTED;
+ UserLeave();
return 0;
}
BOOL
-NTAPI
+APIENTRY
NtUserRegisterRawInputDevices(
IN PCRAWINPUTDEVICE pRawInputDevices,
IN UINT uiNumDevices,
}
DWORD
-NTAPI
+APIENTRY
NtUserResolveDesktop(
DWORD dwUnknown1,
DWORD dwUnknown2,
}
DWORD
-NTAPI
+APIENTRY
NtUserSetAppImeLevel(
DWORD dwUnknown1,
DWORD dwUnknown2)
}
DWORD
-NTAPI
+APIENTRY
NtUserSetImeInfoEx(
DWORD dwUnknown1)
{
}
DWORD
-NTAPI
+APIENTRY
NtUserSetInformationProcess(
DWORD dwUnknown1,
DWORD dwUnknown2,
return 0;
}
-DWORD
-NTAPI
-NtUserSetInformationThread(
- DWORD dwUnknown1,
- DWORD dwUnknown2,
- DWORD dwUnknown3,
- DWORD dwUnknown4)
+NTSTATUS
+APIENTRY
+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
-NTAPI
+APIENTRY
NtUserSetThreadLayoutHandles(
DWORD dwUnknown1,
DWORD dwUnknown2)
}
BOOL
-NTAPI
+APIENTRY
NtUserSoundSentry(VOID)
{
UNIMPLEMENTED;
}
DWORD
-NTAPI
+APIENTRY
NtUserTestForInteractiveUser(
DWORD dwUnknown1)
{
/* http://www.cyber-ta.org/releases/malware-analysis/public/SOURCES/b47155634ccb2c30630da7e3666d3d07/b47155634ccb2c30630da7e3666d3d07.trace.html#NtUserGetIconSize */
DWORD
-NTAPI
+APIENTRY
NtUserCalcMenuBar(
DWORD dwUnknown1,
DWORD dwUnknown2,
}
DWORD
-NTAPI
+APIENTRY
NtUserPaintMenuBar(
DWORD dwUnknown1,
DWORD dwUnknown2,
return 0;
}
-DWORD
-NTAPI
+BOOL
+APIENTRY
NtUserUnregisterUserApiHook(VOID)
{
UNIMPLEMENTED;
}
BOOL
-NTAPI
+APIENTRY
NtUserGetLayeredWindowAttributes(
HWND hwnd,
COLORREF *pcrKey,
return 0;
}
-/* ValidateRect gets redirected to NtUserValidateRect:
- http://blog.csdn.net/ntdll/archive/2005/10/19/509299.aspx */
BOOL
-NTAPI
-NtUserValidateRect(
+APIENTRY
+NtUserValidateTimerCallback(
HWND hWnd,
- CONST RECT *lpRect)
+ WPARAM wParam,
+ LPARAM lParam)
{
- UNIMPLEMENTED;
- return 0;
-}
+ BOOL Ret = FALSE;
-DWORD
-NTAPI
-NtUserValidateTimerCallback(
- DWORD dwUnknown1,
- DWORD dwUnknown2,
- DWORD dwUnknown3)
-{
- UNIMPLEMENTED;
- return 0;
+ UserEnterShared();
+
+ Ret = ValidateTimerCallback(PsGetCurrentThreadWin32Thread(), lParam);
+
+ UserLeave();
+ return Ret;
}
DWORD
-NTAPI
+APIENTRY
NtUserRemoteConnect(
DWORD dwUnknown1,
DWORD dwUnknown2,
}
DWORD
-NTAPI
+APIENTRY
NtUserRemoteRedrawRectangle(
DWORD dwUnknown1,
DWORD dwUnknown2,
}
DWORD
-NTAPI
+APIENTRY
NtUserRemoteRedrawScreen(VOID)
{
UNIMPLEMENTED;
}
DWORD
-NTAPI
+APIENTRY
NtUserRemoteStopScreenUpdates(VOID)
{
UNIMPLEMENTED;
}
DWORD
-NTAPI
+APIENTRY
NtUserCtxDisplayIOCtl(
DWORD dwUnknown1,
DWORD dwUnknown2,
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;
+}
+
+/*
+ * 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 1;
+}
+
+/*
+ * @unimplemented
+ */
+BOOL APIENTRY
+NtUserLockWindowUpdate(HWND hWnd)
+{
+ UNIMPLEMENTED
+
+ return 0;
+}
+
+/*
+ * @unimplemented
+ */
+HWND APIENTRY
+NtUserRealChildWindowFromPoint(HWND Parent,
+ LONG x,
+ LONG y)
+{
+ 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;
+}
+
+/*
+ * 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 */