From 396b274742dc9fdee4ff016393ff5847c0c6691d Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sat, 2 Jul 2005 19:26:43 +0000 Subject: [PATCH] Implement GetVersionInfoFromImage. Add missing prototypes to w32api. svn path=/trunk/; revision=16382 --- reactos/include/wine/setupapi.h | 1 + reactos/lib/setupapi/misc.c | 71 ++++++++++++++++++++++++++++++ reactos/lib/setupapi/setupapi.spec | 2 +- reactos/w32api/include/setupapi.h | 20 +++++++++ 4 files changed, 93 insertions(+), 1 deletion(-) diff --git a/reactos/include/wine/setupapi.h b/reactos/include/wine/setupapi.h index 94ada2083d6..720f0bd662c 100644 --- a/reactos/include/wine/setupapi.h +++ b/reactos/include/wine/setupapi.h @@ -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) diff --git a/reactos/lib/setupapi/misc.c b/reactos/lib/setupapi/misc.c index 5ff66c99e19..6f08dc88cff 100644 --- a/reactos/lib/setupapi/misc.c +++ b/reactos/lib/setupapi/misc.c @@ -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; +} diff --git a/reactos/lib/setupapi/setupapi.spec b/reactos/lib/setupapi/setupapi.spec index bfa968c875e..651db1a273e 100644 --- a/reactos/lib/setupapi/setupapi.spec +++ b/reactos/lib/setupapi/setupapi.spec @@ -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 diff --git a/reactos/w32api/include/setupapi.h b/reactos/w32api/include/setupapi.h index 8792b69460d..d86376f7891 100644 --- a/reactos/w32api/include/setupapi.h +++ b/reactos/w32api/include/setupapi.h @@ -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