Implement GetVersionInfoFromImage.
Add missing prototypes to w32api.
Modified: trunk/reactos/include/wine/setupapi.h
Modified: trunk/reactos/lib/setupapi/misc.c
Modified: trunk/reactos/lib/setupapi/setupapi.spec
Modified: trunk/reactos/w32api/include/setupapi.h

Modified: trunk/reactos/include/wine/setupapi.h
--- trunk/reactos/include/wine/setupapi.h	2005-07-02 17:57:51 UTC (rev 16381)
+++ trunk/reactos/include/wine/setupapi.h	2005-07-02 19:26:43 UTC (rev 16382)
@@ -683,6 +683,7 @@
 BOOL     WINAPI EnablePrivilege(PCWSTR lpPrivilegeName, BOOL bEnable);
 BOOL     WINAPI FileExists(PCWSTR lpFileName, PWIN32_FIND_DATAW lpFileFindData);
 DWORD    WINAPI GetSetFileTimestamp(PCWSTR, PFILETIME, PFILETIME, PFILETIME, BOOLEAN);
+BOOL     WINAPI GetVersionInfoFromImage(LPWSTR, PULARGE_INTEGER, LPWORD);
 void     WINAPI InstallHinfSectionA( HWND hwnd, HINSTANCE handle, PCSTR cmdline, INT show );
 void     WINAPI InstallHinfSectionW( HWND hwnd, HINSTANCE handle, PCWSTR cmdline, INT show );
 #define         InstallHinfSection WINELIB_NAME_AW(InstallHinfSection)

Modified: trunk/reactos/lib/setupapi/misc.c
--- trunk/reactos/lib/setupapi/misc.c	2005-07-02 17:57:51 UTC (rev 16381)
+++ trunk/reactos/lib/setupapi/misc.c	2005-07-02 19:26:43 UTC (rev 16382)
@@ -25,6 +25,7 @@
 #include "wingdi.h"
 #include "winuser.h"
 #include "winreg.h"
+#include "winver.h"
 #include "setupapi.h"
 
 #include "wine/unicode.h"
@@ -1090,3 +1091,73 @@
 
     MoveWindow(hwnd, posX, posY, nWindowHeight, nWindowWidth, 0);
 }
+
+
+/**************************************************************************
+ * GetVersionInfoFromImage [SETUPAPI.@]
+ *
+ * Retrieves version information for a given file.
+ *
+ * PARAMS
+ *     lpFileName       [I] File name
+ *     lpFileVersion    [O] Pointer to the full file version
+ *     lpVersionVarSize [O] Pointer to the size of the variable version
+ *                          information
+ *
+ * RETURNS
+ *     Success: TRUE
+ *     Failure: FALSE
+ */
+BOOL WINAPI
+GetVersionInfoFromImage(LPWSTR lpFileName,
+                        PULARGE_INTEGER lpFileVersion,
+                        LPWORD lpVersionVarSize)
+{
+    DWORD dwHandle;
+    DWORD dwSize;
+    LPVOID lpInfo;
+    UINT uSize;
+    VS_FIXEDFILEINFO *lpFixedInfo;
+    LPWORD lpVarSize;
+
+    dwSize = GetFileVersionInfoSizeW(lpFileName, &dwHandle);
+    if (dwSize == 0)
+        return FALSE;
+
+    lpInfo = MyMalloc(dwSize);
+    if (lpInfo == NULL)
+        return FALSE;
+
+    if (!GetFileVersionInfoW(lpFileName, 0, dwSize, lpInfo))
+    {
+        MyFree(lpInfo);
+        return FALSE;
+    }
+
+    if (!VerQueryValueW(lpInfo, L"\\",
+                        (LPVOID*)&lpFixedInfo, &uSize))
+    {
+        MyFree(lpInfo);
+        return FALSE;
+    }
+
+    lpFileVersion->LowPart = lpFixedInfo->dwFileVersionLS;
+    lpFileVersion->HighPart = lpFixedInfo->dwFileVersionMS;
+
+    *lpVersionVarSize = 0;
+    if (!VerQueryValueW(lpInfo, L"\\VerFileInfo\\Translation",
+                        (LPVOID*)&lpVarSize, &uSize))
+    {
+        MyFree(lpInfo);
+        return TRUE;
+    }
+
+    if (uSize >= 4)
+    {
+        *lpVersionVarSize = *lpVarSize;
+    }
+
+    MyFree(lpInfo);
+
+    return TRUE;
+}

Modified: trunk/reactos/lib/setupapi/setupapi.spec
--- trunk/reactos/lib/setupapi/setupapi.spec	2005-07-02 17:57:51 UTC (rev 16381)
+++ trunk/reactos/lib/setupapi/setupapi.spec	2005-07-02 19:26:43 UTC (rev 16382)
@@ -206,7 +206,7 @@
 @ stub GetCurrentDriverSigningPolicy
 @ stub GetNewInfName
 @ stdcall GetSetFileTimestamp(wstr ptr ptr ptr long)
