Alexandre Julliard : server: Use the prefix architecture instead of the server one to check for WoW processes .

Alexandre Julliard julliard at winehq.org
Wed May 5 11:08:34 CDT 2010


Module: wine
Branch: master
Commit: bbc03d5172d105f3ac5598bfdf02a2c04727b03d
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=bbc03d5172d105f3ac5598bfdf02a2c04727b03d

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Tue May  4 20:26:53 2010 +0200

server: Use the prefix architecture instead of the server one to check for WoW processes.

---

 server/process.h  |    3 +++
 server/registry.c |    7 +++++++
 server/thread.c   |    8 --------
 server/thread.h   |    1 -
 4 files changed, 10 insertions(+), 9 deletions(-)

diff --git a/server/process.h b/server/process.h
index 87e12e0..cee7be9 100644
--- a/server/process.h
+++ b/server/process.h
@@ -92,6 +92,9 @@ struct process_snapshot
     int             handles;  /* number of handles */
 };
 
+#define CPU_FLAG(cpu) (1 << (cpu))
+#define CPU_64BIT_MASK CPU_FLAG(CPU_x86_64)
+
 /* process functions */
 
 extern unsigned int alloc_ptid( void *ptr );
diff --git a/server/registry.c b/server/registry.c
index e5c0da4..7f78209 100644
--- a/server/registry.c
+++ b/server/registry.c
@@ -43,6 +43,7 @@
 #include "file.h"
 #include "handle.h"
 #include "request.h"
+#include "process.h"
 #include "unicode.h"
 #include "security.h"
 
@@ -1873,6 +1874,12 @@ void flush_registry(void)
     if (fchdir( server_dir_fd ) == -1) fatal_perror( "chdir to server dir" );
 }
 
+/* determine if the thread is wow64 (32-bit client running on 64-bit prefix) */
+static int is_wow64_thread( struct thread *thread )
+{
+    return (prefix_type == PREFIX_64BIT && !(CPU_FLAG(thread->process->cpu) & CPU_64BIT_MASK));
+}
+
 
 /* create a registry key */
 DECL_HANDLER(create_key)
diff --git a/server/thread.c b/server/thread.c
index a6bc55a..1c3e5bb 100644
--- a/server/thread.c
+++ b/server/thread.c
@@ -53,7 +53,6 @@
 #include "security.h"
 
 
-#define CPU_FLAG(cpu) (1 << (cpu))
 #ifdef __i386__
 static const unsigned int supported_cpus = CPU_FLAG(CPU_x86);
 #elif defined(__x86_64__)
@@ -67,7 +66,6 @@ static const unsigned int supported_cpus = CPU_FLAG(CPU_SPARC);
 #else
 #error Unsupported CPU
 #endif
-#define CPU_64BIT_MASK CPU_FLAG(CPU_x86_64)
 
 /* thread queues */
 
@@ -409,12 +407,6 @@ struct thread *get_thread_from_pid( int pid )
     return NULL;
 }
 
-/* determine if the thread is wow64 (32-bit client running on 64-bit server) */
-int is_wow64_thread( struct thread *thread )
-{
-    return (supported_cpus & CPU_64BIT_MASK) && !(CPU_FLAG(thread->process->cpu) & CPU_64BIT_MASK);
-}
-
 int set_thread_affinity( struct thread *thread, affinity_t affinity )
 {
     int ret = 0;
diff --git a/server/thread.h b/server/thread.h
index 045a43c..1e95732 100644
--- a/server/thread.h
+++ b/server/thread.h
@@ -118,7 +118,6 @@ extern int thread_add_inflight_fd( struct thread *thread, int client, int server
 extern int thread_get_inflight_fd( struct thread *thread, int client );
 extern struct thread_snapshot *thread_snap( int *count );
 extern struct token *thread_get_impersonation_token( struct thread *thread );
-extern int is_wow64_thread( struct thread *thread );
 extern int set_thread_affinity( struct thread *thread, affinity_t affinity );
 
 /* ptrace functions */




More information about the wine-cvs mailing list