Make GetProcessWindowStation work for CSRSS

svn path=/trunk/; revision=19790
This commit is contained in:
Gé van Geldorp 2005-11-30 23:24:19 +00:00
parent a77ce5795b
commit dbebd881b2
2 changed files with 20 additions and 5 deletions

View file

@ -915,17 +915,31 @@ NtUserSetObjectInformation(
HWINSTA FASTCALL
UserGetProcessWindowStation(VOID)
{
NTSTATUS Status;
HWINSTA WinSta;
if(PsGetCurrentProcess() != CsrProcess)
{
return PsGetCurrentProcess()->Win32WindowStation;
}
else
{
/* FIXME - get the pointer to the window station by querying the parent of
the desktop of the calling thread (which is a window station),
then use ObFindHandleForObject() to find a suitable handle */
DPRINT1("CSRSS called NtUserGetProcessWindowStation()!!! returned NULL!\n");
return NULL;
DPRINT1("Should use ObFindHandleForObject\n");
Status = ObOpenObjectByPointer(PsGetWin32Thread()->Desktop->WindowStation,
0,
NULL,
WINSTA_ALL_ACCESS,
ExWindowStationObjectType,
UserMode,
(PHANDLE) &WinSta);
if (! NT_SUCCESS(Status))
{
SetLastNtError(Status);
DPRINT1("Unable to open handle for CSRSSs winsta, status 0x%08x\n",
Status);
return NULL;
}
return WinSta;
}
}

View file

@ -380,6 +380,7 @@ extern "C" {
#define WINSTA_READATTRIBUTES 2
#define WINSTA_READSCREEN 512
#define WINSTA_WRITEATTRIBUTES 16
#define WINSTA_ALL_ACCESS 895
#define DDL_READWRITE 0
#define DDL_READONLY 1
#define DDL_HIDDEN 2