Fix KeUnstackDetachProcess. Modified: trunk/reactos/ntoskrnl/ke/process.c _____
Modified: trunk/reactos/ntoskrnl/ke/process.c --- trunk/reactos/ntoskrnl/ke/process.c 2005-02-18 17:15:01 UTC (rev 13633) +++ trunk/reactos/ntoskrnl/ke/process.c 2005-02-18 18:28:49 UTC (rev 13634) @@ -216,7 +216,7 @@
{ KIRQL OldIrql; PKTHREAD Thread; - + /* If the special "We tried to attach to the process already being attached to" flag is there, don't do anything */ if (ApcState->Process == (PKPROCESS)1) return; @@ -231,29 +231,27 @@ /* Restore the Old APC State if a Process was present */ if (ApcState->Process) { - RtlMoveMemory(ApcState, &Thread->ApcState, sizeof(KAPC_STATE)); + KiMoveApcState(ApcState, &Thread->ApcState); } else { /* The ApcState parameter is useless, so use the saved data and reset it */ - RtlMoveMemory(&Thread->SavedApcState, &Thread->ApcState, sizeof(KAPC_STATE)); + KiMoveApcState(&Thread->SavedApcState, &Thread->ApcState); Thread->SavedApcState.Process = NULL; Thread->ApcStateIndex = OriginalApcEnvironment; Thread->ApcStatePointer[OriginalApcEnvironment] = &Thread->ApcState; Thread->ApcStatePointer[AttachedApcEnvironment] = &Thread->SavedApcState; }
- /* Restore the APC State */ - KiMoveApcState(&Thread->SavedApcState, &Thread->ApcState); - /* Swap Processes */ KiSwapProcess(Thread->ApcState.Process, Thread->ApcState.Process); - + /* Return to old IRQL*/ KeReleaseDispatcherDatabaseLock(OldIrql); }
-// This function should be used by win32k.sys to add its own user32/gdi32 services -// TableIndex is 0 based -// ServiceCountTable its not used at the moment +/* This function should be used by win32k.sys to add its own user32/gdi32 services + * TableIndex is 0 based + * ServiceCountTable its not used at the moment + */ /* * @implemented */