The Wine development release 5.19 is now available.
What's new in this release (see below for details): - Wine Mono engine updated to 5.1.1, with WPF text formatting support. - KERNEL32 library converted to PE. - DSS cryptographic provider. - Windowing support in the new console host. - A number of exception handling fixes. - Various bug fixes.
The source is available from the following locations:
https://dl.winehq.org/wine/source/5.x/wine-5.19.tar.xz http://mirrors.ibiblio.org/wine/source/5.x/wine-5.19.tar.xz
Binary packages for various distributions will be available from:
https://www.winehq.org/download
You will find documentation on https://www.winehq.org/documentation
You can also get the current source directly from the git repository. Check https://www.winehq.org/git for details.
Wine is available thanks to the work of many people. See the file AUTHORS in the distribution for the complete list.
----------------------------------------------------------------
Bugs fixed in 5.19 (total 27):
15437 Multiple programs using madCodeHook crash (in-memory PE image of Wine builtins vs. ELF image on disk) 29926 Multiple games need IDirectDrawStreamSample::Update() (Beach Life, The Sims Complete Collection, Risk II, Earth 2150, Need for Russia) 31342 Multiple applications need msvcirt.dll.??0ofstream@@QAE@XZ (Trespasser, Max Payne 1, 3Dmark1999 MAX, 3Dmark2000, 3Dmark2001 SE, GraphCalc, Charon) 39123 Fairy Fencer F depends on NtQuerySystemInformation(SYSTEM_INTERRUPT_INFORMATION) volatility for random number generation 45090 (nearly) every test shows a leak in kernel32/{console,term}.c 45331 Exile: Escape From the Pit crashes after splash screen 45400 eden* (VN) some font characters display with the wrong glyph (capitals/spaces) 45489 World of Warcraft needs GetRawInputBuffer 46588 Cegid Business Line installer fails in custom script action installing "BLJNR.MSI" component. 48529 Avencast: Rise of the Mage fails to launch 49172 Always true condition `code > 0xffff` in vbscript/global.c 49367 1971 Project Helios shows a black screen 49470 Silent Hill 4 crashes when a person is suppose to scream. 49549 winetricks -q dotnet45 leaves dozens of mscorsvw.exe processes 49586 valgrind shows a leak in dlls/ntdll/env.c:set_wow64_environment() 49659 Multiple games crash on launch (Mahjong Titans, Resident Evil HD Remaster, Resident Evil 0 HD Remaster) 49857 NCLauncher2: Crypto error on a successful login 49873 Warzone 2100 crashes on unimplemented function api-ms-win-crt-convert-l1-1-0.dll.strtold 49894 Regression in "kernelbase: Use conhost to handle Unix consoles." 49895 [Regression] Steam fails to load pages 49899 Multiple games need IDirectDrawMediaStream::NewSegment() implementation (The Sims Complete Collection, Earth 2150, Beach Life, Risk II, Need for Russia) 49906 Fallout New Vegas: broken gog installation 49909 Win Toolkit v.1.4.37.20 (.NET 3.5 app) crashes with wine-mono 49911 Sebastien Loeb Rally EVO 64-bit version crashes with builtin xactengine3_7 49924 IP address control does not focus its fields on focus change 49929 Game for Windows Live installer fails with 'winetricks -q gfw' 49946 Themida-packed application crashing on multi-hop import forward
----------------------------------------------------------------
Changes since 5.18:
Akihiro Sagawa (3): kernelbase: Improve Get{, Dynamic}TimeZoneInformation() performance. kernelbase: Fix copy and paste error. configure: Fix a typo in comparison.
Alexandre Julliard (25): configure: Require 64-bit compare-and-swap support from gcc. ws2_32: Retrieve the FQDN only when necessary in getaddrinfo(). wineboot: Set the computer name keys. kernel32: Remove the setting of the computer name keys. ntdll: Delay ntdll.dll loading until more initialization is done. ntdll: Use the standard code path to load ntdll.dll. ntdll: Use load_dll() to load kernel32 to support PE format. kernel32: Build with msvcrt. configure: Don't disable ntdll or kernel32 for Windows builds. bcrypt: Add a helper function to create an asymmetric key. bcrypt: Move the public key initialization to the generic code. bcrypt: Move setting a symmetric key vector to the generic code. bcrypt: Move the symmetric key initialization to the generic code. bcrypt: Add separate backend functions for destroying symmetric/asymmetric keys. bcrypt: Split the key structure into generic and backend-specific parts. bcrypt: Move the backend code to a new Unix library. bcrypt: Build with msvcrt. ntdll: Fix handle/module confusion in Unix module loading. gdi32: Move font codepage setup out of freetype.c. odbc32: Use the exported names for the implementation functions. odbc32: Move the Unix functions interface to a new Unix library. odbc32: Build with msvcrt. gdi32: Store the face filename as a DOS path. gdi32: Compare DOS filenames instead of Unix stat information for font files. gdi32: Store face data as a single binary value in the registry cache.
Alistair Leslie-Hughes (6): xactengine3_7: Explicity copy the XACT_RUNTIME_PARAMETERS members. include: Add more SCARD defines. msado15: Implement _Connection Get/Put Provider. msado15: Implement _Connection get/put Mode. msado15: Implement _Connection get/put CursorLocation. msado15: Implement _Command get/putref ActiveConnection.
Andrew Eikum (8): audioclient.idl: Declare IAudioClient2. mmdevapi: Stub implement IAudioClient2. mmdevapi: Implement IsOffloadCapable. mmdevapi: Implement SetClientProperties. audioclient.idl: Declare IAudioClient3. mmdevapi: Stub implement IAudioClient3. include: Add a few more stream categories. mmdevapi: Implement ActivateAudioInterfaceAsync.
Anton Baskanov (9): amstream: Implement IDirectDrawStreamSample::CompletionStatus. amstream: Implement IDirectDrawStreamSample::GetSampleTimes. amstream: Implement AMDirectDrawStream::BeginFlush and ::EndFlush. amstream: Implement AMDirectDrawStream::NewSegment. winegstreamer: Use RGB15/16 formats instead of BGR15/16. winegstreamer: Fix RGB565 conversion in amt_from_gst_video_info(). winegstreamer: Add a second videoconvert to handle 15/16-bit RGB formats. winegstreamer: Expose 15/16-bit RGB formats. amstream: Reference the multimedia stream in ddraw stream sample.
Arkadiusz Hiler (1): gdi32: Limit GetGlyphOutlineW(uChar) to a WORD.
Aurimas Fišeras (2): po: Update Lithuanian translation. po: Update Lithuanian translation.
Biswapriyo Nath (6): include: Set D3D_COMPILER_VERSION to 47, if not defined. include: Add the D3D12_SHADER_VERSION_TYPE enumeration. include: Add MFPMPSESSION_CREATION_FLAGS enumeration in mfidl.idl. include: Fix CancelObjectCreation name in IMFSourceResolver interface. include: Add IMFMetadata interface in mfidl.idl. include: Add IMFMetadataProvider interface in mfidl.idl.
Chao Long (1): ole32: Check for NULL parameter in ReleaseStgMedium().
Christian Costa (1): d3dx9: Ignore vertices reordering for D3DXMESHOPT_ATTRSORT in OptimizeInPlace().
Daniel Lehman (5): vcruntime140_1: Terminate on noexcept function trying to propagate exception. tzres: Add North Korea Time Zone. msxml3/tests: Add some removeNamedItem tests. msxml3: Handle namespaces in removeNamedItem. tzres: Add Cuba Time Zone.
Derek Lesho (3): winegstreamer: Add a GstPad wrapping the media source's bytestream. winegstreamer: Use decodebin to initialize media streams. winegstreamer: Implement IMFMediaStream::GetStreamDescriptor.
Dmitry Timoshkov (2): wevtsvc: Add EventLog service stub. sxs: Fix off by 1 error when allocating memory.
Esme Povirk (2): mscoree: Update Wine Mono to 5.1.1. dism: Add version resource.
François Gouget (1): d3dcompiler_43/tests: Fix the spelling of a couple of ok() messages.
Gabriel Ivăncescu (1): qedit/nullrenderer: Wait in Receive() while paused.
Gerald Pfeifer (1): winevdm: Abstract references to /dosbox.
Gijs Vermeulen (1): ucrtbase: Add [_]strtold[_l].
Hans Leidekker (13): dssenh/tests: Get rid of workarounds for old Windows versions. bcrypt: Fix buffer size query in BCryptSignHash. bcrypt: Fix buffer size query in BCryptExportKey. bcrypt: Convert legacy DSA key parameters to and from little-endian format. bcrypt: Add support for exporting legacy DSA public keys. bcrypt: Add support for importing legacy DSA public keys. dssenh: Add stub implementations for a couple of functions. dssenh: Register the DSS provider. dssenh: Implement CPAcquireContext and CPReleaseContext. dssenh: Implement CPCreateHash and CPDestroyHash. dssenh: Implement CPHashData. dssenh: Implement CPGetHashParam. dssenh: Implement CPImportKey and CPDestroyKey.
Henri Verbeet (9): include: Update the d3d12 headers from vkd3d. wined3d: Copy the correct "binding_base" size in shader_spirv_select(). wined3d: Implement rasteriser discard for the Vulkan adapter. wined3d: Initialise the list of Vulkan device extensions during adapter initialisation. wined3d: Only store unique stream output descriptions. wined3d: Implement vertex shader stream output in the SPIR-V shader backend. wined3d: Implement stream output for the Vulkan adapter. wined3d: Implement stream output queries for the Vulkan adapter. include: Update d3d12sdklayers.idl from vkd3d.
Hirofumi Katayama (1): comctl32/ipaddress: Focus first field on WM_SETFOCUS.
Huw D. M. Davies (13): include: Fix TXTVIEW_INACTIVE to be -1. riched20: Simplify FindPixelPos(). riched20: Simplify SplitByBacktracking(). riched20: Move several of the wrapping functions to use ME_Run directly. riched20: Store a ME_Paragraph ptr in the wrap context. riched20: Pass a ME_Paragraph ptr to WrapTextParagraph(). riched20: Pass a ME_Paragraph ptr to itemize_para(). riched20: Pass a ME_Paragraph ptr to shape_para(). riched20: Pass a ME_Paragraph ptr to the marking functions. riched20: Use ME_Paragraph ptrs to iterate in WrapMarkedParagraphs(). riched20: Move the marked paragraph list to a rbtree. riched20: Don't create a display context in InvalidateParagraphRange(). riched20: Use ME_Paragraph ptrs in a few of the table functions.
Jacek Caban (22): conhost: Call ensure_tty_input_thread in IOCTL_CONDRV_PEEK implementation. conhost: Clear out_size in IOCTL_CONDRV_READ_CONSOLE implementation. server: Don't propagate STATUS_PENDING in get_next_console_request request. server: Use set_active_screen_buffer for consoles attached to server. conhost: Scroll window to cursor position when needed. conhost: Don't create tty input thread if we don't have tty_input handle. kernel32/tests: Move pseudo console tests before FreeConsole. conhost: Use better default values in create_screen_buffer. kernel32/tests: Improve current console test mode. conhost: Initial support for creating console window. conhost: Pump window messages when we have a window. conhost: Import loading console config from wineconsole. conhost: Import font selection support from wineconsole. conhost: Import window state update from wineconsole. conhost: Update window config in ioctl handlers when needed. conhost: Support painting screen buffer. conhost: Rename version.rc to conhost.rc. conhost: Import menus from wineconsole. conhost: Import keyboard event handling from wineconsole. conhost: Import mouse event handling from wineconsole. conhost: Import config dialog from wineconsole. conhost: Import menu handling from wineconsole.
Julian Rüger (1): po: Update German translation.
Józef Kucia (1): include: Move the ID3D12Debug interface to d3d12sdklayers.idl.
Kevin Puetz (8): oleaut32/tests: Include [dual] interface in test_dump_typelib. oleaut32: FUNC_DISPATCH from dispinterface should have oVft == 0. oleaut32: Overwrite return type when rewriting FUNCDESC to FUNC_DISPATCH. oleaut32: Omit [lcid] parameter when rewriting FUNCDESC to FUNC_DISPATCH. oleaut32: Make GetNames omit same parameters as GetFuncDesc. oleaut32/tests: Add tests for rewriting FUNCDESC to FUNC_DISPATCH. include: Fix undefined char16_t in C11. vbscript: Implement redim preserve.
Liam Middlebrook (2): winevulkan: Add --xml argument to make_vulkan. winevulkan: Update to VK spec version 1.2.155.
Louis Lenders (2): ntdll: Bump Win 10 version to 17763. kernelbase: Return S_OK in WerSetFlags.
Martin Storsjo (6): winebuild: Add unwind info to arm64 syscall stubs. msvcrt: Hook up __C_specific_handler for arm64. ntdll: Unwind to the LR register if no unwind info is available. ntdll: Restore the original Lr value when unwinding through raise_func_trampoline on arm64. ntdll: Clear ExceptionFlags on arm64 after running an exception handler. ntdll: Fix nested exceptions on arm64.
Matteo Bruni (2): winex11: Fix monitor_id_fmtW variable name typo. winex11: Add DriverDate registry property to display adapters.
Michael Stefaniuc (80): dswave: Simplify the stub WAVE IPersistStream_Load(). gdiplus: Remove superfluous cast to self. shell32: Remove superfluous cast to self. shlwapi: Remove superfluous cast to self. oleaut32: Remove superfluous casts. atl80/tests:Use wide-char string literals. browseui: Use wide-char string literals. d2d1/tests:Use wide-char string literals. comcat/tests: Use wide-char string literals. comsvcs/tests: Use wide-char string literals. d3dx10/tests: Use wide-char string literals. d3dx11/tests: Use wide-char string literals. d3dx9/tests: Use wide-char string literals. dhcpcsvc/tests: Use wide-char string literals. faultrep: Use wide-char string literals. dplayx: Use wide-char string literals. fltmgr.sys: Use wide-char string literals. fntcache: Use wide-char string literals. httpapi: Use wide-char string literals. http.sys: Use wide-char string literals. imaadp32.acm: Use wide-char string literals. infosoft/tests: Use wide-char string literals. jsproxy: Use wide-char string literals. mciqtz32: Use wide-char string literals. msadp32.acm: Use wide-char string literals. msftedit: Use wide-char string literals. explorerframe: Use wide-char string literals. mciavi32: Use wide-char string literals. hlink: Use wide-char string literals. mcicda: Use wide-char string literals. mciseq: Use wide-char string literals. dxdiagn/tests: Use wide-char string literals. mciwave: Use wide-char string literals. midimap: Use wide-char string literals. mlang: Use wide-char string literals. msacm32.drv: Use wide-char string literals. msdmo/tests: Use wide-char string literals. msg711.acm: Use wide-char string literals. netcfgx/tests: Use wide-char string literals. propsys: Use wide-char string literals. slc/tests: Use wide-char string literals. virtdisk/tests: Use wide-char string literals. wiaservc: Use wide-char string literals. xinput1_3: Use wide-char string literals. xolehlp: Use wide-char string literals. combase: Use wide-char string literals. combase/tests: Use wide-char string literals. conhost: Correct whitespace placement in a TRACE(). packager: Use wide-char string literals. attrib: Use wide-char string literals. cabarc: Use wide-char string literals. clock: Use wide-char string literals. control: Use wide-char string literals. dxdiag: Use wide-char string literals. extrac32: Use wide-char string literals. hostname: Use wide-char string literals. net: Use wide-char string literals. schtasks: Use wide-char string literals. vbscript/tests: Use wide-char string literals. sc: Use wide-char string literals. taskkill: Use wide-char string literals. view: Use wide-char string literals. winemine: Use wide-char string literals. advpack: Don't use sizeof to calculate the length of a WCHAR string. advpack: Use wide-char string literals. atl: Use wide-char string literals. quartz: Use wide-char string literals. dinput8/tests: Use wide-char string literals. dinput/tests: Use wide-char string literals. joy.cpl: Use wide-char string literals. avifil32: Use wide-char string literals. msiexec: Use wide-char string literals. bcrypt/tests: Use wide-char string literals. msvcp110/tests: Use wide-char string literals. progman: Use wide-char string literals. rundll32: Use wide-char string literals. regsvr32: Use wide-char string literals. eject: Use wide-char string literals. credui: Use wide-char string literals. dpvoice: Use wide-char string literals.
Myah Caron (1): ntoskrnl.exe: Stub MmProtectMdlSystemAddress.
Nikolay Sivov (53): server: Inherit standard handles together with explicit handle list. combase: Remove dead assignment (Coverity). mfreadwrite/tests: Add return value test (Coverity). include: Add DWRITE_MAKE_FONT_AXIS_TAG macro. evr/mixer: Store input type attributes. evr/mixer: Add IMFQualityAdvise stub. evr/presenter: Add IMFGetService stub. evr/presenter: Create device manager for the presenter. evr/presenter: Create d3d device on presenter creation. evr/presenter: Expose IMFVideoDisplayControl as a service. evr/presenter: Keep video window handle. evr/presenter: Maintain video position rectangles. evr/presenter: Add missing method stubs. msxml3/tests: Use wide string literals in more tests. msxml3/tests: Fix tests failures with unreachable network resources. comctl32/tests: Remove some workarounds from ListView tests. rtworkq: Add remaining queue management stubs. evr/presenter: Validate mixer's device id. mf: Implement MFCreateVideoRenderer(). evr/presenter: Better validate input rectangles in SetVideoPosition(). evr/presenter: Check video window in SetVideoPosition(). evr/presenter: Set VIDEO_ZOOM_RECT on SetVideoPosition(). oleaut32: Do not forward IErrorInfo functions. msxml3/tests: Use wide string literals in tests. comctl32/tests: Remove skips from DPA tests. ucrtbase: Add wcstold()/_wcstold_l(). msvcrt: Correct spec entries for _wcstod_l(). evr/presenter: Return default flags for GetRenderingPrefs(). evr/presenter: Check for null argument in GetVideoWindow(). evr/presenter: Validate passed handle on SetVideoWindow(). evr/mixer: Keep per-stream output rectangles. evr/mixer: Keep per-stream zorder configuration. evr/tests: Add some tests for presenter's GetNativeVideoSize(). evr/presenter: Request original reference frame size when attaching the mixer. evr/presenter: Update cached native size on format negotiation. evr/presenter: Initialize aspect ratio mode. mfplat: Added MFBeginRegisterWorkQueueWithMMCSS(). mf/evr: Partially implement InitializeRenderer(). mf/evr: Provide device manager to the mixer. mf/evr: Add IMFGetService stub for the streams. mf/evr: Create sample allocator for each stream. evr/allocator: Implement SetCallback(). evr/allocator: Implement GetFreeSampleCount(). comctl32/ipaddress: Select field contents on IPM_SETFOCUS. comctl32/ipaddress: Fix IPM_SETFOCUS return value. comctl32/ipaddress: Fix IPM_CLEARADDRESS return value. comctl32/tests: Fix loop bounds. mf/evr: Implement GetMediaTypeCount(). mf/evr: Implement GetMediaTypeByIndex(). mf/evr: Set stream media type to the mixer. evr/mixer: Add support for MFT_SET_TYPE_TEST_ONLY for inputs. mf/evr: Implement IsMediaTypeSupported(). nls: Build codepage data for CP708.
Owen Rudge (2): wsdapi: Use wide character string literals. wsdapi/tests: Use wide character string literals.
Paul Gofman (14): wined3d: Fix 3d texture layer count for bind tracking. wined3d: Use partial bind counts instead of partial bind flags. kernel32/tests: Fix fiber test errors on newer Win10. kernelbase: Move FlsAlloc() implementation to ntdll.RtlFlsAlloc(). kernelbase: Move FlsFree() implementation to ntdll.RtlFlsFree(). kernelbase: Move FlsSetValue() implementation to ntdll.RtlFlsSetValue(). kernelbase: Move FlsGetValue() implementation to ntdll.RtlFlsGetValue(). server: Check reply size when copying key full name. server: Remove leftover dump in key_get_full_name(). ntdll: Introduce RtlProcessFlsData() and use it for FLS data destruction. ntdll: Reimplement FLS data management on top of up to date structures. kernel32/tests: Test FLS data storage structures. ntdll: Allocate TEB FLS data in LdrInitializeThunk(). ntdll: Don't use PEB lock for FLS data.
Piotr Caban (7): imm32: Exit early in ImmTranslateMessage when there was no new input. winmm: Remove unneeded TIME_TimeToDie, the thread ends when list is empty. winmm: Avoid allocations in timeSetEvent. winmm: Destroy timer after calling callback. winmm: Add more timer tests. msvcrt: Terminate on noexcept function trying to propagate exception (i386). msvcrt: Terminate on noexcept function trying to propagate exception (x86_64).
Robert Wilhelm (3): vbscript: Global_Split free delimiter only if it was allocated. vbscript: Allow public and private declarations in global scope. vbscript: Fix return value of lookup_identifier().
Roberto Pungartnik (3): po: Brazilian Portuguese update. po: Update Spanish translation. po: Update Spanish translation.
Rémi Bernon (7): wbemprox: Set variant type to VT_NULL if BSTR is NULL. wbemprox: Report 4095MiB video memory if it overflows. dxgi/tests: Check that the last adapter is always WARP. include: Split objidl.idl to objidlbase.idl. include: Add IAgileObject to objidlbase.idl. winex11.drv: Split clip cursor message in notify/request. winex11.drv: Forward clip_fullscreen_window to foreground thread.
Sven Baars (3): shell32: Fix a leak on error path (Coverity). ntdll: Fix a memory leak (Valgrind). vbscript: Avoid double frees on error path (Coverity).
Zebediah Figura (37): wined3d: Free cached depth/stencil states in wined3d_device_uninit_3d(). wined3d: Move the depth write enable state to wined3d_depth_stencil_state. wined3d: Move the stencil enable state to wined3d_depth_stencil_state. wined3d: Move the stencil read mask to wined3d_depth_stencil_state. wined3d: Move the stencil write mask to wined3d_depth_stencil_state. ws2_32: Reimplement WSAEnumProtocols() using a flat array of WSA_PROTOCOLINFO structures. ws2_32: Look for supported socket parameters if any parameters to WSASocket() are zero. ws2_32: Add protocol information for TCP and UDP over IPv6. ws2_32: Reimplement ws_protocol_info() using the supported_protocols array. netprofm: Do not use the WS_ prefix. wined3d: Move the stencil function to wined3d_depth_stencil_state. wined3d: Move the stencil pass operation to wined3d_depth_stencil_state. wined3d: Move the stencil fail operation to wined3d_depth_stencil_state. wined3d: Move the stencil depth fail operation to wined3d_depth_stencil_state. wined3d: Move the depth function to wined3d_depth_stencil_state. wined3d: Introduce WINED3DFMT_FLAG_UNORDERED_ACCESS. wined3d: Check for UAV support in wined3d_check_device_format. d3d11: Report D3D11_FORMAT_SUPPORT_TYPED_UNORDERED_ACCESS_VIEW in CheckFormatSupport(). d3d11/tests: Add a test for deferred context state management. msdmo: Also handle ERROR_SUCCESS with nonzero size from RegQueryValueExW(). ws2_32: Pass Win32 socket types to the server. ws2_32: Set default socket options in the server. server: Return Win32 socket types from get_socket_info. server: Remove redundant calls to sock_reselect(). d3d11/tests: Add a test for rendering with deferred contexts. wined3d: Correct off-by-one errors when comparing against ARRAY_SIZE. server: Introduce IOCTL_AFD_ACCEPT. ws2_32: Use IOCTL_AFD_ACCEPT. server: Remove the no longer used accept_socket request. server: Introduce IOCTL_AFD_ACCEPT_INTO. ws2_32: Use IOCTL_AFD_ACCEPT_INTO. server: Remove the no longer used accept_into_socket request. ws2_32/tests: Avoid using skip() or trace() for tests that should not fail. ws2_32/tests: Make the tests less verbose by default. ws2_32/tests: Link directly to more functions. ws2_32/tests: Avoid ok(0, ...) where the condition can be checked directly. qedit/tests: Add some basic tests for null renderer connection and streaming.
Zhiyi Zhang (8): winemac.drv: Fix monitor_id_fmtW variable name typo. dxgi/tests: Run test_get_containing_output() on d3d12 as well. dxgi/tests: Run test_window_association() on d3d12 as well. dxgi/tests: Run test_default_fullscreen_target_output() on d3d12 as well. dxgi: Support creating a fullscreen swapchain on d3d12. dxgi: Retrieve d3d12 swapchain fullscreen state from wined3d. dxgi: Support Alt+Enter for d3d12 swapchains. dxgi: Update swapchain containing output after Alt+Enter was used to exit fullscreen.
Ziqing Hui (4): d3dx10: Move D3DX10GetImageInfo*() to texture.c. d3dx10: Implement D3DX10GetImageInfoFromFileW(). d3dx10/tests: Add tests for D3DX10GetImageInfoFromFileA(). d3dx10: Implement D3DX10GetImageInfoFromFileA().
-- Alexandre Julliard [email protected]