Author: ion Date: Thu Jul 20 18:53:47 2006 New Revision: 23192
URL: http://svn.reactos.org/svn/reactos?rev=23192&view=rev Log: - Simplify PsGetNextProcess so it works like PsGetNextProcessThread. - Reformat and annotate parts of process.c - Remove PsGetWin32Process, PsGetWin32Thread and implement/export the real functions PsGetCurrentProcessWin32Process, PsGetCurrentThreadWin32Thread, change win32k to use them. - Initailize and use process rundown. - Set corrent GrantedAccess. - Remove an extra incorrect reference we were adding to processes. - Implement PsIsProcessBeingDebugged. - Make the same changes to NtOpenProcess that we did previously to NtOpenThread.
Modified: trunk/reactos/include/ndk/psfuncs.h trunk/reactos/ntoskrnl/io/iomgr/util.c trunk/reactos/ntoskrnl/ntoskrnl.def trunk/reactos/ntoskrnl/ps/process.c trunk/reactos/ntoskrnl/ps/thread.c trunk/reactos/subsystems/win32/win32k/eng/driverobj.c trunk/reactos/subsystems/win32/win32k/include/desktop.h trunk/reactos/subsystems/win32/win32k/include/object.h trunk/reactos/subsystems/win32/win32k/include/userfuncs.h trunk/reactos/subsystems/win32/win32k/misc/usrheap.c trunk/reactos/subsystems/win32/win32k/ntuser/callback.c trunk/reactos/subsystems/win32/win32k/ntuser/caret.c trunk/reactos/subsystems/win32/win32k/ntuser/clipboard.c trunk/reactos/subsystems/win32/win32k/ntuser/cursoricon.c trunk/reactos/subsystems/win32/win32k/ntuser/desktop.c trunk/reactos/subsystems/win32/win32k/ntuser/focus.c trunk/reactos/subsystems/win32/win32k/ntuser/guicheck.c trunk/reactos/subsystems/win32/win32k/ntuser/hook.c trunk/reactos/subsystems/win32/win32k/ntuser/input.c trunk/reactos/subsystems/win32/win32k/ntuser/keyboard.c trunk/reactos/subsystems/win32/win32k/ntuser/menu.c trunk/reactos/subsystems/win32/win32k/ntuser/message.c trunk/reactos/subsystems/win32/win32k/ntuser/misc.c trunk/reactos/subsystems/win32/win32k/ntuser/msgqueue.c trunk/reactos/subsystems/win32/win32k/ntuser/painting.c trunk/reactos/subsystems/win32/win32k/ntuser/timer.c trunk/reactos/subsystems/win32/win32k/ntuser/useratom.c trunk/reactos/subsystems/win32/win32k/ntuser/window.c trunk/reactos/subsystems/win32/win32k/ntuser/winpos.c trunk/reactos/subsystems/win32/win32k/ntuser/winsta.c trunk/reactos/subsystems/win32/win32k/objects/gdiobj.c trunk/reactos/subsystems/win32/win32k/objects/text.c trunk/reactos/subsystems/win32/win32k/w32k.h
Modified: trunk/reactos/include/ndk/psfuncs.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/include/ndk/psfuncs.h?rev=2... ============================================================================== --- trunk/reactos/include/ndk/psfuncs.h (original) +++ trunk/reactos/include/ndk/psfuncs.h Thu Jul 20 18:53:47 2006 @@ -32,13 +32,13 @@ // struct _W32THREAD* NTAPI -PsGetWin32Thread( +PsGetCurrentThreadWin32Thread( VOID );
struct _W32PROCESS* NTAPI -PsGetWin32Process( +PsGetCurrentProcessWin32Process( VOID );
Modified: trunk/reactos/ntoskrnl/io/iomgr/util.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/io/iomgr/util.c?re... ============================================================================== --- trunk/reactos/ntoskrnl/io/iomgr/util.c (original) +++ trunk/reactos/ntoskrnl/io/iomgr/util.c Thu Jul 20 18:53:47 2006 @@ -76,6 +76,25 @@ /* Return support for WDM 1.10 (Windows 2000) */ if (MajorVersion <= 1 && MinorVersion <= 0x10) return TRUE; return FALSE; +} + +/* + * @implemented + */ +PEPROCESS +NTAPI +IoGetCurrentProcess(VOID) +{ + /* FIXME: Completely broken */ + if (PsGetCurrentThread() == NULL || + PsGetCurrentThread()->Tcb.ApcState.Process == NULL) + { + return(PsInitialSystemProcess); + } + else + { + return(PEPROCESS)(PsGetCurrentThread()->Tcb.ApcState.Process); + } }
/*
Modified: trunk/reactos/ntoskrnl/ntoskrnl.def URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ntoskrnl.def?rev=2... ============================================================================== --- trunk/reactos/ntoskrnl/ntoskrnl.def (original) +++ trunk/reactos/ntoskrnl/ntoskrnl.def Thu Jul 20 18:53:47 2006 @@ -897,10 +897,12 @@ PsGetContextThread@12 PsGetCurrentProcess@0=KeGetCurrentProcess@0 PsGetCurrentProcessId@0 +PsGetCurrentProcessWin32Process@0 PsGetCurrentProcessSessionId@0 PsGetCurrentThread@0=KeGetCurrentThread@0 PsGetCurrentThreadId@0 PsGetCurrentThreadPreviousMode@0 +PsGetCurrentThreadWin32Thread@0 PsGetCurrentThreadStackBase@0 PsGetCurrentThreadStackLimit@0 PsGetJobLock@4 @@ -931,8 +933,6 @@ PsGetThreadTeb@4 PsGetThreadWin32Thread@4 PsGetVersion@16 -PsGetWin32Thread@0 -PsGetWin32Process@0 PsImpersonateClient@20 PsInitialSystemProcess DATA PsIsProcessBeingDebugged@4
Modified: trunk/reactos/ntoskrnl/ps/process.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ps/process.c?rev=2... ============================================================================== --- trunk/reactos/ntoskrnl/ps/process.c (original) +++ trunk/reactos/ntoskrnl/ps/process.c Thu Jul 20 18:53:47 2006 @@ -13,11 +13,7 @@ #define NDEBUG #include <internal/debug.h>
-#define LockEvent Spare0[0] -#define LockCount Spare0[1] -#define LockOwner Spare0[2] - -/* GLOBALS ******************************************************************/ +/* GLOBALS *******************************************************************/
PEPROCESS PsInitialSystemProcess = NULL; PEPROCESS PsIdleProcess = NULL; @@ -26,31 +22,16 @@ extern POBJECT_TYPE DbgkDebugObjectType;
EPROCESS_QUOTA_BLOCK PspDefaultQuotaBlock; - ULONG PsMinimumWorkingSet, PsMaximumWorkingSet;
LIST_ENTRY PsActiveProcessHead; FAST_MUTEX PspActiveProcessMutex; + +#if 1 LARGE_INTEGER ShortPsLockDelay, PsLockTimeout; - -/* INTERNAL FUNCTIONS *****************************************************************/ - -NTSTATUS -NTAPI -PspDeleteLdt(PEPROCESS Process) -{ - /* FIXME */ - return STATUS_SUCCESS; -} - -NTSTATUS -NTAPI -PspDeleteVdmObjects(PEPROCESS Process) -{ - /* FIXME */ - return STATUS_SUCCESS; -} - +#define LockEvent Spare0[0] +#define LockCount Spare0[1] +#define LockOwner Spare0[2] NTSTATUS NTAPI PsLockProcess(PEPROCESS Process, BOOLEAN Timeout) @@ -126,6 +107,25 @@
KeLeaveCriticalRegion(); } +#endif + +/* PRIVATE FUNCTIONS *********************************************************/ + +NTSTATUS +NTAPI +PspDeleteLdt(PEPROCESS Process) +{ + /* FIXME */ + return STATUS_SUCCESS; +} + +NTSTATUS +NTAPI +PspDeleteVdmObjects(PEPROCESS Process) +{ + /* FIXME */ + return STATUS_SUCCESS; +}
PETHREAD NTAPI @@ -175,80 +175,56 @@
PEPROCESS NTAPI -PsGetNextProcess(PEPROCESS OldProcess) -{ - PEPROCESS NextProcess; - NTSTATUS Status; +PsGetNextProcess(IN PEPROCESS OldProcess) +{ + PLIST_ENTRY Entry, ListHead; + PEPROCESS FoundProcess = NULL; PAGED_CODE(); - - /* Check if we have a previous process */ - if (OldProcess == NULL) - { - /* We don't, start with the Idle Process */ - Status = ObReferenceObjectByPointer(PsIdleProcess, - PROCESS_ALL_ACCESS, - PsProcessType, - KernelMode); - if (!NT_SUCCESS(Status)) - { - DPRINT1("PsGetNextProcess(): ObReferenceObjectByPointer failed for PsIdleProcess\n"); - KEBUGCHECK(0); - } - - return PsIdleProcess; - }
/* Acquire the Active Process Lock */ ExAcquireFastMutex(&PspActiveProcessMutex);
- /* Start at the previous process */ - NextProcess = OldProcess; - - /* Loop until we fail */ - while (1) - { - /* Get the Process Link */ - PLIST_ENTRY Flink = (NextProcess == PsIdleProcess ? PsActiveProcessHead.Flink : - NextProcess->ActiveProcessLinks.Flink); - - /* Move to the next Process if we're not back at the beginning */ - if (Flink != &PsActiveProcessHead) - { - NextProcess = CONTAINING_RECORD(Flink, EPROCESS, ActiveProcessLinks); - } - else - { - NextProcess = NULL; - break; - } - - /* Reference the Process */ - Status = ObReferenceObjectByPointer(NextProcess, - PROCESS_ALL_ACCESS, - PsProcessType, - KernelMode); - - /* Exit the loop if the reference worked, keep going if there's an error */ - if (NT_SUCCESS(Status)) break; + /* Check if we're already starting somewhere */ + if (OldProcess) + { + /* Start where we left off */ + Entry = OldProcess->ActiveProcessLinks.Flink; + } + else + { + /* Start at the beginning */ + Entry = PsActiveProcessHead.Flink; + } + + /* Set the list head and start looping */ + ListHead = &PsActiveProcessHead; + while (ListHead != Entry) + { + /* Get the Thread */ + FoundProcess = CONTAINING_RECORD(Entry, EPROCESS, ActiveProcessLinks); + + /* Reference the thread. FIXME: Race, use ObSafeReferenceObject */ + ObReferenceObject(FoundProcess); + break; }
/* Release the lock */ ExReleaseFastMutex(&PspActiveProcessMutex);
/* Reference the Process we had referenced earlier */ - ObDereferenceObject(OldProcess); - return(NextProcess); + if (OldProcess) ObDereferenceObject(OldProcess); + return FoundProcess; }
NTSTATUS NTAPI PspCreateProcess(OUT PHANDLE ProcessHandle, IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, - IN HANDLE ParentProcess OPTIONAL, + IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, + IN HANDLE ParentProcess OPTIONAL, IN DWORD Flags, - IN HANDLE SectionHandle OPTIONAL, - IN HANDLE DebugPort OPTIONAL, + IN HANDLE SectionHandle OPTIONAL, + IN HANDLE DebugPort OPTIONAL, IN HANDLE ExceptionPort OPTIONAL, IN BOOLEAN InJob) { @@ -288,11 +264,7 @@ PreviousMode, (PVOID*)&Parent, NULL); - if (!NT_SUCCESS(Status)) - { - DPRINT1("Failed to reference the parent process: Status: 0x%x\n", Status); - return Status; - } + if (!NT_SUCCESS(Status)) return Status;
/* If this process should be in a job but the parent isn't */ if ((InJob) && (!Parent->Job)) @@ -309,7 +281,7 @@ { /* We have no parent */ Parent = NULL; -#ifdef CONFIG_SMP +#ifdef CONFIG_SMP /* * FIXME: Only the boot cpu is initialized in the early boot phase. */ @@ -333,15 +305,15 @@ 0, 0, (PVOID*)&Process); - if (!NT_SUCCESS(Status)) - { - DPRINT1("Failed to create process object, Status: 0x%x\n", Status); - goto Cleanup; - } + if (!NT_SUCCESS(Status)) goto Cleanup;
/* Clean up the Object */ RtlZeroMemory(Process, sizeof(EPROCESS));
+ /* Initialize pushlock and rundown protection */ + ExInitializeRundownProtection(&Process->RundownProtect); + Process->ProcessLock.Value = 0; + /* Setup the Thread List Head */ InitializeListHead(&Process->ThreadListHead);
@@ -356,7 +328,8 @@ { /* Ineherit PID and Hard Error Processing */ Process->InheritedFromUniqueProcessId = Parent->UniqueProcessId; - Process->DefaultHardErrorProcessing = Parent->DefaultHardErrorProcessing; + Process->DefaultHardErrorProcessing = Parent-> + DefaultHardErrorProcessing; } else { @@ -374,11 +347,7 @@ PreviousMode, (PVOID*)&SectionObject, NULL); - if (!NT_SUCCESS(Status)) - { - DPRINT1("Failed to reference process image section: Status: 0x%x\n", Status); - goto CleanupWithRef; - } + if (!NT_SUCCESS(Status)) goto CleanupWithRef; } else { @@ -386,14 +355,14 @@ if (Parent != PsInitialSystemProcess) { /* It's not, so acquire the process rundown */ - // FIXME + ExAcquireRundownProtection(&Process->RundownProtect);
/* If the parent has a section, use it */ SectionObject = Parent->SectionObject; if (SectionObject) ObReferenceObject(SectionObject);
/* Release process rundown */ - // FIXME + ExReleaseRundownProtection(&Process->RundownProtect);
/* If we don't have a section object */ if (!SectionObject) @@ -418,17 +387,17 @@ PreviousMode, (PVOID*)&DebugObject, NULL); - if (!NT_SUCCESS(Status)) - { - DPRINT1("Failed to reference the debug port: Status: 0x%x\n", Status); - goto CleanupWithRef; - } + if (!NT_SUCCESS(Status)) goto CleanupWithRef;
/* Save the debug object */ Process->DebugPort = DebugObject;
/* Check if the caller doesn't want the debug stuff inherited */ - if (Flags & PS_NO_DEBUG_INHERIT) InterlockedOr((PLONG)&Process->Flags, 2); + if (Flags & PS_NO_DEBUG_INHERIT) + { + /* Set the process flag */ + InterlockedOr((PLONG)&Process->Flags, 2); + } } else { @@ -446,11 +415,7 @@ PreviousMode, (PVOID*)&ExceptionPortObject, NULL); - if (!NT_SUCCESS(Status)) - { - DPRINT1("Failed to reference the exception port: Status: 0x%x\n", Status); - goto CleanupWithRef; - } + if (!NT_SUCCESS(Status)) goto CleanupWithRef;
/* Save the exception port */ Process->ExceptionPort = ExceptionPortObject; @@ -460,10 +425,12 @@ Process->SectionObject = SectionObject;
/* Setup the Lock Event */ +#if 1 Process->LockEvent = ExAllocatePoolWithTag(PagedPool, sizeof(KEVENT), TAG('P', 's', 'L', 'k')); KeInitializeEvent(Process->LockEvent, SynchronizationEvent, FALSE); +#endif
/* Set default exit code */ Process->ExitStatus = STATUS_TIMEOUT; @@ -490,22 +457,14 @@
/* Duplicate Parent Token */ Status = PspInitializeProcessSecurity(Process, Parent); - if (!NT_SUCCESS(Status)) - { - DPRINT1("PspInitializeProcessSecurity failed (Status %x)\n", Status); - goto CleanupWithRef; - } + if (!NT_SUCCESS(Status)) goto CleanupWithRef;
/* Set default priority class */ Process->PriorityClass = PROCESS_PRIORITY_CLASS_NORMAL;
/* Create the Process' Address Space */ Status = MmCreateProcessAddressSpace(Process, (PROS_SECTION_OBJECT)SectionObject); - if (!NT_SUCCESS(Status)) - { - DPRINT1("Failed to create Address Space\n"); - goto CleanupWithRef; - } + if (!NT_SUCCESS(Status)) goto CleanupWithRef;
/* Check for parent again */ #if 0 @@ -542,20 +501,15 @@ } #endif
- /* Check if we have a section object */ - if (SectionObject) - { - /* Map the System Dll */ - PspMapSystemDll(Process, NULL); - } + /* Check if we have a section object and map the system DLL */ + if (SectionObject) PspMapSystemDll(Process, NULL);
/* Create a handle for the Process */ CidEntry.Object = Process; CidEntry.GrantedAccess = 0; Process->UniqueProcessId = ExCreateHandle(PspCidTable, &CidEntry); - if(!Process->UniqueProcessId) - { - DPRINT1("Failed to create CID handle\n"); + if (!Process->UniqueProcessId) + { Status = STATUS_INSUFFICIENT_RESOURCES; goto CleanupWithRef; } @@ -566,11 +520,7 @@ if (Parent) { Status = MmCreatePeb(Process); - if (!NT_SUCCESS(Status)) - { - DPRINT("NtCreateProcess() Peb creation failed: Status %x\n",Status); - goto CleanupWithRef; - } + if (!NT_SUCCESS(Status)) goto CleanupWithRef; }
/* The process can now be activated */ @@ -587,6 +537,7 @@ 1, (PVOID*)&Process, &hProcess); + if (!NT_SUCCESS(Status)) goto Cleanup;
/* FIXME: Compute Quantum and Priority */
@@ -594,32 +545,34 @@ * FIXME: ObGetObjectSecurity(Process, &SecurityDescriptor) * SeAccessCheck */ - ObReferenceObject(Process); // <- Act as if we called ObGetObjectSecurity - - /* Check for success */ - if (NT_SUCCESS(Status)) - { - /* Set the Creation Time */ - KeQuerySystemTime(&Process->CreateTime); - - /* Protect against bad user-mode pointer */ - _SEH_TRY - { - /* Save the process handle */ - *ProcessHandle = hProcess; - } - _SEH_HANDLE - { - Status = _SEH_GetExceptionCode(); - } - _SEH_END; - } + + /* Sanity check */ + ASSERT(IsListEmpty(&Process->ThreadListHead)); + + /* Set the Creation Time */ + KeQuerySystemTime(&Process->CreateTime); + + /* Set the granted access */ + Process->GrantedAccess = PROCESS_ALL_ACCESS; + + /* Protect against bad user-mode pointer */ + _SEH_TRY + { + /* Save the process handle */ + *ProcessHandle = hProcess; + } + _SEH_HANDLE + { + /* Get the exception code */ + Status = _SEH_GetExceptionCode(); + } + _SEH_END;
CleanupWithRef: /* * Dereference the process. For failures, kills the process and does * cleanup present in PspDeleteProcess. For success, kills the extra - * reference added by ObGetObjectSecurity + * reference added by ObInsertObject. */ ObDereferenceObject(Process);
@@ -638,10 +591,11 @@ */ NTSTATUS NTAPI -PsCreateSystemProcess(PHANDLE ProcessHandle, - ACCESS_MASK DesiredAccess, - POBJECT_ATTRIBUTES ObjectAttributes) -{ +PsCreateSystemProcess(OUT PHANDLE ProcessHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes) +{ + /* Call the internal API */ return PspCreateProcess(ProcessHandle, DesiredAccess, ObjectAttributes, @@ -668,8 +622,8 @@ KeEnterCriticalRegion();
/* Get the CID Handle Entry */ - if ((CidEntry = ExMapHandleToPointer(PspCidTable, - ProcessId))) + CidEntry = ExMapHandleToPointer(PspCidTable, ProcessId); + if (CidEntry) { /* Get the Process */ FoundProcess = CidEntry->Object; @@ -677,7 +631,7 @@ /* Make sure it's really a process */ if (FoundProcess->Pcb.Header.Type == ProcessObject) { - /* Reference and return it */ + /* FIXME: Safe Reference and return it */ ObReferenceObject(FoundProcess); *Process = FoundProcess; Status = STATUS_SUCCESS; @@ -708,8 +662,8 @@ KeEnterCriticalRegion();
/* Get the CID Handle Entry */ - if ((CidEntry = ExMapHandleToPointer(PspCidTable, - Cid->UniqueThread))) + CidEntry = ExMapHandleToPointer(PspCidTable, Cid->UniqueThread); + if (CidEntry) { /* Get the Process */ FoundThread = CidEntry->Object; @@ -718,7 +672,7 @@ if ((FoundThread->Tcb.DispatcherHeader.Type == ThreadObject) && (FoundThread->Cid.UniqueProcess == Cid->UniqueProcess)) { - /* Reference and return it */ + /* FIXME: Safe Reference and return it */ ObReferenceObject(FoundThread); *Thread = FoundThread; Status = STATUS_SUCCESS; @@ -735,40 +689,20 @@ /* Unlock the Entry */ ExUnlockHandleTableEntry(PspCidTable, CidEntry); } - + /* Return to caller */ KeLeaveCriticalRegion(); return Status; }
/* - * FUNCTION: Returns a pointer to the current process - * - * @implemented - */ -PEPROCESS STDCALL -IoGetCurrentProcess(VOID) -{ - if (PsGetCurrentThread() == NULL || - PsGetCurrentThread()->Tcb.ApcState.Process == NULL) - { - return(PsInitialSystemProcess); - } - else - { - return(PEPROCESS)(PsGetCurrentThread()->Tcb.ApcState.Process); - } -} - -/* - * @implemented - */ -LARGE_INTEGER STDCALL + * @implemented + */ +LARGE_INTEGER +NTAPI PsGetProcessExitTime(VOID) { - LARGE_INTEGER Li; - Li.QuadPart = PsGetCurrentProcess()->ExitTime.QuadPart; - return Li; + return PsGetCurrentProcess()->ExitTime; }
/* @@ -920,16 +854,12 @@ return (HANDLE)Process->Session; }
-struct _W32THREAD* -STDCALL -PsGetWin32Thread(VOID) -{ - return(PsGetCurrentThread()->Tcb.Win32Thread); -} - +/* + * @implemented + */ struct _W32PROCESS* -STDCALL -PsGetWin32Process(VOID) +NTAPI +PsGetCurrentProcessWin32Process(VOID) { return (struct _W32PROCESS*)PsGetCurrentProcess()->Win32Process; } @@ -961,7 +891,7 @@ STDCALL PsIsProcessBeingDebugged(PEPROCESS Process) { - return FALSE; //Process->IsProcessBeingDebugged; + return Process->DebugPort != NULL; }
/* @@ -1037,27 +967,27 @@ { KPROCESSOR_MODE PreviousMode = ExGetPreviousMode(); NTSTATUS Status = STATUS_SUCCESS; - PAGED_CODE();
- /* Check parameters */ + /* Check if we came from user mode */ if(PreviousMode != KernelMode) { _SEH_TRY { + /* Probe process handle */ ProbeForWriteHandle(ProcessHandle); } _SEH_HANDLE { + /* Get exception code */ Status = _SEH_GetExceptionCode(); } _SEH_END; - - if(!NT_SUCCESS(Status)) return Status; + if (!NT_SUCCESS(Status)) return Status; }
/* Make sure there's a parent process */ - if(!ParentProcess) + if (!ParentProcess) { /* Can't create System Processes like this */ Status = STATUS_INVALID_PARAMETER; @@ -1087,12 +1017,12 @@ NTAPI NtCreateProcess(OUT PHANDLE ProcessHandle, IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, + IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, IN HANDLE ParentProcess, IN BOOLEAN InheritObjectTable, - IN HANDLE SectionHandle OPTIONAL, - IN HANDLE DebugPort OPTIONAL, - IN HANDLE ExceptionPort OPTIONAL) + IN HANDLE SectionHandle OPTIONAL, + IN HANDLE DebugPort OPTIONAL, + IN HANDLE ExceptionPort OPTIONAL) { ULONG Flags = 0;
@@ -1123,7 +1053,7 @@ IN POBJECT_ATTRIBUTES ObjectAttributes, IN PCLIENT_ID ClientId) { - KPROCESSOR_MODE PreviousMode; + KPROCESSOR_MODE PreviousMode = KeGetPreviousMode(); CLIENT_ID SafeClientId; ULONG Attributes = 0; HANDLE hProcess; @@ -1131,30 +1061,32 @@ PETHREAD Thread = NULL; PEPROCESS Process = NULL; NTSTATUS Status = STATUS_SUCCESS; - + ACCESS_STATE AccessState; + AUX_DATA AuxData; PAGED_CODE();
- PreviousMode = KeGetPreviousMode(); - - /* Probe the paraemeters */ - if(PreviousMode != KernelMode) - { + /* Check if we were called from user mode */ + if (PreviousMode != KernelMode) + { + /* Enter SEH for probing */ _SEH_TRY { + /* Probe the thread handle */ ProbeForWriteHandle(ProcessHandle);
- if(ClientId != NULL) + /* Check for a CID structure */ + if (ClientId) { - ProbeForRead(ClientId, - sizeof(CLIENT_ID), - sizeof(ULONG)); - + /* Probe and capture it */ + ProbeForRead(ClientId, sizeof(CLIENT_ID), sizeof(ULONG)); SafeClientId = *ClientId; ClientId = &SafeClientId; }
- /* just probe the object attributes structure, don't capture it - completely. This is done later if necessary */ + /* + * Just probe the object attributes structure, don't capture it + * completely. This is done later if necessary + */ ProbeForRead(ObjectAttributes, sizeof(OBJECT_ATTRIBUTES), sizeof(ULONG)); @@ -1163,22 +1095,47 @@ } _SEH_HANDLE { + /* Get the exception code */ Status = _SEH_GetExceptionCode(); } _SEH_END; - - if(!NT_SUCCESS(Status)) return Status; + if (!NT_SUCCESS(Status)) return Status; } else { + /* Otherwise just get the data directly */ HasObjectName = (ObjectAttributes->ObjectName != NULL); Attributes = ObjectAttributes->Attributes; }
- if (HasObjectName && ClientId != NULL) - { - /* can't pass both, n object name and a client id */ - return STATUS_INVALID_PARAMETER_MIX; + /* Can't pass both, fail */ + if ((HasObjectName) && (ClientId)) return STATUS_INVALID_PARAMETER_MIX; + + /* Create an access state */ + Status = SeCreateAccessState(&AccessState, + &AuxData, + DesiredAccess, + &PsProcessType->TypeInfo.GenericMapping); + if (!NT_SUCCESS(Status)) return Status; + + /* Check if this is a debugger */ + if (SeSinglePrivilegeCheck(SeDebugPrivilege, PreviousMode)) + { + /* Did he want full access? */ + if (AccessState.RemainingDesiredAccess & MAXIMUM_ALLOWED) + { + /* Give it to him */ + AccessState.PreviouslyGrantedAccess |= PROCESS_ALL_ACCESS; + } + else + { + /* Otherwise just give every other access he could want */ + AccessState.PreviouslyGrantedAccess |= + AccessState.RemainingDesiredAccess; + } + + /* The caller desires nothing else now */ + AccessState.RemainingDesiredAccess = 0; }
/* Open by name if one was given */ @@ -1188,25 +1145,21 @@ Status = ObOpenObjectByName(ObjectAttributes, PsProcessType, PreviousMode, - NULL, - DesiredAccess, + &AccessState, + 0, NULL, &hProcess);
- if (!NT_SUCCESS(Status)) - { - DPRINT1("Could not open object by name\n"); - } - } - else if (ClientId != NULL) + /* Get rid of the access state */ + SeDeleteAccessState(&AccessState); + } + else if (ClientId) { /* Open by Thread ID */ if (ClientId->UniqueThread) { /* Get the Process */ - Status = PsLookupProcessThreadByCid(ClientId, - &Process, - &Thread); + Status = PsLookupProcessThreadByCid(ClientId, &Process, &Thread); } else { @@ -1215,24 +1168,25 @@ &Process); }
- if(!NT_SUCCESS(Status)) - { - DPRINT1("Failure to find process\n"); + /* Check if we didn't find anything */ + if (!NT_SUCCESS(Status)) + { + /* Get rid of the access state and return */ + SeDeleteAccessState(&AccessState); return Status; }
/* Open the Process Object */ Status = ObOpenObjectByPointer(Process, Attributes, - NULL, - DesiredAccess, + &AccessState, + 0, PsProcessType, PreviousMode, &hProcess); - if(!NT_SUCCESS(Status)) - { - DPRINT1("Failure to open process\n"); - } + + /* Delete the access state */ + SeDeleteAccessState(&AccessState);
/* Dereference the thread if we used it */ if (Thread) ObDereferenceObject(Thread); @@ -1246,20 +1200,24 @@ return STATUS_INVALID_PARAMETER_MIX; }
- /* Write back the handle */ - if(NT_SUCCESS(Status)) - { + /* Check for success */ + if (NT_SUCCESS(Status)) + { + /* Use SEH for write back */ _SEH_TRY { + /* Write back the handle */ *ProcessHandle = hProcess; } _SEH_HANDLE { + /* Get the exception code */ Status = _SEH_GetExceptionCode(); } _SEH_END; }
+ /* Return status */ return Status; } /* EOF */
Modified: trunk/reactos/ntoskrnl/ps/thread.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ps/thread.c?rev=23... ============================================================================== --- trunk/reactos/ntoskrnl/ps/thread.c (original) +++ trunk/reactos/ntoskrnl/ps/thread.c Thu Jul 20 18:53:47 2006 @@ -618,6 +618,16 @@ /* * @implemented */ +struct _W32THREAD* +NTAPI +PsGetCurrentThreadWin32Thread(VOID) +{ + return PsGetCurrentThread()->Tcb.Win32Thread; +} + +/* + * @implemented + */ VOID NTAPI PsSetThreadWin32Thread(IN PETHREAD Thread,
Modified: trunk/reactos/subsystems/win32/win32k/eng/driverobj.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/eng... ============================================================================== --- trunk/reactos/subsystems/win32/win32k/eng/driverobj.c (original) +++ trunk/reactos/subsystems/win32/win32k/eng/driverobj.c Thu Jul 20 18:53:47 2006 @@ -44,16 +44,16 @@ { PDRIVERGDI DrvObjInt;
- IntEngLockProcessDriverObjs(PsGetWin32Process()); + IntEngLockProcessDriverObjs(PsGetCurrentProcessWin32Process()); while (!IsListEmpty(&Win32Process->DriverObjListHead)) { DrvObjInt = CONTAINING_RECORD(Win32Process->DriverObjListHead.Flink, DRIVERGDI, ListEntry); - IntEngUnLockProcessDriverObjs(PsGetWin32Process()); + IntEngUnLockProcessDriverObjs(PsGetCurrentProcessWin32Process()); EngDeleteDriverObj((HDRVOBJ)(&DrvObjInt->DriverObj), TRUE, FALSE); - IntEngLockProcessDriverObjs(PsGetWin32Process()); + IntEngLockProcessDriverObjs(PsGetCurrentProcessWin32Process()); } - IntEngUnLockProcessDriverObjs(PsGetWin32Process()); + IntEngUnLockProcessDriverObjs(PsGetCurrentProcessWin32Process()); }
@@ -88,9 +88,9 @@
/* fill internal object */ ExInitializeFastMutex(&DrvObjInt->Lock); - IntEngLockProcessDriverObjs(PsGetWin32Process()); - InsertTailList(&PsGetWin32Process()->DriverObjListHead, &DrvObjInt->ListEntry); - IntEngUnLockProcessDriverObjs(PsGetWin32Process()); + IntEngLockProcessDriverObjs(PsGetCurrentProcessWin32Process()); + InsertTailList(&PsGetCurrentProcessWin32Process()->DriverObjListHead, &DrvObjInt->ListEntry); + IntEngUnLockProcessDriverObjs(PsGetCurrentProcessWin32Process());
return (HDRVOBJ)DrvObjUser; } @@ -129,9 +129,9 @@ }
/* Free the DRIVEROBJ */ - IntEngLockProcessDriverObjs(PsGetWin32Process()); + IntEngLockProcessDriverObjs(PsGetCurrentProcessWin32Process()); RemoveEntryList(&DrvObjInt->ListEntry); - IntEngUnLockProcessDriverObjs(PsGetWin32Process()); + IntEngUnLockProcessDriverObjs(PsGetCurrentProcessWin32Process()); EngFreeMem(DrvObjInt);
return TRUE;
Modified: trunk/reactos/subsystems/win32/win32k/include/desktop.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/inc... ============================================================================== --- trunk/reactos/subsystems/win32/win32k/include/desktop.h (original) +++ trunk/reactos/subsystems/win32/win32k/include/desktop.h Thu Jul 20 18:53:47 2006 @@ -200,10 +200,10 @@ HANDLE hDesktopHeap; ULONG_PTR Delta = 0;
- ASSERT(PsGetWin32Thread()->Desktop != NULL); - hDesktopHeap = PsGetWin32Thread()->Desktop->hDesktopHeap; - - Mapping = PsGetWin32Process()->HeapMappings.Next; + ASSERT(PsGetCurrentThreadWin32Thread()->Desktop != NULL); + hDesktopHeap = PsGetCurrentThreadWin32Thread()->Desktop->hDesktopHeap; + + Mapping = PsGetCurrentProcessWin32Process()->HeapMappings.Next; while (Mapping != NULL) { if (Mapping->UserMapping == (PVOID)hDesktopHeap) @@ -224,7 +224,7 @@ { PW32HEAP_USER_MAPPING Mapping;
- Mapping = PsGetWin32Process()->HeapMappings.Next; + Mapping = PsGetCurrentProcessWin32Process()->HeapMappings.Next; while (Mapping != NULL) { if (Mapping->KernelMapping == (PVOID)Desktop->hKernelHeap)
Modified: trunk/reactos/subsystems/win32/win32k/include/object.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/inc... ============================================================================== --- trunk/reactos/subsystems/win32/win32k/include/object.h (original) +++ trunk/reactos/subsystems/win32/win32k/include/object.h Thu Jul 20 18:53:47 2006 @@ -80,7 +80,7 @@ PUSER_REFERENCE_ENTRY ref; \ \ ASSERT(_obj_); \ - t = PsGetWin32Thread(); \ + t = PsGetCurrentThreadWin32Thread(); \ ASSERT(t); \ e = t->ReferencesList.Next; \ ASSERT(e); \ @@ -95,7 +95,7 @@ PW32THREAD t; \ \ ASSERT(_obj_); \ - t = PsGetWin32Thread(); \ + t = PsGetCurrentThreadWin32Thread(); \ ASSERT(t); \ ASSERT(_ref_); \ (_ref_)->obj = _obj_; \ @@ -113,7 +113,7 @@ PUSER_REFERENCE_ENTRY ref; \ \ ASSERT(_obj_); \ - t = PsGetWin32Thread(); \ + t = PsGetCurrentThreadWin32Thread(); \ ASSERT(t); \ e = PopEntryList(&t->ReferencesList); \ ASSERT(e); \
Modified: trunk/reactos/subsystems/win32/win32k/include/userfuncs.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/inc... ============================================================================== --- trunk/reactos/subsystems/win32/win32k/include/userfuncs.h (original) +++ trunk/reactos/subsystems/win32/win32k/include/userfuncs.h Thu Jul 20 18:53:47 2006 @@ -43,7 +43,7 @@ ASSERT(FALSE); \ } \ \ - e = PsGetWin32Thread()->ReferencesList.Next; \ + e = PsGetCurrentThreadWin32Thread()->ReferencesList.Next; \ while (e) \ { \ PUSER_REFERENCE_ENTRY ref = CONTAINING_RECORD(e, USER_REFERENCE_ENTRY, Entry); \
Modified: trunk/reactos/subsystems/win32/win32k/misc/usrheap.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/mis... ============================================================================== --- trunk/reactos/subsystems/win32/win32k/misc/usrheap.c (original) +++ trunk/reactos/subsystems/win32/win32k/misc/usrheap.c Thu Jul 20 18:53:47 2006 @@ -34,7 +34,7 @@ NTSTATUS Status; SIZE_T Delta = (SIZE_T)((ULONG_PTR)(*CommitAddress) - (ULONG_PTR)Base);
- W32Process = PsGetWin32Process(); + W32Process = PsGetCurrentProcessWin32Process();
if (W32Process != NULL) {
Modified: trunk/reactos/subsystems/win32/win32k/ntuser/callback.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ntu... ============================================================================== --- trunk/reactos/subsystems/win32/win32k/ntuser/callback.c (original) +++ trunk/reactos/subsystems/win32/win32k/ntuser/callback.c Thu Jul 20 18:53:47 2006 @@ -59,7 +59,7 @@ return NULL; }
- W32Thread = PsGetWin32Thread(); + W32Thread = PsGetCurrentThreadWin32Thread(); ASSERT(W32Thread);
/* insert the callback memory into the thread's callback list */ @@ -79,7 +79,7 @@
Mem = ((PINT_CALLBACK_HEADER)Data - 1);
- W32Thread = PsGetWin32Thread(); + W32Thread = PsGetCurrentThreadWin32Thread(); ASSERT(W32Thread);
/* remove the memory block from the thread's callback list */
Modified: trunk/reactos/subsystems/win32/win32k/ntuser/caret.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ntu... ============================================================================== --- trunk/reactos/subsystems/win32/win32k/ntuser/caret.c (original) +++ trunk/reactos/subsystems/win32/win32k/ntuser/caret.c Thu Jul 20 18:53:47 2006 @@ -61,7 +61,7 @@ IntSetCaretBlinkTime(UINT uMSeconds) { /* Don't save the new value to the registry! */ - PWINSTATION_OBJECT WinStaObject = PsGetWin32Thread()->Desktop->WindowStation; + PWINSTATION_OBJECT WinStaObject = PsGetCurrentThreadWin32Thread()->Desktop->WindowStation;
/* windows doesn't do this check */ if((uMSeconds < MIN_CARETBLINKRATE) || (uMSeconds > MAX_CARETBLINKRATE)) @@ -149,7 +149,7 @@ PWINSTATION_OBJECT WinStaObject; UINT Ret;
- WinStaObject = PsGetWin32Thread()->Desktop->WindowStation; + WinStaObject = PsGetCurrentThreadWin32Thread()->Desktop->WindowStation;
Ret = WinStaObject->CaretBlinkRate; if(!Ret) @@ -172,7 +172,7 @@ co_IntSetCaretPos(int X, int Y) { PUSER_MESSAGE_QUEUE ThreadQueue; - ThreadQueue = (PUSER_MESSAGE_QUEUE)PsGetWin32Thread()->MessageQueue; + ThreadQueue = (PUSER_MESSAGE_QUEUE)PsGetCurrentThreadWin32Thread()->MessageQueue;
if(ThreadQueue->CaretInfo->hWnd) { @@ -195,7 +195,7 @@ IntSwitchCaretShowing(PVOID Info) { PUSER_MESSAGE_QUEUE ThreadQueue; - ThreadQueue = (PUSER_MESSAGE_QUEUE)PsGetWin32Thread()->MessageQueue; + ThreadQueue = (PUSER_MESSAGE_QUEUE)PsGetCurrentThreadWin32Thread()->MessageQueue;
if(ThreadQueue->CaretInfo->hWnd) { @@ -213,7 +213,7 @@ co_IntDrawCaret(HWND hWnd) { PUSER_MESSAGE_QUEUE ThreadQueue; - ThreadQueue = (PUSER_MESSAGE_QUEUE)PsGetWin32Thread()->MessageQueue; + ThreadQueue = (PUSER_MESSAGE_QUEUE)PsGetCurrentThreadWin32Thread()->MessageQueue;
if(ThreadQueue->CaretInfo->hWnd && ThreadQueue->CaretInfo->Visible && ThreadQueue->CaretInfo->Showing) @@ -238,7 +238,7 @@ return FALSE; }
- ThreadQueue = (PUSER_MESSAGE_QUEUE)PsGetWin32Thread()->MessageQueue; + ThreadQueue = (PUSER_MESSAGE_QUEUE)PsGetCurrentThreadWin32Thread()->MessageQueue;
if(Window && ThreadQueue->CaretInfo->hWnd != Window->hSelf) { @@ -271,7 +271,7 @@ return FALSE; }
- ThreadQueue = (PUSER_MESSAGE_QUEUE)PsGetWin32Thread()->MessageQueue; + ThreadQueue = (PUSER_MESSAGE_QUEUE)PsGetCurrentThreadWin32Thread()->MessageQueue;
if(Window && ThreadQueue->CaretInfo->hWnd != Window->hSelf) { @@ -321,7 +321,7 @@ RETURN(FALSE); }
- ThreadQueue = (PUSER_MESSAGE_QUEUE)PsGetWin32Thread()->MessageQueue; + ThreadQueue = (PUSER_MESSAGE_QUEUE)PsGetCurrentThreadWin32Thread()->MessageQueue;
if (ThreadQueue->CaretInfo->Visible) { @@ -381,7 +381,7 @@ DPRINT("Enter NtUserGetCaretPos\n"); UserEnterShared();
- ThreadQueue = (PUSER_MESSAGE_QUEUE)PsGetWin32Thread()->MessageQueue; + ThreadQueue = (PUSER_MESSAGE_QUEUE)PsGetCurrentThreadWin32Thread()->MessageQueue;
Status = MmCopyToCaller(lpPoint, &(ThreadQueue->CaretInfo->Pos), sizeof(POINT)); if(!NT_SUCCESS(Status))
Modified: trunk/reactos/subsystems/win32/win32k/ntuser/clipboard.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ntu... ============================================================================== --- trunk/reactos/subsystems/win32/win32k/ntuser/clipboard.c (original) +++ trunk/reactos/subsystems/win32/win32k/ntuser/clipboard.c Thu Jul 20 18:53:47 2006 @@ -30,7 +30,7 @@ #include <debug.h>
#define CHECK_LOCK \ - if (ClipboardThread && ClipboardThread != PsGetWin32Thread()) \ + if (ClipboardThread && ClipboardThread != PsGetCurrentThreadWin32Thread()) \ { \ SetLastWin32Error(ERROR_LOCKED); \ return FALSE; \ @@ -68,7 +68,7 @@ CHECK_LOCK
tempClipboardWindow = hWnd; - ClipboardThread = PsGetWin32Thread(); + ClipboardThread = PsGetCurrentThreadWin32Thread(); return TRUE; }
Modified: trunk/reactos/subsystems/win32/win32k/ntuser/cursoricon.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ntu... ============================================================================== --- trunk/reactos/subsystems/win32/win32k/ntuser/cursoricon.c (original) +++ trunk/reactos/subsystems/win32/win32k/ntuser/cursoricon.c Thu Jul 20 18:53:47 2006 @@ -334,7 +334,7 @@ PW32PROCESS Win32Process; PCURICON_PROCESS Current;
- Win32Process = PsGetWin32Process(); + Win32Process = PsGetCurrentProcessWin32Process();
LIST_FOR_EACH(Current, &CurIcon->ProcessList, CURICON_PROCESS, ListEntry) { @@ -430,7 +430,7 @@ HBITMAP bmpMask, bmpColor; BOOLEAN Ret; PCURICON_PROCESS Current = NULL; - PW32PROCESS W32Process = PsGetWin32Process(); + PW32PROCESS W32Process = PsGetCurrentProcessWin32Process();
/* Private objects can only be destroyed by their own process */ if (NULL == CurIcon->hModule)
Modified: trunk/reactos/subsystems/win32/win32k/ntuser/desktop.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ntu... ============================================================================== --- trunk/reactos/subsystems/win32/win32k/ntuser/desktop.c (original) +++ trunk/reactos/subsystems/win32/win32k/ntuser/desktop.c Thu Jul 20 18:53:47 2006 @@ -572,7 +572,7 @@
HWND FASTCALL IntGetCurrentThreadDesktopWindow(VOID) { - PDESKTOP_OBJECT pdo = PsGetWin32Thread()->Desktop; + PDESKTOP_OBJECT pdo = PsGetCurrentThreadWin32Thread()->Desktop; if (NULL == pdo) { DPRINT1("Thread doesn't have a desktop\n"); @@ -753,7 +753,7 @@ */ BOOL IntRegisterShellHookWindow(HWND hWnd) { - PDESKTOP_OBJECT Desktop = PsGetWin32Thread()->Desktop; + PDESKTOP_OBJECT Desktop = PsGetCurrentThreadWin32Thread()->Desktop; PSHELL_HOOK_WINDOW Entry;
DPRINT("IntRegisterShellHookWindow\n"); @@ -784,7 +784,7 @@ */ BOOL IntDeRegisterShellHookWindow(HWND hWnd) { - PDESKTOP_OBJECT Desktop = PsGetWin32Thread()->Desktop; + PDESKTOP_OBJECT Desktop = PsGetCurrentThreadWin32Thread()->Desktop; PSHELL_HOOK_WINDOW Current;
LIST_FOR_EACH(Current, &Desktop->ShellHookWindows, SHELL_HOOK_WINDOW, ListEntry) @@ -1326,7 +1326,7 @@ COLORREF color_old; UINT align_old; int mode_old; - PWINSTATION_OBJECT WinSta = PsGetWin32Thread()->Desktop->WindowStation; + PWINSTATION_OBJECT WinSta = PsGetCurrentThreadWin32Thread()->Desktop->WindowStation; DECLARE_RETURN(BOOL);
UserEnterExclusive(); @@ -1557,7 +1557,7 @@ * is the logon application itself */ if((DesktopObject->WindowStation->Flags & WSS_LOCKED) && - LogonProcess != NULL && LogonProcess != PsGetWin32Process()) + LogonProcess != NULL && LogonProcess != PsGetCurrentProcessWin32Process()) { ObDereferenceObject(DesktopObject); DPRINT1("Switching desktop 0x%x denied because the work station is locked!\n", hDesktop); @@ -1691,7 +1691,7 @@ IntUnmapDesktopView(IN PDESKTOP_OBJECT DesktopObject) { PW32THREADINFO ti; - PW32HEAP_USER_MAPPING HeapMapping, *PrevLink = &PsGetWin32Process()->HeapMappings.Next; + PW32HEAP_USER_MAPPING HeapMapping, *PrevLink = &PsGetCurrentProcessWin32Process()->HeapMappings.Next; NTSTATUS Status = STATUS_SUCCESS;
/* unmap if we're the last thread using the desktop */ @@ -1735,7 +1735,7 @@ IntMapDesktopView(IN PDESKTOP_OBJECT DesktopObject) { PW32THREADINFO ti; - PW32HEAP_USER_MAPPING HeapMapping, *PrevLink = &PsGetWin32Process()->HeapMappings.Next; + PW32HEAP_USER_MAPPING HeapMapping, *PrevLink = &PsGetCurrentProcessWin32Process()->HeapMappings.Next; PVOID UserBase = NULL; ULONG ViewSize = 0; LARGE_INTEGER Offset; @@ -1813,7 +1813,7 @@ BOOL MapHeap;
MapHeap = (PsGetCurrentProcess() != PsInitialSystemProcess); - W32Thread = PsGetWin32Thread(); + W32Thread = PsGetCurrentThreadWin32Thread();
if (W32Thread->Desktop != DesktopObject) {
Modified: trunk/reactos/subsystems/win32/win32k/ntuser/focus.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ntu... ============================================================================== --- trunk/reactos/subsystems/win32/win32k/ntuser/focus.c (original) +++ trunk/reactos/subsystems/win32/win32k/ntuser/focus.c Thu Jul 20 18:53:47 2006 @@ -42,7 +42,7 @@ IntGetThreadFocusWindow() { PUSER_MESSAGE_QUEUE ThreadQueue; - ThreadQueue = (PUSER_MESSAGE_QUEUE)PsGetWin32Thread()->MessageQueue; + ThreadQueue = (PUSER_MESSAGE_QUEUE)PsGetCurrentThreadWin32Thread()->MessageQueue; return ThreadQueue != NULL ? ThreadQueue->FocusWindow : 0; }
@@ -267,7 +267,7 @@ if (Window) ASSERT_REFS_CO(Window);
- ThreadQueue = (PUSER_MESSAGE_QUEUE)PsGetWin32Thread()->MessageQueue; + ThreadQueue = (PUSER_MESSAGE_QUEUE)PsGetCurrentThreadWin32Thread()->MessageQueue; ASSERT(ThreadQueue != 0);
if (Window != 0) @@ -307,7 +307,7 @@
ASSERT_REFS_CO(Window);
- ThreadQueue = (PUSER_MESSAGE_QUEUE)PsGetWin32Thread()->MessageQueue; + ThreadQueue = (PUSER_MESSAGE_QUEUE)PsGetCurrentThreadWin32Thread()->MessageQueue; ASSERT(ThreadQueue != 0);
hWndPrev = ThreadQueue->FocusWindow; @@ -361,7 +361,7 @@ HWND FASTCALL UserGetActiveWindow() { PUSER_MESSAGE_QUEUE ThreadQueue; - ThreadQueue = (PUSER_MESSAGE_QUEUE)PsGetWin32Thread()->MessageQueue; + ThreadQueue = (PUSER_MESSAGE_QUEUE)PsGetCurrentThreadWin32Thread()->MessageQueue; return( ThreadQueue ? ThreadQueue->ActiveWindow : 0); }
@@ -407,7 +407,7 @@
DPRINT("(%wZ)\n", &Window->WindowName);
- ThreadQueue = (PUSER_MESSAGE_QUEUE)PsGetWin32Thread()->MessageQueue; + ThreadQueue = (PUSER_MESSAGE_QUEUE)PsGetCurrentThreadWin32Thread()->MessageQueue;
if (Window->MessageQueue != ThreadQueue) { @@ -444,7 +444,7 @@ DPRINT("Enter NtUserGetCapture\n"); UserEnterShared();
- ThreadQueue = (PUSER_MESSAGE_QUEUE)PsGetWin32Thread()->MessageQueue; + ThreadQueue = (PUSER_MESSAGE_QUEUE)PsGetCurrentThreadWin32Thread()->MessageQueue; RETURN( ThreadQueue ? ThreadQueue->CaptureWindow : 0);
CLEANUP: @@ -467,7 +467,7 @@ DPRINT("Enter NtUserSetCapture(%x)\n", hWnd); UserEnterExclusive();
- ThreadQueue = (PUSER_MESSAGE_QUEUE)PsGetWin32Thread()->MessageQueue; + ThreadQueue = (PUSER_MESSAGE_QUEUE)PsGetCurrentThreadWin32Thread()->MessageQueue;
if((Window = UserGetWindowObject(hWnd))) { @@ -510,7 +510,7 @@
ASSERT_REFS_CO(Window);
- ThreadQueue = (PUSER_MESSAGE_QUEUE)PsGetWin32Thread()->MessageQueue; + ThreadQueue = (PUSER_MESSAGE_QUEUE)PsGetCurrentThreadWin32Thread()->MessageQueue;
if (Window->Style & (WS_MINIMIZE | WS_DISABLED)) {
Modified: trunk/reactos/subsystems/win32/win32k/ntuser/guicheck.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ntu... ============================================================================== --- trunk/reactos/subsystems/win32/win32k/ntuser/guicheck.c (original) +++ trunk/reactos/subsystems/win32/win32k/ntuser/guicheck.c Thu Jul 20 18:53:47 2006 @@ -79,7 +79,7 @@ { PW32PROCESS W32Data;
- W32Data = PsGetWin32Process(); + W32Data = PsGetCurrentProcessWin32Process(); if (Create) { if (! (W32Data->Flags & W32PF_CREATEDWINORDC) && ! (W32Data->Flags & W32PF_MANUALGUICHECK)) @@ -106,7 +106,7 @@ DPRINT("Enter NtUserManualGuiCheck\n"); UserEnterExclusive();
- W32Data = PsGetWin32Process(); + W32Data = PsGetCurrentProcessWin32Process(); if (0 == Check) { W32Data->Flags |= W32PF_MANUALGUICHECK;
Modified: trunk/reactos/subsystems/win32/win32k/ntuser/hook.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ntu... ============================================================================== --- trunk/reactos/subsystems/win32/win32k/ntuser/hook.c (original) +++ trunk/reactos/subsystems/win32/win32k/ntuser/hook.c Thu Jul 20 18:53:47 2006 @@ -290,7 +290,7 @@
ASSERT(WH_MINHOOK <= HookId && HookId <= WH_MAXHOOK);
- Win32Thread = PsGetWin32Thread(); + Win32Thread = PsGetCurrentThreadWin32Thread(); if (NULL == Win32Thread) { Table = NULL; @@ -343,7 +343,7 @@ } else { - IntReleaseHookChain(MsqGetHooks(PsGetWin32Thread()->MessageQueue), HookId, WinStaObj); + IntReleaseHookChain(MsqGetHooks(PsGetCurrentThreadWin32Thread()->MessageQueue), HookId, WinStaObj); IntReleaseHookChain(GlobalHooks, HookId, WinStaObj); ObDereferenceObject(WinStaObj); }
Modified: trunk/reactos/subsystems/win32/win32k/ntuser/input.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ntu... ============================================================================== --- trunk/reactos/subsystems/win32/win32k/ntuser/input.c (original) +++ trunk/reactos/subsystems/win32/win32k/ntuser/input.c Thu Jul 20 18:53:47 2006 @@ -1003,7 +1003,7 @@ DPRINT("Enter NtUserBlockInput\n"); UserEnterExclusive();
- RETURN( IntBlockInput(PsGetWin32Thread(), BlockIt)); + RETURN( IntBlockInput(PsGetCurrentThreadWin32Thread(), BlockIt));
CLEANUP: DPRINT("Leave NtUserBlockInput, ret=%i\n",_ret_); @@ -1062,7 +1062,7 @@ ASSERT(mi); #if 0
- WinSta = PsGetWin32Process()->WindowStation; + WinSta = PsGetCurrentProcessWin32Process()->WindowStation; #else /* FIXME - ugly hack but as long as we're using this dumb callback from the mouse class driver, we can't access the window station from the calling @@ -1288,7 +1288,7 @@ DPRINT("Enter NtUserSendInput\n"); UserEnterExclusive();
- W32Thread = PsGetWin32Thread(); + W32Thread = PsGetCurrentThreadWin32Thread(); ASSERT(W32Thread);
if(!W32Thread->Desktop)
Modified: trunk/reactos/subsystems/win32/win32k/ntuser/keyboard.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ntu... ============================================================================== --- trunk/reactos/subsystems/win32/win32k/ntuser/keyboard.c (original) +++ trunk/reactos/subsystems/win32/win32k/ntuser/keyboard.c Thu Jul 20 18:53:47 2006 @@ -430,8 +430,8 @@ pwszBuff, cchBuff, wFlags, - PsGetWin32Thread() ? - PsGetWin32Thread()->KeyboardLayout : 0 ); + PsGetCurrentThreadWin32Thread() ? + PsGetCurrentThreadWin32Thread()->KeyboardLayout : 0 ); }
return ToUnicodeResult; @@ -716,7 +716,7 @@ DWORD ScanCode = 0;
- keyLayout = PsGetWin32Thread()->KeyboardLayout; + keyLayout = PsGetCurrentThreadWin32Thread()->KeyboardLayout; if( !keyLayout ) return FALSE;
@@ -726,7 +726,7 @@ ScanCode = (lpMsg->lParam >> 16) & 0xff;
/* All messages have to contain the cursor point. */ - IntGetCursorLocation(PsGetWin32Thread()->Desktop->WindowStation, + IntGetCursorLocation(PsGetCurrentThreadWin32Thread()->Desktop->WindowStation, &NewMsg.pt);
UState = ToUnicodeInner(lpMsg->wParam, HIWORD(lpMsg->lParam) & 0xff, @@ -763,14 +763,14 @@ NewMsg.wParam = dead_char; NewMsg.lParam = lpMsg->lParam; dead_char = 0; - MsqPostMessage(PsGetWin32Thread()->MessageQueue, &NewMsg, FALSE, QS_KEY); + MsqPostMessage(PsGetCurrentThreadWin32Thread()->MessageQueue, &NewMsg, FALSE, QS_KEY); }
NewMsg.hwnd = lpMsg->hwnd; NewMsg.wParam = wp[0]; NewMsg.lParam = lpMsg->lParam; DPRINT( "CHAR='%c' %04x %08x\n", wp[0], wp[0], lpMsg->lParam ); - MsqPostMessage(PsGetWin32Thread()->MessageQueue, &NewMsg, FALSE, QS_KEY); + MsqPostMessage(PsGetCurrentThreadWin32Thread()->MessageQueue, &NewMsg, FALSE, QS_KEY); Result = TRUE; } else if (UState == -1) @@ -781,7 +781,7 @@ NewMsg.wParam = wp[0]; NewMsg.lParam = lpMsg->lParam; dead_char = wp[0]; - MsqPostMessage(PsGetWin32Thread()->MessageQueue, &NewMsg, FALSE, QS_KEY); + MsqPostMessage(PsGetCurrentThreadWin32Thread()->MessageQueue, &NewMsg, FALSE, QS_KEY); Result = TRUE; }
@@ -957,7 +957,7 @@ DPRINT("Enter NtUserMapVirtualKeyEx\n"); UserEnterExclusive();
- keyLayout = PsGetWin32Thread() ? PsGetWin32Thread()->KeyboardLayout : 0; + keyLayout = PsGetCurrentThreadWin32Thread() ? PsGetCurrentThreadWin32Thread()->KeyboardLayout : 0;
if( !keyLayout ) RETURN(0); @@ -1049,8 +1049,8 @@ DPRINT("Enter NtUserGetKeyNameText\n"); UserEnterShared();
- keyLayout = PsGetWin32Thread() ? - PsGetWin32Thread()->KeyboardLayout : 0; + keyLayout = PsGetCurrentThreadWin32Thread() ? + PsGetCurrentThreadWin32Thread()->KeyboardLayout : 0;
if( !keyLayout || nSize < 1 ) RETURN(0); @@ -1275,7 +1275,7 @@ PKBDTABLES layout;
if (!dwThreadId) - W32Thread = PsGetWin32Thread(); + W32Thread = PsGetCurrentThreadWin32Thread(); else { Status = PsLookupThreadByThreadId((HANDLE)dwThreadId, &Thread);//fixme: deref thread
Modified: trunk/reactos/subsystems/win32/win32k/ntuser/menu.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ntu... ============================================================================== --- trunk/reactos/subsystems/win32/win32k/ntuser/menu.c (original) +++ trunk/reactos/subsystems/win32/win32k/ntuser/menu.c Thu Jul 20 18:53:47 2006 @@ -352,7 +352,7 @@ Menu->MenuItemList = NULL;
/* Insert menu item into process menu handle list */ - InsertTailList(&PsGetWin32Process()->MenuListHead, &Menu->ListEntry); + InsertTailList(&PsGetCurrentProcessWin32Process()->MenuListHead, &Menu->ListEntry);
return Menu; } @@ -456,7 +456,7 @@ Menu->MenuItemList = NULL;
/* Insert menu item into process menu handle list */ - InsertTailList(&PsGetWin32Process()->MenuListHead, &Menu->ListEntry); + InsertTailList(&PsGetCurrentProcessWin32Process()->MenuListHead, &Menu->ListEntry);
IntCloneMenuItems(Menu, Source);
Modified: trunk/reactos/subsystems/win32/win32k/ntuser/message.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ntu... ============================================================================== --- trunk/reactos/subsystems/win32/win32k/ntuser/message.c (original) +++ trunk/reactos/subsystems/win32/win32k/ntuser/message.c Thu Jul 20 18:53:47 2006 @@ -663,7 +663,7 @@ /* The queues and order in which they are checked are documented in the MSDN article on GetMessage() */
- ThreadQueue = (PUSER_MESSAGE_QUEUE)PsGetWin32Thread()->MessageQueue; + ThreadQueue = (PUSER_MESSAGE_QUEUE)PsGetCurrentThreadWin32Thread()->MessageQueue;
/* Inspect RemoveMsg flags */ /* FIXME: The only flag we process is PM_REMOVE - processing of others must still be implemented */ @@ -739,7 +739,7 @@ ;
/* Check for paint messages. */ - if (IntGetPaintMessage(hWnd, MsgFilterMin, MsgFilterMax, PsGetWin32Thread(), &Msg->Msg, RemoveMessages)) + if (IntGetPaintMessage(hWnd, MsgFilterMin, MsgFilterMax, PsGetCurrentThreadWin32Thread(), &Msg->Msg, RemoveMessages)) { Msg->FreeLParam = FALSE; return TRUE; @@ -922,7 +922,7 @@ NTSTATUS Status; USER_MESSAGE Msg;
- ThreadQueue = (PUSER_MESSAGE_QUEUE)PsGetWin32Thread()->MessageQueue; + ThreadQueue = (PUSER_MESSAGE_QUEUE)PsGetCurrentThreadWin32Thread()->MessageQueue;
do { @@ -1176,7 +1176,7 @@
if (WM_QUIT == Msg) { - MsqPostQuitMessage(PsGetWin32Thread()->MessageQueue, wParam); + MsqPostQuitMessage(PsGetCurrentThreadWin32Thread()->MessageQueue, wParam); } else if (Wnd == HWND_BROADCAST) { @@ -1221,7 +1221,7 @@ SetLastWin32Error(ERROR_INVALID_PARAMETER); return FALSE; } - IntGetCursorLocation(PsGetWin32Thread()->Desktop->WindowStation, + IntGetCursorLocation(PsGetCurrentThreadWin32Thread()->Desktop->WindowStation, &KernelModeMsg.pt); KeQueryTickCount(&LargeTickCount); KernelModeMsg.time = LargeTickCount.u.LowPart; @@ -1362,7 +1362,7 @@
UserRefObjectCo(Window, &Ref);
- Win32Thread = PsGetWin32Thread(); + Win32Thread = PsGetCurrentThreadWin32Thread();
if (NULL != Win32Thread && Window->MessageQueue == Win32Thread->MessageQueue) @@ -1507,7 +1507,7 @@ return 0; }
- if(Window->MessageQueue != PsGetWin32Thread()->MessageQueue) + if(Window->MessageQueue != PsGetCurrentThreadWin32Thread()->MessageQueue) { Result = UserPostMessage(hWnd, Msg, wParam, lParam); } @@ -1556,8 +1556,8 @@ /* FIXME: Check for an exiting window. */
/* See if the current thread can handle the message */ - if (HWND_BROADCAST != hWnd && NULL != PsGetWin32Thread() && - Window->MessageQueue == PsGetWin32Thread()->MessageQueue) + if (HWND_BROADCAST != hWnd && NULL != PsGetCurrentThreadWin32Thread() && + Window->MessageQueue == PsGetCurrentThreadWin32Thread()->MessageQueue) { /* Gather the information usermode needs to call the window proc directly */ Info.HandledByKernel = FALSE; @@ -1737,7 +1737,7 @@ DPRINT("Enter NtUserGetQueueStatus\n"); UserEnterExclusive();
- Queue = PsGetWin32Thread()->MessageQueue; + Queue = PsGetCurrentThreadWin32Thread()->MessageQueue;
Result = MAKELONG(Queue->QueueBits, Queue->ChangedBits); if (ClearChanges)
Modified: trunk/reactos/subsystems/win32/win32k/ntuser/misc.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ntu... ============================================================================== --- trunk/reactos/subsystems/win32/win32k/ntuser/misc.c (original) +++ trunk/reactos/subsystems/win32/win32k/ntuser/misc.c Thu Jul 20 18:53:47 2006 @@ -23,7 +23,7 @@ if( !pmPrimitiveMessageQueue ) { PW32THREAD pThread; - pThread = PsGetWin32Thread(); + pThread = PsGetCurrentThreadWin32Thread(); if( pThread && pThread->MessageQueue ) { pmPrimitiveMessageQueue = pThread->MessageQueue; @@ -182,7 +182,7 @@
if (Routine == ONEPARAM_ROUTINE_SHOWCURSOR) { - PWINSTATION_OBJECT WinSta = PsGetWin32Thread()->Desktop->WindowStation; + PWINSTATION_OBJECT WinSta = PsGetCurrentThreadWin32Thread()->Desktop->WindowStation; PSYSTEM_CURSORINFO CurInfo;
HDC Screen; @@ -416,7 +416,7 @@ case ONEPARAM_ROUTINE_ENABLEPROCWNDGHSTING: { BOOL Enable; - PW32PROCESS Process = PsGetWin32Process(); + PW32PROCESS Process = PsGetCurrentProcessWin32Process();
if(Process != NULL) { @@ -1244,7 +1244,7 @@ case SPI_SETWORKAREA: { RECT *rc; - PDESKTOP_OBJECT Desktop = PsGetWin32Thread()->Desktop; + PDESKTOP_OBJECT Desktop = PsGetCurrentThreadWin32Thread()->Desktop;
if(!Desktop) { @@ -1260,7 +1260,7 @@ } case SPI_GETWORKAREA: { - PDESKTOP_OBJECT Desktop = PsGetWin32Thread()->Desktop; + PDESKTOP_OBJECT Desktop = PsGetCurrentThreadWin32Thread()->Desktop;
if(!Desktop) { @@ -1898,7 +1898,7 @@ GetW32ProcessInfo(VOID) { PW32PROCESSINFO pi; - PW32PROCESS W32Process = PsGetWin32Process(); + PW32PROCESS W32Process = PsGetCurrentProcessWin32Process();
if (W32Process == NULL) { @@ -1938,7 +1938,7 @@ { PTEB Teb; PW32THREADINFO ti; - PW32THREAD W32Thread = PsGetWin32Thread(); + PW32THREAD W32Thread = PsGetCurrentThreadWin32Thread();
if (W32Thread == NULL) {
Modified: trunk/reactos/subsystems/win32/win32k/ntuser/msgqueue.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ntu... ============================================================================== --- trunk/reactos/subsystems/win32/win32k/ntuser/msgqueue.c (original) +++ trunk/reactos/subsystems/win32/win32k/ntuser/msgqueue.c Thu Jul 20 18:53:47 2006 @@ -71,7 +71,7 @@ PUSER_MESSAGE_QUEUE MessageQueue; HANDLE MessageEventHandle;
- Win32Thread = PsGetWin32Thread(); + Win32Thread = PsGetCurrentThreadWin32Thread(); if (Win32Thread == NULL || Win32Thread->MessageQueue == NULL) return 0;
@@ -88,7 +88,7 @@ PW32THREAD Win32Thread; PUSER_MESSAGE_QUEUE MessageQueue;
- Win32Thread = PsGetWin32Thread(); + Win32Thread = PsGetCurrentThreadWin32Thread(); if (Win32Thread == NULL || Win32Thread->MessageQueue == NULL) return FALSE;
@@ -206,12 +206,12 @@ LONG dX, dY; BOOL Res;
- if (PsGetWin32Thread()->Desktop == NULL) + if (PsGetCurrentThreadWin32Thread()->Desktop == NULL) { return FALSE; }
- WinStaObject = PsGetWin32Thread()->Desktop->WindowStation; + WinStaObject = PsGetCurrentThreadWin32Thread()->Desktop->WindowStation;
CurInfo = IntGetSysCursorInfo(WinStaObject); Res = (Msg->hwnd == (HWND)CurInfo->LastClkWnd) && @@ -480,7 +480,7 @@ USER_REFERENCE_ENTRY Ref;
if( !IntGetScreenDC() || - PsGetWin32Thread()->MessageQueue == W32kGetPrimitiveMessageQueue() ) + PsGetCurrentThreadWin32Thread()->MessageQueue == W32kGetPrimitiveMessageQueue() ) { RETURN(FALSE); } @@ -1051,7 +1051,7 @@
KeInitializeEvent(&CompletionEvent, NotificationEvent, FALSE);
- ThreadQueue = PsGetWin32Thread()->MessageQueue; + ThreadQueue = PsGetCurrentThreadWin32Thread()->MessageQueue; ASSERT(ThreadQueue != MessageQueue);
Timeout.QuadPart = (LONGLONG) uTimeout * (LONGLONG) -10000; @@ -1540,7 +1540,7 @@ LPARAM Ret; PUSER_MESSAGE_QUEUE MessageQueue;
- MessageQueue = PsGetWin32Thread()->MessageQueue; + MessageQueue = PsGetCurrentThreadWin32Thread()->MessageQueue; if(!MessageQueue) { return 0; @@ -1557,7 +1557,7 @@ { PUSER_MESSAGE_QUEUE MessageQueue;
- MessageQueue = PsGetWin32Thread()->MessageQueue; + MessageQueue = PsGetCurrentThreadWin32Thread()->MessageQueue; if(!MessageQueue) { return 0; @@ -1808,7 +1808,7 @@ Msg->lParam = (LPARAM) Timer->TimerFunc; KeQueryTickCount(&LargeTickCount); Msg->time = LargeTickCount.u.LowPart; - IntGetCursorLocation(PsGetWin32Thread()->Desktop->WindowStation, + IntGetCursorLocation(PsGetCurrentThreadWin32Thread()->Desktop->WindowStation, &Msg->pt);
if (Restart)
Modified: trunk/reactos/subsystems/win32/win32k/ntuser/painting.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ntu... ============================================================================== --- trunk/reactos/subsystems/win32/win32k/ntuser/painting.c (original) +++ trunk/reactos/subsystems/win32/win32k/ntuser/painting.c Thu Jul 20 18:53:47 2006 @@ -656,7 +656,7 @@ (MsgFilterMin > WM_PAINT || MsgFilterMax < WM_PAINT)) return FALSE;
- Message->hwnd = IntFindWindowToRepaint(UserGetDesktopWindow(), PsGetWin32Thread()); + Message->hwnd = IntFindWindowToRepaint(UserGetDesktopWindow(), PsGetCurrentThreadWin32Thread());
if (Message->hwnd == NULL) {
Modified: trunk/reactos/subsystems/win32/win32k/ntuser/timer.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ntu... ============================================================================== --- trunk/reactos/subsystems/win32/win32k/ntuser/timer.c (original) +++ trunk/reactos/subsystems/win32/win32k/ntuser/timer.c Thu Jul 20 18:53:47 2006 @@ -83,7 +83,7 @@ HintIndex = ++IDEvent; IntUnlockWindowlessTimerBitmap(); Ret = IDEvent; - MessageQueue = PsGetWin32Thread()->MessageQueue; + MessageQueue = PsGetCurrentThreadWin32Thread()->MessageQueue; } else { @@ -151,7 +151,7 @@ DPRINT("IntKillTimer wnd %x id %p systemtimer %s\n", Wnd, IDEvent, SystemTimer ? "TRUE" : "FALSE");
- if (! MsqKillTimer(PsGetWin32Thread()->MessageQueue, Wnd, + if (! MsqKillTimer(PsGetCurrentThreadWin32Thread()->MessageQueue, Wnd, IDEvent, SystemTimer ? WM_SYSTIMER : WM_TIMER)) { DPRINT1("Unable to locate timer in message queue\n");
Modified: trunk/reactos/subsystems/win32/win32k/ntuser/useratom.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ntu... ============================================================================== --- trunk/reactos/subsystems/win32/win32k/ntuser/useratom.c (original) +++ trunk/reactos/subsystems/win32/win32k/ntuser/useratom.c Thu Jul 20 18:53:47 2006 @@ -36,12 +36,12 @@ NTSTATUS Status = STATUS_SUCCESS; RTL_ATOM Atom;
- if (PsGetWin32Thread()->Desktop == NULL) + if (PsGetCurrentThreadWin32Thread()->Desktop == NULL) { SetLastNtError(Status); return (RTL_ATOM)0; } - WinStaObject = PsGetWin32Thread()->Desktop->WindowStation; + WinStaObject = PsGetCurrentThreadWin32Thread()->Desktop->WindowStation; Status = RtlAddAtomToAtomTable(WinStaObject->AtomTable, AtomName, &Atom); if (!NT_SUCCESS(Status)) @@ -59,12 +59,12 @@ NTSTATUS Status = STATUS_SUCCESS; ULONG Size = nSize;
- if (PsGetWin32Thread()->Desktop == NULL) + if (PsGetCurrentThreadWin32Thread()->Desktop == NULL) { SetLastNtError(Status); return 0; } - WinStaObject = PsGetWin32Thread()->Desktop->WindowStation; + WinStaObject = PsGetCurrentThreadWin32Thread()->Desktop->WindowStation; Status = RtlQueryAtomInAtomTable(WinStaObject->AtomTable, nAtom, NULL, NULL, lpBuffer, &Size); if (Size < nSize)
Modified: trunk/reactos/subsystems/win32/win32k/ntuser/window.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ntu... ============================================================================== --- trunk/reactos/subsystems/win32/win32k/ntuser/window.c (original) +++ trunk/reactos/subsystems/win32/win32k/ntuser/window.c Thu Jul 20 18:53:47 2006 @@ -714,7 +714,7 @@
if(bRevert) { - W32Thread = PsGetWin32Thread(); + W32Thread = PsGetCurrentThreadWin32Thread();
if(!W32Thread->Desktop) return NULL; @@ -1426,7 +1426,7 @@ BOOL HasOwner; USER_REFERENCE_ENTRY ParentRef, Ref;
- ParentWindowHandle = PsGetWin32Thread()->Desktop->DesktopWindow; + ParentWindowHandle = PsGetCurrentThreadWin32Thread()->Desktop->DesktopWindow; OwnerWindowHandle = NULL;
if (hWndParent == HWND_MESSAGE) @@ -1470,7 +1470,7 @@
/* Check the window station. */ ti = GetW32ThreadInfo(); - if (ti == NULL || PsGetWin32Thread()->Desktop == NULL) + if (ti == NULL || PsGetCurrentThreadWin32Thread()->Desktop == NULL) { DPRINT1("Thread is not attached to a desktop! Cannot create window!\n"); RETURN( (HWND)0); @@ -1508,7 +1508,7 @@ RETURN(NULL); }
- WinSta = PsGetWin32Thread()->Desktop->WindowStation; + WinSta = PsGetCurrentThreadWin32Thread()->Desktop->WindowStation;
//FIXME: Reference thread/desktop instead ObReferenceObjectByPointer(WinSta, KernelMode, ExWindowStationObjectType, 0); @@ -1531,10 +1531,10 @@
ObDereferenceObject(WinSta);
- if (NULL == PsGetWin32Thread()->Desktop->DesktopWindow) + if (NULL == PsGetCurrentThreadWin32Thread()->Desktop->DesktopWindow) { /* If there is no desktop window yet, we must be creating it */ - PsGetWin32Thread()->Desktop->DesktopWindow = hWnd; + PsGetCurrentThreadWin32Thread()->Desktop->DesktopWindow = hWnd; }
/* @@ -1562,7 +1562,7 @@ IntSetMenu(Window, hMenu, &MenuChanged); }
- Window->MessageQueue = PsGetWin32Thread()->MessageQueue; + Window->MessageQueue = PsGetCurrentThreadWin32Thread()->MessageQueue; IntReferenceMessageQueue(Window->MessageQueue); Window->Parent = ParentWindow;
@@ -1664,7 +1664,7 @@ }
/* Insert the window into the thread's window list. */ - InsertTailList (&PsGetWin32Thread()->WindowListHead, &Window->ThreadListEntry); + InsertTailList (&PsGetCurrentThreadWin32Thread()->WindowListHead, &Window->ThreadListEntry);
/* Allocate a DCE for this window. */ if (dwStyle & CS_OWNDC) @@ -2245,7 +2245,7 @@ continue; }
- if (IntWndBelongsToThread(Child, PsGetWin32Thread())) + if (IntWndBelongsToThread(Child, PsGetCurrentThreadWin32Thread())) { USER_REFERENCE_ENTRY ChildRef; UserRefObjectCo(Child, &ChildRef);//temp hack? @@ -2277,7 +2277,7 @@ }
/* Destroy the window storage */ - co_UserFreeWindow(Window, PsGetWin32Process(), PsGetWin32Thread(), TRUE); + co_UserFreeWindow(Window, PsGetCurrentProcessWin32Process(), PsGetCurrentThreadWin32Thread(), TRUE);
return TRUE; } @@ -4456,7 +4456,7 @@ //its possible this referencing is useless, thou it shouldnt hurt... UserRefObjectCo(DesktopWindow, &Ref);
- Hit = co_WinPosWindowFromPoint(DesktopWindow, PsGetWin32Thread()->MessageQueue, &pt, &Window); + Hit = co_WinPosWindowFromPoint(DesktopWindow, PsGetCurrentThreadWin32Thread()->MessageQueue, &pt, &Window);
if(Window) {
Modified: trunk/reactos/subsystems/win32/win32k/ntuser/winpos.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ntu... ============================================================================== --- trunk/reactos/subsystems/win32/win32k/ntuser/winpos.c (original) +++ trunk/reactos/subsystems/win32/win32k/ntuser/winpos.c Thu Jul 20 18:53:47 2006 @@ -263,7 +263,7 @@ if (Window->InternalPos == NULL) { RECT WorkArea; - PDESKTOP_OBJECT Desktop = PsGetWin32Thread()->Desktop; /* Or rather get it from the window? */ + PDESKTOP_OBJECT Desktop = PsGetCurrentThreadWin32Thread()->Desktop; /* Or rather get it from the window? */
Parent = Window->Parent; if(Parent) @@ -417,7 +417,7 @@ { UINT XInc, YInc; RECT WorkArea; - PDESKTOP_OBJECT Desktop = PsGetWin32Thread()->Desktop; /* Or rather get it from the window? */ + PDESKTOP_OBJECT Desktop = PsGetCurrentThreadWin32Thread()->Desktop; /* Or rather get it from the window? */
IntGetDesktopWorkArea(Desktop, &WorkArea);
Modified: trunk/reactos/subsystems/win32/win32k/ntuser/winsta.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ntu... ============================================================================== --- trunk/reactos/subsystems/win32/win32k/ntuser/winsta.c (original) +++ trunk/reactos/subsystems/win32/win32k/ntuser/winsta.c Thu Jul 20 18:53:47 2006 @@ -894,7 +894,7 @@ else { DPRINT1("Should use ObFindHandleForObject\n"); - Status = ObOpenObjectByPointer(PsGetWin32Thread()->Desktop->WindowStation, + Status = ObOpenObjectByPointer(PsGetCurrentThreadWin32Thread()->Desktop->WindowStation, 0, NULL, WINSTA_ALL_ACCESS, @@ -942,9 +942,9 @@ * just a temporary hack, this will be gone soon */
- if(PsGetWin32Thread() != NULL && PsGetWin32Thread()->Desktop != NULL) - { - WinStaObj = PsGetWin32Thread()->Desktop->WindowStation; + if(PsGetCurrentThreadWin32Thread() != NULL && PsGetCurrentThreadWin32Thread()->Desktop != NULL) + { + WinStaObj = PsGetCurrentThreadWin32Thread()->Desktop->WindowStation; ObReferenceObjectByPointer(WinStaObj, KernelMode, ExWindowStationObjectType, 0); } else if(PsGetCurrentProcess() != CsrProcess) @@ -1045,7 +1045,7 @@ DPRINT("About to set process window station with handle (0x%X)\n", hWindowStation);
- if(PsGetWin32Process() != LogonProcess) + if(PsGetCurrentProcessWin32Process() != LogonProcess) { DPRINT1("Unauthorized process attempted to lock the window station!\n"); SetLastWin32Error(ERROR_ACCESS_DENIED); @@ -1090,7 +1090,7 @@ DPRINT("About to set process window station with handle (0x%X)\n", hWindowStation);
- if(PsGetWin32Process() != LogonProcess) + if(PsGetCurrentProcessWin32Process() != LogonProcess) { DPRINT1("Unauthorized process attempted to unlock the window station!\n"); SetLastWin32Error(ERROR_ACCESS_DENIED);
Modified: trunk/reactos/subsystems/win32/win32k/objects/gdiobj.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/obj... ============================================================================== --- trunk/reactos/subsystems/win32/win32k/objects/gdiobj.c (original) +++ trunk/reactos/subsystems/win32/win32k/objects/gdiobj.c Thu Jul 20 18:53:47 2006 @@ -340,7 +340,7 @@ ULONG Attempts = 0; #endif
- W32Process = PsGetWin32Process(); + W32Process = PsGetCurrentProcessWin32Process(); /* HACK HACK HACK: simplest-possible quota implementation - don't allow a process to take too many GDI objects, itself. */ if ( W32Process && W32Process->GDIObjects >= 0x2710 ) @@ -521,7 +521,7 @@ if(GdiHdr->Locks == 0) { BOOL Ret; - PW32PROCESS W32Process = PsGetWin32Process(); + PW32PROCESS W32Process = PsGetCurrentProcessWin32Process(); ULONG Type = Entry->Type << 16;
/* Clear the type field so when unlocking the handle it gets finally deleted and increment reuse counter */
Modified: trunk/reactos/subsystems/win32/win32k/objects/text.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/obj... ============================================================================== --- trunk/reactos/subsystems/win32/win32k/objects/text.c (original) +++ trunk/reactos/subsystems/win32/win32k/objects/text.c Thu Jul 20 18:53:47 2006 @@ -363,7 +363,7 @@
if (Characteristics & FR_PRIVATE) { - PW32PROCESS Win32Process = PsGetWin32Process(); + PW32PROCESS Win32Process = PsGetCurrentProcessWin32Process(); IntLockProcessPrivateFonts(Win32Process); InsertTailList(&Win32Process->PrivateFontListHead, &Entry->ListEntry); IntUnLockProcessPrivateFonts(Win32Process); @@ -983,7 +983,7 @@ PFONTGDI Font;
/* Search the process local list */ - Win32Process = PsGetWin32Process(); + Win32Process = PsGetCurrentProcessWin32Process(); IntLockProcessPrivateFonts(Win32Process); Font = FindFaceNameInList(FaceName, &Win32Process->PrivateFontListHead); IntUnLockProcessPrivateFonts(Win32Process); @@ -1391,7 +1391,7 @@ IntUnLockGlobalFonts;
/* Enumerate font families in the process local list */ - Win32Process = PsGetWin32Process(); + Win32Process = PsGetCurrentProcessWin32Process(); IntLockProcessPrivateFonts(Win32Process); if (! GetFontFamilyInfoForList(&LogFont, Info, &Count, Size, &Win32Process->PrivateFontListHead)) @@ -3880,7 +3880,7 @@ TextObj->Font = NULL;
/* First search private fonts */ - Win32Process = PsGetWin32Process(); + Win32Process = PsGetCurrentProcessWin32Process(); IntLockProcessPrivateFonts(Win32Process); FindBestFontFromList(&TextObj->Font, &MatchScore, &TextObj->logfont, &FaceName,
Modified: trunk/reactos/subsystems/win32/win32k/w32k.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/w32... ============================================================================== --- trunk/reactos/subsystems/win32/win32k/w32k.h (original) +++ trunk/reactos/subsystems/win32/win32k/w32k.h Thu Jul 20 18:53:47 2006 @@ -138,7 +138,7 @@ UserHeapAddressToUser(PVOID lpMem) { return (PVOID)(((ULONG_PTR)lpMem - (ULONG_PTR)GlobalUserHeap) + - (ULONG_PTR)PsGetWin32Process()->HeapMappings.UserMapping); + (ULONG_PTR)PsGetCurrentProcessWin32Process()->HeapMappings.UserMapping); }
#endif /* __W32K_H */