Statistiques
| Révision :

root / tmp / org.txm.setups / nsis-2.5 / Include / WinVer.nsh @ 3099

Historique | Voir | Annoter | Télécharger (13,93 ko)

1 2961 mdecorde
; ---------------------
2 2961 mdecorde
;      WinVer.nsh
3 2961 mdecorde
; ---------------------
4 2961 mdecorde
;
5 2961 mdecorde
; LogicLib extensions for handling Windows versions and service packs.
6 2961 mdecorde
;
7 2961 mdecorde
; IsNT checks if the installer is running on Windows NT family (NT4, 2000, XP, etc.)
8 2961 mdecorde
;
9 2961 mdecorde
;   ${If} ${IsNT}
10 2961 mdecorde
;     DetailPrint "Running on NT. Installing Unicode enabled application."
11 2961 mdecorde
;   ${Else}
12 2961 mdecorde
;     DetailPrint "Not running on NT. Installing ANSI application."
13 2961 mdecorde
;   ${EndIf}
14 2961 mdecorde
;
15 2961 mdecorde
; IsServer checks if the installer is running on a server version of Windows (NT4, 2003, 2008, etc.)
16 2961 mdecorde
;
17 2961 mdecorde
; AtLeastWin<version> checks if the installer is running on Windows version at least as specified.
18 2961 mdecorde
; IsWin<version> checks if the installer is running on Windows version exactly as specified.
19 2961 mdecorde
; AtMostWin<version> checks if the installer is running on Windows version at most as specified.
20 2961 mdecorde
;
21 2961 mdecorde
; <version> can be replaced with the following values:
22 2961 mdecorde
;
23 2961 mdecorde
;   95
24 2961 mdecorde
;   98
25 2961 mdecorde
;   ME
26 2961 mdecorde
;
27 2961 mdecorde
;   NT4
28 2961 mdecorde
;   2000
29 2961 mdecorde
;   XP
30 2961 mdecorde
;   2003
31 2961 mdecorde
;   Vista
32 2961 mdecorde
;   2008
33 2961 mdecorde
;   7
34 2961 mdecorde
;   2008R2
35 2961 mdecorde
;   8
36 2961 mdecorde
;   2012
37 2961 mdecorde
;
38 2961 mdecorde
; AtLeastServicePack checks if the installer is running on Windows service pack version at least as specified.
39 2961 mdecorde
; IsServicePack checks if the installer is running on Windows service pack version exactly as specified.
40 2961 mdecorde
; AtMostServicePack checks if the installer is running on Windows service version pack at most as specified.
41 2961 mdecorde
;
42 2961 mdecorde
; Usage examples:
43 2961 mdecorde
;
44 2961 mdecorde
;   ${If} ${IsNT}
45 2961 mdecorde
;   DetailPrint "Running on NT family."
46 2961 mdecorde
;   DetailPrint "Surely not running on 95, 98 or ME."
47 2961 mdecorde
;   ${AndIf} ${AtLeastWinNT4}
48 2961 mdecorde
;     DetailPrint "Running on NT4 or better. Could even be 2003."
49 2961 mdecorde
;   ${EndIf}
50 2961 mdecorde
;
51 2961 mdecorde
;   ${If} ${AtLeastWinXP}
52 2961 mdecorde
;     DetailPrint "Running on XP or better."
53 2961 mdecorde
;   ${EndIf}
54 2961 mdecorde
;
55 2961 mdecorde
;   ${If} ${IsWin2000}
56 2961 mdecorde
;     DetailPrint "Running on 2000."
57 2961 mdecorde
;   ${EndIf}
58 2961 mdecorde
;
59 2961 mdecorde
;   ${If} ${IsWin2000}
60 2961 mdecorde
;   ${AndIf} ${AtLeastServicePack} 3
61 2961 mdecorde
;   ${OrIf} ${AtLeastWinXP}
62 2961 mdecorde
;     DetailPrint "Running Win2000 SP3 or above"
63 2961 mdecorde
;   ${EndIf}
64 2961 mdecorde
;
65 2961 mdecorde
;   ${If} ${AtMostWinXP}
66 2961 mdecorde
;     DetailPrint "Running on XP or older. Surely not running on Vista. Maybe 98, or even 95."
67 2961 mdecorde
;   ${EndIf}
68 2961 mdecorde
;
69 2961 mdecorde
; Warning:
70 2961 mdecorde
;
71 2961 mdecorde
;   Windows 95 and NT both use the same version number. To avoid getting NT4 misidentified
72 2961 mdecorde
;   as Windows 95 and vice-versa or 98 as a version higher than NT4, always use IsNT to
73 2961 mdecorde
;   check if running on the NT family.
74 2961 mdecorde
;
75 2961 mdecorde
;     ${If} ${AtLeastWin95}
76 2961 mdecorde
;     ${And} ${AtMostWinME}
77 2961 mdecorde
;       DetailPrint "Running 95, 98 or ME."
78 2961 mdecorde
;       DetailPrint "Actually, maybe it's NT4?"
79 2961 mdecorde
;       ${If} ${IsNT}
80 2961 mdecorde
;         DetailPrint "Yes, it's NT4! oops..."
81 2961 mdecorde
;       ${Else}
82 2961 mdecorde
;         DetailPrint "Nope, not NT4. phew..."
83 2961 mdecorde
;       ${EndIf}
84 2961 mdecorde
;     ${EndIf}
85 2961 mdecorde
;
86 2961 mdecorde
;
87 2961 mdecorde
; Other useful extensions are:
88 2961 mdecorde
;
89 2961 mdecorde
;    * IsWin2003R2
90 2961 mdecorde
;    * IsStarterEdition
91 2961 mdecorde
;    * OSHasMediaCenter
92 2961 mdecorde
;    * OSHasTabletSupport
93 2961 mdecorde
;
94 2961 mdecorde
95 2961 mdecorde
!verbose push
96 2961 mdecorde
!verbose 3
97 2961 mdecorde
98 2961 mdecorde
!ifndef ___WINVER__NSH___
99 2961 mdecorde
!define ___WINVER__NSH___
100 2961 mdecorde
101 2961 mdecorde
!include LogicLib.nsh
102 2961 mdecorde
!include Util.nsh
103 2961 mdecorde
104 2961 mdecorde
# masks for our variables
105 2961 mdecorde
106 2961 mdecorde
!define _WINVER_VERXBIT  0x00000001
107 2961 mdecorde
!define _WINVER_MASKVMAJ 0x7F000000
108 2961 mdecorde
!define _WINVER_MASKVMIN 0x00FF0000
109 2961 mdecorde
110 2961 mdecorde
!define _WINVER_NTBIT    0x80000000
111 2961 mdecorde
!define _WINVER_NTMASK   0x7FFFFFFF
112 2961 mdecorde
!define _WINVER_NTSRVBIT 0x40000000
113 2961 mdecorde
!define _WINVER_MASKVBLD 0x0000FFFF
114 2961 mdecorde
!define _WINVER_MASKSP   0x000F0000
115 2961 mdecorde
116 2961 mdecorde
# possible variable values for different versions
117 2961 mdecorde
118 2961 mdecorde
!define WINVER_95_NT     0x04000000 ;4.00.0950
119 2961 mdecorde
!define WINVER_95        0x04000000 ;4.00.0950
120 2961 mdecorde
!define WINVER_98_NT     0x040a0000 ;4.10.1998
121 2961 mdecorde
!define WINVER_98        0x040a0000 ;4.10.1998
122 2961 mdecorde
;define WINVER_98SE      0x040a0000 ;4.10.2222
123 2961 mdecorde
!define WINVER_ME_NT     0x045a0000 ;4.90.3000
124 2961 mdecorde
!define WINVER_ME        0x045a0000 ;4.90.3000
125 2961 mdecorde
;define WINVER_NT3d51               ;3.51.1057
126 2961 mdecorde
!define WINVER_NT4_NT    0x84000000 ;4.00.1381
127 2961 mdecorde
!define WINVER_NT4       0x04000000 ;4.00.1381
128 2961 mdecorde
!define WINVER_2000_NT   0x85000000 ;5.00.2195
129 2961 mdecorde
!define WINVER_2000      0x05000000 ;5.00.2195
130 2961 mdecorde
!define WINVER_XP_NT     0x85010000 ;5.01.2600
131 2961 mdecorde
!define WINVER_XP        0x05010000 ;5.01.2600
132 2961 mdecorde
;define WINVER_XP64                 ;5.02.3790
133 2961 mdecorde
!define WINVER_2003_NT   0x85020000 ;5.02.3790
134 2961 mdecorde
!define WINVER_2003      0x05020000 ;5.02.3790
135 2961 mdecorde
!define WINVER_VISTA_NT  0x86000000 ;6.00.6000
136 2961 mdecorde
!define WINVER_VISTA     0x06000000 ;6.00.6000
137 2961 mdecorde
!define WINVER_2008_NT   0x86000001 ;6.00.6001
138 2961 mdecorde
!define WINVER_2008      0x06000001 ;6.00.6001
139 2961 mdecorde
!define WINVER_7_NT      0x86010000 ;6.01.7600
140 2961 mdecorde
!define WINVER_7         0x06010000 ;6.01.7600
141 2961 mdecorde
!define WINVER_2008R2_NT 0x86010001 ;6.01.7600
142 2961 mdecorde
!define WINVER_2008R2    0x06010001 ;6.01.7600
143 2961 mdecorde
!define WINVER_8_NT      0x86020000 ;6.02.9200
144 2961 mdecorde
!define WINVER_8         0x06020000 ;6.02.9200
145 2961 mdecorde
!define WINVER_2012_NT   0x86020001 ;6.02.9200
146 2961 mdecorde
!define WINVER_2012      0x06020001 ;6.02.9200
147 2961 mdecorde
148 2961 mdecorde
149 2961 mdecorde
# use this to make all nt > 9x
150 2961 mdecorde
151 2961 mdecorde
!ifdef WINVER_NT4_OVER_W95
152 2961 mdecorde
  !define __WINVERTMP ${WINVER_NT4}
