BUG: Win32s 1.1 Bug List ID: Q113739 ---------------------------------------------------------------------- The information in this article applies to: - Microsoft Win32s version 1.1 ---------------------------------------------------------------------- SYMPTOMS ======== The following is a list of known problem in Win32s version 1.1: - Setup fails if there are 40 groups in Program Manager - WinFile GP faults while viewing file properties - Universal Thunk callback returns a WORD, not a DWORD - LA (linear address) Table limited to 256 entries. This limits the number of VirtualAlloc() calls that will succeed. - Win32s does not handle paths that contain a "&" or a "#" - FP (floating point) exceptions are not trapped by SEH (structured exception handling. FP exception in 32-bit code which is called from 16-bit code via UT can cause a GP fault in WIN87EM - TLS data was allocated from a limited heap size. This can cause applications which use a lot of TLS data to fail to load. - CB_FINDSTRING and LB_FINDSTRINGEXACT are not thunked correctly from a 16-bit app to a 32-bit app - Dialog templates passed from a 32-bit app are corrupted - If a DDE client responds to INITIATE for which it is also the server, lParam is packed incorrectly. * fstat() always returns rt_mode is read/write * chdrive(): does not retain the current working directory, always uses the root directory - ChooseFont(): CHOOSEFONT has blue value set to 0 with CF_EFFECTS - CopyFile(): uses current time, not the file time - CreateFile(): does not parse UNC names correctly - CreateProcess(): does not set current directory correctly - CreateProcess(): ignores window size and window position - CreateProcess(): debug version corrupts environment if lpApplicationName != NULL - CreateProcess(): returns failure if child does not call GetMessage() or yield in some way before control goes to the parent - CreateProcess(): dwFlags is ignored when starting Win16 apps, while showwindow is always passed - CreateWindowEx(): CW_USEDEFAULT is not handled, causing problems with WM_VISIBLE - EnumMetaFile(): handles array is corrupted - EnumPropsEx(): enumerates non-existing properties - EqualRect(): returns TRUE for rectangles that are lines - FindFirstFile(): error code is set to ERROR_NO_MORE_FILES instead of ERROR_FILE_NOT_FOUND if there are no matches for the search pattern - FindFirstFile(): may use a bad DTA, causing stack corruption - GetClassInfo(): WNDCLASS buffer corrupted if passing invalid class * GetFileInformationByHandle(): support added in 1.15, but file attribute returned is always 0 - GetFilePointer(): returns valid value given invalid handle - GetFileSize(): moves file pointer - GetFileVersionSize(): Win16 apps calling this API on a 32-bit DLL GP fault - GetKerningPairs(): result not in Win32 format - GetModuleFileName(): Win16 apps calling this API on a 32-bit DLL causes OFSTRUCT structure to be truncated - GetModuleFileName(): char count returned includes terminating NUL - GetOpenFileName(): call fails with OFN_ENABLETEMPLATEHANDLE - GetOpenFileName(): you can use hook within GetOpenFileName(), trap WM_INITDIALOG to get address of OPENFILENAME struct, but pointer is corrupted by next message - GetOutlineTextMetrics(): returns OUTLINETEXTMETRIC struct with Win 3.1 format, not Win32 format - GetOutlineTextMetrics(): OUTLINETEXTMETRIC UnderscorePosition, UnderscoreSize, and otmItalicAngle are incorrect - GetSystemInfo(): returns incorrect lpMinimumApplicationAddress and lpMaximumApplicationAddress - GlobalCompact(): exception occurs when value is larger than available memory - HeapAlloc/malloc(): slow, because debug check left in code - IsCharAlpha(): returns 0 for chars 128-255 - LoadLibrary(): fails to report unsucessful load of 16-bit DLLs (should return ERROR_BAD_EXE_FORMAT) - LoadLibrary(): fails after 4591 calls, due to a memory leak - LoadLibrary(): fixed to work from a 32-bit DLL called by a 16-bit app - LoadModule(): does not pass cmdshow, so app gets SW_SHOWNORMAL - LocalAlloc(): fixed to work from a 32-bit DLL called by a 16-bit app - MultiByteToWideChar(): wrong string returned with USE_GLYPHCHARS - NetAccessAdd(), NetApiBufferAllocate(), NetUseGetInfo(), and NetUserSetGroups(): not exported by netapi32.dll (note: these APIs are not supported) - OpenFile(): does not parse UNC names correctly - PeekMessage(): NULL hwnd causes RIP in debug windows - PlayMetaFileRecord(): handles array is corrupted - PolyPolygon(): fails with more than 16 polygons - PrintDlg(): incorrectly frees global memory, fails with MFC sample - SetClipboardData(): 32-bit memory is not freed when clipboard is emptied - SetErrorMode(): SEM_NOOPENFILEERRORBOX doesn't work, the message box still appears - SetFilePointer(): returns valid value given invalid handle - SetProp(): 17th call fails if lpsz is a string, not an atom - SetWindowLong(): GWL_USERDATA always returns 1 - TrackMenuPopup(): optional lprc parameter is not handled correctly - waveOutGetDevCaps(): WAVEOUTCAP buffer not filled correctly for SoundBlaster - waveOutWrite(): WOM_DONE messages not posted with multiple buffers and loop play * WinExec(): 16-bit apps which are launched will GP fault STATUS ====== Microsoft has confirmed these to be problems in Win32s version 1.1. Problems marked with a '-' will be corrected in Win32s version 1.15. Problems marked with a '*' will be corrected in Win32s version 1.2.