~ubuntu-branches/ubuntu/feisty/fpc/feisty

« back to all changes in this revision

Viewing changes to packages/extra/winunits/jwawinver.pas

  • Committer: Bazaar Package Importer
  • Author(s): Torsten Werner
  • Date: 2007-01-27 20:08:50 UTC
  • mfrom: (1.2.3 upstream)
  • Revision ID: james.westby@ubuntu.com-20070127200850-9mrptaqqjsx9nwa7
Tags: 2.0.4-5
* Fixed Build-Depends.
* Add myself to Uploaders in debian/control.
* Make sure that the sources are really patched before building them.
* Build unit 'libc' on powerpc too.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
{******************************************************************************}
2
 
{                                                                              }
3
 
{ Windows Version API interface Unit for Object Pascal                         }
4
 
{                                                                              }
5
 
{ Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft          }
6
 
{ Corporation. All Rights Reserved.                                            }
7
 
{                                                                              }
8
 
{ The original file is: winver.h, released June 2000. The original Pascal      }
9
 
{ code is: WinVer.pas, released December 2000. The initial developer of the    }
10
 
{ Pascal code is Marcel van Brakel (brakelm att chello dott nl).               }
11
 
{                                                                              }
12
 
{ Portions created by Marcel van Brakel are Copyright (C) 1999-2001            }
13
 
{ Marcel van Brakel. All Rights Reserved.                                      }
14
 
{                                                                              }
15
 
{ Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI)        }
16
 
{                                                                              }
17
 
{ You may retrieve the latest version of this file at the Project JEDI         }
18
 
{ APILIB home page, located at http://jedi-apilib.sourceforge.net              }
19
 
{                                                                              }
20
 
{ The contents of this file are used with permission, subject to the Mozilla   }
21
 
{ Public License Version 1.1 (the "License"); you may not use this file except }
22
 
{ in compliance with the License. You may obtain a copy of the License at      }
23
 
{ http://www.mozilla.org/MPL/MPL-1.1.html                                      }
24
 
{                                                                              }
25
 
{ Software distributed under the License is distributed on an "AS IS" basis,   }
26
 
{ WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
27
 
{ the specific language governing rights and limitations under the License.    }
28
 
{                                                                              }
29
 
{ Alternatively, the contents of this file may be used under the terms of the  }
30
 
{ GNU Lesser General Public License (the  "LGPL License"), in which case the   }
31
 
{ provisions of the LGPL License are applicable instead of those above.        }
32
 
{ If you wish to allow use of your version of this file only under the terms   }
33
 
{ of the LGPL License and not to allow others to use your version of this file }
34
 
{ under the MPL, indicate your decision by deleting  the provisions above and  }
35
 
{ replace  them with the notice and other provisions required by the LGPL      }
36
 
{ License.  If you do not delete the provisions above, a recipient may use     }
37
 
{ your version of this file under either the MPL or the LGPL License.          }
38
 
{                                                                              }
39
 
{ For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
40
 
{                                                                              }
41
 
{******************************************************************************}
42
 
 
43
 
// $Id: jwawinver.pas,v 1.1 2005/04/04 07:56:11 marco Exp $
44
 
 
45
 
unit JwaWinVer;
46
 
 
47
 
{$WEAKPACKAGEUNIT}
48
 
 
49
 
{$HPPEMIT ''}
50
 
{$HPPEMIT '#include "WinVer.h"'}
51
 
{$HPPEMIT ''}
52
 
 
53
 
{$I jediapilib.inc}
54
 
 
55
 
interface
56
 
 
57
 
uses
58
 
  JwaWinUser, JwaWinType; 
59
 
 
60
 
const
61
 
 
62
 
//  RT_VERSION = MAKEINTRESOURCE(16);
63
 
 
64
 
// ----- Symbols -----
65
 
 
66
 
  VS_FILE_INFO    = RT_VERSION;
67
 
  {$EXTERNALSYM VS_FILE_INFO}
68
 
  VS_VERSION_INFO = 1;
69
 
  {$EXTERNALSYM VS_VERSION_INFO}
70
 
  VS_USER_DEFINED = 100;
71
 
  {$EXTERNALSYM VS_USER_DEFINED}
72
 
 
73
 
// ----- VS_VERSION.dwFileFlags -----
74
 
 
75
 
  VS_FFI_SIGNATURE     = $FEEF04BD;
76
 
  {$EXTERNALSYM VS_FFI_SIGNATURE}
77
 
  VS_FFI_STRUCVERSION  = $00010000;
78
 
  {$EXTERNALSYM VS_FFI_STRUCVERSION}
79
 
  VS_FFI_FILEFLAGSMASK = $0000003F;
80
 
  {$EXTERNALSYM VS_FFI_FILEFLAGSMASK}
81
 
 
82
 
// ----- VS_VERSION.dwFileFlags -----
83
 
 
84
 
  VS_FF_DEBUG        = $00000001;
85
 
  {$EXTERNALSYM VS_FF_DEBUG}
86
 
  VS_FF_PRERELEASE   = $00000002;
87
 
  {$EXTERNALSYM VS_FF_PRERELEASE}
88
 
  VS_FF_PATCHED      = $00000004;
89
 
  {$EXTERNALSYM VS_FF_PATCHED}
90
 
  VS_FF_PRIVATEBUILD = $00000008;
91
 
  {$EXTERNALSYM VS_FF_PRIVATEBUILD}
92
 
  VS_FF_INFOINFERRED = $00000010;
93
 
  {$EXTERNALSYM VS_FF_INFOINFERRED}
94
 
  VS_FF_SPECIALBUILD = $00000020;
95
 
  {$EXTERNALSYM VS_FF_SPECIALBUILD}
96
 
 
97
 
// ----- VS_VERSION.dwFileOS -----
98
 
 
99
 
  VOS_UNKNOWN = $00000000;
100
 
  {$EXTERNALSYM VOS_UNKNOWN}
101
 
  VOS_DOS     = $00010000;
102
 
  {$EXTERNALSYM VOS_DOS}
103
 
  VOS_OS216   = $00020000;
104
 
  {$EXTERNALSYM VOS_OS216}
105
 
  VOS_OS232   = $00030000;
106
 
  {$EXTERNALSYM VOS_OS232}
107
 
  VOS_NT      = $00040000;
108
 
  {$EXTERNALSYM VOS_NT}
109
 
  VOS_WINCE   = $00050000;
110
 
  {$EXTERNALSYM VOS_WINCE}
111
 
 
112
 
  VOS__BASE      = $00000000;
113
 
  {$EXTERNALSYM VOS__BASE}
114
 
  VOS__WINDOWS16 = $00000001;
115
 
  {$EXTERNALSYM VOS__WINDOWS16}
116
 
  VOS__PM16      = $00000002;
117
 
  {$EXTERNALSYM VOS__PM16}
118
 
  VOS__PM32      = $00000003;
119
 
  {$EXTERNALSYM VOS__PM32}
120
 
  VOS__WINDOWS32 = $00000004;
121
 
  {$EXTERNALSYM VOS__WINDOWS32}
122
 
 
123
 
  VOS_DOS_WINDOWS16 = $00010001;
124
 
  {$EXTERNALSYM VOS_DOS_WINDOWS16}
125
 
  VOS_DOS_WINDOWS32 = $00010004;
126
 
  {$EXTERNALSYM VOS_DOS_WINDOWS32}
127
 
  VOS_OS216_PM16    = $00020002;
128
 
  {$EXTERNALSYM VOS_OS216_PM16}
129
 
  VOS_OS232_PM32    = $00030003;
130
 
  {$EXTERNALSYM VOS_OS232_PM32}
131
 
  VOS_NT_WINDOWS32  = $00040004;
132
 
  {$EXTERNALSYM VOS_NT_WINDOWS32}
133
 
 
134
 
// ----- VS_VERSION.dwFileType -----
135
 
 
136
 
  VFT_UNKNOWN    = $00000000;
137
 
  {$EXTERNALSYM VFT_UNKNOWN}
138
 
  VFT_APP        = $00000001;
139
 
  {$EXTERNALSYM VFT_APP}
140
 
  VFT_DLL        = $00000002;
141
 
  {$EXTERNALSYM VFT_DLL}
142
 
  VFT_DRV        = $00000003;
143
 
  {$EXTERNALSYM VFT_DRV}
144
 
  VFT_FONT       = $00000004;
145
 
  {$EXTERNALSYM VFT_FONT}
146
 
  VFT_VXD        = $00000005;
147
 
  {$EXTERNALSYM VFT_VXD}
148
 
  VFT_STATIC_LIB = $00000007;
149
 
  {$EXTERNALSYM VFT_STATIC_LIB}
150
 
 
151
 
// ----- VS_VERSION.dwFileSubtype for VFT_WINDOWS_DRV -----
152
 
 
153
 
  VFT2_UNKNOWN         = $00000000;
154
 
  {$EXTERNALSYM VFT2_UNKNOWN}
155
 
  VFT2_DRV_PRINTER     = $00000001;
156
 
  {$EXTERNALSYM VFT2_DRV_PRINTER}
157
 
  VFT2_DRV_KEYBOARD    = $00000002;
158
 
  {$EXTERNALSYM VFT2_DRV_KEYBOARD}
159
 
  VFT2_DRV_LANGUAGE    = $00000003;
160
 
  {$EXTERNALSYM VFT2_DRV_LANGUAGE}
161
 
  VFT2_DRV_DISPLAY     = $00000004;
162
 
  {$EXTERNALSYM VFT2_DRV_DISPLAY}
163
 
  VFT2_DRV_MOUSE       = $00000005;
164
 
  {$EXTERNALSYM VFT2_DRV_MOUSE}
165
 
  VFT2_DRV_NETWORK     = $00000006;
166
 
  {$EXTERNALSYM VFT2_DRV_NETWORK}
167
 
  VFT2_DRV_SYSTEM      = $00000007;
168
 
  {$EXTERNALSYM VFT2_DRV_SYSTEM}
169
 
  VFT2_DRV_INSTALLABLE = $00000008;
170
 
  {$EXTERNALSYM VFT2_DRV_INSTALLABLE}
171
 
  VFT2_DRV_SOUND       = $00000009;
172
 
  {$EXTERNALSYM VFT2_DRV_SOUND}
173
 
  VFT2_DRV_COMM        = $0000000A;
174
 
  {$EXTERNALSYM VFT2_DRV_COMM}
175
 
  VFT2_DRV_INPUTMETHOD = $0000000B;
176
 
  {$EXTERNALSYM VFT2_DRV_INPUTMETHOD}
177
 
  VFT2_DRV_VERSIONED_PRINTER = $0000000C;
178
 
  {$EXTERNALSYM VFT2_DRV_VERSIONED_PRINTER}
179
 
 
180
 
// ----- VS_VERSION.dwFileSubtype for VFT_WINDOWS_FONT -----
181
 
 
182
 
  VFT2_FONT_RASTER   = $00000001;
183
 
  {$EXTERNALSYM VFT2_FONT_RASTER}
184
 
  VFT2_FONT_VECTOR   = $00000002;
185
 
  {$EXTERNALSYM VFT2_FONT_VECTOR}
186
 
  VFT2_FONT_TRUETYPE = $00000003;
187
 
  {$EXTERNALSYM VFT2_FONT_TRUETYPE}
188
 
 
189
 
// ----- VerFindFile() flags -----
190
 
 
191
 
  VFFF_ISSHAREDFILE = $0001;
192
 
  {$EXTERNALSYM VFFF_ISSHAREDFILE}
193
 
 
194
 
  VFF_CURNEDEST     = $0001;
195
 
  {$EXTERNALSYM VFF_CURNEDEST}
196
 
  VFF_FILEINUSE     = $0002;
197
 
  {$EXTERNALSYM VFF_FILEINUSE}
198
 
  VFF_BUFFTOOSMALL  = $0004;
199
 
  {$EXTERNALSYM VFF_BUFFTOOSMALL}
200
 
 
201
 
// ----- VerInstallFile() flags -----
202
 
 
203
 
  VIFF_FORCEINSTALL  = $0001;
204
 
  {$EXTERNALSYM VIFF_FORCEINSTALL}
205
 
  VIFF_DONTDELETEOLD = $0002;
206
 
  {$EXTERNALSYM VIFF_DONTDELETEOLD}
207
 
 
208
 
  VIF_TEMPFILE = $00000001;
209
 
  {$EXTERNALSYM VIF_TEMPFILE}
210
 
  VIF_MISMATCH = $00000002;
211
 
  {$EXTERNALSYM VIF_MISMATCH}
212
 
  VIF_SRCOLD   = $00000004;
213
 
  {$EXTERNALSYM VIF_SRCOLD}
214
 
 
215
 
  VIF_DIFFLANG   = $00000008;
216
 
  {$EXTERNALSYM VIF_DIFFLANG}
217
 
  VIF_DIFFCODEPG = $00000010;
218
 
  {$EXTERNALSYM VIF_DIFFCODEPG}
219
 
  VIF_DIFFTYPE   = $00000020;
220
 
  {$EXTERNALSYM VIF_DIFFTYPE}
221
 
 
222
 
  VIF_WRITEPROT        = $00000040;
223
 
  {$EXTERNALSYM VIF_WRITEPROT}
224
 
  VIF_FILEINUSE        = $00000080;
225
 
  {$EXTERNALSYM VIF_FILEINUSE}
226
 
  VIF_OUTOFSPACE       = $00000100;
227
 
  {$EXTERNALSYM VIF_OUTOFSPACE}
228
 
  VIF_ACCESSVIOLATION  = $00000200;
229
 
  {$EXTERNALSYM VIF_ACCESSVIOLATION}
230
 
  VIF_SHARINGVIOLATION = $00000400;
231
 
  {$EXTERNALSYM VIF_SHARINGVIOLATION}
232
 
  VIF_CANNOTCREATE     = $00000800;
233
 
  {$EXTERNALSYM VIF_CANNOTCREATE}
234
 
  VIF_CANNOTDELETE     = $00001000;
235
 
  {$EXTERNALSYM VIF_CANNOTDELETE}
236
 
  VIF_CANNOTRENAME     = $00002000;
237
 
  {$EXTERNALSYM VIF_CANNOTRENAME}
238
 
  VIF_CANNOTDELETECUR  = $00004000;
239
 
  {$EXTERNALSYM VIF_CANNOTDELETECUR}
240
 
  VIF_OUTOFMEMORY      = $00008000;
241
 
  {$EXTERNALSYM VIF_OUTOFMEMORY}
242
 
 
243
 
  VIF_CANNOTREADSRC = $00010000;
244
 
  {$EXTERNALSYM VIF_CANNOTREADSRC}
245
 
  VIF_CANNOTREADDST = $00020000;
246
 
  {$EXTERNALSYM VIF_CANNOTREADDST}
247
 
 
248
 
  VIF_BUFFTOOSMALL      = $00040000;
249
 
  {$EXTERNALSYM VIF_BUFFTOOSMALL}
250
 
  VIF_CANNOTLOADLZ32    = $00080000;
251
 
  {$EXTERNALSYM VIF_CANNOTLOADLZ32}
252
 
  VIF_CANNOTLOADCABINET = $00100000;
253
 
  {$EXTERNALSYM VIF_CANNOTLOADCABINET}
254
 
 
255
 
// ----- Types and structures -----
256
 
 
257
 
type
258
 
  PVSFixedFileInfo = ^VS_FIXEDFILEINFO;
259
 
  tagVS_FIXEDFILEINFO = record
260
 
    dwSignature: DWORD;        // e.g. 0xfeef04bd
261
 
    dwStrucVersion: DWORD;     // e.g. 0x00000042 = "0.42"
262
 
    dwFileVersionMS: DWORD;    // e.g. 0x00030075 = "3.75"
263
 
    dwFileVersionLS: DWORD;    // e.g. 0x00000031 = "0.31"
264
 
    dwProductVersionMS: DWORD; // e.g. 0x00030010 = "3.10"
265
 
    dwProductVersionLS: DWORD; // e.g. 0x00000031 = "0.31"
266
 
    dwFileFlagsMask: DWORD;    // = 0x3F for version "0.42"
267
 
    dwFileFlags: DWORD;        // e.g. VFF_DEBUG | VFF_PRERELEASE
268
 
    dwFileOS: DWORD;           // e.g. VOS_DOS_WINDOWS16
269
 
    dwFileType: DWORD;         // e.g. VFT_DRIVER
270
 
    dwFileSubtype: DWORD;      // e.g. VFT2_DRV_KEYBOARD
271
 
    dwFileDateMS: DWORD;       // e.g. 0
272
 
    dwFileDateLS: DWORD;       // e.g. 0
273
 
  end;
274
 
  {$EXTERNALSYM tagVS_FIXEDFILEINFO}
275
 
  VS_FIXEDFILEINFO = tagVS_FIXEDFILEINFO;
276
 
  {$EXTERNALSYM VS_FIXEDFILEINFO}
277
 
  TVSFixedFileInfo = VS_FIXEDFILEINFO;
278
 
 
279
 
// ----- Function prototypes -----
280
 
 
281
 
function VerFindFileA(uFlags: DWORD; szFileName, szWinDir, szAppDir,
282
 
  szCurDir: LPSTR; var lpuCurDirLen: UINT; szDestDir: LPSTR;
283
 
  var lpuDestDirLen: UINT): DWORD; stdcall;
284
 
{$EXTERNALSYM VerFindFileA}
285
 
function VerFindFileW(uFlags: DWORD; szFileName, szWinDir, szAppDir,
286
 
  szCurDir: LPWSTR; var lpuCurDirLen: UINT; szDestDir: LPWSTR;
287
 
  var lpuDestDirLen: UINT): DWORD; stdcall;
288
 
{$EXTERNALSYM VerFindFileW}
289
 
function VerFindFile(uFlags: DWORD; szFileName, szWinDir, szAppDir,
290
 
  szCurDir: LPTSTR; var lpuCurDirLen: UINT; szDestDir: LPTSTR;
291
 
  var lpuDestDirLen: UINT): DWORD; stdcall;
292
 
{$EXTERNALSYM VerFindFile}
293
 
 
294
 
function VerInstallFileA(uFlags: DWORD; szSrcFileName, szDestFileName, szSrcDir,
295
 
  szDestDir, szCurDir, szTmpFile: LPSTR; var lpuTmpFileLen: UINT): DWORD; stdcall;
296
 
{$EXTERNALSYM VerInstallFileA}
297
 
function VerInstallFileW(uFlags: DWORD; szSrcFileName, szDestFileName, szSrcDir,
298
 
  szDestDir, szCurDir, szTmpFile: LPWSTR; var lpuTmpFileLen: UINT): DWORD; stdcall;
299
 
{$EXTERNALSYM VerInstallFileW}
300
 
function VerInstallFile(uFlags: DWORD; szSrcFileName, szDestFileName, szSrcDir,
301
 
  szDestDir, szCurDir, szTmpFile: LPTSTR; var lpuTmpFileLen: UINT): DWORD; stdcall;
302
 
{$EXTERNALSYM VerInstallFile}
303
 
 
304
 
// Returns size of version info in bytes
305
 
 
306
 
function GetFileVersionInfoSizeA(lptstrFilename: LPCSTR; var lpdwHandle: DWORD): DWORD; stdcall;
307
 
{$EXTERNALSYM GetFileVersionInfoSizeA}
308
 
function GetFileVersionInfoSizeW(lptstrFilename: LPCWSTR; var lpdwHandle: DWORD): DWORD; stdcall;
309
 
{$EXTERNALSYM GetFileVersionInfoSizeW}
310
 
function GetFileVersionInfoSize(lptstrFilename: LPCTSTR; var lpdwHandle: DWORD): DWORD; stdcall;
311
 
{$EXTERNALSYM GetFileVersionInfoSize}
312
 
 
313
 
// Read version info into buffer
314
 
 
315
 
function GetFileVersionInfoA(lptstrFilename: LPCSTR; dwHandle, dwLen: DWORD;
316
 
  lpData: LPVOID): BOOL; stdcall;
317
 
{$EXTERNALSYM GetFileVersionInfoA}
318
 
function GetFileVersionInfoW(lptstrFilename: LPCWSTR; dwHandle, dwLen: DWORD;
319
 
  lpData: LPVOID): BOOL; stdcall;
320
 
{$EXTERNALSYM GetFileVersionInfoW}
321
 
function GetFileVersionInfo(lptstrFilename: LPCTSTR; dwHandle, dwLen: DWORD;
322
 
  lpData: LPVOID): BOOL; stdcall;
323
 
{$EXTERNALSYM GetFileVersionInfo}
324
 
 
325
 
function VerLanguageNameA(wLang: DWORD; szLang: LPSTR; nSize: DWORD): DWORD; stdcall;
326
 
{$EXTERNALSYM VerLanguageNameA}
327
 
function VerLanguageNameW(wLang: DWORD; szLang: LPWSTR; nSize: DWORD): DWORD; stdcall;
328
 
{$EXTERNALSYM VerLanguageNameW}
329
 
function VerLanguageName(wLang: DWORD; szLang: LPTSTR; nSize: DWORD): DWORD; stdcall;
330
 
{$EXTERNALSYM VerLanguageName}
331
 
 
332
 
function VerQueryValueA(pBlock: LPVOID; lpSubBlock: LPSTR; var lplpBuffer: LPVOID;
333
 
  var puLen: UINT): BOOL; stdcall;
334
 
{$EXTERNALSYM VerQueryValueA}
335
 
function VerQueryValueW(pBlock: LPVOID; lpSubBlock: LPWSTR; var lplpBuffer: LPVOID;
336
 
  var puLen: UINT): BOOL; stdcall;
337
 
{$EXTERNALSYM VerQueryValueW}
338
 
function VerQueryValue(pBlock: LPVOID; lpSubBlock: LPTSTR; var lplpBuffer: LPVOID;
339
 
  var puLen: UINT): BOOL; stdcall;
340
 
{$EXTERNALSYM VerQueryValue}
341
 
 
342
 
implementation
343
 
 
344
 
const
345
 
  Version = 'version.dll';
346
 
  {$IFDEF UNICODE}
347
 
  AWSuffix = 'W';
348
 
  {$ELSE}
349
 
  AWSuffix = 'A';
350
 
  {$ENDIF UNICODE}
351
 
 
352
 
{$IFDEF DYNAMIC_LINK}
353
 
 
354
 
var
355
 
  _VerFindFileA: Pointer;
356
 
 
357
 
function VerFindFileA;
358
 
begin
359
 
  GetProcedureAddress(_VerFindFileA, Version, 'VerFindFileA');
360
 
  asm
361
 
        MOV     ESP, EBP
362
 
        POP     EBP
363
 
        JMP     [_VerFindFileA]
364
 
  end;
365
 
end;
366
 
 
367
 
var
368
 
  _VerFindFileW: Pointer;
369
 
 
370
 
function VerFindFileW;
371
 
begin
372
 
  GetProcedureAddress(_VerFindFileW, Version, 'VerFindFileW');
373
 
  asm
374
 
        MOV     ESP, EBP
375
 
        POP     EBP
376
 
        JMP     [_VerFindFileW]
377
 
  end;
378
 
end;
379
 
 
380
 
var
381
 
  _VerFindFile: Pointer;
382
 
 
383
 
function VerFindFile;
384
 
begin
385
 
  GetProcedureAddress(_VerFindFile, Version, 'VerFindFile' + AWSuffix);
386
 
  asm
387
 
        MOV     ESP, EBP
388
 
        POP     EBP
389
 
        JMP     [_VerFindFile]
390
 
  end;
391
 
end;
392
 
 
393
 
var
394
 
  _VerInstallFileA: Pointer;
395
 
 
396
 
function VerInstallFileA;
397
 
begin
398
 
  GetProcedureAddress(_VerInstallFileA, Version, 'VerInstallFileA');
399
 
  asm
400
 
        MOV     ESP, EBP
401
 
        POP     EBP
402
 
        JMP     [_VerInstallFileA]
403
 
  end;
404
 
end;
405
 
 
406
 
var
407
 
  _VerInstallFileW: Pointer;
408
 
 
409
 
function VerInstallFileW;
410
 
begin
411
 
  GetProcedureAddress(_VerInstallFileW, Version, 'VerInstallFileW');
412
 
  asm
413
 
        MOV     ESP, EBP
414
 
        POP     EBP
415
 
        JMP     [_VerInstallFileW]
416
 
  end;
417
 
end;
418
 
 
419
 
var
420
 
  _VerInstallFile: Pointer;
421
 
 
422
 
function VerInstallFile;
423
 
begin
424
 
  GetProcedureAddress(_VerInstallFile, Version, 'VerInstallFile' + AWSuffix);
425
 
  asm
426
 
        MOV     ESP, EBP
427
 
        POP     EBP
428
 
        JMP     [_VerInstallFile]
429
 
  end;
430
 
end;
431
 
 
432
 
var
433
 
  _GetFileVersionInfoSizeA: Pointer;
434
 
 
435
 
function GetFileVersionInfoSizeA;
436
 
begin
437
 
  GetProcedureAddress(_GetFileVersionInfoSizeA, Version, 'GetFileVersionInfoSizeA');
438
 
  asm
439
 
        MOV     ESP, EBP
440
 
        POP     EBP
441
 
        JMP     [_GetFileVersionInfoSizeA]
442
 
  end;
443
 
end;
444
 
 
445
 
var
446
 
  _GetFileVersionInfoSizeW: Pointer;
447
 
 
448
 
function GetFileVersionInfoSizeW;
449
 
begin
450
 
  GetProcedureAddress(_GetFileVersionInfoSizeW, Version, 'GetFileVersionInfoSizeW');
451
 
  asm
452
 
        MOV     ESP, EBP
453
 
        POP     EBP
454
 
        JMP     [_GetFileVersionInfoSizeW]
455
 
  end;
456
 
end;
457
 
 
458
 
var
459
 
  _GetFileVersionInfoSize: Pointer;
460
 
 
461
 
function GetFileVersionInfoSize;
462
 
begin
463
 
  GetProcedureAddress(_GetFileVersionInfoSize, Version, 'GetFileVersionInfoSize' + AWSuffix);
464
 
  asm
465
 
        MOV     ESP, EBP
466
 
        POP     EBP
467
 
        JMP     [_GetFileVersionInfoSize]
468
 
  end;
469
 
end;
470
 
 
471
 
var
472
 
  _GetFileVersionInfoA: Pointer;
473
 
 
474
 
function GetFileVersionInfoA;
475
 
begin
476
 
  GetProcedureAddress(_GetFileVersionInfoA, Version, 'GetFileVersionInfoA');
477
 
  asm
478
 
        MOV     ESP, EBP
479
 
        POP     EBP
480
 
        JMP     [_GetFileVersionInfoA]
481
 
  end;
482
 
end;
483
 
 
484
 
var
485
 
  _GetFileVersionInfoW: Pointer;
486
 
 
487
 
function GetFileVersionInfoW;
488
 
begin
489
 
  GetProcedureAddress(_GetFileVersionInfoW, Version, 'GetFileVersionInfoW');
490
 
  asm
491
 
        MOV     ESP, EBP
492
 
        POP     EBP
493
 
        JMP     [_GetFileVersionInfoW]
494
 
  end;
495
 
end;
496
 
 
497
 
var
498
 
  _GetFileVersionInfo: Pointer;
499
 
 
500
 
function GetFileVersionInfo;
501
 
begin
502
 
  GetProcedureAddress(_GetFileVersionInfo, Version, 'GetFileVersionInfo' + AWSuffix);
503
 
  asm
504
 
        MOV     ESP, EBP
505
 
        POP     EBP
506
 
        JMP     [_GetFileVersionInfo]
507
 
  end;
508
 
end;
509
 
 
510
 
var
511
 
  _VerLanguageNameA: Pointer;
512
 
 
513
 
function VerLanguageNameA;
514
 
begin
515
 
  GetProcedureAddress(_VerLanguageNameA, Version, 'VerLanguageNameA');
516
 
  asm
517
 
        MOV     ESP, EBP
518
 
        POP     EBP
519
 
        JMP     [_VerLanguageNameA]
520
 
  end;
521
 
end;
522
 
 
523
 
var
524
 
  _VerLanguageNameW: Pointer;
525
 
 
526
 
function VerLanguageNameW;
527
 
begin
528
 
  GetProcedureAddress(_VerLanguageNameW, Version, 'VerLanguageNameW');
529
 
  asm
530
 
        MOV     ESP, EBP
531
 
        POP     EBP
532
 
        JMP     [_VerLanguageNameW]
533
 
  end;
534
 
end;
535
 
 
536
 
var
537
 
  _VerLanguageName: Pointer;
538
 
 
539
 
function VerLanguageName;
540
 
begin
541
 
  GetProcedureAddress(_VerLanguageName, Version, 'VerLanguageName' + AWSuffix);
542
 
  asm
543
 
        MOV     ESP, EBP
544
 
        POP     EBP
545
 
        JMP     [_VerLanguageName]
546
 
  end;
547
 
end;
548
 
 
549
 
var
550
 
  _VerQueryValueA: Pointer;
551
 
 
552
 
function VerQueryValueA;
553
 
begin
554
 
  GetProcedureAddress(_VerQueryValueA, Version, 'VerQueryValueA');
555
 
  asm
556
 
        MOV     ESP, EBP
557
 
        POP     EBP
558
 
        JMP     [_VerQueryValueA]
559
 
  end;
560
 
end;
561
 
 
562
 
var
563
 
  _VerQueryValueW: Pointer;
564
 
 
565
 
function VerQueryValueW;
566
 
begin
567
 
  GetProcedureAddress(_VerQueryValueW, Version, 'VerQueryValueW');
568
 
  asm
569
 
        MOV     ESP, EBP
570
 
        POP     EBP
571
 
        JMP     [_VerQueryValueW]
572
 
  end;
573
 
end;
574
 
 
575
 
var
576
 
  _VerQueryValue: Pointer;
577
 
 
578
 
function VerQueryValue;
579
 
begin
580
 
  GetProcedureAddress(_VerQueryValue, Version, 'VerQueryValue' + AWSuffix);
581
 
  asm
582
 
        MOV     ESP, EBP
583
 
        POP     EBP
584
 
        JMP     [_VerQueryValue]
585
 
  end;
586
 
end;
587
 
 
588
 
{$ELSE}
589
 
 
590
 
function VerFindFileA; external Version name 'VerFindFileA';
591
 
function VerFindFileW; external Version name 'VerFindFileW';
592
 
function VerFindFile; external Version name 'VerFindFile' + AWSuffix;
593
 
function VerInstallFileA; external Version name 'VerInstallFileA';
594
 
function VerInstallFileW; external Version name 'VerInstallFileW';
595
 
function VerInstallFile; external Version name 'VerInstallFile' + AWSuffix;
596
 
function GetFileVersionInfoSizeA; external Version name 'GetFileVersionInfoSizeA';
597
 
function GetFileVersionInfoSizeW; external Version name 'GetFileVersionInfoSizeW';
598
 
function GetFileVersionInfoSize; external Version name 'GetFileVersionInfoSize' + AWSuffix;
599
 
function GetFileVersionInfoA; external Version name 'GetFileVersionInfoA';
600
 
function GetFileVersionInfoW; external Version name 'GetFileVersionInfoW';
601
 
function GetFileVersionInfo; external Version name 'GetFileVersionInfo' + AWSuffix;
602
 
function VerLanguageNameA; external Version name 'VerLanguageNameA';
603
 
function VerLanguageNameW; external Version name 'VerLanguageNameW';
604
 
function VerLanguageName; external Version name 'VerLanguageName' + AWSuffix;
605
 
function VerQueryValueA; external Version name 'VerQueryValueA';
606
 
function VerQueryValueW; external Version name 'VerQueryValueW';
607
 
function VerQueryValue; external Version name 'VerQueryValue' + AWSuffix;
608
 
 
609
 
{$ENDIF DYNAMIC_LINK}
610
 
 
611
 
end.
 
1
{******************************************************************************}
 
2
{                                                                              }
 
3
{ Windows Version API interface Unit for Object Pascal                         }
 
4
{                                                                              }
 
5
{ Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft          }
 
6
{ Corporation. All Rights Reserved.                                            }
 
7
{                                                                              }
 
8
{ The original file is: winver.h, released June 2000. The original Pascal      }
 
9
{ code is: WinVer.pas, released December 2000. The initial developer of the    }
 
10
{ Pascal code is Marcel van Brakel (brakelm att chello dott nl).               }
 
11
{                                                                              }
 
12
{ Portions created by Marcel van Brakel are Copyright (C) 1999-2001            }
 
13
{ Marcel van Brakel. All Rights Reserved.                                      }
 
14
{                                                                              }
 
15
{ Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI)        }
 
16
{                                                                              }
 
17
{ You may retrieve the latest version of this file at the Project JEDI         }
 
18
{ APILIB home page, located at http://jedi-apilib.sourceforge.net              }
 
19
{                                                                              }
 
20
{ The contents of this file are used with permission, subject to the Mozilla   }
 
21
{ Public License Version 1.1 (the "License"); you may not use this file except }
 
22
{ in compliance with the License. You may obtain a copy of the License at      }
 
23
{ http://www.mozilla.org/MPL/MPL-1.1.html                                      }
 
24
{                                                                              }
 
25
{ Software distributed under the License is distributed on an "AS IS" basis,   }
 
26
{ WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
 
27
{ the specific language governing rights and limitations under the License.    }
 
28
{                                                                              }
 
29
{ Alternatively, the contents of this file may be used under the terms of the  }
 
30
{ GNU Lesser General Public License (the  "LGPL License"), in which case the   }
 
31
{ provisions of the LGPL License are applicable instead of those above.        }
 
32
{ If you wish to allow use of your version of this file only under the terms   }
 
33
{ of the LGPL License and not to allow others to use your version of this file }
 
34
{ under the MPL, indicate your decision by deleting  the provisions above and  }
 
35
{ replace  them with the notice and other provisions required by the LGPL      }
 
36
{ License.  If you do not delete the provisions above, a recipient may use     }
 
37
{ your version of this file under either the MPL or the LGPL License.          }
 
38
{                                                                              }
 
39
{ For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
 
40
{                                                                              }
 
41
{******************************************************************************}
 
42
 
 
43
 
 
44
unit JwaWinVer;
 
45
 
 
46
{$WEAKPACKAGEUNIT}
 
47
 
 
48
{$HPPEMIT ''}
 
49
{$HPPEMIT '#include "WinVer.h"'}
 
50
{$HPPEMIT ''}
 
51
 
 
52
{$I jediapilib.inc}
 
53
 
 
54
interface
 
55
 
 
56
uses
 
57
  JwaWinUser, JwaWinType; 
 
58
 
 
59
const
 
60
 
 
61
//  RT_VERSION = MAKEINTRESOURCE(16);
 
62
 
 
63
// ----- Symbols -----
 
64
 
 
65
  VS_FILE_INFO    = RT_VERSION;
 
66
  {$EXTERNALSYM VS_FILE_INFO}
 
67
  VS_VERSION_INFO = 1;
 
68
  {$EXTERNALSYM VS_VERSION_INFO}
 
69
  VS_USER_DEFINED = 100;
 
70
  {$EXTERNALSYM VS_USER_DEFINED}
 
71
 
 
72
// ----- VS_VERSION.dwFileFlags -----
 
73
 
 
74
  VS_FFI_SIGNATURE     = $FEEF04BD;
 
75
  {$EXTERNALSYM VS_FFI_SIGNATURE}
 
76
  VS_FFI_STRUCVERSION  = $00010000;
 
77
  {$EXTERNALSYM VS_FFI_STRUCVERSION}
 
78
  VS_FFI_FILEFLAGSMASK = $0000003F;
 
79
  {$EXTERNALSYM VS_FFI_FILEFLAGSMASK}
 
80
 
 
81
// ----- VS_VERSION.dwFileFlags -----
 
82
 
 
83
  VS_FF_DEBUG        = $00000001;
 
84
  {$EXTERNALSYM VS_FF_DEBUG}
 
85
  VS_FF_PRERELEASE   = $00000002;
 
86
  {$EXTERNALSYM VS_FF_PRERELEASE}
 
87
  VS_FF_PATCHED      = $00000004;
 
88
  {$EXTERNALSYM VS_FF_PATCHED}
 
89
  VS_FF_PRIVATEBUILD = $00000008;
 
90
  {$EXTERNALSYM VS_FF_PRIVATEBUILD}
 
91
  VS_FF_INFOINFERRED = $00000010;
 
92
  {$EXTERNALSYM VS_FF_INFOINFERRED}
 
93
  VS_FF_SPECIALBUILD = $00000020;
 
94
  {$EXTERNALSYM VS_FF_SPECIALBUILD}
 
95
 
 
96
// ----- VS_VERSION.dwFileOS -----
 
97
 
 
98
  VOS_UNKNOWN = $00000000;
 
99
  {$EXTERNALSYM VOS_UNKNOWN}
 
100
  VOS_DOS     = $00010000;
 
101
  {$EXTERNALSYM VOS_DOS}
 
102
  VOS_OS216   = $00020000;
 
103
  {$EXTERNALSYM VOS_OS216}
 
104
  VOS_OS232   = $00030000;
 
105
  {$EXTERNALSYM VOS_OS232}
 
106
  VOS_NT      = $00040000;
 
107
  {$EXTERNALSYM VOS_NT}
 
108
  VOS_WINCE   = $00050000;
 
109
  {$EXTERNALSYM VOS_WINCE}
 
110
 
 
111
  VOS__BASE      = $00000000;
 
112
  {$EXTERNALSYM VOS__BASE}
 
113
  VOS__WINDOWS16 = $00000001;
 
114
  {$EXTERNALSYM VOS__WINDOWS16}
 
115
  VOS__PM16      = $00000002;
 
116
  {$EXTERNALSYM VOS__PM16}
 
117
  VOS__PM32      = $00000003;
 
118
  {$EXTERNALSYM VOS__PM32}
 
119
  VOS__WINDOWS32 = $00000004;
 
120
  {$EXTERNALSYM VOS__WINDOWS32}
 
121
 
 
122
  VOS_DOS_WINDOWS16 = $00010001;
 
123
  {$EXTERNALSYM VOS_DOS_WINDOWS16}
 
124
  VOS_DOS_WINDOWS32 = $00010004;
 
125
  {$EXTERNALSYM VOS_DOS_WINDOWS32}
 
126
  VOS_OS216_PM16    = $00020002;
 
127
  {$EXTERNALSYM VOS_OS216_PM16}
 
128
  VOS_OS232_PM32    = $00030003;
 
129
  {$EXTERNALSYM VOS_OS232_PM32}
 
130
  VOS_NT_WINDOWS32  = $00040004;
 
131
  {$EXTERNALSYM VOS_NT_WINDOWS32}
 
132
 
 
133
// ----- VS_VERSION.dwFileType -----
 
134
 
 
135
  VFT_UNKNOWN    = $00000000;
 
136
  {$EXTERNALSYM VFT_UNKNOWN}
 
137
  VFT_APP        = $00000001;
 
138
  {$EXTERNALSYM VFT_APP}
 
139
  VFT_DLL        = $00000002;
 
140
  {$EXTERNALSYM VFT_DLL}
 
141
  VFT_DRV        = $00000003;
 
142
  {$EXTERNALSYM VFT_DRV}
 
143
  VFT_FONT       = $00000004;
 
144
  {$EXTERNALSYM VFT_FONT}
 
145
  VFT_VXD        = $00000005;
 
146
  {$EXTERNALSYM VFT_VXD}
 
147
  VFT_STATIC_LIB = $00000007;
 
148
  {$EXTERNALSYM VFT_STATIC_LIB}
 
149
 
 
150
// ----- VS_VERSION.dwFileSubtype for VFT_WINDOWS_DRV -----
 
151
 
 
152
  VFT2_UNKNOWN         = $00000000;
 
153
  {$EXTERNALSYM VFT2_UNKNOWN}
 
154
  VFT2_DRV_PRINTER     = $00000001;
 
155
  {$EXTERNALSYM VFT2_DRV_PRINTER}
 
156
  VFT2_DRV_KEYBOARD    = $00000002;
 
157
  {$EXTERNALSYM VFT2_DRV_KEYBOARD}
 
158
  VFT2_DRV_LANGUAGE    = $00000003;
 
159
  {$EXTERNALSYM VFT2_DRV_LANGUAGE}
 
160
  VFT2_DRV_DISPLAY     = $00000004;
 
161
  {$EXTERNALSYM VFT2_DRV_DISPLAY}
 
162
  VFT2_DRV_MOUSE       = $00000005;
 
163
  {$EXTERNALSYM VFT2_DRV_MOUSE}
 
164
  VFT2_DRV_NETWORK     = $00000006;
 
165
  {$EXTERNALSYM VFT2_DRV_NETWORK}
 
166
  VFT2_DRV_SYSTEM      = $00000007;
 
167
  {$EXTERNALSYM VFT2_DRV_SYSTEM}
 
168
  VFT2_DRV_INSTALLABLE = $00000008;
 
169
  {$EXTERNALSYM VFT2_DRV_INSTALLABLE}
 
170
  VFT2_DRV_SOUND       = $00000009;
 
171
  {$EXTERNALSYM VFT2_DRV_SOUND}
 
172
  VFT2_DRV_COMM        = $0000000A;
 
173
  {$EXTERNALSYM VFT2_DRV_COMM}
 
174
  VFT2_DRV_INPUTMETHOD = $0000000B;
 
175
  {$EXTERNALSYM VFT2_DRV_INPUTMETHOD}
 
176
  VFT2_DRV_VERSIONED_PRINTER = $0000000C;
 
177
  {$EXTERNALSYM VFT2_DRV_VERSIONED_PRINTER}
 
178
 
 
179
// ----- VS_VERSION.dwFileSubtype for VFT_WINDOWS_FONT -----
 
180
 
 
181
  VFT2_FONT_RASTER   = $00000001;
 
182
  {$EXTERNALSYM VFT2_FONT_RASTER}
 
183
  VFT2_FONT_VECTOR   = $00000002;
 
184
  {$EXTERNALSYM VFT2_FONT_VECTOR}
 
185
  VFT2_FONT_TRUETYPE = $00000003;
 
186
  {$EXTERNALSYM VFT2_FONT_TRUETYPE}
 
187
 
 
188
// ----- VerFindFile() flags -----
 
189
 
 
190
  VFFF_ISSHAREDFILE = $0001;
 
191
  {$EXTERNALSYM VFFF_ISSHAREDFILE}
 
192
 
 
193
  VFF_CURNEDEST     = $0001;
 
194
  {$EXTERNALSYM VFF_CURNEDEST}
 
195
  VFF_FILEINUSE     = $0002;
 
196
  {$EXTERNALSYM VFF_FILEINUSE}
 
197
  VFF_BUFFTOOSMALL  = $0004;
 
198
  {$EXTERNALSYM VFF_BUFFTOOSMALL}
 
199
 
 
200
// ----- VerInstallFile() flags -----
 
201
 
 
202
  VIFF_FORCEINSTALL  = $0001;
 
203
  {$EXTERNALSYM VIFF_FORCEINSTALL}
 
204
  VIFF_DONTDELETEOLD = $0002;
 
205
  {$EXTERNALSYM VIFF_DONTDELETEOLD}
 
206
 
 
207
  VIF_TEMPFILE = $00000001;
 
208
  {$EXTERNALSYM VIF_TEMPFILE}
 
209
  VIF_MISMATCH = $00000002;
 
210
  {$EXTERNALSYM VIF_MISMATCH}
 
211
  VIF_SRCOLD   = $00000004;
 
212
  {$EXTERNALSYM VIF_SRCOLD}
 
213
 
 
214
  VIF_DIFFLANG   = $00000008;
 
215
  {$EXTERNALSYM VIF_DIFFLANG}
 
216
  VIF_DIFFCODEPG = $00000010;
 
217
  {$EXTERNALSYM VIF_DIFFCODEPG}
 
218
  VIF_DIFFTYPE   = $00000020;
 
219
  {$EXTERNALSYM VIF_DIFFTYPE}
 
220
 
 
221
  VIF_WRITEPROT        = $00000040;
 
222
  {$EXTERNALSYM VIF_WRITEPROT}
 
223
  VIF_FILEINUSE        = $00000080;
 
224
  {$EXTERNALSYM VIF_FILEINUSE}
 
225
  VIF_OUTOFSPACE       = $00000100;
 
226
  {$EXTERNALSYM VIF_OUTOFSPACE}
 
227
  VIF_ACCESSVIOLATION  = $00000200;
 
228
  {$EXTERNALSYM VIF_ACCESSVIOLATION}
 
229
  VIF_SHARINGVIOLATION = $00000400;
 
230
  {$EXTERNALSYM VIF_SHARINGVIOLATION}
 
231
  VIF_CANNOTCREATE     = $00000800;
 
232
  {$EXTERNALSYM VIF_CANNOTCREATE}
 
233
  VIF_CANNOTDELETE     = $00001000;
 
234
  {$EXTERNALSYM VIF_CANNOTDELETE}
 
235
  VIF_CANNOTRENAME     = $00002000;
 
236
  {$EXTERNALSYM VIF_CANNOTRENAME}
 
237
  VIF_CANNOTDELETECUR  = $00004000;
 
238
  {$EXTERNALSYM VIF_CANNOTDELETECUR}
 
239
  VIF_OUTOFMEMORY      = $00008000;
 
240
  {$EXTERNALSYM VIF_OUTOFMEMORY}
 
241
 
 
242
  VIF_CANNOTREADSRC = $00010000;
 
243
  {$EXTERNALSYM VIF_CANNOTREADSRC}
 
244
  VIF_CANNOTREADDST = $00020000;
 
245
  {$EXTERNALSYM VIF_CANNOTREADDST}
 
246
 
 
247
  VIF_BUFFTOOSMALL      = $00040000;
 
248
  {$EXTERNALSYM VIF_BUFFTOOSMALL}
 
249
  VIF_CANNOTLOADLZ32    = $00080000;
 
250
  {$EXTERNALSYM VIF_CANNOTLOADLZ32}
 
251
  VIF_CANNOTLOADCABINET = $00100000;
 
252
  {$EXTERNALSYM VIF_CANNOTLOADCABINET}
 
253
 
 
254
// ----- Types and structures -----
 
255
 
 
256
type
 
257
  PVSFixedFileInfo = ^VS_FIXEDFILEINFO;
 
258
  tagVS_FIXEDFILEINFO = record
 
259
    dwSignature: DWORD;        // e.g. 0xfeef04bd
 
260
    dwStrucVersion: DWORD;     // e.g. 0x00000042 = "0.42"
 
261
    dwFileVersionMS: DWORD;    // e.g. 0x00030075 = "3.75"
 
262
    dwFileVersionLS: DWORD;    // e.g. 0x00000031 = "0.31"
 
263
    dwProductVersionMS: DWORD; // e.g. 0x00030010 = "3.10"
 
264
    dwProductVersionLS: DWORD; // e.g. 0x00000031 = "0.31"
 
265
    dwFileFlagsMask: DWORD;    // = 0x3F for version "0.42"
 
266
    dwFileFlags: DWORD;        // e.g. VFF_DEBUG | VFF_PRERELEASE
 
267
    dwFileOS: DWORD;           // e.g. VOS_DOS_WINDOWS16
 
268
    dwFileType: DWORD;         // e.g. VFT_DRIVER
 
269
    dwFileSubtype: DWORD;      // e.g. VFT2_DRV_KEYBOARD
 
270
    dwFileDateMS: DWORD;       // e.g. 0
 
271
    dwFileDateLS: DWORD;       // e.g. 0
 
272
  end;
 
273
  {$EXTERNALSYM tagVS_FIXEDFILEINFO}
 
274
  VS_FIXEDFILEINFO = tagVS_FIXEDFILEINFO;
 
275
  {$EXTERNALSYM VS_FIXEDFILEINFO}
 
276
  TVSFixedFileInfo = VS_FIXEDFILEINFO;
 
277
 
 
278
// ----- Function prototypes -----
 
279
 
 
280
function VerFindFileA(uFlags: DWORD; szFileName, szWinDir, szAppDir,
 
281
  szCurDir: LPSTR; var lpuCurDirLen: UINT; szDestDir: LPSTR;
 
282
  var lpuDestDirLen: UINT): DWORD; stdcall;
 
283
{$EXTERNALSYM VerFindFileA}
 
284
function VerFindFileW(uFlags: DWORD; szFileName, szWinDir, szAppDir,
 
285
  szCurDir: LPWSTR; var lpuCurDirLen: UINT; szDestDir: LPWSTR;
 
286
  var lpuDestDirLen: UINT): DWORD; stdcall;
 
287
{$EXTERNALSYM VerFindFileW}
 
288
function VerFindFile(uFlags: DWORD; szFileName, szWinDir, szAppDir,
 
289
  szCurDir: LPTSTR; var lpuCurDirLen: UINT; szDestDir: LPTSTR;
 
290
  var lpuDestDirLen: UINT): DWORD; stdcall;
 
291
{$EXTERNALSYM VerFindFile}
 
292
 
 
293
function VerInstallFileA(uFlags: DWORD; szSrcFileName, szDestFileName, szSrcDir,
 
294
  szDestDir, szCurDir, szTmpFile: LPSTR; var lpuTmpFileLen: UINT): DWORD; stdcall;
 
295
{$EXTERNALSYM VerInstallFileA}
 
296
function VerInstallFileW(uFlags: DWORD; szSrcFileName, szDestFileName, szSrcDir,
 
297
  szDestDir, szCurDir, szTmpFile: LPWSTR; var lpuTmpFileLen: UINT): DWORD; stdcall;
 
298
{$EXTERNALSYM VerInstallFileW}
 
299
function VerInstallFile(uFlags: DWORD; szSrcFileName, szDestFileName, szSrcDir,
 
300
  szDestDir, szCurDir, szTmpFile: LPTSTR; var lpuTmpFileLen: UINT): DWORD; stdcall;
 
301
{$EXTERNALSYM VerInstallFile}
 
302
 
 
303
// Returns size of version info in bytes
 
304
 
 
305
function GetFileVersionInfoSizeA(lptstrFilename: LPCSTR; var lpdwHandle: DWORD): DWORD; stdcall;
 
306
{$EXTERNALSYM GetFileVersionInfoSizeA}
 
307
function GetFileVersionInfoSizeW(lptstrFilename: LPCWSTR; var lpdwHandle: DWORD): DWORD; stdcall;
 
308
{$EXTERNALSYM GetFileVersionInfoSizeW}
 
309
function GetFileVersionInfoSize(lptstrFilename: LPCTSTR; var lpdwHandle: DWORD): DWORD; stdcall;
 
310
{$EXTERNALSYM GetFileVersionInfoSize}
 
311
 
 
312
// Read version info into buffer
 
313
 
 
314
function GetFileVersionInfoA(lptstrFilename: LPCSTR; dwHandle, dwLen: DWORD;
 
315
  lpData: LPVOID): BOOL; stdcall;
 
316
{$EXTERNALSYM GetFileVersionInfoA}
 
317
function GetFileVersionInfoW(lptstrFilename: LPCWSTR; dwHandle, dwLen: DWORD;
 
318
  lpData: LPVOID): BOOL; stdcall;
 
319
{$EXTERNALSYM GetFileVersionInfoW}
 
320
function GetFileVersionInfo(lptstrFilename: LPCTSTR; dwHandle, dwLen: DWORD;
 
321
  lpData: LPVOID): BOOL; stdcall;
 
322
{$EXTERNALSYM GetFileVersionInfo}
 
323
 
 
324
function VerLanguageNameA(wLang: DWORD; szLang: LPSTR; nSize: DWORD): DWORD; stdcall;
 
325
{$EXTERNALSYM VerLanguageNameA}
 
326
function VerLanguageNameW(wLang: DWORD; szLang: LPWSTR; nSize: DWORD): DWORD; stdcall;
 
327
{$EXTERNALSYM VerLanguageNameW}
 
328
function VerLanguageName(wLang: DWORD; szLang: LPTSTR; nSize: DWORD): DWORD; stdcall;
 
329
{$EXTERNALSYM VerLanguageName}
 
330
 
 
331
function VerQueryValueA(pBlock: LPVOID; lpSubBlock: LPSTR; var lplpBuffer: LPVOID;
 
332
  var puLen: UINT): BOOL; stdcall;
 
333
{$EXTERNALSYM VerQueryValueA}
 
334
function VerQueryValueW(pBlock: LPVOID; lpSubBlock: LPWSTR; var lplpBuffer: LPVOID;
 
335
  var puLen: UINT): BOOL; stdcall;
 
336
{$EXTERNALSYM VerQueryValueW}
 
337
function VerQueryValue(pBlock: LPVOID; lpSubBlock: LPTSTR; var lplpBuffer: LPVOID;
 
338
  var puLen: UINT): BOOL; stdcall;
 
339
{$EXTERNALSYM VerQueryValue}
 
340
 
 
341
implementation
 
342
 
 
343
const
 
344
  Version = 'version.dll';
 
345
  {$IFDEF UNICODE}
 
346
  AWSuffix = 'W';
 
347
  {$ELSE}
 
348
  AWSuffix = 'A';
 
349
  {$ENDIF UNICODE}
 
350
 
 
351
{$IFDEF DYNAMIC_LINK}
 
352
 
 
353
var
 
354
  _VerFindFileA: Pointer;
 
355
 
 
356
function VerFindFileA;
 
357
begin
 
358
  GetProcedureAddress(_VerFindFileA, Version, 'VerFindFileA');
 
359
  asm
 
360
        MOV     ESP, EBP
 
361
        POP     EBP
 
362
        JMP     [_VerFindFileA]
 
363
  end;
 
364
end;
 
365
 
 
366
var
 
367
  _VerFindFileW: Pointer;
 
368
 
 
369
function VerFindFileW;
 
370
begin
 
371
  GetProcedureAddress(_VerFindFileW, Version, 'VerFindFileW');
 
372
  asm
 
373
        MOV     ESP, EBP
 
374
        POP     EBP
 
375
        JMP     [_VerFindFileW]
 
376
  end;
 
377
end;
 
378
 
 
379
var
 
380
  _VerFindFile: Pointer;
 
381
 
 
382
function VerFindFile;
 
383
begin
 
384
  GetProcedureAddress(_VerFindFile, Version, 'VerFindFile' + AWSuffix);
 
385
  asm
 
386
        MOV     ESP, EBP
 
387
        POP     EBP
 
388
        JMP     [_VerFindFile]
 
389
  end;
 
390
end;
 
391
 
 
392
var
 
393
  _VerInstallFileA: Pointer;
 
394
 
 
395
function VerInstallFileA;
 
396
begin
 
397
  GetProcedureAddress(_VerInstallFileA, Version, 'VerInstallFileA');
 
398
  asm
 
399
        MOV     ESP, EBP
 
400
        POP     EBP
 
401
        JMP     [_VerInstallFileA]
 
402
  end;
 
403
end;
 
404
 
 
405
var
 
406
  _VerInstallFileW: Pointer;
 
407
 
 
408
function VerInstallFileW;
 
409
begin
 
410
  GetProcedureAddress(_VerInstallFileW, Version, 'VerInstallFileW');
 
411
  asm
 
412
        MOV     ESP, EBP
 
413
        POP     EBP
 
414
        JMP     [_VerInstallFileW]
 
415
  end;
 
416
end;
 
417
 
 
418
var
 
419
  _VerInstallFile: Pointer;
 
420
 
 
421
function VerInstallFile;
 
422
begin
 
423
  GetProcedureAddress(_VerInstallFile, Version, 'VerInstallFile' + AWSuffix);
 
424
  asm
 
425
        MOV     ESP, EBP
 
426
        POP     EBP
 
427
        JMP     [_VerInstallFile]
 
428
  end;
 
429
end;
 
430
 
 
431
var
 
432
  _GetFileVersionInfoSizeA: Pointer;
 
433
 
 
434
function GetFileVersionInfoSizeA;
 
435
begin
 
436
  GetProcedureAddress(_GetFileVersionInfoSizeA, Version, 'GetFileVersionInfoSizeA');
 
437
  asm
 
438
        MOV     ESP, EBP
 
439
        POP     EBP
 
440
        JMP     [_GetFileVersionInfoSizeA]
 
441
  end;
 
442
end;
 
443
 
 
444
var
 
445
  _GetFileVersionInfoSizeW: Pointer;
 
446
 
 
447
function GetFileVersionInfoSizeW;
 
448
begin
 
449
  GetProcedureAddress(_GetFileVersionInfoSizeW, Version, 'GetFileVersionInfoSizeW');
 
450
  asm
 
451
        MOV     ESP, EBP
 
452
        POP     EBP
 
453
        JMP     [_GetFileVersionInfoSizeW]
 
454
  end;
 
455
end;
 
456
 
 
457
var
 
458
  _GetFileVersionInfoSize: Pointer;
 
459
 
 
460
function GetFileVersionInfoSize;
 
461
begin
 
462
  GetProcedureAddress(_GetFileVersionInfoSize, Version, 'GetFileVersionInfoSize' + AWSuffix);
 
463
  asm
 
464
        MOV     ESP, EBP
 
465
        POP     EBP
 
466
        JMP     [_GetFileVersionInfoSize]
 
467
  end;
 
468
end;
 
469
 
 
470
var
 
471
  _GetFileVersionInfoA: Pointer;
 
472
 
 
473
function GetFileVersionInfoA;
 
474
begin
 
475
  GetProcedureAddress(_GetFileVersionInfoA, Version, 'GetFileVersionInfoA');
 
476
  asm
 
477
        MOV     ESP, EBP
 
478
        POP     EBP
 
479
        JMP     [_GetFileVersionInfoA]
 
480
  end;
 
481
end;
 
482
 
 
483
var
 
484
  _GetFileVersionInfoW: Pointer;
 
485
 
 
486
function GetFileVersionInfoW;
 
487
begin
 
488
  GetProcedureAddress(_GetFileVersionInfoW, Version, 'GetFileVersionInfoW');
 
489
  asm
 
490
        MOV     ESP, EBP
 
491
        POP     EBP
 
492
        JMP     [_GetFileVersionInfoW]
 
493
  end;
 
494
end;
 
495
 
 
496
var
 
497
  _GetFileVersionInfo: Pointer;
 
498
 
 
499
function GetFileVersionInfo;
 
500
begin
 
501
  GetProcedureAddress(_GetFileVersionInfo, Version, 'GetFileVersionInfo' + AWSuffix);
 
502
  asm
 
503
        MOV     ESP, EBP
 
504
        POP     EBP
 
505
        JMP     [_GetFileVersionInfo]
 
506
  end;
 
507
end;
 
508
 
 
509
var
 
510
  _VerLanguageNameA: Pointer;
 
511
 
 
512
function VerLanguageNameA;
 
513
begin
 
514
  GetProcedureAddress(_VerLanguageNameA, Version, 'VerLanguageNameA');
 
515
  asm
 
516
        MOV     ESP, EBP
 
517
        POP     EBP
 
518
        JMP     [_VerLanguageNameA]
 
519
  end;
 
520
end;
 
521
 
 
522
var
 
523
  _VerLanguageNameW: Pointer;
 
524
 
 
525
function VerLanguageNameW;
 
526
begin
 
527
  GetProcedureAddress(_VerLanguageNameW, Version, 'VerLanguageNameW');
 
528
  asm
 
529
        MOV     ESP, EBP
 
530
        POP     EBP
 
531
        JMP     [_VerLanguageNameW]
 
532
  end;
 
533
end;
 
534
 
 
535
var
 
536
  _VerLanguageName: Pointer;
 
537
 
 
538
function VerLanguageName;
 
539
begin
 
540
  GetProcedureAddress(_VerLanguageName, Version, 'VerLanguageName' + AWSuffix);
 
541
  asm
 
542
        MOV     ESP, EBP
 
543
        POP     EBP
 
544
        JMP     [_VerLanguageName]
 
545
  end;
 
546
end;
 
547
 
 
548
var
 
549
  _VerQueryValueA: Pointer;
 
550
 
 
551
function VerQueryValueA;
 
552
begin
 
553
  GetProcedureAddress(_VerQueryValueA, Version, 'VerQueryValueA');
 
554
  asm
 
555
        MOV     ESP, EBP
 
556
        POP     EBP
 
557
        JMP     [_VerQueryValueA]
 
558
  end;
 
559
end;
 
560
 
 
561
var
 
562
  _VerQueryValueW: Pointer;
 
563
 
 
564
function VerQueryValueW;
 
565
begin
 
566
  GetProcedureAddress(_VerQueryValueW, Version, 'VerQueryValueW');
 
567
  asm
 
568
        MOV     ESP, EBP
 
569
        POP     EBP
 
570
        JMP     [_VerQueryValueW]
 
571
  end;
 
572
end;
 
573
 
 
574
var
 
575
  _VerQueryValue: Pointer;
 
576
 
 
577
function VerQueryValue;
 
578
begin
 
579
  GetProcedureAddress(_VerQueryValue, Version, 'VerQueryValue' + AWSuffix);
 
580
  asm
 
581
        MOV     ESP, EBP
 
582
        POP     EBP
 
583
        JMP     [_VerQueryValue]
 
584
  end;
 
585
end;
 
586
 
 
587
{$ELSE}
 
588
 
 
589
function VerFindFileA; external Version name 'VerFindFileA';
 
590
function VerFindFileW; external Version name 'VerFindFileW';
 
591
function VerFindFile; external Version name 'VerFindFile' + AWSuffix;
 
592
function VerInstallFileA; external Version name 'VerInstallFileA';
 
593
function VerInstallFileW; external Version name 'VerInstallFileW';
 
594
function VerInstallFile; external Version name 'VerInstallFile' + AWSuffix;
 
595
function GetFileVersionInfoSizeA; external Version name 'GetFileVersionInfoSizeA';
 
596
function GetFileVersionInfoSizeW; external Version name 'GetFileVersionInfoSizeW';
 
597
function GetFileVersionInfoSize; external Version name 'GetFileVersionInfoSize' + AWSuffix;
 
598
function GetFileVersionInfoA; external Version name 'GetFileVersionInfoA';
 
599
function GetFileVersionInfoW; external Version name 'GetFileVersionInfoW';
 
600
function GetFileVersionInfo; external Version name 'GetFileVersionInfo' + AWSuffix;
 
601
function VerLanguageNameA; external Version name 'VerLanguageNameA';
 
602
function VerLanguageNameW; external Version name 'VerLanguageNameW';
 
603
function VerLanguageName; external Version name 'VerLanguageName' + AWSuffix;
 
604
function VerQueryValueA; external Version name 'VerQueryValueA';
 
605
function VerQueryValueW; external Version name 'VerQueryValueW';
 
606
function VerQueryValue; external Version name 'VerQueryValue' + AWSuffix;
 
607
 
 
608
{$ENDIF DYNAMIC_LINK}
 
609
 
 
610
end.