On Wed, 18 Dec 2013 04:28:57 -0000, Hugo Florentino <h...@acdam.cu> wrote:

On Tue, 17 Dec 2013 13:21:30 -0000, Regan Heath wrote:
Is GetNativeSystemInfo your other solution?  On the MSDN page for
GetNativeSystemInfo it recommends using IsWow64Process to detect if
you're  running under WOW64, at which point you would then call
GetNativeSystemInfo.

I am not sure what GetNativeSystemInfo does if called from a 32 bit
exe on  a 32 bit OS..

It seems to work. After all it makes sense, the native system is actually 32 bits.

Cool. The reason I was unsure and the reason I do not agree that it "makes sense" that it works, is the first paragraph on the MSDN page:

"Retrieves information about the current system to an application **running under WOW64**. If the function is called from **a 64-bit application**, it is equivalent to the GetSystemInfo function."

**emphasis mine**

It doesn't actually address the situation of calling it from a 32 bit application NOT running under WOW64.

GetSystemInfo is callable from both 32 and 64 bit so I assume now, that given that it works for you, that it is doing what it mentions above for a 64 bit application, and actually just calling GetSystemInfo.

You will probably find that calling GetSystemInfo works just as well as what you're already doing.

I /know/ that the code in std.internal.windows.advapi32 which
dynamically  loads and calls IsWow64Process will work, because we use
it here at work  for this very purpose.  It's also the simplest most
direct way to answer  this specific question and it's already present,
tested and working in  phobos .. so I would be inclined to use it, in
preference over  GetNativeSystemInfo.

R

If after using IsWOW64Process a GetNativeSystemInfo must still be issued like you mentioned earlier, I don't see the advantage over calling that function directly in the first place.
Or am I missing something?

Yes, you're missing something :)

http://msdn.microsoft.com/en-us/library/windows/desktop/ms684139(v=vs.85).aspx

IsWow64Process returns (in the output parameter) if the 32 bit application is running in WOW64. WOW64 *only* exists on a 64 bit OS. So, if true this tells you you're on a 64 bit OS. You don't need an additional call to GetNativeSystemInfo at all.

Further, the code is already in phobos so all you actually need to do is check the isWow64 global boolean defined by "std.internal.windows.advapi32". So, your code is as simple as:

import std.stdio;
import std.internal.windows.advapi32;

void main(string[] args)
{
  writefln(isWow64 ? "yes" : "no");
}

R

--
Using Opera's revolutionary email client: http://www.opera.com/mail/

Reply via email to