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.