153 2961 mdecorde
  !undef WINVER_NT4
154 2961 mdecorde
  !define /math WINVER_NT4 ${__WINVERTMP} | ${_WINVER_VERXBIT}
155 2961 mdecorde
  !undef __WINVERTMP
156 2961 mdecorde
!endif
157 2961 mdecorde
158 2961 mdecorde
# some definitions from header files
159 2961 mdecorde
160 2961 mdecorde
!define OSVERSIONINFOA_SIZE   148
161 2961 mdecorde
!define OSVERSIONINFOEXA_SIZE 156
162 2961 mdecorde
!define VER_PLATFORM_WIN32_NT 2
163 2961 mdecorde
!define VER_NT_WORKSTATION    1
164 2961 mdecorde
165 2961 mdecorde
!define SM_TABLETPC    86
166 2961 mdecorde
!define SM_MEDIACENTER 87
167 2961 mdecorde
!define SM_STARTER     88
168 2961 mdecorde
!define SM_SERVERR2    89
169 2961 mdecorde
170 2961 mdecorde
# variable declaration
171 2961 mdecorde
172 2961 mdecorde
!macro __WinVer_DeclareVars
173 2961 mdecorde
174 2961 mdecorde
  !ifndef __WINVER_VARS_DECLARED
175 2961 mdecorde
176 2961 mdecorde
    !define __WINVER_VARS_DECLARED
