Commit 7e47d19d authored by Alexandre Julliard's avatar Alexandre Julliard

ntdll: Set the WOW64 flag according to the server supported CPUs.

parent 279defe6
...@@ -66,6 +66,7 @@ extern void virtual_init_threading(void); ...@@ -66,6 +66,7 @@ extern void virtual_init_threading(void);
/* server support */ /* server support */
extern timeout_t server_start_time; extern timeout_t server_start_time;
extern unsigned int server_cpus;
extern void server_init_process(void); extern void server_init_process(void);
extern NTSTATUS server_init_process_done(void); extern NTSTATUS server_init_process_done(void);
extern size_t server_init_thread( void *entry_point ); extern size_t server_init_thread( void *entry_point );
......
...@@ -305,10 +305,14 @@ NTSTATUS WINAPI NtQueryInformationProcess( ...@@ -305,10 +305,14 @@ NTSTATUS WINAPI NtQueryInformationProcess(
else ret = STATUS_INFO_LENGTH_MISMATCH; else ret = STATUS_INFO_LENGTH_MISMATCH;
break; break;
case ProcessWow64Information: case ProcessWow64Information:
if (ProcessInformationLength == 4) if (ProcessInformationLength == sizeof(DWORD))
{ {
memset(ProcessInformation, 0, ProcessInformationLength); #ifdef __i386__
len = 4; *(DWORD *)ProcessInformation = (server_cpus & (1 << CPU_x86_64)) != 0;
#else
*(DWORD *)ProcessInformation = FALSE;
#endif
len = sizeof(DWORD);
} }
else ret = STATUS_INFO_LENGTH_MISMATCH; else ret = STATUS_INFO_LENGTH_MISMATCH;
break; break;
......
...@@ -90,6 +90,8 @@ static const enum cpu_type client_cpu = CPU_SPARC; ...@@ -90,6 +90,8 @@ static const enum cpu_type client_cpu = CPU_SPARC;
#error Unsupported CPU #error Unsupported CPU
#endif #endif
unsigned int server_cpus = 0;
#ifndef HAVE_STRUCT_MSGHDR_MSG_ACCRIGHTS #ifndef HAVE_STRUCT_MSGHDR_MSG_ACCRIGHTS
/* data structure used to pass an fd with sendmsg/recvmsg */ /* data structure used to pass an fd with sendmsg/recvmsg */
struct cmsg_fd struct cmsg_fd
...@@ -1050,6 +1052,7 @@ size_t server_init_thread( void *entry_point ) ...@@ -1050,6 +1052,7 @@ size_t server_init_thread( void *entry_point )
NtCurrentTeb()->ClientId.UniqueThread = ULongToHandle(reply->tid); NtCurrentTeb()->ClientId.UniqueThread = ULongToHandle(reply->tid);
info_size = reply->info_size; info_size = reply->info_size;
server_start_time = reply->server_start; server_start_time = reply->server_start;
server_cpus = reply->all_cpus;
} }
SERVER_END_REQ; SERVER_END_REQ;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment