only attach to the process to be queried when necessary
Modified: trunk/reactos/ntoskrnl/ke/spinlock.c
Modified: trunk/reactos/ntoskrnl/ps/process.c
_____
Modified: trunk/reactos/ntoskrnl/ke/spinlock.c
--- trunk/reactos/ntoskrnl/ke/spinlock.c 2005-02-05 10:19:49 UTC
(rev 13420)
+++ trunk/reactos/ntoskrnl/ke/spinlock.c 2005-02-05 10:31:37 UTC
(rev 13421)
@@ -195,9 +195,7 @@
:
: "r" (SpinLock));
#else
- while (0 != *(volatile PKSPIN_LOCK)SpinLock)
- {
- }
+ while (0 != *(volatile KSPIN_LOCK*)SpinLock);
#endif
#else
DbgPrint("Spinning on spinlock %x current value %x\n", SpinLock,
i);
_____
Modified: trunk/reactos/ntoskrnl/ps/process.c
--- trunk/reactos/ntoskrnl/ps/process.c 2005-02-05 10:19:49 UTC (rev
13420)
+++ trunk/reactos/ntoskrnl/ps/process.c 2005-02-05 10:31:37 UTC (rev
13421)
@@ -1613,11 +1613,15 @@
{
PRTL_USER_PROCESS_PARAMETERS ProcParams = NULL;
UNICODE_STRING LocalDest;
+ BOOLEAN Attached;
ULONG ImagePathLen = 0;
PUNICODE_STRING DstPath =
(PUNICODE_STRING)ProcessInformation;
/* we need to attach to the process to make sure we're in the
right context! */
- KeAttachProcess(&Process->Pcb);
+ Attached = Process != PsGetCurrentProcess();
+
+ if(Attached)
+ KeAttachProcess(&Process->Pcb);
_SEH_TRY
{
@@ -1677,7 +1681,8 @@
_SEH_END;
/* detach from the process */
- KeDetachProcess();
+ if(Attached)
+ KeDetachProcess();
/* only copy the string back to the caller if we were
able to
copy it into the temporary buffer! */
@@ -1715,7 +1720,8 @@
}
/* don't forget to detach from the process!!! */
- KeDetachProcess();
+ if(Attached)
+ KeDetachProcess();
}
else
{