177 2961 mdecorde
178 2961 mdecorde
    Var /GLOBAL __WINVERV
179 2961 mdecorde
    Var /GLOBAL __WINVERSP
180 2961 mdecorde
181 2961 mdecorde
  !endif
182 2961 mdecorde
183 2961 mdecorde
!macroend
184 2961 mdecorde
185 2961 mdecorde
# lazy initialization macro
186 2961 mdecorde
187 2961 mdecorde
!ifmacrondef __WinVer_Call_GetVersionEx
188 2961 mdecorde
189 2961 mdecorde
  !macro __WinVer_Call_GetVersionEx STRUCT_SIZE
190 2961 mdecorde
191 2961 mdecorde
    System::Call '*$0(i ${STRUCT_SIZE})'
192 2961 mdecorde
    System::Call kernel32::GetVersionEx(ir0)i.r3
193 2961 mdecorde
194 2961 mdecorde
  !macroend
195 2961 mdecorde
196 2961 mdecorde
!endif
197 2961 mdecorde
198 2961 mdecorde
!macro __WinVer_InitVars
199 2961 mdecorde
  # variables
200 2961 mdecorde
  !insertmacro __WinVer_DeclareVars
201 2961 mdecorde
202 2961 mdecorde
  # only calculate version once
203 2961 mdecorde
  StrCmp $__WINVERV "" _winver_noveryet
204 2961 mdecorde
    Return
205 2961 mdecorde
  _winver_noveryet:
206 2961 mdecorde
207 2961 mdecorde
  # push used registers on the stack
208 2961 mdecorde
  Push $0
209 2961 mdecorde
  Push $1 ;maj
210 2961 mdecorde
  Push $2 ;min
211 2961 mdecorde
  Push $3 ;bld
212 2961 mdecorde
  Push $R0 ;temp
213 2961 mdecorde
214 2961 mdecorde
  # allocate memory
215 2961 mdecorde
  System::Alloc ${OSVERSIONINFOEXA_SIZE}
216 2961 mdecorde
  Pop $0
217 2961 mdecorde
218 2961 mdecorde
  # use OSVERSIONINFOEX
219 2961 mdecorde
  !insertmacro __WinVer_Call_GetVersionEx ${OSVERSIONINFOEXA_SIZE}
220 2961 mdecorde
221 2961 mdecorde
  IntCmp $3 0 "" _winver_ex _winver_ex
222 2961 mdecorde
    # OSVERSIONINFOEX not allowed (Win9x or NT4 w/SP < 6), use OSVERSIONINFO
223 2961 mdecorde
    !insertmacro __WinVer_Call_GetVersionEx ${OSVERSIONINFOA_SIZE}
224 2961 mdecorde
  _winver_ex:
225 2961 mdecorde
226 2961 mdecorde
  # get results from struct
227 2961 mdecorde
  System::Call '*$0(i.s,i.r1,i.r2,i.r3,i.s,&t128.s,&i2.s,&i2,&i2,&i1.s,&i1)'
228 2961 mdecorde
229 2961 mdecorde
  # free struct
230 2961 mdecorde
  System::Free $0
231 2961 mdecorde
232 2961 mdecorde
  # win9x has major and minor info in high word of dwBuildNumber - remove it
233 2961 mdecorde
  IntOp $3 $3 & 0xFFFF
234 2961 mdecorde
235 2961 mdecorde
  # get dwOSVersionInfoSize
236 2961 mdecorde
  Pop $R0
237 2961 mdecorde
238 2961 mdecorde
  # get dwPlatformId
239 2961 mdecorde
  Pop $0
240 2961 mdecorde
241 2961 mdecorde
  # NT?
242 2961 mdecorde
  IntCmp $0 ${VER_PLATFORM_WIN32_NT} "" _winver_notnt _winver_notnt
243 2961 mdecorde
    IntOp $__WINVERSP $__WINVERSP | ${_WINVER_NTBIT}
244 2961 mdecorde
    IntOp $__WINVERV  $__WINVERV  | ${_WINVER_NTBIT}
245 2961 mdecorde
  _winver_notnt:
246 2961 mdecorde
247 2961 mdecorde
  # get service pack information
248 2961 mdecorde
  IntCmp $0 ${VER_PLATFORM_WIN32_NT} _winver_nt "" _winver_nt  # win9x
249 2961 mdecorde
250 2961 mdecorde
    # get szCSDVersion
251 2961 mdecorde
    Pop $0
252 2961 mdecorde
253 2961 mdecorde
    # copy second char
254 2961 mdecorde
    StrCpy $0 $0 1 1
255 2961 mdecorde
256 2961 mdecorde
    # discard invalid wServicePackMajor and wProductType
257 2961 mdecorde
    Pop $R0
258 2961 mdecorde
    Pop $R0
259 2961 mdecorde
260 2961 mdecorde
    # switch
