2008-07-13 00:24:05 +00:00
|
|
|
/*
|
2001-06-04 14:39:43 +00:00
|
|
|
* COPYRIGHT: See COPYING in the top level directory
|
2011-12-14 04:07:06 +00:00
|
|
|
* PROJECT: ReactOS Win32k subsystem
|
2001-06-04 14:39:43 +00:00
|
|
|
* PURPOSE: Native User stubs
|
2014-12-27 03:00:09 +00:00
|
|
|
* FILE: win32ss/user/ntuser/ntstubs.c
|
2001-06-04 14:39:43 +00:00
|
|
|
* PROGRAMER: Casper S. Hornstrup (chorns@users.sourceforge.net)
|
|
|
|
*/
|
|
|
|
|
2011-09-20 19:41:33 +00:00
|
|
|
#include <win32k.h>
|
2011-08-21 12:38:52 +00:00
|
|
|
DBG_DEFAULT_CHANNEL(UserMisc);
|
2001-06-04 14:39:43 +00:00
|
|
|
|
2007-09-28 01:49:06 +00:00
|
|
|
DWORD
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2007-09-28 01:49:06 +00:00
|
|
|
NtUserAssociateInputContext(
|
|
|
|
DWORD dwUnknown1,
|
|
|
|
DWORD dwUnknown2,
|
|
|
|
DWORD dwUnknown3)
|
|
|
|
{
|
2011-08-21 12:38:52 +00:00
|
|
|
STUB
|
2007-09-28 01:49:06 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2008-05-29 15:32:05 +00:00
|
|
|
//
|
|
|
|
// Works like BitBlt, http://msdn.microsoft.com/en-us/library/ms532278(VS.85).aspx
|
|
|
|
//
|
|
|
|
BOOL
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2001-06-04 14:39:43 +00:00
|
|
|
NtUserBitBltSysBmp(
|
2008-05-29 15:32:05 +00:00
|
|
|
HDC hdc,
|
|
|
|
INT nXDest,
|
|
|
|
INT nYDest,
|
|
|
|
INT nWidth,
|
|
|
|
INT nHeight,
|
|
|
|
INT nXSrc,
|
|
|
|
INT nYSrc,
|
|
|
|
DWORD dwRop )
|
2001-06-04 14:39:43 +00:00
|
|
|
{
|
2008-05-29 15:32:05 +00:00
|
|
|
BOOL Ret = FALSE;
|
|
|
|
UserEnterExclusive();
|
2008-05-30 15:18:51 +00:00
|
|
|
|
2008-05-29 15:32:05 +00:00
|
|
|
Ret = NtGdiBitBlt( hdc,
|
|
|
|
nXDest,
|
|
|
|
nYDest,
|
2011-03-29 15:35:10 +00:00
|
|
|
nWidth,
|
|
|
|
nHeight,
|
2008-05-29 15:32:05 +00:00
|
|
|
hSystemBM,
|
2011-03-29 15:35:10 +00:00
|
|
|
nXSrc,
|
|
|
|
nYSrc,
|
2008-05-29 15:32:05 +00:00
|
|
|
dwRop,
|
|
|
|
0,
|
|
|
|
0);
|
2008-05-30 15:18:51 +00:00
|
|
|
|
2008-05-29 15:32:05 +00:00
|
|
|
UserLeave();
|
|
|
|
return Ret;
|
2001-06-04 14:39:43 +00:00
|
|
|
}
|
|
|
|
|
2007-09-28 01:49:06 +00:00
|
|
|
DWORD
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2007-09-28 01:49:06 +00:00
|
|
|
NtUserBuildHimcList(
|
|
|
|
DWORD dwUnknown1,
|
|
|
|
DWORD dwUnknown2,
|
|
|
|
DWORD dwUnknown3,
|
|
|
|
DWORD dwUnknown4)
|
|
|
|
{
|
2011-08-21 12:38:52 +00:00
|
|
|
STUB;
|
2007-09-28 01:49:06 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2001-06-04 14:39:43 +00:00
|
|
|
DWORD
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2001-06-04 14:39:43 +00:00
|
|
|
NtUserDragObject(
|
2005-09-07 21:25:42 +00:00
|
|
|
HWND hwnd1,
|
|
|
|
HWND hwnd2,
|
|
|
|
UINT u1,
|
|
|
|
DWORD dw1,
|
|
|
|
HCURSOR hc1
|
|
|
|
)
|
2001-06-04 14:39:43 +00:00
|
|
|
{
|
2011-08-21 12:38:52 +00:00
|
|
|
STUB
|
2001-06-04 14:39:43 +00:00
|
|
|
|
2005-09-07 21:25:42 +00:00
|
|
|
return 0;
|
2001-06-04 14:39:43 +00:00
|
|
|
}
|
|
|
|
|
2008-07-08 05:11:40 +00:00
|
|
|
BOOL
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2001-06-04 14:39:43 +00:00
|
|
|
NtUserDrawAnimatedRects(
|
2008-07-08 05:11:40 +00:00
|
|
|
HWND hwnd,
|
|
|
|
INT idAni,
|
|
|
|
RECT *lprcFrom,
|
|
|
|
RECT *lprcTo)
|
2001-06-04 14:39:43 +00:00
|
|
|
{
|
2011-08-21 12:38:52 +00:00
|
|
|
STUB
|
2001-06-04 14:39:43 +00:00
|
|
|
|
2005-09-07 21:25:42 +00:00
|
|
|
return 0;
|
2001-06-04 14:39:43 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
DWORD
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2001-06-04 14:39:43 +00:00
|
|
|
NtUserEvent(
|
2005-09-07 21:25:42 +00:00
|
|
|
DWORD Unknown0)
|
2001-06-04 14:39:43 +00:00
|
|
|
{
|
2011-08-21 12:38:52 +00:00
|
|
|
STUB
|
2001-06-04 14:39:43 +00:00
|
|
|
|
2005-09-07 21:25:42 +00:00
|
|
|
return 0;
|
2001-06-04 14:39:43 +00:00
|
|
|
}
|
|
|
|
|
2008-07-08 05:11:40 +00:00
|
|
|
BOOL
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2001-06-04 14:39:43 +00:00
|
|
|
NtUserGetAltTabInfo(
|
2008-07-08 05:11:40 +00:00
|
|
|
HWND hwnd,
|
|
|
|
INT iItem,
|
|
|
|
PALTTABINFO pati,
|
2008-11-25 14:50:53 +00:00
|
|
|
LPWSTR pszItemText,
|
2008-07-08 05:11:40 +00:00
|
|
|
UINT cchItemText,
|
|
|
|
BOOL Ansi)
|
2001-06-04 14:39:43 +00:00
|
|
|
{
|
2011-08-21 12:38:52 +00:00
|
|
|
STUB
|
2001-06-04 14:39:43 +00:00
|
|
|
|
2005-09-07 21:25:42 +00:00
|
|
|
return 0;
|
2001-06-04 14:39:43 +00:00
|
|
|
}
|
|
|
|
|
2008-06-08 03:34:25 +00:00
|
|
|
NTSTATUS
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2001-06-04 14:39:43 +00:00
|
|
|
NtUserInitializeClientPfnArrays(
|
2008-06-08 03:34:25 +00:00
|
|
|
PPFNCLIENT pfnClientA,
|
|
|
|
PPFNCLIENT pfnClientW,
|
|
|
|
PPFNCLIENTWORKER pfnClientWorker,
|
|
|
|
HINSTANCE hmodUser)
|
2001-06-04 14:39:43 +00:00
|
|
|
{
|
2009-07-13 03:37:00 +00:00
|
|
|
NTSTATUS Status = STATUS_SUCCESS;
|
2012-07-31 18:40:52 +00:00
|
|
|
TRACE("Enter NtUserInitializeClientPfnArrays User32 0x%p\n", hmodUser);
|
2009-07-23 01:34:31 +00:00
|
|
|
|
|
|
|
if (ClientPfnInit) return Status;
|
|
|
|
|
2009-07-13 03:37:00 +00:00
|
|
|
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));
|
|
|
|
|
2011-12-14 04:07:06 +00:00
|
|
|
//// FIXME: HAX! Temporary until server side is finished.
|
2009-09-07 04:55:00 +00:00
|
|
|
//// Copy the client side procs for now.
|
|
|
|
RtlCopyMemory(&gpsi->aStoCidPfn, pfnClientW, sizeof(gpsi->aStoCidPfn));
|
|
|
|
|
2009-07-13 03:37:00 +00:00
|
|
|
hModClient = hmodUser;
|
2009-07-23 01:34:31 +00:00
|
|
|
ClientPfnInit = TRUE;
|
2009-07-13 03:37:00 +00:00
|
|
|
}
|
|
|
|
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
|
|
|
{
|
|
|
|
Status =_SEH2_GetExceptionCode();
|
|
|
|
}
|
|
|
|
_SEH2_END
|
2001-06-04 14:39:43 +00:00
|
|
|
|
2009-07-13 03:37:00 +00:00
|
|
|
if (!NT_SUCCESS(Status))
|
|
|
|
{
|
2011-08-21 12:38:52 +00:00
|
|
|
ERR("Failed reading Client Pfns from user space.\n");
|
2009-07-13 03:37:00 +00:00
|
|
|
SetLastNtError(Status);
|
|
|
|
}
|
2011-03-29 15:35:10 +00:00
|
|
|
|
2009-07-13 03:37:00 +00:00
|
|
|
UserLeave();
|
|
|
|
return Status;
|
2001-06-04 14:39:43 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
DWORD
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2001-06-04 14:39:43 +00:00
|
|
|
NtUserInitTask(
|
2005-09-07 21:25:42 +00:00
|
|
|
DWORD Unknown0,
|
|
|
|
DWORD Unknown1,
|
|
|
|
DWORD Unknown2,
|
|
|
|
DWORD Unknown3,
|
|
|
|
DWORD Unknown4,
|
|
|
|
DWORD Unknown5,
|
|
|
|
DWORD Unknown6,
|
|
|
|
DWORD Unknown7,
|
|
|
|
DWORD Unknown8,
|
|
|
|
DWORD Unknown9,
|
2008-01-26 12:55:46 +00:00
|
|
|
DWORD Unknown10,
|
|
|
|
DWORD Unknown11)
|
2001-06-04 14:39:43 +00:00
|
|
|
{
|
2011-08-21 12:38:52 +00:00
|
|
|
STUB
|
2001-06-04 14:39:43 +00:00
|
|
|
|
2005-09-07 21:25:42 +00:00
|
|
|
return 0;
|
2001-06-04 14:39:43 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
DWORD
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2001-06-04 14:39:43 +00:00
|
|
|
NtUserMNDragLeave(VOID)
|
|
|
|
{
|
2011-08-21 12:38:52 +00:00
|
|
|
STUB
|
2001-06-04 14:39:43 +00:00
|
|
|
|
2005-09-07 21:25:42 +00:00
|
|
|
return 0;
|
2001-06-04 14:39:43 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
DWORD
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2001-06-04 14:39:43 +00:00
|
|
|
NtUserMNDragOver(
|
2005-09-07 21:25:42 +00:00
|
|
|
DWORD Unknown0,
|
|
|
|
DWORD Unknown1)
|
2001-06-04 14:39:43 +00:00
|
|
|
{
|
2011-08-21 12:38:52 +00:00
|
|
|
STUB
|
2001-06-04 14:39:43 +00:00
|
|
|
|
2005-09-07 21:25:42 +00:00
|
|
|
return 0;
|
2001-06-04 14:39:43 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
DWORD
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2001-06-04 14:39:43 +00:00
|
|
|
NtUserModifyUserStartupInfoFlags(
|
2005-09-07 21:25:42 +00:00
|
|
|
DWORD Unknown0,
|
|
|
|
DWORD Unknown1)
|
2001-06-04 14:39:43 +00:00
|
|
|
{
|
2011-08-21 12:38:52 +00:00
|
|
|
STUB
|
2001-06-04 14:39:43 +00:00
|
|
|
|
2005-09-07 21:25:42 +00:00
|
|
|
return 0;
|
2001-06-04 14:39:43 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
DWORD
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2001-06-12 17:51:51 +00:00
|
|
|
NtUserQueryUserCounters(
|
2005-09-07 21:25:42 +00:00
|
|
|
DWORD Unknown0,
|
|
|
|
DWORD Unknown1,
|
|
|
|
DWORD Unknown2,
|
|
|
|
DWORD Unknown3,
|
|
|
|
DWORD Unknown4)
|
2001-06-04 14:39:43 +00:00
|
|
|
{
|
2011-08-21 12:38:52 +00:00
|
|
|
STUB
|
2001-06-04 14:39:43 +00:00
|
|
|
|
2005-09-07 21:25:42 +00:00
|
|
|
return 0;
|
2001-06-04 14:39:43 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
DWORD
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2001-06-12 17:51:51 +00:00
|
|
|
NtUserRegisterTasklist(
|
2005-09-07 21:25:42 +00:00
|
|
|
DWORD Unknown0)
|
2001-06-04 14:39:43 +00:00
|
|
|
{
|
2011-08-21 12:38:52 +00:00
|
|
|
STUB
|
2001-06-04 14:39:43 +00:00
|
|
|
|
2005-09-07 21:25:42 +00:00
|
|
|
return 0;
|
2001-06-04 14:39:43 +00:00
|
|
|
}
|
|
|
|
|
2001-06-12 17:51:51 +00:00
|
|
|
DWORD
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2001-06-12 17:51:51 +00:00
|
|
|
NtUserSetConsoleReserveKeys(
|
2005-09-07 21:25:42 +00:00
|
|
|
DWORD Unknown0,
|
|
|
|
DWORD Unknown1)
|
2001-06-04 14:39:43 +00:00
|
|
|
{
|
2011-08-21 12:38:52 +00:00
|
|
|
STUB
|
2001-06-04 14:39:43 +00:00
|
|
|
|
2005-09-07 21:25:42 +00:00
|
|
|
return 0;
|
2001-06-04 14:39:43 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
DWORD
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2001-06-12 17:51:51 +00:00
|
|
|
NtUserSetDbgTag(
|
2005-09-07 21:25:42 +00:00
|
|
|
DWORD Unknown0,
|
|
|
|
DWORD Unknown1)
|
2001-06-04 14:39:43 +00:00
|
|
|
{
|
2015-09-09 13:49:39 +00:00
|
|
|
STUB;
|
2001-06-04 14:39:43 +00:00
|
|
|
|
2005-09-07 21:25:42 +00:00
|
|
|
return 0;
|
2001-06-04 14:39:43 +00:00
|
|
|
}
|
|
|
|
|
2015-09-09 13:49:39 +00:00
|
|
|
DWORD
|
|
|
|
APIENTRY
|
|
|
|
NtUserSetDbgTagCount(
|
|
|
|
DWORD Unknown0)
|
|
|
|
{
|
|
|
|
STUB;
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2001-06-04 14:39:43 +00:00
|
|
|
DWORD
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2001-06-12 17:51:51 +00:00
|
|
|
NtUserSetRipFlags(
|
2015-09-09 13:49:39 +00:00
|
|
|
DWORD Unknown0)
|
|
|
|
{
|
|
|
|
STUB;
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
DWORD
|
|
|
|
APIENTRY
|
|
|
|
NtUserDbgWin32HeapFail(
|
|
|
|
DWORD Unknown0,
|
|
|
|
DWORD Unknown1)
|
|
|
|
{
|
|
|
|
STUB
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
DWORD
|
|
|
|
APIENTRY
|
|
|
|
NtUserDbgWin32HeapStat(
|
|
|
|
DWORD Unknown0,
|
|
|
|
DWORD Unknown1)
|
2001-06-04 14:39:43 +00:00
|
|
|
{
|
2011-08-21 12:38:52 +00:00
|
|
|
STUB
|
2001-06-04 14:39:43 +00:00
|
|
|
|
2005-09-07 21:25:42 +00:00
|
|
|
return 0;
|
2001-06-04 14:39:43 +00:00
|
|
|
}
|
|
|
|
|
2008-06-10 21:57:16 +00:00
|
|
|
BOOL
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2001-06-12 17:51:51 +00:00
|
|
|
NtUserSetSysColors(
|
2008-06-10 21:57:16 +00:00
|
|
|
int cElements,
|
2008-06-11 04:45:42 +00:00
|
|
|
IN CONST INT *lpaElements,
|
|
|
|
IN CONST COLORREF *lpaRgbValues,
|
2008-06-17 02:42:40 +00:00
|
|
|
FLONG Flags)
|
2001-06-04 14:39:43 +00:00
|
|
|
{
|
2011-03-21 14:52:08 +00:00
|
|
|
DWORD Ret = TRUE;
|
|
|
|
|
|
|
|
if (cElements == 0)
|
|
|
|
return TRUE;
|
|
|
|
|
2011-03-29 15:35:10 +00:00
|
|
|
/* We need this check to prevent overflow later */
|
2011-03-29 09:52:39 +00:00
|
|
|
if ((ULONG)cElements >= 0x40000000)
|
2011-03-29 15:35:10 +00:00
|
|
|
{
|
|
|
|
EngSetLastError(ERROR_NOACCESS);
|
2011-03-29 09:52:39 +00:00
|
|
|
return FALSE;
|
2011-03-29 15:35:10 +00:00
|
|
|
}
|
2011-03-29 09:52:39 +00:00
|
|
|
|
2011-03-21 14:52:08 +00:00
|
|
|
UserEnterExclusive();
|
2011-03-29 09:52:39 +00:00
|
|
|
|
2011-03-21 14:52:08 +00:00
|
|
|
_SEH2_TRY
|
|
|
|
{
|
2011-03-29 09:52:39 +00:00
|
|
|
ProbeForRead(lpaElements, cElements * sizeof(INT), 1);
|
|
|
|
ProbeForRead(lpaRgbValues, cElements * sizeof(COLORREF), 1);
|
|
|
|
|
2011-03-21 14:52:08 +00:00
|
|
|
IntSetSysColors(cElements, lpaElements, lpaRgbValues);
|
|
|
|
}
|
|
|
|
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
|
|
|
{
|
2011-03-29 09:52:39 +00:00
|
|
|
SetLastNtError(_SEH2_GetExceptionCode());
|
2008-06-10 21:57:16 +00:00
|
|
|
Ret = FALSE;
|
2011-03-21 14:52:08 +00:00
|
|
|
}
|
2011-03-29 09:52:39 +00:00
|
|
|
_SEH2_END;
|
|
|
|
|
2011-03-21 14:52:08 +00:00
|
|
|
if (Ret)
|
|
|
|
{
|
|
|
|
UserSendNotifyMessage(HWND_BROADCAST, WM_SYSCOLORCHANGE, 0, 0);
|
2011-05-01 12:59:48 +00:00
|
|
|
|
|
|
|
UserRedrawDesktop();
|
2011-03-21 14:52:08 +00:00
|
|
|
}
|
2011-03-29 09:52:39 +00:00
|
|
|
|
2011-03-21 14:52:08 +00:00
|
|
|
UserLeave();
|
|
|
|
return Ret;
|
2001-06-04 14:39:43 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
DWORD
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2001-06-04 14:39:43 +00:00
|
|
|
NtUserUpdateInputContext(
|
2005-09-07 21:25:42 +00:00
|
|
|
DWORD Unknown0,
|
|
|
|
DWORD Unknown1,
|
|
|
|
DWORD Unknown2)
|
2001-06-04 14:39:43 +00:00
|
|
|
{
|
2011-08-21 12:38:52 +00:00
|
|
|
STUB
|
2001-06-04 14:39:43 +00:00
|
|
|
|
2005-09-07 21:25:42 +00:00
|
|
|
return 0;
|
2001-06-04 14:39:43 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
DWORD
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2001-06-04 14:39:43 +00:00
|
|
|
NtUserUpdateInstance(
|
2005-09-07 21:25:42 +00:00
|
|
|
DWORD Unknown0,
|
|
|
|
DWORD Unknown1,
|
|
|
|
DWORD Unknown2)
|
2001-06-04 14:39:43 +00:00
|
|
|
{
|
2011-08-21 12:38:52 +00:00
|
|
|
STUB
|
2001-06-04 14:39:43 +00:00
|
|
|
|
2005-09-07 21:25:42 +00:00
|
|
|
return 0;
|
2001-06-04 14:39:43 +00:00
|
|
|
}
|
|
|
|
|
2008-07-08 05:11:40 +00:00
|
|
|
BOOL
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2001-06-04 14:39:43 +00:00
|
|
|
NtUserUserHandleGrantAccess(
|
2008-07-08 05:11:40 +00:00
|
|
|
IN HANDLE hUserHandle,
|
|
|
|
IN HANDLE hJob,
|
|
|
|
IN BOOL bGrant)
|
2001-06-04 14:39:43 +00:00
|
|
|
{
|
2011-08-21 12:38:52 +00:00
|
|
|
STUB
|
2001-06-04 14:39:43 +00:00
|
|
|
|
2005-09-07 21:25:42 +00:00
|
|
|
return 0;
|
2001-06-04 14:39:43 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
DWORD
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2001-06-04 14:39:43 +00:00
|
|
|
NtUserWaitForMsgAndEvent(
|
2005-09-07 21:25:42 +00:00
|
|
|
DWORD Unknown0)
|
2001-06-04 14:39:43 +00:00
|
|
|
{
|
2011-08-21 12:38:52 +00:00
|
|
|
STUB
|
2001-06-04 14:39:43 +00:00
|
|
|
|
2005-09-07 21:25:42 +00:00
|
|
|
return 0;
|
2001-06-04 14:39:43 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
DWORD
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2001-06-04 14:39:43 +00:00
|
|
|
NtUserWin32PoolAllocationStats(
|
2005-09-07 21:25:42 +00:00
|
|
|
DWORD Unknown0,
|
|
|
|
DWORD Unknown1,
|
|
|
|
DWORD Unknown2,
|
|
|
|
DWORD Unknown3,
|
|
|
|
DWORD Unknown4,
|
|
|
|
DWORD Unknown5)
|
2001-06-04 14:39:43 +00:00
|
|
|
{
|
2011-08-21 12:38:52 +00:00
|
|
|
STUB
|
2001-06-04 14:39:43 +00:00
|
|
|
|
2005-09-07 21:25:42 +00:00
|
|
|
return 0;
|
2001-06-04 14:39:43 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
DWORD
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2001-06-04 14:39:43 +00:00
|
|
|
NtUserYieldTask(VOID)
|
|
|
|
{
|
2011-08-21 12:38:52 +00:00
|
|
|
STUB
|
2001-06-04 14:39:43 +00:00
|
|
|
|
2005-09-07 21:25:42 +00:00
|
|
|
return 0;
|
2001-06-04 14:39:43 +00:00
|
|
|
}
|
|
|
|
|
2007-09-28 01:49:06 +00:00
|
|
|
DWORD
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2007-09-28 01:49:06 +00:00
|
|
|
NtUserCreateInputContext(
|
|
|
|
DWORD dwUnknown1)
|
|
|
|
{
|
2011-08-21 12:38:52 +00:00
|
|
|
STUB;
|
2007-09-28 01:49:06 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
DWORD
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2007-09-28 01:49:06 +00:00
|
|
|
NtUserDestroyInputContext(
|
|
|
|
DWORD dwUnknown1)
|
|
|
|
{
|
2011-08-21 12:38:52 +00:00
|
|
|
STUB;
|
2007-09-28 01:49:06 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
DWORD
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2007-09-28 01:49:06 +00:00
|
|
|
NtUserGetRawInputBuffer(
|
2008-07-08 05:11:40 +00:00
|
|
|
PRAWINPUT pData,
|
|
|
|
PUINT pcbSize,
|
|
|
|
UINT cbSizeHeader)
|
2007-09-28 01:49:06 +00:00
|
|
|
{
|
2011-08-21 12:38:52 +00:00
|
|
|
STUB;
|
2007-09-28 01:49:06 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
DWORD
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2007-09-28 01:49:06 +00:00
|
|
|
NtUserGetRawInputData(
|
2008-07-08 05:11:40 +00:00
|
|
|
HRAWINPUT hRawInput,
|
|
|
|
UINT uiCommand,
|
|
|
|
LPVOID pData,
|
|
|
|
PUINT pcbSize,
|
|
|
|
UINT cbSizeHeader)
|
2007-09-28 01:49:06 +00:00
|
|
|
{
|
2011-08-21 12:38:52 +00:00
|
|
|
STUB;
|
2007-09-28 01:49:06 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
DWORD
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2007-09-28 01:49:06 +00:00
|
|
|
NtUserGetRawInputDeviceInfo(
|
2008-07-08 05:11:40 +00:00
|
|
|
HANDLE hDevice,
|
|
|
|
UINT uiCommand,
|
|
|
|
LPVOID pData,
|
|
|
|
PUINT pcbSize
|
|
|
|
)
|
2007-09-28 01:49:06 +00:00
|
|
|
{
|
2011-08-21 12:38:52 +00:00
|
|
|
STUB;
|
2007-09-28 01:49:06 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
DWORD
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2007-09-28 01:49:06 +00:00
|
|
|
NtUserGetRawInputDeviceList(
|
2008-07-08 05:11:40 +00:00
|
|
|
PRAWINPUTDEVICELIST pRawInputDeviceList,
|
|
|
|
PUINT puiNumDevices,
|
|
|
|
UINT cbSize)
|
2007-09-28 01:49:06 +00:00
|
|
|
{
|
2011-08-21 12:38:52 +00:00
|
|
|
STUB;
|
2007-09-28 01:49:06 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
DWORD
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2007-09-28 01:49:06 +00:00
|
|
|
NtUserGetRegisteredRawInputDevices(
|
2008-07-08 05:11:40 +00:00
|
|
|
PRAWINPUTDEVICE pRawInputDevices,
|
|
|
|
PUINT puiNumDevices,
|
|
|
|
UINT cbSize)
|
2007-09-28 01:49:06 +00:00
|
|
|
{
|
2011-08-21 12:38:52 +00:00
|
|
|
STUB;
|
2007-09-28 01:49:06 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
DWORD
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2007-09-28 01:49:06 +00:00
|
|
|
NtUserHardErrorControl(
|
|
|
|
DWORD dwUnknown1,
|
|
|
|
DWORD dwUnknown2,
|
|
|
|
DWORD dwUnknown3)
|
|
|
|
{
|
2011-08-21 12:38:52 +00:00
|
|
|
STUB;
|
2007-09-28 01:49:06 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2013-09-25 17:14:21 +00:00
|
|
|
BOOL
|
2013-09-14 15:43:49 +00:00
|
|
|
NTAPI
|
2007-09-28 01:49:06 +00:00
|
|
|
NtUserNotifyProcessCreate(
|
2013-09-14 15:43:49 +00:00
|
|
|
HANDLE NewProcessId,
|
2014-12-17 23:03:36 +00:00
|
|
|
HANDLE ParentThreadId,
|
|
|
|
ULONG dwUnknown,
|
|
|
|
ULONG CreateFlags)
|
2007-09-28 01:49:06 +00:00
|
|
|
{
|
2015-02-15 23:55:52 +00:00
|
|
|
// STUB;
|
|
|
|
TRACE("NtUserNotifyProcessCreate is UNIMPLEMENTED\n");
|
2013-09-25 17:14:21 +00:00
|
|
|
return FALSE;
|
2007-09-28 01:49:06 +00:00
|
|
|
}
|
|
|
|
|
2008-10-20 23:42:53 +00:00
|
|
|
NTSTATUS
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2007-09-28 01:49:06 +00:00
|
|
|
NtUserProcessConnect(
|
2014-12-24 15:48:37 +00:00
|
|
|
IN HANDLE ProcessHandle,
|
|
|
|
OUT PUSERCONNECT pUserConnect,
|
|
|
|
IN ULONG Size)
|
2007-09-28 01:49:06 +00:00
|
|
|
{
|
2014-12-24 15:48:37 +00:00
|
|
|
NTSTATUS Status;
|
|
|
|
PEPROCESS Process = NULL;
|
2014-12-18 00:30:27 +00:00
|
|
|
PPROCESSINFO W32Process;
|
|
|
|
|
|
|
|
TRACE("NtUserProcessConnect\n");
|
|
|
|
|
|
|
|
if ( pUserConnect == NULL ||
|
|
|
|
Size != sizeof(*pUserConnect) )
|
|
|
|
{
|
|
|
|
return STATUS_UNSUCCESSFUL;
|
|
|
|
}
|
|
|
|
|
2014-12-24 15:48:37 +00:00
|
|
|
/* Get the process object the user handle was referencing */
|
|
|
|
Status = ObReferenceObjectByHandle(ProcessHandle,
|
|
|
|
PROCESS_VM_OPERATION,
|
|
|
|
*PsProcessType,
|
|
|
|
UserMode,
|
|
|
|
(PVOID*)&Process,
|
|
|
|
NULL);
|
|
|
|
if (!NT_SUCCESS(Status)) return Status;
|
|
|
|
|
2014-12-18 00:30:27 +00:00
|
|
|
UserEnterShared();
|
|
|
|
|
2014-12-24 15:48:37 +00:00
|
|
|
/* Get Win32 process information */
|
|
|
|
W32Process = PsGetProcessWin32Process(Process);
|
|
|
|
|
2014-12-18 00:30:27 +00:00
|
|
|
_SEH2_TRY
|
|
|
|
{
|
|
|
|
// FIXME: Check that pUserConnect->ulVersion == USER_VERSION;
|
|
|
|
|
2014-12-25 23:10:47 +00:00
|
|
|
ProbeForWrite(pUserConnect, sizeof(*pUserConnect), sizeof(PVOID));
|
2009-03-31 22:02:29 +00:00
|
|
|
pUserConnect->siClient.psi = gpsi;
|
2009-05-23 00:57:51 +00:00
|
|
|
pUserConnect->siClient.aheList = gHandleTable;
|
2014-12-18 00:30:27 +00:00
|
|
|
pUserConnect->siClient.ulSharedDelta =
|
|
|
|
(ULONG_PTR)W32Process->HeapMappings.KernelMapping -
|
|
|
|
(ULONG_PTR)W32Process->HeapMappings.UserMapping;
|
|
|
|
}
|
|
|
|
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
|
|
|
{
|
2009-03-31 22:02:29 +00:00
|
|
|
Status = _SEH2_GetExceptionCode();
|
2014-12-18 00:30:27 +00:00
|
|
|
}
|
|
|
|
_SEH2_END;
|
|
|
|
|
|
|
|
if (!NT_SUCCESS(Status))
|
2009-03-31 22:02:29 +00:00
|
|
|
SetLastNtError(Status);
|
2014-12-18 00:30:27 +00:00
|
|
|
|
|
|
|
UserLeave();
|
2014-12-24 15:48:37 +00:00
|
|
|
|
|
|
|
/* Dereference the process object */
|
|
|
|
ObDereferenceObject(Process);
|
|
|
|
|
2014-12-18 00:30:27 +00:00
|
|
|
return Status;
|
2007-09-28 01:49:06 +00:00
|
|
|
}
|
|
|
|
|
2014-11-28 23:19:25 +00:00
|
|
|
NTSTATUS
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2014-11-28 23:19:25 +00:00
|
|
|
NtUserQueryInformationThread(IN HANDLE ThreadHandle,
|
|
|
|
IN USERTHREADINFOCLASS ThreadInformationClass,
|
|
|
|
OUT PVOID ThreadInformation,
|
|
|
|
IN ULONG ThreadInformationLength)
|
2007-09-28 01:49:06 +00:00
|
|
|
{
|
2014-12-16 23:09:29 +00:00
|
|
|
NTSTATUS Status = STATUS_SUCCESS;
|
|
|
|
PETHREAD Thread;
|
|
|
|
|
|
|
|
/* Allow only CSRSS to perform this operation */
|
|
|
|
if (PsGetCurrentProcess() != gpepCSRSS)
|
|
|
|
return STATUS_ACCESS_DENIED;
|
|
|
|
|
|
|
|
UserEnterExclusive();
|
|
|
|
|
|
|
|
/* Get the Thread */
|
|
|
|
Status = ObReferenceObjectByHandle(ThreadHandle,
|
|
|
|
THREAD_QUERY_INFORMATION,
|
|
|
|
*PsThreadType,
|
|
|
|
UserMode,
|
|
|
|
(PVOID)&Thread,
|
|
|
|
NULL);
|
|
|
|
if (!NT_SUCCESS(Status)) goto Quit;
|
|
|
|
|
|
|
|
switch (ThreadInformationClass)
|
|
|
|
{
|
|
|
|
default:
|
|
|
|
{
|
|
|
|
STUB;
|
|
|
|
Status = STATUS_NOT_IMPLEMENTED;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
ObDereferenceObject(Thread);
|
|
|
|
|
|
|
|
Quit:
|
|
|
|
UserLeave();
|
|
|
|
return Status;
|
2007-09-28 01:49:06 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
DWORD
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2007-09-28 01:49:06 +00:00
|
|
|
NtUserQueryInputContext(
|
|
|
|
DWORD dwUnknown1,
|
|
|
|
DWORD dwUnknown2)
|
|
|
|
{
|
2011-08-21 12:38:52 +00:00
|
|
|
STUB;
|
2007-09-28 01:49:06 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2011-03-30 01:00:28 +00:00
|
|
|
BOOL
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2007-09-28 01:49:06 +00:00
|
|
|
NtUserRealInternalGetMessage(
|
2011-03-30 01:00:28 +00:00
|
|
|
LPMSG lpMsg,
|
|
|
|
HWND hWnd,
|
|
|
|
UINT wMsgFilterMin,
|
|
|
|
UINT wMsgFilterMax,
|
|
|
|
UINT wRemoveMsg,
|
|
|
|
BOOL bGMSG)
|
2007-09-28 01:49:06 +00:00
|
|
|
{
|
2011-08-21 12:38:52 +00:00
|
|
|
STUB;
|
2007-09-28 01:49:06 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2011-03-30 01:00:28 +00:00
|
|
|
BOOL
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2007-09-28 01:49:06 +00:00
|
|
|
NtUserRealWaitMessageEx(
|
2011-03-30 01:00:28 +00:00
|
|
|
DWORD dwWakeMask,
|
|
|
|
UINT uTimeout)
|
2007-09-28 01:49:06 +00:00
|
|
|
{
|
2011-08-21 12:38:52 +00:00
|
|
|
STUB;
|
2007-09-28 01:49:06 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2008-07-08 05:11:40 +00:00
|
|
|
BOOL
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2007-09-28 01:49:06 +00:00
|
|
|
NtUserRegisterRawInputDevices(
|
2008-07-08 05:11:40 +00:00
|
|
|
IN PCRAWINPUTDEVICE pRawInputDevices,
|
|
|
|
IN UINT uiNumDevices,
|
|
|
|
IN UINT cbSize)
|
2007-09-28 01:49:06 +00:00
|
|
|
{
|
2011-08-21 12:38:52 +00:00
|
|
|
STUB;
|
2007-09-28 01:49:06 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2015-03-11 01:21:29 +00:00
|
|
|
DWORD APIENTRY
|
|
|
|
NtUserResolveDesktopForWOW(DWORD Unknown0)
|
2007-09-28 01:49:06 +00:00
|
|
|
{
|
2015-03-11 01:21:29 +00:00
|
|
|
STUB
|
2007-09-28 01:49:06 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
DWORD
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2007-09-28 01:49:06 +00:00
|
|
|
NtUserSetInformationProcess(
|
|
|
|
DWORD dwUnknown1,
|
|
|
|
DWORD dwUnknown2,
|
|
|
|
DWORD dwUnknown3,
|
|
|
|
DWORD dwUnknown4)
|
|
|
|
{
|
2011-08-21 12:38:52 +00:00
|
|
|
STUB;
|
2007-09-28 01:49:06 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2018-12-16 11:19:54 +00:00
|
|
|
HDESK FASTCALL
|
|
|
|
IntGetDesktopObjectHandle(PDESKTOP DesktopObject);
|
|
|
|
|
2010-03-09 09:26:46 +00:00
|
|
|
NTSTATUS
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2010-03-09 09:26:46 +00:00
|
|
|
NtUserSetInformationThread(IN HANDLE ThreadHandle,
|
|
|
|
IN USERTHREADINFOCLASS ThreadInformationClass,
|
|
|
|
IN PVOID ThreadInformation,
|
|
|
|
IN ULONG ThreadInformationLength)
|
2007-09-28 01:49:06 +00:00
|
|
|
{
|
2014-12-16 23:09:29 +00:00
|
|
|
NTSTATUS Status = STATUS_SUCCESS;
|
|
|
|
PETHREAD Thread;
|
|
|
|
|
|
|
|
/* Allow only CSRSS to perform this operation */
|
|
|
|
if (PsGetCurrentProcess() != gpepCSRSS)
|
|
|
|
return STATUS_ACCESS_DENIED;
|
|
|
|
|
|
|
|
UserEnterExclusive();
|
|
|
|
|
|
|
|
/* Get the Thread */
|
|
|
|
Status = ObReferenceObjectByHandle(ThreadHandle,
|
|
|
|
THREAD_SET_INFORMATION,
|
|
|
|
*PsThreadType,
|
|
|
|
UserMode,
|
|
|
|
(PVOID)&Thread,
|
|
|
|
NULL);
|
|
|
|
if (!NT_SUCCESS(Status)) goto Quit;
|
|
|
|
|
|
|
|
switch (ThreadInformationClass)
|
2010-03-09 09:26:46 +00:00
|
|
|
{
|
2014-12-16 23:09:29 +00:00
|
|
|
case UserThreadInitiateShutdown:
|
|
|
|
{
|
2015-02-11 20:12:30 +00:00
|
|
|
ULONG CapturedFlags = 0;
|
|
|
|
|
2017-09-26 09:11:51 +00:00
|
|
|
TRACE("Shutdown initiated\n");
|
2015-02-07 15:26:42 +00:00
|
|
|
|
|
|
|
if (ThreadInformationLength != sizeof(ULONG))
|
|
|
|
{
|
|
|
|
Status = STATUS_INFO_LENGTH_MISMATCH;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
2015-02-11 20:12:30 +00:00
|
|
|
/* Capture the caller value */
|
|
|
|
Status = STATUS_SUCCESS;
|
|
|
|
_SEH2_TRY
|
|
|
|
{
|
|
|
|
ProbeForWrite(ThreadInformation, sizeof(CapturedFlags), sizeof(PVOID));
|
|
|
|
CapturedFlags = *(PULONG)ThreadInformation;
|
|
|
|
}
|
|
|
|
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
|
|
|
{
|
|
|
|
Status = _SEH2_GetExceptionCode();
|
2015-03-11 01:21:29 +00:00
|
|
|
_SEH2_YIELD(break);
|
2015-02-11 20:12:30 +00:00
|
|
|
}
|
|
|
|
_SEH2_END;
|
|
|
|
|
2015-03-11 01:21:29 +00:00
|
|
|
Status = UserInitiateShutdown(Thread, &CapturedFlags);
|
2015-02-11 20:12:30 +00:00
|
|
|
|
|
|
|
/* Return the modified value to the caller */
|
|
|
|
_SEH2_TRY
|
|
|
|
{
|
|
|
|
*(PULONG)ThreadInformation = CapturedFlags;
|
|
|
|
}
|
|
|
|
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
|
|
|
{
|
|
|
|
Status = _SEH2_GetExceptionCode();
|
|
|
|
}
|
|
|
|
_SEH2_END;
|
|
|
|
|
2014-12-16 23:09:29 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
case UserThreadEndShutdown:
|
|
|
|
{
|
2015-02-07 15:26:42 +00:00
|
|
|
NTSTATUS ShutdownStatus;
|
|
|
|
|
2017-09-26 09:11:51 +00:00
|
|
|
TRACE("Shutdown ended\n");
|
2015-02-07 15:26:42 +00:00
|
|
|
|
|
|
|
if (ThreadInformationLength != sizeof(ShutdownStatus))
|
|
|
|
{
|
|
|
|
Status = STATUS_INFO_LENGTH_MISMATCH;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
2015-02-11 20:12:30 +00:00
|
|
|
/* Capture the caller value */
|
2015-02-07 15:26:42 +00:00
|
|
|
Status = STATUS_SUCCESS;
|
|
|
|
_SEH2_TRY
|
|
|
|
{
|
|
|
|
ProbeForRead(ThreadInformation, sizeof(ShutdownStatus), sizeof(PVOID));
|
|
|
|
ShutdownStatus = *(NTSTATUS*)ThreadInformation;
|
|
|
|
}
|
|
|
|
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
|
|
|
{
|
|
|
|
Status = _SEH2_GetExceptionCode();
|
2015-03-11 01:21:29 +00:00
|
|
|
_SEH2_YIELD(break);
|
2015-02-07 15:26:42 +00:00
|
|
|
}
|
|
|
|
_SEH2_END;
|
|
|
|
|
2015-03-11 01:21:29 +00:00
|
|
|
Status = UserEndShutdown(Thread, ShutdownStatus);
|
2014-12-16 23:09:29 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
case UserThreadCsrApiPort:
|
|
|
|
{
|
2015-02-07 15:26:42 +00:00
|
|
|
HANDLE CsrPortHandle;
|
|
|
|
|
[WIN32K]
Reintroduce CSR support for kernel mode, based on code from Ge that was wiped out in revision 58770, and by ntdll CSR code. Is needed for kernel to user-mode CSR callbacks.
For readers, I remind you the big callback picture in the Win32 subsystem:
- In Windows NT 3.1 and 3.51, USER and GDI was modeled against client/server model (USER32.DLL and WINSRV.DLL, and GDI32.DLL and GDISRV.DLL), all running in user mode (using the CSR API).
- Starting Windows NT 4.0 (and up), some USER and GDI parts were moved into kernel mode (in the WIN32K.SYS driver) to speedup communication. We get:
* GDI32.DLL as the client, doing win32k system calls (kernel-mode system calls to win32k),
* and USER32.DLL, WINSRV.DLL and WIN32K.SYS working in tandem, USER32.DLL being the client and {WINSRV.DLL, WIN32K.SYS} being the server.
USER32.DLL can do win32k system calls or CSR calls to WINSRV.DLL (client to server calls). For server-to-server calls, we have WINSRV.DLL
doing win32k system calls, or WIN32K.SYS doing CSR calls back to WINSRV.DLL . Also, there is the possibility for WIN32K.SYS to make user-mode
callbacks to USER32.DLL.
svn path=/trunk/; revision=65817
2014-12-23 21:17:24 +00:00
|
|
|
|
2018-12-16 11:14:56 +00:00
|
|
|
TRACE("Set CSR API Port for Win32k\n");
|
2015-02-07 15:26:42 +00:00
|
|
|
if (ThreadInformationLength != sizeof(CsrPortHandle))
|
[WIN32K]
Reintroduce CSR support for kernel mode, based on code from Ge that was wiped out in revision 58770, and by ntdll CSR code. Is needed for kernel to user-mode CSR callbacks.
For readers, I remind you the big callback picture in the Win32 subsystem:
- In Windows NT 3.1 and 3.51, USER and GDI was modeled against client/server model (USER32.DLL and WINSRV.DLL, and GDI32.DLL and GDISRV.DLL), all running in user mode (using the CSR API).
- Starting Windows NT 4.0 (and up), some USER and GDI parts were moved into kernel mode (in the WIN32K.SYS driver) to speedup communication. We get:
* GDI32.DLL as the client, doing win32k system calls (kernel-mode system calls to win32k),
* and USER32.DLL, WINSRV.DLL and WIN32K.SYS working in tandem, USER32.DLL being the client and {WINSRV.DLL, WIN32K.SYS} being the server.
USER32.DLL can do win32k system calls or CSR calls to WINSRV.DLL (client to server calls). For server-to-server calls, we have WINSRV.DLL
doing win32k system calls, or WIN32K.SYS doing CSR calls back to WINSRV.DLL . Also, there is the possibility for WIN32K.SYS to make user-mode
callbacks to USER32.DLL.
svn path=/trunk/; revision=65817
2014-12-23 21:17:24 +00:00
|
|
|
{
|
|
|
|
Status = STATUS_INFO_LENGTH_MISMATCH;
|
|
|
|
break;
|
|
|
|
}
|
2014-12-25 23:10:47 +00:00
|
|
|
|
2015-02-11 20:12:30 +00:00
|
|
|
/* Capture the caller value */
|
2014-12-25 23:10:47 +00:00
|
|
|
Status = STATUS_SUCCESS;
|
|
|
|
_SEH2_TRY
|
|
|
|
{
|
2015-02-07 15:26:42 +00:00
|
|
|
ProbeForRead(ThreadInformation, sizeof(CsrPortHandle), sizeof(PVOID));
|
2014-12-25 23:10:47 +00:00
|
|
|
CsrPortHandle = *(PHANDLE)ThreadInformation;
|
|
|
|
}
|
|
|
|
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
|
|
|
{
|
|
|
|
Status = _SEH2_GetExceptionCode();
|
2015-03-11 01:21:29 +00:00
|
|
|
_SEH2_YIELD(break);
|
2014-12-25 23:10:47 +00:00
|
|
|
}
|
|
|
|
_SEH2_END;
|
|
|
|
|
2015-03-11 01:21:29 +00:00
|
|
|
Status = InitCsrApiPort(CsrPortHandle);
|
2014-12-16 23:09:29 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
2018-12-16 11:19:54 +00:00
|
|
|
case UserThreadUseActiveDesktop:
|
|
|
|
{
|
|
|
|
HDESK hdesk;
|
|
|
|
|
|
|
|
if (Thread != PsGetCurrentThread())
|
|
|
|
{
|
|
|
|
Status = STATUS_NOT_IMPLEMENTED;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
hdesk = IntGetDesktopObjectHandle(gpdeskInputDesktop);
|
|
|
|
IntSetThreadDesktop(hdesk, FALSE);
|
|
|
|
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case UserThreadRestoreDesktop:
|
|
|
|
{
|
|
|
|
if (Thread != PsGetCurrentThread())
|
|
|
|
{
|
|
|
|
Status = STATUS_NOT_IMPLEMENTED;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
IntSetThreadDesktop(NULL, FALSE);
|
|
|
|
break;
|
|
|
|
}
|
2014-12-16 23:09:29 +00:00
|
|
|
default:
|
|
|
|
{
|
|
|
|
STUB;
|
|
|
|
Status = STATUS_NOT_IMPLEMENTED;
|
|
|
|
break;
|
|
|
|
}
|
2010-03-09 09:26:46 +00:00
|
|
|
}
|
|
|
|
|
2014-12-16 23:09:29 +00:00
|
|
|
ObDereferenceObject(Thread);
|
|
|
|
|
|
|
|
Quit:
|
|
|
|
UserLeave();
|
|
|
|
return Status;
|
2007-09-28 01:49:06 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
DWORD
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2007-09-28 01:49:06 +00:00
|
|
|
NtUserSetThreadLayoutHandles(
|
|
|
|
DWORD dwUnknown1,
|
|
|
|
DWORD dwUnknown2)
|
|
|
|
{
|
2011-08-21 12:38:52 +00:00
|
|
|
STUB;
|
2007-09-28 01:49:06 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2008-07-08 05:11:40 +00:00
|
|
|
BOOL
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2007-09-28 01:49:06 +00:00
|
|
|
NtUserSoundSentry(VOID)
|
|
|
|
{
|
2011-08-21 12:38:52 +00:00
|
|
|
STUB;
|
2007-09-28 01:49:06 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
DWORD
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2007-09-28 01:49:06 +00:00
|
|
|
NtUserTestForInteractiveUser(
|
|
|
|
DWORD dwUnknown1)
|
|
|
|
{
|
2011-08-21 12:38:52 +00:00
|
|
|
STUB;
|
2007-09-28 01:49:06 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
DWORD
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2007-09-28 01:49:06 +00:00
|
|
|
NtUserRemoteConnect(
|
|
|
|
DWORD dwUnknown1,
|
|
|
|
DWORD dwUnknown2,
|
|
|
|
DWORD dwUnknown3)
|
|
|
|
{
|
2011-08-21 12:38:52 +00:00
|
|
|
STUB;
|
2007-09-28 01:49:06 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
DWORD
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2007-09-28 01:49:06 +00:00
|
|
|
NtUserRemoteRedrawRectangle(
|
|
|
|
DWORD dwUnknown1,
|
|
|
|
DWORD dwUnknown2,
|
|
|
|
DWORD dwUnknown3,
|
|
|
|
DWORD dwUnknown4)
|
|
|
|
{
|
2011-08-21 12:38:52 +00:00
|
|
|
STUB;
|
2007-09-28 01:49:06 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
DWORD
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2007-09-28 01:49:06 +00:00
|
|
|
NtUserRemoteRedrawScreen(VOID)
|
|
|
|
{
|
2011-08-21 12:38:52 +00:00
|
|
|
STUB;
|
2007-09-28 01:49:06 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
DWORD
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2007-09-28 01:49:06 +00:00
|
|
|
NtUserRemoteStopScreenUpdates(VOID)
|
|
|
|
{
|
2011-08-21 12:38:52 +00:00
|
|
|
STUB;
|
2007-09-28 01:49:06 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
DWORD
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2007-09-28 01:49:06 +00:00
|
|
|
NtUserCtxDisplayIOCtl(
|
|
|
|
DWORD dwUnknown1,
|
|
|
|
DWORD dwUnknown2,
|
|
|
|
DWORD dwUnknown3)
|
|
|
|
{
|
2011-08-21 12:38:52 +00:00
|
|
|
STUB;
|
2007-09-28 01:49:06 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2010-11-24 14:52:23 +00:00
|
|
|
/*
|
|
|
|
* @unimplemented
|
|
|
|
*/
|
|
|
|
BOOL APIENTRY
|
|
|
|
NtUserLockWindowUpdate(HWND hWnd)
|
|
|
|
{
|
2018-11-25 13:31:04 +00:00
|
|
|
STUB;
|
|
|
|
return FALSE;
|
2010-11-24 14:52:23 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
DWORD APIENTRY
|
|
|
|
NtUserQuerySendMessage(DWORD Unknown0)
|
|
|
|
{
|
2011-08-21 12:38:52 +00:00
|
|
|
STUB;
|
2010-11-24 14:52:23 +00:00
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
BOOL APIENTRY NtUserAddClipboardFormatListener(
|
|
|
|
HWND hwnd
|
|
|
|
)
|
|
|
|
{
|
2011-08-21 12:38:52 +00:00
|
|
|
STUB;
|
2010-11-24 14:52:23 +00:00
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
BOOL APIENTRY NtUserRemoveClipboardFormatListener(
|
|
|
|
HWND hwnd
|
|
|
|
)
|
|
|
|
{
|
2011-08-21 12:38:52 +00:00
|
|
|
STUB;
|
2010-11-24 14:52:23 +00:00
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
BOOL APIENTRY NtUserGetUpdatedClipboardFormats(
|
|
|
|
PUINT lpuiFormats,
|
|
|
|
UINT cFormats,
|
|
|
|
PUINT pcFormatsOut
|
|
|
|
)
|
|
|
|
{
|
2011-08-21 12:38:52 +00:00
|
|
|
STUB;
|
2010-11-24 14:52:23 +00:00
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
2015-09-09 13:49:39 +00:00
|
|
|
// Yes, I know, these do not belong here, just tell me where to put them
|
|
|
|
BOOL
|
|
|
|
APIENTRY
|
|
|
|
NtGdiMakeObjectXferable(
|
|
|
|
_In_ HANDLE hHandle,
|
|
|
|
_In_ DWORD dwProcessId)
|
|
|
|
{
|
|
|
|
STUB;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
DWORD
|
|
|
|
APIENTRY
|
|
|
|
NtDxEngGetRedirectionBitmap(
|
|
|
|
DWORD Unknown0)
|
|
|
|
{
|
|
|
|
STUB;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2001-06-04 14:39:43 +00:00
|
|
|
/* EOF */
|