@msdn=http://msdn2.microsoft.com/en-us/library/ms684139.aspx @pinvoke=http://pinvoke.net/$$$.htm Summary: Determines whether the specified process is running under WOW64. Some WinAPI functions work differently when running through WOW64, so you will sometimes need to know if a process is under the thunking layer. !!!!Alternative Managed API: Environment.Is64BitOperatingSystem !!!!C# Signature: [DllImport("kernel32.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi)] [return: MarshalAs(UnmanagedType.Bool)] public static extern bool IsWow64Process( [In] Microsoft.Win32.SafeHandles.SafeHandleZeroOrMinusOneIsInvalid hProcess, [Out, MarshalAs(UnmanagedType.Bool)] out bool wow64Process ); [DllImport("kernel32.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi)] [return: MarshalAs(UnmanagedType.Bool)] public static extern bool IsWow64Process([In] IntPtr processHandle, [Out, MarshalAs(UnmanagedType.Bool)] out bool wow64Process); !!!!VB Signature: <DllImport("Kernel32.dll", SetLastError:=True, CallingConvention:=CallingConvention.Winapi)> _ Public Shared Function IsWow64Process( _ ByVal hProcess As Microsoft.Win32.SafeHandles.SafeHandleZeroOrMinusOneIsInvalid, _ ByRef wow64Process As Boolean) As <MarshalAs(UnmanagedType.Bool)> Boolean End Function !!!!Boo Signature: [DllImport("kernel32.dll")] def IsWow64Process(hHandle as int, ref is64Bits as bool) as bool: pass !!!!Notes: Requires Windows XP SP2, Windows Vista, Windows Server 2003 SP1 or Windows Server 2008 !!!!Tips & Tricks: Use this instead of the processor architecture to determine if you are running on 64 bit. You can use GetProcAddess to determine if your OS supports it (XP SP2 or greater). There is no need to call CloseProcess or to use a SafeHandle if you get the handle using GetCurrentProcess as it returns a pseudohandle. !!!!Sample Code: C#: isWow64 = false; if ((System.Environment.OSVersion.Version.Major == 5 && System.Environment.OSVersion.Version.Minor >= 1) || System.Environment.OSVersion.Version.Major > 5) { SafeProcessHandle processHandle = GetProcessHandle((uint)System.Diagnostics.Process.GetCurrentProcess().Id); bool retVal; if (!NativeMethods.IsWow64Process(processHandle, out retVal)) { throw new Win32Exception(Marshal.GetLastWin32Error()); } isWow64 = retVal; } VB.NET: 'Checks if the function exists on this OS, then calls it. Private Shared Function IsWow64() As Boolean Dim proc As Integer proc = GetProcAddress(GetModuleHandle("Kernel32.dll"), "IsWow64Process") If proc <= 0 Then Return False End If 'Dim processHandle As Long = GetProcessHandle(System.Diagnostics.Process.GetCurrentProcess().Id) Dim retVal As Boolean If IsWow64Process(GetCurrentProcess(), retVal) Then Return retVal Else Return False End If End Function 'Uses Wow64 to see if the current process is running on Windows XP 64 bit Public Shared Function IsWinXP64() As Boolean 'returns True if running Windows XP 64-bit Dim osv As New OSVERSIONINFOEX osv.dwOSVersionInfoSize = Marshal.SizeOf(osv) Dim si As New SYSTEM_INFO If GetVersionEx(osv) = 1 Then GetSystemInfo(si) Return (osv.dwMajorVersion = 5 And osv.dwMinorVersion = 2) And _ IsWow64() Else Return False End If End Function 'Uses Wow64 to see if the current process is running on Windows Vista 64 bit Public Shared Function IsWinVista64() As Boolean 'returns True if running Windows Vista Dim osv As New OSVERSIONINFOEX osv.dwOSVersionInfoSize = Marshal.SizeOf(osv) If GetVersionEx(osv) = 1 Then Return (osv.wProductType = VER_NT_WORKSTATION) And _ (osv.dwMajorVersion = 6) And IsWow64() Else Return False End If End Function Documentation: IsWow64Process@msdn on MSDN
Edit kernel32.iswow64p...
You do not have permission to change this page. If you feel this is in error, please send feedback with the contact link on the main page.