261 2961 mdecorde
    StrCmp $0 'A' "" +3
262 2961 mdecorde
      StrCpy $0 1
263 2961 mdecorde
      Goto _winver_sp_done
264 2961 mdecorde
    StrCmp $0 'B' "" +3
265 2961 mdecorde
      StrCpy $0 2
266 2961 mdecorde
      Goto _winver_sp_done
267 2961 mdecorde
    StrCmp $0 'C' "" +3
268 2961 mdecorde
      StrCpy $0 3
269 2961 mdecorde
      Goto _winver_sp_done
270 2961 mdecorde
    StrCpy $0 0
271 2961 mdecorde
    Goto _winver_sp_done
272 2961 mdecorde
273 2961 mdecorde
  _winver_nt: # nt
274 2961 mdecorde
275 2961 mdecorde
    IntCmp $R0 ${OSVERSIONINFOEXA_SIZE} "" _winver_sp_noex _winver_sp_noex
276 2961 mdecorde
277 2961 mdecorde
      # discard szCSDVersion
278 2961 mdecorde
      Pop $0
279 2961 mdecorde
280 2961 mdecorde
      # get wProductType
281 2961 mdecorde
      Exch
282 2961 mdecorde
      Pop $0
283 2961 mdecorde
284 2961 mdecorde
      # is server?
285 2961 mdecorde
      IntCmp $0 ${VER_NT_WORKSTATION} _winver_noserver _winver_noserver ""
286 2961 mdecorde
        IntOp $__WINVERSP $__WINVERSP | ${_WINVER_NTSRVBIT}
287 2961 mdecorde
      _winver_noserver:
288 2961 mdecorde
289 2961 mdecorde
      # get wServicePackMajor
290 2961 mdecorde
      Pop $0
291 2961 mdecorde
292 2961 mdecorde
      # done with sp
293 2961 mdecorde
      Goto _winver_sp_done
294 2961 mdecorde
295 2961 mdecorde
    _winver_sp_noex: # OSVERSIONINFO, not OSVERSIONINFOEX
296 2961 mdecorde
297 2961 mdecorde
      ####  TODO
298 2961 mdecorde
      ## For IsServer to support < NT4SP6, we need to check the registry
299 2961 mdecorde
      ## here to see if we are a server and/or DC
300 2961 mdecorde
301 2961 mdecorde
      # get szCSDVersion
302 2961 mdecorde
      Pop $0
303 2961 mdecorde
304 2961 mdecorde
      # discard invalid wServicePackMajor and wProductType
305 2961 mdecorde
      Pop $R0
306 2961 mdecorde
      Pop $R0
307 2961 mdecorde
308 2961 mdecorde
      # get service pack number from text
309 2961 mdecorde
      StrCpy $R0 $0 13
310 2961 mdecorde
      StrCmp $R0 "Service Pack " "" +3
311 2961 mdecorde
        StrCpy $0 $0 "" 13 # cut "Service Pack "
312 2961 mdecorde
        Goto +2
313 2961 mdecorde
        StrCpy $0 0 # no service pack
314 2961 mdecorde
315 2961 mdecorde
!ifdef WINVER_NT4_OVER_W95
316 2961 mdecorde
      IntOp $__WINVERV $__WINVERV | ${_WINVER_VERXBIT}
317 2961 mdecorde
!endif
318 2961 mdecorde
319 2961 mdecorde
  _winver_sp_done:
320 2961 mdecorde
321 2961 mdecorde
  # store service pack
322 2961 mdecorde
  IntOp $0 $0 << 16
323 2961 mdecorde
  IntOp $__WINVERSP $__WINVERSP | $0
324 2961 mdecorde
325 2961 mdecorde
  ### now for the version
326 2961 mdecorde
327 2961 mdecorde
  # is server?
328 2961 mdecorde
  IntOp $0 $__WINVERSP & ${_WINVER_NTSRVBIT}
329 2961 mdecorde
330 2961 mdecorde
  # windows xp x64?
331 2961 mdecorde
  IntCmp $0 0 "" _winver_not_xp_x64 _winver_not_xp_x64 # not server
