Implement GetVersionInfoFromImage.

Add missing prototypes to w32api.

svn path=/trunk/; revision=16382
This commit is contained in:
Eric Kohl 2005-07-02 19:26:43 +00:00
parent 5f53398bd1
commit 396b274742
4 changed files with 93 additions and 1 deletions

View file

@ -683,6 +683,7 @@ PWSTR WINAPI DuplicateString(PCWSTR lpSrc);
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)

View file

@ -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 @@ CenterWindowRelativeToParent(HWND hwnd)
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;
}

View file

@ -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

View file

@ -1038,13 +1038,27 @@ typedef SP_BACKUP_QUEUE_PARAMS_A SP_BACKUP_QUEUE_PARAMS,
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 BOOL WINAPI SetupSetSourceListW(DWORD,PCWSTR*,UINT);
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,6 +1356,10 @@ WINSETUPAPI LPWSTR WINAPI StringTableStringFromId(HSTRING_TABLE, DWORD);
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