Microsoft KB Archive/101893
Determining Whether a WOW App is Running in Enhanced Mode
The information in this article applies to:
- Microsoft Win32 Software Development Kit (SDK) for Windows NT, versions 3.1, 3.5
Windows NT and Windows NT Advanced Server will run a Windows 3.1 application in 386 enhanced mode on X86 machines (standard mode on RISC machines). The proper way to determine whether a Windows 3.1 application is in enhanced mode is to call GetWinFlags() and do a bit test for WF_ENHANCED. This method is described on pages 486-487 in the Windows 3.1 Software Development Kit (SDK) "Programmer's Reference, Volume 2: Functions."
Calling Interrupt 2F with AX=1600h
This method, which is described in the Windows 3.1 Device Development Kit (DDK) checks to see whether a 386 memory manager is running. If Windows 3.1 is running in enhanced mode, it returns AL = 3 and 2 for standard mode. Windows NT's WOW (Windows 16 on Windows NT) returns AL=0, which means enhanced mode Windows is not running.
The GetWinFlags() function retrieves the current Windows system and memory configuration.
The configuration returned by GetWinFlags() can be a combination of the following values:
Value Meaning ---------------------------------------------------------------- WF_80x87 System contains an Intel math coprocessor. WF_CPU286 System CPU is an 80286. WF_CPU386 System CPU is an 80386. WF_CPU486 System CPU is an i486. WF_ENHANCED Windows is running in 386-enhanced mode. The WF_PMODE flag is always set when WF_ENHANCED is set. WF_PAGING Windows is running on a system with paged memory. WF_PMODE Windows is running in protected mode. In Windows 3.1, this flag is always set. WF_STANDARD Windows is running in standard mode. The WF_PMODE flag is always set when WF_STANDARD is set. WF_WIN286 Same as WF_STANDARD. WF_WIN386 Same as WF_ENHANCED.
NOTE: When running in Windows NT, WF_WINNT will also be returned to tell the 16-bit Windows-based application that you are running in Windows NT.
The following example uses the GetWinFlags() function to display information about the current Windows system configuration:
int len; char szBuf; DWORD dwFlags; dwFlags = GetWinFlags(); len = sprintf(szBuf, "system %s a coprocessor", (dwFlags & WF_80x87) ? "contains" : "does not contain"); TextOut(hdc, 10, 15, szBuf, len); len = sprintf(szBuf, "processor is an %s", (dwFlags & WF_CPU286) ? "80286" : (dwFlags & WF_CPU386) ? "80386" : (dwFlags & WF_CPU486) ? "i486" : "unknown"); TextOut(hdc, 10, 30, szBuf, len); len = sprintf(szBuf, "running in %s mode", (dwFlags & WF_ENHANCED) ? "enhanced" : "standard"); TextOut(hdc, 10, 45, szBuf, len); len = sprintf(szBuf, "%s WLO", (dwFlags & WF_WLO) ? "using" : "not using"); TextOut(hdc, 10, 60, szBuf, len);
Additional query words: 3.10 3.50
Issue type :
Technology : kbWin32SDKSearch kbAudDeveloper kbSDKSearch kbWin32sSearch kbWin32SDKNT310 kbWin32SDKNT350
Last Reviewed: January 12, 2000