-@ stub GetVersionInfoFromImage
+@ stdcall GetVersionInfoFromImage(wstr ptr ptr)
 @ stub InfIsFromOemLocation
 @ stub InstallCatalog
 @ stdcall InstallHinfSection(long long str long) InstallHinfSectionA

Modified: trunk/reactos/w32api/include/setupapi.h
--- trunk/reactos/w32api/include/setupapi.h	2005-07-02 17:57:51 UTC (rev 16381)
+++ trunk/reactos/w32api/include/setupapi.h	2005-07-02 19:26:43 UTC (rev 16382)
@@ -1038,13 +1038,27 @@
 
 
 WINSETUPAPI LONG WINAPI AddTagToGroupOrderList(PCWSTR, DWORD, DWORD);
+WINSETUPAPI VOID WINAPI AssertFail(LPSTR, UINT, LPSTR);
+WINSETUPAPI DWORD WINAPI CaptureAndConvertAnsiArg(PCSTR, PWSTR*);
+WINSETUPAPI DWORD WINAPI CaptureStringArg(PCWSTR, PWSTR*);
 WINSETUPAPI VOID WINAPI CenterWindowRelativeToParent(HWND);
+WINSETUPAPI BOOL WINAPI ConcatenatePaths(LPWSTR, LPCWSTR, DWORD, LPDWORD);
+WINSETUPAPI BOOL WINAPI DelayedMove(PCWSTR, PCWSTR);
+WINSETUPAPI BOOL WINAPI DoesUserHavePrivilege(PCWSTR);
 WINSETUPAPI PWSTR WINAPI DuplicateString(PCWSTR);
+WINSETUPAPI BOOL WINAPI EnablePrivilege(PCWSTR, BOOL);
+WINSETUPAPI BOOL WINAPI FileExists(PCWSTR, PWIN32_FIND_DATAW);
+WINSETUPAPI DWORD WINAPI GetSetFileTimestamp(PCWSTR, PFILETIME, PFILETIME, PFILETIME, BOOLEAN);
+WINSETUPAPI BOOL WINAPI GetVersionInfoFromImage(LPWSTR, PULARGE_INTEGER, LPWORD);
 WINSETUPAPI BOOL WINAPI IsUserAdmin(VOID);
+WINSETUPAPI PWSTR WINAPI MultiByteToUnicode(PCSTR, UINT);
 WINSETUPAPI VOID WINAPI MyFree(PVOID);
+WINSETUPAPI PWSTR WINAPI MyGetFileTitle(PCWSTR);
 WINSETUPAPI PVOID WINAPI MyMalloc(DWORD);
 WINSETUPAPI PVOID WINAPI MyRealloc(PVOID, DWORD);
+WINSETUPAPI DWORD WINAPI OpenAndMapForRead(PCWSTR, PDWORD, PHANDLE, PHANDLE, PVOID*);
 WINSETUPAPI LONG WINAPI QueryRegistryValue(HKEY, PCWSTR, PBYTE*, PDWORD, PDWORD);
+WINSETUPAPI DWORD WINAPI RetreiveFileSecurity(PCWSTR, PSECURITY_DESCRIPTOR*);
 
 WINSETUPAPI BOOL WINAPI SetupAddInstallSectionToDiskSpaceListA(HDSKSPC,HINF,HINF,PCSTR,PVOID,UINT);
 WINSETUPAPI BOOL WINAPI SetupAddInstallSectionToDiskSpaceListW(HDSKSPC,HINF,HINF,PCWSTR,PVOID,UINT);
@@ -1332,6 +1346,8 @@
 WINSETUPAPI VOID WINAPI SetupTermDefaultQueueCallback(PVOID);
 WINSETUPAPI BOOL WINAPI SetupTerminateFileLog(HSPFILELOG);
 
+WINSETUPAPI DWORD WINAPI StampFileSecurity(PCWSTR, PSECURITY_DESCRIPTOR);
+
 WINSETUPAPI DWORD  WINAPI StringTableAddString(HSTRING_TABLE, LPWSTR, DWORD);
 WINSETUPAPI VOID   WINAPI StringTableDestroy(HSTRING_TABLE);
 WINSETUPAPI HSTRING_TABLE WINAPI StringTableInitialize(VOID);
@@ -1340,7 +1356,11 @@
 WINSETUPAPI BOOL   WINAPI StringTableStringFromIdEx(HSTRING_TABLE, DWORD, LPWSTR, LPDWORD);
 WINSETUPAPI VOID   WINAPI StringTableTrim(HSTRING_TABLE);
 
+WINSETUPAPI DWORD WINAPI TakeOwnershipOfFile(PCWSTR);
+WINSETUPAPI PSTR WINAPI UnicodeToMultiByte(PCWSTR lpUnicodeStr, UINT uCodePage);
+WINSETUPAPI BOOL WINAPI UnmapAndCloseFile(HANDLE, HANDLE, PVOID);
 
+
 /* for backward compatability */
 #define SetupDiCreateInterfaceDeviceW	SetupDiCreateDeviceInterfaceW
 #define SetupDiCreateInterfaceDeviceRegKeyW	SetupDiCreateDeviceInterfaceRegKeyW