mirror of
https://github.com/reactos/reactos.git
synced 2025-08-04 03:46:38 +00:00
implemented GetThreadDesktop()
svn path=/trunk/; revision=6976
This commit is contained in:
parent
59d7369cf8
commit
b2854c757b
2 changed files with 52 additions and 10 deletions
|
@ -40,9 +40,10 @@ typedef struct _SYSTEM_CURSORINFO
|
||||||
|
|
||||||
typedef struct _WINSTATION_OBJECT
|
typedef struct _WINSTATION_OBJECT
|
||||||
{
|
{
|
||||||
|
HANDLE Self;
|
||||||
|
|
||||||
CSHORT Type;
|
CSHORT Type;
|
||||||
CSHORT Size;
|
CSHORT Size;
|
||||||
|
|
||||||
KSPIN_LOCK Lock;
|
KSPIN_LOCK Lock;
|
||||||
UNICODE_STRING Name;
|
UNICODE_STRING Name;
|
||||||
LIST_ENTRY DesktopListHead;
|
LIST_ENTRY DesktopListHead;
|
||||||
|
@ -61,6 +62,8 @@ typedef struct _WINSTATION_OBJECT
|
||||||
|
|
||||||
typedef struct _DESKTOP_OBJECT
|
typedef struct _DESKTOP_OBJECT
|
||||||
{
|
{
|
||||||
|
HANDLE Self;
|
||||||
|
|
||||||
CSHORT Type;
|
CSHORT Type;
|
||||||
CSHORT Size;
|
CSHORT Size;
|
||||||
LIST_ENTRY ListEntry;
|
LIST_ENTRY ListEntry;
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
* along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
*
|
*
|
||||||
* $Id: desktop.c,v 1.3 2003/12/12 18:18:21 weiden Exp $
|
* $Id: desktop.c,v 1.4 2003/12/12 20:44:52 weiden Exp $
|
||||||
*
|
*
|
||||||
* COPYRIGHT: See COPYING in the top level directory
|
* COPYRIGHT: See COPYING in the top level directory
|
||||||
* PROJECT: ReactOS kernel
|
* PROJECT: ReactOS kernel
|
||||||
|
@ -373,6 +373,8 @@ NtUserCreateDesktop(
|
||||||
NULL,
|
NULL,
|
||||||
&Desktop);
|
&Desktop);
|
||||||
|
|
||||||
|
DesktopObject->Self = (HANDLE)Desktop;
|
||||||
|
|
||||||
ObDereferenceObject(DesktopObject);
|
ObDereferenceObject(DesktopObject);
|
||||||
ExFreePool(DesktopName.Buffer);
|
ExFreePool(DesktopName.Buffer);
|
||||||
|
|
||||||
|
@ -533,7 +535,7 @@ NtUserOpenInputDesktop(
|
||||||
|
|
||||||
Status = IntValidateDesktopHandle(
|
Status = IntValidateDesktopHandle(
|
||||||
InputDesktop,
|
InputDesktop,
|
||||||
KernelMode,
|
UserMode,
|
||||||
0,
|
0,
|
||||||
&Object);
|
&Object);
|
||||||
|
|
||||||
|
@ -598,7 +600,7 @@ NtUserCloseDesktop(HDESK hDesktop)
|
||||||
|
|
||||||
Status = IntValidateDesktopHandle(
|
Status = IntValidateDesktopHandle(
|
||||||
hDesktop,
|
hDesktop,
|
||||||
KernelMode,
|
UserMode,
|
||||||
0,
|
0,
|
||||||
&Object);
|
&Object);
|
||||||
|
|
||||||
|
@ -738,13 +740,50 @@ NtUserResolveDesktopForWOW(DWORD Unknown0)
|
||||||
* NtUserGetThreadDesktop
|
* NtUserGetThreadDesktop
|
||||||
*
|
*
|
||||||
* Status
|
* Status
|
||||||
* @unimplemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
|
|
||||||
HDESK STDCALL
|
HDESK STDCALL
|
||||||
NtUserGetThreadDesktop(DWORD dwThreadId, DWORD Unknown1)
|
NtUserGetThreadDesktop(DWORD dwThreadId, DWORD Unknown1)
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED
|
PDESKTOP_OBJECT Desktop;
|
||||||
|
NTSTATUS Status;
|
||||||
|
PETHREAD Thread;
|
||||||
|
HDESK Ret;
|
||||||
|
|
||||||
|
if(!dwThreadId)
|
||||||
|
{
|
||||||
|
SetLastWin32Error(ERROR_INVALID_PARAMETER);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = PsLookupThreadByThreadId((PVOID)dwThreadId, &Thread);
|
||||||
|
if(!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
SetLastWin32Error(ERROR_INVALID_PARAMETER);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
Desktop = Thread->Win32Thread->Desktop;
|
||||||
|
|
||||||
|
if(Desktop)
|
||||||
|
{
|
||||||
|
Status = ObReferenceObjectByPointer(Desktop,
|
||||||
|
0,
|
||||||
|
ExDesktopObjectType,
|
||||||
|
UserMode);
|
||||||
|
if(!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
SetLastNtError(Status);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
Ret = (HDESK)Desktop->Self;
|
||||||
|
|
||||||
|
ObDereferenceObject(Desktop);
|
||||||
|
return Ret;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -764,7 +803,7 @@ NtUserSetThreadDesktop(HDESK hDesktop)
|
||||||
/* Validate the new desktop. */
|
/* Validate the new desktop. */
|
||||||
Status = IntValidateDesktopHandle(
|
Status = IntValidateDesktopHandle(
|
||||||
hDesktop,
|
hDesktop,
|
||||||
KernelMode,
|
UserMode,
|
||||||
0,
|
0,
|
||||||
&DesktopObject);
|
&DesktopObject);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue