diff -u cvs/wine/dlls/gdi/Makefile.in wine/dlls/gdi/Makefile.in
--- cvs/wine/dlls/gdi/Makefile.in	Sat Dec  2 17:08:47 2000
+++ wine/dlls/gdi/Makefile.in	Thu Feb 15 20:01:12 2001
@@ -14,6 +14,9 @@
 	thunk.c \
 	wing.c
 
+RC_SRCS= \
+	rsrc.rc
+
 GLUE = printdrv.c thunk.c
 
 EXTRA_OBJS = \
diff -u cvs/wine/dlls/gdi/gdi32.spec wine/dlls/gdi/gdi32.spec
--- cvs/wine/dlls/gdi/gdi32.spec	Fri Dec 29 15:12:07 2000
+++ wine/dlls/gdi/gdi32.spec	Thu Feb 15 20:00:12 2001
@@ -1,6 +1,7 @@
 name    gdi32
 type    win32
 init    MAIN_GdiInit
+rsrc	rsrc.res
 
 import	advapi32.dll
 import	kernel32.dll
diff -u cvs/wine/dlls/gdi/rsrc.rc wine/dlls/gdi/rsrc.rc
--- /dev/null	Wed May  6 05:32:27 1998
+++ wine/dlls/gdi/rsrc.rc	Thu Feb 15 20:02:15 2001
@@ -0,0 +1 @@
+#include "version_rc.rc"
diff -u cvs/wine/dlls/gdi/version_rc.rc wine/dlls/gdi/version_rc.rc
--- /dev/null	Wed May  6 05:32:27 1998
+++ wine/dlls/gdi/version_rc.rc	Thu Feb 15 20:03:15 2001
@@ -0,0 +1,31 @@
+#include "winver.h"
+
+VS_VERSION_INFO VERSIONINFO
+FILEVERSION    1,0,0,0
+PRODUCTVERSION 1,0,0,0
+FILEFLAGSMASK  0
+FILEFLAGS      0
+FILEOS         VOS_UNKNOWN
+FILETYPE       VFT_DLL
+FILESUBTYPE    VFT2_UNKNOWN
+{
+    BLOCK "StringFileInfo"
+    {
+	BLOCK "040904B0" /* LANG_ENGLISH/SUBLANG_DEFAULT, CP_WINUNICODE */
+	{
+	    VALUE "CompanyName", "Wine Team"
+	    VALUE "FileDescription", "Wine core dll"
+	    VALUE "FileVersion", "1.0"
+	    VALUE "InternalName", "gdi32.dll"
+	    VALUE "LegalCopyright", "Copyright (c) 1993-2001 the Wine project authors " \
+				    "(see the file AUTHORS for a complete list)"
+	    VALUE "OriginalFilename", "gdi32.dll"
+	    VALUE "ProductName", "Wine"
+	    VALUE "ProductVersion", "1.0"
+	}
+    }
+    BLOCK "VarFileInfo"
+    {
+	VALUE "Translation", 0x0409, 0x04B0 /* LANG_ENGLISH/SUBLANG_DEFAULT, CP_WINUNICODE */
+    }
+}
diff -u cvs/wine/dlls/kernel/kernel32.spec wine/dlls/kernel/kernel32.spec
--- cvs/wine/dlls/kernel/kernel32.spec	Thu Feb 15 19:19:39 2001
+++ wine/dlls/kernel/kernel32.spec	Thu Feb 15 22:18:59 2001
@@ -973,6 +973,7 @@
 @ stdcall LoadModule16(str long) LoadModule16
 @ stdcall LoadResource16(long long) LoadResource16
 @ stdcall LockResource16(long) LockResource16
+@ stdcall SizeofResource16(long long) SizeofResource16
 @ stdcall WinExec16(str long) WinExec16
 @ stdcall GlobalFlags16(long) GlobalFlags16
 @ stdcall GlobalReAlloc16(long long long) GlobalReAlloc16
diff -u cvs/wine/dlls/version/info.c wine/dlls/version/info.c
--- cvs/wine/dlls/version/info.c	Thu Nov 30 16:08:56 2000
+++ wine/dlls/version/info.c	Thu Feb 15 22:59:06 2001
@@ -260,6 +260,152 @@
                 info16->wLength, info16, child16 );
 }
 
+/***********************************************************************
+ *           VERSION_GetFileVersionInfo_PE             [internal]
+ *
+ *    NOTE: returns size of the PE VERSION resource.
+ *    FIXME: handle is not used.
+ */
+static DWORD WINAPI VERSION_GetFileVersionInfo_PE( LPCSTR filename, LPDWORD handle,
+                                    DWORD datasize, LPVOID data )
+{
+    VS_FIXEDFILEINFO *vffi;
+    DWORD len;
+    BYTE *buf;
+    HMODULE hModule;
+    HRSRC hRsrc;
+    HGLOBAL hMem;
+
+    TRACE("(%s,%p)\n", debugstr_a(filename), handle );
+
+    hModule = GetModuleHandleA(filename);
+    if(!hModule)
+	hModule = LoadLibraryExA(filename, 0, LOAD_LIBRARY_AS_DATAFILE);
+    if(!hModule)
+    {
+	WARN("Could not load %s\n", debugstr_a(filename));
+	return 0;
+    }
+    hRsrc = FindResourceW(hModule,
+			  MAKEINTRESOURCEW(VS_VERSION_INFO),
+			  MAKEINTRESOURCEW(VS_FILE_INFO));
+    if(!hRsrc)
+    {
+	WARN("Could not find VS_VERSION_INFO in %s\n", debugstr_a(filename));
+	FreeLibrary(hModule);
+	return 0;
+    }
+    len = SizeofResource(hModule, hRsrc);
+    hMem = LoadResource(hModule, hRsrc);
+    if(!hMem)
+    {
+	WARN("Could not load VS_VERSION_INFO from %s\n", debugstr_a(filename));
+	FreeLibrary(hModule);
+	return 0;
+    }
+    buf = LockResource(hMem);
+
+    vffi = (VS_FIXEDFILEINFO *)VersionInfo32_Value( (VS_VERSION_INFO_STRUCT32 *)buf );
+
+    if ( vffi->dwSignature != VS_FFI_SIGNATURE )
+    {
+        WARN("vffi->dwSignature is 0x%08lx, but not 0x%08lx!\n",
+                   vffi->dwSignature, VS_FFI_SIGNATURE );
+        len = 0;
+	goto END;
+    }
+
+    if ( TRACE_ON(ver) )
+        print_vffi_debug( vffi );
+
+    if(data)
+    {
+	if(datasize >= len)
+	    memcpy(data, buf, len);
+	else
+	    len = 0;
+    }
+END:
+    FreeResource(hMem);
+    FreeLibrary(hModule);
+
+    return len;
+}
+
+/***********************************************************************
+ *           VERSION_GetFileVersionInfo_16             [internal]
+ *
+ *    NOTE: returns size of the 16-bit VERSION resource.
+ *    FIXME: handle is not used.
+ */
+static DWORD WINAPI VERSION_GetFileVersionInfo_16( LPCSTR filename, LPDWORD handle,
+                                    DWORD datasize, LPVOID data )
+{
+    VS_FIXEDFILEINFO *vffi;
+    DWORD len;
+    BYTE *buf;
+    HMODULE16 hModule;
+    HRSRC16 hRsrc;
+    HGLOBAL16 hMem;
+
+    TRACE("(%s,%p)\n", debugstr_a(filename), handle );
+
+    hModule = GetModuleHandle16(filename);
+    if(hModule < 32)
+	hModule = LoadLibrary16(filename);
+    if(hModule < 32)
+    {
+	WARN("Could not load %s\n", debugstr_a(filename));
+	return 0;
+    }
+    hRsrc = FindResource16(hModule,
+			  MAKEINTRESOURCEA(VS_VERSION_INFO),
+			  MAKEINTRESOURCEA(VS_FILE_INFO));
+    if(!hRsrc)
+    {
+	WARN("Could not find VS_VERSION_INFO in %s\n", debugstr_a(filename));
+	FreeLibrary16(hModule);
+	return 0;
+    }
+    len = SizeofResource16(hModule, hRsrc);
+    hMem = LoadResource16(hModule, hRsrc);
+    if(!hMem)
+    {
+	WARN("Could not load VS_VERSION_INFO from %s\n", debugstr_a(filename));
+	FreeLibrary16(hModule);
+	return 0;
+    }
+    buf = LockResource16(hMem);
+
+    if(!VersionInfoIs16(buf))
+	goto END;
+
+    vffi = (VS_FIXEDFILEINFO *)VersionInfo16_Value( (VS_VERSION_INFO_STRUCT16 *)buf );
+
+    if ( vffi->dwSignature != VS_FFI_SIGNATURE )
+    {
+        WARN("vffi->dwSignature is 0x%08lx, but not 0x%08lx!\n",
+                   vffi->dwSignature, VS_FFI_SIGNATURE );
+        len = 0;
+	goto END;
+    }
+
+    if ( TRACE_ON(ver) )
+        print_vffi_debug( vffi );
+
+    if(data)
+    {
+	if(datasize >= len)
+	    memcpy(data, buf, len);
+	else
+	    len = 0;
+    }
+END:
+    FreeResource16(hMem);
+    FreeLibrary16(hModule);
+
+    return len;
+}
 
 /***********************************************************************
  *           GetFileVersionInfoSizeA         [VERSION.2]
@@ -272,6 +418,11 @@
 
     TRACE("(%s,%p)\n", debugstr_a(filename), handle );
 
+    len = VERSION_GetFileVersionInfo_PE(filename, handle, 0, NULL);
+    if(len) return len;
+    len = VERSION_GetFileVersionInfo_16(filename, handle, 0, NULL);
+    if(len) return len;
+
     len = GetFileResourceSize16( filename,
                                  MAKEINTRESOURCEA(VS_FILE_INFO),
                                  MAKEINTRESOURCEA(VS_VERSION_INFO),
@@ -329,11 +480,16 @@
     TRACE("(%s,%ld,size=%ld,data=%p)\n",
                 debugstr_a(filename), handle, datasize, data );
 
+    if(VERSION_GetFileVersionInfo_PE(filename, &handle, datasize, data))
+	goto DO_CONVERT;
+    if(VERSION_GetFileVersionInfo_16(filename, &handle, datasize, data))
+	goto DO_CONVERT;
+
     if ( !GetFileResource16( filename, MAKEINTRESOURCEA(VS_FILE_INFO),
                                        MAKEINTRESOURCEA(VS_VERSION_INFO),
                                        handle, datasize, data ) )
         return FALSE;
-
+DO_CONVERT:
     if (    datasize >= sizeof(VS_VERSION_INFO_STRUCT16)
          && datasize >= ((VS_VERSION_INFO_STRUCT16 *)data)->wLength  
          && !VersionInfoIs16( data ) )