332 2961 mdecorde
  IntCmp $1 5 "" _winver_not_xp_x64 _winver_not_xp_x64 # maj 5
333 2961 mdecorde
  IntCmp $2 2 "" _winver_not_xp_x64 _winver_not_xp_x64 # min 2
334 2961 mdecorde
    # change XP x64 from 5.2 to 5.1 so it's still XP
335 2961 mdecorde
    StrCpy $2 1
336 2961 mdecorde
  _winver_not_xp_x64:
337 2961 mdecorde
338 2961 mdecorde
  # server 2008?
339 2961 mdecorde
  IntCmp $0 0 _winver_not_ntserver # server
340 2961 mdecorde
  IntCmp 6 $1 "" "" _winver_not_ntserver # maj 6
341 2961 mdecorde
    # extra bit so Server 2008 comes after Vista SP1 that has the same minor version, same for Win7 vs 2008R2
342 2961 mdecorde
    IntOp $__WINVERV $__WINVERV | ${_WINVER_VERXBIT}
343 2961 mdecorde
  _winver_not_ntserver:
344 2961 mdecorde
345 2961 mdecorde
  # pack version
346 2961 mdecorde
  IntOp $1 $1 << 24 # VerMajor
347 2961 mdecorde
  IntOp $__WINVERV $__WINVERV | $1
348 2961 mdecorde
  IntOp $0 $2 << 16
349 2961 mdecorde
  IntOp $__WINVERV $__WINVERV | $0 # VerMinor
350 2961 mdecorde
  IntOp $__WINVERSP $__WINVERSP | $3 # VerBuild
351 2961 mdecorde
352 2961 mdecorde
  # restore registers
353 2961 mdecorde
  Pop $R0
354 2961 mdecorde
  Pop $3
355 2961 mdecorde
  Pop $2
356 2961 mdecorde
  Pop $1
357 2961 mdecorde
  Pop $0
358 2961 mdecorde
359 2961 mdecorde
!macroend
360 2961 mdecorde
361 2961 mdecorde
# version comparison LogicLib macros
362 2961 mdecorde
363 2961 mdecorde
!macro _WinVerAtLeast _a _b _t _f
364 2961 mdecorde
  !insertmacro _LOGICLIB_TEMP
365 2961 mdecorde
  ${CallArtificialFunction} __WinVer_InitVars
366 2961 mdecorde
  IntOp $_LOGICLIB_TEMP $__WINVERV & ${_WINVER_NTMASK}
367 2961 mdecorde
  !insertmacro _>= $_LOGICLIB_TEMP `${_b}` `${_t}` `${_f}`
368 2961 mdecorde
!macroend
369 2961 mdecorde
!macro _WinVerIs _a _b _t _f
370 2961 mdecorde
  ${CallArtificialFunction} __WinVer_InitVars
371 2961 mdecorde
  !insertmacro _= $__WINVERV `${_b}` `${_t}` `${_f}`
372 2961 mdecorde
!macroend
373 2961 mdecorde
!macro _WinVerAtMost _a _b _t _f
374 2961 mdecorde
  !insertmacro _LOGICLIB_TEMP
375 2961 mdecorde
  ${CallArtificialFunction} __WinVer_InitVars
376 2961 mdecorde
  IntOp $_LOGICLIB_TEMP $__WINVERV & ${_WINVER_NTMASK}
377 2961 mdecorde
  !insertmacro _<= $_LOGICLIB_TEMP `${_b}` `${_t}` `${_f}`
378 2961 mdecorde
!macroend
379 2961 mdecorde
380 2961 mdecorde
!macro __WinVer_DefineOSTest Test OS Suffix
381 2961 mdecorde
  !define ${Test}Win${OS} `"" WinVer${Test} ${WINVER_${OS}${Suffix}}`
382 2961 mdecorde
!macroend
383 2961 mdecorde
384 2961 mdecorde
!macro __WinVer_DefineOSTests Test Suffix
385 2961 mdecorde
  !insertmacro __WinVer_DefineOSTest ${Test} 95     '${Suffix}'
386 2961 mdecorde
  !insertmacro __WinVer_DefineOSTest ${Test} 98     '${Suffix}'
