| 1 | /* $Id: version.h,v 1.4 1999-08-12 23:33:38 phaller Exp $ */ | 
|---|
| 2 |  | 
|---|
| 3 | /* Definitions for the VERsion infolibrary (VER.DLL) | 
|---|
| 4 | * | 
|---|
| 5 | * Copyright 1996 Marcus Meissner | 
|---|
| 6 | */ | 
|---|
| 7 |  | 
|---|
| 8 | #ifndef __ODIN_VERSION_H | 
|---|
| 9 | #define __ODIN_VERSION_H | 
|---|
| 10 |  | 
|---|
| 11 | #include <windef.h> | 
|---|
| 12 | #include <wctype.h> | 
|---|
| 13 |  | 
|---|
| 14 | /* resource ids for different version infos */ | 
|---|
| 15 | /* These are internal resources for win16, but simple numbers in win32 */ | 
|---|
| 16 | /* All win32 defines should be moved to winver.h */ | 
|---|
| 17 | #define  VS_FILE_INFO16                  MAKEINTRESOURCE16(16) | 
|---|
| 18 | #define  VS_VERSION_INFO16               MAKEINTRESOURCE16(1) | 
|---|
| 19 | #define  VS_USER_INFO16                  MAKEINTRESOURCE16(100) | 
|---|
| 20 |  | 
|---|
| 21 | #define  VS_FILE_INFO                    16 | 
|---|
| 22 | #define  VS_VERSION_INFO                 1 | 
|---|
| 23 | #define  VS_USER_INFO                    100 | 
|---|
| 24 |  | 
|---|
| 25 | #define  VS_FFI_SIGNATURE                0xfeef04bdL /* FileInfo Magic */ | 
|---|
| 26 | #define  VS_FFI_STRUCVERSION             0x00010000L /* struc version 1.0 */ | 
|---|
| 27 | #define  VS_FFI_FILEFLAGSMASK            0x0000003fL /* valid flags */ | 
|---|
| 28 |  | 
|---|
| 29 | /* VS_VERSION.dwFileFlags */ | 
|---|
| 30 | #define  VS_FF_DEBUG                     0x01L | 
|---|
| 31 | #define  VS_FF_PRERELEASE                0x02L | 
|---|
| 32 | #define  VS_FF_PATCHED                   0x04L | 
|---|
| 33 | #define  VS_FF_PRIVATEBUILD              0x08L | 
|---|
| 34 | #define  VS_FF_INFOINFERRED              0x10L | 
|---|
| 35 | #define  VS_FF_SPECIALBUILD              0x20L | 
|---|
| 36 |  | 
|---|
| 37 | /* VS_VERSION.dwFileOS */ | 
|---|
| 38 |  | 
|---|
| 39 | /* major os version */ | 
|---|
| 40 | #define  VOS_UNKNOWN                        0x00000000L | 
|---|
| 41 | #define  VOS_DOS                            0x00010000L | 
|---|
| 42 | #define  VOS_OS216                          0x00020000L | 
|---|
| 43 | #define  VOS_OS232                          0x00030000L | 
|---|
| 44 | #define  VOS_NT                             0x00040000L | 
|---|
| 45 |  | 
|---|
| 46 | /* minor os version */ | 
|---|
| 47 | #define  VOS__BASE                          0x00000000L | 
|---|
| 48 | #define  VOS__WINDOWS16                     0x00000001L | 
|---|
| 49 | #define  VOS__PM16                          0x00000002L | 
|---|
| 50 | #define  VOS__PM32                          0x00000003L | 
|---|
| 51 | #define  VOS__WINDOWS32                     0x00000004L | 
|---|
| 52 |  | 
|---|
| 53 | /* possible versions */ | 
|---|
| 54 | #define  VOS_DOS_WINDOWS16               (VOS_DOS|VOS__WINDOWS16) | 
|---|
| 55 | #define  VOS_DOS_WINDOWS32               (VOS_DOS|VOS__WINDOWS32) | 
|---|
| 56 | #define  VOS_OS216_PM16                     (VOS_OS216|VOS__PM16) | 
|---|
| 57 | #define  VOS_OS232_PM32                     (VOS_OS232|VOS__PM32) | 
|---|
| 58 | #define  VOS_NT_WINDOWS32                (VOS_NT|VOS__WINDOWS32) | 
|---|
| 59 |  | 
|---|
| 60 | /* VS_VERSION.dwFileType */ | 
|---|
| 61 | #define  VFT_UNKNOWN                        0x00000000L | 
|---|
| 62 | #define  VFT_APP                            0x00000001L | 
|---|
| 63 | #define  VFT_DLL                            0x00000002L | 
|---|
| 64 | #define  VFT_DRV                            0x00000003L | 
|---|
| 65 | #define  VFT_FONT                           0x00000004L | 
|---|
| 66 | #define  VFT_VXD                            0x00000005L | 
|---|
| 67 | /* ??one type missing??                     0x00000006L -Marcus */ | 
|---|
| 68 | #define  VFT_STATIC_LIB                     0x00000007L | 
|---|
| 69 |  | 
|---|
| 70 | /* VS_VERSION.dwFileSubtype for VFT_DRV */ | 
|---|
| 71 | #define  VFT2_UNKNOWN                    0x00000000L | 
|---|
| 72 | #define  VFT2_DRV_PRINTER                0x00000001L | 
|---|
| 73 | #define  VFT2_DRV_KEYBOARD               0x00000002L | 
|---|
| 74 | #define  VFT2_DRV_LANGUAGE               0x00000003L | 
|---|
| 75 | #define  VFT2_DRV_DISPLAY                0x00000004L | 
|---|
| 76 | #define  VFT2_DRV_MOUSE                  0x00000005L | 
|---|
| 77 | #define  VFT2_DRV_NETWORK                0x00000006L | 
|---|
| 78 | #define  VFT2_DRV_SYSTEM                 0x00000007L | 
|---|
| 79 | #define  VFT2_DRV_INSTALLABLE            0x00000008L | 
|---|
| 80 | #define  VFT2_DRV_SOUND                  0x00000009L | 
|---|
| 81 | #define  VFT2_DRV_COMM                   0x0000000aL | 
|---|
| 82 | #define  VFT2_DRV_INPUTMETHOD            0x0000000bL | 
|---|
| 83 |  | 
|---|
| 84 | /* VS_VERSION.dwFileSubtype for VFT_FONT */ | 
|---|
| 85 | #define  VFT2_FONT_RASTER                0x00000001L | 
|---|
| 86 | #define  VFT2_FONT_VECTOR                0x00000002L | 
|---|
| 87 | #define  VFT2_FONT_TRUETYPE              0x00000003L | 
|---|
| 88 |  | 
|---|
| 89 | /* VerFindFile Flags */ | 
|---|
| 90 | /* input */ | 
|---|
| 91 | #define  VFFF_ISSHAREDFILE               0x0001 | 
|---|
| 92 |  | 
|---|
| 93 | /* output (returned) */ | 
|---|
| 94 | #define  VFF_CURNEDEST                   0x0001 | 
|---|
| 95 | #define  VFF_FILEINUSE                   0x0002 | 
|---|
| 96 | #define  VFF_BUFFTOOSMALL                0x0004 | 
|---|
| 97 |  | 
|---|
| 98 | /* VerInstallFile Flags */ | 
|---|
| 99 | /* input */ | 
|---|
| 100 | #define  VIFF_FORCEINSTALL               0x0001 | 
|---|
| 101 | #define  VIFF_DONTDELETEOLD              0x0002 | 
|---|
| 102 |  | 
|---|
| 103 | /* output (return) */ | 
|---|
| 104 | #define  VIF_TEMPFILE                    0x00000001L | 
|---|
| 105 | #define  VIF_MISMATCH                    0x00000002L | 
|---|
| 106 | #define  VIF_SRCOLD                      0x00000004L | 
|---|
| 107 | #define  VIF_DIFFLANG                    0x00000008L | 
|---|
| 108 | #define  VIF_DIFFCODEPG                  0x00000010L | 
|---|
| 109 | #define  VIF_DIFFTYPE                    0x00000020L | 
|---|
| 110 | #define  VIF_WRITEPROT                   0x00000040L | 
|---|
| 111 | #define  VIF_FILEINUSE                   0x00000080L | 
|---|
| 112 | #define  VIF_OUTOFSPACE                  0x00000100L | 
|---|
| 113 | #define  VIF_ACCESSVIOLATION             0x00000200L | 
|---|
| 114 | #define  VIF_SHARINGVIOLATION            0x00000400L | 
|---|
| 115 | #define  VIF_CANNOTCREATE                0x00000800L | 
|---|
| 116 | #define  VIF_CANNOTDELETE                0x00001000L | 
|---|
| 117 | #define  VIF_CANNOTRENAME                0x00002000L | 
|---|
| 118 | #define  VIF_CANNOTDELETECUR             0x00004000L | 
|---|
| 119 | #define  VIF_OUTOFMEMORY                 0x00008000L | 
|---|
| 120 | #define  VIF_CANNOTREADSRC               0x00010000L | 
|---|
| 121 | #define  VIF_CANNOTREADDST               0x00020000L | 
|---|
| 122 | #define  VIF_BUFFTOOSMALL                0x00040000L | 
|---|
| 123 |  | 
|---|
| 124 | typedef struct tagVS_FIXEDFILEINFO { | 
|---|
| 125 | DWORD   dwSignature; | 
|---|
| 126 | DWORD   dwStrucVersion; | 
|---|
| 127 | DWORD   dwFileVersionMS; | 
|---|
| 128 | DWORD   dwFileVersionLS; | 
|---|
| 129 | DWORD   dwProductVersionMS; | 
|---|
| 130 | DWORD   dwProductVersionLS; | 
|---|
| 131 | DWORD   dwFileFlagsMask; | 
|---|
| 132 | DWORD   dwFileFlags; | 
|---|
| 133 | DWORD   dwFileOS; | 
|---|
| 134 | DWORD   dwFileType; | 
|---|
| 135 | DWORD   dwFileSubtype; | 
|---|
| 136 | DWORD   dwFileDateMS; | 
|---|
| 137 | DWORD   dwFileDateLS; | 
|---|
| 138 | } VS_FIXEDFILEINFO; | 
|---|
| 139 |  | 
|---|
| 140 | /*********************************************************************** | 
|---|
| 141 | * Version Info Structure | 
|---|
| 142 | */ | 
|---|
| 143 |  | 
|---|
| 144 | typedef struct | 
|---|
| 145 | { | 
|---|
| 146 | WORD  wLength; | 
|---|
| 147 | WORD  wValueLength; | 
|---|
| 148 | CHAR  szKey[1]; | 
|---|
| 149 | #if 0   /* variable length structure */ | 
|---|
| 150 | /* DWORD aligned */ | 
|---|
| 151 | BYTE  Value[]; | 
|---|
| 152 | /* DWORD aligned */ | 
|---|
| 153 | VS_VERSION_INFO_STRUCT16 Children[]; | 
|---|
| 154 | #endif | 
|---|
| 155 | } VS_VERSION_INFO_STRUCT16; | 
|---|
| 156 |  | 
|---|
| 157 | typedef struct | 
|---|
| 158 | { | 
|---|
| 159 | WORD  wLength; | 
|---|
| 160 | WORD  wValueLength; | 
|---|
| 161 | WORD  bText; | 
|---|
| 162 | WCHAR szKey[1]; | 
|---|
| 163 | #if 0   /* variable length structure */ | 
|---|
| 164 | /* DWORD aligned */ | 
|---|
| 165 | BYTE  Value[]; | 
|---|
| 166 | /* DWORD aligned */ | 
|---|
| 167 | VS_VERSION_INFO_STRUCT32 Children[]; | 
|---|
| 168 | #endif | 
|---|
| 169 | } VS_VERSION_INFO_STRUCT32; | 
|---|
| 170 |  | 
|---|
| 171 | #define VersionInfoIs16( ver ) \ | 
|---|
| 172 | ( ((VS_VERSION_INFO_STRUCT16 *)ver)->szKey[0] >= ' ' ) | 
|---|
| 173 |  | 
|---|
| 174 | #define VersionInfo16_Value( ver )  \ | 
|---|
| 175 | (LPBYTE)( ((DWORD)((ver)->szKey) + (lstrlenA((ver)->szKey)+1) + 3) & ~3 ) | 
|---|
| 176 | #define VersionInfo32_Value( ver )  \ | 
|---|
| 177 | (LPBYTE)( ((DWORD)((ver)->szKey) + 2*(lstrlenW((ver)->szKey)+1) + 3) & ~3 ) | 
|---|
| 178 |  | 
|---|
| 179 | #define VersionInfo16_Children( ver )  \ | 
|---|
| 180 | (VS_VERSION_INFO_STRUCT16 *)( VersionInfo16_Value( ver ) + \ | 
|---|
| 181 | ( ( (ver)->wValueLength + 3 ) & ~3 ) ) | 
|---|
| 182 | #define VersionInfo32_Children( ver )  \ | 
|---|
| 183 | (VS_VERSION_INFO_STRUCT32 *)( VersionInfo32_Value( ver ) + \ | 
|---|
| 184 | ( ( (ver)->wValueLength * \ | 
|---|
| 185 | ((ver)->bText? 2 : 1) + 3 ) & ~3 ) ) | 
|---|
| 186 | #define VersionInfo16_Next( ver ) \ | 
|---|
| 187 | (VS_VERSION_INFO_STRUCT16 *)( (LPBYTE)ver + (((ver)->wLength + 3) & ~3) ) | 
|---|
| 188 | #define VersionInfo32_Next( ver ) \ | 
|---|
| 189 | (VS_VERSION_INFO_STRUCT32 *)( (LPBYTE)ver + (((ver)->wLength + 3) & ~3) ) | 
|---|
| 190 |  | 
|---|
| 191 | #ifndef RC_INVOKED | 
|---|
| 192 |  | 
|---|
| 193 | /* function prototypes */ | 
|---|
| 194 |  | 
|---|
| 195 | DWORD       WINAPI VerFindFileA(DWORD,LPSTR,LPSTR,LPSTR,LPSTR,PUINT,LPSTR,PUINT); | 
|---|
| 196 | DWORD       WINAPI VerFindFileW(DWORD,LPWSTR,LPWSTR,LPWSTR,LPWSTR,PUINT,LPWSTR,PUINT); | 
|---|
| 197 | DWORD       WINAPI VerInstallFileA(DWORD,LPSTR,LPSTR,LPSTR,LPSTR,LPSTR,LPSTR,PUINT); | 
|---|
| 198 | DWORD       WINAPI VerInstallFileW(DWORD,LPWSTR,LPWSTR,LPWSTR,LPWSTR,LPWSTR,LPWSTR,PUINT); | 
|---|
| 199 | BOOL        WINAPI VerQueryValueA(LPVOID,LPSTR,LPVOID*,PUINT); | 
|---|
| 200 | BOOL        WINAPI VerQueryValueW(LPVOID,LPWSTR,LPVOID*,PUINT); | 
|---|
| 201 | DWORD       WINAPI GetFileVersionInfoSizeA(LPSTR,LPDWORD); | 
|---|
| 202 | DWORD       WINAPI GetFileVersionInfoSizeW(LPWSTR,LPDWORD); | 
|---|
| 203 | BOOL        WINAPI GetFileVersionInfoA(LPSTR,DWORD,DWORD,LPVOID); | 
|---|
| 204 | BOOL        WINAPI GetFileVersionInfoW(LPWSTR,DWORD,DWORD,LPVOID); | 
|---|
| 205 | DWORD       WINAPI VerLanguageNameA(DWORD,LPSTR,DWORD); | 
|---|
| 206 | DWORD       WINAPI VerLanguageNameW(DWORD,LPWSTR,DWORD); | 
|---|
| 207 |  | 
|---|
| 208 | /* 20 GETFILEVERSIONINFORAW */ | 
|---|
| 209 |  | 
|---|
| 210 | #ifdef __WINE__ | 
|---|
| 211 |  | 
|---|
| 212 | DWORD WINAPI GetFileResourceSize( LPCSTR lpszFileName, | 
|---|
| 213 | LPCSTR lpszResType, LPCSTR lpszResId, | 
|---|
| 214 | LPDWORD lpdwFileOffset ); | 
|---|
| 215 | DWORD WINAPI GetFileResource( LPCSTR lpszFileName, | 
|---|
| 216 | LPCSTR lpszResType, LPCSTR lpszResId, | 
|---|
| 217 | DWORD dwFileOffset, | 
|---|
| 218 | DWORD dwResLen, LPVOID lpvData ); | 
|---|
| 219 |  | 
|---|
| 220 | #endif /* __WINE__ */ | 
|---|
| 221 |  | 
|---|
| 222 | #endif /* RC_INVOKED */ | 
|---|
| 223 |  | 
|---|
| 224 | #endif /* __ODIN_VERSION_H */ | 
|---|