Author: gadamopoulos
Date: Thu Oct 13 22:16:58 2011
New Revision: 54124
URL:
http://svn.reactos.org/svn/reactos?rev=54124&view=rev
Log:
[win32k]
- Fix and simplify retrieving the current process window station. All processes that enter
win32k have a window station (including csrss)
Modified:
trunk/reactos/subsystems/win32/win32k/ntuser/winsta.c
Modified: trunk/reactos/subsystems/win32/win32k/ntuser/winsta.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/nt…
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/ntuser/winsta.c [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/ntuser/winsta.c [iso-8859-1] Thu Oct 13 22:16:58
2011
@@ -242,7 +242,7 @@
if (WindowStation == NULL)
{
- // ERR("Invalid window station handle\n");
+ WARN("Invalid window station handle\n");
EngSetLastError(ERROR_INVALID_HANDLE);
return STATUS_INVALID_HANDLE;
}
@@ -802,34 +802,11 @@
HWINSTA FASTCALL
UserGetProcessWindowStation(VOID)
{
- NTSTATUS Status;
- PTHREADINFO pti;
- HWINSTA WinSta;
-
- if(PsGetCurrentProcess() != CsrProcess)
- {
- return PsGetCurrentProcess()->Win32WindowStation;
- }
- else
- {
- ERR("Should use ObFindHandleForObject\n");
- pti = PsGetCurrentThreadWin32Thread();
- Status = ObOpenObjectByPointer(pti->rpdesk->rpwinstaParent,
- 0,
- NULL,
- WINSTA_ALL_ACCESS,
- ExWindowStationObjectType,
- UserMode,
- (PHANDLE) &WinSta);
- if (! NT_SUCCESS(Status))
- {
- SetLastNtError(Status);
- ERR("Unable to open handle for CSRSSs winsta, status 0x%08x\n",
- Status);
- return NULL;
- }
- return WinSta;
- }
+ PPROCESSINFO ppi = PsGetCurrentProcessWin32Process();
+
+ //ASSERT(ppi->hwinsta);
+
+ return ppi->hwinsta;
}
@@ -856,36 +833,19 @@
PWINSTATION_OBJECT FASTCALL
IntGetWinStaObj(VOID)
{
- PWINSTATION_OBJECT WinStaObj;
- PTHREADINFO Win32Thread;
- PEPROCESS CurrentProcess;
-
- /*
- * just a temporary hack, this will be gone soon
- */
-
- Win32Thread = PsGetCurrentThreadWin32Thread();
- if(Win32Thread != NULL && Win32Thread->rpdesk != NULL)
- {
- WinStaObj = Win32Thread->rpdesk->rpwinstaParent;
- ObReferenceObjectByPointer(WinStaObj, KernelMode, ExWindowStationObjectType, 0);
- }
- else if((CurrentProcess = PsGetCurrentProcess()) != CsrProcess)
- {
- NTSTATUS Status =
IntValidateWindowStationHandle(CurrentProcess->Win32WindowStation,
+ PWINSTATION_OBJECT WinStaObj;
+ NTSTATUS Status;
+
+ Status = IntValidateWindowStationHandle(
+ UserGetProcessWindowStation(),
KernelMode,
0,
&WinStaObj);
- if(!NT_SUCCESS(Status))
- {
- SetLastNtError(Status);
- return NULL;
- }
- }
- else
- {
- WinStaObj = NULL;
- }
+ if(!NT_SUCCESS(Status))
+ {
+ SetLastNtError(Status);
+ return NULL;
+ }
return WinStaObj;
}