387 2961 mdecorde
  !insertmacro __WinVer_DefineOSTest ${Test} ME     '${Suffix}'
388 2961 mdecorde
  !insertmacro __WinVer_DefineOSTest ${Test} NT4    '${Suffix}'
389 2961 mdecorde
  !insertmacro __WinVer_DefineOSTest ${Test} 2000   '${Suffix}'
390 2961 mdecorde
  !insertmacro __WinVer_DefineOSTest ${Test} XP     '${Suffix}'
391 2961 mdecorde
  !insertmacro __WinVer_DefineOSTest ${Test} 2003   '${Suffix}'
392 2961 mdecorde
  !insertmacro __WinVer_DefineOSTest ${Test} VISTA  '${Suffix}'
393 2961 mdecorde
  !insertmacro __WinVer_DefineOSTest ${Test} 2008   '${Suffix}'
394 2961 mdecorde
  !insertmacro __WinVer_DefineOSTest ${Test} 7      '${Suffix}'
395 2961 mdecorde
  !insertmacro __WinVer_DefineOSTest ${Test} 2008R2 '${Suffix}'
396 2961 mdecorde
  !insertmacro __WinVer_DefineOSTest ${Test} 8      '${Suffix}'
397 2961 mdecorde
  !insertmacro __WinVer_DefineOSTest ${Test} 2012   '${Suffix}'
398 2961 mdecorde
!macroend
399 2961 mdecorde
400 2961 mdecorde
!insertmacro __WinVer_DefineOSTests AtLeast ""
401 2961 mdecorde
!insertmacro __WinVer_DefineOSTests Is _NT
402 2961 mdecorde
!insertmacro __WinVer_DefineOSTests AtMost ""
403 2961 mdecorde
404 2961 mdecorde
# version feature LogicLib macros
405 2961 mdecorde
406 2961 mdecorde
!macro _IsNT _a _b _t _f
407 2961 mdecorde
  !insertmacro _LOGICLIB_TEMP
408 2961 mdecorde
  ${CallArtificialFunction} __WinVer_InitVars
409 2961 mdecorde
  IntOp $_LOGICLIB_TEMP $__WINVERSP & ${_WINVER_NTBIT}
410 2961 mdecorde
  !insertmacro _!= $_LOGICLIB_TEMP 0 `${_t}` `${_f}`
411 2961 mdecorde
!macroend
412 2961 mdecorde
!define IsNT `"" IsNT ""`
413 2961 mdecorde
414 2961 mdecorde
!macro _IsServerOS _a _b _t _f
415 2961 mdecorde
  !insertmacro _LOGICLIB_TEMP
416 2961 mdecorde
  ${CallArtificialFunction} __WinVer_InitVars
417 2961 mdecorde
  IntOp $_LOGICLIB_TEMP $__WINVERSP & ${_WINVER_NTSRVBIT}
418 2961 mdecorde
  !insertmacro _!= $_LOGICLIB_TEMP 0 `${_t}` `${_f}`
419 2961 mdecorde
!macroend
420 2961 mdecorde
!define IsServerOS `"" IsServerOS ""`
421 2961 mdecorde
422 2961 mdecorde
# service pack macros
423 2961 mdecorde
424 2961 mdecorde
!macro _WinVer_GetServicePackLevel OUTVAR
425 2961 mdecorde
  ${CallArtificialFunction} __WinVer_InitVars
426 2961 mdecorde
  IntOp ${OUTVAR} $__WINVERSP & ${_WINVER_MASKSP}
427 2961 mdecorde
  IntOp ${OUTVAR} ${OUTVAR} >> 16
428 2961 mdecorde
!macroend
429 2961 mdecorde
!define WinVerGetServicePackLevel '!insertmacro _WinVer_GetServicePackLevel '
430 2961 mdecorde
431 2961 mdecorde
!macro _AtLeastServicePack _a _b _t _f
432 2961 mdecorde
  !insertmacro _LOGICLIB_TEMP
433 2961 mdecorde
  ${WinVerGetServicePackLevel} $_LOGICLIB_TEMP
