ntdll: enable CreateRemoteThread and RtlCreateUserThread for remote processes

Andreas Mohr andi at rhlx01.fht-esslingen.de
Mon Jul 17 06:29:17 CDT 2006


Hi,

On Mon, Jul 17, 2006 at 01:08:38PM +0200, Alexandre Julliard wrote:
> "Dan Kegel" <dank at kegel.com> writes:
> 
> > I'm afraid I don't quite understand.  What's wrong with interrupting a thread
> > holding a lock?  Could that make cloning a new thread deadlock?
> 
> One problem is that many locks have to be acquired in a specific order
> to avoid deadlocks, and since you don't know which locks the thread is
> already holding you can't guarantee the order. The other problem is
> that you can't guarantee that critical sections are in a valid state
> since the thread could be interrupted in the middle of a crit section
> call.

The second problem could possibly be workarounded by some very gross hacks:

Add hooks in a number of *very* common Win32 API functions (GetVersion(),
PeekMessage(), ...) that would "trap" this thread there (add huge Sleeps etc.) while it's being grossly abused externally:

if (unlikely(ongoing_create_remote_operation))
	freeze_thread();

That way you'd make certain that any object the thread is modifying during its
life-time is not suspended in half-modified state during the time
that you're doing brain surgery on this thread.

Not a pretty solution at all, but it could help - unless I'm totally mistaken
due to uninformedly jumping into the middle of this discussion.

Andreas Mohr



More information about the wine-devel mailing list