Started playing with Wineserver on mingw/cygwin again

David Fraser davidf at sjsoft.com
Tue Feb 4 12:21:30 CST 2003


Dimitrie O. Paun wrote:

>On February 1, 2003 02:10 am, David Fraser wrote:
>  
>
>>Could we go straight down to the underlying win32 api and do a
>>GetThreadContext there? Is that cheating?
>>    
>>
>
>I don't know the Cygwin threading model, but calling the real
>[GS]etThreadContext is a good first order approximation. If
>interested in this task, I'd bring it up on the Cygwin mailing
>list...
>
>
>  
>
Just as a start, I tried this ... compiles fine but don't know how to
test it ...
Does this look right? (just done for get_thread_context)

David

-------------- next part --------------
Index: server/context_i386.c
===================================================================
RCS file: /home/wine/wine/server/context_i386.c,v
retrieving revision 1.24
diff -u -r1.24 context_i386.c
--- server/context_i386.c	8 Nov 2002 18:55:31 -0000	1.24
+++ server/context_i386.c	4 Feb 2003 17:53:57 -0000
@@ -76,7 +76,31 @@
 #define PTRACE_SETDBREGS PT_SETDBREGS
 #endif
 
-#ifdef linux
+#if defined(__CYGWIN__)
+
+/* need to access handles... */
+#include "handle.h"
+
+/* retrieve a thread context */
+static void get_thread_context( struct thread *thread, unsigned int flags, CONTEXT *context )
+{
+    /* get a handle to the thread with all access, not inheritable */
+    HANDLE hThread = alloc_handle(thread->process, thread, THREAD_ALL_ACCESS, 0);
+    /* cheat and call underlying Windows GetThreadContext directly... */
+    BOOL success = GetThreadContext(hThread, context);
+    /* now release the handle... */
+    close_handle(thread->process, hThread, NULL);
+}
+
+
+/* set a thread context */
+static void set_thread_context( struct thread *thread, unsigned int flags, const CONTEXT *context )
+{
+    /* FIXME: implement this */
+    file_set_error();
+}
+
+#elif defined(linux)
 #ifdef HAVE_SYS_USER_H
 # include <sys/user.h>
 #endif



More information about the wine-devel mailing list