434 2961 mdecorde
  !insertmacro _>= $_LOGICLIB_TEMP `${_b}` `${_t}` `${_f}`
435 2961 mdecorde
!macroend
436 2961 mdecorde
!define AtLeastServicePack `"" AtLeastServicePack`
437 2961 mdecorde
438 2961 mdecorde
!macro _AtMostServicePack _a _b _t _f
439 2961 mdecorde
  !insertmacro _LOGICLIB_TEMP
440 2961 mdecorde
  ${WinVerGetServicePackLevel} $_LOGICLIB_TEMP
441 2961 mdecorde
  !insertmacro _<= $_LOGICLIB_TEMP `${_b}` `${_t}` `${_f}`
442 2961 mdecorde
!macroend
443 2961 mdecorde
!define AtMostServicePack `"" AtMostServicePack`
444 2961 mdecorde
445 2961 mdecorde
!macro _IsServicePack _a _b _t _f
446 2961 mdecorde
  !insertmacro _LOGICLIB_TEMP
447 2961 mdecorde
  ${WinVerGetServicePackLevel} $_LOGICLIB_TEMP
448 2961 mdecorde
  !insertmacro _= $_LOGICLIB_TEMP `${_b}` `${_t}` `${_f}`
449 2961 mdecorde
!macroend
450 2961 mdecorde
!define IsServicePack `"" IsServicePack`
451 2961 mdecorde
452 2961 mdecorde
# special feature LogicLib macros
453 2961 mdecorde
454 2961 mdecorde
!macro _WinVer_SysMetricCheck m _b _t _f
455 2961 mdecorde
  !insertmacro _LOGICLIB_TEMP
456 2961 mdecorde
  System::Call user32::GetSystemMetrics(i${m})i.s
457 2961 mdecorde
  pop $_LOGICLIB_TEMP
458 2961 mdecorde
  !insertmacro _!= $_LOGICLIB_TEMP 0 `${_t}` `${_f}`
459 2961 mdecorde
!macroend
460 2961 mdecorde
461 2961 mdecorde
!define IsWin2003R2        `${SM_SERVERR2}    WinVer_SysMetricCheck ""`
462 2961 mdecorde
!define IsStarterEdition   `${SM_STARTER}     WinVer_SysMetricCheck ""`
463 2961 mdecorde
!define OSHasMediaCenter   `${SM_MEDIACENTER} WinVer_SysMetricCheck ""`
464 2961 mdecorde
!define OSHasTabletSupport `${SM_TABLETPC}    WinVer_SysMetricCheck ""`
465 2961 mdecorde
466 2961 mdecorde
# version retrieval macros
467 2961 mdecorde
468 2961 mdecorde
!macro __WinVer_GetVer var rshift mask outvar
469 2961 mdecorde
  ${CallArtificialFunction} __WinVer_InitVars
470 2961 mdecorde
  !if "${mask}" != ""
471 2961 mdecorde
    IntOp ${outvar} ${var} & ${mask}
472 2961 mdecorde
    !if "${rshift}" != ""
473 2961 mdecorde
      IntOp ${outvar} ${outvar} >> ${rshift}
474 2961 mdecorde
    !endif
475 2961 mdecorde
  !else
476 2961 mdecorde
    IntOp ${outvar} ${var} >> ${rshift}
477 2961 mdecorde
  !endif
478 2961 mdecorde
!macroend
479 2961 mdecorde
480 2961 mdecorde
!define WinVerGetMajor '!insertmacro __WinVer_GetVer $__WINVERV  24 ${_WINVER_MASKVMAJ}'
481 2961 mdecorde
!define WinVerGetMinor '!insertmacro __WinVer_GetVer $__WINVERV  16 ${_WINVER_MASKVMIN}'
482 2961 mdecorde
!define WinVerGetBuild '!insertmacro __WinVer_GetVer $__WINVERSP "" ${_WINVER_MASKVBLD}'
483 2961 mdecorde
484 2961 mdecorde
# done
485 2961 mdecorde
486 2961 mdecorde
!endif # !___WINVER__NSH___
487 2961 mdecorde
488 2961 mdecorde
!verbose pop