FIX: Win32s 1.25a Fix List

Last reviewed: October 29, 1997
Article ID: Q130139
1.25a WINDOWS kbprg kbfixlist kbbuglist

The information in this article applies to:

  • Microsoft Win32s, version 1.25a

The following is a list of the known bugs in Win32s version 1.2 that were fixed in Win32s version 1.25.

  • GlobalAlloc(GMEM_FIXED) from 32-bit .EXE locks memory pages. It is more efficient to use GlobalAlloc(GMEM_MOVEABLE) and call GlobalFix() if necessary.
  • WINMM16.DLL has no version information.
  • CreateFileMapping() with SEC_NOCOMMIT returns ERROR_INVALID_PARAMETER.
  • PolyPolygon() does not close the polygons.
  • OpenFile() only searches the current directory when only a filename is given, not the application directory, the system directory, the windows directory, or the directories listed on the path.
  • GetFileInformationByHandle() doesn't return the correct file attribute.
  • GlobalUnlock() sets an error of ERROR_INVALID_PARAMETER.
  • lstrcmp()/lstrcmpi() do not use the collate table correctly.
  • FreeLibrary() in DLL_PROCESS_DETACH crashes the system.
  • FindResource(), LoadResource(), GetProcAddress(), GetModuleFileName(), EnumResourceNames(), and other APIs, fail with a NULL hInstance.
  • sndPlaySound() with SND_ASYNC | SND_MEMORY may cause a crash or may work poorly.
  • Thread Local Storage (TLS) data is not initialized to 0 in TlsAlloc().
  • The pointer received in the lParam of WM_INITDIALOG in the common dialog hook function becomes invalid in the following messages if the pointer is "remembered" in a static variable.
  • Stubbed API GetFileAttributesW() does not return -1 on error.
  • Code page CP_MACCP not supported.
  • Invalid LCIDs are not recognized.
  • CreateFile() fails to open an existing file in share mode.
  • GetLocaleInfo() for locale returns system defaults from WIN.INI.
  • GetVolumeInformation() fails with ERROR_INVALID_NAME for volumes without a label.
  • VirtualProtect() may miss the last page in an address range.
  • GetLocaleInfo() returns incorrect information for most non-US locales.
  • ANSI/OEM conversions always use code page 437.
  • GetProcAddress() for printer driver APIs is case sensitive.
  • The LanMan APIs are unsupported, but they return 0, which indicates that the API was successful. They should return NERR_InvalidAPI (2142).
  • CreateFileW() returns 0 instead of -1 (HFILE_ERROR).
  • lstrcpyn() copies n bytes from source to destination, then appends a NULL terminator, instead of copying n-1 bytes and appending the NULL terminator.
  • GetDriveType() doesn't report detecting a CD-ROM or a RAM DISK.
  • CRTDLL calls TlsFree() upon each process detach, not just the last.
  • If a DllEntryPoint calls FreeLibrary() when using universal thunks, the system can crash.
  • Not all 32-bit DLLs have correct version numbers.
  • GetCurrentDirectory() returns the wrong directory after calling GetOpenFileName(). The workaround is to call SetCurrentDirectory(".") right after returning from the call to GetOpenFileName().
  • RegEnumValue() and other Registry functions return ERROR_SUCCESS even though they are not implemented. Win32s implements only the registry functions supported by Windows.
  • AreFileApisANSI()/SetFileApisToANSI()/SetFileApisToOEM() are not exported. AreFileApisANSI() should always return TRUE, SetFileApiToOEM() should always fail, and SetFileApiToANSI() should always succeed.
  • SetLocaleInfoW()/SetLocateInfoA() are not implemented.
  • GetScrollPos() sets the last error if the scroll position is 0.
  • SetScrollPos() sets the last error if the last scroll position is 0.
  • LoadString() leaks memory if the string is a null string.
  • GetFileVersionInfoSize() fails if the resource section is small and close to the end of the file.
  • MoveFile() doesn't call SetLastError() on failure or sets a different error than on Windows NT.
  • SetCurrentDirectory() does not work on a CD-ROM drive.
  • GetFileVersionInfoSize() fails if the 2nd parameter is NULL.
  • WSOCK32.DLL is missing exported stubs for unimplemented APIs.
  • Win32s fails to load 64x64 monochrome (black and white) icons.
  • CreateFile() fails when called with a filename with an international character.
  • GetCurrentDirectory() returns an OEM string.
  • PrintDlg() causes GP fault if hDevMode!=NULL and another printer is selected that uses a larger DevMode buffer.
  • Unicode resources are not properly converted to 8-bit characters.
  • CreateDC() returns an incorrect DEVMODE. This can cause a variety of symptoms, like the inability to do a Landscape Print Preview from an MFC application or the displayed paper width and height not changing, even when you change the paper size.
  • OpenFile() fails on filenames with OEM characters in the name.
  • WNetCancelConnection() should be supported similar to NetAddConnection().
  • GetDriveType() fails on a Stacker 3.1 drive.
  • SetCurrentDirectory() fails on Novell client machines.
  • GetProp() returns 0 in the second instance of an app in certain cases.
  • fopen(fn, "w") fails on second call.
  • TLS indices allocated by a module are released when that module is freed.
  • CreateWindow() handles STARTUPINFO incorrectly if the application starts minimized.
  • CreateFile() creates files with incorrect attributes.
  • Resource sections are now read/write to emulate the behavior of Windows NT and Windows 95.
  • Removed the 128K stack limitation.
  • CompareStringW() sometimes uses incorrect locale, primarily Swedish and other Scandinavian locales.
  • Added dummy _iob to CRTDLL for applications that reference standard handles.
  • Added support for OPENCHANNEL, CLOSECHANNEL, SEXGDIXFORM, and DOWNLOADHEADER escapes.


Additional reference words: 1.25 1.25a
KBCategory: kbprg kbfixlist kbbuglist
KBSubcategory: W32s
Keywords : W32s kbbuglist kbfixlist kbprg
Version : 1.25a
Platform : WINDOWS
Solution Type : kbfix


THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.

Last reviewed: October 29, 1997
© 1998 Microsoft Corporation. All rights reserved. Terms of Use.